From c4fe96968146e490bbe68fbb4949ef63f55fa3b3 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 26 Sep 2016 16:03:28 -0700 Subject: [PATCH 001/467] Moving all error-reporting files into subdirectory. Done via: $ mkdir -p error_reporting/google/cloud $ cp google/__init__.py error_reporting/google/__init__.py $ git add error_reporting/google/__init__.py $ cp google/cloud/__init__.py error_reporting/google/cloud/__init__.py $ git add error_reporting/google/cloud/__init__.py $ git mv google/cloud/error_reporting error_reporting/google/cloud/error_reporting $ git mv unit_tests/error_reporting error_reporting/unit_tests --- .../google/__init__.py | 20 ++ .../google/cloud/__init__.py | 20 ++ .../google/cloud/error_reporting/__init__.py | 18 ++ .../google/cloud/error_reporting/client.py | 251 ++++++++++++++++++ .../unit_tests/__init__.py | 13 + .../unit_tests/test_client.py | 151 +++++++++++ 6 files changed, 473 insertions(+) create mode 100644 packages/google-cloud-error-reporting/google/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py create mode 100644 packages/google-cloud-error-reporting/unit_tests/__init__.py create mode 100644 packages/google-cloud-error-reporting/unit_tests/test_client.py diff --git a/packages/google-cloud-error-reporting/google/__init__.py b/packages/google-cloud-error-reporting/google/__init__.py new file mode 100644 index 000000000000..b2b833373882 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/__init__.py @@ -0,0 +1,20 @@ +# Copyright 2016 Google Inc. +# +# 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. + +try: + import pkg_resources + pkg_resources.declare_namespace(__name__) +except ImportError: + import pkgutil + __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/packages/google-cloud-error-reporting/google/cloud/__init__.py b/packages/google-cloud-error-reporting/google/cloud/__init__.py new file mode 100644 index 000000000000..8ac7b74af136 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/__init__.py @@ -0,0 +1,20 @@ +# Copyright 2014 Google Inc. +# +# 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. + +try: + import pkg_resources + pkg_resources.declare_namespace(__name__) +except ImportError: + import pkgutil + __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py new file mode 100644 index 000000000000..26748ebac58c --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py @@ -0,0 +1,18 @@ +# Copyright 2016 Google Inc. +# +# 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. + +"""Client library for Stackdriver Error Reporting""" + + +from google.cloud.error_reporting.client import Client diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py new file mode 100644 index 000000000000..19cf539bf15a --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -0,0 +1,251 @@ +# Copyright 2016 Google Inc. +# +# 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. + +"""Client for interacting with the Stackdriver Logging API""" + +import traceback + +import google.cloud.logging.client +import six + + +class HTTPContext(object): + """HTTPContext defines an object that captures the parameter for the + httpRequest part of Error Reporting API + + :type method: string + :param method: The type of HTTP request, such as GET, POST, etc. + + :type url: string + :param url: The URL of the request + + :type user_agent: string + :param user_agent: The user agent information that is provided with the + request. + + :type referrer: string + :param referrer: The referrer information that is provided with the + request. + + :type response_status_code: int + :param response_status_code: The HTTP response status code for the request. + + :type remote_ip: string + :param remote_ip: The IP address from which the request originated. This + can be IPv4, IPv6, or a token which is derived from + the IP address, depending on the data that has been + provided in the error report. + """ + + def __init__(self, method=None, url=None, + user_agent=None, referrer=None, + response_status_code=None, remote_ip=None): + self.method = method + self.url = url + # intentionally camel case for mapping to JSON API expects + # pylint: disable=invalid-name + self.userAgent = user_agent + self.referrer = referrer + self.responseStatusCode = response_status_code + self.remoteIp = remote_ip + + +class Client(object): + """Error Reporting client. Currently Error Reporting is done by creating + a Logging client. + + :type project: string + :param project: the project which the client acts on behalf of. If not + passed falls back to the default inferred from the + environment. + + :type credentials: :class:`oauth2client.client.OAuth2Credentials` or + :class:`NoneType` + :param credentials: The OAuth2 Credentials to use for the connection + owned by this client. If not passed (and if no ``http`` + object is passed), falls back to the default inferred + from the environment. + + :type http: :class:`httplib2.Http` or class that defines ``request()``. + :param http: An optional HTTP object to make requests. If not passed, an + ``http`` object is created that is bound to the + ``credentials`` for the current object. + + :type service: str + :param service: An identifier of the service, such as the name of the + executable, job, or Google App Engine service name. This + field is expected to have a low number of values that are + relatively stable over time, as opposed to version, + which can be changed whenever new code is deployed. + + + :type version: str + :param version: Represents the source code version that the developer + provided, which could represent a version label or a Git + SHA-1 hash, for example. If the developer did not provide + a version, the value is set to default. + + :raises: :class:`ValueError` if the project is neither passed in nor + set in the environment. + """ + + def __init__(self, project=None, + credentials=None, + http=None, + service=None, + version=None): + self.logging_client = google.cloud.logging.client.Client( + project, credentials, http) + self.service = service if service else self.DEFAULT_SERVICE + self.version = version + + DEFAULT_SERVICE = 'python' + + def _send_error_report(self, message, + report_location=None, http_context=None, user=None): + """Makes the call to the Error Reporting API via the log stream. + + This is the lower-level interface to build the payload, generally + users will use either report() or report_exception() to automatically + gather the parameters for this method. + + Currently this method sends the Error Report by formatting a structured + log message according to + + https://cloud.google.com/error-reporting/docs/formatting-error-messages + + :type message: string + :param message: The stack trace that was reported or logged by the + service. + + :type report_location: dict + :param report_location: The location in the source code where the + decision was made to report the error, usually the place + where it was logged. For a logged exception this would be the + source line where the exception is logged, usually close to + the place where it was caught. + + This should be a Python dict that contains the keys 'filePath', + 'lineNumber', and 'functionName' + + :type http_context: :class`google.cloud.error_reporting.HTTPContext` + :param http_context: The HTTP request which was processed when the + error was triggered. + + :type user: string + :param user: The user who caused or was affected by the crash. This can + be a user ID, an email address, or an arbitrary token that + uniquely identifies the user. When sending an error + report, leave this field empty if the user was not + logged in. In this case the Error Reporting system will + use other data, such as remote IP address, + to distinguish affected users. + """ + payload = { + 'serviceContext': { + 'service': self.service, + }, + 'message': '{0}'.format(message) + } + + if self.version: + payload['serviceContext']['version'] = self.version + + if report_location or http_context or user: + payload['context'] = {} + + if report_location: + payload['context']['reportLocation'] = report_location + + if http_context: + http_context_dict = http_context.__dict__ + # strip out None values + payload['context']['httpContext'] = { + key: value for key, value in six.iteritems(http_context_dict) + if value is not None + } + + if user: + payload['context']['user'] = user + + logger = self.logging_client.logger('errors') + logger.log_struct(payload) + + def report(self, message, http_context=None, user=None): + """ Reports a message to Stackdriver Error Reporting + https://cloud.google.com/error-reporting/docs/formatting-error-messages + + :type message: str + :param message: A user-supplied message to report + + + :type http_context: :class`google.cloud.error_reporting.HTTPContext` + :param http_context: The HTTP request which was processed when the + error was triggered. + + :type user: string + :param user: The user who caused or was affected by the crash. This + can be a user ID, an email address, or an arbitrary + token that uniquely identifies the user. When sending + an error report, leave this field empty if the user + was not logged in. In this case the Error Reporting + system will use other data, such as remote IP address, + to distinguish affected users. + + Example:: + >>> client.report("Something went wrong!") + """ + stack = traceback.extract_stack() + last_call = stack[-2] + file_path = last_call[0] + line_number = last_call[1] + function_name = last_call[2] + report_location = { + 'filePath': file_path, + 'lineNumber': line_number, + 'functionName': function_name + } + + self._send_error_report(message, + http_context=http_context, + user=user, + report_location=report_location) + + def report_exception(self, http_context=None, user=None): + """ Reports the details of the latest exceptions to Stackdriver Error + Reporting. + + :type http_context: :class`google.cloud.error_reporting.HTTPContext` + :param http_context: The HTTP request which was processed when the + error was triggered. + + :type user: string + :param user: The user who caused or was affected by the crash. This + can be a user ID, an email address, or an arbitrary + token that uniquely identifies the user. When sending an + error report, leave this field empty if the user was + not logged in. In this case the Error Reporting system + will use other data, such as remote IP address, + to distinguish affected users. + + Example:: + + >>> try: + >>> raise NameError + >>> except Exception: + >>> client.report_exception() + """ + self._send_error_report(traceback.format_exc(), + http_context=http_context, + user=user) diff --git a/packages/google-cloud-error-reporting/unit_tests/__init__.py b/packages/google-cloud-error-reporting/unit_tests/__init__.py new file mode 100644 index 000000000000..58e0d9153632 --- /dev/null +++ b/packages/google-cloud-error-reporting/unit_tests/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2016 Google Inc. +# +# 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. diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py new file mode 100644 index 000000000000..a3a54f0c89dc --- /dev/null +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -0,0 +1,151 @@ +# Copyright 2016 Google Inc. +# +# 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 unittest + + +class TestClient(unittest.TestCase): + + def _getTargetClass(self): + from google.cloud.error_reporting.client import Client + return Client + + def _getHttpContext(self): + from google.cloud.error_reporting.client import HTTPContext + return HTTPContext + + def _makeOne(self, *args, **kw): + return self._getTargetClass()(*args, **kw) + + def _makeHTTP(self, *args, **kw): + return self._getHttpContext()(*args, **kw) + + PROJECT = 'PROJECT' + SERVICE = 'SERVICE' + VERSION = 'myversion' + + def test_ctor_default(self): + CREDENTIALS = _Credentials() + target = self._makeOne(project=self.PROJECT, + credentials=CREDENTIALS) + self.assertEquals(target.service, target.DEFAULT_SERVICE) + self.assertEquals(target.version, None) + + def test_ctor_params(self): + CREDENTIALS = _Credentials() + target = self._makeOne(project=self.PROJECT, + credentials=CREDENTIALS, + service=self.SERVICE, + version=self.VERSION) + self.assertEquals(target.service, self.SERVICE) + self.assertEquals(target.version, self.VERSION) + + def test_report_exception(self): + CREDENTIALS = _Credentials() + target = self._makeOne(project=self.PROJECT, + credentials=CREDENTIALS) + + logger = _Logger() + target.logging_client.logger = lambda _: logger + + try: + raise NameError + except NameError: + target.report_exception() + + payload = logger.log_struct_called_with + self.assertEquals(payload['serviceContext'], { + 'service': target.DEFAULT_SERVICE, + }) + self.assertIn('test_report', payload['message']) + self.assertIn('test_client.py', payload['message']) + + def test_report_exception_with_service_version_in_constructor(self): + CREDENTIALS = _Credentials() + SERVICE = "notdefault" + VERSION = "notdefaultversion" + target = self._makeOne(project=self.PROJECT, + credentials=CREDENTIALS, + service=SERVICE, + version=VERSION) + + logger = _Logger() + target.logging_client.logger = lambda _: logger + + http_context = self._makeHTTP(method="GET", response_status_code=500) + USER = "user@gmail.com" + + try: + raise NameError + except NameError: + target.report_exception(http_context=http_context, user=USER) + + payload = logger.log_struct_called_with + self.assertEquals(payload['serviceContext'], { + 'service': SERVICE, + 'version': VERSION + }) + self.assertIn( + 'test_report_exception_with_service_version_in_constructor', + payload['message']) + self.assertIn('test_client.py', payload['message']) + self.assertEquals( + payload['context']['httpContext']['responseStatusCode'], 500) + self.assertEquals( + payload['context']['httpContext']['method'], 'GET') + self.assertEquals(payload['context']['user'], USER) + + def test_report(self): + CREDENTIALS = _Credentials() + target = self._makeOne(project=self.PROJECT, + credentials=CREDENTIALS) + + logger = _Logger() + target.logging_client.logger = lambda _: logger + + MESSAGE = 'this is an error' + target.report(MESSAGE) + + payload = logger.log_struct_called_with + self.assertEquals(payload['message'], MESSAGE) + report_location = payload['context']['reportLocation'] + self.assertIn('test_client.py', report_location['filePath']) + self.assertEqual(report_location['functionName'], 'test_report') + self.assertGreater(report_location['lineNumber'], 100) + self.assertLess(report_location['lineNumber'], 150) + + +class _Credentials(object): + + _scopes = None + + @staticmethod + def create_scoped_required(): + return True + + def create_scoped(self, scope): + self._scopes = scope + return self + + +class _Logger(object): + + def log_struct(self, payload, # pylint: disable=unused-argument + client=None, # pylint: disable=unused-argument + labels=None, # pylint: disable=unused-argument + insert_id=None, # pylint: disable=unused-argument + severity=None, # pylint: disable=unused-argument + http_request=None): # pylint: disable=unused-argument + self.log_struct_called_with = payload From c5f53808e25dc52e9be2c9a9355f364e31ee0c8b Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 26 Sep 2016 16:03:28 -0700 Subject: [PATCH 002/467] Making error-reporting subpackage into a proper package. - Adding README, setup.py, MANIFEST.in, .coveragerc and tox.ini - Adding google-cloud-error-reporting as a dependency to the umbrella package - Adding the error_reporting subdirectory into the list of packages for verifying the docs - Incorporating the error_reporting subdirectory into the umbrella coverage report - Adding the error-reporting only tox tests to the Travis config - Adding {toxinidir}/../core as a dependency for the error-reporting tox config --- .../google-cloud-error-reporting/.coveragerc | 11 +++ .../google-cloud-error-reporting/MANIFEST.in | 4 ++ .../google-cloud-error-reporting/README.rst | 49 +++++++++++++ .../google-cloud-error-reporting/setup.py | 68 +++++++++++++++++++ packages/google-cloud-error-reporting/tox.ini | 30 ++++++++ 5 files changed, 162 insertions(+) create mode 100644 packages/google-cloud-error-reporting/.coveragerc create mode 100644 packages/google-cloud-error-reporting/MANIFEST.in create mode 100644 packages/google-cloud-error-reporting/README.rst create mode 100644 packages/google-cloud-error-reporting/setup.py create mode 100644 packages/google-cloud-error-reporting/tox.ini diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc new file mode 100644 index 000000000000..a54b99aa14b7 --- /dev/null +++ b/packages/google-cloud-error-reporting/.coveragerc @@ -0,0 +1,11 @@ +[run] +branch = True + +[report] +fail_under = 100 +show_missing = True +exclude_lines = + # Re-enable the standard pragma + pragma: NO COVER + # Ignore debug-only repr + def __repr__ diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in new file mode 100644 index 000000000000..cb3a2b9ef4fa --- /dev/null +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -0,0 +1,4 @@ +include README.rst +graft google +graft unit_tests +global-exclude *.pyc diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst new file mode 100644 index 000000000000..81ca524c695e --- /dev/null +++ b/packages/google-cloud-error-reporting/README.rst @@ -0,0 +1,49 @@ +Python Client for Stackdriver Error Reporting +============================================= + + Python idiomatic client for `Stackdriver Error Reporting`_ + +.. _Stackdriver Error Reporting: https://cloud.google.com/error-reporting/ + +- `Homepage`_ +- `API Documentation`_ + +.. _Homepage: https://googlecloudplatform.github.io/google-cloud-python/ +.. _API Documentation: http://googlecloudplatform.github.io/google-cloud-python/ + +Quick Start +----------- + +:: + + $ pip install --upgrade google-cloud-error-reporting + +Authentication +-------------- + +With ``google-cloud-python`` we try to make authentication as painless as +possible. Check out the `Authentication section`_ in our documentation to +learn more. You may also find the `authentication document`_ shared by all +the ``google-cloud-*`` libraries to be helpful. + +.. _Authentication section: http://google-cloud-python.readthedocs.io/en/latest/google-cloud-auth.html +.. _authentication document: https://github.com/GoogleCloudPlatform/gcloud-common/tree/master/authentication + +Using the API +------------- + +The Stackdriver `Error Reporting`_ API (`Error Reporting API docs`_) +counts, analyzes and aggregates the crashes in your running cloud services. +A centralized error management interface displays the results with sorting +and filtering capabilities. A dedicated view shows the error details: time +chart, occurrences, affected user count, first and last seen dates and a +cleaned exception stack trace. Opt-in to receive email and mobile alerts +on new errors. + +.. _Error Reporting: https://cloud.google.com/error-reporting/ +.. _Error Reporting API docs: https://cloud.google.com/error-reporting/reference/ + +See the ``google-cloud-python`` API `Error Reporting documentation`_ to learn +how to get started using this library. + +.. _Error Reporting documentation: https://google-cloud-python.readthedocs.io/en/stable/error-reporting-usage.html diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py new file mode 100644 index 000000000000..22c4879b04da --- /dev/null +++ b/packages/google-cloud-error-reporting/setup.py @@ -0,0 +1,68 @@ +# Copyright 2016 Google Inc. +# +# 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 os + +from setuptools import find_packages +from setuptools import setup + + +PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__)) + +with open(os.path.join(PACKAGE_ROOT, 'README.rst')) as file_obj: + README = file_obj.read() + +# NOTE: This is duplicated throughout and we should try to +# consolidate. +SETUP_BASE = { + 'author': 'Google Cloud Platform', + 'author_email': 'jjg+google-cloud-python@google.com', + 'scripts': [], + 'url': 'https://github.com/GoogleCloudPlatform/google-cloud-python', + 'license': 'Apache 2.0', + 'platforms': 'Posix; MacOS X; Windows', + 'include_package_data': True, + 'zip_safe': False, + 'classifiers': [ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: Apache Software License', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Topic :: Internet', + ], +} + + +REQUIREMENTS = [ + 'google-cloud-core', +] + +setup( + name='google-cloud-error-reporting', + version='0.20.0dev', + description='Python Client for Stackdriver Error Reporting', + long_description=README, + namespace_packages=[ + 'google', + 'google.cloud', + ], + packages=find_packages(), + install_requires=REQUIREMENTS, + **SETUP_BASE +) diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini new file mode 100644 index 000000000000..26b1a610d1bd --- /dev/null +++ b/packages/google-cloud-error-reporting/tox.ini @@ -0,0 +1,30 @@ +[tox] +envlist = + py27,py34,py35,cover + +[testing] +deps = + {toxinidir}/../core + pytest +covercmd = + py.test --quiet \ + --cov=google.cloud.error-reporting \ + --cov=unit_tests \ + --cov-config {toxinidir}/.coveragerc \ + unit_tests + +[testenv] +commands = + py.test --quiet {posargs} unit_tests +deps = + {[testing]deps} + +[testenv:cover] +basepython = + python2.7 +commands = + {[testing]covercmd} +deps = + {[testenv]deps} + coverage + pytest-cov From df1813bac398eb11cd8ebec5cdb552c538258e29 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 26 Sep 2016 16:03:46 -0700 Subject: [PATCH 003/467] Manually adding logging as a dependency of error reporting. --- packages/google-cloud-error-reporting/setup.py | 1 + packages/google-cloud-error-reporting/tox.ini | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 22c4879b04da..bad0965bb046 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -51,6 +51,7 @@ REQUIREMENTS = [ 'google-cloud-core', + 'google-cloud-logging', ] setup( diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini index 26b1a610d1bd..db24f5455afe 100644 --- a/packages/google-cloud-error-reporting/tox.ini +++ b/packages/google-cloud-error-reporting/tox.ini @@ -5,6 +5,7 @@ envlist = [testing] deps = {toxinidir}/../core + {toxinidir}/../logging pytest covercmd = py.test --quiet \ From 7725f5a0fb5a26600dec86f4d6a9f19be5335004 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 27 Sep 2016 08:53:24 -0700 Subject: [PATCH 004/467] Preparing for a release of all packages. Towards #2441. - Updating umbrella README to point at all packages - Putting upper bounds on grpcio in dependencies - Putting lower bounds on all google-cloud-* packages listed as dependencies - Adding `setup.cfg` for universal wheels --- packages/google-cloud-error-reporting/setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index bad0965bb046..6b98eb55cf19 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -50,13 +50,13 @@ REQUIREMENTS = [ - 'google-cloud-core', - 'google-cloud-logging', + 'google-cloud-core >= 0.20.0', + 'google-cloud-logging >= 0.20.0', ] setup( name='google-cloud-error-reporting', - version='0.20.0dev', + version='0.20.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From a24f844b84fe41367363e8a8d644f1fbdcc7ceea Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 27 Sep 2016 08:57:43 -0700 Subject: [PATCH 005/467] Adding setup.cfg to all packages. --- packages/google-cloud-error-reporting/setup.cfg | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 packages/google-cloud-error-reporting/setup.cfg diff --git a/packages/google-cloud-error-reporting/setup.cfg b/packages/google-cloud-error-reporting/setup.cfg new file mode 100644 index 000000000000..2a9acf13daa9 --- /dev/null +++ b/packages/google-cloud-error-reporting/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal = 1 From 9b3a64949262e61b6e1b0a9453da26647b2ec476 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 29 Sep 2016 16:17:02 -0700 Subject: [PATCH 006/467] General clean-up after rename. - Removing "graft google" from MANIFEST for umbrella package. It isn't needed since the umbrella package has no source - Updating license year on copy-pasted namespace package __init__.py files. Done via: https://gist.github.com/dhermes/a0e88f891ffffc3ecea5c9bb2f13e4f5 - Removing unused HTML context from docs/conf.py - Setting GH_OWNER AND GH_PROJECT_NAME (which together make the REPO_SLUG) manually in the docs update scripts. This way the env. variables don't need to be set in the Travis UI / CLI. Also updating tox.ini to stop passing those variables through - Removing the root package from `verify_included_modules.py` since it no longer has any source - Updated a docstring reference to a moved class in the Bigtable system test - Removing redundant `GOOGLE_CLOUD_*` in `tox` system test `passenv` (already covered by `GOOGLE_*`) --- packages/google-cloud-error-reporting/google/cloud/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/__init__.py b/packages/google-cloud-error-reporting/google/cloud/__init__.py index 8ac7b74af136..b2b833373882 100644 --- a/packages/google-cloud-error-reporting/google/cloud/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2014 Google Inc. +# Copyright 2016 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 5bfc3ebfd2d4ce77226f3884fb6dca9d8910a2b4 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 3 Oct 2016 21:32:48 -0700 Subject: [PATCH 007/467] Updating package README's with more useful doc links. Also removing duplicate "Homepage" links (duplicate of "API Documentation" links). --- packages/google-cloud-error-reporting/README.rst | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 81ca524c695e..095ca8f7b06b 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -5,11 +5,9 @@ Python Client for Stackdriver Error Reporting .. _Stackdriver Error Reporting: https://cloud.google.com/error-reporting/ -- `Homepage`_ -- `API Documentation`_ +- `Documentation`_ -.. _Homepage: https://googlecloudplatform.github.io/google-cloud-python/ -.. _API Documentation: http://googlecloudplatform.github.io/google-cloud-python/ +.. _Documentation: https://googlecloudplatform.github.io/google-cloud-python/stable/error-reporting-usage.html Quick Start ----------- From cf123c1f93363e4f4fea6dc18287b400f3bf3963 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Thu, 20 Oct 2016 15:50:55 -0700 Subject: [PATCH 008/467] Replace types string with str. Uses command: ag -l 'type ([^:]+): string' | \ xargs gsed -r -i.bak -e 's/type ([^:]+): string/type \1: str/g' Note: [-r for gsed (GNU sed) is needed for group matching](http://superuser.com/a/336819/125262). --- .../google/cloud/error_reporting/client.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 19cf539bf15a..7b0cc7f2105e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -24,24 +24,24 @@ class HTTPContext(object): """HTTPContext defines an object that captures the parameter for the httpRequest part of Error Reporting API - :type method: string + :type method: str :param method: The type of HTTP request, such as GET, POST, etc. - :type url: string + :type url: str :param url: The URL of the request - :type user_agent: string + :type user_agent: str :param user_agent: The user agent information that is provided with the request. - :type referrer: string + :type referrer: str :param referrer: The referrer information that is provided with the request. :type response_status_code: int :param response_status_code: The HTTP response status code for the request. - :type remote_ip: string + :type remote_ip: str :param remote_ip: The IP address from which the request originated. This can be IPv4, IPv6, or a token which is derived from the IP address, depending on the data that has been @@ -65,7 +65,7 @@ class Client(object): """Error Reporting client. Currently Error Reporting is done by creating a Logging client. - :type project: string + :type project: str :param project: the project which the client acts on behalf of. If not passed falls back to the default inferred from the environment. @@ -125,7 +125,7 @@ def _send_error_report(self, message, https://cloud.google.com/error-reporting/docs/formatting-error-messages - :type message: string + :type message: str :param message: The stack trace that was reported or logged by the service. @@ -143,7 +143,7 @@ def _send_error_report(self, message, :param http_context: The HTTP request which was processed when the error was triggered. - :type user: string + :type user: str :param user: The user who caused or was affected by the crash. This can be a user ID, an email address, or an arbitrary token that uniquely identifies the user. When sending an error @@ -194,7 +194,7 @@ def report(self, message, http_context=None, user=None): :param http_context: The HTTP request which was processed when the error was triggered. - :type user: string + :type user: str :param user: The user who caused or was affected by the crash. This can be a user ID, an email address, or an arbitrary token that uniquely identifies the user. When sending @@ -230,7 +230,7 @@ def report_exception(self, http_context=None, user=None): :param http_context: The HTTP request which was processed when the error was triggered. - :type user: string + :type user: str :param user: The user who caused or was affected by the crash. This can be a user ID, an email address, or an arbitrary token that uniquely identifies the user. When sending an From f5b79891ae15ca9391928c3832a6fc9baf4e3a86 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 20 Oct 2016 17:04:00 -0700 Subject: [PATCH 009/467] Replace :: with `.. code-block:: console`. Towards #2404. --- packages/google-cloud-error-reporting/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 095ca8f7b06b..4239220d3294 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -12,7 +12,7 @@ Python Client for Stackdriver Error Reporting Quick Start ----------- -:: +.. code-block:: console $ pip install --upgrade google-cloud-error-reporting From 26f2b36255c6358d3c675ab82619a1b055a70d0f Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 31 Oct 2016 17:01:13 -0700 Subject: [PATCH 010/467] Removing explicit doctest blocks from Sphinx docs. This way we can gradually turn them on with **doctest** and make sure they work piece by piece. Also converted some implicit code blocks (`::`) and some implicit doctest blocks (`:` followed by `>>>`) into explicit code blocks. --- .../google/cloud/error_reporting/client.py | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 7b0cc7f2105e..dfa0b0e2845b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -184,27 +184,30 @@ def _send_error_report(self, message, def report(self, message, http_context=None, user=None): """ Reports a message to Stackdriver Error Reporting + https://cloud.google.com/error-reporting/docs/formatting-error-messages - :type message: str - :param message: A user-supplied message to report + :type message: str + :param message: A user-supplied message to report + :type http_context: :class`google.cloud.error_reporting.HTTPContext` + :param http_context: The HTTP request which was processed when the + error was triggered. - :type http_context: :class`google.cloud.error_reporting.HTTPContext` - :param http_context: The HTTP request which was processed when the - error was triggered. + :type user: str + :param user: The user who caused or was affected by the crash. This + can be a user ID, an email address, or an arbitrary + token that uniquely identifies the user. When sending + an error report, leave this field empty if the user + was not logged in. In this case the Error Reporting + system will use other data, such as remote IP address, + to distinguish affected users. - :type user: str - :param user: The user who caused or was affected by the crash. This - can be a user ID, an email address, or an arbitrary - token that uniquely identifies the user. When sending - an error report, leave this field empty if the user - was not logged in. In this case the Error Reporting - system will use other data, such as remote IP address, - to distinguish affected users. + Example: - Example:: - >>> client.report("Something went wrong!") + .. code-block:: python + + >>> client.report("Something went wrong!") """ stack = traceback.extract_stack() last_call = stack[-2] From b2ab8a4a8820ff43be3ef7058b92e743dcca33a3 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Fri, 4 Nov 2016 10:12:12 -0700 Subject: [PATCH 011/467] Adding PyPI badges to package READMEs. --- packages/google-cloud-error-reporting/README.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 4239220d3294..b4d955a63b50 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -5,6 +5,8 @@ Python Client for Stackdriver Error Reporting .. _Stackdriver Error Reporting: https://cloud.google.com/error-reporting/ +|pypi| |versions| + - `Documentation`_ .. _Documentation: https://googlecloudplatform.github.io/google-cloud-python/stable/error-reporting-usage.html @@ -45,3 +47,8 @@ See the ``google-cloud-python`` API `Error Reporting documentation`_ to learn how to get started using this library. .. _Error Reporting documentation: https://google-cloud-python.readthedocs.io/en/stable/error-reporting-usage.html + +.. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg + :target: https://pypi.python.org/pypi/google-cloud-error-reporting +.. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg + :target: https://pypi.python.org/pypi/google-cloud-error-reporting From 030d69fe76101057f1c87c9d550be616dbc94f9c Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 7 Nov 2016 21:26:07 -0800 Subject: [PATCH 012/467] Avoiding using filesystem deps in package tox.ini configs. --- packages/google-cloud-error-reporting/tox.ini | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini index db24f5455afe..5148d52b86dc 100644 --- a/packages/google-cloud-error-reporting/tox.ini +++ b/packages/google-cloud-error-reporting/tox.ini @@ -3,9 +3,11 @@ envlist = py27,py34,py35,cover [testing] +localdeps = + pip install --upgrade \ + {toxinidir}/../core \ + {toxinidir}/../logging deps = - {toxinidir}/../core - {toxinidir}/../logging pytest covercmd = py.test --quiet \ @@ -16,6 +18,7 @@ covercmd = [testenv] commands = + {[testing]localdeps} py.test --quiet {posargs} unit_tests deps = {[testing]deps} @@ -24,6 +27,7 @@ deps = basepython = python2.7 commands = + {[testing]localdeps} {[testing]covercmd} deps = {[testenv]deps} From ee7dbf20cc698dc6056de24b6288dd25249ea0a0 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 8 Nov 2016 20:20:59 -0800 Subject: [PATCH 013/467] Renaming _getTargetClass to _get_target_class. Done via: $ git grep -l 'def _getTargetClass(self)' | \ > xargs sed -i s/'def _getTargetClass(self)'/'@staticmethod\n def _get_target_class()'/g --- .../google-cloud-error-reporting/unit_tests/test_client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index a3a54f0c89dc..5cab5c65f05b 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -18,7 +18,8 @@ class TestClient(unittest.TestCase): - def _getTargetClass(self): + @staticmethod + def _get_target_class(): from google.cloud.error_reporting.client import Client return Client From 801a6f10bb7dcb06ea1bfb76f5c45329743ceda6 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 8 Nov 2016 20:22:12 -0800 Subject: [PATCH 014/467] Changing uses of _getTargetClass to _get_target_class. Done via: $ git grep -l _getTargetClass | \ > xargs sed -i s/_getTargetClass/_get_target_class/g --- packages/google-cloud-error-reporting/unit_tests/test_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 5cab5c65f05b..32d01ff6a7ec 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -28,7 +28,7 @@ def _getHttpContext(self): return HTTPContext def _makeOne(self, *args, **kw): - return self._getTargetClass()(*args, **kw) + return self._get_target_class()(*args, **kw) def _makeHTTP(self, *args, **kw): return self._getHttpContext()(*args, **kw) From e7c43f91119e75de003b1420986d7b164fb66b6e Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 10 Nov 2016 11:05:35 -0800 Subject: [PATCH 015/467] Changing all instances of _makeOne to _make_one. Done via: $ git grep -l _makeOne | \ > xargs sed -i s/_makeOne/_make_one/g --- .../unit_tests/test_client.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 32d01ff6a7ec..013fbc445009 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -27,7 +27,7 @@ def _getHttpContext(self): from google.cloud.error_reporting.client import HTTPContext return HTTPContext - def _makeOne(self, *args, **kw): + def _make_one(self, *args, **kw): return self._get_target_class()(*args, **kw) def _makeHTTP(self, *args, **kw): @@ -39,14 +39,14 @@ def _makeHTTP(self, *args, **kw): def test_ctor_default(self): CREDENTIALS = _Credentials() - target = self._makeOne(project=self.PROJECT, + target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) self.assertEquals(target.service, target.DEFAULT_SERVICE) self.assertEquals(target.version, None) def test_ctor_params(self): CREDENTIALS = _Credentials() - target = self._makeOne(project=self.PROJECT, + target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS, service=self.SERVICE, version=self.VERSION) @@ -55,7 +55,7 @@ def test_ctor_params(self): def test_report_exception(self): CREDENTIALS = _Credentials() - target = self._makeOne(project=self.PROJECT, + target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) logger = _Logger() @@ -77,7 +77,7 @@ def test_report_exception_with_service_version_in_constructor(self): CREDENTIALS = _Credentials() SERVICE = "notdefault" VERSION = "notdefaultversion" - target = self._makeOne(project=self.PROJECT, + target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS, service=SERVICE, version=VERSION) @@ -110,7 +110,7 @@ def test_report_exception_with_service_version_in_constructor(self): def test_report(self): CREDENTIALS = _Credentials() - target = self._makeOne(project=self.PROJECT, + target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) logger = _Logger() From e43854a494ab52238fc2b3ceee01ddba7baed961 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 8 Nov 2016 21:02:17 -0800 Subject: [PATCH 016/467] Manually fixing up bad indents / long lines after renames. --- .../unit_tests/test_client.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 013fbc445009..a94919ecaacc 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -40,23 +40,23 @@ def _makeHTTP(self, *args, **kw): def test_ctor_default(self): CREDENTIALS = _Credentials() target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS) + credentials=CREDENTIALS) self.assertEquals(target.service, target.DEFAULT_SERVICE) self.assertEquals(target.version, None) def test_ctor_params(self): CREDENTIALS = _Credentials() target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS, - service=self.SERVICE, - version=self.VERSION) + credentials=CREDENTIALS, + service=self.SERVICE, + version=self.VERSION) self.assertEquals(target.service, self.SERVICE) self.assertEquals(target.version, self.VERSION) def test_report_exception(self): CREDENTIALS = _Credentials() target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS) + credentials=CREDENTIALS) logger = _Logger() target.logging_client.logger = lambda _: logger @@ -78,9 +78,9 @@ def test_report_exception_with_service_version_in_constructor(self): SERVICE = "notdefault" VERSION = "notdefaultversion" target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS, - service=SERVICE, - version=VERSION) + credentials=CREDENTIALS, + service=SERVICE, + version=VERSION) logger = _Logger() target.logging_client.logger = lambda _: logger @@ -111,7 +111,7 @@ def test_report_exception_with_service_version_in_constructor(self): def test_report(self): CREDENTIALS = _Credentials() target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS) + credentials=CREDENTIALS) logger = _Logger() target.logging_client.logger = lambda _: logger From b06442c568db374e5bad46bb5ddb9d0ca272dd83 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 10 Nov 2016 21:17:51 -0800 Subject: [PATCH 017/467] Adding quiet flag to pip command for local deps. --- packages/google-cloud-error-reporting/tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini index 5148d52b86dc..631fb8930ea2 100644 --- a/packages/google-cloud-error-reporting/tox.ini +++ b/packages/google-cloud-error-reporting/tox.ini @@ -4,7 +4,7 @@ envlist = [testing] localdeps = - pip install --upgrade \ + pip install --quiet --upgrade \ {toxinidir}/../core \ {toxinidir}/../logging deps = From d643db5c800beeedd035fa303f5fd4d4f371a95d Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 14 Nov 2016 12:44:19 -0800 Subject: [PATCH 018/467] Upgrading core to version to 0.21.0. As a result, also upgrading the umbrella package and all packages to 0.21.0 (since they all depend on core). --- packages/google-cloud-error-reporting/setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 6b98eb55cf19..44024cf4b059 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -50,13 +50,13 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.20.0', - 'google-cloud-logging >= 0.20.0', + 'google-cloud-core >= 0.21.0', + 'google-cloud-logging >= 0.21.0', ] setup( name='google-cloud-error-reporting', - version='0.20.0', + version='0.21.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From c8c29c97804585830b3f6a9cf3f43ba532446776 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 14 Nov 2016 14:11:34 -0800 Subject: [PATCH 019/467] Need to install from local deps first. The `pip install --upgrade` still is needed to ensure freshness but by removing the filesystem paths from deps we made the initial install grab from PyPI (by mistake). This way, all local package deps are grabbed from the local filesystem. --- packages/google-cloud-error-reporting/tox.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini index 631fb8930ea2..d589a736faa9 100644 --- a/packages/google-cloud-error-reporting/tox.ini +++ b/packages/google-cloud-error-reporting/tox.ini @@ -8,6 +8,8 @@ localdeps = {toxinidir}/../core \ {toxinidir}/../logging deps = + {toxinidir}/../core + {toxinidir}/../logging pytest covercmd = py.test --quiet \ @@ -18,7 +20,6 @@ covercmd = [testenv] commands = - {[testing]localdeps} py.test --quiet {posargs} unit_tests deps = {[testing]deps} @@ -27,7 +28,6 @@ deps = basepython = python2.7 commands = - {[testing]localdeps} {[testing]covercmd} deps = {[testenv]deps} From 9d1cb54562c3d501cebbea18d305205f6c68a534 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 14 Nov 2016 14:58:42 -0800 Subject: [PATCH 020/467] Fixing accidental removal of {localdeps} Also - adding RTD dependency for runtimeconfig. - adding local paths to umbrella tox config "deps" as was done in #2733. --- packages/google-cloud-error-reporting/tox.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini index d589a736faa9..cfc610759673 100644 --- a/packages/google-cloud-error-reporting/tox.ini +++ b/packages/google-cloud-error-reporting/tox.ini @@ -20,6 +20,7 @@ covercmd = [testenv] commands = + {[testing]localdeps} py.test --quiet {posargs} unit_tests deps = {[testing]deps} @@ -28,6 +29,7 @@ deps = basepython = python2.7 commands = + {[testing]localdeps} {[testing]covercmd} deps = {[testenv]deps} From 67a553914e18b6210dd5e3932f0359f56b883658 Mon Sep 17 00:00:00 2001 From: Thomas Schultz Date: Wed, 16 Nov 2016 11:09:27 -0500 Subject: [PATCH 021/467] Set core version compatible specifier to packages. --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 44024cf4b059..a3e646f1b917 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -50,7 +50,7 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.21.0', + 'google-cloud-core >= 0.21.0, < 0.22dev', 'google-cloud-logging >= 0.21.0', ] From 51e1b47816f694c9becae1f07969aa07992534e4 Mon Sep 17 00:00:00 2001 From: Bill Prin Date: Thu, 17 Nov 2016 14:36:48 -0800 Subject: [PATCH 022/467] Add Flask Helper to Error Reporting --- .../google/cloud/error_reporting/__init__.py | 2 + .../google/cloud/error_reporting/util.py | 44 +++++++++++++++++ packages/google-cloud-error-reporting/tox.ini | 1 + .../unit_tests/test_util.py | 48 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py create mode 100644 packages/google-cloud-error-reporting/unit_tests/test_util.py diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py index 26748ebac58c..e6cdf438adb5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py @@ -16,3 +16,5 @@ from google.cloud.error_reporting.client import Client +from google.cloud.error_reporting.client import HTTPContext +from google.cloud.error_reporting.util import build_flask_context diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py new file mode 100644 index 000000000000..15d902d65056 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py @@ -0,0 +1,44 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# 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. + +"""Utility functions for Stackdriver Error Reporting.""" + +from google.cloud.error_reporting.client import HTTPContext + + +def build_flask_context(request): + """Builds an HTTP context object from a Flask (Werkzeug) request object. + + This helper method extracts the relevant HTTP context from a Flask request + object into an object ready to be sent to Error Reporting. + + .. code-block:: python + + >>> @app.errorhandler(HTTPException) + ... def handle_error(exc): + ... client.report_exception( + ... http_context=build_flask_context(request)) + ... # rest of error response code here + + :type request: :class:`werkzeug.wrappers.request` + :param request: The Flask request object to convert. + + :rtype: :class:`~google.cloud.error_reporting.client.HTTPContext` + :returns: An HTTPContext object ready to be sent to the Stackdriver Error + Reporting API. + """ + return HTTPContext(url=request.url, method=request.method, + user_agent=request.user_agent.string, + referrer=request.referrer, + remote_ip=request.remote_addr) diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini index cfc610759673..e18578ba64ac 100644 --- a/packages/google-cloud-error-reporting/tox.ini +++ b/packages/google-cloud-error-reporting/tox.ini @@ -10,6 +10,7 @@ localdeps = deps = {toxinidir}/../core {toxinidir}/../logging + mock pytest covercmd = py.test --quiet \ diff --git a/packages/google-cloud-error-reporting/unit_tests/test_util.py b/packages/google-cloud-error-reporting/unit_tests/test_util.py new file mode 100644 index 000000000000..fcaf9167a061 --- /dev/null +++ b/packages/google-cloud-error-reporting/unit_tests/test_util.py @@ -0,0 +1,48 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# 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 unittest + + +class Test_build_flask_context(unittest.TestCase): + + def _call_fut(self, request): + from google.cloud.error_reporting.util import build_flask_context + return build_flask_context(request) + + def test_flask_helper(self): + import mock + + user_agent = mock.Mock(string='Google Cloud Unit Tests Agent') + request = _Request('http://google.com', 'GET', + user_agent, + 'http://gmail.com', + '127.0.0.1') + + context = self._call_fut(request) + self.assertEqual(request.url, context.url) + self.assertEqual(request.method, context.method) + self.assertEqual(request.user_agent.string, context.userAgent) + self.assertEqual(request.referrer, context.referrer) + self.assertEqual(request.remote_addr, context.remoteIp) + + +class _Request(object): + + def __init__(self, url, method, user_agent, referrer, remote_addr): + self.url = url + self.method = method + self.user_agent = user_agent + self.referrer = referrer + self.remote_addr = remote_addr From f42656f89a0b0bb2f177f95f1e1a9fc56a43f4bc Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Fri, 2 Dec 2016 15:02:25 -0800 Subject: [PATCH 023/467] Switch from oauth2client to google-auth (#2726) * Removes all use of oauth2client from every package and tests. * Updates core to use google-auth's default credentials, project ID, and scoping logic. * Updates bigtable to use google-auth's scoping logic. --- .../unit_tests/test_client.py | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index a94919ecaacc..ca042b511ddf 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -38,14 +38,14 @@ def _makeHTTP(self, *args, **kw): VERSION = 'myversion' def test_ctor_default(self): - CREDENTIALS = _Credentials() + CREDENTIALS = object() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) self.assertEquals(target.service, target.DEFAULT_SERVICE) self.assertEquals(target.version, None) def test_ctor_params(self): - CREDENTIALS = _Credentials() + CREDENTIALS = object() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS, service=self.SERVICE, @@ -54,7 +54,7 @@ def test_ctor_params(self): self.assertEquals(target.version, self.VERSION) def test_report_exception(self): - CREDENTIALS = _Credentials() + CREDENTIALS = object() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) @@ -74,7 +74,7 @@ def test_report_exception(self): self.assertIn('test_client.py', payload['message']) def test_report_exception_with_service_version_in_constructor(self): - CREDENTIALS = _Credentials() + CREDENTIALS = object() SERVICE = "notdefault" VERSION = "notdefaultversion" target = self._make_one(project=self.PROJECT, @@ -109,7 +109,7 @@ def test_report_exception_with_service_version_in_constructor(self): self.assertEquals(payload['context']['user'], USER) def test_report(self): - CREDENTIALS = _Credentials() + CREDENTIALS = object() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) @@ -128,19 +128,6 @@ def test_report(self): self.assertLess(report_location['lineNumber'], 150) -class _Credentials(object): - - _scopes = None - - @staticmethod - def create_scoped_required(): - return True - - def create_scoped(self, scope): - self._scopes = scope - return self - - class _Logger(object): def log_struct(self, payload, # pylint: disable=unused-argument From 600f38c42d0528d25b818bd0d097905a50972e75 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 5 Dec 2016 13:24:39 -0800 Subject: [PATCH 024/467] Removing links to "stable" build of RTD. See #2810 for context. --- packages/google-cloud-error-reporting/README.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index b4d955a63b50..e968d42754bf 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -43,11 +43,9 @@ on new errors. .. _Error Reporting: https://cloud.google.com/error-reporting/ .. _Error Reporting API docs: https://cloud.google.com/error-reporting/reference/ -See the ``google-cloud-python`` API `Error Reporting documentation`_ to learn +See the ``google-cloud-python`` API Error Reporting `Documentation`_ to learn how to get started using this library. -.. _Error Reporting documentation: https://google-cloud-python.readthedocs.io/en/stable/error-reporting-usage.html - .. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg :target: https://pypi.python.org/pypi/google-cloud-error-reporting .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg From c8f4add9baad5e7ce7c28b8da33fe101706c2701 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Wed, 7 Dec 2016 16:00:24 -0800 Subject: [PATCH 025/467] Raise ValueError if credentials are not from google-auth (#2828) --- .../unit_tests/test_client.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index ca042b511ddf..2750cd20dba4 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -15,6 +15,13 @@ import unittest +import mock + + +def _make_credentials(): + import google.auth.credentials + return mock.Mock(spec=google.auth.credentials.Credentials) + class TestClient(unittest.TestCase): @@ -38,14 +45,14 @@ def _makeHTTP(self, *args, **kw): VERSION = 'myversion' def test_ctor_default(self): - CREDENTIALS = object() + CREDENTIALS = _make_credentials() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) self.assertEquals(target.service, target.DEFAULT_SERVICE) self.assertEquals(target.version, None) def test_ctor_params(self): - CREDENTIALS = object() + CREDENTIALS = _make_credentials() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS, service=self.SERVICE, @@ -54,7 +61,7 @@ def test_ctor_params(self): self.assertEquals(target.version, self.VERSION) def test_report_exception(self): - CREDENTIALS = object() + CREDENTIALS = _make_credentials() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) @@ -74,7 +81,7 @@ def test_report_exception(self): self.assertIn('test_client.py', payload['message']) def test_report_exception_with_service_version_in_constructor(self): - CREDENTIALS = object() + CREDENTIALS = _make_credentials() SERVICE = "notdefault" VERSION = "notdefaultversion" target = self._make_one(project=self.PROJECT, @@ -109,7 +116,7 @@ def test_report_exception_with_service_version_in_constructor(self): self.assertEquals(payload['context']['user'], USER) def test_report(self): - CREDENTIALS = object() + CREDENTIALS = _make_credentials() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) From d80a5ef18abb1e1b58d2e595e540abaa8a6bd70c Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 8 Dec 2016 15:17:03 -0800 Subject: [PATCH 026/467] Update versions for mega-release. We want to update - `google-cloud-bigquery` - `google-cloud-datastore` - `google-cloud-logging` - `google-cloud-storage` - `google-cloud-core` And then update `google-cloud` to re-wrap the latest versions of each. However, to avoid having packages in `google-cloud` with conflicting versions of `google-cloud-core`, we must release all packages. --- packages/google-cloud-error-reporting/setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index a3e646f1b917..9d65198d9af6 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -50,13 +50,13 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.21.0, < 0.22dev', - 'google-cloud-logging >= 0.21.0', + 'google-cloud-core >= 0.22.1, < 0.23dev', + 'google-cloud-logging >= 0.22.0, < 0.23dev', ] setup( name='google-cloud-error-reporting', - version='0.21.0', + version='0.22.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From e68126da9bd636955499150dfe8c9e5147376f3b Mon Sep 17 00:00:00 2001 From: Thomas Schultz Date: Wed, 18 Jan 2017 13:14:03 -0500 Subject: [PATCH 027/467] Update import spacing part 2. --- .../google-cloud-error-reporting/unit_tests/test_client.py | 3 +++ packages/google-cloud-error-reporting/unit_tests/test_util.py | 1 + 2 files changed, 4 insertions(+) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 2750cd20dba4..c1b105990f0d 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -20,6 +20,7 @@ def _make_credentials(): import google.auth.credentials + return mock.Mock(spec=google.auth.credentials.Credentials) @@ -28,10 +29,12 @@ class TestClient(unittest.TestCase): @staticmethod def _get_target_class(): from google.cloud.error_reporting.client import Client + return Client def _getHttpContext(self): from google.cloud.error_reporting.client import HTTPContext + return HTTPContext def _make_one(self, *args, **kw): diff --git a/packages/google-cloud-error-reporting/unit_tests/test_util.py b/packages/google-cloud-error-reporting/unit_tests/test_util.py index fcaf9167a061..fa48ba14c649 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_util.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_util.py @@ -19,6 +19,7 @@ class Test_build_flask_context(unittest.TestCase): def _call_fut(self, request): from google.cloud.error_reporting.util import build_flask_context + return build_flask_context(request) def test_flask_helper(self): From 20497c8de81b4dcc7b4c15cf74949fe9dd1ebe42 Mon Sep 17 00:00:00 2001 From: Bill Prin Date: Tue, 14 Feb 2017 14:09:43 -0800 Subject: [PATCH 028/467] Add Error Reporting GAPIC as dependency (#2894) * Add Error Reporting GAPIC as dependency This both adds the GAPIC to be used directly via this package, as well as hooking it up to the existing helpers to provide gRPC support. --- .../google/cloud/error_reporting/_gax.py | 74 ++++++++++ .../google/cloud/error_reporting/_logging.py | 60 +++++++++ .../google/cloud/error_reporting/client.py | 126 +++++++++++++++--- .../google-cloud-error-reporting/setup.py | 1 + packages/google-cloud-error-reporting/tox.ini | 2 +- .../unit_tests/test__gax.py | 53 ++++++++ .../unit_tests/test__logging.py | 51 +++++++ .../unit_tests/test_client.py | 81 ++++++----- 8 files changed, 399 insertions(+), 49 deletions(-) create mode 100644 packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py create mode 100644 packages/google-cloud-error-reporting/unit_tests/test__gax.py create mode 100644 packages/google-cloud-error-reporting/unit_tests/test__logging.py diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py new file mode 100644 index 000000000000..e480fcf7380a --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py @@ -0,0 +1,74 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# 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. + +"""GAX wrapper for Error Reporting API requests.""" + +from google.cloud._helpers import make_secure_channel +from google.cloud._http import DEFAULT_USER_AGENT + +from google.cloud.gapic.errorreporting.v1beta1 import ( + report_errors_service_client) +from google.cloud.grpc.devtools.clouderrorreporting.v1beta1 import ( + report_errors_service_pb2) +from google.protobuf.json_format import ParseDict + + +def make_report_error_api(client): + """Create an instance of the GAX Logging API. + + :type client::class:`google.cloud.error_reporting.Client` + :param client: Error Reporting client. + + :rtype: :class:_ErrorReportingGaxApi + :returns: An Error Reporting API instance. + """ + channel = make_secure_channel( + client._connection.credentials, + DEFAULT_USER_AGENT, + report_errors_service_client.ReportErrorsServiceClient.SERVICE_ADDRESS) + gax_client = report_errors_service_client.ReportErrorsServiceClient( + channel=channel) + return _ErrorReportingGaxApi(gax_client, client.project) + + +class _ErrorReportingGaxApi(object): + """Helper mapping Error Reporting-related APIs + + :type gax_api: + :class:`v1beta1.report_errors_service_client.ReportErrorsServiceClient` + :param gax_api: API object used to make GAX requests. + + :type project: str + :param project: Google Cloud Project ID + """ + + def __init__(self, gax_api, project): + self._gax_api = gax_api + self._project = project + + def report_error_event(self, error_report): + """Uses the GAX client to report the error. + + :type error_report: dict + :param error_report: + payload of the error report formatted according to + https://cloud.google.com/error-reporting/docs/formatting-error-messages + This object should be built using + Use + :meth:~`google.cloud.error_reporting.client._build_error_report` + """ + project_name = self._gax_api.project_path(self._project) + error_report_payload = report_errors_service_pb2.ReportedErrorEvent() + ParseDict(error_report, error_report_payload) + self._gax_api.report_error_event(project_name, error_report_payload) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py new file mode 100644 index 000000000000..59e1154c2b17 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -0,0 +1,60 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# 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. + +"""Interact with Stackdriver Error Reporting via Logging API. + +It's possible to report Stackdriver Error Reporting errors by formatting +structured log messages in Stackdriver Logging in a given format. This +client provides a mechanism to report errors using that technique. +""" + +import google.cloud.logging.client + + +class _ErrorReportingLoggingAPI(object): + """Report to Stackdriver Error Reporting via Logging API + + :type project: str + :param project: the project which the client acts on behalf of. If not + passed falls back to the default inferred from the + environment. + + :type credentials: :class:`oauth2client.client.OAuth2Credentials` or + :class:`NoneType` + :param credentials: The OAuth2 Credentials to use for the connection + owned by this client. If not passed (and if no ``http`` + object is passed), falls back to the default inferred + from the environment. + + :type http: :class:`httplib2.Http` or class that defines ``request()``. + :param http: An optional HTTP object to make requests. If not passed, an + ``http`` object is created that is bound to the + ``credentials`` for the current object. + """ + def __init__(self, project, credentials=None, http=None): + self.logging_client = google.cloud.logging.client.Client( + project, credentials, http) + + def report_error_event(self, error_report): + """Report error payload. + + :type error_report: dict + :param: error_report: + dict payload of the error report formatted according to + https://cloud.google.com/error-reporting/docs/formatting-error-messages + This object should be built using + :meth:~`google.cloud.error_reporting.client._build_error_report` + """ + logger = self.logging_client.logger('errors') + logger.log_struct(error_report) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index dfa0b0e2845b..4d8a0c2a4a48 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -12,13 +12,26 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Client for interacting with the Stackdriver Logging API""" +"""Client for interacting with the Stackdriver Error Reporting API""" +import os import traceback -import google.cloud.logging.client +try: + from google.cloud.error_reporting._gax import make_report_error_api + _HAVE_GAX = True +except ImportError: # pragma: NO COVER + _HAVE_GAX = False + +from google.cloud._helpers import _determine_default_project +from google.cloud.error_reporting._logging import _ErrorReportingLoggingAPI +from google.cloud.environment_vars import DISABLE_GRPC + import six +_DISABLE_GAX = os.getenv(DISABLE_GRPC, False) +_USE_GAX = _HAVE_GAX and not _DISABLE_GAX + class HTTPContext(object): """HTTPContext defines an object that captures the parameter for the @@ -96,6 +109,12 @@ class Client(object): SHA-1 hash, for example. If the developer did not provide a version, the value is set to default. + :type use_gax: bool + :param use_gax: (Optional) Explicitly specifies whether + to use the gRPC transport (via GAX) or HTTP. If unset, + falls back to the ``GOOGLE_CLOUD_DISABLE_GRPC`` environment + variable. + :raises: :class:`ValueError` if the project is neither passed in nor set in the environment. """ @@ -104,24 +123,56 @@ def __init__(self, project=None, credentials=None, http=None, service=None, - version=None): - self.logging_client = google.cloud.logging.client.Client( - project, credentials, http) + version=None, + use_gax=None): + if project is None: + self._project = _determine_default_project() + else: + self._project = project + self._credentials = credentials + self._http = http + + self._report_errors_api = None + self.service = service if service else self.DEFAULT_SERVICE self.version = version + if use_gax is None: + self._use_gax = _USE_GAX + else: + self._use_gax = use_gax DEFAULT_SERVICE = 'python' - def _send_error_report(self, message, - report_location=None, http_context=None, user=None): - """Makes the call to the Error Reporting API via the log stream. + @property + def report_errors_api(self): + """Helper for logging-related API calls. - This is the lower-level interface to build the payload, generally - users will use either report() or report_exception() to automatically - gather the parameters for this method. + See: + https://cloud.google.com/logging/docs/api/reference/rest/v2/entries + https://cloud.google.com/logging/docs/api/reference/rest/v2/projects.logs - Currently this method sends the Error Report by formatting a structured - log message according to + :rtype: + :class:`_gax._ErrorReportingGaxApi` + or + :class:`._logging._ErrorReportingLoggingAPI` + :returns: A class that implements the report errors API. + """ + if self._report_errors_api is None: + if self._use_gax: + self._report_errors_api = make_report_error_api(self._project) + else: + self._report_errors_api = _ErrorReportingLoggingAPI( + self._project, self._credentials, self._http) + return self._report_errors_api + + def _build_error_report(self, + message, + report_location=None, + http_context=None, + user=None): + """Builds the Error Reporting object to report. + + This builds the object according to https://cloud.google.com/error-reporting/docs/formatting-error-messages @@ -151,7 +202,10 @@ def _send_error_report(self, message, logged in. In this case the Error Reporting system will use other data, such as remote IP address, to distinguish affected users. - """ + :rtype: dict + :returns: A dict payload ready to be serialized to JSON and sent to + the API. + """ payload = { 'serviceContext': { 'service': self.service, @@ -178,9 +232,49 @@ def _send_error_report(self, message, if user: payload['context']['user'] = user + return payload + + def _send_error_report(self, + message, + report_location=None, + http_context=None, + user=None): + """Makes the call to the Error Reporting API. + + This is the lower-level interface to build and send the payload, + generally users will use either report() or report_exception() to + automatically gather the parameters for this method. - logger = self.logging_client.logger('errors') - logger.log_struct(payload) + :type message: str + :param message: The stack trace that was reported or logged by the + service. + + :type report_location: dict + :param report_location: The location in the source code where the + decision was made to report the error, usually the place + where it was logged. For a logged exception this would be the + source line where the exception is logged, usually close to + the place where it was caught. + + This should be a Python dict that contains the keys 'filePath', + 'lineNumber', and 'functionName' + + :type http_context: :class`google.cloud.error_reporting.HTTPContext` + :param http_context: The HTTP request which was processed when the + error was triggered. + + :type user: str + :param user: The user who caused or was affected by the crash. This can + be a user ID, an email address, or an arbitrary token that + uniquely identifies the user. When sending an error + report, leave this field empty if the user was not + logged in. In this case the Error Reporting system will + use other data, such as remote IP address, + to distinguish affected users. + """ + error_report = self._build_error_report(message, report_location, + http_context, user) + self.report_errors_api.report_error_event(error_report) def report(self, message, http_context=None, user=None): """ Reports a message to Stackdriver Error Reporting diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 9d65198d9af6..5035847a2108 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -52,6 +52,7 @@ REQUIREMENTS = [ 'google-cloud-core >= 0.22.1, < 0.23dev', 'google-cloud-logging >= 0.22.0, < 0.23dev', + 'gapic-google-cloud-error-reporting-v1beta1 >= 0.14.0, < 0.15dev' ] setup( diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini index e18578ba64ac..63c0e63bb2cd 100644 --- a/packages/google-cloud-error-reporting/tox.ini +++ b/packages/google-cloud-error-reporting/tox.ini @@ -14,7 +14,7 @@ deps = pytest covercmd = py.test --quiet \ - --cov=google.cloud.error-reporting \ + --cov=google.cloud.error_reporting \ --cov=unit_tests \ --cov-config {toxinidir}/.coveragerc \ unit_tests diff --git a/packages/google-cloud-error-reporting/unit_tests/test__gax.py b/packages/google-cloud-error-reporting/unit_tests/test__gax.py new file mode 100644 index 000000000000..af0c4247dae4 --- /dev/null +++ b/packages/google-cloud-error-reporting/unit_tests/test__gax.py @@ -0,0 +1,53 @@ +# Copyright 2017 Google Inc. +# +# 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 unittest + +import mock + + +class Test_make_report_error_api(unittest.TestCase): + + def test_make_report_error_api(self): + from google.cloud.error_reporting._gax import make_report_error_api + client = mock.Mock() + client.project = mock.Mock() + report_error_client = make_report_error_api(client) + self.assertEqual(report_error_client._project, client.project) + + +class Test_ErrorReportingGaxApi(unittest.TestCase): + + PROJECT = 'PROJECT' + + def _call_fut(self, gax_api, project): + from google.cloud.error_reporting._gax import _ErrorReportingGaxApi + return _ErrorReportingGaxApi(gax_api, project) + + def test_constructor(self): + gax_api = mock.Mock() + gax_client_wrapper = self._call_fut(gax_api, self.PROJECT) + + self.assertEqual(gax_client_wrapper._project, self.PROJECT) + self.assertEqual(gax_client_wrapper._gax_api, gax_api) + + @mock.patch("google.cloud.error_reporting._gax.ParseDict") + def test_report_error_event(self, _): + gax_api = mock.Mock() + gax_client_wrapper = self._call_fut(gax_api, self.PROJECT) + + mock_error_report = mock.Mock() + gax_client_wrapper.report_error_event(mock_error_report) + self.assertTrue(gax_api.report_error_event.called_with, + mock_error_report) diff --git a/packages/google-cloud-error-reporting/unit_tests/test__logging.py b/packages/google-cloud-error-reporting/unit_tests/test__logging.py new file mode 100644 index 000000000000..99371906eedc --- /dev/null +++ b/packages/google-cloud-error-reporting/unit_tests/test__logging.py @@ -0,0 +1,51 @@ +# Copyright 2017 Google Inc. +# +# 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 unittest + +import mock + + +def _make_credentials(): + import google.auth.credentials + return mock.Mock(spec=google.auth.credentials.Credentials) + + +class Test_ErrorReportingLoggingAPI(unittest.TestCase): + + PROJECT = 'PROJECT' + SERVICE = 'SERVICE' + VERSION = 'myversion' + + def _call_fut(self, project, credentials): + from google.cloud.error_reporting._logging import ( + _ErrorReportingLoggingAPI) + return _ErrorReportingLoggingAPI(project, credentials) + + def test_constructor(self): + credentials = _make_credentials() + logger_client = self._call_fut(self.PROJECT, credentials) + + self.assertEqual(logger_client.logging_client._connection.credentials, + credentials) + self.assertEqual(logger_client.logging_client.project, self.PROJECT) + + @mock.patch('google.cloud.logging.client') + def test_report_error_event(self, _): + credentials = _make_credentials() + logger_client = self._call_fut(self.PROJECT, credentials) + payload = mock.Mock() + logger_client.report_error_event(payload) + logger_mock = mock.Mock() + self.assertTrue(logger_mock.log_struct.called_with, payload) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index c1b105990f0d..09b9065f59f9 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -47,10 +47,11 @@ def _makeHTTP(self, *args, **kw): SERVICE = 'SERVICE' VERSION = 'myversion' - def test_ctor_default(self): + @mock.patch( + 'google.cloud.error_reporting.client._determine_default_project') + def test_ctor_default(self, _): CREDENTIALS = _make_credentials() - target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS) + target = self._make_one(credentials=CREDENTIALS) self.assertEquals(target.service, target.DEFAULT_SERVICE) self.assertEquals(target.version, None) @@ -63,27 +64,52 @@ def test_ctor_params(self): self.assertEquals(target.service, self.SERVICE) self.assertEquals(target.version, self.VERSION) - def test_report_exception(self): + def test_report_exception_with_gax(self): CREDENTIALS = _make_credentials() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) - logger = _Logger() - target.logging_client.logger = lambda _: logger + patch = mock.patch( + 'google.cloud.error_reporting.client.make_report_error_api') + with patch as make_api: + try: + raise NameError + except NameError: + target.report_exception() + payload = make_api.return_value.report_error_event.call_args[0][0] + self.assertEquals(payload['serviceContext'], { + 'service': target.DEFAULT_SERVICE, + }) + self.assertIn('test_report', payload['message']) + self.assertIn('test_client.py', payload['message']) - try: - raise NameError - except NameError: - target.report_exception() + def test_report_exception_wo_gax(self): + CREDENTIALS = _make_credentials() + target = self._make_one(project=self.PROJECT, + credentials=CREDENTIALS, + use_gax=False) + patch = mock.patch( + 'google.cloud.error_reporting.client._ErrorReportingLoggingAPI' + ) + with patch as _error_api: + try: + raise NameError + except NameError: + target.report_exception() + mock_report = _error_api.return_value.report_error_event + payload = mock_report.call_args[0][0] - payload = logger.log_struct_called_with self.assertEquals(payload['serviceContext'], { 'service': target.DEFAULT_SERVICE, }) self.assertIn('test_report', payload['message']) self.assertIn('test_client.py', payload['message']) + self.assertIsNotNone(target.report_errors_api) - def test_report_exception_with_service_version_in_constructor(self): + @mock.patch('google.cloud.error_reporting.client.make_report_error_api') + def test_report_exception_with_service_version_in_constructor( + self, + make_client): CREDENTIALS = _make_credentials() SERVICE = "notdefault" VERSION = "notdefaultversion" @@ -92,18 +118,18 @@ def test_report_exception_with_service_version_in_constructor(self): service=SERVICE, version=VERSION) - logger = _Logger() - target.logging_client.logger = lambda _: logger - http_context = self._makeHTTP(method="GET", response_status_code=500) USER = "user@gmail.com" + client = mock.Mock() + make_client.return_value = client + try: raise NameError except NameError: target.report_exception(http_context=http_context, user=USER) - payload = logger.log_struct_called_with + payload = client.report_error_event.call_args[0][0] self.assertEquals(payload['serviceContext'], { 'service': SERVICE, 'version': VERSION @@ -118,32 +144,23 @@ def test_report_exception_with_service_version_in_constructor(self): payload['context']['httpContext']['method'], 'GET') self.assertEquals(payload['context']['user'], USER) - def test_report(self): + @mock.patch('google.cloud.error_reporting.client.make_report_error_api') + def test_report(self, make_client): CREDENTIALS = _make_credentials() target = self._make_one(project=self.PROJECT, credentials=CREDENTIALS) - logger = _Logger() - target.logging_client.logger = lambda _: logger + client = mock.Mock() + make_client.return_value = client MESSAGE = 'this is an error' target.report(MESSAGE) - payload = logger.log_struct_called_with + payload = client.report_error_event.call_args[0][0] + self.assertEquals(payload['message'], MESSAGE) report_location = payload['context']['reportLocation'] self.assertIn('test_client.py', report_location['filePath']) self.assertEqual(report_location['functionName'], 'test_report') self.assertGreater(report_location['lineNumber'], 100) - self.assertLess(report_location['lineNumber'], 150) - - -class _Logger(object): - - def log_struct(self, payload, # pylint: disable=unused-argument - client=None, # pylint: disable=unused-argument - labels=None, # pylint: disable=unused-argument - insert_id=None, # pylint: disable=unused-argument - severity=None, # pylint: disable=unused-argument - http_request=None): # pylint: disable=unused-argument - self.log_struct_called_with = payload + self.assertLess(report_location['lineNumber'], 250) From 1a46e11cc80a6118aa458575c4a77f2b67542aa4 Mon Sep 17 00:00:00 2001 From: Thomas Schultz Date: Wed, 15 Feb 2017 15:34:59 -0500 Subject: [PATCH 029/467] Update Beta classifiers to Alpha for specified services. --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 5035847a2108..7b0eda3784b1 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -35,7 +35,7 @@ 'include_package_data': True, 'zip_safe': False, 'classifiers': [ - 'Development Status :: 4 - Beta', + 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Operating System :: OS Independent', From 8b5e7052aab9399c86d18c3359bcfa942fe1ba90 Mon Sep 17 00:00:00 2001 From: Thomas Schultz Date: Thu, 16 Feb 2017 14:19:53 -0500 Subject: [PATCH 030/467] Update core dependency to google-cloud-core >= 0.23.0, < 0.24dev. (#3028) * Update core dependency to google-cloud-core >= 0.23.0, < 0.24dev. --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 7b0eda3784b1..199237bbc4ce 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -50,7 +50,7 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.22.1, < 0.23dev', + 'google-cloud-core >= 0.23.0, < 0.24dev', 'google-cloud-logging >= 0.22.0, < 0.23dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.14.0, < 0.15dev' ] From 7b505db05cff45d91da8454bf8cba17a24c1c5b8 Mon Sep 17 00:00:00 2001 From: Thomas Schultz Date: Fri, 17 Feb 2017 08:43:40 -0500 Subject: [PATCH 031/467] Error Reporting formatting. --- .../google-cloud-error-reporting/unit_tests/test__gax.py | 2 ++ .../google-cloud-error-reporting/unit_tests/test__logging.py | 2 ++ .../google-cloud-error-reporting/unit_tests/test_client.py | 5 ++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test__gax.py b/packages/google-cloud-error-reporting/unit_tests/test__gax.py index af0c4247dae4..4eada07c79bf 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test__gax.py +++ b/packages/google-cloud-error-reporting/unit_tests/test__gax.py @@ -21,6 +21,7 @@ class Test_make_report_error_api(unittest.TestCase): def test_make_report_error_api(self): from google.cloud.error_reporting._gax import make_report_error_api + client = mock.Mock() client.project = mock.Mock() report_error_client = make_report_error_api(client) @@ -33,6 +34,7 @@ class Test_ErrorReportingGaxApi(unittest.TestCase): def _call_fut(self, gax_api, project): from google.cloud.error_reporting._gax import _ErrorReportingGaxApi + return _ErrorReportingGaxApi(gax_api, project) def test_constructor(self): diff --git a/packages/google-cloud-error-reporting/unit_tests/test__logging.py b/packages/google-cloud-error-reporting/unit_tests/test__logging.py index 99371906eedc..2a96d0162117 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test__logging.py +++ b/packages/google-cloud-error-reporting/unit_tests/test__logging.py @@ -19,6 +19,7 @@ def _make_credentials(): import google.auth.credentials + return mock.Mock(spec=google.auth.credentials.Credentials) @@ -31,6 +32,7 @@ class Test_ErrorReportingLoggingAPI(unittest.TestCase): def _call_fut(self, project, credentials): from google.cloud.error_reporting._logging import ( _ErrorReportingLoggingAPI) + return _ErrorReportingLoggingAPI(project, credentials) def test_constructor(self): diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 09b9065f59f9..95723189df8c 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -107,9 +107,8 @@ def test_report_exception_wo_gax(self): self.assertIsNotNone(target.report_errors_api) @mock.patch('google.cloud.error_reporting.client.make_report_error_api') - def test_report_exception_with_service_version_in_constructor( - self, - make_client): + def test_report_exception_with_service_version_in_constructor(self, + make_client): CREDENTIALS = _make_credentials() SERVICE = "notdefault" VERSION = "notdefaultversion" From fe016834bb62256f871a336b7c0bc247fb27ad20 Mon Sep 17 00:00:00 2001 From: Thomas Schultz Date: Fri, 17 Feb 2017 13:07:00 -0500 Subject: [PATCH 032/467] Fix lint issue with method signature. --- .../google-cloud-error-reporting/unit_tests/test_client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 95723189df8c..60b5f4df61d2 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -107,8 +107,8 @@ def test_report_exception_wo_gax(self): self.assertIsNotNone(target.report_errors_api) @mock.patch('google.cloud.error_reporting.client.make_report_error_api') - def test_report_exception_with_service_version_in_constructor(self, - make_client): + def test_report_exception_with_service_version_in_constructor( + self, make_client): CREDENTIALS = _make_credentials() SERVICE = "notdefault" VERSION = "notdefaultversion" From b50a5dcbc1ad40496495a4917ca89356d9123476 Mon Sep 17 00:00:00 2001 From: Thomas Schultz Date: Mon, 20 Feb 2017 13:36:32 -0500 Subject: [PATCH 033/467] Rename deprecated assertEquals to assertEqual. --- .../unit_tests/test_client.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 60b5f4df61d2..a1f8ebeb0d03 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -52,8 +52,8 @@ def _makeHTTP(self, *args, **kw): def test_ctor_default(self, _): CREDENTIALS = _make_credentials() target = self._make_one(credentials=CREDENTIALS) - self.assertEquals(target.service, target.DEFAULT_SERVICE) - self.assertEquals(target.version, None) + self.assertEqual(target.service, target.DEFAULT_SERVICE) + self.assertEqual(target.version, None) def test_ctor_params(self): CREDENTIALS = _make_credentials() @@ -61,8 +61,8 @@ def test_ctor_params(self): credentials=CREDENTIALS, service=self.SERVICE, version=self.VERSION) - self.assertEquals(target.service, self.SERVICE) - self.assertEquals(target.version, self.VERSION) + self.assertEqual(target.service, self.SERVICE) + self.assertEqual(target.version, self.VERSION) def test_report_exception_with_gax(self): CREDENTIALS = _make_credentials() @@ -77,7 +77,7 @@ def test_report_exception_with_gax(self): except NameError: target.report_exception() payload = make_api.return_value.report_error_event.call_args[0][0] - self.assertEquals(payload['serviceContext'], { + self.assertEqual(payload['serviceContext'], { 'service': target.DEFAULT_SERVICE, }) self.assertIn('test_report', payload['message']) @@ -99,7 +99,7 @@ def test_report_exception_wo_gax(self): mock_report = _error_api.return_value.report_error_event payload = mock_report.call_args[0][0] - self.assertEquals(payload['serviceContext'], { + self.assertEqual(payload['serviceContext'], { 'service': target.DEFAULT_SERVICE, }) self.assertIn('test_report', payload['message']) @@ -129,7 +129,7 @@ def test_report_exception_with_service_version_in_constructor( target.report_exception(http_context=http_context, user=USER) payload = client.report_error_event.call_args[0][0] - self.assertEquals(payload['serviceContext'], { + self.assertEqual(payload['serviceContext'], { 'service': SERVICE, 'version': VERSION }) @@ -137,11 +137,11 @@ def test_report_exception_with_service_version_in_constructor( 'test_report_exception_with_service_version_in_constructor', payload['message']) self.assertIn('test_client.py', payload['message']) - self.assertEquals( + self.assertEqual( payload['context']['httpContext']['responseStatusCode'], 500) - self.assertEquals( + self.assertEqual( payload['context']['httpContext']['method'], 'GET') - self.assertEquals(payload['context']['user'], USER) + self.assertEqual(payload['context']['user'], USER) @mock.patch('google.cloud.error_reporting.client.make_report_error_api') def test_report(self, make_client): @@ -157,7 +157,7 @@ def test_report(self, make_client): payload = client.report_error_event.call_args[0][0] - self.assertEquals(payload['message'], MESSAGE) + self.assertEqual(payload['message'], MESSAGE) report_location = payload['context']['reportLocation'] self.assertIn('test_client.py', report_location['filePath']) self.assertEqual(report_location['functionName'], 'test_report') From 4efa4b5cec2fbb52ec0c07d64542444298f05bab Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Wed, 22 Feb 2017 07:40:10 -0800 Subject: [PATCH 034/467] Adding GCCL header for HTTP APIs. (#3046) --- .../google/cloud/error_reporting/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py index e6cdf438adb5..bb76fb9b332a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py @@ -15,6 +15,9 @@ """Client library for Stackdriver Error Reporting""" +from pkg_resources import get_distribution +__version__ = get_distribution('google-cloud-error-reporting').version + from google.cloud.error_reporting.client import Client from google.cloud.error_reporting.client import HTTPContext from google.cloud.error_reporting.util import build_flask_context From e2df894af02b08a850982d058e8ccb1072adb55b Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Thu, 23 Feb 2017 12:00:37 -0800 Subject: [PATCH 035/467] GAPIC Header Consistency: Error Reporting (#3055) --- .../google/cloud/error_reporting/_gax.py | 6 ++-- .../google-cloud-error-reporting/setup.py | 6 ++-- .../unit_tests/test__gax.py | 29 +++++++++++++++++-- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py index e480fcf7380a..a5a58995135f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py @@ -19,10 +19,12 @@ from google.cloud.gapic.errorreporting.v1beta1 import ( report_errors_service_client) -from google.cloud.grpc.devtools.clouderrorreporting.v1beta1 import ( +from google.cloud.proto.devtools.clouderrorreporting.v1beta1 import ( report_errors_service_pb2) from google.protobuf.json_format import ParseDict +from google.cloud.error_reporting import __version__ + def make_report_error_api(client): """Create an instance of the GAX Logging API. @@ -38,7 +40,7 @@ def make_report_error_api(client): DEFAULT_USER_AGENT, report_errors_service_client.ReportErrorsServiceClient.SERVICE_ADDRESS) gax_client = report_errors_service_client.ReportErrorsServiceClient( - channel=channel) + channel=channel, lib_name='gccl', lib_version=__version__) return _ErrorReportingGaxApi(gax_client, client.project) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 199237bbc4ce..6412170fb368 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -51,13 +51,13 @@ REQUIREMENTS = [ 'google-cloud-core >= 0.23.0, < 0.24dev', - 'google-cloud-logging >= 0.22.0, < 0.23dev', - 'gapic-google-cloud-error-reporting-v1beta1 >= 0.14.0, < 0.15dev' + 'google-cloud-logging >= 0.23.0, < 0.24dev', + 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.22.0', + version='0.23.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ diff --git a/packages/google-cloud-error-reporting/unit_tests/test__gax.py b/packages/google-cloud-error-reporting/unit_tests/test__gax.py index 4eada07c79bf..b5345045ca8b 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test__gax.py +++ b/packages/google-cloud-error-reporting/unit_tests/test__gax.py @@ -20,12 +20,35 @@ class Test_make_report_error_api(unittest.TestCase): def test_make_report_error_api(self): + from google.cloud.gapic.errorreporting.v1beta1 import ( + report_errors_service_client) + + from grpc._channel import Channel + + from google.cloud.error_reporting import __version__ from google.cloud.error_reporting._gax import make_report_error_api client = mock.Mock() - client.project = mock.Mock() - report_error_client = make_report_error_api(client) - self.assertEqual(report_error_client._project, client.project) + + # Mock out the constructor for the GAPIC client. + ServiceClient = report_errors_service_client.ReportErrorsServiceClient + with mock.patch.object(ServiceClient, '__init__') as resc: + resc.return_value = None + + # Call the function being tested. + report_error_client = make_report_error_api(client) + + # Assert that the arguments to the GAPIC constructor appear + # to be correct. + resc.assert_called_once() + _, _, kwargs = resc.mock_calls[0] + self.assertIsInstance(kwargs['channel'], Channel) + self.assertEqual(kwargs['lib_name'], 'gccl') + self.assertEqual(kwargs['lib_version'], __version__) + + # Assert that the final error client has the project in + # the expected location. + self.assertIs(report_error_client._project, client.project) class Test_ErrorReportingGaxApi(unittest.TestCase): From 5f501a313ea014bc3432dd285f090d4cf42311f9 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 23 Feb 2017 12:46:56 -0800 Subject: [PATCH 036/467] Using client's credentials in error reporting (instead of connection). --- .../google/cloud/error_reporting/_gax.py | 2 +- .../google-cloud-error-reporting/unit_tests/test__gax.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py index a5a58995135f..a516572966d1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py @@ -36,7 +36,7 @@ def make_report_error_api(client): :returns: An Error Reporting API instance. """ channel = make_secure_channel( - client._connection.credentials, + client._credentials, DEFAULT_USER_AGENT, report_errors_service_client.ReportErrorsServiceClient.SERVICE_ADDRESS) gax_client = report_errors_service_client.ReportErrorsServiceClient( diff --git a/packages/google-cloud-error-reporting/unit_tests/test__gax.py b/packages/google-cloud-error-reporting/unit_tests/test__gax.py index b5345045ca8b..277d57b8f5db 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test__gax.py +++ b/packages/google-cloud-error-reporting/unit_tests/test__gax.py @@ -28,7 +28,11 @@ def test_make_report_error_api(self): from google.cloud.error_reporting import __version__ from google.cloud.error_reporting._gax import make_report_error_api - client = mock.Mock() + client = mock.Mock( + _credentials=mock.sentinel.credentials, + project='prahj-ekt', + spec=['project', '_credentials'], + ) # Mock out the constructor for the GAPIC client. ServiceClient = report_errors_service_client.ReportErrorsServiceClient From 68e85ee7ba954dc0475ea6460184c9d7407f0472 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Fri, 24 Feb 2017 11:30:18 -0800 Subject: [PATCH 037/467] Upgrading all versions for umbrella release. --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 6412170fb368..80bde1faedda 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -50,7 +50,7 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.23.0, < 0.24dev', + 'google-cloud-core >= 0.23.1, < 0.24dev', 'google-cloud-logging >= 0.23.0, < 0.24dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] From fe585f00c1a60df11f94a4fd99a4be4afbd44a6e Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Sun, 26 Feb 2017 10:04:47 -0800 Subject: [PATCH 038/467] Passing along client instead of project when creating error API. Also changed a lot of the unit tests. Fixes #3071. --- .../google/cloud/error_reporting/client.py | 2 +- .../unit_tests/test_client.py | 124 +++++++++--------- 2 files changed, 65 insertions(+), 61 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 4d8a0c2a4a48..3f4d2ab29197 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -159,7 +159,7 @@ def report_errors_api(self): """ if self._report_errors_api is None: if self._use_gax: - self._report_errors_api = make_report_error_api(self._project) + self._report_errors_api = make_report_error_api(self) else: self._report_errors_api = _ErrorReportingLoggingAPI( self._project, self._credentials, self._http) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index a1f8ebeb0d03..0eeccd5780dc 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -26,48 +26,46 @@ def _make_credentials(): class TestClient(unittest.TestCase): + PROJECT = 'PROJECT' + SERVICE = 'SERVICE' + VERSION = 'myversion' + @staticmethod def _get_target_class(): from google.cloud.error_reporting.client import Client return Client - def _getHttpContext(self): - from google.cloud.error_reporting.client import HTTPContext - - return HTTPContext - def _make_one(self, *args, **kw): return self._get_target_class()(*args, **kw) - def _makeHTTP(self, *args, **kw): - return self._getHttpContext()(*args, **kw) + def _make_http(self, *args, **kw): + from google.cloud.error_reporting.client import HTTPContext - PROJECT = 'PROJECT' - SERVICE = 'SERVICE' - VERSION = 'myversion' + return HTTPContext(*args, **kw) @mock.patch( 'google.cloud.error_reporting.client._determine_default_project') - def test_ctor_default(self, _): - CREDENTIALS = _make_credentials() - target = self._make_one(credentials=CREDENTIALS) - self.assertEqual(target.service, target.DEFAULT_SERVICE) - self.assertEqual(target.version, None) + def test_ctor_default(self, default_mock): + credentials = _make_credentials() + client = self._make_one(credentials=credentials) + self.assertEqual(client.service, client.DEFAULT_SERVICE) + self.assertEqual(client.version, None) + default_mock.assert_called_once_with() def test_ctor_params(self): - CREDENTIALS = _make_credentials() - target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS, + credentials = _make_credentials() + client = self._make_one(project=self.PROJECT, + credentials=credentials, service=self.SERVICE, version=self.VERSION) - self.assertEqual(target.service, self.SERVICE) - self.assertEqual(target.version, self.VERSION) + self.assertEqual(client.service, self.SERVICE) + self.assertEqual(client.version, self.VERSION) def test_report_exception_with_gax(self): - CREDENTIALS = _make_credentials() - target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS) + credentials = _make_credentials() + client = self._make_one(project=self.PROJECT, + credentials=credentials) patch = mock.patch( 'google.cloud.error_reporting.client.make_report_error_api') @@ -75,18 +73,20 @@ def test_report_exception_with_gax(self): try: raise NameError except NameError: - target.report_exception() + client.report_exception() payload = make_api.return_value.report_error_event.call_args[0][0] + make_api.assert_called_once_with(client) + self.assertEqual(payload['serviceContext'], { - 'service': target.DEFAULT_SERVICE, + 'service': client.DEFAULT_SERVICE, }) self.assertIn('test_report', payload['message']) self.assertIn('test_client.py', payload['message']) def test_report_exception_wo_gax(self): - CREDENTIALS = _make_credentials() - target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS, + credentials = _make_credentials() + client = self._make_one(project=self.PROJECT, + credentials=credentials, use_gax=False) patch = mock.patch( 'google.cloud.error_reporting.client._ErrorReportingLoggingAPI' @@ -95,43 +95,46 @@ def test_report_exception_wo_gax(self): try: raise NameError except NameError: - target.report_exception() + client.report_exception() mock_report = _error_api.return_value.report_error_event payload = mock_report.call_args[0][0] self.assertEqual(payload['serviceContext'], { - 'service': target.DEFAULT_SERVICE, + 'service': client.DEFAULT_SERVICE, }) self.assertIn('test_report', payload['message']) self.assertIn('test_client.py', payload['message']) - self.assertIsNotNone(target.report_errors_api) + self.assertIsNotNone(client.report_errors_api) @mock.patch('google.cloud.error_reporting.client.make_report_error_api') def test_report_exception_with_service_version_in_constructor( - self, make_client): - CREDENTIALS = _make_credentials() - SERVICE = "notdefault" - VERSION = "notdefaultversion" - target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS, - service=SERVICE, - version=VERSION) - - http_context = self._makeHTTP(method="GET", response_status_code=500) - USER = "user@gmail.com" - - client = mock.Mock() - make_client.return_value = client + self, make_api): + credentials = _make_credentials() + service = 'notdefault' + version = 'notdefaultversion' + client = self._make_one(project=self.PROJECT, + credentials=credentials, + service=service, + version=version) + + http_context = self._make_http( + method='GET', response_status_code=500) + user = 'user@gmail.com' + + error_api = mock.Mock(spec=['report_error_event']) + make_api.return_value = error_api try: raise NameError except NameError: - target.report_exception(http_context=http_context, user=USER) + client.report_exception(http_context=http_context, user=user) + + make_api.assert_called_once_with(client) - payload = client.report_error_event.call_args[0][0] + payload = error_api.report_error_event.call_args[0][0] self.assertEqual(payload['serviceContext'], { - 'service': SERVICE, - 'version': VERSION + 'service': service, + 'version': version }) self.assertIn( 'test_report_exception_with_service_version_in_constructor', @@ -141,23 +144,24 @@ def test_report_exception_with_service_version_in_constructor( payload['context']['httpContext']['responseStatusCode'], 500) self.assertEqual( payload['context']['httpContext']['method'], 'GET') - self.assertEqual(payload['context']['user'], USER) + self.assertEqual(payload['context']['user'], user) @mock.patch('google.cloud.error_reporting.client.make_report_error_api') - def test_report(self, make_client): - CREDENTIALS = _make_credentials() - target = self._make_one(project=self.PROJECT, - credentials=CREDENTIALS) + def test_report(self, make_api): + credentials = _make_credentials() + client = self._make_one(project=self.PROJECT, + credentials=credentials) - client = mock.Mock() - make_client.return_value = client + error_api = mock.Mock(spec=['report_error_event']) + make_api.return_value = error_api - MESSAGE = 'this is an error' - target.report(MESSAGE) + message = 'this is an error' + client.report(message) - payload = client.report_error_event.call_args[0][0] + payload = error_api.report_error_event.call_args[0][0] + make_api.assert_called_once_with(client) - self.assertEqual(payload['message'], MESSAGE) + self.assertEqual(payload['message'], message) report_location = payload['context']['reportLocation'] self.assertIn('test_client.py', report_location['filePath']) self.assertEqual(report_location['functionName'], 'test_report') From 424ee005dc352fa58cf80451fa94a2e2f5a7505d Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 23 Feb 2017 13:49:28 -0800 Subject: [PATCH 039/467] Removing mock.Mock() in error reporting. This actually required a much more comprehensive set of unit test changes than expected. Also incorporated a change from #3057 (which slipped through due to overly broad mocks). --- .../unit_tests/test__gax.py | 32 +++++++++++------ .../unit_tests/test__logging.py | 34 ++++++++++++------- .../unit_tests/test_client.py | 13 +++++-- 3 files changed, 52 insertions(+), 27 deletions(-) diff --git a/packages/google-cloud-error-reporting/unit_tests/test__gax.py b/packages/google-cloud-error-reporting/unit_tests/test__gax.py index 277d57b8f5db..8737b3871c54 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test__gax.py +++ b/packages/google-cloud-error-reporting/unit_tests/test__gax.py @@ -59,24 +59,34 @@ class Test_ErrorReportingGaxApi(unittest.TestCase): PROJECT = 'PROJECT' - def _call_fut(self, gax_api, project): + def _make_one(self, gax_api, project): from google.cloud.error_reporting._gax import _ErrorReportingGaxApi return _ErrorReportingGaxApi(gax_api, project) def test_constructor(self): - gax_api = mock.Mock() - gax_client_wrapper = self._call_fut(gax_api, self.PROJECT) + gax_api = mock.Mock(spec=[]) + gax_client_wrapper = self._make_one(gax_api, self.PROJECT) self.assertEqual(gax_client_wrapper._project, self.PROJECT) self.assertEqual(gax_client_wrapper._gax_api, gax_api) - @mock.patch("google.cloud.error_reporting._gax.ParseDict") - def test_report_error_event(self, _): - gax_api = mock.Mock() - gax_client_wrapper = self._call_fut(gax_api, self.PROJECT) + def test_report_error_event(self): + from google.cloud.proto.devtools.clouderrorreporting.v1beta1 import ( + report_errors_service_pb2) - mock_error_report = mock.Mock() - gax_client_wrapper.report_error_event(mock_error_report) - self.assertTrue(gax_api.report_error_event.called_with, - mock_error_report) + gax_api = mock.Mock(spec=['project_path', 'report_error_event']) + gax_client_wrapper = self._make_one(gax_api, self.PROJECT) + + error_report = { + 'message': 'The cabs are here.', + } + gax_client_wrapper.report_error_event(error_report) + + gax_api.project_path.assert_called_once_with(self.PROJECT) + project_name = gax_api.project_path.return_value + error_pb = report_errors_service_pb2.ReportedErrorEvent( + message=error_report['message'], + ) + gax_api.report_error_event.assert_called_once_with( + project_name, error_pb) diff --git a/packages/google-cloud-error-reporting/unit_tests/test__logging.py b/packages/google-cloud-error-reporting/unit_tests/test__logging.py index 2a96d0162117..58852b57c578 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test__logging.py +++ b/packages/google-cloud-error-reporting/unit_tests/test__logging.py @@ -26,10 +26,8 @@ def _make_credentials(): class Test_ErrorReportingLoggingAPI(unittest.TestCase): PROJECT = 'PROJECT' - SERVICE = 'SERVICE' - VERSION = 'myversion' - def _call_fut(self, project, credentials): + def _make_one(self, project, credentials): from google.cloud.error_reporting._logging import ( _ErrorReportingLoggingAPI) @@ -37,17 +35,27 @@ def _call_fut(self, project, credentials): def test_constructor(self): credentials = _make_credentials() - logger_client = self._call_fut(self.PROJECT, credentials) + logging_api = self._make_one(self.PROJECT, credentials) - self.assertEqual(logger_client.logging_client._connection.credentials, + self.assertEqual(logging_api.logging_client._connection.credentials, credentials) - self.assertEqual(logger_client.logging_client.project, self.PROJECT) + self.assertEqual(logging_api.logging_client.project, self.PROJECT) - @mock.patch('google.cloud.logging.client') - def test_report_error_event(self, _): + @mock.patch('google.cloud.logging.client.Client') + def test_report_error_event(self, mocked_cls): credentials = _make_credentials() - logger_client = self._call_fut(self.PROJECT, credentials) - payload = mock.Mock() - logger_client.report_error_event(payload) - logger_mock = mock.Mock() - self.assertTrue(logger_mock.log_struct.called_with, payload) + logging_api = self._make_one(self.PROJECT, credentials) + mocked_cls.assert_called_once_with(self.PROJECT, credentials, None) + self.assertIs(logging_api.logging_client, mocked_cls.return_value) + + logger = mock.Mock(spec=['log_struct']) + logging_api.logging_client.logger.return_value = logger + + # Actually make the API call. + error_report = { + 'message': 'The cabs are here.', + } + logging_api.report_error_event(error_report) + + # Check the mocks. + logger.log_struct.assert_called_once_with(error_report) diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 0eeccd5780dc..25c16ecb8de4 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -44,6 +44,14 @@ def _make_http(self, *args, **kw): return HTTPContext(*args, **kw) + def _get_report_payload(self, error_api): + self.assertEqual(error_api.report_error_event.call_count, 1) + call = error_api.report_error_event.mock_calls[0] + _, positional, kwargs = call + self.assertEqual(kwargs, {}) + self.assertEqual(len(positional), 1) + return positional[0] + @mock.patch( 'google.cloud.error_reporting.client._determine_default_project') def test_ctor_default(self, default_mock): @@ -131,7 +139,7 @@ def test_report_exception_with_service_version_in_constructor( make_api.assert_called_once_with(client) - payload = error_api.report_error_event.call_args[0][0] + payload = self._get_report_payload(error_api) self.assertEqual(payload['serviceContext'], { 'service': service, 'version': version @@ -158,8 +166,7 @@ def test_report(self, make_api): message = 'this is an error' client.report(message) - payload = error_api.report_error_event.call_args[0][0] - make_api.assert_called_once_with(client) + payload = self._get_report_payload(error_api) self.assertEqual(payload['message'], message) report_location = payload['context']['reportLocation'] From 003686f2b820ab31a33e11168fe5cb8e0870aa9a Mon Sep 17 00:00:00 2001 From: daspecster Date: Wed, 8 Mar 2017 11:47:53 -0500 Subject: [PATCH 040/467] Release Error Reporting 0.23.1. --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 80bde1faedda..e8086d324277 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -57,7 +57,7 @@ setup( name='google-cloud-error-reporting', - version='0.23.0', + version='0.23.1', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 9490aa39129af4f3d1a0ccc5ce6dd0afcf4381ad Mon Sep 17 00:00:00 2001 From: daspecster Date: Thu, 16 Mar 2017 15:09:47 -0400 Subject: [PATCH 041/467] Fix make_report_error_api usage of Client._project. --- .../google/cloud/error_reporting/_gax.py | 2 +- .../google-cloud-error-reporting/unit_tests/test__gax.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py index a516572966d1..24fd5f789446 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py @@ -41,7 +41,7 @@ def make_report_error_api(client): report_errors_service_client.ReportErrorsServiceClient.SERVICE_ADDRESS) gax_client = report_errors_service_client.ReportErrorsServiceClient( channel=channel, lib_name='gccl', lib_version=__version__) - return _ErrorReportingGaxApi(gax_client, client.project) + return _ErrorReportingGaxApi(gax_client, client._project) class _ErrorReportingGaxApi(object): diff --git a/packages/google-cloud-error-reporting/unit_tests/test__gax.py b/packages/google-cloud-error-reporting/unit_tests/test__gax.py index 8737b3871c54..cd237f76fe13 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test__gax.py +++ b/packages/google-cloud-error-reporting/unit_tests/test__gax.py @@ -30,8 +30,8 @@ def test_make_report_error_api(self): client = mock.Mock( _credentials=mock.sentinel.credentials, - project='prahj-ekt', - spec=['project', '_credentials'], + _project='prahj-ekt', + spec=['_project', '_credentials'], ) # Mock out the constructor for the GAPIC client. @@ -52,7 +52,7 @@ def test_make_report_error_api(self): # Assert that the final error client has the project in # the expected location. - self.assertIs(report_error_client._project, client.project) + self.assertIs(report_error_client._project, client._project) class Test_ErrorReportingGaxApi(unittest.TestCase): From 04a48bd9b4810042b61529804e9c08bf8a92b163 Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Tue, 21 Mar 2017 11:10:02 -0700 Subject: [PATCH 042/467] Use ClientWithProject superclass for error reporting. (#3168) --- .../google/cloud/error_reporting/client.py | 15 +++++---------- .../unit_tests/test_client.py | 6 +++--- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 3f4d2ab29197..043d3faef1eb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -23,7 +23,7 @@ except ImportError: # pragma: NO COVER _HAVE_GAX = False -from google.cloud._helpers import _determine_default_project +from google.cloud.client import ClientWithProject from google.cloud.error_reporting._logging import _ErrorReportingLoggingAPI from google.cloud.environment_vars import DISABLE_GRPC @@ -74,7 +74,7 @@ def __init__(self, method=None, url=None, self.remoteIp = remote_ip -class Client(object): +class Client(ClientWithProject): """Error Reporting client. Currently Error Reporting is done by creating a Logging client. @@ -125,13 +125,8 @@ def __init__(self, project=None, service=None, version=None, use_gax=None): - if project is None: - self._project = _determine_default_project() - else: - self._project = project - self._credentials = credentials - self._http = http - + super(Client, self).__init__(project=project, credentials=credentials, + http=http) self._report_errors_api = None self.service = service if service else self.DEFAULT_SERVICE @@ -162,7 +157,7 @@ def report_errors_api(self): self._report_errors_api = make_report_error_api(self) else: self._report_errors_api = _ErrorReportingLoggingAPI( - self._project, self._credentials, self._http) + self.project, self._credentials, self._http) return self._report_errors_api def _build_error_report(self, diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/unit_tests/test_client.py index 25c16ecb8de4..ef8999d4bf6a 100644 --- a/packages/google-cloud-error-reporting/unit_tests/test_client.py +++ b/packages/google-cloud-error-reporting/unit_tests/test_client.py @@ -52,14 +52,14 @@ def _get_report_payload(self, error_api): self.assertEqual(len(positional), 1) return positional[0] - @mock.patch( - 'google.cloud.error_reporting.client._determine_default_project') + @mock.patch('google.cloud.client._determine_default_project') def test_ctor_default(self, default_mock): credentials = _make_credentials() + default_mock.return_value = 'foo' client = self._make_one(credentials=credentials) self.assertEqual(client.service, client.DEFAULT_SERVICE) self.assertEqual(client.version, None) - default_mock.assert_called_once_with() + default_mock.assert_called_once_with(None) def test_ctor_params(self): credentials = _make_credentials() From 9ac250887ab43b720a6fd0be8ec0a09adfe2a15e Mon Sep 17 00:00:00 2001 From: daspecster Date: Wed, 22 Mar 2017 16:25:07 -0400 Subject: [PATCH 043/467] Update references that were 301 redirecting. --- .../google/cloud/error_reporting/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 043d3faef1eb..9209dae2e641 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -143,8 +143,8 @@ def report_errors_api(self): """Helper for logging-related API calls. See: - https://cloud.google.com/logging/docs/api/reference/rest/v2/entries - https://cloud.google.com/logging/docs/api/reference/rest/v2/projects.logs + https://cloud.google.com/logging/docs/reference/v2/rest/v2/entries + https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.logs :rtype: :class:`_gax._ErrorReportingGaxApi` From 2eea5083710d2fbdada03a578bf8e399d7902f8c Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Thu, 23 Mar 2017 14:49:26 -0700 Subject: [PATCH 044/467] CI Rehash (#3146) --- packages/google-cloud-error-reporting/.flake8 | 6 + packages/google-cloud-error-reporting/LICENSE | 202 ++++++++++++++++++ .../google-cloud-error-reporting/MANIFEST.in | 8 +- packages/google-cloud-error-reporting/nox.py | 65 ++++++ .../google-cloud-error-reporting/setup.py | 2 +- .../tests/__init__.py | 0 .../{unit_tests => tests/unit}/__init__.py | 0 .../{unit_tests => tests/unit}/test__gax.py | 0 .../unit}/test__logging.py | 0 .../{unit_tests => tests/unit}/test_client.py | 0 .../{unit_tests => tests/unit}/test_util.py | 0 packages/google-cloud-error-reporting/tox.ini | 38 ---- 12 files changed, 278 insertions(+), 43 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.flake8 create mode 100644 packages/google-cloud-error-reporting/LICENSE create mode 100644 packages/google-cloud-error-reporting/nox.py create mode 100644 packages/google-cloud-error-reporting/tests/__init__.py rename packages/google-cloud-error-reporting/{unit_tests => tests/unit}/__init__.py (100%) rename packages/google-cloud-error-reporting/{unit_tests => tests/unit}/test__gax.py (100%) rename packages/google-cloud-error-reporting/{unit_tests => tests/unit}/test__logging.py (100%) rename packages/google-cloud-error-reporting/{unit_tests => tests/unit}/test_client.py (100%) rename packages/google-cloud-error-reporting/{unit_tests => tests/unit}/test_util.py (100%) delete mode 100644 packages/google-cloud-error-reporting/tox.ini diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 new file mode 100644 index 000000000000..25168dc87605 --- /dev/null +++ b/packages/google-cloud-error-reporting/.flake8 @@ -0,0 +1,6 @@ +[flake8] +exclude = + __pycache__, + .git, + *.pyc, + conf.py diff --git a/packages/google-cloud-error-reporting/LICENSE b/packages/google-cloud-error-reporting/LICENSE new file mode 100644 index 000000000000..d64569567334 --- /dev/null +++ b/packages/google-cloud-error-reporting/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index cb3a2b9ef4fa..9f7100c9528a 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -1,4 +1,4 @@ -include README.rst -graft google -graft unit_tests -global-exclude *.pyc +include README.rst LICENSE +recursive-include google *.json *.proto +recursive-include unit_tests * +global-exclude *.pyc __pycache__ diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py new file mode 100644 index 000000000000..10161156d921 --- /dev/null +++ b/packages/google-cloud-error-reporting/nox.py @@ -0,0 +1,65 @@ +# Copyright 2016 Google Inc. +# +# 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 __future__ import absolute_import + +import os + +import nox + + +@nox.session +@nox.parametrize('python_version', ['2.7', '3.4', '3.5', '3.6']) +def unit_tests(session, python_version): + """Run the unit test suite.""" + + # Run unit tests against all supported versions of Python. + session.interpreter = 'python%s' % python_version + + # Install all test dependencies, then install this package in-place. + session.install('mock', 'pytest', 'pytest-cov', '../core/') + session.install('-e', '.') + + # Run py.test against the unit tests. + session.run('py.test', '--quiet', + '--cov=google.cloud.datastore', '--cov=tests.unit', '--cov-append', + '--cov-config=.coveragerc', '--cov-report=', '--cov-fail-under=97', + 'tests/unit', + ) + + +@nox.session +def lint(session): + """Run flake8. + + Returns a failure if flake8 finds linting errors or sufficiently + serious code quality issues. + """ + session.interpreter = 'python3.6' + session.install('flake8') + session.install('.') + session.run('flake8', 'google/cloud/datastore') + + +@nox.session +def cover(session): + """Run the final coverage report. + + This outputs the coverage report aggregating coverage from the unit + test runs (not system test runs), and then erases coverage data. + """ + session.interpreter = 'python3.6' + session.install('coverage', 'pytest-cov') + session.run('coverage', 'report', '--show-missing', '--fail-under=100') + session.run('coverage', 'erase') diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index e8086d324277..106ac3ff5976 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -64,7 +64,7 @@ 'google', 'google.cloud', ], - packages=find_packages(), + packages=find_packages(exclude=('unit_tests*',)), install_requires=REQUIREMENTS, **SETUP_BASE ) diff --git a/packages/google-cloud-error-reporting/tests/__init__.py b/packages/google-cloud-error-reporting/tests/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/unit_tests/__init__.py b/packages/google-cloud-error-reporting/tests/unit/__init__.py similarity index 100% rename from packages/google-cloud-error-reporting/unit_tests/__init__.py rename to packages/google-cloud-error-reporting/tests/unit/__init__.py diff --git a/packages/google-cloud-error-reporting/unit_tests/test__gax.py b/packages/google-cloud-error-reporting/tests/unit/test__gax.py similarity index 100% rename from packages/google-cloud-error-reporting/unit_tests/test__gax.py rename to packages/google-cloud-error-reporting/tests/unit/test__gax.py diff --git a/packages/google-cloud-error-reporting/unit_tests/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py similarity index 100% rename from packages/google-cloud-error-reporting/unit_tests/test__logging.py rename to packages/google-cloud-error-reporting/tests/unit/test__logging.py diff --git a/packages/google-cloud-error-reporting/unit_tests/test_client.py b/packages/google-cloud-error-reporting/tests/unit/test_client.py similarity index 100% rename from packages/google-cloud-error-reporting/unit_tests/test_client.py rename to packages/google-cloud-error-reporting/tests/unit/test_client.py diff --git a/packages/google-cloud-error-reporting/unit_tests/test_util.py b/packages/google-cloud-error-reporting/tests/unit/test_util.py similarity index 100% rename from packages/google-cloud-error-reporting/unit_tests/test_util.py rename to packages/google-cloud-error-reporting/tests/unit/test_util.py diff --git a/packages/google-cloud-error-reporting/tox.ini b/packages/google-cloud-error-reporting/tox.ini deleted file mode 100644 index 63c0e63bb2cd..000000000000 --- a/packages/google-cloud-error-reporting/tox.ini +++ /dev/null @@ -1,38 +0,0 @@ -[tox] -envlist = - py27,py34,py35,cover - -[testing] -localdeps = - pip install --quiet --upgrade \ - {toxinidir}/../core \ - {toxinidir}/../logging -deps = - {toxinidir}/../core - {toxinidir}/../logging - mock - pytest -covercmd = - py.test --quiet \ - --cov=google.cloud.error_reporting \ - --cov=unit_tests \ - --cov-config {toxinidir}/.coveragerc \ - unit_tests - -[testenv] -commands = - {[testing]localdeps} - py.test --quiet {posargs} unit_tests -deps = - {[testing]deps} - -[testenv:cover] -basepython = - python2.7 -commands = - {[testing]localdeps} - {[testing]covercmd} -deps = - {[testenv]deps} - coverage - pytest-cov From 6e4f785f3a1a673b84c91af273711a25f9aeebb8 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 27 Mar 2017 10:20:16 -0700 Subject: [PATCH 045/467] Fixing up some format strings in nox configs. Using `STRING_TEMPLATE % VARIABLE` can introduce hard-to-find bugs if `VARIABLE` is expected to be a string but ends up being a tuple. Instead of using percent formatting, just using `.format`. Also making tweaks to `get_target_packages` to make some path manipulation / checks OS-independent. --- packages/google-cloud-error-reporting/nox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 10161156d921..8f283f198948 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -25,7 +25,7 @@ def unit_tests(session, python_version): """Run the unit test suite.""" # Run unit tests against all supported versions of Python. - session.interpreter = 'python%s' % python_version + session.interpreter = 'python{}'.format(python_version) # Install all test dependencies, then install this package in-place. session.install('mock', 'pytest', 'pytest-cov', '../core/') From f6b3e62a3b38675a8884d5c88620dd06d1d959d3 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Tue, 28 Mar 2017 10:11:22 -0400 Subject: [PATCH 046/467] Prep error-reporting-0.23.2 (#3217) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 106ac3ff5976..7a165a18c9b7 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -57,7 +57,7 @@ setup( name='google-cloud-error-reporting', - version='0.23.1', + version='0.23.2', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 39d021fd72ff0d7f373082c92da00349a7ec8871 Mon Sep 17 00:00:00 2001 From: laurence Date: Wed, 29 Mar 2017 15:26:41 +0100 Subject: [PATCH 047/467] Revert "Fix make_report_error_api usage of Client._project." This reverts commit 945c3fbd246378ec2cbf69645275b6ca0b35c415. --- .../google/cloud/error_reporting/_gax.py | 2 +- .../google-cloud-error-reporting/tests/unit/test__gax.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py index 24fd5f789446..a516572966d1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py @@ -41,7 +41,7 @@ def make_report_error_api(client): report_errors_service_client.ReportErrorsServiceClient.SERVICE_ADDRESS) gax_client = report_errors_service_client.ReportErrorsServiceClient( channel=channel, lib_name='gccl', lib_version=__version__) - return _ErrorReportingGaxApi(gax_client, client._project) + return _ErrorReportingGaxApi(gax_client, client.project) class _ErrorReportingGaxApi(object): diff --git a/packages/google-cloud-error-reporting/tests/unit/test__gax.py b/packages/google-cloud-error-reporting/tests/unit/test__gax.py index cd237f76fe13..8737b3871c54 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__gax.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__gax.py @@ -30,8 +30,8 @@ def test_make_report_error_api(self): client = mock.Mock( _credentials=mock.sentinel.credentials, - _project='prahj-ekt', - spec=['_project', '_credentials'], + project='prahj-ekt', + spec=['project', '_credentials'], ) # Mock out the constructor for the GAPIC client. @@ -52,7 +52,7 @@ def test_make_report_error_api(self): # Assert that the final error client has the project in # the expected location. - self.assertIs(report_error_client._project, client._project) + self.assertIs(report_error_client._project, client.project) class Test_ErrorReportingGaxApi(unittest.TestCase): From e8fcd57174a191a3f992eb253b7e51907abdd486 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 30 Mar 2017 08:43:22 -0700 Subject: [PATCH 048/467] Renaming http argument(s) as _http. (#3235) --- .../google/cloud/error_reporting/_logging.py | 16 ++++--- .../google/cloud/error_reporting/client.py | 46 ++++++++++--------- packages/google-cloud-error-reporting/nox.py | 2 +- .../tests/unit/test__logging.py | 3 +- .../tests/unit/test_client.py | 2 +- 5 files changed, 38 insertions(+), 31 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index 59e1154c2b17..2a7b20816b57 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -33,18 +33,20 @@ class _ErrorReportingLoggingAPI(object): :type credentials: :class:`oauth2client.client.OAuth2Credentials` or :class:`NoneType` :param credentials: The OAuth2 Credentials to use for the connection - owned by this client. If not passed (and if no ``http`` + owned by this client. If not passed (and if no ``_http`` object is passed), falls back to the default inferred from the environment. - :type http: :class:`httplib2.Http` or class that defines ``request()``. - :param http: An optional HTTP object to make requests. If not passed, an - ``http`` object is created that is bound to the - ``credentials`` for the current object. + :type _http: :class:`httplib2.Http` or class that defines ``request()``. + :param _http: An optional HTTP object to make requests. If not passed, an + ``_http`` object is created that is bound to the + ``credentials`` for the current object. + This parameter should be considered private, and could + change in the future. """ - def __init__(self, project, credentials=None, http=None): + def __init__(self, project, credentials=None, _http=None): self.logging_client = google.cloud.logging.client.Client( - project, credentials, http) + project, credentials, _http=_http) def report_error_event(self, error_report): """Report error payload. diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 9209dae2e641..fb23cfb56b42 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -19,9 +19,9 @@ try: from google.cloud.error_reporting._gax import make_report_error_api - _HAVE_GAX = True + _HAVE_GRPC = True except ImportError: # pragma: NO COVER - _HAVE_GAX = False + _HAVE_GRPC = False from google.cloud.client import ClientWithProject from google.cloud.error_reporting._logging import _ErrorReportingLoggingAPI @@ -29,8 +29,8 @@ import six -_DISABLE_GAX = os.getenv(DISABLE_GRPC, False) -_USE_GAX = _HAVE_GAX and not _DISABLE_GAX +_DISABLE_GRPC = os.getenv(DISABLE_GRPC, False) +_USE_GRPC = _HAVE_GRPC and not _DISABLE_GRPC class HTTPContext(object): @@ -86,14 +86,16 @@ class Client(ClientWithProject): :type credentials: :class:`oauth2client.client.OAuth2Credentials` or :class:`NoneType` :param credentials: The OAuth2 Credentials to use for the connection - owned by this client. If not passed (and if no ``http`` + owned by this client. If not passed (and if no ``_http`` object is passed), falls back to the default inferred from the environment. - :type http: :class:`httplib2.Http` or class that defines ``request()``. - :param http: An optional HTTP object to make requests. If not passed, an - ``http`` object is created that is bound to the - ``credentials`` for the current object. + :type _http: :class:`httplib2.Http` or class that defines ``request()``. + :param _http: An optional HTTP object to make requests. If not passed, an + ``_http`` object is created that is bound to the + ``credentials`` for the current object. + This parameter should be considered private, and could + change in the future. :type service: str :param service: An identifier of the service, such as the name of the @@ -109,11 +111,13 @@ class Client(ClientWithProject): SHA-1 hash, for example. If the developer did not provide a version, the value is set to default. - :type use_gax: bool - :param use_gax: (Optional) Explicitly specifies whether - to use the gRPC transport (via GAX) or HTTP. If unset, - falls back to the ``GOOGLE_CLOUD_DISABLE_GRPC`` environment - variable. + :type _use_grpc: bool + :param _use_grpc: (Optional) Explicitly specifies whether + to use the gRPC transport (via GAX) or HTTP. If unset, + falls back to the ``GOOGLE_CLOUD_DISABLE_GRPC`` + environment variable. + This parameter should be considered private, and could + change in the future. :raises: :class:`ValueError` if the project is neither passed in nor set in the environment. @@ -121,20 +125,20 @@ class Client(ClientWithProject): def __init__(self, project=None, credentials=None, - http=None, + _http=None, service=None, version=None, - use_gax=None): + _use_grpc=None): super(Client, self).__init__(project=project, credentials=credentials, - http=http) + _http=_http) self._report_errors_api = None self.service = service if service else self.DEFAULT_SERVICE self.version = version - if use_gax is None: - self._use_gax = _USE_GAX + if _use_grpc is None: + self._use_grpc = _USE_GRPC else: - self._use_gax = use_gax + self._use_grpc = _use_grpc DEFAULT_SERVICE = 'python' @@ -153,7 +157,7 @@ def report_errors_api(self): :returns: A class that implements the report errors API. """ if self._report_errors_api is None: - if self._use_gax: + if self._use_grpc: self._report_errors_api = make_report_error_api(self) else: self._report_errors_api = _ErrorReportingLoggingAPI( diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 8f283f198948..29f2d5f51429 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -28,7 +28,7 @@ def unit_tests(session, python_version): session.interpreter = 'python{}'.format(python_version) # Install all test dependencies, then install this package in-place. - session.install('mock', 'pytest', 'pytest-cov', '../core/') + session.install('mock', 'pytest', 'pytest-cov', '../core/', '../logging/') session.install('-e', '.') # Run py.test against the unit tests. diff --git a/packages/google-cloud-error-reporting/tests/unit/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py index 58852b57c578..034cf066b642 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__logging.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__logging.py @@ -45,7 +45,8 @@ def test_constructor(self): def test_report_error_event(self, mocked_cls): credentials = _make_credentials() logging_api = self._make_one(self.PROJECT, credentials) - mocked_cls.assert_called_once_with(self.PROJECT, credentials, None) + mocked_cls.assert_called_once_with( + self.PROJECT, credentials, _http=None) self.assertIs(logging_api.logging_client, mocked_cls.return_value) logger = mock.Mock(spec=['log_struct']) diff --git a/packages/google-cloud-error-reporting/tests/unit/test_client.py b/packages/google-cloud-error-reporting/tests/unit/test_client.py index ef8999d4bf6a..5bdc6c5ed60d 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test_client.py +++ b/packages/google-cloud-error-reporting/tests/unit/test_client.py @@ -95,7 +95,7 @@ def test_report_exception_wo_gax(self): credentials = _make_credentials() client = self._make_one(project=self.PROJECT, credentials=credentials, - use_gax=False) + _use_grpc=False) patch = mock.patch( 'google.cloud.error_reporting.client._ErrorReportingLoggingAPI' ) From 0a25866c0188ca8f85b3885367ef88805a35caaf Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Thu, 30 Mar 2017 14:45:10 -0700 Subject: [PATCH 049/467] GA and Beta Promotions (#3245) * Make clients explicitly unpickleable. Closes #3211. * Make clients explicitly unpickleable. Closes #3211. * Add GA designator, add 1.0 version numbers. * Version changes. Eep. * Oops, Speech is still alpha. * 0.24.0, not 0.24.1 * Remove double __getstate__ goof. * Version changes. Eep. * Oops, Speech is still alpha. * Remove double __getstate__ goof. * Adding 3.6 classifier where missing and fixing bad versions. Done via "git grep '0\.24'" and "git grep '0\.23'". * Fix Noxfiles forlocal packages. * Fixing copy-pasta issue in error reporting nox config. Also fixing bad indent in same file. * Depend on stable logging in error reporting package. * Fixing lint errors in error_reporting. These were masked because error_reporting's lint nox session was linting the datastore codebase. This also means that the error reporting package has gained __all__. * Fixing a syntax error in nox config for logging. Also fixing an indent error while I was in there. * Revert "Add docs for 'result_index' usage and a system test." This reverts commit b5742aa160f604ec7cd81873ad24ac9aa75e548d. * Fixing docs nox session for umbrella package. Two issues: - error_reporting came BEFORE logging (which means it would try to pull in a logging dep from PyPI that doesn't exist) - dns was NOT in the list of local packages * Updating upper bound on logging in error_reporting. * Un-revert typo fix. --- .../google/cloud/error_reporting/__init__.py | 2 ++ .../google/cloud/error_reporting/_logging.py | 6 +++--- .../google/cloud/error_reporting/client.py | 6 +++--- packages/google-cloud-error-reporting/nox.py | 17 ++++++++++------- packages/google-cloud-error-reporting/setup.py | 7 ++++--- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py index bb76fb9b332a..4cecb96024a0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py @@ -21,3 +21,5 @@ from google.cloud.error_reporting.client import Client from google.cloud.error_reporting.client import HTTPContext from google.cloud.error_reporting.util import build_flask_context + +__all__ = ['__version__', 'Client', 'HTTPContext', 'build_flask_context'] diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index 2a7b20816b57..d8bd7a12a477 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -33,9 +33,9 @@ class _ErrorReportingLoggingAPI(object): :type credentials: :class:`oauth2client.client.OAuth2Credentials` or :class:`NoneType` :param credentials: The OAuth2 Credentials to use for the connection - owned by this client. If not passed (and if no ``_http`` - object is passed), falls back to the default inferred - from the environment. + owned by this client. If not passed (and if no + ``_http`` object is passed), falls back to the default + inferred from the environment. :type _http: :class:`httplib2.Http` or class that defines ``request()``. :param _http: An optional HTTP object to make requests. If not passed, an diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index fb23cfb56b42..8be6627ada28 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -86,9 +86,9 @@ class Client(ClientWithProject): :type credentials: :class:`oauth2client.client.OAuth2Credentials` or :class:`NoneType` :param credentials: The OAuth2 Credentials to use for the connection - owned by this client. If not passed (and if no ``_http`` - object is passed), falls back to the default inferred - from the environment. + owned by this client. If not passed (and if no + ``_http`` object is passed), falls back to the default + inferred from the environment. :type _http: :class:`httplib2.Http` or class that defines ``request()``. :param _http: An optional HTTP object to make requests. If not passed, an diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 29f2d5f51429..7b455a0e32b6 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -19,6 +19,9 @@ import nox +LOCAL_DEPS = ('../core/', '../logging/') + + @nox.session @nox.parametrize('python_version', ['2.7', '3.4', '3.5', '3.6']) def unit_tests(session, python_version): @@ -28,14 +31,14 @@ def unit_tests(session, python_version): session.interpreter = 'python{}'.format(python_version) # Install all test dependencies, then install this package in-place. - session.install('mock', 'pytest', 'pytest-cov', '../core/', '../logging/') + session.install('mock', 'pytest', 'pytest-cov', *LOCAL_DEPS) session.install('-e', '.') # Run py.test against the unit tests. - session.run('py.test', '--quiet', - '--cov=google.cloud.datastore', '--cov=tests.unit', '--cov-append', - '--cov-config=.coveragerc', '--cov-report=', '--cov-fail-under=97', - 'tests/unit', + session.run( + 'py.test', '--quiet', '--cov=google.cloud.error_reporting', + '--cov=tests.unit', '--cov-append', '--cov-config=.coveragerc', + '--cov-report=', '--cov-fail-under=97', 'tests/unit', ) @@ -47,9 +50,9 @@ def lint(session): serious code quality issues. """ session.interpreter = 'python3.6' - session.install('flake8') + session.install('flake8', *LOCAL_DEPS) session.install('.') - session.run('flake8', 'google/cloud/datastore') + session.run('flake8', 'google/cloud/error_reporting') @nox.session diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 7a165a18c9b7..e2bdd9644e72 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -44,20 +44,21 @@ 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', 'Topic :: Internet', ], } REQUIREMENTS = [ - 'google-cloud-core >= 0.23.1, < 0.24dev', - 'google-cloud-logging >= 0.23.0, < 0.24dev', + 'google-cloud-core >= 0.24.0, < 0.25dev', + 'google-cloud-logging >= 1.0.0, < 2.0dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.23.2', + version='0.24.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 94796af5d630c367b69f931cdcaa78beb6602665 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Fri, 31 Mar 2017 18:46:48 -0700 Subject: [PATCH 050/467] Downgrading logging from 1.0.0 to 0.24.0. This is temporary as #2674 is still being sorted out. This way we don't block an umbrella release or the release of error reporting. --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index e2bdd9644e72..1c9f55f720db 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -52,7 +52,7 @@ REQUIREMENTS = [ 'google-cloud-core >= 0.24.0, < 0.25dev', - 'google-cloud-logging >= 1.0.0, < 2.0dev', + 'google-cloud-logging >= 0.24.0, < 0.25dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] From d77eec842302791cd08b8e3242d014439ea14f35 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 6 Apr 2017 18:43:55 -0700 Subject: [PATCH 051/467] Cut release 1.0.0 of logging package. (#3278) --- packages/google-cloud-error-reporting/setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 1c9f55f720db..8c25c9308a07 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -52,13 +52,13 @@ REQUIREMENTS = [ 'google-cloud-core >= 0.24.0, < 0.25dev', - 'google-cloud-logging >= 0.24.0, < 0.25dev', + 'google-cloud-logging >= 1.0.0, < 2.0dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.24.0', + version='0.24.1', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 37faf1d442f794fc3c07b20f528419e910e97f4b Mon Sep 17 00:00:00 2001 From: Bill Prin Date: Mon, 17 Apr 2017 10:16:11 -0700 Subject: [PATCH 052/467] Replace httpContext with httpRequest (#3299) --- .../google/cloud/error_reporting/client.py | 3 +-- .../google-cloud-error-reporting/tests/unit/test_client.py | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 8be6627ada28..6e768a0534fb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -224,11 +224,10 @@ def _build_error_report(self, if http_context: http_context_dict = http_context.__dict__ # strip out None values - payload['context']['httpContext'] = { + payload['context']['httpRequest'] = { key: value for key, value in six.iteritems(http_context_dict) if value is not None } - if user: payload['context']['user'] = user return payload diff --git a/packages/google-cloud-error-reporting/tests/unit/test_client.py b/packages/google-cloud-error-reporting/tests/unit/test_client.py index 5bdc6c5ed60d..5cef939a1da3 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test_client.py +++ b/packages/google-cloud-error-reporting/tests/unit/test_client.py @@ -149,9 +149,9 @@ def test_report_exception_with_service_version_in_constructor( payload['message']) self.assertIn('test_client.py', payload['message']) self.assertEqual( - payload['context']['httpContext']['responseStatusCode'], 500) + payload['context']['httpRequest']['responseStatusCode'], 500) self.assertEqual( - payload['context']['httpContext']['method'], 'GET') + payload['context']['httpRequest']['method'], 'GET') self.assertEqual(payload['context']['user'], user) @mock.patch('google.cloud.error_reporting.client.make_report_error_api') From c98002375e47c81fe1c7375fb7fde4e1ac6d0dc8 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 20 Apr 2017 13:00:32 -0700 Subject: [PATCH 053/467] Adding check that **all** setup.py README's are valid RST. (#3318) * Adding check that **all** setup.py README's are valid RST. Follow up to #3316. Fixes #2446. * Fixing duplicate reference in Logging README. * Fixing duplicate reference in Monitoring README. --- packages/google-cloud-error-reporting/nox.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 7b455a0e32b6..746417ccd3e1 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -55,6 +55,15 @@ def lint(session): session.run('flake8', 'google/cloud/error_reporting') +@nox.session +def lint_setup_py(session): + """Verify that setup.py is valid (including RST check).""" + session.interpreter = 'python3.6' + session.install('docutils', 'Pygments') + session.run( + 'python', 'setup.py', 'check', '--restructuredtext', '--strict') + + @nox.session def cover(session): """Run the final coverage report. From dafb50c6fe465cc2962076cdf4eece1d6c7504e2 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Fri, 21 Apr 2017 10:03:56 -0700 Subject: [PATCH 054/467] Ignore tests (rather than unit_tests) in setup.py files. (#3319) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 8c25c9308a07..d1175a093f0c 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -65,7 +65,7 @@ 'google', 'google.cloud', ], - packages=find_packages(exclude=('unit_tests*',)), + packages=find_packages(exclude=('tests*',)), install_requires=REQUIREMENTS, **SETUP_BASE ) From dc026ddfcd3ce8d9d112266860eeaeda00c4d8ed Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 27 Apr 2017 11:09:09 -0700 Subject: [PATCH 055/467] Adding scope to error reporting client. (#3334) --- .../google/cloud/error_reporting/client.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 6e768a0534fb..18138826fc37 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -123,6 +123,9 @@ class Client(ClientWithProject): set in the environment. """ + SCOPE = ('https://www.googleapis.com/auth/cloud-platform',) + """The scopes required for authenticating as an API consumer.""" + def __init__(self, project=None, credentials=None, _http=None, From e8292b6463061fd27ecca889cf0b8c541b621814 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Fri, 28 Apr 2017 11:15:27 -0700 Subject: [PATCH 056/467] Cut releases of core, error reporting, pubsub, spanner and storage. (#3340) Also updating the umbrella/uber package along the way. --- packages/google-cloud-error-reporting/setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index d1175a093f0c..2cf6ef8a9cac 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -51,14 +51,14 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.24.0, < 0.25dev', + 'google-cloud-core >= 0.24.1, < 0.25dev', 'google-cloud-logging >= 1.0.0, < 2.0dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.24.1', + version='0.24.2', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From d94a008e1ca15abf1169687818fff4a187d75091 Mon Sep 17 00:00:00 2001 From: Bill Prin Date: Thu, 4 May 2017 15:41:25 -0700 Subject: [PATCH 057/467] Add error reporting system test (#3348) --- packages/google-cloud-error-reporting/nox.py | 22 ++++ .../tests/system.py | 123 ++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 packages/google-cloud-error-reporting/tests/system.py diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 746417ccd3e1..1deed376b6e7 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -64,6 +64,28 @@ def lint_setup_py(session): 'python', 'setup.py', 'check', '--restructuredtext', '--strict') +@nox.session +@nox.parametrize('python_version', ['2.7', '3.6']) +def system_tests(session, python_version): + """Run the system test suite.""" + + # Sanity check: Only run system tests if the environment variable is set. + if not os.environ.get('GOOGLE_APPLICATION_CREDENTIALS', ''): + return + + # Run the system tests against latest Python 2 and Python 3 only. + session.interpreter = 'python{}'.format(python_version) + + # Install all test dependencies, then install this package into the + # virtualenv's dist-packages. + session.install('mock', 'pytest', *LOCAL_DEPS) + session.install('../test_utils/') + session.install('.') + + # Run py.test against the system tests. + session.run('py.test', '-vvv', 'tests/system.py') + + @nox.session def cover(session): """Run the final coverage report. diff --git a/packages/google-cloud-error-reporting/tests/system.py b/packages/google-cloud-error-reporting/tests/system.py new file mode 100644 index 000000000000..3dfafbb6cb07 --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/system.py @@ -0,0 +1,123 @@ +# Copyright 2017 Google Inc. +# +# 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 functools +import operator +import unittest + +from google.cloud import error_reporting +from google.cloud.gapic.errorreporting.v1beta1 import ( + error_stats_service_client) +from google.cloud.proto.devtools.clouderrorreporting.v1beta1 import ( + error_stats_service_pb2) +from google.protobuf.duration_pb2 import Duration + +from test_utils.retry import RetryResult +from test_utils.system import unique_resource_id + + +ERROR_MSG = 'Stackdriver Error Reporting System Test' + + +def setUpModule(): + Config.CLIENT = error_reporting.Client() + + +class Config(object): + """Run-time configuration to be modified at set-up. + + This is a mutable stand-in to allow test set-up to modify + global state. + """ + CLIENT = None + + +def _list_groups(client): + """List Error Groups from the last 60 seconds. + + This class provides a wrapper around making calls to the GAX + API. It's used by the system tests to find the appropriate error group + to verify the error was successfully reported. + + :type client: :class:`~google.cloud.error_reporting.client.Client` + :param client: The client containing a project and credentials. + + :rtype: :class:`~google.gax.ResourceIterator` + :returns: Iterable of :class:`~.error_stats_service_pb2.ErrorGroupStats`. + """ + gax_api = error_stats_service_client.ErrorStatsServiceClient( + credentials=client._credentials) + project_name = gax_api.project_path(client.project) + + time_range = error_stats_service_pb2.QueryTimeRange() + time_range.period = error_stats_service_pb2.QueryTimeRange.PERIOD_1_HOUR + + duration = Duration(seconds=60 * 60) + + return gax_api.list_group_stats( + project_name, time_range, timed_count_duration=duration) + + +def _simulate_exception(class_name, client): + """Simulates an exception to verify it was reported. + + :type class_name: str + :param class_name: The name of a custom error class to + create (and raise). + + :type client: :class:`~google.cloud.error_reporting.client.Client` + :param client: The client that will report the exception. + """ + custom_exc = type(class_name, (RuntimeError,), {}) + try: + raise custom_exc(ERROR_MSG) + except RuntimeError: + client.report_exception() + + +def _get_error_count(class_name, client): + """Counts the number of errors in the group of the test exception. + + :type class_name: str + :param class_name: The name of a custom error class used. + + :type client: :class:`~google.cloud.error_reporting.client.Client` + :param client: The client containing a project and credentials. + + :rtype: int + :returns: Group count for errors that match ``class_name``. If no + match is found, returns :data:`None`. + """ + groups = _list_groups(client) + for group in groups: + if class_name in group.representative.message: + return group.count + + +class TestErrorReporting(unittest.TestCase): + + def test_report_exception(self): + # Get a class name unique to this test case. + class_name = 'RuntimeError' + unique_resource_id('_') + + # Simulate an error: group won't exist until we report + # first exception. + _simulate_exception(class_name, Config.CLIENT) + + is_one = functools.partial(operator.eq, 1) + is_one.__name__ = 'is_one' # partial() has no name. + wrapped_get_count = RetryResult(is_one)(_get_error_count) + + error_count = wrapped_get_count(class_name, Config.CLIENT) + self.assertEqual(error_count, 1) From 8d6d12036bf0c4122057ca4787a7fcf77767e938 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 16 May 2017 15:34:18 -0700 Subject: [PATCH 058/467] Increasing retries from 4 to 6 for error reporting system test. Some recent failures: - https://circleci.com/gh/GoogleCloudPlatform/google-cloud-python/1901 - https://circleci.com/gh/GoogleCloudPlatform/google-cloud-python/1906 - https://circleci.com/gh/GoogleCloudPlatform/google-cloud-python/1907 - https://circleci.com/gh/GoogleCloudPlatform/google-cloud-python/1924 --- packages/google-cloud-error-reporting/tests/system.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/tests/system.py b/packages/google-cloud-error-reporting/tests/system.py index 3dfafbb6cb07..fb2f4742910d 100644 --- a/packages/google-cloud-error-reporting/tests/system.py +++ b/packages/google-cloud-error-reporting/tests/system.py @@ -117,7 +117,8 @@ def test_report_exception(self): is_one = functools.partial(operator.eq, 1) is_one.__name__ = 'is_one' # partial() has no name. - wrapped_get_count = RetryResult(is_one)(_get_error_count) + retry = RetryResult(is_one, max_tries=6) + wrapped_get_count = retry(_get_error_count) error_count = wrapped_get_count(class_name, Config.CLIENT) self.assertEqual(error_count, 1) From 828ad11d4166a46256258d4fb2653052047ddc8c Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Fri, 2 Jun 2017 14:36:29 -0700 Subject: [PATCH 059/467] Vision semi-GAPIC (#3373) --- .../google/cloud/error_reporting/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 18138826fc37..77c2da631f20 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -149,7 +149,7 @@ def __init__(self, project=None, def report_errors_api(self): """Helper for logging-related API calls. - See: + See https://cloud.google.com/logging/docs/reference/v2/rest/v2/entries https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.logs From 576ccf408c4b8b35072dd39f61fb5b2060da17ff Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Fri, 23 Jun 2017 15:08:10 -0700 Subject: [PATCH 060/467] Re-enable pylint in info-only mode for all packages (#3519) --- packages/google-cloud-error-reporting/nox.py | 13 +++++++--- .../pylint.config.py | 25 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 packages/google-cloud-error-reporting/pylint.config.py diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 1deed376b6e7..db245cfd74e8 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -44,15 +44,22 @@ def unit_tests(session, python_version): @nox.session def lint(session): - """Run flake8. + """Run linters. - Returns a failure if flake8 finds linting errors or sufficiently + Returns a failure if the linters find linting errors or sufficiently serious code quality issues. """ session.interpreter = 'python3.6' - session.install('flake8', *LOCAL_DEPS) + session.install('flake8', 'pylint', 'gcp-devrel-py-tools', *LOCAL_DEPS) session.install('.') session.run('flake8', 'google/cloud/error_reporting') + session.run( + 'gcp-devrel-py-tools', 'run-pylint', + '--config', 'pylint.config.py', + '--library-filesets', 'google', + '--test-filesets', 'tests', + # Temporarily allow this to fail. + success_codes=range(0, 100)) @nox.session diff --git a/packages/google-cloud-error-reporting/pylint.config.py b/packages/google-cloud-error-reporting/pylint.config.py new file mode 100644 index 000000000000..d8ca7b92e85e --- /dev/null +++ b/packages/google-cloud-error-reporting/pylint.config.py @@ -0,0 +1,25 @@ +# Copyright 2017 Google Inc. +# +# 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. + +"""This module is used to configure gcp-devrel-py-tools run-pylint.""" + +# Library configuration + +# library_additions = {} +# library_replacements = {} + +# Test configuration + +# test_additions = copy.deepcopy(library_additions) +# test_replacements = copy.deepcopy(library_replacements) From b722a8629d18c5946ef07fdfb581bc08ec3c9a51 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Mon, 26 Jun 2017 19:13:45 -0400 Subject: [PATCH 061/467] Prep error-reporting-0.25.0 release. (#3542) --- packages/google-cloud-error-reporting/setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 2cf6ef8a9cac..a4060c9fd33e 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -51,14 +51,14 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.24.1, < 0.25dev', + 'google-cloud-core >= 0.25.0, < 0.26dev', 'google-cloud-logging >= 1.0.0, < 2.0dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.24.2', + version='0.25.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 881c3eccfc3d6a2851fb91d339e12df08bf175b7 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Tue, 27 Jun 2017 10:32:30 -0700 Subject: [PATCH 062/467] Fix inclusion of tests in manifest.in (#3552) --- packages/google-cloud-error-reporting/MANIFEST.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index 9f7100c9528a..fc77f8c82ff0 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -1,4 +1,4 @@ include README.rst LICENSE recursive-include google *.json *.proto -recursive-include unit_tests * +recursive-include tests * global-exclude *.pyc __pycache__ From 2a33ba286d8c9515bebcdd2bf02ff0bcb2f1d349 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Wed, 28 Jun 2017 14:07:25 -0700 Subject: [PATCH 063/467] Making all LICENSE headers "uniform". (#3563) --- packages/google-cloud-error-reporting/pylint.config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/pylint.config.py b/packages/google-cloud-error-reporting/pylint.config.py index d8ca7b92e85e..b618319b8b61 100644 --- a/packages/google-cloud-error-reporting/pylint.config.py +++ b/packages/google-cloud-error-reporting/pylint.config.py @@ -4,7 +4,7 @@ # 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 +# 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, From b4c3c3373ef24a98169ef1bdd1e7d7347356be77 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 29 Jun 2017 10:56:09 -0700 Subject: [PATCH 064/467] Skipping system tests when credentials env. var is unset. (#3475) --- packages/google-cloud-error-reporting/nox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index db245cfd74e8..08edc6987ab9 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -78,7 +78,7 @@ def system_tests(session, python_version): # Sanity check: Only run system tests if the environment variable is set. if not os.environ.get('GOOGLE_APPLICATION_CREDENTIALS', ''): - return + session.skip('Credentials must be set via environment variable.') # Run the system tests against latest Python 2 and Python 3 only. session.interpreter = 'python{}'.format(python_version) From bfff560bbaa9eddda01db1ee5de9946407d05dbf Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Thu, 6 Jul 2017 16:41:31 -0400 Subject: [PATCH 065/467] Shorten nox virtualenv names to avoid hashing. (#3585) --- packages/google-cloud-error-reporting/nox.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 08edc6987ab9..d2e2a7cb9609 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -30,6 +30,9 @@ def unit_tests(session, python_version): # Run unit tests against all supported versions of Python. session.interpreter = 'python{}'.format(python_version) + # Set the virtualenv dirname. + session.virtualenv_dirname = 'unit-' + python_version + # Install all test dependencies, then install this package in-place. session.install('mock', 'pytest', 'pytest-cov', *LOCAL_DEPS) session.install('-e', '.') @@ -66,6 +69,10 @@ def lint(session): def lint_setup_py(session): """Verify that setup.py is valid (including RST check).""" session.interpreter = 'python3.6' + + # Set the virtualenv dirname. + session.virtualenv_dirname = 'setup' + session.install('docutils', 'Pygments') session.run( 'python', 'setup.py', 'check', '--restructuredtext', '--strict') @@ -83,6 +90,9 @@ def system_tests(session, python_version): # Run the system tests against latest Python 2 and Python 3 only. session.interpreter = 'python{}'.format(python_version) + # Set the virtualenv dirname. + session.virtualenv_dirname = 'sys-' + python_version + # Install all test dependencies, then install this package into the # virtualenv's dist-packages. session.install('mock', 'pytest', *LOCAL_DEPS) From 4601851736c486b68d2c82a93de8d3f0a55e9c2e Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 11 Jul 2017 10:51:40 -0700 Subject: [PATCH 066/467] Updating author_email in all setup.py. (#3598) Done via: $ git grep -l author_email | \ > xargs sed -i s/jjg+google-cloud-python@google.com/googleapis-publisher@google.com/g and manually editing `videointelligence/setup.py` and `vision/setup.py`. --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index a4060c9fd33e..039daa6885a0 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -27,7 +27,7 @@ # consolidate. SETUP_BASE = { 'author': 'Google Cloud Platform', - 'author_email': 'jjg+google-cloud-python@google.com', + 'author_email': 'googleapis-publisher@google.com', 'scripts': [], 'url': 'https://github.com/GoogleCloudPlatform/google-cloud-python', 'license': 'Apache 2.0', From c27981cb7765c16b12483489c1fde3d8bc6e67d9 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 11 Jul 2017 13:28:24 -0700 Subject: [PATCH 067/467] Patch in the version updates made when fixing #3579. (#3591) --- packages/google-cloud-error-reporting/setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 039daa6885a0..807af3b97907 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -52,13 +52,13 @@ REQUIREMENTS = [ 'google-cloud-core >= 0.25.0, < 0.26dev', - 'google-cloud-logging >= 1.0.0, < 2.0dev', + 'google-cloud-logging >= 1.1.0, < 1.2dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.25.0', + version='0.25.1', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 43a705da7c42c1a2985bac22e2b4edebc9296f32 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Wed, 19 Jul 2017 14:58:17 -0700 Subject: [PATCH 068/467] Fixing references to "dead" docs links. (#3631) * Fixing references to "dead" docs links. Done via: $ git grep -l 'google-cloud-auth.html' | \ > xargs sed -i s/'google-cloud-auth.html'/'core\/auth.html'/g $ git grep -l 'http\:\/\/google-cloud-python.readthedocs.io' | \ > xargs sed -i s/'http\:\/\/google-cloud-python.readthedocs.io'/\ > 'https\:\/\/google-cloud-python.readthedocs.io'/g Fixes #3531. * Fixing up other docs that were moved in #3459. --- packages/google-cloud-error-reporting/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index e968d42754bf..69308b1ce0e2 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -9,7 +9,7 @@ Python Client for Stackdriver Error Reporting - `Documentation`_ -.. _Documentation: https://googlecloudplatform.github.io/google-cloud-python/stable/error-reporting-usage.html +.. _Documentation: https://googlecloudplatform.github.io/google-cloud-python/stable/error-reporting/usage.html Quick Start ----------- @@ -26,7 +26,7 @@ possible. Check out the `Authentication section`_ in our documentation to learn more. You may also find the `authentication document`_ shared by all the ``google-cloud-*`` libraries to be helpful. -.. _Authentication section: http://google-cloud-python.readthedocs.io/en/latest/google-cloud-auth.html +.. _Authentication section: https://google-cloud-python.readthedocs.io/en/latest/core/auth.html .. _authentication document: https://github.com/GoogleCloudPlatform/gcloud-common/tree/master/authentication Using the API From f8e195699aa3a5b399ae72d8bc6e2c3fe92c630d Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 20 Jul 2017 09:33:21 -0700 Subject: [PATCH 069/467] Changing all pypi.python.org links to warehouse links. (#3641) Done via $ export OLD='https\:\/\/pypi.python.org\/pypi\/' $ export NEW='https\:\/\/pypi.org\/project\/' $ git grep -l ${OLD} | xargs sed -i s/${OLD}/${NEW}/g Then manually going through and adding a trailing slash to all warehouse links. (Though I did undo changes to `docs/json/`.) --- packages/google-cloud-error-reporting/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 69308b1ce0e2..104856f348e6 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -47,6 +47,6 @@ See the ``google-cloud-python`` API Error Reporting `Documentation`_ to learn how to get started using this library. .. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg - :target: https://pypi.python.org/pypi/google-cloud-error-reporting + :target: https://pypi.org/project/google-cloud-error-reporting/ .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg - :target: https://pypi.python.org/pypi/google-cloud-error-reporting + :target: https://pypi.org/project/google-cloud-error-reporting/ From 5ea761c812c3d3dc6fe669e6ab57ecc9b21d377b Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Thu, 27 Jul 2017 11:21:30 -0700 Subject: [PATCH 070/467] Remove httplib2, replace with Requests (#3674) * Core: remove httplib2, replace with Requests Additionally remove make_exception in favor of from_http_status and from_http_response. * Datastore: replace httplib2 with Requests * DNS: replace httplib2 with Requests * Error Reporting: replace httplib2 with requests * Language: replace httplib2 with Requests * Logging: replace httplib2 with requests * Monitoring: replace httplib2 with Requests * Pubsub: replace httplib2 with Requests * Resource Manager: replace httplib2 with Requests * Runtimeconfig: replace httplib2 with Requests * Speech: replace httplib2 with Requests * Storage: replace httplib2 with Requests * BigQuery: replace httplib2 with Requests * Translate: replace httplib2 with Requests * Vision: replace httplib2 with Requests --- .../google/cloud/error_reporting/_logging.py | 6 ++++-- .../google/cloud/error_reporting/client.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index d8bd7a12a477..5d7fd3ff3853 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -37,8 +37,10 @@ class _ErrorReportingLoggingAPI(object): ``_http`` object is passed), falls back to the default inferred from the environment. - :type _http: :class:`httplib2.Http` or class that defines ``request()``. - :param _http: An optional HTTP object to make requests. If not passed, an + :type _http: :class:`~requests.Session` + :param _http: (Optional) HTTP object to make requests. Can be any object + that defines ``request()`` with the same interface as + :meth:`requests.Session.request`. If not passed, an ``_http`` object is created that is bound to the ``credentials`` for the current object. This parameter should be considered private, and could diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 77c2da631f20..bcd164c03eee 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -90,8 +90,10 @@ class Client(ClientWithProject): ``_http`` object is passed), falls back to the default inferred from the environment. - :type _http: :class:`httplib2.Http` or class that defines ``request()``. - :param _http: An optional HTTP object to make requests. If not passed, an + :type _http: :class:`~requests.Session` + :param _http: (Optional) HTTP object to make requests. Can be any object + that defines ``request()`` with the same interface as + :meth:`requests.Session.request`. If not passed, an ``_http`` object is created that is bound to the ``credentials`` for the current object. This parameter should be considered private, and could From f1573a9ef899b75c888b896025c7158bc943355d Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Fri, 4 Aug 2017 16:45:43 -0700 Subject: [PATCH 071/467] Updating all affected packages after google-cloud-core update. (#3730) * Updating all affected packages after google-cloud-core update. * Moving 'pip install .' **after** subpackages in nox docs. @lukesneeringer still hasn't explained why it was moved. In it's current location, the depencencies are first retrieved from PyPI (which fails here for the unreleased versions), e.g. https://circleci.com/gh/GoogleCloudPlatform/google-cloud-python/2716 --- packages/google-cloud-error-reporting/setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 807af3b97907..67714ee92e1d 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -51,14 +51,14 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.25.0, < 0.26dev', - 'google-cloud-logging >= 1.1.0, < 1.2dev', + 'google-cloud-core >= 0.26.0, < 0.27dev', + 'google-cloud-logging >= 1.2.0, < 1.3dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.25.1', + version='0.26.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From fe9100742fcd5375f240150dec727ce2f8f604e5 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Tue, 8 Aug 2017 14:50:31 -0700 Subject: [PATCH 072/467] Use latest/ directory for docs instead of stable/ (#3766) See also https://github.com/GoogleCloudPlatform/google-cloud-python/pull/3763 $ sed -i '' 's/googlecloudplatform.github.io\/google-cloud-python\/stable\//googlecloudplatform.github.io\/google-cloud-python\/latest\//g' **/*.rst --- packages/google-cloud-error-reporting/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 104856f348e6..fbf8dfaf9c8e 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -9,7 +9,7 @@ Python Client for Stackdriver Error Reporting - `Documentation`_ -.. _Documentation: https://googlecloudplatform.github.io/google-cloud-python/stable/error-reporting/usage.html +.. _Documentation: https://googlecloudplatform.github.io/google-cloud-python/latest/error-reporting/usage.html Quick Start ----------- From 91bb89321f6cd30185a8c4590509d3c826fb0b15 Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Thu, 24 Aug 2017 13:28:07 -0700 Subject: [PATCH 073/467] Bump core version number (#3864) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 67714ee92e1d..6b4f1b5ea5eb 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -51,7 +51,7 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.26.0, < 0.27dev', + 'google-cloud-core >= 0.27.0, < 0.28dev', 'google-cloud-logging >= 1.2.0, < 1.3dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] From 3dd11555f1a12009b1614ef120cb392e8a611f05 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 24 Aug 2017 14:15:01 -0700 Subject: [PATCH 074/467] Updating 10 packages after google-cloud-core==0.27.0 (#3866) - dns - error_reporting - language - logging - monitoring - resource_manager - runtimeconfig - speech - translate - vision Also updating bounds on these in `google-cloud` uber-package. --- packages/google-cloud-error-reporting/setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 6b4f1b5ea5eb..58b9c566e7fc 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -52,13 +52,13 @@ REQUIREMENTS = [ 'google-cloud-core >= 0.27.0, < 0.28dev', - 'google-cloud-logging >= 1.2.0, < 1.3dev', + 'google-cloud-logging >= 1.3.0, < 1.4dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.26.0', + version='0.27.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From db95359e57bf6f62aadf353ebeb48dc8eae2d35f Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Thu, 12 Oct 2017 17:13:19 -0700 Subject: [PATCH 075/467] s/gcloud-common/google-cloud-common/g (#4180) The gcloud-common repo moved to https://github.com/GoogleCloudPlatform/google-cloud-common --- packages/google-cloud-error-reporting/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index fbf8dfaf9c8e..8429151f3e76 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -27,7 +27,7 @@ learn more. You may also find the `authentication document`_ shared by all the ``google-cloud-*`` libraries to be helpful. .. _Authentication section: https://google-cloud-python.readthedocs.io/en/latest/core/auth.html -.. _authentication document: https://github.com/GoogleCloudPlatform/gcloud-common/tree/master/authentication +.. _authentication document: https://github.com/GoogleCloudPlatform/google-cloud-common/tree/master/authentication Using the API ------------- From 81a3a545da2e4d994765ee33ee4008d4ca11e44f Mon Sep 17 00:00:00 2001 From: michaelawyu Date: Fri, 13 Oct 2017 13:46:24 -0700 Subject: [PATCH 076/467] Update Docs with Python Setup Guide (#4187) --- packages/google-cloud-error-reporting/README.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 8429151f3e76..faa9f2d5423c 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -18,6 +18,10 @@ Quick Start $ pip install --upgrade google-cloud-error-reporting +Fore more information on setting up your Python development environment, such as installing ``pip`` and on your system, please refer to `Python Development Environment Setup Guide`_ for Google Cloud Platform. + +.. _Python Development Environment Setup Guide: https://cloud.google.com/python/setup + Authentication -------------- From 00e42a1d7ed29540d076d62e6908e5af74aac2b2 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Wed, 18 Oct 2017 15:36:57 -0700 Subject: [PATCH 077/467] Replace usage of google.api.core with google.api_core (#4221) * Remove api.core packages from google.cloud.core, make google.cloud.core depend on api_core. * s/google.api.core/google.api_core/g and nox updates * Fixing core tests, addressing review feedback * Fix bigquery --- packages/google-cloud-error-reporting/nox.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index d2e2a7cb9609..30692b1841f8 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -19,7 +19,11 @@ import nox -LOCAL_DEPS = ('../core/', '../logging/') +LOCAL_DEPS = ( + os.path.join('..', 'api_core'), + os.path.join('..', 'core'), + os.path.join('..', 'logging'), +) @nox.session From eb6da07d3e9a662a004ab6ef80e19e1c1f2ac85e Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Mon, 30 Oct 2017 14:41:42 -0700 Subject: [PATCH 078/467] Cutting version 0.28.0 of `google-cloud-core`. (#4280) Also - updating all dependencies of `grpcio` to `>= 1.7.0`. This was due to an issue [1] with `1.6.0`. - updating the version of `google-api-core` (also to be released, This is required since the bounds on `grpcio` of `google-cloud-core==0.28.0` and `google-api-core==0.1.0` are mutually exclusive.) - Updating `google-api-core` CHANGELOG for release. - Updating packages to depend on `google-cloud-core>=0.28.0`. - Installing `nox -s lint` deps locally for vision. [1]: https://github.com/grpc/grpc/issues/12455 --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 58b9c566e7fc..d8d5d4dc76bf 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -51,7 +51,7 @@ REQUIREMENTS = [ - 'google-cloud-core >= 0.27.0, < 0.28dev', + 'google-cloud-core >= 0.28.0, < 0.29dev', 'google-cloud-logging >= 1.3.0, < 1.4dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] From e78ef50fd37b9cd4ca2967fc6a74aebb2cba383b Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Tue, 31 Oct 2017 08:57:09 -0700 Subject: [PATCH 079/467] Switch copyright holder to "Google LLC" (#4287) --- packages/google-cloud-error-reporting/google/__init__.py | 2 +- packages/google-cloud-error-reporting/google/cloud/__init__.py | 2 +- .../google/cloud/error_reporting/__init__.py | 2 +- .../google/cloud/error_reporting/_gax.py | 2 +- .../google/cloud/error_reporting/_logging.py | 2 +- .../google/cloud/error_reporting/client.py | 2 +- .../google/cloud/error_reporting/util.py | 2 +- packages/google-cloud-error-reporting/nox.py | 2 +- packages/google-cloud-error-reporting/pylint.config.py | 2 +- packages/google-cloud-error-reporting/setup.py | 2 +- packages/google-cloud-error-reporting/tests/system.py | 2 +- packages/google-cloud-error-reporting/tests/unit/__init__.py | 2 +- packages/google-cloud-error-reporting/tests/unit/test__gax.py | 2 +- .../google-cloud-error-reporting/tests/unit/test__logging.py | 2 +- packages/google-cloud-error-reporting/tests/unit/test_client.py | 2 +- packages/google-cloud-error-reporting/tests/unit/test_util.py | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/__init__.py b/packages/google-cloud-error-reporting/google/__init__.py index b2b833373882..9ee9bf4342ab 100644 --- a/packages/google-cloud-error-reporting/google/__init__.py +++ b/packages/google-cloud-error-reporting/google/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. +# Copyright 2016 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/__init__.py b/packages/google-cloud-error-reporting/google/cloud/__init__.py index b2b833373882..9ee9bf4342ab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. +# Copyright 2016 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py index 4cecb96024a0..e1890b39b3c2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. +# Copyright 2016 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py index a516572966d1..a289377986a0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. All Rights Reserved. +# Copyright 2016 Google LLC All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index 5d7fd3ff3853..f0e5a0f274ec 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. All Rights Reserved. +# Copyright 2016 Google LLC All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index bcd164c03eee..af855835888b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. +# Copyright 2016 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py index 15d902d65056..8cbe4bdea471 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. All Rights Reserved. +# Copyright 2016 Google LLC All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 30692b1841f8..639d5ada562b 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. +# Copyright 2016 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/pylint.config.py b/packages/google-cloud-error-reporting/pylint.config.py index b618319b8b61..5d64b9d2f256 100644 --- a/packages/google-cloud-error-reporting/pylint.config.py +++ b/packages/google-cloud-error-reporting/pylint.config.py @@ -1,4 +1,4 @@ -# Copyright 2017 Google Inc. +# Copyright 2017 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index d8d5d4dc76bf..97250f8489b4 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. +# Copyright 2016 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/system.py b/packages/google-cloud-error-reporting/tests/system.py index fb2f4742910d..58d988bc8364 100644 --- a/packages/google-cloud-error-reporting/tests/system.py +++ b/packages/google-cloud-error-reporting/tests/system.py @@ -1,4 +1,4 @@ -# Copyright 2017 Google Inc. +# Copyright 2017 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/__init__.py b/packages/google-cloud-error-reporting/tests/unit/__init__.py index 58e0d9153632..df379f1e9d88 100644 --- a/packages/google-cloud-error-reporting/tests/unit/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. +# Copyright 2016 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/test__gax.py b/packages/google-cloud-error-reporting/tests/unit/test__gax.py index 8737b3871c54..3d5b905d4bd6 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__gax.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__gax.py @@ -1,4 +1,4 @@ -# Copyright 2017 Google Inc. +# Copyright 2017 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py index 034cf066b642..924bedb27f6b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__logging.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__logging.py @@ -1,4 +1,4 @@ -# Copyright 2017 Google Inc. +# Copyright 2017 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/test_client.py b/packages/google-cloud-error-reporting/tests/unit/test_client.py index 5cef939a1da3..9a7bdf47feb0 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test_client.py +++ b/packages/google-cloud-error-reporting/tests/unit/test_client.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. +# Copyright 2016 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/test_util.py b/packages/google-cloud-error-reporting/tests/unit/test_util.py index fa48ba14c649..bdd86bd6cb93 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test_util.py +++ b/packages/google-cloud-error-reporting/tests/unit/test_util.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google Inc. All Rights Reserved. +# Copyright 2016 Google LLC All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 33970db3d11018504b5159e1d2a790757c461ccd Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 31 Oct 2017 14:28:55 -0700 Subject: [PATCH 080/467] Making release for most packages. (#4296) * Making release for most packages. Every package except those that have already been released (`google-cloud-core`, `google-api-core`, `google-cloud-bigquery`): - `google-cloud` - `google-cloud-bigtable` - `google-cloud-datastore` - `google-cloud-dns` - `google-cloud-error-reporting` - `google-cloud-firestore` - `google-cloud-language` - `google-cloud-logging` - `google-cloud-monitoring` - `google-cloud-resource-manager` - `google-cloud-runtimeconfig` - `google-cloud-spanner` - `google-cloud-speech` - `google-cloud-storage` - `google-cloud-trace` - `google-cloud-translate` - `google-cloud-videointelligence` - `google-cloud-vision` * Adding changelog files for each package. --- .../google-cloud-error-reporting/CHANGELOG.md | 20 +++++++++++++++++++ .../google-cloud-error-reporting/setup.py | 5 +++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 packages/google-cloud-error-reporting/CHANGELOG.md diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md new file mode 100644 index 000000000000..6a7e45abf98b --- /dev/null +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -0,0 +1,20 @@ +# Changelog + +[PyPI History][1] + +[1]: https://pypi.org/project/google-cloud-error-reporting/#history + +## 0.28.0 + +### Documentation + +- Added link to "Python Development Environment Setup Guide" in + project README (#4187, h/t to @michaelawyu) + +### Dependencies + +- Upgrading to `google-cloud-core >= 0.28.0` and adding dependency + on `google-api-core` (#4221, #4280) +- Upgrading to `google-cloud-logging >= 1.4.0` (#4296) + +PyPI: https://pypi.org/project/google-cloud-error-reporting/0.28.0/ diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 97250f8489b4..6df24941600d 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -52,13 +52,14 @@ REQUIREMENTS = [ 'google-cloud-core >= 0.28.0, < 0.29dev', - 'google-cloud-logging >= 1.3.0, < 1.4dev', + 'google-api-core >= 0.1.1, < 0.2.0dev', + 'google-cloud-logging >= 1.4.0, < 1.5dev', 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( name='google-cloud-error-reporting', - version='0.27.0', + version='0.28.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 9d092d74e8ca7beeda6ca7353d89ed56d9e7015c Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Tue, 31 Oct 2017 15:43:51 -0700 Subject: [PATCH 081/467] Marking all remaining versions as "dev". (#4299) This is to make it clear the code is between releases. Any code that relies on a **new** feature (e.g. of `google-api-core`) will then be able to **explicitly** make this clear by using the lower bound of the `devN` version. Fixes #4208. See: https://snarky.ca/how-i-manage-package-version-numbers/ --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 6df24941600d..7a2f9058a8af 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -59,7 +59,7 @@ setup( name='google-cloud-error-reporting', - version='0.28.0', + version='0.28.1.dev1', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 8ff2a93c0b007424154b36b4507614c590ce1216 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Wed, 1 Nov 2017 12:43:23 -0700 Subject: [PATCH 082/467] Fixing "Fore" -> "For" typo in README docs. (#4317) Also obeying an 80-column limit for the content and adding a missing "``virtualenv``" in the phrase "``pip`` and ``virtualenv``" in some of the docs. --- packages/google-cloud-error-reporting/README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index faa9f2d5423c..b2037ea495dc 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -18,7 +18,9 @@ Quick Start $ pip install --upgrade google-cloud-error-reporting -Fore more information on setting up your Python development environment, such as installing ``pip`` and on your system, please refer to `Python Development Environment Setup Guide`_ for Google Cloud Platform. +For more information on setting up your Python development environment, +such as installing ``pip`` and ``virtualenv`` on your system, please refer +to `Python Development Environment Setup Guide`_ for Google Cloud Platform. .. _Python Development Environment Setup Guide: https://cloud.google.com/python/setup From 8f523e809b584d9e5d6df07b731994adca10508a Mon Sep 17 00:00:00 2001 From: chemelnucfin Date: Wed, 1 Nov 2017 16:53:46 -0700 Subject: [PATCH 083/467] Closes #4319 - shorten test names (#4321) * Closes #4319 - shorten test names * #4319 update docs and config files --- packages/google-cloud-error-reporting/nox.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 639d5ada562b..7bb799f67b67 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -27,15 +27,15 @@ @nox.session -@nox.parametrize('python_version', ['2.7', '3.4', '3.5', '3.6']) -def unit_tests(session, python_version): +@nox.parametrize('py', ['2.7', '3.4', '3.5', '3.6']) +def unit(session, py): """Run the unit test suite.""" # Run unit tests against all supported versions of Python. - session.interpreter = 'python{}'.format(python_version) + session.interpreter = 'python{}'.format(py) # Set the virtualenv dirname. - session.virtualenv_dirname = 'unit-' + python_version + session.virtualenv_dirname = 'unit-' + py # Install all test dependencies, then install this package in-place. session.install('mock', 'pytest', 'pytest-cov', *LOCAL_DEPS) @@ -83,8 +83,8 @@ def lint_setup_py(session): @nox.session -@nox.parametrize('python_version', ['2.7', '3.6']) -def system_tests(session, python_version): +@nox.parametrize('py', ['2.7', '3.6']) +def system(session, py): """Run the system test suite.""" # Sanity check: Only run system tests if the environment variable is set. @@ -92,10 +92,10 @@ def system_tests(session, python_version): session.skip('Credentials must be set via environment variable.') # Run the system tests against latest Python 2 and Python 3 only. - session.interpreter = 'python{}'.format(python_version) + session.interpreter = 'python{}'.format(py) # Set the virtualenv dirname. - session.virtualenv_dirname = 'sys-' + python_version + session.virtualenv_dirname = 'sys-' + py # Install all test dependencies, then install this package into the # virtualenv's dist-packages. From 00f61dfb57de2ffe40fa2464bf64208547d8402d Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Wed, 1 Nov 2017 21:47:55 -0700 Subject: [PATCH 084/467] Making a `nox -s default` session for all packages. (#4324) * Making a `nox -s default` session for all packages. * Using "default" `nox` session on AppVeyor. This was 32-bit or 64-bit Python can be used, depending on which is the active `python` / the active `nox.exe`. --- packages/google-cloud-error-reporting/nox.py | 38 ++++++++++++++------ 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index 7bb799f67b67..c90670f4ee14 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -26,6 +26,33 @@ ) +@nox.session +def default(session): + """Default unit test session. + + This is intended to be run **without** an interpreter set, so + that the current ``python`` (on the ``PATH``) or the version of + Python corresponding to the ``nox`` binary the ``PATH`` can + run the tests. + """ + # Install all test dependencies, then install this package in-place. + session.install('mock', 'pytest', 'pytest-cov', *LOCAL_DEPS) + session.install('-e', '.') + + # Run py.test against the unit tests. + session.run( + 'py.test', + '--quiet', + '--cov=google.cloud.error_reporting', + '--cov=tests.unit', + '--cov-append', + '--cov-config=.coveragerc', + '--cov-report=', + '--cov-fail-under=97', + 'tests/unit', + ) + + @nox.session @nox.parametrize('py', ['2.7', '3.4', '3.5', '3.6']) def unit(session, py): @@ -37,16 +64,7 @@ def unit(session, py): # Set the virtualenv dirname. session.virtualenv_dirname = 'unit-' + py - # Install all test dependencies, then install this package in-place. - session.install('mock', 'pytest', 'pytest-cov', *LOCAL_DEPS) - session.install('-e', '.') - - # Run py.test against the unit tests. - session.run( - 'py.test', '--quiet', '--cov=google.cloud.error_reporting', - '--cov=tests.unit', '--cov-append', '--cov-config=.coveragerc', - '--cov-report=', '--cov-fail-under=97', 'tests/unit', - ) + default(session) @nox.session From 66966cdb4232a23af1ecb8222eb06211d3b95a7a Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Fri, 12 Jan 2018 10:46:11 -0800 Subject: [PATCH 085/467] Regenerate gapic cilent for error_reporting (#4743) * Import error_reporting gapic generated from artman Command log: ``` set DEST ~/workspace/google-cloud-python/error_reporting set GOOGLEAPIS_REV = 9370390e321dae510e7092d05d9f583076d3977b cd /tmp git clone https://github.com/googleapis/googleapis.git cd googleapis git reset hard $GOOGLEAPIS_REV artman --config google/devtools/clouderrorreporting/artman_errorreporting.yaml generate python_gapic set SRC ./artman-genfiles/python/error-reporting-v1beta1/ cp -r $SRC/docs $DEST mkdir -p $DEST/google/cloud/errorreporting_v1beta1 cp -r $SRC/google/cloud/errorreporting_v1beta1/gapic $DEST/google/cloud/errorreporting_v1beta1 cp -r $SRC/google/cloud/errorreporting_v1beta1/proto $DEST/google/cloud/errorreporting_v1beta1 cp -r $SRC/google/cloud/errorreporting_v1beta1/{__init__.py,types.py} $DEST/google/cloud/errorreporting_v1beta1 mkdir -p $DEST/tests/unit/gapic cp -r $SRC/tests/unit/gapic $DEST/tests/unit mkdir -p $DEST/tests/system/gapic cp -r $SRC/tests/system/gapic $DEST/tests/system ``` * Generator Bug: Fixup proto imports that reference the incorrect package. * Replace gax usage with gapic client --- .../google-cloud-error-reporting/docs/conf.py | 311 +++++ .../docs/gapic/v1beta1/api.rst | 6 + .../docs/gapic/v1beta1/types.rst | 5 + .../docs/index.rst | 101 ++ .../error_reporting/{_gax.py => _gapic.py} | 41 +- .../google/cloud/error_reporting/client.py | 6 +- .../cloud/errorreporting_v1beta1/__init__.py | 48 + .../errorreporting_v1beta1/gapic/__init__.py | 0 .../errorreporting_v1beta1/gapic/enums.py | 83 ++ .../gapic/error_group_service_client.py | 228 ++++ .../error_group_service_client_config.py | 33 + .../gapic/error_stats_service_client.py | 415 ++++++ .../error_stats_service_client_config.py | 38 + .../gapic/report_errors_service_client.py | 187 +++ .../report_errors_service_client_config.py | 28 + .../errorreporting_v1beta1/proto/__init__.py | 0 .../proto/common_pb2.py | 570 ++++++++ .../proto/common_pb2_grpc.py | 3 + .../proto/error_group_service_pb2.py | 288 ++++ .../proto/error_group_service_pb2_grpc.py | 65 + .../proto/error_stats_service_pb2.py | 1165 +++++++++++++++++ .../proto/error_stats_service_pb2_grpc.py | 82 ++ .../proto/report_errors_service_pb2.py | 358 +++++ .../proto/report_errors_service_pb2_grpc.py | 53 + .../cloud/errorreporting_v1beta1/types.py | 49 + packages/google-cloud-error-reporting/nox.py | 2 +- .../google-cloud-error-reporting/setup.py | 1 - ...st_system_report_errors_service_v1beta1.py | 46 + .../{system.py => system/test_system.py} | 4 +- ...test_error_group_service_client_v1beta1.py | 133 ++ ...test_error_stats_service_client_v1beta1.py | 188 +++ ...st_report_errors_service_client_v1beta1.py | 97 ++ .../unit/{test__gax.py => test__gapic.py} | 42 +- 33 files changed, 4624 insertions(+), 52 deletions(-) create mode 100644 packages/google-cloud-error-reporting/docs/conf.py create mode 100644 packages/google-cloud-error-reporting/docs/gapic/v1beta1/api.rst create mode 100644 packages/google-cloud-error-reporting/docs/gapic/v1beta1/types.rst create mode 100644 packages/google-cloud-error-reporting/docs/index.rst rename packages/google-cloud-error-reporting/google/cloud/error_reporting/{_gax.py => _gapic.py} (62%) create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py create mode 100644 packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py rename packages/google-cloud-error-reporting/tests/{system.py => system/test_system.py} (96%) create mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py create mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py create mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py rename packages/google-cloud-error-reporting/tests/unit/{test__gax.py => test__gapic.py} (61%) diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py new file mode 100644 index 000000000000..5c67ea1badda --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -0,0 +1,311 @@ +# -*- coding: utf-8 -*- +# +# google-cloud-error-reporting documentation build configuration file +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import shlex + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +sys.path.insert(0, os.path.abspath('..')) + +__version__ = '0.1.0' + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.intersphinx', + 'sphinx.ext.coverage', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', +] + +# autodoc/autosummary flags +autoclass_content = 'both' +autodoc_default_flags = ['members'] +autosummary_generate = True + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'google-cloud-error-reporting' +copyright = u'2017, Google' +author = u'Google APIs' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The full version, including alpha/beta/rc tags. +release = __version__ +# The short X.Y version. +version = '.'.join(release.split('.')[0:2]) + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'sphinx_rtd_theme' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = [] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +#html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +#html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +#html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'google-cloud-error-reporting-doc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + #'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + #'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + #'preamble': '', + + # Latex figure (float) alignment + #'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'google-cloud-error-reporting.tex', + u'google-cloud-error-reporting Documentation', author, 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [(master_doc, 'google-cloud-error-reporting', + u'google-cloud-error-reporting Documentation', [author], 1)] + +# If true, show URL addresses after external links. +#man_show_urls = False + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'google-cloud-error-reporting', + u'google-cloud-error-reporting Documentation', author, + 'google-cloud-error-reporting', + 'GAPIC library for the {metadata.shortName} v1beta1 service', 'APIs'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = { + 'python': ('http://python.readthedocs.org/en/latest/', None), + 'gax': ('https://gax-python.readthedocs.org/en/latest/', None), +} + +# Napoleon settings +napoleon_google_docstring = True +napoleon_numpy_docstring = True +napoleon_include_private_with_doc = False +napoleon_include_special_with_doc = True +napoleon_use_admonition_for_examples = False +napoleon_use_admonition_for_notes = False +napoleon_use_admonition_for_references = False +napoleon_use_ivar = False +napoleon_use_param = True +napoleon_use_rtype = True diff --git a/packages/google-cloud-error-reporting/docs/gapic/v1beta1/api.rst b/packages/google-cloud-error-reporting/docs/gapic/v1beta1/api.rst new file mode 100644 index 000000000000..37ead7d3d055 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/gapic/v1beta1/api.rst @@ -0,0 +1,6 @@ +Client for Stackdriver Error Reporting API +========================================== + +.. automodule:: google.cloud.errorreporting_v1beta1 + :members: + :inherited-members: \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/gapic/v1beta1/types.rst b/packages/google-cloud-error-reporting/docs/gapic/v1beta1/types.rst new file mode 100644 index 000000000000..989f48a7d15e --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/gapic/v1beta1/types.rst @@ -0,0 +1,5 @@ +Types for Stackdriver Error Reporting API Client +================================================ + +.. automodule:: google.cloud.errorreporting_v1beta1.types + :members: \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/index.rst b/packages/google-cloud-error-reporting/docs/index.rst new file mode 100644 index 000000000000..56a8a6cc6f81 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/index.rst @@ -0,0 +1,101 @@ +Python Client for Stackdriver Error Reporting API (`Alpha`_) +============================================================ + +`Stackdriver Error Reporting API`_: +Stackdriver Error Reporting groups and counts similar errors from cloud services. The Stackdriver Error Reporting API provides a way to report new errors and read access to error groups and their associated errors. + +- `Client Library Documentation`_ +- `Product Documentation`_ + +.. _Alpha: https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/README.rst +.. _Stackdriver Error Reporting API: https://cloud.google.com/error-reporting +.. _Client Library Documentation: https://googlecloudplatform.github.io/google-cloud-python/stable/error-reporting/usage.html +.. _Product Documentation: https://cloud.google.com/error-reporting + +Quick Start +----------- + +In order to use this library, you first need to go through the following steps: + +1. `Select or create a Cloud Platform project.`_ +2. `Enable billing for your project.`_ +3. `Enable the Stackdriver Error Reporting API.`_ +4. `Setup Authentication.`_ + +.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project +.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project +.. _Enable the Stackdriver Error Reporting API.: https://cloud.google.com/error-reporting +.. _Setup Authentication.: https://googlecloudplatform.github.io/google-cloud-python/stable/core/auth.html + +Installation +~~~~~~~~~~~~ + +Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to +create isolated Python environments. The basic problem it addresses is one of +dependencies and versions, and indirectly permissions. + +With `virtualenv`_, it's possible to install this library without needing system +install permissions, and without clashing with the installed system +dependencies. + +.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ + + +Mac/Linux +^^^^^^^^^ + +.. code-block:: console + + pip install virtualenv + virtualenv + source /bin/activate + /bin/pip install google-cloud-error-reporting + + +Windows +^^^^^^^ + +.. code-block:: console + + pip install virtualenv + virtualenv + \Scripts\activate + \Scripts\pip.exe install google-cloud-error-reporting + +Preview +~~~~~~~ + +ReportErrorsServiceClient +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code:: py + + from google.cloud import errorreporting_v1beta1 + + client = errorreporting_v1beta1.ReportErrorsServiceClient() + + project_name = client.project_path('[PROJECT]') + event = {} + + response = client.report_error_event(project_name, event) + +Next Steps +~~~~~~~~~~ + +- Read the `Client Library Documentation`_ for Stackdriver Error Reporting API + API to see other available methods on the client. +- Read the `Stackdriver Error Reporting API Product documentation`_ to learn + more about the product and see How-to Guides. +- View this `repository’s main README`_ to see the full list of Cloud + APIs that we cover. + +.. _Stackdriver Error Reporting API Product documentation: https://cloud.google.com/error-reporting +.. _repository’s main README: https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/README.rst + +Api Reference +------------- +.. toctree:: + :maxdepth: 2 + + gapic/v1beta1/api + gapic/v1beta1/types \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py similarity index 62% rename from packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py rename to packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py index a289377986a0..6ce0bb967a65 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gax.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py @@ -14,53 +14,50 @@ """GAX wrapper for Error Reporting API requests.""" -from google.cloud._helpers import make_secure_channel -from google.cloud._http import DEFAULT_USER_AGENT +from google.api_core.gapic_v1 import client_info -from google.cloud.gapic.errorreporting.v1beta1 import ( +from google.cloud.error_reporting import __version__ +from google.cloud.errorreporting_v1beta1.gapic import ( report_errors_service_client) -from google.cloud.proto.devtools.clouderrorreporting.v1beta1 import ( +from google.cloud.errorreporting_v1beta1.proto import ( report_errors_service_pb2) from google.protobuf.json_format import ParseDict -from google.cloud.error_reporting import __version__ +_CLIENT_INFO = client_info.ClientInfo( + client_library_version=__version__) def make_report_error_api(client): - """Create an instance of the GAX Logging API. + """Create an instance of the gapic Logging API. :type client::class:`google.cloud.error_reporting.Client` :param client: Error Reporting client. - :rtype: :class:_ErrorReportingGaxApi + :rtype: :class:_ErrorReportingGapicApi :returns: An Error Reporting API instance. """ - channel = make_secure_channel( - client._credentials, - DEFAULT_USER_AGENT, - report_errors_service_client.ReportErrorsServiceClient.SERVICE_ADDRESS) gax_client = report_errors_service_client.ReportErrorsServiceClient( - channel=channel, lib_name='gccl', lib_version=__version__) - return _ErrorReportingGaxApi(gax_client, client.project) + credentials=client._credentials, client_info=_CLIENT_INFO) + return _ErrorReportingGapicApi(gax_client, client.project) -class _ErrorReportingGaxApi(object): +class _ErrorReportingGapicApi(object): """Helper mapping Error Reporting-related APIs - :type gax_api: - :class:`v1beta1.report_errors_service_client.ReportErrorsServiceClient` - :param gax_api: API object used to make GAX requests. + :type gapic: + :class:`report_errors_service_client.ReportErrorsServiceClient` + :param gapic: API object used to make RPCs. :type project: str :param project: Google Cloud Project ID """ - def __init__(self, gax_api, project): - self._gax_api = gax_api + def __init__(self, gapic_api, project): + self._gapic_api = gapic_api self._project = project def report_error_event(self, error_report): - """Uses the GAX client to report the error. + """Uses the gapic client to report the error. :type error_report: dict :param error_report: @@ -70,7 +67,7 @@ def report_error_event(self, error_report): Use :meth:~`google.cloud.error_reporting.client._build_error_report` """ - project_name = self._gax_api.project_path(self._project) + project_name = self._gapic_api.project_path(self._project) error_report_payload = report_errors_service_pb2.ReportedErrorEvent() ParseDict(error_report, error_report_payload) - self._gax_api.report_error_event(project_name, error_report_payload) + self._gapic_api.report_error_event(project_name, error_report_payload) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index af855835888b..c331bd298b06 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -18,7 +18,7 @@ import traceback try: - from google.cloud.error_reporting._gax import make_report_error_api + from google.cloud.error_reporting._gapic import make_report_error_api _HAVE_GRPC = True except ImportError: # pragma: NO COVER _HAVE_GRPC = False @@ -115,7 +115,7 @@ class Client(ClientWithProject): :type _use_grpc: bool :param _use_grpc: (Optional) Explicitly specifies whether - to use the gRPC transport (via GAX) or HTTP. If unset, + to use the gRPC transport or HTTP. If unset, falls back to the ``GOOGLE_CLOUD_DISABLE_GRPC`` environment variable. This parameter should be considered private, and could @@ -156,7 +156,7 @@ def report_errors_api(self): https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.logs :rtype: - :class:`_gax._ErrorReportingGaxApi` + :class:`_gapic._ErrorReportingGapicApi` or :class:`._logging._ErrorReportingLoggingAPI` :returns: A class that implements the report errors API. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py new file mode 100644 index 000000000000..9b87d8f5e2ca --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -0,0 +1,48 @@ +# Copyright 2018 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 +# +# https://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 __future__ import absolute_import + +from google.cloud.errorreporting_v1beta1 import types +from google.cloud.errorreporting_v1beta1.gapic import enums +from google.cloud.errorreporting_v1beta1.gapic import error_group_service_client +from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client +from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client + + +class ErrorGroupServiceClient( + error_group_service_client.ErrorGroupServiceClient): + __doc__ = error_group_service_client.ErrorGroupServiceClient.__doc__ + enums = enums + + +class ErrorStatsServiceClient( + error_stats_service_client.ErrorStatsServiceClient): + __doc__ = error_stats_service_client.ErrorStatsServiceClient.__doc__ + enums = enums + + +class ReportErrorsServiceClient( + report_errors_service_client.ReportErrorsServiceClient): + __doc__ = report_errors_service_client.ReportErrorsServiceClient.__doc__ + enums = enums + + +__all__ = ( + 'enums', + 'types', + 'ErrorGroupServiceClient', + 'ErrorStatsServiceClient', + 'ReportErrorsServiceClient', +) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py new file mode 100644 index 000000000000..17cab7fbb541 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py @@ -0,0 +1,83 @@ +# Copyright 2018 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 +# +# https://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. +"""Wrappers for protocol buffer enum types.""" + + +class TimedCountAlignment(object): + """ + Specifies how the time periods of error group counts are aligned. + + Attributes: + ERROR_COUNT_ALIGNMENT_UNSPECIFIED (int): No alignment specified. + ALIGNMENT_EQUAL_ROUNDED (int): The time periods shall be consecutive, have width equal to the + requested duration, and be aligned at the ``alignment_time`` provided in + the request. + The ``alignment_time`` does not have to be inside the query period but + even if it is outside, only time periods are returned which overlap + with the query period. + A rounded alignment will typically result in a + different size of the first or the last time period. + ALIGNMENT_EQUAL_AT_END (int): The time periods shall be consecutive, have width equal to the + requested duration, and be aligned at the end of the requested time + period. This can result in a different size of the + first time period. + """ + ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0 + ALIGNMENT_EQUAL_ROUNDED = 1 + ALIGNMENT_EQUAL_AT_END = 2 + + +class ErrorGroupOrder(object): + """ + A sorting order of error groups. + + Attributes: + GROUP_ORDER_UNSPECIFIED (int): No group order specified. + COUNT_DESC (int): Total count of errors in the given time window in descending order. + LAST_SEEN_DESC (int): Timestamp when the group was last seen in the given time window + in descending order. + CREATED_DESC (int): Timestamp when the group was created in descending order. + AFFECTED_USERS_DESC (int): Number of affected users in the given time window in descending order. + """ + GROUP_ORDER_UNSPECIFIED = 0 + COUNT_DESC = 1 + LAST_SEEN_DESC = 2 + CREATED_DESC = 3 + AFFECTED_USERS_DESC = 4 + + +class QueryTimeRange(object): + class Period(object): + """ + The supported time ranges. + + Attributes: + PERIOD_UNSPECIFIED (int): Do not use. + PERIOD_1_HOUR (int): Retrieve data for the last hour. + Recommended minimum timed count duration: 1 min. + PERIOD_6_HOURS (int): Retrieve data for the last 6 hours. + Recommended minimum timed count duration: 10 min. + PERIOD_1_DAY (int): Retrieve data for the last day. + Recommended minimum timed count duration: 1 hour. + PERIOD_1_WEEK (int): Retrieve data for the last week. + Recommended minimum timed count duration: 6 hours. + PERIOD_30_DAYS (int): Retrieve data for the last 30 days. + Recommended minimum timed count duration: 1 day. + """ + PERIOD_UNSPECIFIED = 0 + PERIOD_1_HOUR = 1 + PERIOD_6_HOURS = 2 + PERIOD_1_DAY = 3 + PERIOD_1_WEEK = 4 + PERIOD_30_DAYS = 5 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py new file mode 100644 index 000000000000..d82d1d1a6a0b --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -0,0 +1,228 @@ +# Copyright 2018 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 +# +# https://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. +"""Accesses the google.devtools.clouderrorreporting.v1beta1 ErrorGroupService API.""" + +import pkg_resources + +import google.api_core.gapic_v1.client_info +import google.api_core.gapic_v1.config +import google.api_core.gapic_v1.method +import google.api_core.grpc_helpers +import google.api_core.path_template + +from google.cloud.errorreporting_v1beta1.gapic import enums +from google.cloud.errorreporting_v1beta1.gapic import error_group_service_client_config +from google.cloud.errorreporting_v1beta1.proto import common_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 + +_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( + 'google-cloud-error-reporting', ).version + + +class ErrorGroupServiceClient(object): + """Service for retrieving and updating individual error groups.""" + + SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443' + """The default address of the service.""" + + # The scopes needed to make gRPC calls to all of the methods defined in + # this service + _DEFAULT_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) + + # The name of the interface for this client. This is the key used to find + # method configuration in the client_config dictionary. + _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService' + + @classmethod + def group_path(cls, project, group): + """Return a fully-qualified group string.""" + return google.api_core.path_template.expand( + 'projects/{project}/groups/{group}', + project=project, + group=group, + ) + + def __init__(self, + channel=None, + credentials=None, + client_config=error_group_service_client_config.config, + client_info=None): + """Constructor. + + Args: + channel (grpc.Channel): A ``Channel`` instance through + which to make calls. This argument is mutually exclusive + with ``credentials``; providing both will raise an exception. + credentials (google.auth.credentials.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If none + are specified, the client will attempt to ascertain the + credentials from the environment. + client_config (dict): A dictionary of call options for each + method. If not specified, the default configuration is used. + 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. + """ + # If both `channel` and `credentials` are specified, raise an + # exception (channels come with credentials baked in already). + if channel is not None and credentials is not None: + raise ValueError( + 'The `channel` and `credentials` arguments to {} are mutually ' + 'exclusive.'.format(self.__class__.__name__), ) + + # Create the channel. + if channel is None: + channel = google.api_core.grpc_helpers.create_channel( + self.SERVICE_ADDRESS, + credentials=credentials, + scopes=self._DEFAULT_SCOPES, + ) + + # Create the gRPC stubs. + self.error_group_service_stub = ( + error_group_service_pb2.ErrorGroupServiceStub(channel)) + + if client_info is None: + client_info = ( + google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) + client_info.gapic_version = _GAPIC_LIBRARY_VERSION + + # Parse out the default settings for retry and timeout for each RPC + # from the client configuration. + # (Ordinarily, these are the defaults specified in the `*_config.py` + # file next to this one.) + method_configs = google.api_core.gapic_v1.config.parse_method_configs( + client_config['interfaces'][self._INTERFACE_NAME], ) + + # Write the "inner API call" methods to the class. + # These are wrapped versions of the gRPC stub methods, with retry and + # timeout configuration applied, called by the public methods on + # this class. + self._get_group = google.api_core.gapic_v1.method.wrap_method( + self.error_group_service_stub.GetGroup, + default_retry=method_configs['GetGroup'].retry, + default_timeout=method_configs['GetGroup'].timeout, + client_info=client_info, + ) + self._update_group = google.api_core.gapic_v1.method.wrap_method( + self.error_group_service_stub.UpdateGroup, + default_retry=method_configs['UpdateGroup'].retry, + default_timeout=method_configs['UpdateGroup'].timeout, + client_info=client_info, + ) + + # Service calls + def get_group(self, + group_name, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None): + """ + Get the specified group. + + Example: + >>> from google.cloud import errorreporting_v1beta1 + >>> + >>> client = errorreporting_v1beta1.ErrorGroupServiceClient() + >>> + >>> group_name = client.group_path('[PROJECT]', '[GROUP]') + >>> + >>> response = client.get_group(group_name) + + Args: + group_name (str): [Required] The group resource name. Written as + projects/projectID/groups/group_name. + Call + + groupStats.list to return a list of groups belonging to + this project. + + Example: projects/my-project-123/groups/my-group + retry (Optional[google.api_core.retry.Retry]): A retry object used + to retry requests. If ``None`` is specified, requests will not + be retried. + timeout (Optional[float]): The amount of time, in seconds, to wait + for the request to complete. Note that if ``retry`` is + specified, the timeout applies to each individual attempt. + metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata + that is provided to the method. + + Returns: + A :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` instance. + + Raises: + google.api_core.exceptions.GoogleAPICallError: If the request + failed for any reason. + google.api_core.exceptions.RetryError: If the request failed due + to a retryable error and retry attempts failed. + ValueError: If the parameters are invalid. + """ + if metadata is None: + metadata = [] + metadata = list(metadata) + request = error_group_service_pb2.GetGroupRequest( + group_name=group_name, ) + return self._get_group( + request, retry=retry, timeout=timeout, metadata=metadata) + + def update_group(self, + group, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None): + """ + Replace the data for the specified group. + Fails if the group does not exist. + + Example: + >>> from google.cloud import errorreporting_v1beta1 + >>> + >>> client = errorreporting_v1beta1.ErrorGroupServiceClient() + >>> + >>> group = {} + >>> + >>> response = client.update_group(group) + + Args: + group (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ErrorGroup]): [Required] The group which replaces the resource on the server. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` + retry (Optional[google.api_core.retry.Retry]): A retry object used + to retry requests. If ``None`` is specified, requests will not + be retried. + timeout (Optional[float]): The amount of time, in seconds, to wait + for the request to complete. Note that if ``retry`` is + specified, the timeout applies to each individual attempt. + metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata + that is provided to the method. + + Returns: + A :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` instance. + + Raises: + google.api_core.exceptions.GoogleAPICallError: If the request + failed for any reason. + google.api_core.exceptions.RetryError: If the request failed due + to a retryable error and retry attempts failed. + ValueError: If the parameters are invalid. + """ + if metadata is None: + metadata = [] + metadata = list(metadata) + request = error_group_service_pb2.UpdateGroupRequest(group=group, ) + return self._update_group( + request, retry=retry, timeout=timeout, metadata=metadata) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py new file mode 100644 index 000000000000..cff4fca5a4c5 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py @@ -0,0 +1,33 @@ +config = { + "interfaces": { + "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService": { + "retry_codes": { + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], + "non_idempotent": [] + }, + "retry_params": { + "default": { + "initial_retry_delay_millis": 100, + "retry_delay_multiplier": 1.3, + "max_retry_delay_millis": 60000, + "initial_rpc_timeout_millis": 20000, + "rpc_timeout_multiplier": 1.0, + "max_rpc_timeout_millis": 20000, + "total_timeout_millis": 600000 + } + }, + "methods": { + "GetGroup": { + "timeout_millis": 60000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "UpdateGroup": { + "timeout_millis": 60000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + } + } + } + } +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py new file mode 100644 index 000000000000..23015b86391f --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -0,0 +1,415 @@ +# Copyright 2018 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 +# +# https://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. +"""Accesses the google.devtools.clouderrorreporting.v1beta1 ErrorStatsService API.""" + +import functools +import pkg_resources + +import google.api_core.gapic_v1.client_info +import google.api_core.gapic_v1.config +import google.api_core.gapic_v1.method +import google.api_core.grpc_helpers +import google.api_core.page_iterator +import google.api_core.path_template + +from google.cloud.errorreporting_v1beta1.gapic import enums +from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client_config +from google.cloud.errorreporting_v1beta1.proto import common_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 +from google.protobuf import duration_pb2 +from google.protobuf import timestamp_pb2 + +_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( + 'google-cloud-error-reporting', ).version + + +class ErrorStatsServiceClient(object): + """ + An API for retrieving and managing error statistics as well as data for + individual events. + """ + + SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443' + """The default address of the service.""" + + # The scopes needed to make gRPC calls to all of the methods defined in + # this service + _DEFAULT_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) + + # The name of the interface for this client. This is the key used to find + # method configuration in the client_config dictionary. + _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService' + + @classmethod + def project_path(cls, project): + """Return a fully-qualified project string.""" + return google.api_core.path_template.expand( + 'projects/{project}', + project=project, + ) + + def __init__(self, + channel=None, + credentials=None, + client_config=error_stats_service_client_config.config, + client_info=None): + """Constructor. + + Args: + channel (grpc.Channel): A ``Channel`` instance through + which to make calls. This argument is mutually exclusive + with ``credentials``; providing both will raise an exception. + credentials (google.auth.credentials.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If none + are specified, the client will attempt to ascertain the + credentials from the environment. + client_config (dict): A dictionary of call options for each + method. If not specified, the default configuration is used. + 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. + """ + # If both `channel` and `credentials` are specified, raise an + # exception (channels come with credentials baked in already). + if channel is not None and credentials is not None: + raise ValueError( + 'The `channel` and `credentials` arguments to {} are mutually ' + 'exclusive.'.format(self.__class__.__name__), ) + + # Create the channel. + if channel is None: + channel = google.api_core.grpc_helpers.create_channel( + self.SERVICE_ADDRESS, + credentials=credentials, + scopes=self._DEFAULT_SCOPES, + ) + + # Create the gRPC stubs. + self.error_stats_service_stub = ( + error_stats_service_pb2.ErrorStatsServiceStub(channel)) + + if client_info is None: + client_info = ( + google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) + client_info.gapic_version = _GAPIC_LIBRARY_VERSION + + # Parse out the default settings for retry and timeout for each RPC + # from the client configuration. + # (Ordinarily, these are the defaults specified in the `*_config.py` + # file next to this one.) + method_configs = google.api_core.gapic_v1.config.parse_method_configs( + client_config['interfaces'][self._INTERFACE_NAME], ) + + # Write the "inner API call" methods to the class. + # These are wrapped versions of the gRPC stub methods, with retry and + # timeout configuration applied, called by the public methods on + # this class. + self._list_group_stats = google.api_core.gapic_v1.method.wrap_method( + self.error_stats_service_stub.ListGroupStats, + default_retry=method_configs['ListGroupStats'].retry, + default_timeout=method_configs['ListGroupStats'].timeout, + client_info=client_info, + ) + self._list_events = google.api_core.gapic_v1.method.wrap_method( + self.error_stats_service_stub.ListEvents, + default_retry=method_configs['ListEvents'].retry, + default_timeout=method_configs['ListEvents'].timeout, + client_info=client_info, + ) + self._delete_events = google.api_core.gapic_v1.method.wrap_method( + self.error_stats_service_stub.DeleteEvents, + default_retry=method_configs['DeleteEvents'].retry, + default_timeout=method_configs['DeleteEvents'].timeout, + client_info=client_info, + ) + + # Service calls + def list_group_stats(self, + project_name, + time_range, + group_id=None, + service_filter=None, + timed_count_duration=None, + alignment=None, + alignment_time=None, + order=None, + page_size=None, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None): + """ + Lists the specified groups. + + Example: + >>> from google.cloud import errorreporting_v1beta1 + >>> + >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() + >>> + >>> project_name = client.project_path('[PROJECT]') + >>> time_range = {} + >>> + >>> + >>> # Iterate over all results + >>> for element in client.list_group_stats(project_name, time_range): + ... # process element + ... pass + >>> + >>> # Or iterate over results one page at a time + >>> for page in client.list_group_stats(project_name, time_range, options=CallOptions(page_token=INITIAL_PAGE)): + ... for element in page: + ... # process element + ... pass + + Args: + project_name (str): [Required] The resource name of the Google Cloud Platform project. Written + as projects/ plus the + Google Cloud + Platform project ID. + + Example: projects/my-project-123. + time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): [Optional] List data for the given time range. + If not set a default time range is used. The field time_range_begin + in the response will specify the beginning of this time range. + Only ErrorGroupStats with a non-zero count in the given time + range are returned, unless the request contains an explicit group_id list. + If a group_id list is given, also ErrorGroupStats with zero + occurrences are returned. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` + group_id (list[str]): [Optional] List all ErrorGroupStats with these IDs. + service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): [Optional] List only ErrorGroupStats which belong to a service + context that matches the filter. + Data for all service contexts is returned if this field is not specified. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter` + timed_count_duration (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Duration]): [Optional] The preferred duration for a single returned ``TimedCount``. + If not set, no timed counts are returned. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.Duration` + alignment (~google.cloud.errorreporting_v1beta1.types.TimedCountAlignment): [Optional] The alignment of the timed counts to be returned. + Default is ``ALIGNMENT_EQUAL_AT_END``. + alignment_time (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Timestamp]): [Optional] Time where the timed counts shall be aligned if rounded + alignment is chosen. Default is 00:00 UTC. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.Timestamp` + order (~google.cloud.errorreporting_v1beta1.types.ErrorGroupOrder): [Optional] The sort order in which the results are returned. + Default is ``COUNT_DESC``. + page_size (int): The maximum number of resources contained in the + underlying API response. If page streaming is performed per- + resource, this parameter does not affect the return value. If page + streaming is performed per-page, this determines the maximum number + of resources in a page. + retry (Optional[google.api_core.retry.Retry]): A retry object used + to retry requests. If ``None`` is specified, requests will not + be retried. + timeout (Optional[float]): The amount of time, in seconds, to wait + for the request to complete. Note that if ``retry`` is + specified, the timeout applies to each individual attempt. + metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata + that is provided to the method. + + Returns: + A :class:`~google.gax.PageIterator` instance. By default, this + is an iterable of :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroupStats` instances. + This object can also be configured to iterate over the pages + of the response through the `options` parameter. + + Raises: + google.api_core.exceptions.GoogleAPICallError: If the request + failed for any reason. + google.api_core.exceptions.RetryError: If the request failed due + to a retryable error and retry attempts failed. + ValueError: If the parameters are invalid. + """ + if metadata is None: + metadata = [] + metadata = list(metadata) + request = error_stats_service_pb2.ListGroupStatsRequest( + project_name=project_name, + time_range=time_range, + group_id=group_id, + service_filter=service_filter, + timed_count_duration=timed_count_duration, + alignment=alignment, + alignment_time=alignment_time, + order=order, + page_size=page_size, + ) + iterator = google.api_core.page_iterator.GRPCIterator( + client=None, + method=functools.partial( + self._list_group_stats, + retry=retry, + timeout=timeout, + metadata=metadata), + request=request, + items_field='error_group_stats', + request_token_field='page_token', + response_token_field='next_page_token', + ) + return iterator + + def list_events(self, + project_name, + group_id, + service_filter=None, + time_range=None, + page_size=None, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None): + """ + Lists the specified events. + + Example: + >>> from google.cloud import errorreporting_v1beta1 + >>> + >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() + >>> + >>> project_name = client.project_path('[PROJECT]') + >>> group_id = '' + >>> + >>> + >>> # Iterate over all results + >>> for element in client.list_events(project_name, group_id): + ... # process element + ... pass + >>> + >>> # Or iterate over results one page at a time + >>> for page in client.list_events(project_name, group_id, options=CallOptions(page_token=INITIAL_PAGE)): + ... for element in page: + ... # process element + ... pass + + Args: + project_name (str): [Required] The resource name of the Google Cloud Platform project. Written + as ``projects/`` plus the + [Google Cloud Platform project + ID](https://support.google.com/cloud/answer/6158840). + Example: ``projects/my-project-123``. + group_id (str): [Required] The group for which events shall be returned. + service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): [Optional] List only ErrorGroups which belong to a service context that + matches the filter. + Data for all service contexts is returned if this field is not specified. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter` + time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): [Optional] List only data for the given time range. + If not set a default time range is used. The field time_range_begin + in the response will specify the beginning of this time range. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` + page_size (int): The maximum number of resources contained in the + underlying API response. If page streaming is performed per- + resource, this parameter does not affect the return value. If page + streaming is performed per-page, this determines the maximum number + of resources in a page. + retry (Optional[google.api_core.retry.Retry]): A retry object used + to retry requests. If ``None`` is specified, requests will not + be retried. + timeout (Optional[float]): The amount of time, in seconds, to wait + for the request to complete. Note that if ``retry`` is + specified, the timeout applies to each individual attempt. + metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata + that is provided to the method. + + Returns: + A :class:`~google.gax.PageIterator` instance. By default, this + is an iterable of :class:`~google.cloud.errorreporting_v1beta1.types.ErrorEvent` instances. + This object can also be configured to iterate over the pages + of the response through the `options` parameter. + + Raises: + google.api_core.exceptions.GoogleAPICallError: If the request + failed for any reason. + google.api_core.exceptions.RetryError: If the request failed due + to a retryable error and retry attempts failed. + ValueError: If the parameters are invalid. + """ + if metadata is None: + metadata = [] + metadata = list(metadata) + request = error_stats_service_pb2.ListEventsRequest( + project_name=project_name, + group_id=group_id, + service_filter=service_filter, + time_range=time_range, + page_size=page_size, + ) + iterator = google.api_core.page_iterator.GRPCIterator( + client=None, + method=functools.partial( + self._list_events, + retry=retry, + timeout=timeout, + metadata=metadata), + request=request, + items_field='error_events', + request_token_field='page_token', + response_token_field='next_page_token', + ) + return iterator + + def delete_events(self, + project_name, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None): + """ + Deletes all error events of a given project. + + Example: + >>> from google.cloud import errorreporting_v1beta1 + >>> + >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() + >>> + >>> project_name = client.project_path('[PROJECT]') + >>> + >>> response = client.delete_events(project_name) + + Args: + project_name (str): [Required] The resource name of the Google Cloud Platform project. Written + as ``projects/`` plus the + [Google Cloud Platform project + ID](https://support.google.com/cloud/answer/6158840). + Example: ``projects/my-project-123``. + retry (Optional[google.api_core.retry.Retry]): A retry object used + to retry requests. If ``None`` is specified, requests will not + be retried. + timeout (Optional[float]): The amount of time, in seconds, to wait + for the request to complete. Note that if ``retry`` is + specified, the timeout applies to each individual attempt. + metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata + that is provided to the method. + + Returns: + A :class:`~google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse` instance. + + Raises: + google.api_core.exceptions.GoogleAPICallError: If the request + failed for any reason. + google.api_core.exceptions.RetryError: If the request failed due + to a retryable error and retry attempts failed. + ValueError: If the parameters are invalid. + """ + if metadata is None: + metadata = [] + metadata = list(metadata) + request = error_stats_service_pb2.DeleteEventsRequest( + project_name=project_name, ) + return self._delete_events( + request, retry=retry, timeout=timeout, metadata=metadata) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py new file mode 100644 index 000000000000..72c655421477 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py @@ -0,0 +1,38 @@ +config = { + "interfaces": { + "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService": { + "retry_codes": { + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], + "non_idempotent": [] + }, + "retry_params": { + "default": { + "initial_retry_delay_millis": 100, + "retry_delay_multiplier": 1.3, + "max_retry_delay_millis": 60000, + "initial_rpc_timeout_millis": 20000, + "rpc_timeout_multiplier": 1.0, + "max_rpc_timeout_millis": 20000, + "total_timeout_millis": 600000 + } + }, + "methods": { + "ListGroupStats": { + "timeout_millis": 60000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "ListEvents": { + "timeout_millis": 60000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "DeleteEvents": { + "timeout_millis": 60000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + } + } + } + } +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py new file mode 100644 index 000000000000..04e787c81c25 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -0,0 +1,187 @@ +# Copyright 2018 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 +# +# https://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. +"""Accesses the google.devtools.clouderrorreporting.v1beta1 ReportErrorsService API.""" + +import pkg_resources + +import google.api_core.gapic_v1.client_info +import google.api_core.gapic_v1.config +import google.api_core.gapic_v1.method +import google.api_core.grpc_helpers +import google.api_core.path_template + +from google.cloud.errorreporting_v1beta1.gapic import enums +from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client_config +from google.cloud.errorreporting_v1beta1.proto import common_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 +from google.protobuf import duration_pb2 +from google.protobuf import timestamp_pb2 + +_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( + 'google-cloud-error-reporting', ).version + + +class ReportErrorsServiceClient(object): + """An API for reporting error events.""" + + SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443' + """The default address of the service.""" + + # The scopes needed to make gRPC calls to all of the methods defined in + # this service + _DEFAULT_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) + + # The name of the interface for this client. This is the key used to find + # method configuration in the client_config dictionary. + _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService' + + @classmethod + def project_path(cls, project): + """Return a fully-qualified project string.""" + return google.api_core.path_template.expand( + 'projects/{project}', + project=project, + ) + + def __init__(self, + channel=None, + credentials=None, + client_config=report_errors_service_client_config.config, + client_info=None): + """Constructor. + + Args: + channel (grpc.Channel): A ``Channel`` instance through + which to make calls. This argument is mutually exclusive + with ``credentials``; providing both will raise an exception. + credentials (google.auth.credentials.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If none + are specified, the client will attempt to ascertain the + credentials from the environment. + client_config (dict): A dictionary of call options for each + method. If not specified, the default configuration is used. + 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. + """ + # If both `channel` and `credentials` are specified, raise an + # exception (channels come with credentials baked in already). + if channel is not None and credentials is not None: + raise ValueError( + 'The `channel` and `credentials` arguments to {} are mutually ' + 'exclusive.'.format(self.__class__.__name__), ) + + # Create the channel. + if channel is None: + channel = google.api_core.grpc_helpers.create_channel( + self.SERVICE_ADDRESS, + credentials=credentials, + scopes=self._DEFAULT_SCOPES, + ) + + # Create the gRPC stubs. + self.report_errors_service_stub = ( + report_errors_service_pb2.ReportErrorsServiceStub(channel)) + + if client_info is None: + client_info = ( + google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) + client_info.gapic_version = _GAPIC_LIBRARY_VERSION + + # Parse out the default settings for retry and timeout for each RPC + # from the client configuration. + # (Ordinarily, these are the defaults specified in the `*_config.py` + # file next to this one.) + method_configs = google.api_core.gapic_v1.config.parse_method_configs( + client_config['interfaces'][self._INTERFACE_NAME], ) + + # Write the "inner API call" methods to the class. + # These are wrapped versions of the gRPC stub methods, with retry and + # timeout configuration applied, called by the public methods on + # this class. + self._report_error_event = google.api_core.gapic_v1.method.wrap_method( + self.report_errors_service_stub.ReportErrorEvent, + default_retry=method_configs['ReportErrorEvent'].retry, + default_timeout=method_configs['ReportErrorEvent'].timeout, + client_info=client_info, + ) + + # Service calls + def report_error_event(self, + project_name, + event, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None): + """ + Report an individual error event. + + This endpoint accepts either an OAuth token, + or an + API key + for authentication. To use an API key, append it to the URL as the value of + a ``key`` parameter. For example: +
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ + Example: + >>> from google.cloud import errorreporting_v1beta1 + >>> + >>> client = errorreporting_v1beta1.ReportErrorsServiceClient() + >>> + >>> project_name = client.project_path('[PROJECT]') + >>> event = {} + >>> + >>> response = client.report_error_event(project_name, event) + + Args: + project_name (str): [Required] The resource name of the Google Cloud Platform project. Written + as ``projects/`` plus the + `Google Cloud Platform project ID `_. + Example: ``projects/my-project-123``. + event (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent]): [Required] The error event to be reported. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent` + retry (Optional[google.api_core.retry.Retry]): A retry object used + to retry requests. If ``None`` is specified, requests will not + be retried. + timeout (Optional[float]): The amount of time, in seconds, to wait + for the request to complete. Note that if ``retry`` is + specified, the timeout applies to each individual attempt. + metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata + that is provided to the method. + + Returns: + A :class:`~google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse` instance. + + Raises: + google.api_core.exceptions.GoogleAPICallError: If the request + failed for any reason. + google.api_core.exceptions.RetryError: If the request failed due + to a retryable error and retry attempts failed. + ValueError: If the parameters are invalid. + """ + if metadata is None: + metadata = [] + metadata = list(metadata) + request = report_errors_service_pb2.ReportErrorEventRequest( + project_name=project_name, + event=event, + ) + return self._report_error_event( + request, retry=retry, timeout=timeout, metadata=metadata) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py new file mode 100644 index 000000000000..a84dde22b57c --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py @@ -0,0 +1,28 @@ +config = { + "interfaces": { + "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService": { + "retry_codes": { + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], + "non_idempotent": [] + }, + "retry_params": { + "default": { + "initial_retry_delay_millis": 100, + "retry_delay_multiplier": 1.3, + "max_retry_delay_millis": 60000, + "initial_rpc_timeout_millis": 20000, + "rpc_timeout_multiplier": 1.0, + "max_rpc_timeout_millis": 20000, + "total_timeout_millis": 600000 + } + }, + "methods": { + "ReportErrorEvent": { + "timeout_millis": 60000, + "retry_codes_name": "non_idempotent", + "retry_params_name": "default" + } + } + } + } +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py new file mode 100644 index 000000000000..8f11310e3141 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py @@ -0,0 +1,570 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/devtools/clouderrorreporting_v1beta1/proto/common.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import monitored_resource_pb2 as google_dot_api_dot_monitored__resource__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/devtools/clouderrorreporting_v1beta1/proto/common.proto', + package='google.devtools.clouderrorreporting.v1beta1', + syntax='proto3', + serialized_pb=_b('\n>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a#google/api/monitored_resource.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x81\x01\n\nErrorGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12S\n\x0ftracking_issues\x18\x03 \x03(\x0b\x32:.google.devtools.clouderrorreporting.v1beta1.TrackingIssue\"\x1c\n\rTrackingIssue\x12\x0b\n\x03url\x18\x01 \x01(\t\"\xef\x01\n\nErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext\"I\n\x0eServiceContext\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\"\xc9\x01\n\x0c\x45rrorContext\x12U\n\x0chttp_request\x18\x01 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.HttpRequestContext\x12\x0c\n\x04user\x18\x02 \x01(\t\x12T\n\x0freport_location\x18\x03 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.SourceLocation\"\x88\x01\n\x12HttpRequestContext\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x12\n\nuser_agent\x18\x03 \x01(\t\x12\x10\n\x08referrer\x18\x04 \x01(\t\x12\x1c\n\x14response_status_code\x18\x05 \x01(\x05\x12\x11\n\tremote_ip\x18\x06 \x01(\t\"O\n\x0eSourceLocation\x12\x11\n\tfile_path\x18\x01 \x01(\t\x12\x13\n\x0bline_number\x18\x02 \x01(\x05\x12\x15\n\rfunction_name\x18\x04 \x01(\tB\xec\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x0b\x43ommonProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3') + , + dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_api_dot_monitored__resource__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_ERRORGROUP = _descriptor.Descriptor( + name='ErrorGroup', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup.group_id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='tracking_issues', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup.tracking_issues', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=212, + serialized_end=341, +) + + +_TRACKINGISSUE = _descriptor.Descriptor( + name='TrackingIssue', + full_name='google.devtools.clouderrorreporting.v1beta1.TrackingIssue', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='url', full_name='google.devtools.clouderrorreporting.v1beta1.TrackingIssue.url', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=343, + serialized_end=371, +) + + +_ERROREVENT = _descriptor.Descriptor( + name='ErrorEvent', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='event_time', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.event_time', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='service_context', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.service_context', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='message', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.message', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='context', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.context', index=3, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=374, + serialized_end=613, +) + + +_SERVICECONTEXT = _descriptor.Descriptor( + name='ServiceContext', + full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='service', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext.service', index=0, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='version', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext.version', index=1, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='resource_type', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext.resource_type', index=2, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=615, + serialized_end=688, +) + + +_ERRORCONTEXT = _descriptor.Descriptor( + name='ErrorContext', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='http_request', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext.http_request', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='user', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext.user', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='report_location', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext.report_location', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=691, + serialized_end=892, +) + + +_HTTPREQUESTCONTEXT = _descriptor.Descriptor( + name='HttpRequestContext', + full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='method', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.method', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='url', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.url', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='user_agent', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.user_agent', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='referrer', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.referrer', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='response_status_code', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.response_status_code', index=4, + number=5, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='remote_ip', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.remote_ip', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=895, + serialized_end=1031, +) + + +_SOURCELOCATION = _descriptor.Descriptor( + name='SourceLocation', + full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='file_path', full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation.file_path', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='line_number', full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation.line_number', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='function_name', full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation.function_name', index=2, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1033, + serialized_end=1112, +) + +_ERRORGROUP.fields_by_name['tracking_issues'].message_type = _TRACKINGISSUE +_ERROREVENT.fields_by_name['event_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_ERROREVENT.fields_by_name['service_context'].message_type = _SERVICECONTEXT +_ERROREVENT.fields_by_name['context'].message_type = _ERRORCONTEXT +_ERRORCONTEXT.fields_by_name['http_request'].message_type = _HTTPREQUESTCONTEXT +_ERRORCONTEXT.fields_by_name['report_location'].message_type = _SOURCELOCATION +DESCRIPTOR.message_types_by_name['ErrorGroup'] = _ERRORGROUP +DESCRIPTOR.message_types_by_name['TrackingIssue'] = _TRACKINGISSUE +DESCRIPTOR.message_types_by_name['ErrorEvent'] = _ERROREVENT +DESCRIPTOR.message_types_by_name['ServiceContext'] = _SERVICECONTEXT +DESCRIPTOR.message_types_by_name['ErrorContext'] = _ERRORCONTEXT +DESCRIPTOR.message_types_by_name['HttpRequestContext'] = _HTTPREQUESTCONTEXT +DESCRIPTOR.message_types_by_name['SourceLocation'] = _SOURCELOCATION + +ErrorGroup = _reflection.GeneratedProtocolMessageType('ErrorGroup', (_message.Message,), dict( + DESCRIPTOR = _ERRORGROUP, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2' + , + __doc__ = """Description of a group of similar error events. + + + Attributes: + name: + The group resource name. Example: projects/my- + project-123/groups/my-groupid + group_id: + Group IDs are unique for a given project. If the same kind of + error occurs in different service contexts, it will receive + the same group ID. + tracking_issues: + Associated tracking issues. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroup) + )) +_sym_db.RegisterMessage(ErrorGroup) + +TrackingIssue = _reflection.GeneratedProtocolMessageType('TrackingIssue', (_message.Message,), dict( + DESCRIPTOR = _TRACKINGISSUE, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2' + , + __doc__ = """Information related to tracking the progress on resolving the error. + + + Attributes: + url: + A URL pointing to a related entry in an issue tracking system. + Example: https://github.com/user/project/issues/4 + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TrackingIssue) + )) +_sym_db.RegisterMessage(TrackingIssue) + +ErrorEvent = _reflection.GeneratedProtocolMessageType('ErrorEvent', (_message.Message,), dict( + DESCRIPTOR = _ERROREVENT, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2' + , + __doc__ = """An error event which is returned by the Error Reporting system. + + + Attributes: + event_time: + Time when the event occurred as provided in the error report. + If the report did not contain a timestamp, the time the error + was received by the Error Reporting system is used. + service_context: + The ``ServiceContext`` for which this error was reported. + message: + The stack trace that was reported or logged by the service. + context: + Data about the context in which the error occurred. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorEvent) + )) +_sym_db.RegisterMessage(ErrorEvent) + +ServiceContext = _reflection.GeneratedProtocolMessageType('ServiceContext', (_message.Message,), dict( + DESCRIPTOR = _SERVICECONTEXT, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2' + , + __doc__ = """Describes a running service that sends errors. Its version changes over + time and multiple versions can run in parallel. + + + Attributes: + service: + An identifier of the service, such as the name of the + executable, job, or Google App Engine service name. This field + is expected to have a low number of values that are relatively + stable over time, as opposed to ``version``, which can be + changed whenever new code is deployed. Contains the service + name for error reports extracted from Google App Engine logs + or ``default`` if the App Engine default service is used. + version: + Represents the source code version that the developer + provided, which could represent a version label or a Git SHA-1 + hash, for example. + resource_type: + Type of the MonitoredResource. List of possible values: + https://cloud.google.com/monitoring/api/resources Value is + set automatically for incoming errors and must not be set when + reporting errors. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContext) + )) +_sym_db.RegisterMessage(ServiceContext) + +ErrorContext = _reflection.GeneratedProtocolMessageType('ErrorContext', (_message.Message,), dict( + DESCRIPTOR = _ERRORCONTEXT, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2' + , + __doc__ = """A description of the context in which an error occurred. This data + should be provided by the application when reporting an error, unless + the error report has been generated automatically from Google App Engine + logs. + + + Attributes: + http_request: + The HTTP request which was processed when the error was + triggered. + user: + The user who caused or was affected by the crash. This can be + a user ID, an email address, or an arbitrary token that + uniquely identifies the user. When sending an error report, + leave this field empty if the user was not logged in. In this + case the Error Reporting system will use other data, such as + remote IP address, to distinguish affected users. See + ``affected_users_count`` in ``ErrorGroupStats``. + report_location: + The location in the source code where the decision was made to + report the error, usually the place where it was logged. For a + logged exception this would be the source line where the + exception is logged, usually close to the place where it was + caught. This value is in contrast to + ``Exception.cause_location``, which describes the source line + where the exception was thrown. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorContext) + )) +_sym_db.RegisterMessage(ErrorContext) + +HttpRequestContext = _reflection.GeneratedProtocolMessageType('HttpRequestContext', (_message.Message,), dict( + DESCRIPTOR = _HTTPREQUESTCONTEXT, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2' + , + __doc__ = """HTTP request data that is related to a reported error. This data should + be provided by the application when reporting an error, unless the error + report has been generated automatically from Google App Engine logs. + + + Attributes: + method: + The type of HTTP request, such as ``GET``, ``POST``, etc. + url: + The URL of the request. + user_agent: + The user agent information that is provided with the request. + referrer: + The referrer information that is provided with the request. + response_status_code: + The HTTP response status code for the request. + remote_ip: + The IP address from which the request originated. This can be + IPv4, IPv6, or a token which is derived from the IP address, + depending on the data that has been provided in the error + report. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.HttpRequestContext) + )) +_sym_db.RegisterMessage(HttpRequestContext) + +SourceLocation = _reflection.GeneratedProtocolMessageType('SourceLocation', (_message.Message,), dict( + DESCRIPTOR = _SOURCELOCATION, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2' + , + __doc__ = """Indicates a location in the source code of the service for which errors + are reported. This data should be provided by the application when + reporting an error, unless the error report has been generated + automatically from Google App Engine logs. All fields are optional. + + + Attributes: + file_path: + The source code filename, which can include a truncated + relative path, or a full path from a production machine. + line_number: + 1-based. 0 indicates that the line number is unknown. + function_name: + Human-readable name of a function or method. The value can + include optional context like the class or package name. For + example, ``my.package.MyClass.method`` in case of Java. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.SourceLocation) + )) +_sym_db.RegisterMessage(SourceLocation) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py new file mode 100644 index 000000000000..a89435267cb2 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py @@ -0,0 +1,3 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py new file mode 100644 index 000000000000..5cdfdeffa5a5 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py @@ -0,0 +1,288 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.cloud.errorreporting_v1beta1.proto import common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto', + package='google.devtools.clouderrorreporting.v1beta1', + syntax='proto3', + serialized_pb=_b('\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\"%\n\x0fGetGroupRequest\x12\x12\n\ngroup_name\x18\x01 \x01(\t\"\\\n\x12UpdateGroupRequest\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup2\x8e\x03\n\x11\x45rrorGroupService\x12\xb4\x01\n\x08GetGroup\x12<.google.devtools.clouderrorreporting.v1beta1.GetGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{group_name=projects/*/groups/*}\x12\xc1\x01\n\x0bUpdateGroup\x12?.google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\"8\x82\xd3\xe4\x93\x02\x32\x1a)/v1beta1/{group.name=projects/*/groups/*}:\x05groupB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorGroupServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3') + , + dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_GETGROUPREQUEST = _descriptor.Descriptor( + name='GetGroupRequest', + full_name='google.devtools.clouderrorreporting.v1beta1.GetGroupRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='group_name', full_name='google.devtools.clouderrorreporting.v1beta1.GetGroupRequest.group_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=218, + serialized_end=255, +) + + +_UPDATEGROUPREQUEST = _descriptor.Descriptor( + name='UpdateGroupRequest', + full_name='google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='group', full_name='google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest.group', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=257, + serialized_end=349, +) + +_UPDATEGROUPREQUEST.fields_by_name['group'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP +DESCRIPTOR.message_types_by_name['GetGroupRequest'] = _GETGROUPREQUEST +DESCRIPTOR.message_types_by_name['UpdateGroupRequest'] = _UPDATEGROUPREQUEST + +GetGroupRequest = _reflection.GeneratedProtocolMessageType('GetGroupRequest', (_message.Message,), dict( + DESCRIPTOR = _GETGROUPREQUEST, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2' + , + __doc__ = """A request to return an individual group. + + + Attributes: + group_name: + [Required] The group resource name. Written as + projects/projectID/groups/group\_name. Call groupStats.list to + return a list of groups belonging to this project. Example: + projects/my-project-123/groups/my-group + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.GetGroupRequest) + )) +_sym_db.RegisterMessage(GetGroupRequest) + +UpdateGroupRequest = _reflection.GeneratedProtocolMessageType('UpdateGroupRequest', (_message.Message,), dict( + DESCRIPTOR = _UPDATEGROUPREQUEST, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2' + , + __doc__ = """A request to replace the existing data for the given group. + + + Attributes: + group: + [Required] The group which replaces the resource on the + server. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest) + )) +_sym_db.RegisterMessage(UpdateGroupRequest) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + + + class ErrorGroupServiceStub(object): + """Service for retrieving and updating individual error groups. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetGroup = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup', + request_serializer=GetGroupRequest.SerializeToString, + response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + ) + self.UpdateGroup = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup', + request_serializer=UpdateGroupRequest.SerializeToString, + response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + ) + + + class ErrorGroupServiceServicer(object): + """Service for retrieving and updating individual error groups. + """ + + def GetGroup(self, request, context): + """Get the specified group. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateGroup(self, request, context): + """Replace the data for the specified group. + Fails if the group does not exist. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + + def add_ErrorGroupServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetGroup': grpc.unary_unary_rpc_method_handler( + servicer.GetGroup, + request_deserializer=GetGroupRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, + ), + 'UpdateGroup': grpc.unary_unary_rpc_method_handler( + servicer.UpdateGroup, + request_deserializer=UpdateGroupRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + class BetaErrorGroupServiceServicer(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """Service for retrieving and updating individual error groups. + """ + def GetGroup(self, request, context): + """Get the specified group. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def UpdateGroup(self, request, context): + """Replace the data for the specified group. + Fails if the group does not exist. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + + + class BetaErrorGroupServiceStub(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """Service for retrieving and updating individual error groups. + """ + def GetGroup(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Get the specified group. + """ + raise NotImplementedError() + GetGroup.future = None + def UpdateGroup(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Replace the data for the specified group. + Fails if the group does not exist. + """ + raise NotImplementedError() + UpdateGroup.future = None + + + def beta_create_ErrorGroupService_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_deserializers = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): GetGroupRequest.FromString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): UpdateGroupRequest.FromString, + } + response_serializers = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, + } + method_implementations = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): face_utilities.unary_unary_inline(servicer.GetGroup), + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): face_utilities.unary_unary_inline(servicer.UpdateGroup), + } + server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) + return beta_implementations.server(method_implementations, options=server_options) + + + def beta_create_ErrorGroupService_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_serializers = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): GetGroupRequest.SerializeToString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): UpdateGroupRequest.SerializeToString, + } + response_deserializers = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + } + cardinalities = { + 'GetGroup': cardinality.Cardinality.UNARY_UNARY, + 'UpdateGroup': cardinality.Cardinality.UNARY_UNARY, + } + stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) + return beta_implementations.dynamic_stub(channel, 'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', cardinalities, options=stub_options) +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py new file mode 100644 index 000000000000..c9d1ff0fadfc --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py @@ -0,0 +1,65 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +import google.cloud.errorreporting_v1beta1.proto.common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2 +import google.cloud.errorreporting_v1beta1.proto.error_group_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2 + + +class ErrorGroupServiceStub(object): + """Service for retrieving and updating individual error groups. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetGroup = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup', + request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.SerializeToString, + response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + ) + self.UpdateGroup = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup', + request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.SerializeToString, + response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + ) + + +class ErrorGroupServiceServicer(object): + """Service for retrieving and updating individual error groups. + """ + + def GetGroup(self, request, context): + """Get the specified group. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateGroup(self, request, context): + """Replace the data for the specified group. + Fails if the group does not exist. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_ErrorGroupServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetGroup': grpc.unary_unary_rpc_method_handler( + servicer.GetGroup, + request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, + ), + 'UpdateGroup': grpc.unary_unary_rpc_method_handler( + servicer.UpdateGroup, + request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py new file mode 100644 index 000000000000..c592152c50e7 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py @@ -0,0 +1,1165 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.cloud.errorreporting_v1beta1.proto import common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2 +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto', + package='google.devtools.clouderrorreporting.v1beta1', + syntax='proto3', + serialized_pb=_b('\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xa1\x04\n\x15ListGroupStatsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x03(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x05 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x37\n\x14timed_count_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12S\n\talignment\x18\x07 \x01(\x0e\x32@.google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment\x12\x32\n\x0e\x61lignment_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12K\n\x05order\x18\t \x01(\x0e\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder\x12\x11\n\tpage_size\x18\x0b \x01(\x05\x12\x12\n\npage_token\x18\x0c \x01(\t\"\xc0\x01\n\x16ListGroupStatsResponse\x12W\n\x11\x65rror_group_stats\x18\x01 \x03(\x0b\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x86\x04\n\x0f\x45rrorGroupStats\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\x1c\n\x14\x61\x66\x66\x65\x63ted_users_count\x18\x03 \x01(\x03\x12M\n\x0ctimed_counts\x18\x04 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.TimedCount\x12\x33\n\x0f\x66irst_seen_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x32\n\x0elast_seen_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12V\n\x11\x61\x66\x66\x65\x63ted_services\x18\x07 \x03(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x1d\n\x15num_affected_services\x18\x08 \x01(\x05\x12O\n\x0erepresentative\x18\t \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\"y\n\nTimedCount\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x8e\x02\n\x11ListEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x04 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x11\n\tpage_size\x18\x06 \x01(\x05\x12\x12\n\npage_token\x18\x07 \x01(\t\"\xb2\x01\n\x12ListEventsResponse\x12M\n\x0c\x65rror_events\x18\x01 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe7\x01\n\x0eQueryTimeRange\x12R\n\x06period\x18\x01 \x01(\x0e\x32\x42.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period\"\x80\x01\n\x06Period\x12\x16\n\x12PERIOD_UNSPECIFIED\x10\x00\x12\x11\n\rPERIOD_1_HOUR\x10\x01\x12\x12\n\x0ePERIOD_6_HOURS\x10\x02\x12\x10\n\x0cPERIOD_1_DAY\x10\x03\x12\x11\n\rPERIOD_1_WEEK\x10\x04\x12\x12\n\x0ePERIOD_30_DAYS\x10\x05\"O\n\x14ServiceContextFilter\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\"+\n\x13\x44\x65leteEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteEventsResponse*u\n\x13TimedCountAlignment\x12%\n!ERROR_COUNT_ALIGNMENT_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x41LIGNMENT_EQUAL_ROUNDED\x10\x01\x12\x1a\n\x16\x41LIGNMENT_EQUAL_AT_END\x10\x02*}\n\x0f\x45rrorGroupOrder\x12\x1b\n\x17GROUP_ORDER_UNSPECIFIED\x10\x00\x12\x0e\n\nCOUNT_DESC\x10\x01\x12\x12\n\x0eLAST_SEEN_DESC\x10\x02\x12\x10\n\x0c\x43REATED_DESC\x10\x03\x12\x17\n\x13\x41\x46\x46\x45\x43TED_USERS_DESC\x10\x04\x32\xf2\x04\n\x11\x45rrorStatsService\x12\xd0\x01\n\x0eListGroupStats\x12\x42.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest\x1a\x43.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse\"5\x82\xd3\xe4\x93\x02/\x12-/v1beta1/{project_name=projects/*}/groupStats\x12\xc0\x01\n\nListEvents\x12>.google.devtools.clouderrorreporting.v1beta1.ListEventsRequest\x1a?.google.devtools.clouderrorreporting.v1beta1.ListEventsResponse\"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{project_name=projects/*}/events\x12\xc6\x01\n\x0c\x44\x65leteEvents\x12@.google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest\x1a\x41.google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse\"1\x82\xd3\xe4\x93\x02+*)/v1beta1/{project_name=projects/*}/eventsB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorStatsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3') + , + dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +_TIMEDCOUNTALIGNMENT = _descriptor.EnumDescriptor( + name='TimedCountAlignment', + full_name='google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='ERROR_COUNT_ALIGNMENT_UNSPECIFIED', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ALIGNMENT_EQUAL_ROUNDED', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ALIGNMENT_EQUAL_AT_END', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=2508, + serialized_end=2625, +) +_sym_db.RegisterEnumDescriptor(_TIMEDCOUNTALIGNMENT) + +TimedCountAlignment = enum_type_wrapper.EnumTypeWrapper(_TIMEDCOUNTALIGNMENT) +_ERRORGROUPORDER = _descriptor.EnumDescriptor( + name='ErrorGroupOrder', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='GROUP_ORDER_UNSPECIFIED', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='COUNT_DESC', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LAST_SEEN_DESC', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CREATED_DESC', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='AFFECTED_USERS_DESC', index=4, number=4, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=2627, + serialized_end=2752, +) +_sym_db.RegisterEnumDescriptor(_ERRORGROUPORDER) + +ErrorGroupOrder = enum_type_wrapper.EnumTypeWrapper(_ERRORGROUPORDER) +ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0 +ALIGNMENT_EQUAL_ROUNDED = 1 +ALIGNMENT_EQUAL_AT_END = 2 +GROUP_ORDER_UNSPECIFIED = 0 +COUNT_DESC = 1 +LAST_SEEN_DESC = 2 +CREATED_DESC = 3 +AFFECTED_USERS_DESC = 4 + + +_QUERYTIMERANGE_PERIOD = _descriptor.EnumDescriptor( + name='Period', + full_name='google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='PERIOD_UNSPECIFIED', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PERIOD_1_HOUR', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PERIOD_6_HOURS', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PERIOD_1_DAY', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PERIOD_1_WEEK', index=4, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PERIOD_30_DAYS', index=5, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=2228, + serialized_end=2356, +) +_sym_db.RegisterEnumDescriptor(_QUERYTIMERANGE_PERIOD) + + +_LISTGROUPSTATSREQUEST = _descriptor.Descriptor( + name='ListGroupStatsRequest', + full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='project_name', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.project_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='service_filter', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.service_filter', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='time_range', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.time_range', index=3, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='timed_count_duration', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.timed_count_duration', index=4, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='alignment', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment', index=5, + number=7, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='alignment_time', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment_time', index=6, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='order', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.order', index=7, + number=9, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='page_size', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_size', index=8, + number=11, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_token', index=9, + number=12, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=284, + serialized_end=829, +) + + +_LISTGROUPSTATSRESPONSE = _descriptor.Descriptor( + name='ListGroupStatsResponse', + full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='error_group_stats', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.error_group_stats', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='next_page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.next_page_token', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='time_range_begin', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.time_range_begin', index=2, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=832, + serialized_end=1024, +) + + +_ERRORGROUPSTATS = _descriptor.Descriptor( + name='ErrorGroupStats', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='group', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.group', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='count', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.count', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='affected_users_count', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_users_count', index=2, + number=3, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='timed_counts', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.timed_counts', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='first_seen_time', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.first_seen_time', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='last_seen_time', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.last_seen_time', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='affected_services', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_services', index=6, + number=7, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='num_affected_services', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.num_affected_services', index=7, + number=8, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='representative', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.representative', index=8, + number=9, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1027, + serialized_end=1545, +) + + +_TIMEDCOUNT = _descriptor.Descriptor( + name='TimedCount', + full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='count', full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount.count', index=0, + number=1, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='start_time', full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount.start_time', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='end_time', full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount.end_time', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1547, + serialized_end=1668, +) + + +_LISTEVENTSREQUEST = _descriptor.Descriptor( + name='ListEventsRequest', + full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='project_name', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.project_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.group_id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='service_filter', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.service_filter', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='time_range', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.time_range', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='page_size', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_size', index=4, + number=6, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_token', index=5, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1671, + serialized_end=1941, +) + + +_LISTEVENTSRESPONSE = _descriptor.Descriptor( + name='ListEventsResponse', + full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='error_events', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.error_events', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='next_page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.next_page_token', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='time_range_begin', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.time_range_begin', index=2, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1944, + serialized_end=2122, +) + + +_QUERYTIMERANGE = _descriptor.Descriptor( + name='QueryTimeRange', + full_name='google.devtools.clouderrorreporting.v1beta1.QueryTimeRange', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='period', full_name='google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.period', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _QUERYTIMERANGE_PERIOD, + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2125, + serialized_end=2356, +) + + +_SERVICECONTEXTFILTER = _descriptor.Descriptor( + name='ServiceContextFilter', + full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='service', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.service', index=0, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='version', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.version', index=1, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='resource_type', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.resource_type', index=2, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2358, + serialized_end=2437, +) + + +_DELETEEVENTSREQUEST = _descriptor.Descriptor( + name='DeleteEventsRequest', + full_name='google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='project_name', full_name='google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest.project_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2439, + serialized_end=2482, +) + + +_DELETEEVENTSRESPONSE = _descriptor.Descriptor( + name='DeleteEventsResponse', + full_name='google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2484, + serialized_end=2506, +) + +_LISTGROUPSTATSREQUEST.fields_by_name['service_filter'].message_type = _SERVICECONTEXTFILTER +_LISTGROUPSTATSREQUEST.fields_by_name['time_range'].message_type = _QUERYTIMERANGE +_LISTGROUPSTATSREQUEST.fields_by_name['timed_count_duration'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION +_LISTGROUPSTATSREQUEST.fields_by_name['alignment'].enum_type = _TIMEDCOUNTALIGNMENT +_LISTGROUPSTATSREQUEST.fields_by_name['alignment_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_LISTGROUPSTATSREQUEST.fields_by_name['order'].enum_type = _ERRORGROUPORDER +_LISTGROUPSTATSRESPONSE.fields_by_name['error_group_stats'].message_type = _ERRORGROUPSTATS +_LISTGROUPSTATSRESPONSE.fields_by_name['time_range_begin'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_ERRORGROUPSTATS.fields_by_name['group'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP +_ERRORGROUPSTATS.fields_by_name['timed_counts'].message_type = _TIMEDCOUNT +_ERRORGROUPSTATS.fields_by_name['first_seen_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_ERRORGROUPSTATS.fields_by_name['last_seen_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_ERRORGROUPSTATS.fields_by_name['affected_services'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT +_ERRORGROUPSTATS.fields_by_name['representative'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT +_TIMEDCOUNT.fields_by_name['start_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_TIMEDCOUNT.fields_by_name['end_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_LISTEVENTSREQUEST.fields_by_name['service_filter'].message_type = _SERVICECONTEXTFILTER +_LISTEVENTSREQUEST.fields_by_name['time_range'].message_type = _QUERYTIMERANGE +_LISTEVENTSRESPONSE.fields_by_name['error_events'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT +_LISTEVENTSRESPONSE.fields_by_name['time_range_begin'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_QUERYTIMERANGE.fields_by_name['period'].enum_type = _QUERYTIMERANGE_PERIOD +_QUERYTIMERANGE_PERIOD.containing_type = _QUERYTIMERANGE +DESCRIPTOR.message_types_by_name['ListGroupStatsRequest'] = _LISTGROUPSTATSREQUEST +DESCRIPTOR.message_types_by_name['ListGroupStatsResponse'] = _LISTGROUPSTATSRESPONSE +DESCRIPTOR.message_types_by_name['ErrorGroupStats'] = _ERRORGROUPSTATS +DESCRIPTOR.message_types_by_name['TimedCount'] = _TIMEDCOUNT +DESCRIPTOR.message_types_by_name['ListEventsRequest'] = _LISTEVENTSREQUEST +DESCRIPTOR.message_types_by_name['ListEventsResponse'] = _LISTEVENTSRESPONSE +DESCRIPTOR.message_types_by_name['QueryTimeRange'] = _QUERYTIMERANGE +DESCRIPTOR.message_types_by_name['ServiceContextFilter'] = _SERVICECONTEXTFILTER +DESCRIPTOR.message_types_by_name['DeleteEventsRequest'] = _DELETEEVENTSREQUEST +DESCRIPTOR.message_types_by_name['DeleteEventsResponse'] = _DELETEEVENTSRESPONSE +DESCRIPTOR.enum_types_by_name['TimedCountAlignment'] = _TIMEDCOUNTALIGNMENT +DESCRIPTOR.enum_types_by_name['ErrorGroupOrder'] = _ERRORGROUPORDER + +ListGroupStatsRequest = _reflection.GeneratedProtocolMessageType('ListGroupStatsRequest', (_message.Message,), dict( + DESCRIPTOR = _LISTGROUPSTATSREQUEST, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Specifies a set of ``ErrorGroupStats`` to return. + + + Attributes: + project_name: + [Required] The resource name of the Google Cloud Platform + project. Written as projects/ plus the Google Cloud Platform + project ID. Example: projects/my-project-123. + group_id: + [Optional] List all ErrorGroupStats with these IDs. + service_filter: + [Optional] List only ErrorGroupStats which belong to a service + context that matches the filter. Data for all service contexts + is returned if this field is not specified. + time_range: + [Optional] List data for the given time range. If not set a + default time range is used. The field time\_range\_begin in + the response will specify the beginning of this time range. + Only ErrorGroupStats with a non-zero count in the given time + range are returned, unless the request contains an explicit + group\_id list. If a group\_id list is given, also + ErrorGroupStats with zero occurrences are returned. + timed_count_duration: + [Optional] The preferred duration for a single returned + ``TimedCount``. If not set, no timed counts are returned. + alignment: + [Optional] The alignment of the timed counts to be returned. + Default is ``ALIGNMENT_EQUAL_AT_END``. + alignment_time: + [Optional] Time where the timed counts shall be aligned if + rounded alignment is chosen. Default is 00:00 UTC. + order: + [Optional] The sort order in which the results are returned. + Default is ``COUNT_DESC``. + page_size: + [Optional] The maximum number of results to return per + response. Default is 20. + page_token: + [Optional] A ``next_page_token`` provided by a previous + response. To view additional results, pass this token along + with the identical query parameters as the first request. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest) + )) +_sym_db.RegisterMessage(ListGroupStatsRequest) + +ListGroupStatsResponse = _reflection.GeneratedProtocolMessageType('ListGroupStatsResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTGROUPSTATSRESPONSE, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Contains a set of requested error group stats. + + + Attributes: + error_group_stats: + The error group stats which match the given request. + next_page_token: + If non-empty, more results are available. Pass this token, + along with the same query parameters as the first request, to + view the next page of results. + time_range_begin: + The timestamp specifies the start time to which the request + was restricted. The start time is set based on the requested + time range. It may be adjusted to a later time if a project + has exceeded the storage quota and older data has been + deleted. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse) + )) +_sym_db.RegisterMessage(ListGroupStatsResponse) + +ErrorGroupStats = _reflection.GeneratedProtocolMessageType('ErrorGroupStats', (_message.Message,), dict( + DESCRIPTOR = _ERRORGROUPSTATS, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Data extracted for a specific group based on certain filter criteria, + such as a given time period and/or service filter. + + + Attributes: + group: + Group data that is independent of the filter criteria. + count: + Approximate total number of events in the given group that + match the filter criteria. + affected_users_count: + Approximate number of affected users in the given group that + match the filter criteria. Users are distinguished by data in + the ``ErrorContext`` of the individual error events, such as + their login name or their remote IP address in case of HTTP + requests. The number of affected users can be zero even if the + number of errors is non-zero if no data was provided from + which the affected user could be deduced. Users are counted + based on data in the request context that was provided in the + error report. If more users are implicitly affected, such as + due to a crash of the whole service, this is not reflected + here. + timed_counts: + Approximate number of occurrences over time. Timed counts + returned by ListGroups are guaranteed to be: - Inside the + requested time interval - Non-overlapping, and - Ordered by + ascending time. + first_seen_time: + Approximate first occurrence that was ever seen for this group + and which matches the given filter criteria, ignoring the + time\_range that was specified in the request. + last_seen_time: + Approximate last occurrence that was ever seen for this group + and which matches the given filter criteria, ignoring the + time\_range that was specified in the request. + affected_services: + Service contexts with a non-zero error count for the given + filter criteria. This list can be truncated if multiple + services are affected. Refer to ``num_affected_services`` for + the total count. + num_affected_services: + The total number of services with a non-zero error count for + the given filter criteria. + representative: + An arbitrary event that is chosen as representative for the + whole group. The representative event is intended to be used + as a quick preview for the whole group. Events in the group + are usually sufficiently similar to each other such that + showing an arbitrary representative provides insight into the + characteristics of the group as a whole. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats) + )) +_sym_db.RegisterMessage(ErrorGroupStats) + +TimedCount = _reflection.GeneratedProtocolMessageType('TimedCount', (_message.Message,), dict( + DESCRIPTOR = _TIMEDCOUNT, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """The number of errors in a given time period. All numbers are approximate + since the error events are sampled before counting them. + + + Attributes: + count: + Approximate number of occurrences in the given time period. + start_time: + Start of the time period to which ``count`` refers (included). + end_time: + End of the time period to which ``count`` refers (excluded). + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TimedCount) + )) +_sym_db.RegisterMessage(TimedCount) + +ListEventsRequest = _reflection.GeneratedProtocolMessageType('ListEventsRequest', (_message.Message,), dict( + DESCRIPTOR = _LISTEVENTSREQUEST, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Specifies a set of error events to return. + + + Attributes: + project_name: + [Required] The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project ID + `__. Example: + ``projects/my-project-123``. + group_id: + [Required] The group for which events shall be returned. + service_filter: + [Optional] List only ErrorGroups which belong to a service + context that matches the filter. Data for all service contexts + is returned if this field is not specified. + time_range: + [Optional] List only data for the given time range. If not set + a default time range is used. The field time\_range\_begin in + the response will specify the beginning of this time range. + page_size: + [Optional] The maximum number of results to return per + response. + page_token: + [Optional] A ``next_page_token`` provided by a previous + response. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsRequest) + )) +_sym_db.RegisterMessage(ListEventsRequest) + +ListEventsResponse = _reflection.GeneratedProtocolMessageType('ListEventsResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTEVENTSRESPONSE, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Contains a set of requested error events. + + + Attributes: + error_events: + The error events which match the given request. + next_page_token: + If non-empty, more results are available. Pass this token, + along with the same query parameters as the first request, to + view the next page of results. + time_range_begin: + The timestamp specifies the start time to which the request + was restricted. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsResponse) + )) +_sym_db.RegisterMessage(ListEventsResponse) + +QueryTimeRange = _reflection.GeneratedProtocolMessageType('QueryTimeRange', (_message.Message,), dict( + DESCRIPTOR = _QUERYTIMERANGE, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Requests might be rejected or the resulting timed count durations might + be adjusted for lower durations. + + + Attributes: + period: + Restricts the query to the specified time range. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.QueryTimeRange) + )) +_sym_db.RegisterMessage(QueryTimeRange) + +ServiceContextFilter = _reflection.GeneratedProtocolMessageType('ServiceContextFilter', (_message.Message,), dict( + DESCRIPTOR = _SERVICECONTEXTFILTER, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Specifies criteria for filtering a subset of service contexts. The + fields in the filter correspond to the fields in ``ServiceContext``. + Only exact, case-sensitive matches are supported. If a field is unset or + empty, it matches arbitrary values. + + + Attributes: + service: + [Optional] The exact value to match against + ```ServiceContext.service`` `__. + version: + [Optional] The exact value to match against + ```ServiceContext.version`` `__. + resource_type: + [Optional] The exact value to match against + ```ServiceContext.resource_type`` `__. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter) + )) +_sym_db.RegisterMessage(ServiceContextFilter) + +DeleteEventsRequest = _reflection.GeneratedProtocolMessageType('DeleteEventsRequest', (_message.Message,), dict( + DESCRIPTOR = _DELETEEVENTSREQUEST, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Deletes all events in the project. + + + Attributes: + project_name: + [Required] The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project ID + `__. Example: + ``projects/my-project-123``. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest) + )) +_sym_db.RegisterMessage(DeleteEventsRequest) + +DeleteEventsResponse = _reflection.GeneratedProtocolMessageType('DeleteEventsResponse', (_message.Message,), dict( + DESCRIPTOR = _DELETEEVENTSRESPONSE, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2' + , + __doc__ = """Response message for deleting error events. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse) + )) +_sym_db.RegisterMessage(DeleteEventsResponse) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + + + class ErrorStatsServiceStub(object): + """An API for retrieving and managing error statistics as well as data for + individual events. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ListGroupStats = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats', + request_serializer=ListGroupStatsRequest.SerializeToString, + response_deserializer=ListGroupStatsResponse.FromString, + ) + self.ListEvents = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents', + request_serializer=ListEventsRequest.SerializeToString, + response_deserializer=ListEventsResponse.FromString, + ) + self.DeleteEvents = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents', + request_serializer=DeleteEventsRequest.SerializeToString, + response_deserializer=DeleteEventsResponse.FromString, + ) + + + class ErrorStatsServiceServicer(object): + """An API for retrieving and managing error statistics as well as data for + individual events. + """ + + def ListGroupStats(self, request, context): + """Lists the specified groups. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListEvents(self, request, context): + """Lists the specified events. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteEvents(self, request, context): + """Deletes all error events of a given project. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + + def add_ErrorStatsServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ListGroupStats': grpc.unary_unary_rpc_method_handler( + servicer.ListGroupStats, + request_deserializer=ListGroupStatsRequest.FromString, + response_serializer=ListGroupStatsResponse.SerializeToString, + ), + 'ListEvents': grpc.unary_unary_rpc_method_handler( + servicer.ListEvents, + request_deserializer=ListEventsRequest.FromString, + response_serializer=ListEventsResponse.SerializeToString, + ), + 'DeleteEvents': grpc.unary_unary_rpc_method_handler( + servicer.DeleteEvents, + request_deserializer=DeleteEventsRequest.FromString, + response_serializer=DeleteEventsResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + class BetaErrorStatsServiceServicer(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """An API for retrieving and managing error statistics as well as data for + individual events. + """ + def ListGroupStats(self, request, context): + """Lists the specified groups. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def ListEvents(self, request, context): + """Lists the specified events. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def DeleteEvents(self, request, context): + """Deletes all error events of a given project. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + + + class BetaErrorStatsServiceStub(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """An API for retrieving and managing error statistics as well as data for + individual events. + """ + def ListGroupStats(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Lists the specified groups. + """ + raise NotImplementedError() + ListGroupStats.future = None + def ListEvents(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Lists the specified events. + """ + raise NotImplementedError() + ListEvents.future = None + def DeleteEvents(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Deletes all error events of a given project. + """ + raise NotImplementedError() + DeleteEvents.future = None + + + def beta_create_ErrorStatsService_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_deserializers = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): DeleteEventsRequest.FromString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): ListEventsRequest.FromString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): ListGroupStatsRequest.FromString, + } + response_serializers = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): DeleteEventsResponse.SerializeToString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): ListEventsResponse.SerializeToString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): ListGroupStatsResponse.SerializeToString, + } + method_implementations = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): face_utilities.unary_unary_inline(servicer.DeleteEvents), + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): face_utilities.unary_unary_inline(servicer.ListEvents), + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): face_utilities.unary_unary_inline(servicer.ListGroupStats), + } + server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) + return beta_implementations.server(method_implementations, options=server_options) + + + def beta_create_ErrorStatsService_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_serializers = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): DeleteEventsRequest.SerializeToString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): ListEventsRequest.SerializeToString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): ListGroupStatsRequest.SerializeToString, + } + response_deserializers = { + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): DeleteEventsResponse.FromString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): ListEventsResponse.FromString, + ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): ListGroupStatsResponse.FromString, + } + cardinalities = { + 'DeleteEvents': cardinality.Cardinality.UNARY_UNARY, + 'ListEvents': cardinality.Cardinality.UNARY_UNARY, + 'ListGroupStats': cardinality.Cardinality.UNARY_UNARY, + } + stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) + return beta_implementations.dynamic_stub(channel, 'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', cardinalities, options=stub_options) +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py new file mode 100644 index 000000000000..db753cc290e7 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py @@ -0,0 +1,82 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +import google.cloud.errorreporting_v1beta1.proto.error_stats_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2 + + +class ErrorStatsServiceStub(object): + """An API for retrieving and managing error statistics as well as data for + individual events. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ListGroupStats = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats', + request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.SerializeToString, + response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.FromString, + ) + self.ListEvents = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents', + request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.SerializeToString, + response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.FromString, + ) + self.DeleteEvents = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents', + request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.SerializeToString, + response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.FromString, + ) + + +class ErrorStatsServiceServicer(object): + """An API for retrieving and managing error statistics as well as data for + individual events. + """ + + def ListGroupStats(self, request, context): + """Lists the specified groups. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListEvents(self, request, context): + """Lists the specified events. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteEvents(self, request, context): + """Deletes all error events of a given project. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_ErrorStatsServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ListGroupStats': grpc.unary_unary_rpc_method_handler( + servicer.ListGroupStats, + request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.SerializeToString, + ), + 'ListEvents': grpc.unary_unary_rpc_method_handler( + servicer.ListEvents, + request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.SerializeToString, + ), + 'DeleteEvents': grpc.unary_unary_rpc_method_handler( + servicer.DeleteEvents, + request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py new file mode 100644 index 000000000000..cba497127a4f --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py @@ -0,0 +1,358 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.cloud.errorreporting_v1beta1.proto import common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto', + package='google.devtools.clouderrorreporting.v1beta1', + syntax='proto3', + serialized_pb=_b('\nMgoogle/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x7f\n\x17ReportErrorEventRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12N\n\x05\x65vent\x18\x02 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent\"\x1a\n\x18ReportErrorEventResponse\"\xf7\x01\n\x12ReportedErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext2\xf8\x01\n\x13ReportErrorsService\x12\xe0\x01\n\x10ReportErrorEvent\x12\x44.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest\x1a\x45.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse\"?\x82\xd3\xe4\x93\x02\x39\"0/v1beta1/{project_name=projects/*}/events:report:\x05\x65ventB\xf9\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x18ReportErrorsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3') + , + dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_REPORTERROREVENTREQUEST = _descriptor.Descriptor( + name='ReportErrorEventRequest', + full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='project_name', full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.project_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='event', full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.event', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=253, + serialized_end=380, +) + + +_REPORTERROREVENTRESPONSE = _descriptor.Descriptor( + name='ReportErrorEventResponse', + full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=382, + serialized_end=408, +) + + +_REPORTEDERROREVENT = _descriptor.Descriptor( + name='ReportedErrorEvent', + full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='event_time', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.event_time', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='service_context', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.service_context', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='message', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.message', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='context', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.context', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=411, + serialized_end=658, +) + +_REPORTERROREVENTREQUEST.fields_by_name['event'].message_type = _REPORTEDERROREVENT +_REPORTEDERROREVENT.fields_by_name['event_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_REPORTEDERROREVENT.fields_by_name['service_context'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT +_REPORTEDERROREVENT.fields_by_name['context'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORCONTEXT +DESCRIPTOR.message_types_by_name['ReportErrorEventRequest'] = _REPORTERROREVENTREQUEST +DESCRIPTOR.message_types_by_name['ReportErrorEventResponse'] = _REPORTERROREVENTRESPONSE +DESCRIPTOR.message_types_by_name['ReportedErrorEvent'] = _REPORTEDERROREVENT + +ReportErrorEventRequest = _reflection.GeneratedProtocolMessageType('ReportErrorEventRequest', (_message.Message,), dict( + DESCRIPTOR = _REPORTERROREVENTREQUEST, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2' + , + __doc__ = """A request for reporting an individual error event. + + + Attributes: + project_name: + [Required] The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project ID + `__. Example: + ``projects/my-project-123``. + event: + [Required] The error event to be reported. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest) + )) +_sym_db.RegisterMessage(ReportErrorEventRequest) + +ReportErrorEventResponse = _reflection.GeneratedProtocolMessageType('ReportErrorEventResponse', (_message.Message,), dict( + DESCRIPTOR = _REPORTERROREVENTRESPONSE, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2' + , + __doc__ = """Response for reporting an individual error event. Data may be added to + this message in the future. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse) + )) +_sym_db.RegisterMessage(ReportErrorEventResponse) + +ReportedErrorEvent = _reflection.GeneratedProtocolMessageType('ReportedErrorEvent', (_message.Message,), dict( + DESCRIPTOR = _REPORTEDERROREVENT, + __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2' + , + __doc__ = """An error event which is reported to the Error Reporting system. + + + Attributes: + event_time: + [Optional] Time when the event occurred. If not provided, the + time when the event was received by the Error Reporting system + will be used. + service_context: + [Required] The service context in which this error has + occurred. + message: + [Required] A message describing the error. The message can + contain an exception stack in one of the supported programming + languages and formats. In that case, the message is parsed and + detailed exception information is returned when retrieving the + error event again. + context: + [Optional] A description of the context in which the error + occurred. + """, + # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent) + )) +_sym_db.RegisterMessage(ReportedErrorEvent) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + + + class ReportErrorsServiceStub(object): + """An API for reporting error events. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ReportErrorEvent = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent', + request_serializer=ReportErrorEventRequest.SerializeToString, + response_deserializer=ReportErrorEventResponse.FromString, + ) + + + class ReportErrorsServiceServicer(object): + """An API for reporting error events. + """ + + def ReportErrorEvent(self, request, context): + """Report an individual error event. + + This endpoint accepts either an OAuth token, + or an + API key + for authentication. To use an API key, append it to the URL as the value of + a `key` parameter. For example: +
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + + def add_ReportErrorsServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ReportErrorEvent': grpc.unary_unary_rpc_method_handler( + servicer.ReportErrorEvent, + request_deserializer=ReportErrorEventRequest.FromString, + response_serializer=ReportErrorEventResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + class BetaReportErrorsServiceServicer(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """An API for reporting error events. + """ + def ReportErrorEvent(self, request, context): + """Report an individual error event. + + This endpoint accepts either an OAuth token, + or an + API key + for authentication. To use an API key, append it to the URL as the value of + a `key` parameter. For example: +
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + + + class BetaReportErrorsServiceStub(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """An API for reporting error events. + """ + def ReportErrorEvent(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Report an individual error event. + + This endpoint accepts either an OAuth token, + or an + API key + for authentication. To use an API key, append it to the URL as the value of + a `key` parameter. For example: +
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ """ + raise NotImplementedError() + ReportErrorEvent.future = None + + + def beta_create_ReportErrorsService_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_deserializers = { + ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): ReportErrorEventRequest.FromString, + } + response_serializers = { + ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): ReportErrorEventResponse.SerializeToString, + } + method_implementations = { + ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): face_utilities.unary_unary_inline(servicer.ReportErrorEvent), + } + server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) + return beta_implementations.server(method_implementations, options=server_options) + + + def beta_create_ReportErrorsService_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_serializers = { + ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): ReportErrorEventRequest.SerializeToString, + } + response_deserializers = { + ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): ReportErrorEventResponse.FromString, + } + cardinalities = { + 'ReportErrorEvent': cardinality.Cardinality.UNARY_UNARY, + } + stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) + return beta_implementations.dynamic_stub(channel, 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', cardinalities, options=stub_options) +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py new file mode 100644 index 000000000000..d40cb2acb2cb --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py @@ -0,0 +1,53 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +import google.cloud.errorreporting_v1beta1.proto.report_errors_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2 + + +class ReportErrorsServiceStub(object): + """An API for reporting error events. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ReportErrorEvent = channel.unary_unary( + '/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent', + request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.SerializeToString, + response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.FromString, + ) + + +class ReportErrorsServiceServicer(object): + """An API for reporting error events. + """ + + def ReportErrorEvent(self, request, context): + """Report an individual error event. + + This endpoint accepts either an OAuth token, + or an + API key + for authentication. To use an API key, append it to the URL as the value of + a `key` parameter. For example: +
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_ReportErrorsServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ReportErrorEvent': grpc.unary_unary_rpc_method_handler( + servicer.ReportErrorEvent, + request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py new file mode 100644 index 000000000000..978d281752d1 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py @@ -0,0 +1,49 @@ +# Copyright 2018 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 +# +# https://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 __future__ import absolute_import +import sys + +from google.api_core.protobuf_helpers import get_messages + +from google.api import http_pb2 +from google.api import label_pb2 +from google.api import monitored_resource_pb2 +from google.cloud.errorreporting_v1beta1.proto import common_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 +from google.protobuf import descriptor_pb2 +from google.protobuf import duration_pb2 +from google.protobuf import timestamp_pb2 + +names = [] +for module in ( + http_pb2, + label_pb2, + monitored_resource_pb2, + common_pb2, + error_group_service_pb2, + error_stats_service_pb2, + report_errors_service_pb2, + descriptor_pb2, + duration_pb2, + timestamp_pb2, +): + for name, message in get_messages(module).items(): + message.__module__ = 'google.cloud.errorreporting_v1beta1.types' + setattr(sys.modules[__name__], name, message) + names.append(name) + +__all__ = tuple(sorted(names)) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index c90670f4ee14..a21eaef31390 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -122,7 +122,7 @@ def system(session, py): session.install('.') # Run py.test against the system tests. - session.run('py.test', '-vvv', 'tests/system.py') + session.run('py.test', '-vvv', 'tests/system', *session.posargs) @nox.session diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 7a2f9058a8af..6d6f3c3f8421 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -54,7 +54,6 @@ 'google-cloud-core >= 0.28.0, < 0.29dev', 'google-api-core >= 0.1.1, < 0.2.0dev', 'google-cloud-logging >= 1.4.0, < 1.5dev', - 'gapic-google-cloud-error-reporting-v1beta1 >= 0.15.0, < 0.16dev' ] setup( diff --git a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py new file mode 100644 index 000000000000..f7a0ec32895c --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py @@ -0,0 +1,46 @@ +# Copyright 2018 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 +# +# https://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 os +import time + +from google.cloud import errorreporting_v1beta1 +from google.cloud.errorreporting_v1beta1.proto import common_pb2 +from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 + + +class TestSystemReportErrorsService(object): + def test_report_error_event(self): + project_id = os.environ['PROJECT_ID'] + + client = errorreporting_v1beta1.ReportErrorsServiceClient() + project_name = client.project_path(project_id) + message = '[MESSAGE]' + service = '[SERVICE]' + service_context = {'service': service} + file_path = 'path/to/file.lang' + line_number = 42 + function_name = 'meaningOfLife' + report_location = { + 'file_path': file_path, + 'line_number': line_number, + 'function_name': function_name + } + context = {'report_location': report_location} + event = { + 'message': message, + 'service_context': service_context, + 'context': context + } + response = client.report_error_event(project_name, event) diff --git a/packages/google-cloud-error-reporting/tests/system.py b/packages/google-cloud-error-reporting/tests/system/test_system.py similarity index 96% rename from packages/google-cloud-error-reporting/tests/system.py rename to packages/google-cloud-error-reporting/tests/system/test_system.py index 58d988bc8364..598576cacb47 100644 --- a/packages/google-cloud-error-reporting/tests/system.py +++ b/packages/google-cloud-error-reporting/tests/system/test_system.py @@ -17,9 +17,9 @@ import unittest from google.cloud import error_reporting -from google.cloud.gapic.errorreporting.v1beta1 import ( +from google.cloud.errorreporting_v1beta1.gapic import ( error_stats_service_client) -from google.cloud.proto.devtools.clouderrorreporting.v1beta1 import ( +from google.cloud.errorreporting_v1beta1.proto import ( error_stats_service_pb2) from google.protobuf.duration_pb2 import Duration diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py new file mode 100644 index 000000000000..d0df5fd3bd5d --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py @@ -0,0 +1,133 @@ +# Copyright 2018 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 +# +# https://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. +"""Unit tests.""" + +import pytest + +from google.cloud import errorreporting_v1beta1 +from google.cloud.errorreporting_v1beta1.proto import common_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 + + +class MultiCallableStub(object): + """Stub for the grpc.UnaryUnaryMultiCallable interface.""" + + def __init__(self, method, channel_stub): + self.method = method + self.channel_stub = channel_stub + + def __call__(self, request, timeout=None, metadata=None, credentials=None): + self.channel_stub.requests.append((self.method, request)) + + response = None + if self.channel_stub.responses: + response = self.channel_stub.responses.pop() + + if isinstance(response, Exception): + raise response + + if response: + return response + + +class ChannelStub(object): + """Stub for the grpc.Channel interface.""" + + def __init__(self, responses=[]): + self.responses = responses + self.requests = [] + + def unary_unary(self, + method, + request_serializer=None, + response_deserializer=None): + return MultiCallableStub(method, self) + + +class CustomException(Exception): + pass + + +class TestErrorGroupServiceClient(object): + def test_get_group(self): + # Setup Expected Response + name = 'name3373707' + group_id = 'groupId506361563' + expected_response = {'name': name, 'group_id': group_id} + expected_response = common_pb2.ErrorGroup(**expected_response) + + # Mock the API response + channel = ChannelStub(responses=[expected_response]) + client = errorreporting_v1beta1.ErrorGroupServiceClient( + channel=channel) + + # Setup Request + group_name = client.group_path('[PROJECT]', '[GROUP]') + + response = client.get_group(group_name) + assert expected_response == response + + assert len(channel.requests) == 1 + expected_request = error_group_service_pb2.GetGroupRequest( + group_name=group_name) + actual_request = channel.requests[0][1] + assert expected_request == actual_request + + def test_get_group_exception(self): + # Mock the API response + channel = ChannelStub(responses=[CustomException()]) + client = errorreporting_v1beta1.ErrorGroupServiceClient( + channel=channel) + + # Setup request + group_name = client.group_path('[PROJECT]', '[GROUP]') + + with pytest.raises(CustomException): + client.get_group(group_name) + + def test_update_group(self): + # Setup Expected Response + name = 'name3373707' + group_id = 'groupId506361563' + expected_response = {'name': name, 'group_id': group_id} + expected_response = common_pb2.ErrorGroup(**expected_response) + + # Mock the API response + channel = ChannelStub(responses=[expected_response]) + client = errorreporting_v1beta1.ErrorGroupServiceClient( + channel=channel) + + # Setup Request + group = {} + + response = client.update_group(group) + assert expected_response == response + + assert len(channel.requests) == 1 + expected_request = error_group_service_pb2.UpdateGroupRequest( + group=group) + actual_request = channel.requests[0][1] + assert expected_request == actual_request + + def test_update_group_exception(self): + # Mock the API response + channel = ChannelStub(responses=[CustomException()]) + client = errorreporting_v1beta1.ErrorGroupServiceClient( + channel=channel) + + # Setup request + group = {} + + with pytest.raises(CustomException): + client.update_group(group) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py new file mode 100644 index 000000000000..f6f33f91c3be --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py @@ -0,0 +1,188 @@ +# Copyright 2018 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 +# +# https://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. +"""Unit tests.""" + +import pytest + +from google.cloud import errorreporting_v1beta1 +from google.cloud.errorreporting_v1beta1.proto import common_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 + + +class MultiCallableStub(object): + """Stub for the grpc.UnaryUnaryMultiCallable interface.""" + + def __init__(self, method, channel_stub): + self.method = method + self.channel_stub = channel_stub + + def __call__(self, request, timeout=None, metadata=None, credentials=None): + self.channel_stub.requests.append((self.method, request)) + + response = None + if self.channel_stub.responses: + response = self.channel_stub.responses.pop() + + if isinstance(response, Exception): + raise response + + if response: + return response + + +class ChannelStub(object): + """Stub for the grpc.Channel interface.""" + + def __init__(self, responses=[]): + self.responses = responses + self.requests = [] + + def unary_unary(self, + method, + request_serializer=None, + response_deserializer=None): + return MultiCallableStub(method, self) + + +class CustomException(Exception): + pass + + +class TestErrorStatsServiceClient(object): + def test_list_group_stats(self): + # Setup Expected Response + next_page_token = '' + error_group_stats_element = {} + error_group_stats = [error_group_stats_element] + expected_response = { + 'next_page_token': next_page_token, + 'error_group_stats': error_group_stats + } + expected_response = error_stats_service_pb2.ListGroupStatsResponse( + **expected_response) + + # Mock the API response + channel = ChannelStub(responses=[expected_response]) + client = errorreporting_v1beta1.ErrorStatsServiceClient( + channel=channel) + + # Setup Request + project_name = client.project_path('[PROJECT]') + time_range = {} + + paged_list_response = client.list_group_stats(project_name, time_range) + resources = list(paged_list_response) + assert len(resources) == 1 + + assert expected_response.error_group_stats[0] == resources[0] + + assert len(channel.requests) == 1 + expected_request = error_stats_service_pb2.ListGroupStatsRequest( + project_name=project_name, time_range=time_range) + actual_request = channel.requests[0][1] + assert expected_request == actual_request + + def test_list_group_stats_exception(self): + channel = ChannelStub(responses=[CustomException()]) + client = errorreporting_v1beta1.ErrorStatsServiceClient( + channel=channel) + + # Setup request + project_name = client.project_path('[PROJECT]') + time_range = {} + + paged_list_response = client.list_group_stats(project_name, time_range) + with pytest.raises(CustomException): + list(paged_list_response) + + def test_list_events(self): + # Setup Expected Response + next_page_token = '' + error_events_element = {} + error_events = [error_events_element] + expected_response = { + 'next_page_token': next_page_token, + 'error_events': error_events + } + expected_response = error_stats_service_pb2.ListEventsResponse( + **expected_response) + + # Mock the API response + channel = ChannelStub(responses=[expected_response]) + client = errorreporting_v1beta1.ErrorStatsServiceClient( + channel=channel) + + # Setup Request + project_name = client.project_path('[PROJECT]') + group_id = 'groupId506361563' + + paged_list_response = client.list_events(project_name, group_id) + resources = list(paged_list_response) + assert len(resources) == 1 + + assert expected_response.error_events[0] == resources[0] + + assert len(channel.requests) == 1 + expected_request = error_stats_service_pb2.ListEventsRequest( + project_name=project_name, group_id=group_id) + actual_request = channel.requests[0][1] + assert expected_request == actual_request + + def test_list_events_exception(self): + channel = ChannelStub(responses=[CustomException()]) + client = errorreporting_v1beta1.ErrorStatsServiceClient( + channel=channel) + + # Setup request + project_name = client.project_path('[PROJECT]') + group_id = 'groupId506361563' + + paged_list_response = client.list_events(project_name, group_id) + with pytest.raises(CustomException): + list(paged_list_response) + + def test_delete_events(self): + # Setup Expected Response + expected_response = {} + expected_response = error_stats_service_pb2.DeleteEventsResponse( + **expected_response) + + # Mock the API response + channel = ChannelStub(responses=[expected_response]) + client = errorreporting_v1beta1.ErrorStatsServiceClient( + channel=channel) + + # Setup Request + project_name = client.project_path('[PROJECT]') + + response = client.delete_events(project_name) + assert expected_response == response + + assert len(channel.requests) == 1 + expected_request = error_stats_service_pb2.DeleteEventsRequest( + project_name=project_name) + actual_request = channel.requests[0][1] + assert expected_request == actual_request + + def test_delete_events_exception(self): + # Mock the API response + channel = ChannelStub(responses=[CustomException()]) + client = errorreporting_v1beta1.ErrorStatsServiceClient( + channel=channel) + + # Setup request + project_name = client.project_path('[PROJECT]') + + with pytest.raises(CustomException): + client.delete_events(project_name) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py new file mode 100644 index 000000000000..05232d979e61 --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py @@ -0,0 +1,97 @@ +# Copyright 2018 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 +# +# https://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. +"""Unit tests.""" + +import pytest + +from google.cloud import errorreporting_v1beta1 +from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 + + +class MultiCallableStub(object): + """Stub for the grpc.UnaryUnaryMultiCallable interface.""" + + def __init__(self, method, channel_stub): + self.method = method + self.channel_stub = channel_stub + + def __call__(self, request, timeout=None, metadata=None, credentials=None): + self.channel_stub.requests.append((self.method, request)) + + response = None + if self.channel_stub.responses: + response = self.channel_stub.responses.pop() + + if isinstance(response, Exception): + raise response + + if response: + return response + + +class ChannelStub(object): + """Stub for the grpc.Channel interface.""" + + def __init__(self, responses=[]): + self.responses = responses + self.requests = [] + + def unary_unary(self, + method, + request_serializer=None, + response_deserializer=None): + return MultiCallableStub(method, self) + + +class CustomException(Exception): + pass + + +class TestReportErrorsServiceClient(object): + def test_report_error_event(self): + # Setup Expected Response + expected_response = {} + expected_response = report_errors_service_pb2.ReportErrorEventResponse( + **expected_response) + + # Mock the API response + channel = ChannelStub(responses=[expected_response]) + client = errorreporting_v1beta1.ReportErrorsServiceClient( + channel=channel) + + # Setup Request + project_name = client.project_path('[PROJECT]') + event = {} + + response = client.report_error_event(project_name, event) + assert expected_response == response + + assert len(channel.requests) == 1 + expected_request = report_errors_service_pb2.ReportErrorEventRequest( + project_name=project_name, event=event) + actual_request = channel.requests[0][1] + assert expected_request == actual_request + + def test_report_error_event_exception(self): + # Mock the API response + channel = ChannelStub(responses=[CustomException()]) + client = errorreporting_v1beta1.ReportErrorsServiceClient( + channel=channel) + + # Setup request + project_name = client.project_path('[PROJECT]') + event = {} + + with pytest.raises(CustomException): + client.report_error_event(project_name, event) diff --git a/packages/google-cloud-error-reporting/tests/unit/test__gax.py b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py similarity index 61% rename from packages/google-cloud-error-reporting/tests/unit/test__gax.py rename to packages/google-cloud-error-reporting/tests/unit/test__gapic.py index 3d5b905d4bd6..2f41553dfb72 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__gax.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py @@ -20,13 +20,10 @@ class Test_make_report_error_api(unittest.TestCase): def test_make_report_error_api(self): - from google.cloud.gapic.errorreporting.v1beta1 import ( + from google.cloud.errorreporting_v1beta1.gapic import ( report_errors_service_client) - from grpc._channel import Channel - - from google.cloud.error_reporting import __version__ - from google.cloud.error_reporting._gax import make_report_error_api + from google.cloud.error_reporting._gapic import make_report_error_api client = mock.Mock( _credentials=mock.sentinel.credentials, @@ -46,47 +43,46 @@ def test_make_report_error_api(self): # to be correct. resc.assert_called_once() _, _, kwargs = resc.mock_calls[0] - self.assertIsInstance(kwargs['channel'], Channel) - self.assertEqual(kwargs['lib_name'], 'gccl') - self.assertEqual(kwargs['lib_version'], __version__) + self.assertEqual(kwargs['credentials'], mock.sentinel.credentials) + self.assertIsNotNone(kwargs['client_info']) # Assert that the final error client has the project in # the expected location. self.assertIs(report_error_client._project, client.project) -class Test_ErrorReportingGaxApi(unittest.TestCase): +class Test_ErrorReportingGapicApi(unittest.TestCase): PROJECT = 'PROJECT' - def _make_one(self, gax_api, project): - from google.cloud.error_reporting._gax import _ErrorReportingGaxApi + def _make_one(self, gapic_api, project): + from google.cloud.error_reporting._gapic import _ErrorReportingGapicApi - return _ErrorReportingGaxApi(gax_api, project) + return _ErrorReportingGapicApi(gapic_api, project) def test_constructor(self): - gax_api = mock.Mock(spec=[]) - gax_client_wrapper = self._make_one(gax_api, self.PROJECT) + gapic_api = mock.Mock(spec=[]) + gapic_client_wrapper = self._make_one(gapic_api, self.PROJECT) - self.assertEqual(gax_client_wrapper._project, self.PROJECT) - self.assertEqual(gax_client_wrapper._gax_api, gax_api) + self.assertEqual(gapic_client_wrapper._project, self.PROJECT) + self.assertEqual(gapic_client_wrapper._gapic_api, gapic_api) def test_report_error_event(self): - from google.cloud.proto.devtools.clouderrorreporting.v1beta1 import ( + from google.cloud.errorreporting_v1beta1.proto import ( report_errors_service_pb2) - gax_api = mock.Mock(spec=['project_path', 'report_error_event']) - gax_client_wrapper = self._make_one(gax_api, self.PROJECT) + gapic_api = mock.Mock(spec=['project_path', 'report_error_event']) + gapic_client_wrapper = self._make_one(gapic_api, self.PROJECT) error_report = { 'message': 'The cabs are here.', } - gax_client_wrapper.report_error_event(error_report) + gapic_client_wrapper.report_error_event(error_report) - gax_api.project_path.assert_called_once_with(self.PROJECT) - project_name = gax_api.project_path.return_value + gapic_api.project_path.assert_called_once_with(self.PROJECT) + project_name = gapic_api.project_path.return_value error_pb = report_errors_service_pb2.ReportedErrorEvent( message=error_report['message'], ) - gax_api.report_error_event.assert_called_once_with( + gapic_api.report_error_event.assert_called_once_with( project_name, error_pb) From 5ff9623fba2c4562d91eb7413852b60633ea3d21 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Tue, 16 Jan 2018 12:20:38 -0800 Subject: [PATCH 086/467] Release Error Reporting 0.29.0 (#4751) --- packages/google-cloud-error-reporting/CHANGELOG.md | 8 ++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 6a7e45abf98b..2a433b072f2d 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,14 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## 0.29.0 + +### Breaking changes + +- The underlying autogenerated client library was re-generated to pick up new + features and resolve bugs, this may change the exceptions raised from various + methods. (#4695) + ## 0.28.0 ### Documentation diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 6d6f3c3f8421..1884087afc58 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -58,7 +58,7 @@ setup( name='google-cloud-error-reporting', - version='0.28.1.dev1', + version='0.29.0', description='Python Client for Stackdriver Error Reporting', long_description=README, namespace_packages=[ From 9caa33b272fecf5a841fd0bf3a12be51c53c05ca Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Fri, 19 Jan 2018 13:32:41 -0800 Subject: [PATCH 087/467] Fix missing extra in api-core dependency (#4764) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 1884087afc58..fc0c113f7de7 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -52,7 +52,7 @@ REQUIREMENTS = [ 'google-cloud-core >= 0.28.0, < 0.29dev', - 'google-api-core >= 0.1.1, < 0.2.0dev', + 'google-api-core[grpc] >= 0.1.1, < 0.2.0dev', 'google-cloud-logging >= 1.4.0, < 1.5dev', ] From 47cb47d3ca1209147201f41147df3fa583a01221 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Thu, 22 Feb 2018 10:28:50 -0800 Subject: [PATCH 088/467] Normalize all setup.py files (#4909) --- .../google-cloud-error-reporting/setup.py | 99 +++++++++++-------- 1 file changed, 58 insertions(+), 41 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index fc0c113f7de7..3997a2cf3a2f 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -1,4 +1,4 @@ -# Copyright 2016 Google LLC +# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,60 +12,77 @@ # See the License for the specific language governing permissions and # limitations under the License. +import io import os -from setuptools import find_packages -from setuptools import setup +import setuptools -PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__)) +# Package metadata. + +name = 'google-cloud-error-reporting' +description = 'Stackdriver Error Reporting API client library' +version = '0.29.0' +# Should be one of: +# 'Development Status :: 3 - Alpha' +# 'Development Status :: 4 - Beta' +# 'Development Status :: 5 - Stable' +release_status = 'Development Status :: 3 - Alpha' +dependencies = [ + 'google-cloud-logging<1.5dev,>=1.4.0', +] +extras = { +} + + +# Setup boilerplate below this line. + +package_root = os.path.abspath(os.path.dirname(__file__)) + +readme_filename = os.path.join(package_root, 'README.rst') +with io.open(readme_filename, encoding='utf-8') as readme_file: + readme = readme_file.read() + +# Only include packages under the 'google' namespace. Do not include tests, +# benchmarks, etc. +packages = [ + package for package in setuptools.find_packages() + if package.startswith('google')] + +# Determine which namespaces are needed. +namespaces = ['google'] +if 'google.cloud' in packages: + namespaces.append('google.cloud') -with open(os.path.join(PACKAGE_ROOT, 'README.rst')) as file_obj: - README = file_obj.read() -# NOTE: This is duplicated throughout and we should try to -# consolidate. -SETUP_BASE = { - 'author': 'Google Cloud Platform', - 'author_email': 'googleapis-publisher@google.com', - 'scripts': [], - 'url': 'https://github.com/GoogleCloudPlatform/google-cloud-python', - 'license': 'Apache 2.0', - 'platforms': 'Posix; MacOS X; Windows', - 'include_package_data': True, - 'zip_safe': False, - 'classifiers': [ - 'Development Status :: 3 - Alpha', +setuptools.setup( + name=name, + version=version, + description=description, + long_description=readme, + author='Google LLC', + author_email='googleapis-packages@google.com', + license='Apache 2.0', + url='https://github.com/GoogleCloudPlatform/google-cloud-python', + classifiers=[ + release_status, 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', - 'Operating System :: OS Independent', + 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Operating System :: OS Independent', 'Topic :: Internet', ], -} - - -REQUIREMENTS = [ - 'google-cloud-core >= 0.28.0, < 0.29dev', - 'google-api-core[grpc] >= 0.1.1, < 0.2.0dev', - 'google-cloud-logging >= 1.4.0, < 1.5dev', -] - -setup( - name='google-cloud-error-reporting', - version='0.29.0', - description='Python Client for Stackdriver Error Reporting', - long_description=README, - namespace_packages=[ - 'google', - 'google.cloud', - ], - packages=find_packages(exclude=('tests*',)), - install_requires=REQUIREMENTS, - **SETUP_BASE + platforms='Posix; MacOS X; Windows', + packages=packages, + namespace_packages=namespaces, + install_requires=dependencies, + extras_require=extras, + include_package_data=True, + zip_safe=False, ) From 054860af3c92c0bcdea3206be1639a4b33dc8e24 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Fri, 23 Feb 2018 16:34:37 -0800 Subject: [PATCH 089/467] Re-enable lint for tests, remove usage of pylint (#4921) --- packages/google-cloud-error-reporting/.flake8 | 6 ++++++ .../google/cloud/errorreporting_v1beta1/__init__.py | 9 ++++++--- packages/google-cloud-error-reporting/nox.py | 11 ++--------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index 25168dc87605..1f44a90f8195 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -1,5 +1,11 @@ [flake8] exclude = + # Exclude generated code. + **/proto/** + **/gapic/** + *_pb2.py + + # Standard linting exemptions. __pycache__, .git, *.pyc, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 9b87d8f5e2ca..89c9fe7c639b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -16,9 +16,12 @@ from google.cloud.errorreporting_v1beta1 import types from google.cloud.errorreporting_v1beta1.gapic import enums -from google.cloud.errorreporting_v1beta1.gapic import error_group_service_client -from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client -from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client +from google.cloud.errorreporting_v1beta1.gapic import ( + error_group_service_client) +from google.cloud.errorreporting_v1beta1.gapic import ( + error_stats_service_client) +from google.cloud.errorreporting_v1beta1.gapic import ( + report_errors_service_client) class ErrorGroupServiceClient( diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index a21eaef31390..e9dbf82464a9 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -75,16 +75,9 @@ def lint(session): serious code quality issues. """ session.interpreter = 'python3.6' - session.install('flake8', 'pylint', 'gcp-devrel-py-tools', *LOCAL_DEPS) + session.install('flake8') session.install('.') - session.run('flake8', 'google/cloud/error_reporting') - session.run( - 'gcp-devrel-py-tools', 'run-pylint', - '--config', 'pylint.config.py', - '--library-filesets', 'google', - '--test-filesets', 'tests', - # Temporarily allow this to fail. - success_codes=range(0, 100)) + session.run('flake8', 'google', 'tests') @nox.session From 5e5289c665cb53dc526049798e315fbfa7865b7f Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Mon, 26 Feb 2018 14:24:04 -0800 Subject: [PATCH 090/467] Install local dependencies when running lint (#4936) --- packages/google-cloud-error-reporting/nox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index e9dbf82464a9..e03cc2ac29c6 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -75,7 +75,7 @@ def lint(session): serious code quality issues. """ session.interpreter = 'python3.6' - session.install('flake8') + session.install('flake8', *LOCAL_DEPS) session.install('.') session.run('flake8', 'google', 'tests') From 7f421dae778dfee73124089b2feb54b253ba62d9 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Wed, 28 Feb 2018 09:02:27 -0800 Subject: [PATCH 091/467] Release error_reporting 0.29.1 (#4958) --- packages/google-cloud-error-reporting/CHANGELOG.md | 13 +++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 2a433b072f2d..850fd44b4954 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,19 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## 0.29.1 + +### Dependencies + +- Update dependency range for api-core to include v1.0.0 releases (#4944) +- Fix missing extra in api-core dependency (#4764) + +### Testing and internal changes + +- Install local dependencies when running lint (#4936) +- Re-enable lint for tests, remove usage of pylint (#4921) +- Normalize all setup.py files (#4909) + ## 0.29.0 ### Breaking changes diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 3997a2cf3a2f..d9dc372a0530 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = 'google-cloud-error-reporting' description = 'Stackdriver Error Reporting API client library' -version = '0.29.0' +version = '0.29.1' # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 547ed3781cf2f8a27414aada8966e5a6d710d5a1 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Thu, 15 Mar 2018 08:52:22 -0700 Subject: [PATCH 092/467] Fix bad trove classifier --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index d9dc372a0530..fa76d5166238 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -26,7 +26,7 @@ # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' -# 'Development Status :: 5 - Stable' +# 'Development Status :: 5 - Production/Stable' release_status = 'Development Status :: 3 - Alpha' dependencies = [ 'google-cloud-logging<1.5dev,>=1.4.0', From c4365d79992cfc3611985b5c8dac5f153cbd877d Mon Sep 17 00:00:00 2001 From: Christopher Wilcox Date: Fri, 4 May 2018 09:01:24 -0700 Subject: [PATCH 093/467] Add Test runs for Python 3.7 and remove 3.4 (#5295) * remove 3.4 from unit test runs * add 3.7 to most packages. PubSub, Monitoring, BigQuery not enabled * Fix #5292 by draining queue in a way compatible with SimpleQueue and Queue --- packages/google-cloud-error-reporting/nox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index e03cc2ac29c6..c736b1676673 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -54,7 +54,7 @@ def default(session): @nox.session -@nox.parametrize('py', ['2.7', '3.4', '3.5', '3.6']) +@nox.parametrize('py', ['2.7', '3.5', '3.6', '3.7']) def unit(session, py): """Run the unit test suite.""" From c587f782f4199322ff14ba75351f59b995301c3c Mon Sep 17 00:00:00 2001 From: Christopher Wilcox Date: Wed, 16 May 2018 10:14:30 -0700 Subject: [PATCH 094/467] Modify system tests to use prerelease versions of grpcio (#5304) --- packages/google-cloud-error-reporting/nox.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index c736b1676673..e734e928392c 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -108,6 +108,9 @@ def system(session, py): # Set the virtualenv dirname. session.virtualenv_dirname = 'sys-' + py + # Use pre-release gRPC for system tests. + session.install('--pre', 'grpcio') + # Install all test dependencies, then install this package into the # virtualenv's dist-packages. session.install('mock', 'pytest', *LOCAL_DEPS) From 82009bf21736a539acd1cf4da3075b7a8aac64fc Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 18 May 2018 19:21:35 +0100 Subject: [PATCH 095/467] Make dependency on logging less restrictive in error_reporting (#5345) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index fa76d5166238..8fc1638fd35f 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = 'Development Status :: 3 - Alpha' dependencies = [ - 'google-cloud-logging<1.5dev,>=1.4.0', + 'google-cloud-logging>=1.4.0, <2.0dev', ] extras = { } From 04572b2a2a27f3b62192dafa8965c82d99da7fc9 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Tue, 22 May 2018 16:03:07 -0400 Subject: [PATCH 096/467] Avoid overwriting '__module__' of messages from shared modules. (#5364) Note that we *are* still overwriting it for messages from modules defined within the current package. See #4715. --- .../cloud/errorreporting_v1beta1/types.py | 46 ++++++++++++------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py index 978d281752d1..0c54b22b5856 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py @@ -15,32 +15,44 @@ from __future__ import absolute_import import sys -from google.api_core.protobuf_helpers import get_messages - from google.api import http_pb2 from google.api import label_pb2 from google.api import monitored_resource_pb2 +from google.protobuf import descriptor_pb2 +from google.protobuf import duration_pb2 +from google.protobuf import timestamp_pb2 + +from google.api_core.protobuf_helpers import get_messages from google.cloud.errorreporting_v1beta1.proto import common_pb2 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 -from google.protobuf import descriptor_pb2 -from google.protobuf import duration_pb2 -from google.protobuf import timestamp_pb2 + + +_shared_modules = [ + http_pb2, + label_pb2, + monitored_resource_pb2, + report_errors_service_pb2, + descriptor_pb2, + duration_pb2, + timestamp_pb2, +] + +_local_modules = [ + common_pb2, + error_group_service_pb2, + error_stats_service_pb2, +] names = [] -for module in ( - http_pb2, - label_pb2, - monitored_resource_pb2, - common_pb2, - error_group_service_pb2, - error_stats_service_pb2, - report_errors_service_pb2, - descriptor_pb2, - duration_pb2, - timestamp_pb2, -): + +for module in _shared_modules: + for name, message in get_messages(module).items(): + setattr(sys.modules[__name__], name, message) + names.append(name) + +for module in _local_modules: for name, message in get_messages(module).items(): message.__module__ = 'google.cloud.errorreporting_v1beta1.types' setattr(sys.modules[__name__], name, message) From 6b2be70ca33ad1700b9917b41e0eada1ae68a46e Mon Sep 17 00:00:00 2001 From: Christopher Wilcox Date: Tue, 22 May 2018 15:46:45 -0700 Subject: [PATCH 097/467] Release 0.30.0 (#5356) --- packages/google-cloud-error-reporting/CHANGELOG.md | 10 ++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 850fd44b4954..dd7d42e26068 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,16 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## 0.30.0 + +### Implementation Changes +- Make dependency on logging less restrictive in error_reporting (#5345) + +### Internal / Testing Changes +- Modify system tests to use prerelease versions of grpcio (#5304) +- Add Test runs for Python 3.7 and remove 3.4 (#5295) +- Fix bad trove classifier + ## 0.29.1 ### Dependencies diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 8fc1638fd35f..1fe16f1286d2 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = 'google-cloud-error-reporting' description = 'Stackdriver Error Reporting API client library' -version = '0.29.1' +version = '0.30.0' # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From c3afe2fca77641e34ea6f2a3a2fed38f6a116b26 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Thu, 30 Aug 2018 11:50:23 -0400 Subject: [PATCH 098/467] Nox: use inplace installs (#5865) --- packages/google-cloud-error-reporting/nox.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/nox.py index e734e928392c..f968977ece32 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/nox.py @@ -35,8 +35,10 @@ def default(session): Python corresponding to the ``nox`` binary the ``PATH`` can run the tests. """ - # Install all test dependencies, then install this package in-place. - session.install('mock', 'pytest', 'pytest-cov', *LOCAL_DEPS) + # Install all test dependencies, then install local packages in-place. + session.install('mock', 'pytest', 'pytest-cov') + for local_dep in LOCAL_DEPS: + session.install('-e', local_dep) session.install('-e', '.') # Run py.test against the unit tests. @@ -111,11 +113,12 @@ def system(session, py): # Use pre-release gRPC for system tests. session.install('--pre', 'grpcio') - # Install all test dependencies, then install this package into the - # virtualenv's dist-packages. - session.install('mock', 'pytest', *LOCAL_DEPS) - session.install('../test_utils/') - session.install('.') + # Install all test dependencies, then install local packages in-place. + session.install('mock', 'pytest') + for local_dep in LOCAL_DEPS: + session.install('-e', local_dep) + session.install('-e', '../test_utils/') + session.install('-e', '.') # Run py.test against the system tests. session.run('py.test', '-vvv', 'tests/system', *session.posargs) From 637229d39f50ee30fb69426507fe85be7361ef4d Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Mon, 10 Sep 2018 15:55:01 -0400 Subject: [PATCH 099/467] Docs: Replace links to '/stable/' with '/latest/'. (#5901) * Replace links to '/stable/' with '/latest/'. * DRY out duplicated 'README.rst' vs. 'docs/index.rst'. * Include websecurityscanner in docs. Toward #5894. --- packages/google-cloud-error-reporting/docs/index.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/docs/index.rst b/packages/google-cloud-error-reporting/docs/index.rst index 56a8a6cc6f81..2493c0a3b5d3 100644 --- a/packages/google-cloud-error-reporting/docs/index.rst +++ b/packages/google-cloud-error-reporting/docs/index.rst @@ -9,7 +9,7 @@ Stackdriver Error Reporting groups and counts similar errors from cloud services .. _Alpha: https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/README.rst .. _Stackdriver Error Reporting API: https://cloud.google.com/error-reporting -.. _Client Library Documentation: https://googlecloudplatform.github.io/google-cloud-python/stable/error-reporting/usage.html +.. _Client Library Documentation: https://googlecloudplatform.github.io/google-cloud-python/latest/error-reporting/usage.html .. _Product Documentation: https://cloud.google.com/error-reporting Quick Start @@ -25,7 +25,7 @@ In order to use this library, you first need to go through the following steps: .. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project .. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project .. _Enable the Stackdriver Error Reporting API.: https://cloud.google.com/error-reporting -.. _Setup Authentication.: https://googlecloudplatform.github.io/google-cloud-python/stable/core/auth.html +.. _Setup Authentication.: https://googlecloudplatform.github.io/google-cloud-python/latest/core/auth.html Installation ~~~~~~~~~~~~ @@ -98,4 +98,4 @@ Api Reference :maxdepth: 2 gapic/v1beta1/api - gapic/v1beta1/types \ No newline at end of file + gapic/v1beta1/types From a7194778be3406dbd45554fdbc687fc25b74dee9 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Tue, 25 Sep 2018 14:02:58 -0400 Subject: [PATCH 100/467] Error_reporting: add 'synth.py'. (#6082) Closes #6069. --- .../errorreporting_v1beta1/gapic/enums.py | 10 +- .../gapic/error_group_service_client.py | 157 ++++++--- .../gapic/error_stats_service_client.py | 195 +++++++---- .../gapic/report_errors_service_client.py | 140 +++++--- .../gapic/transports/__init__.py | 0 .../error_group_service_grpc_transport.py | 120 +++++++ .../error_stats_service_grpc_transport.py | 132 ++++++++ .../report_errors_service_grpc_transport.py | 113 +++++++ .../proto/common_pb2.py | 58 ++-- .../proto/error_group_service_pb2.py | 189 ++--------- .../proto/error_group_service_pb2_grpc.py | 4 +- .../proto/error_stats_service_pb2.py | 305 +++++------------- .../proto/error_stats_service_pb2_grpc.py | 2 +- .../proto/report_errors_service_pb2.py | 174 ++-------- .../proto/report_errors_service_pb2_grpc.py | 2 +- .../google-cloud-error-reporting/synth.py | 40 +++ 16 files changed, 918 insertions(+), 723 deletions(-) create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py create mode 100644 packages/google-cloud-error-reporting/synth.py diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py index 17cab7fbb541..18a25e9bfcb3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- +# # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,8 +15,10 @@ # limitations under the License. """Wrappers for protocol buffer enum types.""" +import enum + -class TimedCountAlignment(object): +class TimedCountAlignment(enum.IntEnum): """ Specifies how the time periods of error group counts are aligned. @@ -38,7 +42,7 @@ class TimedCountAlignment(object): ALIGNMENT_EQUAL_AT_END = 2 -class ErrorGroupOrder(object): +class ErrorGroupOrder(enum.IntEnum): """ A sorting order of error groups. @@ -58,7 +62,7 @@ class ErrorGroupOrder(object): class QueryTimeRange(object): - class Period(object): + class Period(enum.IntEnum): """ The supported time ranges. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py index d82d1d1a6a0b..cc7732d8d62e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- +# # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,17 +16,22 @@ """Accesses the google.devtools.clouderrorreporting.v1beta1 ErrorGroupService API.""" import pkg_resources +import warnings +from google.oauth2 import service_account import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method import google.api_core.grpc_helpers import google.api_core.path_template +import grpc from google.cloud.errorreporting_v1beta1.gapic import enums from google.cloud.errorreporting_v1beta1.gapic import error_group_service_client_config +from google.cloud.errorreporting_v1beta1.gapic.transports import error_group_service_grpc_transport from google.cloud.errorreporting_v1beta1.proto import common_pb2 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( 'google-cloud-error-reporting', ).version @@ -36,14 +43,31 @@ class ErrorGroupServiceClient(object): SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443' """The default address of the service.""" - # The scopes needed to make gRPC calls to all of the methods defined in - # this service - _DEFAULT_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) - - # The name of the interface for this client. This is the key used to find - # method configuration in the client_config dictionary. + # The name of the interface for this client. This is the key used to + # find the method configuration in the client_config dictionary. _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService' + @classmethod + def from_service_account_file(cls, filename, *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: + ErrorGroupServiceClient: 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 + @classmethod def group_path(cls, project, group): """Return a fully-qualified group string.""" @@ -54,6 +78,7 @@ def group_path(cls, project, group): ) def __init__(self, + transport=None, channel=None, credentials=None, client_config=error_group_service_client_config.config, @@ -61,69 +86,83 @@ def __init__(self, """Constructor. Args: - channel (grpc.Channel): A ``Channel`` instance through - which to make calls. This argument is mutually exclusive + transport (Union[~.ErrorGroupServiceGrpcTransport, + Callable[[~.Credentials, type], ~.ErrorGroupServiceGrpcTransport]): A transport + instance, responsible for actually making the API calls. + The default transport uses the gRPC protocol. + This argument may also be a callable which returns a + transport instance. Callables will be sent the credentials + as the first argument and the default transport class as + the second argument. + channel (grpc.Channel): DEPRECATED. A ``Channel`` instance + through which to make calls. This argument is mutually exclusive with ``credentials``; providing both will raise an exception. credentials (google.auth.credentials.Credentials): The authorization credentials to attach to requests. These credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - client_config (dict): A dictionary of call options for each - method. If not specified, the default configuration is used. + This argument is mutually exclusive with providing a + transport instance to ``transport``; doing so will raise + an exception. + client_config (dict): DEPRECATED. A dictionary of call options for + each method. If not specified, the default configuration is used. 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. """ - # If both `channel` and `credentials` are specified, raise an - # exception (channels come with credentials baked in already). - if channel is not None and credentials is not None: - raise ValueError( - 'The `channel` and `credentials` arguments to {} are mutually ' - 'exclusive.'.format(self.__class__.__name__), ) - - # Create the channel. - if channel is None: - channel = google.api_core.grpc_helpers.create_channel( - self.SERVICE_ADDRESS, + # Raise deprecation warnings for things we want to go away. + if client_config: + warnings.warn('The `client_config` argument is deprecated.', + PendingDeprecationWarning) + if channel: + warnings.warn( + 'The `channel` argument is deprecated; use ' + '`transport` instead.', PendingDeprecationWarning) + + # Instantiate the transport. + # The transport is responsible for handling serialization and + # deserialization and actually sending data to the service. + if transport: + if callable(transport): + self.transport = transport( + credentials=credentials, + default_class=error_group_service_grpc_transport. + ErrorGroupServiceGrpcTransport, + ) + else: + if credentials: + raise ValueError( + 'Received both a transport instance and ' + 'credentials; these are mutually exclusive.') + self.transport = transport + else: + self.transport = error_group_service_grpc_transport.ErrorGroupServiceGrpcTransport( + address=self.SERVICE_ADDRESS, + channel=channel, credentials=credentials, - scopes=self._DEFAULT_SCOPES, ) - # Create the gRPC stubs. - self.error_group_service_stub = ( - error_group_service_pb2.ErrorGroupServiceStub(channel)) - if client_info is None: client_info = ( google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) client_info.gapic_version = _GAPIC_LIBRARY_VERSION + self._client_info = client_info # Parse out the default settings for retry and timeout for each RPC # from the client configuration. # (Ordinarily, these are the defaults specified in the `*_config.py` # file next to this one.) - method_configs = google.api_core.gapic_v1.config.parse_method_configs( + self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( client_config['interfaces'][self._INTERFACE_NAME], ) - # Write the "inner API call" methods to the class. - # These are wrapped versions of the gRPC stub methods, with retry and - # timeout configuration applied, called by the public methods on - # this class. - self._get_group = google.api_core.gapic_v1.method.wrap_method( - self.error_group_service_stub.GetGroup, - default_retry=method_configs['GetGroup'].retry, - default_timeout=method_configs['GetGroup'].timeout, - client_info=client_info, - ) - self._update_group = google.api_core.gapic_v1.method.wrap_method( - self.error_group_service_stub.UpdateGroup, - default_retry=method_configs['UpdateGroup'].retry, - default_timeout=method_configs['UpdateGroup'].timeout, - client_info=client_info, - ) + # Save a dictionary of cached API call functions. + # These are the actual callables which invoke the proper + # transport methods, wrapped with `wrap_method` to add retry, + # timeout, and the like. + self._inner_api_calls = {} # Service calls def get_group(self, @@ -171,12 +210,19 @@ def get_group(self, to a retryable error and retry attempts failed. ValueError: If the parameters are invalid. """ - if metadata is None: - metadata = [] - metadata = list(metadata) + # Wrap the transport method to add retry and timeout logic. + if 'get_group' not in self._inner_api_calls: + self._inner_api_calls[ + 'get_group'] = google.api_core.gapic_v1.method.wrap_method( + self.transport.get_group, + default_retry=self._method_configs['GetGroup'].retry, + default_timeout=self._method_configs['GetGroup'].timeout, + client_info=self._client_info, + ) + request = error_group_service_pb2.GetGroupRequest( group_name=group_name, ) - return self._get_group( + return self._inner_api_calls['get_group']( request, retry=retry, timeout=timeout, metadata=metadata) def update_group(self, @@ -193,6 +239,7 @@ def update_group(self, >>> >>> client = errorreporting_v1beta1.ErrorGroupServiceClient() >>> + >>> # TODO: Initialize ``group``: >>> group = {} >>> >>> response = client.update_group(group) @@ -220,9 +267,17 @@ def update_group(self, to a retryable error and retry attempts failed. ValueError: If the parameters are invalid. """ - if metadata is None: - metadata = [] - metadata = list(metadata) + # Wrap the transport method to add retry and timeout logic. + if 'update_group' not in self._inner_api_calls: + self._inner_api_calls[ + 'update_group'] = google.api_core.gapic_v1.method.wrap_method( + self.transport.update_group, + default_retry=self._method_configs['UpdateGroup'].retry, + default_timeout=self._method_configs['UpdateGroup']. + timeout, + client_info=self._client_info, + ) + request = error_group_service_pb2.UpdateGroupRequest(group=group, ) - return self._update_group( + return self._inner_api_calls['update_group']( request, retry=retry, timeout=timeout, metadata=metadata) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py index 23015b86391f..fb6786fe89fa 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- +# # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,19 +17,25 @@ import functools import pkg_resources +import warnings +from google.oauth2 import service_account import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method import google.api_core.grpc_helpers import google.api_core.page_iterator import google.api_core.path_template +import grpc from google.cloud.errorreporting_v1beta1.gapic import enums from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client_config +from google.cloud.errorreporting_v1beta1.gapic.transports import error_stats_service_grpc_transport from google.cloud.errorreporting_v1beta1.proto import common_pb2 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2_grpc from google.protobuf import duration_pb2 from google.protobuf import timestamp_pb2 @@ -44,14 +52,31 @@ class ErrorStatsServiceClient(object): SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443' """The default address of the service.""" - # The scopes needed to make gRPC calls to all of the methods defined in - # this service - _DEFAULT_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) - - # The name of the interface for this client. This is the key used to find - # method configuration in the client_config dictionary. + # The name of the interface for this client. This is the key used to + # find the method configuration in the client_config dictionary. _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService' + @classmethod + def from_service_account_file(cls, filename, *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: + ErrorStatsServiceClient: 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 + @classmethod def project_path(cls, project): """Return a fully-qualified project string.""" @@ -61,6 +86,7 @@ def project_path(cls, project): ) def __init__(self, + transport=None, channel=None, credentials=None, client_config=error_stats_service_client_config.config, @@ -68,75 +94,83 @@ def __init__(self, """Constructor. Args: - channel (grpc.Channel): A ``Channel`` instance through - which to make calls. This argument is mutually exclusive + transport (Union[~.ErrorStatsServiceGrpcTransport, + Callable[[~.Credentials, type], ~.ErrorStatsServiceGrpcTransport]): A transport + instance, responsible for actually making the API calls. + The default transport uses the gRPC protocol. + This argument may also be a callable which returns a + transport instance. Callables will be sent the credentials + as the first argument and the default transport class as + the second argument. + channel (grpc.Channel): DEPRECATED. A ``Channel`` instance + through which to make calls. This argument is mutually exclusive with ``credentials``; providing both will raise an exception. credentials (google.auth.credentials.Credentials): The authorization credentials to attach to requests. These credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - client_config (dict): A dictionary of call options for each - method. If not specified, the default configuration is used. + This argument is mutually exclusive with providing a + transport instance to ``transport``; doing so will raise + an exception. + client_config (dict): DEPRECATED. A dictionary of call options for + each method. If not specified, the default configuration is used. 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. """ - # If both `channel` and `credentials` are specified, raise an - # exception (channels come with credentials baked in already). - if channel is not None and credentials is not None: - raise ValueError( - 'The `channel` and `credentials` arguments to {} are mutually ' - 'exclusive.'.format(self.__class__.__name__), ) - - # Create the channel. - if channel is None: - channel = google.api_core.grpc_helpers.create_channel( - self.SERVICE_ADDRESS, + # Raise deprecation warnings for things we want to go away. + if client_config: + warnings.warn('The `client_config` argument is deprecated.', + PendingDeprecationWarning) + if channel: + warnings.warn( + 'The `channel` argument is deprecated; use ' + '`transport` instead.', PendingDeprecationWarning) + + # Instantiate the transport. + # The transport is responsible for handling serialization and + # deserialization and actually sending data to the service. + if transport: + if callable(transport): + self.transport = transport( + credentials=credentials, + default_class=error_stats_service_grpc_transport. + ErrorStatsServiceGrpcTransport, + ) + else: + if credentials: + raise ValueError( + 'Received both a transport instance and ' + 'credentials; these are mutually exclusive.') + self.transport = transport + else: + self.transport = error_stats_service_grpc_transport.ErrorStatsServiceGrpcTransport( + address=self.SERVICE_ADDRESS, + channel=channel, credentials=credentials, - scopes=self._DEFAULT_SCOPES, ) - # Create the gRPC stubs. - self.error_stats_service_stub = ( - error_stats_service_pb2.ErrorStatsServiceStub(channel)) - if client_info is None: client_info = ( google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) client_info.gapic_version = _GAPIC_LIBRARY_VERSION + self._client_info = client_info # Parse out the default settings for retry and timeout for each RPC # from the client configuration. # (Ordinarily, these are the defaults specified in the `*_config.py` # file next to this one.) - method_configs = google.api_core.gapic_v1.config.parse_method_configs( + self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( client_config['interfaces'][self._INTERFACE_NAME], ) - # Write the "inner API call" methods to the class. - # These are wrapped versions of the gRPC stub methods, with retry and - # timeout configuration applied, called by the public methods on - # this class. - self._list_group_stats = google.api_core.gapic_v1.method.wrap_method( - self.error_stats_service_stub.ListGroupStats, - default_retry=method_configs['ListGroupStats'].retry, - default_timeout=method_configs['ListGroupStats'].timeout, - client_info=client_info, - ) - self._list_events = google.api_core.gapic_v1.method.wrap_method( - self.error_stats_service_stub.ListEvents, - default_retry=method_configs['ListEvents'].retry, - default_timeout=method_configs['ListEvents'].timeout, - client_info=client_info, - ) - self._delete_events = google.api_core.gapic_v1.method.wrap_method( - self.error_stats_service_stub.DeleteEvents, - default_retry=method_configs['DeleteEvents'].retry, - default_timeout=method_configs['DeleteEvents'].timeout, - client_info=client_info, - ) + # Save a dictionary of cached API call functions. + # These are the actual callables which invoke the proper + # transport methods, wrapped with `wrap_method` to add retry, + # timeout, and the like. + self._inner_api_calls = {} # Service calls def list_group_stats(self, @@ -161,15 +195,19 @@ def list_group_stats(self, >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() >>> >>> project_name = client.project_path('[PROJECT]') - >>> time_range = {} >>> + >>> # TODO: Initialize ``time_range``: + >>> time_range = {} >>> >>> # Iterate over all results >>> for element in client.list_group_stats(project_name, time_range): ... # process element ... pass >>> - >>> # Or iterate over results one page at a time + >>> + >>> # Alternatively: + >>> + >>> # Iterate over results one page at a time >>> for page in client.list_group_stats(project_name, time_range, options=CallOptions(page_token=INITIAL_PAGE)): ... for element in page: ... # process element @@ -236,9 +274,17 @@ def list_group_stats(self, to a retryable error and retry attempts failed. ValueError: If the parameters are invalid. """ - if metadata is None: - metadata = [] - metadata = list(metadata) + # Wrap the transport method to add retry and timeout logic. + if 'list_group_stats' not in self._inner_api_calls: + self._inner_api_calls[ + 'list_group_stats'] = google.api_core.gapic_v1.method.wrap_method( + self.transport.list_group_stats, + default_retry=self._method_configs['ListGroupStats'].retry, + default_timeout=self._method_configs['ListGroupStats']. + timeout, + client_info=self._client_info, + ) + request = error_stats_service_pb2.ListGroupStatsRequest( project_name=project_name, time_range=time_range, @@ -253,7 +299,7 @@ def list_group_stats(self, iterator = google.api_core.page_iterator.GRPCIterator( client=None, method=functools.partial( - self._list_group_stats, + self._inner_api_calls['list_group_stats'], retry=retry, timeout=timeout, metadata=metadata), @@ -282,15 +328,19 @@ def list_events(self, >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() >>> >>> project_name = client.project_path('[PROJECT]') - >>> group_id = '' >>> + >>> # TODO: Initialize ``group_id``: + >>> group_id = '' >>> >>> # Iterate over all results >>> for element in client.list_events(project_name, group_id): ... # process element ... pass >>> - >>> # Or iterate over results one page at a time + >>> + >>> # Alternatively: + >>> + >>> # Iterate over results one page at a time >>> for page in client.list_events(project_name, group_id, options=CallOptions(page_token=INITIAL_PAGE)): ... for element in page: ... # process element @@ -340,9 +390,16 @@ def list_events(self, to a retryable error and retry attempts failed. ValueError: If the parameters are invalid. """ - if metadata is None: - metadata = [] - metadata = list(metadata) + # Wrap the transport method to add retry and timeout logic. + if 'list_events' not in self._inner_api_calls: + self._inner_api_calls[ + 'list_events'] = google.api_core.gapic_v1.method.wrap_method( + self.transport.list_events, + default_retry=self._method_configs['ListEvents'].retry, + default_timeout=self._method_configs['ListEvents'].timeout, + client_info=self._client_info, + ) + request = error_stats_service_pb2.ListEventsRequest( project_name=project_name, group_id=group_id, @@ -353,7 +410,7 @@ def list_events(self, iterator = google.api_core.page_iterator.GRPCIterator( client=None, method=functools.partial( - self._list_events, + self._inner_api_calls['list_events'], retry=retry, timeout=timeout, metadata=metadata), @@ -406,10 +463,18 @@ def delete_events(self, to a retryable error and retry attempts failed. ValueError: If the parameters are invalid. """ - if metadata is None: - metadata = [] - metadata = list(metadata) + # Wrap the transport method to add retry and timeout logic. + if 'delete_events' not in self._inner_api_calls: + self._inner_api_calls[ + 'delete_events'] = google.api_core.gapic_v1.method.wrap_method( + self.transport.delete_events, + default_retry=self._method_configs['DeleteEvents'].retry, + default_timeout=self._method_configs['DeleteEvents']. + timeout, + client_info=self._client_info, + ) + request = error_stats_service_pb2.DeleteEventsRequest( project_name=project_name, ) - return self._delete_events( + return self._inner_api_calls['delete_events']( request, retry=retry, timeout=timeout, metadata=metadata) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index 04e787c81c25..3c81e793792a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- +# # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,19 +16,26 @@ """Accesses the google.devtools.clouderrorreporting.v1beta1 ReportErrorsService API.""" import pkg_resources +import warnings +from google.oauth2 import service_account import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method import google.api_core.grpc_helpers import google.api_core.path_template +import grpc from google.cloud.errorreporting_v1beta1.gapic import enums from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client_config +from google.cloud.errorreporting_v1beta1.gapic.transports import report_errors_service_grpc_transport from google.cloud.errorreporting_v1beta1.proto import common_pb2 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2_grpc from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 +from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2_grpc from google.protobuf import duration_pb2 from google.protobuf import timestamp_pb2 @@ -40,14 +49,31 @@ class ReportErrorsServiceClient(object): SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443' """The default address of the service.""" - # The scopes needed to make gRPC calls to all of the methods defined in - # this service - _DEFAULT_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) - - # The name of the interface for this client. This is the key used to find - # method configuration in the client_config dictionary. + # The name of the interface for this client. This is the key used to + # find the method configuration in the client_config dictionary. _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService' + @classmethod + def from_service_account_file(cls, filename, *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: + ReportErrorsServiceClient: 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 + @classmethod def project_path(cls, project): """Return a fully-qualified project string.""" @@ -57,6 +83,7 @@ def project_path(cls, project): ) def __init__(self, + transport=None, channel=None, credentials=None, client_config=report_errors_service_client_config.config, @@ -64,63 +91,83 @@ def __init__(self, """Constructor. Args: - channel (grpc.Channel): A ``Channel`` instance through - which to make calls. This argument is mutually exclusive + transport (Union[~.ReportErrorsServiceGrpcTransport, + Callable[[~.Credentials, type], ~.ReportErrorsServiceGrpcTransport]): A transport + instance, responsible for actually making the API calls. + The default transport uses the gRPC protocol. + This argument may also be a callable which returns a + transport instance. Callables will be sent the credentials + as the first argument and the default transport class as + the second argument. + channel (grpc.Channel): DEPRECATED. A ``Channel`` instance + through which to make calls. This argument is mutually exclusive with ``credentials``; providing both will raise an exception. credentials (google.auth.credentials.Credentials): The authorization credentials to attach to requests. These credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - client_config (dict): A dictionary of call options for each - method. If not specified, the default configuration is used. + This argument is mutually exclusive with providing a + transport instance to ``transport``; doing so will raise + an exception. + client_config (dict): DEPRECATED. A dictionary of call options for + each method. If not specified, the default configuration is used. 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. """ - # If both `channel` and `credentials` are specified, raise an - # exception (channels come with credentials baked in already). - if channel is not None and credentials is not None: - raise ValueError( - 'The `channel` and `credentials` arguments to {} are mutually ' - 'exclusive.'.format(self.__class__.__name__), ) - - # Create the channel. - if channel is None: - channel = google.api_core.grpc_helpers.create_channel( - self.SERVICE_ADDRESS, + # Raise deprecation warnings for things we want to go away. + if client_config: + warnings.warn('The `client_config` argument is deprecated.', + PendingDeprecationWarning) + if channel: + warnings.warn( + 'The `channel` argument is deprecated; use ' + '`transport` instead.', PendingDeprecationWarning) + + # Instantiate the transport. + # The transport is responsible for handling serialization and + # deserialization and actually sending data to the service. + if transport: + if callable(transport): + self.transport = transport( + credentials=credentials, + default_class=report_errors_service_grpc_transport. + ReportErrorsServiceGrpcTransport, + ) + else: + if credentials: + raise ValueError( + 'Received both a transport instance and ' + 'credentials; these are mutually exclusive.') + self.transport = transport + else: + self.transport = report_errors_service_grpc_transport.ReportErrorsServiceGrpcTransport( + address=self.SERVICE_ADDRESS, + channel=channel, credentials=credentials, - scopes=self._DEFAULT_SCOPES, ) - # Create the gRPC stubs. - self.report_errors_service_stub = ( - report_errors_service_pb2.ReportErrorsServiceStub(channel)) - if client_info is None: client_info = ( google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) client_info.gapic_version = _GAPIC_LIBRARY_VERSION + self._client_info = client_info # Parse out the default settings for retry and timeout for each RPC # from the client configuration. # (Ordinarily, these are the defaults specified in the `*_config.py` # file next to this one.) - method_configs = google.api_core.gapic_v1.config.parse_method_configs( + self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( client_config['interfaces'][self._INTERFACE_NAME], ) - # Write the "inner API call" methods to the class. - # These are wrapped versions of the gRPC stub methods, with retry and - # timeout configuration applied, called by the public methods on - # this class. - self._report_error_event = google.api_core.gapic_v1.method.wrap_method( - self.report_errors_service_stub.ReportErrorEvent, - default_retry=method_configs['ReportErrorEvent'].retry, - default_timeout=method_configs['ReportErrorEvent'].timeout, - client_info=client_info, - ) + # Save a dictionary of cached API call functions. + # These are the actual callables which invoke the proper + # transport methods, wrapped with `wrap_method` to add retry, + # timeout, and the like. + self._inner_api_calls = {} # Service calls def report_error_event(self, @@ -145,6 +192,8 @@ def report_error_event(self, >>> client = errorreporting_v1beta1.ReportErrorsServiceClient() >>> >>> project_name = client.project_path('[PROJECT]') + >>> + >>> # TODO: Initialize ``event``: >>> event = {} >>> >>> response = client.report_error_event(project_name, event) @@ -176,12 +225,21 @@ def report_error_event(self, to a retryable error and retry attempts failed. ValueError: If the parameters are invalid. """ - if metadata is None: - metadata = [] - metadata = list(metadata) + # Wrap the transport method to add retry and timeout logic. + if 'report_error_event' not in self._inner_api_calls: + self._inner_api_calls[ + 'report_error_event'] = google.api_core.gapic_v1.method.wrap_method( + self.transport.report_error_event, + default_retry=self._method_configs['ReportErrorEvent']. + retry, + default_timeout=self._method_configs['ReportErrorEvent']. + timeout, + client_info=self._client_info, + ) + request = report_errors_service_pb2.ReportErrorEventRequest( project_name=project_name, event=event, ) - return self._report_error_event( + return self._inner_api_calls['report_error_event']( request, retry=retry, timeout=timeout, metadata=metadata) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py new file mode 100644 index 000000000000..95d83d1097af --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2018 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 +# +# https://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 google.api_core.grpc_helpers + +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc + + +class ErrorGroupServiceGrpcTransport(object): + """gRPC transport class providing stubs for + google.devtools.clouderrorreporting.v1beta1 ErrorGroupService API. + + The transport provides access to the raw gRPC stubs, + which can be used to take advantage of advanced + features of gRPC. + """ + # The scopes needed to make gRPC calls to all of the methods defined + # in this service. + _OAUTH_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) + + def __init__(self, + channel=None, + credentials=None, + address='clouderrorreporting.googleapis.com:443'): + """Instantiate the transport class. + + Args: + channel (grpc.Channel): A ``Channel`` instance through + which to make calls. This argument is mutually exclusive + with ``credentials``; providing both will raise an exception. + credentials (google.auth.credentials.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If none + are specified, the client will attempt to ascertain the + credentials from the environment. + address (str): The address where the service is hosted. + """ + # If both `channel` and `credentials` are specified, raise an + # exception (channels come with credentials baked in already). + if channel is not None and credentials is not None: + raise ValueError( + 'The `channel` and `credentials` arguments are mutually ' + 'exclusive.', ) + + # Create the channel. + if channel is None: + channel = self.create_channel( + address=address, + credentials=credentials, + ) + + # gRPC uses objects called "stubs" that are bound to the + # channel and provide a basic method for each RPC. + self._stubs = { + 'error_group_service_stub': + error_group_service_pb2_grpc.ErrorGroupServiceStub(channel), + } + + @classmethod + def create_channel(cls, + address='clouderrorreporting.googleapis.com:443', + credentials=None): + """Create and return a gRPC channel object. + + Args: + address (str): The host for the channel to use. + credentials (~.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + + Returns: + grpc.Channel: A gRPC channel object. + """ + return google.api_core.grpc_helpers.create_channel( + address, + credentials=credentials, + scopes=cls._OAUTH_SCOPES, + ) + + @property + def get_group(self): + """Return the gRPC stub for {$apiMethod.name}. + + Get the specified group. + + Returns: + Callable: A callable which accepts the appropriate + deserialized request object and returns a + deserialized response object. + """ + return self._stubs['error_group_service_stub'].GetGroup + + @property + def update_group(self): + """Return the gRPC stub for {$apiMethod.name}. + + Replace the data for the specified group. + Fails if the group does not exist. + + Returns: + Callable: A callable which accepts the appropriate + deserialized request object and returns a + deserialized response object. + """ + return self._stubs['error_group_service_stub'].UpdateGroup diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py new file mode 100644 index 000000000000..74bf117d8542 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2018 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 +# +# https://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 google.api_core.grpc_helpers + +from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2_grpc + + +class ErrorStatsServiceGrpcTransport(object): + """gRPC transport class providing stubs for + google.devtools.clouderrorreporting.v1beta1 ErrorStatsService API. + + The transport provides access to the raw gRPC stubs, + which can be used to take advantage of advanced + features of gRPC. + """ + # The scopes needed to make gRPC calls to all of the methods defined + # in this service. + _OAUTH_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) + + def __init__(self, + channel=None, + credentials=None, + address='clouderrorreporting.googleapis.com:443'): + """Instantiate the transport class. + + Args: + channel (grpc.Channel): A ``Channel`` instance through + which to make calls. This argument is mutually exclusive + with ``credentials``; providing both will raise an exception. + credentials (google.auth.credentials.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If none + are specified, the client will attempt to ascertain the + credentials from the environment. + address (str): The address where the service is hosted. + """ + # If both `channel` and `credentials` are specified, raise an + # exception (channels come with credentials baked in already). + if channel is not None and credentials is not None: + raise ValueError( + 'The `channel` and `credentials` arguments are mutually ' + 'exclusive.', ) + + # Create the channel. + if channel is None: + channel = self.create_channel( + address=address, + credentials=credentials, + ) + + # gRPC uses objects called "stubs" that are bound to the + # channel and provide a basic method for each RPC. + self._stubs = { + 'error_stats_service_stub': + error_stats_service_pb2_grpc.ErrorStatsServiceStub(channel), + } + + @classmethod + def create_channel(cls, + address='clouderrorreporting.googleapis.com:443', + credentials=None): + """Create and return a gRPC channel object. + + Args: + address (str): The host for the channel to use. + credentials (~.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + + Returns: + grpc.Channel: A gRPC channel object. + """ + return google.api_core.grpc_helpers.create_channel( + address, + credentials=credentials, + scopes=cls._OAUTH_SCOPES, + ) + + @property + def list_group_stats(self): + """Return the gRPC stub for {$apiMethod.name}. + + Lists the specified groups. + + Returns: + Callable: A callable which accepts the appropriate + deserialized request object and returns a + deserialized response object. + """ + return self._stubs['error_stats_service_stub'].ListGroupStats + + @property + def list_events(self): + """Return the gRPC stub for {$apiMethod.name}. + + Lists the specified events. + + Returns: + Callable: A callable which accepts the appropriate + deserialized request object and returns a + deserialized response object. + """ + return self._stubs['error_stats_service_stub'].ListEvents + + @property + def delete_events(self): + """Return the gRPC stub for {$apiMethod.name}. + + Deletes all error events of a given project. + + Returns: + Callable: A callable which accepts the appropriate + deserialized request object and returns a + deserialized response object. + """ + return self._stubs['error_stats_service_stub'].DeleteEvents diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py new file mode 100644 index 000000000000..b71f1cbddd9b --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2018 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 +# +# https://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 google.api_core.grpc_helpers + +from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2_grpc + + +class ReportErrorsServiceGrpcTransport(object): + """gRPC transport class providing stubs for + google.devtools.clouderrorreporting.v1beta1 ReportErrorsService API. + + The transport provides access to the raw gRPC stubs, + which can be used to take advantage of advanced + features of gRPC. + """ + # The scopes needed to make gRPC calls to all of the methods defined + # in this service. + _OAUTH_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) + + def __init__(self, + channel=None, + credentials=None, + address='clouderrorreporting.googleapis.com:443'): + """Instantiate the transport class. + + Args: + channel (grpc.Channel): A ``Channel`` instance through + which to make calls. This argument is mutually exclusive + with ``credentials``; providing both will raise an exception. + credentials (google.auth.credentials.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If none + are specified, the client will attempt to ascertain the + credentials from the environment. + address (str): The address where the service is hosted. + """ + # If both `channel` and `credentials` are specified, raise an + # exception (channels come with credentials baked in already). + if channel is not None and credentials is not None: + raise ValueError( + 'The `channel` and `credentials` arguments are mutually ' + 'exclusive.', ) + + # Create the channel. + if channel is None: + channel = self.create_channel( + address=address, + credentials=credentials, + ) + + # gRPC uses objects called "stubs" that are bound to the + # channel and provide a basic method for each RPC. + self._stubs = { + 'report_errors_service_stub': + report_errors_service_pb2_grpc.ReportErrorsServiceStub(channel), + } + + @classmethod + def create_channel(cls, + address='clouderrorreporting.googleapis.com:443', + credentials=None): + """Create and return a gRPC channel object. + + Args: + address (str): The host for the channel to use. + credentials (~.Credentials): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + + Returns: + grpc.Channel: A gRPC channel object. + """ + return google.api_core.grpc_helpers.create_channel( + address, + credentials=credentials, + scopes=cls._OAUTH_SCOPES, + ) + + @property + def report_error_event(self): + """Return the gRPC stub for {$apiMethod.name}. + + Report an individual error event. + + This endpoint accepts either an OAuth token, + or an + API key + for authentication. To use an API key, append it to the URL as the value of + a ``key`` parameter. For example: +
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ + Returns: + Callable: A callable which accepts the appropriate + deserialized request object and returns a + deserialized response object. + """ + return self._stubs['report_errors_service_stub'].ReportErrorEvent diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py index 8f11310e3141..3b4dd43acd8b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py @@ -25,7 +25,6 @@ serialized_pb=_b('\n>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a#google/api/monitored_resource.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x81\x01\n\nErrorGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12S\n\x0ftracking_issues\x18\x03 \x03(\x0b\x32:.google.devtools.clouderrorreporting.v1beta1.TrackingIssue\"\x1c\n\rTrackingIssue\x12\x0b\n\x03url\x18\x01 \x01(\t\"\xef\x01\n\nErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext\"I\n\x0eServiceContext\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\"\xc9\x01\n\x0c\x45rrorContext\x12U\n\x0chttp_request\x18\x01 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.HttpRequestContext\x12\x0c\n\x04user\x18\x02 \x01(\t\x12T\n\x0freport_location\x18\x03 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.SourceLocation\"\x88\x01\n\x12HttpRequestContext\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x12\n\nuser_agent\x18\x03 \x01(\t\x12\x10\n\x08referrer\x18\x04 \x01(\t\x12\x1c\n\x14response_status_code\x18\x05 \x01(\x05\x12\x11\n\tremote_ip\x18\x06 \x01(\t\"O\n\x0eSourceLocation\x12\x11\n\tfile_path\x18\x01 \x01(\t\x12\x13\n\x0bline_number\x18\x02 \x01(\x05\x12\x15\n\rfunction_name\x18\x04 \x01(\tB\xec\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x0b\x43ommonProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3') , dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_api_dot_monitored__resource__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) -_sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -43,21 +42,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup.group_id', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='tracking_issues', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup.tracking_issues', index=2, number=3, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -88,7 +87,7 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -119,28 +118,28 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='service_context', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.service_context', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='message', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.message', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='context', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.context', index=3, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -171,21 +170,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='version', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext.version', index=1, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='resource_type', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext.resource_type', index=2, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -216,21 +215,21 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='user', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext.user', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='report_location', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext.report_location', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -261,42 +260,42 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='url', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.url', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='user_agent', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.user_agent', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='referrer', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.referrer', index=3, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='response_status_code', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.response_status_code', index=4, number=5, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='remote_ip', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.remote_ip', index=5, number=6, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -327,21 +326,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='line_number', full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation.line_number', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='function_name', full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation.function_name', index=2, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -371,6 +370,7 @@ DESCRIPTOR.message_types_by_name['ErrorContext'] = _ERRORCONTEXT DESCRIPTOR.message_types_by_name['HttpRequestContext'] = _HTTPREQUESTCONTEXT DESCRIPTOR.message_types_by_name['SourceLocation'] = _SOURCELOCATION +_sym_db.RegisterFileDescriptor(DESCRIPTOR) ErrorGroup = _reflection.GeneratedProtocolMessageType('ErrorGroup', (_message.Message,), dict( DESCRIPTOR = _ERRORGROUP, @@ -557,14 +557,4 @@ DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1')) -try: - # THESE ELEMENTS WILL BE DEPRECATED. - # Please use the generated *_pb2_grpc.py files instead. - import grpc - from grpc.beta import implementations as beta_implementations - from grpc.beta import interfaces as beta_interfaces - from grpc.framework.common import cardinality - from grpc.framework.interfaces.face import utilities as face_utilities -except ImportError: - pass # @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py index 5cdfdeffa5a5..7e1d729036cb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py @@ -24,7 +24,6 @@ serialized_pb=_b('\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\"%\n\x0fGetGroupRequest\x12\x12\n\ngroup_name\x18\x01 \x01(\t\"\\\n\x12UpdateGroupRequest\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup2\x8e\x03\n\x11\x45rrorGroupService\x12\xb4\x01\n\x08GetGroup\x12<.google.devtools.clouderrorreporting.v1beta1.GetGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{group_name=projects/*/groups/*}\x12\xc1\x01\n\x0bUpdateGroup\x12?.google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\"8\x82\xd3\xe4\x93\x02\x32\x1a)/v1beta1/{group.name=projects/*/groups/*}:\x05groupB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorGroupServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3') , dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,]) -_sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -42,7 +41,7 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -73,7 +72,7 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -93,6 +92,7 @@ _UPDATEGROUPREQUEST.fields_by_name['group'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP DESCRIPTOR.message_types_by_name['GetGroupRequest'] = _GETGROUPREQUEST DESCRIPTOR.message_types_by_name['UpdateGroupRequest'] = _UPDATEGROUPREQUEST +_sym_db.RegisterFileDescriptor(DESCRIPTOR) GetGroupRequest = _reflection.GeneratedProtocolMessageType('GetGroupRequest', (_message.Message,), dict( DESCRIPTOR = _GETGROUPREQUEST, @@ -131,158 +131,37 @@ DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1')) -try: - # THESE ELEMENTS WILL BE DEPRECATED. - # Please use the generated *_pb2_grpc.py files instead. - import grpc - from grpc.beta import implementations as beta_implementations - from grpc.beta import interfaces as beta_interfaces - from grpc.framework.common import cardinality - from grpc.framework.interfaces.face import utilities as face_utilities - - - class ErrorGroupServiceStub(object): - """Service for retrieving and updating individual error groups. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.GetGroup = channel.unary_unary( - '/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup', - request_serializer=GetGroupRequest.SerializeToString, - response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, - ) - self.UpdateGroup = channel.unary_unary( - '/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup', - request_serializer=UpdateGroupRequest.SerializeToString, - response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, - ) - - - class ErrorGroupServiceServicer(object): - """Service for retrieving and updating individual error groups. - """ - - def GetGroup(self, request, context): - """Get the specified group. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateGroup(self, request, context): - """Replace the data for the specified group. - Fails if the group does not exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - - def add_ErrorGroupServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'GetGroup': grpc.unary_unary_rpc_method_handler( - servicer.GetGroup, - request_deserializer=GetGroupRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, - ), - 'UpdateGroup': grpc.unary_unary_rpc_method_handler( - servicer.UpdateGroup, - request_deserializer=UpdateGroupRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) +_ERRORGROUPSERVICE = _descriptor.ServiceDescriptor( + name='ErrorGroupService', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', + file=DESCRIPTOR, + index=0, + options=None, + serialized_start=352, + serialized_end=750, + methods=[ + _descriptor.MethodDescriptor( + name='GetGroup', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.GetGroup', + index=0, + containing_service=None, + input_type=_GETGROUPREQUEST, + output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002+\022)/v1beta1/{group_name=projects/*/groups/*}')), + ), + _descriptor.MethodDescriptor( + name='UpdateGroup', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.UpdateGroup', + index=1, + containing_service=None, + input_type=_UPDATEGROUPREQUEST, + output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0022\032)/v1beta1/{group.name=projects/*/groups/*}:\005group')), + ), +]) +_sym_db.RegisterServiceDescriptor(_ERRORGROUPSERVICE) + +DESCRIPTOR.services_by_name['ErrorGroupService'] = _ERRORGROUPSERVICE - class BetaErrorGroupServiceServicer(object): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This class was generated - only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" - """Service for retrieving and updating individual error groups. - """ - def GetGroup(self, request, context): - """Get the specified group. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def UpdateGroup(self, request, context): - """Replace the data for the specified group. - Fails if the group does not exist. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - - - class BetaErrorGroupServiceStub(object): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This class was generated - only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" - """Service for retrieving and updating individual error groups. - """ - def GetGroup(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Get the specified group. - """ - raise NotImplementedError() - GetGroup.future = None - def UpdateGroup(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Replace the data for the specified group. - Fails if the group does not exist. - """ - raise NotImplementedError() - UpdateGroup.future = None - - - def beta_create_ErrorGroupService_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This function was - generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" - request_deserializers = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): GetGroupRequest.FromString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): UpdateGroupRequest.FromString, - } - response_serializers = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, - } - method_implementations = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): face_utilities.unary_unary_inline(servicer.GetGroup), - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): face_utilities.unary_unary_inline(servicer.UpdateGroup), - } - server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) - return beta_implementations.server(method_implementations, options=server_options) - - - def beta_create_ErrorGroupService_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This function was - generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" - request_serializers = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): GetGroupRequest.SerializeToString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): UpdateGroupRequest.SerializeToString, - } - response_deserializers = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'GetGroup'): google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', 'UpdateGroup'): google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, - } - cardinalities = { - 'GetGroup': cardinality.Cardinality.UNARY_UNARY, - 'UpdateGroup': cardinality.Cardinality.UNARY_UNARY, - } - stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) - return beta_implementations.dynamic_stub(channel, 'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', cardinalities, options=stub_options) -except ImportError: - pass # @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py index c9d1ff0fadfc..3efb75e49df7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py @@ -1,8 +1,8 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc -import google.cloud.errorreporting_v1beta1.proto.common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2 -import google.cloud.errorreporting_v1beta1.proto.error_group_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2 +from google.cloud.errorreporting_v1beta1.proto import common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2 +from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2 class ErrorGroupServiceStub(object): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py index c592152c50e7..b4a827bd4f65 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py @@ -27,7 +27,6 @@ serialized_pb=_b('\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xa1\x04\n\x15ListGroupStatsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x03(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x05 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x37\n\x14timed_count_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12S\n\talignment\x18\x07 \x01(\x0e\x32@.google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment\x12\x32\n\x0e\x61lignment_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12K\n\x05order\x18\t \x01(\x0e\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder\x12\x11\n\tpage_size\x18\x0b \x01(\x05\x12\x12\n\npage_token\x18\x0c \x01(\t\"\xc0\x01\n\x16ListGroupStatsResponse\x12W\n\x11\x65rror_group_stats\x18\x01 \x03(\x0b\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x86\x04\n\x0f\x45rrorGroupStats\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\x1c\n\x14\x61\x66\x66\x65\x63ted_users_count\x18\x03 \x01(\x03\x12M\n\x0ctimed_counts\x18\x04 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.TimedCount\x12\x33\n\x0f\x66irst_seen_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x32\n\x0elast_seen_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12V\n\x11\x61\x66\x66\x65\x63ted_services\x18\x07 \x03(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x1d\n\x15num_affected_services\x18\x08 \x01(\x05\x12O\n\x0erepresentative\x18\t \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\"y\n\nTimedCount\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x8e\x02\n\x11ListEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x04 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x11\n\tpage_size\x18\x06 \x01(\x05\x12\x12\n\npage_token\x18\x07 \x01(\t\"\xb2\x01\n\x12ListEventsResponse\x12M\n\x0c\x65rror_events\x18\x01 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe7\x01\n\x0eQueryTimeRange\x12R\n\x06period\x18\x01 \x01(\x0e\x32\x42.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period\"\x80\x01\n\x06Period\x12\x16\n\x12PERIOD_UNSPECIFIED\x10\x00\x12\x11\n\rPERIOD_1_HOUR\x10\x01\x12\x12\n\x0ePERIOD_6_HOURS\x10\x02\x12\x10\n\x0cPERIOD_1_DAY\x10\x03\x12\x11\n\rPERIOD_1_WEEK\x10\x04\x12\x12\n\x0ePERIOD_30_DAYS\x10\x05\"O\n\x14ServiceContextFilter\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\"+\n\x13\x44\x65leteEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteEventsResponse*u\n\x13TimedCountAlignment\x12%\n!ERROR_COUNT_ALIGNMENT_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x41LIGNMENT_EQUAL_ROUNDED\x10\x01\x12\x1a\n\x16\x41LIGNMENT_EQUAL_AT_END\x10\x02*}\n\x0f\x45rrorGroupOrder\x12\x1b\n\x17GROUP_ORDER_UNSPECIFIED\x10\x00\x12\x0e\n\nCOUNT_DESC\x10\x01\x12\x12\n\x0eLAST_SEEN_DESC\x10\x02\x12\x10\n\x0c\x43REATED_DESC\x10\x03\x12\x17\n\x13\x41\x46\x46\x45\x43TED_USERS_DESC\x10\x04\x32\xf2\x04\n\x11\x45rrorStatsService\x12\xd0\x01\n\x0eListGroupStats\x12\x42.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest\x1a\x43.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse\"5\x82\xd3\xe4\x93\x02/\x12-/v1beta1/{project_name=projects/*}/groupStats\x12\xc0\x01\n\nListEvents\x12>.google.devtools.clouderrorreporting.v1beta1.ListEventsRequest\x1a?.google.devtools.clouderrorreporting.v1beta1.ListEventsResponse\"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{project_name=projects/*}/events\x12\xc6\x01\n\x0c\x44\x65leteEvents\x12@.google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest\x1a\x41.google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse\"1\x82\xd3\xe4\x93\x02+*)/v1beta1/{project_name=projects/*}/eventsB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorStatsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3') , dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) -_sym_db.RegisterFileDescriptor(DESCRIPTOR) _TIMEDCOUNTALIGNMENT = _descriptor.EnumDescriptor( name='TimedCountAlignment', @@ -153,70 +152,70 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id', index=1, number=2, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='service_filter', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.service_filter', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='time_range', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.time_range', index=3, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='timed_count_duration', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.timed_count_duration', index=4, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='alignment', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment', index=5, number=7, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='alignment_time', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment_time', index=6, number=8, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='order', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.order', index=7, number=9, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='page_size', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_size', index=8, number=11, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_token', index=9, number=12, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -247,21 +246,21 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='next_page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.next_page_token', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='time_range_begin', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.time_range_begin', index=2, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -292,63 +291,63 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='count', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.count', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='affected_users_count', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_users_count', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='timed_counts', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.timed_counts', index=3, number=4, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='first_seen_time', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.first_seen_time', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='last_seen_time', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.last_seen_time', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='affected_services', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_services', index=6, number=7, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='num_affected_services', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.num_affected_services', index=7, number=8, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='representative', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.representative', index=8, number=9, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -379,21 +378,21 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='start_time', full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount.start_time', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='end_time', full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount.end_time', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -424,42 +423,42 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.group_id', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='service_filter', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.service_filter', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='time_range', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.time_range', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='page_size', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_size', index=4, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_token', index=5, number=7, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -490,21 +489,21 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='next_page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.next_page_token', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='time_range_begin', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.time_range_begin', index=2, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -535,7 +534,7 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -567,21 +566,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='version', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.version', index=1, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='resource_type', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.resource_type', index=2, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -612,7 +611,7 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -687,6 +686,7 @@ DESCRIPTOR.message_types_by_name['DeleteEventsResponse'] = _DELETEEVENTSRESPONSE DESCRIPTOR.enum_types_by_name['TimedCountAlignment'] = _TIMEDCOUNTALIGNMENT DESCRIPTOR.enum_types_by_name['ErrorGroupOrder'] = _ERRORGROUPORDER +_sym_db.RegisterFileDescriptor(DESCRIPTOR) ListGroupStatsRequest = _reflection.GeneratedProtocolMessageType('ListGroupStatsRequest', (_message.Message,), dict( DESCRIPTOR = _LISTGROUPSTATSREQUEST, @@ -975,191 +975,46 @@ DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1')) -try: - # THESE ELEMENTS WILL BE DEPRECATED. - # Please use the generated *_pb2_grpc.py files instead. - import grpc - from grpc.beta import implementations as beta_implementations - from grpc.beta import interfaces as beta_interfaces - from grpc.framework.common import cardinality - from grpc.framework.interfaces.face import utilities as face_utilities - - - class ErrorStatsServiceStub(object): - """An API for retrieving and managing error statistics as well as data for - individual events. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.ListGroupStats = channel.unary_unary( - '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats', - request_serializer=ListGroupStatsRequest.SerializeToString, - response_deserializer=ListGroupStatsResponse.FromString, - ) - self.ListEvents = channel.unary_unary( - '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents', - request_serializer=ListEventsRequest.SerializeToString, - response_deserializer=ListEventsResponse.FromString, - ) - self.DeleteEvents = channel.unary_unary( - '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents', - request_serializer=DeleteEventsRequest.SerializeToString, - response_deserializer=DeleteEventsResponse.FromString, - ) - - - class ErrorStatsServiceServicer(object): - """An API for retrieving and managing error statistics as well as data for - individual events. - """ - - def ListGroupStats(self, request, context): - """Lists the specified groups. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ListEvents(self, request, context): - """Lists the specified events. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteEvents(self, request, context): - """Deletes all error events of a given project. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - - def add_ErrorStatsServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'ListGroupStats': grpc.unary_unary_rpc_method_handler( - servicer.ListGroupStats, - request_deserializer=ListGroupStatsRequest.FromString, - response_serializer=ListGroupStatsResponse.SerializeToString, - ), - 'ListEvents': grpc.unary_unary_rpc_method_handler( - servicer.ListEvents, - request_deserializer=ListEventsRequest.FromString, - response_serializer=ListEventsResponse.SerializeToString, - ), - 'DeleteEvents': grpc.unary_unary_rpc_method_handler( - servicer.DeleteEvents, - request_deserializer=DeleteEventsRequest.FromString, - response_serializer=DeleteEventsResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) +_ERRORSTATSSERVICE = _descriptor.ServiceDescriptor( + name='ErrorStatsService', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', + file=DESCRIPTOR, + index=0, + options=None, + serialized_start=2755, + serialized_end=3381, + methods=[ + _descriptor.MethodDescriptor( + name='ListGroupStats', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats', + index=0, + containing_service=None, + input_type=_LISTGROUPSTATSREQUEST, + output_type=_LISTGROUPSTATSRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002/\022-/v1beta1/{project_name=projects/*}/groupStats')), + ), + _descriptor.MethodDescriptor( + name='ListEvents', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListEvents', + index=1, + containing_service=None, + input_type=_LISTEVENTSREQUEST, + output_type=_LISTEVENTSRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002+\022)/v1beta1/{project_name=projects/*}/events')), + ), + _descriptor.MethodDescriptor( + name='DeleteEvents', + full_name='google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.DeleteEvents', + index=2, + containing_service=None, + input_type=_DELETEEVENTSREQUEST, + output_type=_DELETEEVENTSRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002+*)/v1beta1/{project_name=projects/*}/events')), + ), +]) +_sym_db.RegisterServiceDescriptor(_ERRORSTATSSERVICE) + +DESCRIPTOR.services_by_name['ErrorStatsService'] = _ERRORSTATSSERVICE - class BetaErrorStatsServiceServicer(object): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This class was generated - only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" - """An API for retrieving and managing error statistics as well as data for - individual events. - """ - def ListGroupStats(self, request, context): - """Lists the specified groups. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def ListEvents(self, request, context): - """Lists the specified events. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - def DeleteEvents(self, request, context): - """Deletes all error events of a given project. - """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - - - class BetaErrorStatsServiceStub(object): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This class was generated - only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" - """An API for retrieving and managing error statistics as well as data for - individual events. - """ - def ListGroupStats(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Lists the specified groups. - """ - raise NotImplementedError() - ListGroupStats.future = None - def ListEvents(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Lists the specified events. - """ - raise NotImplementedError() - ListEvents.future = None - def DeleteEvents(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Deletes all error events of a given project. - """ - raise NotImplementedError() - DeleteEvents.future = None - - - def beta_create_ErrorStatsService_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This function was - generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" - request_deserializers = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): DeleteEventsRequest.FromString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): ListEventsRequest.FromString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): ListGroupStatsRequest.FromString, - } - response_serializers = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): DeleteEventsResponse.SerializeToString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): ListEventsResponse.SerializeToString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): ListGroupStatsResponse.SerializeToString, - } - method_implementations = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): face_utilities.unary_unary_inline(servicer.DeleteEvents), - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): face_utilities.unary_unary_inline(servicer.ListEvents), - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): face_utilities.unary_unary_inline(servicer.ListGroupStats), - } - server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) - return beta_implementations.server(method_implementations, options=server_options) - - - def beta_create_ErrorStatsService_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This function was - generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" - request_serializers = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): DeleteEventsRequest.SerializeToString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): ListEventsRequest.SerializeToString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): ListGroupStatsRequest.SerializeToString, - } - response_deserializers = { - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'DeleteEvents'): DeleteEventsResponse.FromString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListEvents'): ListEventsResponse.FromString, - ('google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', 'ListGroupStats'): ListGroupStatsResponse.FromString, - } - cardinalities = { - 'DeleteEvents': cardinality.Cardinality.UNARY_UNARY, - 'ListEvents': cardinality.Cardinality.UNARY_UNARY, - 'ListGroupStats': cardinality.Cardinality.UNARY_UNARY, - } - stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) - return beta_implementations.dynamic_stub(channel, 'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', cardinalities, options=stub_options) -except ImportError: - pass # @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py index db753cc290e7..6148a05a166a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py @@ -1,7 +1,7 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc -import google.cloud.errorreporting_v1beta1.proto.error_stats_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2 +from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2 class ErrorStatsServiceStub(object): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py index cba497127a4f..c8499c5f4cfd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py @@ -25,7 +25,6 @@ serialized_pb=_b('\nMgoogle/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x7f\n\x17ReportErrorEventRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12N\n\x05\x65vent\x18\x02 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent\"\x1a\n\x18ReportErrorEventResponse\"\xf7\x01\n\x12ReportedErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext2\xf8\x01\n\x13ReportErrorsService\x12\xe0\x01\n\x10ReportErrorEvent\x12\x44.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest\x1a\x45.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse\"?\x82\xd3\xe4\x93\x02\x39\"0/v1beta1/{project_name=projects/*}/events:report:\x05\x65ventB\xf9\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x18ReportErrorsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3') , dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) -_sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -43,14 +42,14 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='event', full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.event', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -105,28 +104,28 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='service_context', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.service_context', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='message', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.message', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='context', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.context', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None), + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -150,6 +149,7 @@ DESCRIPTOR.message_types_by_name['ReportErrorEventRequest'] = _REPORTERROREVENTREQUEST DESCRIPTOR.message_types_by_name['ReportErrorEventResponse'] = _REPORTERROREVENTRESPONSE DESCRIPTOR.message_types_by_name['ReportedErrorEvent'] = _REPORTEDERROREVENT +_sym_db.RegisterFileDescriptor(DESCRIPTOR) ReportErrorEventRequest = _reflection.GeneratedProtocolMessageType('ReportErrorEventRequest', (_message.Message,), dict( DESCRIPTOR = _REPORTERROREVENTREQUEST, @@ -215,144 +215,28 @@ DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1')) -try: - # THESE ELEMENTS WILL BE DEPRECATED. - # Please use the generated *_pb2_grpc.py files instead. - import grpc - from grpc.beta import implementations as beta_implementations - from grpc.beta import interfaces as beta_interfaces - from grpc.framework.common import cardinality - from grpc.framework.interfaces.face import utilities as face_utilities - - - class ReportErrorsServiceStub(object): - """An API for reporting error events. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.ReportErrorEvent = channel.unary_unary( - '/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent', - request_serializer=ReportErrorEventRequest.SerializeToString, - response_deserializer=ReportErrorEventResponse.FromString, - ) - - - class ReportErrorsServiceServicer(object): - """An API for reporting error events. - """ - - def ReportErrorEvent(self, request, context): - """Report an individual error event. - - This endpoint accepts either an OAuth token, - or an - API key - for authentication. To use an API key, append it to the URL as the value of - a `key` parameter. For example: -
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - - def add_ReportErrorsServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'ReportErrorEvent': grpc.unary_unary_rpc_method_handler( - servicer.ReportErrorEvent, - request_deserializer=ReportErrorEventRequest.FromString, - response_serializer=ReportErrorEventResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - - class BetaReportErrorsServiceServicer(object): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This class was generated - only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" - """An API for reporting error events. - """ - def ReportErrorEvent(self, request, context): - """Report an individual error event. - - This endpoint accepts either an OAuth token, - or an - API key - for authentication. To use an API key, append it to the URL as the value of - a `key` parameter. For example: -
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- """ - context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) - - - class BetaReportErrorsServiceStub(object): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This class was generated - only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" - """An API for reporting error events. - """ - def ReportErrorEvent(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """Report an individual error event. - - This endpoint accepts either an OAuth token, - or an - API key - for authentication. To use an API key, append it to the URL as the value of - a `key` parameter. For example: -
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- """ - raise NotImplementedError() - ReportErrorEvent.future = None - - - def beta_create_ReportErrorsService_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): - """The Beta API is deprecated for 0.15.0 and later. - - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This function was - generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" - request_deserializers = { - ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): ReportErrorEventRequest.FromString, - } - response_serializers = { - ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): ReportErrorEventResponse.SerializeToString, - } - method_implementations = { - ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): face_utilities.unary_unary_inline(servicer.ReportErrorEvent), - } - server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) - return beta_implementations.server(method_implementations, options=server_options) - - - def beta_create_ReportErrorsService_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): - """The Beta API is deprecated for 0.15.0 and later. +_REPORTERRORSSERVICE = _descriptor.ServiceDescriptor( + name='ReportErrorsService', + full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', + file=DESCRIPTOR, + index=0, + options=None, + serialized_start=661, + serialized_end=909, + methods=[ + _descriptor.MethodDescriptor( + name='ReportErrorEvent', + full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorsService.ReportErrorEvent', + index=0, + containing_service=None, + input_type=_REPORTERROREVENTREQUEST, + output_type=_REPORTERROREVENTRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0029\"0/v1beta1/{project_name=projects/*}/events:report:\005event')), + ), +]) +_sym_db.RegisterServiceDescriptor(_REPORTERRORSSERVICE) + +DESCRIPTOR.services_by_name['ReportErrorsService'] = _REPORTERRORSSERVICE - It is recommended to use the GA API (classes and functions in this - file not marked beta) for all further purposes. This function was - generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" - request_serializers = { - ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): ReportErrorEventRequest.SerializeToString, - } - response_deserializers = { - ('google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', 'ReportErrorEvent'): ReportErrorEventResponse.FromString, - } - cardinalities = { - 'ReportErrorEvent': cardinality.Cardinality.UNARY_UNARY, - } - stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) - return beta_implementations.dynamic_stub(channel, 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', cardinalities, options=stub_options) -except ImportError: - pass # @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py index d40cb2acb2cb..f2a8a011b2c0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py @@ -1,7 +1,7 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc -import google.cloud.errorreporting_v1beta1.proto.report_errors_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2 +from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2 class ReportErrorsServiceStub(object): diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py new file mode 100644 index 000000000000..d52fa1f31fd3 --- /dev/null +++ b/packages/google-cloud-error-reporting/synth.py @@ -0,0 +1,40 @@ +# Copyright 2018 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. + +"""This script is used to synthesize generated parts of this library.""" +import synthtool as s +from synthtool import gcp + +gapic = gcp.GAPICGenerator() + + +#---------------------------------------------------------------------------- +# Generate error_reporting client +#---------------------------------------------------------------------------- +library = gapic.py_library( + 'error_reporting', + 'v1beta1', + config_path='/google/devtools/clouderrorreporting' + '/artman_errorreporting.yaml', + artman_output_name='error-reporting-v1beta1') + +s.move(library / 'google/cloud/errorreporting_v1beta1/proto') +s.move(library / 'google/cloud/errorreporting_v1beta1/gapic') + +# Fix up imports +s.replace( + 'google/**/*.py', + r"from google.devtools.clouderrorreporting_v1beta1.proto import ", + r"from google.cloud.errorreporting_v1beta1.proto import ", +) From 87b9a8c24c77279310b7ef04920f644dd935aa1e Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Wed, 10 Oct 2018 11:04:44 -0700 Subject: [PATCH 101/467] Use new Nox (#6175) --- .../{nox.py => noxfile.py} | 36 ++++--------------- 1 file changed, 7 insertions(+), 29 deletions(-) rename packages/google-cloud-error-reporting/{nox.py => noxfile.py} (80%) diff --git a/packages/google-cloud-error-reporting/nox.py b/packages/google-cloud-error-reporting/noxfile.py similarity index 80% rename from packages/google-cloud-error-reporting/nox.py rename to packages/google-cloud-error-reporting/noxfile.py index f968977ece32..909559610370 100644 --- a/packages/google-cloud-error-reporting/nox.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -26,7 +26,6 @@ ) -@nox.session def default(session): """Default unit test session. @@ -55,61 +54,41 @@ def default(session): ) -@nox.session -@nox.parametrize('py', ['2.7', '3.5', '3.6', '3.7']) -def unit(session, py): +@nox.session(python=['2.7', '3.5', '3.6', '3.7']) +def unit(session): """Run the unit test suite.""" - # Run unit tests against all supported versions of Python. - session.interpreter = 'python{}'.format(py) - - # Set the virtualenv dirname. - session.virtualenv_dirname = 'unit-' + py - default(session) -@nox.session +@nox.session(python='3.6') def lint(session): """Run linters. Returns a failure if the linters find linting errors or sufficiently serious code quality issues. """ - session.interpreter = 'python3.6' session.install('flake8', *LOCAL_DEPS) session.install('.') session.run('flake8', 'google', 'tests') -@nox.session +@nox.session(python='3.6') def lint_setup_py(session): """Verify that setup.py is valid (including RST check).""" - session.interpreter = 'python3.6' - - # Set the virtualenv dirname. - session.virtualenv_dirname = 'setup' - session.install('docutils', 'Pygments') session.run( 'python', 'setup.py', 'check', '--restructuredtext', '--strict') -@nox.session -@nox.parametrize('py', ['2.7', '3.6']) -def system(session, py): +@nox.session(python=['2.7', '3.6']) +def system(session): """Run the system test suite.""" # Sanity check: Only run system tests if the environment variable is set. if not os.environ.get('GOOGLE_APPLICATION_CREDENTIALS', ''): session.skip('Credentials must be set via environment variable.') - # Run the system tests against latest Python 2 and Python 3 only. - session.interpreter = 'python{}'.format(py) - - # Set the virtualenv dirname. - session.virtualenv_dirname = 'sys-' + py - # Use pre-release gRPC for system tests. session.install('--pre', 'grpcio') @@ -124,14 +103,13 @@ def system(session, py): session.run('py.test', '-vvv', 'tests/system', *session.posargs) -@nox.session +@nox.session(python='3.6') def cover(session): """Run the final coverage report. This outputs the coverage report aggregating coverage from the unit test runs (not system test runs), and then erases coverage data. """ - session.interpreter = 'python3.6' session.install('coverage', 'pytest-cov') session.run('coverage', 'report', '--show-missing', '--fail-under=100') session.run('coverage', 'erase') From b7f3a508ae01708fc20601210cbc74c7e7a891d3 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Wed, 17 Oct 2018 10:34:34 -0400 Subject: [PATCH 102/467] Error_reporting: prep docs for repo split. (#6155) * Harmonize / DRY 'error_reporting/README.rst' / 'error_reporting/docs/index.rst'. Toward #5912. * Move 'docs/error-reporting/*' -> 'error_reporting/docs/'. Leave behind a symlink (note its name uses a hyphen rather than an underscore). Make the 'usage.rst' page only do usage docs -- the rest is in 'index.rst'. --- .../google-cloud-error-reporting/README.rst | 98 +++++++++------ .../docs/changelog.md | 1 + .../docs/client.rst | 6 + .../docs/index.rst | 109 +++-------------- .../docs/usage.rst | 115 ++++++++++++++++++ .../docs/util.rst | 6 + 6 files changed, 209 insertions(+), 126 deletions(-) create mode 120000 packages/google-cloud-error-reporting/docs/changelog.md create mode 100644 packages/google-cloud-error-reporting/docs/client.rst create mode 100644 packages/google-cloud-error-reporting/docs/usage.rst create mode 100644 packages/google-cloud-error-reporting/docs/util.rst diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index b2037ea495dc..97934e3bdffa 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -1,58 +1,82 @@ Python Client for Stackdriver Error Reporting ============================================= - Python idiomatic client for `Stackdriver Error Reporting`_ - -.. _Stackdriver Error Reporting: https://cloud.google.com/error-reporting/ - |pypi| |versions| -- `Documentation`_ +The Stackdriver `Error Reporting`_ API counts, analyzes and aggregates the +crashes in your running cloud services. A centralized error management +interface displays the results with sorting and filtering capabilities. A +dedicated view shows the error details: time chart, occurrences, affected user +count, first and last seen dates and a cleaned exception stack trace. Opt-in +to receive email and mobile alerts on new errors. + +- `Client Library Documentation`_ +- `Product Documentation`_ -.. _Documentation: https://googlecloudplatform.github.io/google-cloud-python/latest/error-reporting/usage.html +.. _Error Reporting: https://cloud.google.com/error-reporting/ +.. _Client Library Documentation: https://googlecloudplatform.github.io/google-cloud-python/latest/error-reporting/usage.html +.. _Product Documentation: https://cloud.google.com/error-reporting/reference/ +.. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg + :target: https://pypi.org/project/google-cloud-error-reporting/ +.. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg + :target: https://pypi.org/project/google-cloud-error-reporting/ Quick Start ----------- -.. code-block:: console +In order to use this library, you first need to go through the following steps: - $ pip install --upgrade google-cloud-error-reporting +1. `Select or create a Cloud Platform project.`_ +2. `Enable billing for your project.`_ +3. `Enable the Google Cloud Datastore API.`_ +4. `Setup Authentication.`_ -For more information on setting up your Python development environment, -such as installing ``pip`` and ``virtualenv`` on your system, please refer -to `Python Development Environment Setup Guide`_ for Google Cloud Platform. +.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project +.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project +.. _Enable the Google Cloud Datastore API.: https://cloud.google.com/error-reporting +.. _Setup Authentication.: https://googlecloudplatform.github.io/google-cloud-python/latest/core/auth.html -.. _Python Development Environment Setup Guide: https://cloud.google.com/python/setup +Installation +~~~~~~~~~~~~ -Authentication --------------- +Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to +create isolated Python environments. The basic problem it addresses is one of +dependencies and versions, and indirectly permissions. -With ``google-cloud-python`` we try to make authentication as painless as -possible. Check out the `Authentication section`_ in our documentation to -learn more. You may also find the `authentication document`_ shared by all -the ``google-cloud-*`` libraries to be helpful. +With `virtualenv`_, it's possible to install this library without needing system +install permissions, and without clashing with the installed system +dependencies. -.. _Authentication section: https://google-cloud-python.readthedocs.io/en/latest/core/auth.html -.. _authentication document: https://github.com/GoogleCloudPlatform/google-cloud-common/tree/master/authentication +.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ -Using the API -------------- -The Stackdriver `Error Reporting`_ API (`Error Reporting API docs`_) -counts, analyzes and aggregates the crashes in your running cloud services. -A centralized error management interface displays the results with sorting -and filtering capabilities. A dedicated view shows the error details: time -chart, occurrences, affected user count, first and last seen dates and a -cleaned exception stack trace. Opt-in to receive email and mobile alerts -on new errors. +Mac/Linux +^^^^^^^^^ -.. _Error Reporting: https://cloud.google.com/error-reporting/ -.. _Error Reporting API docs: https://cloud.google.com/error-reporting/reference/ +.. code-block:: console -See the ``google-cloud-python`` API Error Reporting `Documentation`_ to learn -how to get started using this library. + pip install virtualenv + virtualenv + source /bin/activate + /bin/pip install google-cloud-error-reporting -.. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg - :target: https://pypi.org/project/google-cloud-error-reporting/ -.. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg - :target: https://pypi.org/project/google-cloud-error-reporting/ + +Windows +^^^^^^^ + +.. code-block:: console + + pip install virtualenv + virtualenv + \Scripts\activate + \Scripts\pip.exe install google-cloud-error-reporting + + + +Next Steps +~~~~~~~~~~ + +- Read the `Client Library Documentation`_ for Google Cloud Datastore API + API to see other available methods on the client. +- Read the `Product documentation`_ to learn + more about the product and see How-to Guides. diff --git a/packages/google-cloud-error-reporting/docs/changelog.md b/packages/google-cloud-error-reporting/docs/changelog.md new file mode 120000 index 000000000000..04c99a55caae --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/changelog.md @@ -0,0 +1 @@ +../CHANGELOG.md \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/client.rst b/packages/google-cloud-error-reporting/docs/client.rst new file mode 100644 index 000000000000..93fcff3bf071 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/client.rst @@ -0,0 +1,6 @@ +Error Reporting Client +======================= + +.. automodule:: google.cloud.error_reporting.client + :members: + :show-inheritance: diff --git a/packages/google-cloud-error-reporting/docs/index.rst b/packages/google-cloud-error-reporting/docs/index.rst index 2493c0a3b5d3..885ef592d373 100644 --- a/packages/google-cloud-error-reporting/docs/index.rst +++ b/packages/google-cloud-error-reporting/docs/index.rst @@ -1,101 +1,32 @@ -Python Client for Stackdriver Error Reporting API (`Alpha`_) -============================================================ +.. include:: /../error_reporting/README.rst -`Stackdriver Error Reporting API`_: -Stackdriver Error Reporting groups and counts similar errors from cloud services. The Stackdriver Error Reporting API provides a way to report new errors and read access to error groups and their associated errors. +Usage Documentation +------------------- -- `Client Library Documentation`_ -- `Product Documentation`_ - -.. _Alpha: https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/README.rst -.. _Stackdriver Error Reporting API: https://cloud.google.com/error-reporting -.. _Client Library Documentation: https://googlecloudplatform.github.io/google-cloud-python/latest/error-reporting/usage.html -.. _Product Documentation: https://cloud.google.com/error-reporting - -Quick Start ------------ - -In order to use this library, you first need to go through the following steps: - -1. `Select or create a Cloud Platform project.`_ -2. `Enable billing for your project.`_ -3. `Enable the Stackdriver Error Reporting API.`_ -4. `Setup Authentication.`_ - -.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project -.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Enable the Stackdriver Error Reporting API.: https://cloud.google.com/error-reporting -.. _Setup Authentication.: https://googlecloudplatform.github.io/google-cloud-python/latest/core/auth.html - -Installation -~~~~~~~~~~~~ - -Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to -create isolated Python environments. The basic problem it addresses is one of -dependencies and versions, and indirectly permissions. - -With `virtualenv`_, it's possible to install this library without needing system -install permissions, and without clashing with the installed system -dependencies. - -.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ - - -Mac/Linux -^^^^^^^^^ - -.. code-block:: console - - pip install virtualenv - virtualenv - source /bin/activate - /bin/pip install google-cloud-error-reporting - - -Windows -^^^^^^^ - -.. code-block:: console - - pip install virtualenv - virtualenv - \Scripts\activate - \Scripts\pip.exe install google-cloud-error-reporting - -Preview -~~~~~~~ - -ReportErrorsServiceClient -^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code:: py +.. toctree:: + :maxdepth: 2 - from google.cloud import errorreporting_v1beta1 + usage + - client = errorreporting_v1beta1.ReportErrorsServiceClient() +API Reference +------------- +.. toctree:: + :maxdepth: 2 - project_name = client.project_path('[PROJECT]') - event = {} - response = client.report_error_event(project_name, event) + client + util + gapic/v1beta1/api + gapic/v1beta1/types -Next Steps -~~~~~~~~~~ -- Read the `Client Library Documentation`_ for Stackdriver Error Reporting API - API to see other available methods on the client. -- Read the `Stackdriver Error Reporting API Product documentation`_ to learn - more about the product and see How-to Guides. -- View this `repository’s main README`_ to see the full list of Cloud - APIs that we cover. +Changelog +--------- -.. _Stackdriver Error Reporting API Product documentation: https://cloud.google.com/error-reporting -.. _repository’s main README: https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/README.rst +For a list of all ``google-cloud-error-reporting`` releases: -Api Reference -------------- .. toctree:: - :maxdepth: 2 + :maxdepth: 2 - gapic/v1beta1/api - gapic/v1beta1/types + changelog diff --git a/packages/google-cloud-error-reporting/docs/usage.rst b/packages/google-cloud-error-reporting/docs/usage.rst new file mode 100644 index 000000000000..291621597e2d --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/usage.rst @@ -0,0 +1,115 @@ +Using Stackdriver Error Reporting +================================= + +After configuring your environment, create a +:class:`Client ` + +.. code-block:: python + + from google.cloud import error_reporting + + client = error_reporting.Client() + +or pass in ``credentials`` and ``project`` explicitly + +.. code-block:: python + + from google.cloud import error_reporting + + client = error_reporting.Client(project='my-project', credentials=creds) + +Error Reporting associates errors with a service, which is an identifier for +an executable, App Engine service, or job. The default service is "python", +but a default can be specified for the client on construction time. You can +also optionally specify a version for that service, which defaults to +"default." + +.. code-block:: python + + from google.cloud import error_reporting + + client = error_reporting.Client( + project='my-project', service="login_service", version="0.1.0") + + +Reporting an exception +----------------------- + +Report a stacktrace to Stackdriver Error Reporting after an exception: + +.. code-block:: python + + from google.cloud import error_reporting + + client = error_reporting.Client() + try: + raise NameError + except Exception: + client.report_exception() + + +By default, the client will report the error using the service specified in +the client's constructor, or the default service of "python". + +The user and HTTP context can also be included in the exception. The HTTP +context can be constructed using +:class:`google.cloud.error_reporting.HTTPContext`. This will be used by +Stackdriver Error Reporting to help group exceptions. + +.. code-block:: python + + from google.cloud import error_reporting + + client = error_reporting.Client() + user = 'example@gmail.com' + http_context = error_reporting.HTTPContext( + method='GET', url='/', user_agent='test agent', + referrer='example.com', response_status_code=500, + remote_ip='1.2.3.4') + try: + raise NameError + except Exception: + client.report_exception(http_context=http_context, user=user)) + +An automatic helper to build the HTTP Context from a Flask (Werkzeug) request +object is provided. + +.. code-block:: python + + from google.cloud.error_reporting import build_flask_context + + @app.errorhandler(HTTPException) + def handle_error(exc): + client.report_exception( + http_context=build_flask_context(request)) + # rest of error response code here + + +Reporting an error without an exception +----------------------------------------- + +Errors can also be reported to Stackdriver Error Reporting outside the context +of an exception. The library will include the file path, function name, and +line number of the location where the error was reported. + +.. code-block:: python + + from google.cloud import error_reporting + + client = error_reporting.Client() + error_reporting.report("Found an error!") + + As with reporting an exception, the user and HTTP context can be provided: + +.. code-block:: python + + from google.cloud import error_reporting + + client = error_reporting.Client() + user = 'example@gmail.com' + http_context = error_reporting.HTTPContext( + method='GET', url='/', user_agent='test agent', + referrer='example.com', response_status_code=500, + remote_ip='1.2.3.4') + error_reporting.report( + "Found an error!", http_context=http_context, user=user)) diff --git a/packages/google-cloud-error-reporting/docs/util.rst b/packages/google-cloud-error-reporting/docs/util.rst new file mode 100644 index 000000000000..9bc8aad51367 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/util.rst @@ -0,0 +1,6 @@ +Error Reporting Utilities +========================= + +.. automodule:: google.cloud.error_reporting.util + :members: + :show-inheritance: From 09a6afb7fb82db16cb318cc9312d9d1cf40ffa25 Mon Sep 17 00:00:00 2001 From: Christopher Wilcox Date: Fri, 26 Oct 2018 15:11:36 -0700 Subject: [PATCH 103/467] Fix #6321 Update README service links in quickstart guides. (#6322) --- packages/google-cloud-error-reporting/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 97934e3bdffa..0b28b3298ee4 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -28,12 +28,12 @@ In order to use this library, you first need to go through the following steps: 1. `Select or create a Cloud Platform project.`_ 2. `Enable billing for your project.`_ -3. `Enable the Google Cloud Datastore API.`_ +3. `Enable the Google Cloud Error Reporting API.`_ 4. `Setup Authentication.`_ .. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project .. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Enable the Google Cloud Datastore API.: https://cloud.google.com/error-reporting +.. _Enable the Google Cloud Error Reporting API.: https://cloud.google.com/error-reporting .. _Setup Authentication.: https://googlecloudplatform.github.io/google-cloud-python/latest/core/auth.html Installation From 11aee0859234428dfbf312c3b2744016492cd7c0 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Wed, 7 Nov 2018 14:09:32 -0500 Subject: [PATCH 104/467] Fix client_info bug, update docstrings via synth. (#6442) Remove now-spurious replacements from synth. Fix newly-generated raw HTML junk in docstrings. Closes #6411. --- .../errorreporting_v1beta1/gapic/enums.py | 14 ++- .../gapic/error_group_service_client.py | 19 ++-- .../gapic/error_stats_service_client.py | 88 ++++++++++--------- .../gapic/report_errors_service_client.py | 25 +++--- .../report_errors_service_grpc_transport.py | 7 -- .../google-cloud-error-reporting/synth.py | 21 +++++ 6 files changed, 91 insertions(+), 83 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py index 18a25e9bfcb3..0d176b182c42 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py @@ -24,14 +24,12 @@ class TimedCountAlignment(enum.IntEnum): Attributes: ERROR_COUNT_ALIGNMENT_UNSPECIFIED (int): No alignment specified. - ALIGNMENT_EQUAL_ROUNDED (int): The time periods shall be consecutive, have width equal to the - requested duration, and be aligned at the ``alignment_time`` provided in - the request. - The ``alignment_time`` does not have to be inside the query period but - even if it is outside, only time periods are returned which overlap - with the query period. - A rounded alignment will typically result in a - different size of the first or the last time period. + ALIGNMENT_EQUAL_ROUNDED (int): The time periods shall be consecutive, have width equal to the requested + duration, and be aligned at the ``alignment_time`` provided in the + request. The ``alignment_time`` does not have to be inside the query + period but even if it is outside, only time periods are returned which + overlap with the query period. A rounded alignment will typically result + in a different size of the first or the last time period. ALIGNMENT_EQUAL_AT_END (int): The time periods shall be consecutive, have width equal to the requested duration, and be aligned at the end of the requested time period. This can result in a different size of the diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py index cc7732d8d62e..0a12bbec1d74 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -146,9 +146,10 @@ def __init__(self, ) if client_info is None: - client_info = ( - google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) - client_info.gapic_version = _GAPIC_LIBRARY_VERSION + client_info = google.api_core.gapic_v1.client_info.ClientInfo( + gapic_version=_GAPIC_LIBRARY_VERSION, ) + else: + client_info.gapic_version = _GAPIC_LIBRARY_VERSION self._client_info = client_info # Parse out the default settings for retry and timeout for each RPC @@ -184,13 +185,10 @@ def get_group(self, Args: group_name (str): [Required] The group resource name. Written as - projects/projectID/groups/group_name. - Call - - groupStats.list to return a list of groups belonging to - this project. + projects/projectID/groups/group\_name. Call groupStats.list to return a + list of groups belonging to this project. - Example: projects/my-project-123/groups/my-group + Example: projects/my-project-123/groups/my-group retry (Optional[google.api_core.retry.Retry]): A retry object used to retry requests. If ``None`` is specified, requests will not be retried. @@ -239,13 +237,14 @@ def update_group(self, >>> >>> client = errorreporting_v1beta1.ErrorGroupServiceClient() >>> - >>> # TODO: Initialize ``group``: + >>> # TODO: Initialize `group`: >>> group = {} >>> >>> response = client.update_group(group) Args: group (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ErrorGroup]): [Required] The group which replaces the resource on the server. + If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` retry (Optional[google.api_core.retry.Retry]): A retry object used diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py index fb6786fe89fa..9182df3c6143 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -154,9 +154,10 @@ def __init__(self, ) if client_info is None: - client_info = ( - google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) - client_info.gapic_version = _GAPIC_LIBRARY_VERSION + client_info = google.api_core.gapic_v1.client_info.ClientInfo( + gapic_version=_GAPIC_LIBRARY_VERSION, ) + else: + client_info.gapic_version = _GAPIC_LIBRARY_VERSION self._client_info = client_info # Parse out the default settings for retry and timeout for each RPC @@ -196,7 +197,7 @@ def list_group_stats(self, >>> >>> project_name = client.project_path('[PROJECT]') >>> - >>> # TODO: Initialize ``time_range``: + >>> # TODO: Initialize `time_range`: >>> time_range = {} >>> >>> # Iterate over all results @@ -208,45 +209,46 @@ def list_group_stats(self, >>> # Alternatively: >>> >>> # Iterate over results one page at a time - >>> for page in client.list_group_stats(project_name, time_range, options=CallOptions(page_token=INITIAL_PAGE)): + >>> for page in client.list_group_stats(project_name, time_range).pages: ... for element in page: ... # process element ... pass Args: - project_name (str): [Required] The resource name of the Google Cloud Platform project. Written - as projects/ plus the - Google Cloud - Platform project ID. - - Example: projects/my-project-123. - time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): [Optional] List data for the given time range. - If not set a default time range is used. The field time_range_begin - in the response will specify the beginning of this time range. - Only ErrorGroupStats with a non-zero count in the given time - range are returned, unless the request contains an explicit group_id list. - If a group_id list is given, also ErrorGroupStats with zero - occurrences are returned. + project_name (str): [Required] The resource name of the Google Cloud Platform project. + Written as projects/ plus the Google Cloud Platform project ID. + + Example: projects/my-project-123. + time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): [Optional] List data for the given time range. If not set a default time + range is used. The field time\_range\_begin in the response will specify + the beginning of this time range. Only ErrorGroupStats with a non-zero + count in the given time range are returned, unless the request contains + an explicit group\_id list. If a group\_id list is given, also + ErrorGroupStats with zero occurrences are returned. + If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` - group_id (list[str]): [Optional] List all ErrorGroupStats with these IDs. - service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): [Optional] List only ErrorGroupStats which belong to a service - context that matches the filter. - Data for all service contexts is returned if this field is not specified. + group_id (list[str]): [Optional] List all ErrorGroupStats with these IDs. + service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): [Optional] List only ErrorGroupStats which belong to a service context + that matches the filter. Data for all service contexts is returned if + this field is not specified. + If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter` timed_count_duration (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Duration]): [Optional] The preferred duration for a single returned ``TimedCount``. If not set, no timed counts are returned. + If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.Duration` - alignment (~google.cloud.errorreporting_v1beta1.types.TimedCountAlignment): [Optional] The alignment of the timed counts to be returned. - Default is ``ALIGNMENT_EQUAL_AT_END``. + alignment (~google.cloud.errorreporting_v1beta1.types.TimedCountAlignment): [Optional] The alignment of the timed counts to be returned. Default is + ``ALIGNMENT_EQUAL_AT_END``. alignment_time (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Timestamp]): [Optional] Time where the timed counts shall be aligned if rounded alignment is chosen. Default is 00:00 UTC. + If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.Timestamp` - order (~google.cloud.errorreporting_v1beta1.types.ErrorGroupOrder): [Optional] The sort order in which the results are returned. - Default is ``COUNT_DESC``. + order (~google.cloud.errorreporting_v1beta1.types.ErrorGroupOrder): [Optional] The sort order in which the results are returned. Default is + ``COUNT_DESC``. page_size (int): The maximum number of resources contained in the underlying API response. If page streaming is performed per- resource, this parameter does not affect the return value. If page @@ -329,7 +331,7 @@ def list_events(self, >>> >>> project_name = client.project_path('[PROJECT]') >>> - >>> # TODO: Initialize ``group_id``: + >>> # TODO: Initialize `group_id`: >>> group_id = '' >>> >>> # Iterate over all results @@ -341,26 +343,27 @@ def list_events(self, >>> # Alternatively: >>> >>> # Iterate over results one page at a time - >>> for page in client.list_events(project_name, group_id, options=CallOptions(page_token=INITIAL_PAGE)): + >>> for page in client.list_events(project_name, group_id).pages: ... for element in page: ... # process element ... pass Args: - project_name (str): [Required] The resource name of the Google Cloud Platform project. Written - as ``projects/`` plus the - [Google Cloud Platform project - ID](https://support.google.com/cloud/answer/6158840). - Example: ``projects/my-project-123``. + project_name (str): [Required] The resource name of the Google Cloud Platform project. + Written as ``projects/`` plus the `Google Cloud Platform project + ID `__. Example: + ``projects/my-project-123``. group_id (str): [Required] The group for which events shall be returned. service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): [Optional] List only ErrorGroups which belong to a service context that - matches the filter. - Data for all service contexts is returned if this field is not specified. + matches the filter. Data for all service contexts is returned if this + field is not specified. + If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter` - time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): [Optional] List only data for the given time range. - If not set a default time range is used. The field time_range_begin - in the response will specify the beginning of this time range. + time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): [Optional] List only data for the given time range. If not set a default + time range is used. The field time\_range\_begin in the response will + specify the beginning of this time range. + If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` page_size (int): The maximum number of resources contained in the @@ -439,11 +442,10 @@ def delete_events(self, >>> response = client.delete_events(project_name) Args: - project_name (str): [Required] The resource name of the Google Cloud Platform project. Written - as ``projects/`` plus the - [Google Cloud Platform project - ID](https://support.google.com/cloud/answer/6158840). - Example: ``projects/my-project-123``. + project_name (str): [Required] The resource name of the Google Cloud Platform project. + Written as ``projects/`` plus the `Google Cloud Platform project + ID `__. Example: + ``projects/my-project-123``. retry (Optional[google.api_core.retry.Retry]): A retry object used to retry requests. If ``None`` is specified, requests will not be retried. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index 3c81e793792a..55cc8093a93d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -151,9 +151,10 @@ def __init__(self, ) if client_info is None: - client_info = ( - google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO) - client_info.gapic_version = _GAPIC_LIBRARY_VERSION + client_info = google.api_core.gapic_v1.client_info.ClientInfo( + gapic_version=_GAPIC_LIBRARY_VERSION, ) + else: + client_info.gapic_version = _GAPIC_LIBRARY_VERSION self._client_info = client_info # Parse out the default settings for retry and timeout for each RPC @@ -179,13 +180,6 @@ def report_error_event(self, """ Report an individual error event. - This endpoint accepts either an OAuth token, - or an - API key - for authentication. To use an API key, append it to the URL as the value of - a ``key`` parameter. For example: -
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- Example: >>> from google.cloud import errorreporting_v1beta1 >>> @@ -193,17 +187,18 @@ def report_error_event(self, >>> >>> project_name = client.project_path('[PROJECT]') >>> - >>> # TODO: Initialize ``event``: + >>> # TODO: Initialize `event`: >>> event = {} >>> >>> response = client.report_error_event(project_name, event) Args: - project_name (str): [Required] The resource name of the Google Cloud Platform project. Written - as ``projects/`` plus the - `Google Cloud Platform project ID `_. - Example: ``projects/my-project-123``. + project_name (str): [Required] The resource name of the Google Cloud Platform project. + Written as ``projects/`` plus the `Google Cloud Platform project + ID `__. Example: + ``projects/my-project-123``. event (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent]): [Required] The error event to be reported. + If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent` retry (Optional[google.api_core.retry.Retry]): A retry object used diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index b71f1cbddd9b..3a47670c8fde 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -98,13 +98,6 @@ def report_error_event(self): Report an individual error event. - This endpoint accepts either an OAuth token, - or an - API key - for authentication. To use an API key, append it to the URL as the value of - a ``key`` parameter. For example: -
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index d52fa1f31fd3..4203fbade7cf 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -38,3 +38,24 @@ r"from google.devtools.clouderrorreporting_v1beta1.proto import ", r"from google.cloud.errorreporting_v1beta1.proto import ", ) + +# Fix up docstrings in GAPIC clients +DISCARD_AUTH_BOILERPLATE = r""" + This endpoint accepts either an OAuth token, or an API key for + authentication. To use an API key, append it to the URL as the value of + a ``key`` parameter. For example: + + \.\. raw:: html +
POST .*
+"""
+
+targets = [
+    'google/cloud/errorreporting_v1beta1/gapic/*_client.py',
+    'google/cloud/errorreporting_v1beta1/gapic/transports/*_transport.py',
+]
+
+s.replace(
+    targets,
+    DISCARD_AUTH_BOILERPLATE,
+    r"",
+)

From 489e9b60f7d86bc4422d382a6576f79c0b946aca Mon Sep 17 00:00:00 2001
From: Tres Seaver 
Date: Wed, 14 Nov 2018 22:22:31 -0500
Subject: [PATCH 105/467] Error reporting: pick up fixes to GAPIC generator.
 (#6522)

Closes #6496.

Includes generated test changes.

Includes fixes from these PRs:

- https://github.com/googleapis/gapic-generator/pull/2407
- https://github.com/googleapis/gapic-generator/pull/2396
---
 .../gapic/error_group_service_client.py       | 17 +++++---
 .../gapic/error_stats_service_client.py       | 17 +++++---
 .../gapic/report_errors_service_client.py     | 17 +++++---
 .../error_group_service_grpc_transport.py     | 11 ++++++
 .../error_stats_service_grpc_transport.py     | 11 ++++++
 .../report_errors_service_grpc_transport.py   | 11 ++++++
 .../google-cloud-error-reporting/synth.py     |  2 +
 ...st_system_report_errors_service_v1beta1.py |  2 +
 ...test_error_group_service_client_v1beta1.py | 27 +++++++++----
 ...test_error_stats_service_client_v1beta1.py | 39 +++++++++++++------
 ...st_report_errors_service_client_v1beta1.py | 15 +++++--
 11 files changed, 130 insertions(+), 39 deletions(-)

diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py
index 0a12bbec1d74..760e86572a31 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py
@@ -81,7 +81,7 @@ def __init__(self,
                  transport=None,
                  channel=None,
                  credentials=None,
-                 client_config=error_group_service_client_config.config,
+                 client_config=None,
                  client_info=None):
         """Constructor.
 
@@ -114,13 +114,20 @@ def __init__(self,
                 your own client library.
         """
         # Raise deprecation warnings for things we want to go away.
-        if client_config:
-            warnings.warn('The `client_config` argument is deprecated.',
-                          PendingDeprecationWarning)
+        if client_config is not None:
+            warnings.warn(
+                'The `client_config` argument is deprecated.',
+                PendingDeprecationWarning,
+                stacklevel=2)
+        else:
+            client_config = error_group_service_client_config.config
+
         if channel:
             warnings.warn(
                 'The `channel` argument is deprecated; use '
-                '`transport` instead.', PendingDeprecationWarning)
+                '`transport` instead.',
+                PendingDeprecationWarning,
+                stacklevel=2)
 
         # Instantiate the transport.
         # The transport is responsible for handling serialization and
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py
index 9182df3c6143..12e0c9f4261b 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py
@@ -89,7 +89,7 @@ def __init__(self,
                  transport=None,
                  channel=None,
                  credentials=None,
-                 client_config=error_stats_service_client_config.config,
+                 client_config=None,
                  client_info=None):
         """Constructor.
 
@@ -122,13 +122,20 @@ def __init__(self,
                 your own client library.
         """
         # Raise deprecation warnings for things we want to go away.
-        if client_config:
-            warnings.warn('The `client_config` argument is deprecated.',
-                          PendingDeprecationWarning)
+        if client_config is not None:
+            warnings.warn(
+                'The `client_config` argument is deprecated.',
+                PendingDeprecationWarning,
+                stacklevel=2)
+        else:
+            client_config = error_stats_service_client_config.config
+
         if channel:
             warnings.warn(
                 'The `channel` argument is deprecated; use '
-                '`transport` instead.', PendingDeprecationWarning)
+                '`transport` instead.',
+                PendingDeprecationWarning,
+                stacklevel=2)
 
         # Instantiate the transport.
         # The transport is responsible for handling serialization and
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py
index 55cc8093a93d..fc0c5fa31cf0 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py
@@ -86,7 +86,7 @@ def __init__(self,
                  transport=None,
                  channel=None,
                  credentials=None,
-                 client_config=report_errors_service_client_config.config,
+                 client_config=None,
                  client_info=None):
         """Constructor.
 
@@ -119,13 +119,20 @@ def __init__(self,
                 your own client library.
         """
         # Raise deprecation warnings for things we want to go away.
-        if client_config:
-            warnings.warn('The `client_config` argument is deprecated.',
-                          PendingDeprecationWarning)
+        if client_config is not None:
+            warnings.warn(
+                'The `client_config` argument is deprecated.',
+                PendingDeprecationWarning,
+                stacklevel=2)
+        else:
+            client_config = report_errors_service_client_config.config
+
         if channel:
             warnings.warn(
                 'The `channel` argument is deprecated; use '
-                '`transport` instead.', PendingDeprecationWarning)
+                '`transport` instead.',
+                PendingDeprecationWarning,
+                stacklevel=2)
 
         # Instantiate the transport.
         # The transport is responsible for handling serialization and
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py
index 95d83d1097af..d7d5f051d4b3 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py
@@ -62,6 +62,8 @@ def __init__(self,
                 credentials=credentials,
             )
 
+        self._channel = channel
+
         # gRPC uses objects called "stubs" that are bound to the
         # channel and provide a basic method for each RPC.
         self._stubs = {
@@ -92,6 +94,15 @@ def create_channel(cls,
             scopes=cls._OAUTH_SCOPES,
         )
 
+    @property
+    def channel(self):
+        """The gRPC channel used by the transport.
+
+        Returns:
+            grpc.Channel: A gRPC channel object.
+        """
+        return self._channel
+
     @property
     def get_group(self):
         """Return the gRPC stub for {$apiMethod.name}.
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py
index 74bf117d8542..5958feea3f5e 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py
@@ -62,6 +62,8 @@ def __init__(self,
                 credentials=credentials,
             )
 
+        self._channel = channel
+
         # gRPC uses objects called "stubs" that are bound to the
         # channel and provide a basic method for each RPC.
         self._stubs = {
@@ -92,6 +94,15 @@ def create_channel(cls,
             scopes=cls._OAUTH_SCOPES,
         )
 
+    @property
+    def channel(self):
+        """The gRPC channel used by the transport.
+
+        Returns:
+            grpc.Channel: A gRPC channel object.
+        """
+        return self._channel
+
     @property
     def list_group_stats(self):
         """Return the gRPC stub for {$apiMethod.name}.
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py
index 3a47670c8fde..3fbaa975f966 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py
@@ -62,6 +62,8 @@ def __init__(self,
                 credentials=credentials,
             )
 
+        self._channel = channel
+
         # gRPC uses objects called "stubs" that are bound to the
         # channel and provide a basic method for each RPC.
         self._stubs = {
@@ -92,6 +94,15 @@ def create_channel(cls,
             scopes=cls._OAUTH_SCOPES,
         )
 
+    @property
+    def channel(self):
+        """The gRPC channel used by the transport.
+
+        Returns:
+            grpc.Channel: A gRPC channel object.
+        """
+        return self._channel
+
     @property
     def report_error_event(self):
         """Return the gRPC stub for {$apiMethod.name}.
diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py
index 4203fbade7cf..a1fa37c850ce 100644
--- a/packages/google-cloud-error-reporting/synth.py
+++ b/packages/google-cloud-error-reporting/synth.py
@@ -31,6 +31,8 @@
 
 s.move(library / 'google/cloud/errorreporting_v1beta1/proto')
 s.move(library / 'google/cloud/errorreporting_v1beta1/gapic')
+s.move(library / 'tests/unit/gapic/v1beta1')
+s.move(library / 'tests/system/gapic/v1beta1')
 
 # Fix up imports
 s.replace(
diff --git a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py
index f7a0ec32895c..642306e624b3 100644
--- a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py
+++ b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+#
 # Copyright 2018 Google LLC
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py
index d0df5fd3bd5d..7d632a2d69d1 100644
--- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py
+++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+#
 # Copyright 2018 Google LLC
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,6 +15,7 @@
 # limitations under the License.
 """Unit tests."""
 
+import mock
 import pytest
 
 from google.cloud import errorreporting_v1beta1
@@ -69,8 +72,10 @@ def test_get_group(self):
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        client = errorreporting_v1beta1.ErrorGroupServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorGroupServiceClient()
 
         # Setup Request
         group_name = client.group_path('[PROJECT]', '[GROUP]')
@@ -87,8 +92,10 @@ def test_get_group(self):
     def test_get_group_exception(self):
         # Mock the API response
         channel = ChannelStub(responses=[CustomException()])
-        client = errorreporting_v1beta1.ErrorGroupServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorGroupServiceClient()
 
         # Setup request
         group_name = client.group_path('[PROJECT]', '[GROUP]')
@@ -105,8 +112,10 @@ def test_update_group(self):
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        client = errorreporting_v1beta1.ErrorGroupServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorGroupServiceClient()
 
         # Setup Request
         group = {}
@@ -123,8 +132,10 @@ def test_update_group(self):
     def test_update_group_exception(self):
         # Mock the API response
         channel = ChannelStub(responses=[CustomException()])
-        client = errorreporting_v1beta1.ErrorGroupServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorGroupServiceClient()
 
         # Setup request
         group = {}
diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py
index f6f33f91c3be..0d362cc0db60 100644
--- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py
+++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+#
 # Copyright 2018 Google LLC
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,6 +15,7 @@
 # limitations under the License.
 """Unit tests."""
 
+import mock
 import pytest
 
 from google.cloud import errorreporting_v1beta1
@@ -74,8 +77,10 @@ def test_list_group_stats(self):
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        client = errorreporting_v1beta1.ErrorStatsServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup Request
         project_name = client.project_path('[PROJECT]')
@@ -95,8 +100,10 @@ def test_list_group_stats(self):
 
     def test_list_group_stats_exception(self):
         channel = ChannelStub(responses=[CustomException()])
-        client = errorreporting_v1beta1.ErrorStatsServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup request
         project_name = client.project_path('[PROJECT]')
@@ -120,8 +127,10 @@ def test_list_events(self):
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        client = errorreporting_v1beta1.ErrorStatsServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup Request
         project_name = client.project_path('[PROJECT]')
@@ -141,8 +150,10 @@ def test_list_events(self):
 
     def test_list_events_exception(self):
         channel = ChannelStub(responses=[CustomException()])
-        client = errorreporting_v1beta1.ErrorStatsServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup request
         project_name = client.project_path('[PROJECT]')
@@ -160,8 +171,10 @@ def test_delete_events(self):
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        client = errorreporting_v1beta1.ErrorStatsServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup Request
         project_name = client.project_path('[PROJECT]')
@@ -178,8 +191,10 @@ def test_delete_events(self):
     def test_delete_events_exception(self):
         # Mock the API response
         channel = ChannelStub(responses=[CustomException()])
-        client = errorreporting_v1beta1.ErrorStatsServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup request
         project_name = client.project_path('[PROJECT]')
diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py
index 05232d979e61..458eb094ab06 100644
--- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py
+++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+#
 # Copyright 2018 Google LLC
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,6 +15,7 @@
 # limitations under the License.
 """Unit tests."""
 
+import mock
 import pytest
 
 from google.cloud import errorreporting_v1beta1
@@ -67,8 +70,10 @@ def test_report_error_event(self):
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        client = errorreporting_v1beta1.ReportErrorsServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ReportErrorsServiceClient()
 
         # Setup Request
         project_name = client.project_path('[PROJECT]')
@@ -86,8 +91,10 @@ def test_report_error_event(self):
     def test_report_error_event_exception(self):
         # Mock the API response
         channel = ChannelStub(responses=[CustomException()])
-        client = errorreporting_v1beta1.ReportErrorsServiceClient(
-            channel=channel)
+        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        with patch as create_channel:
+            create_channel.return_value = channel
+            client = errorreporting_v1beta1.ReportErrorsServiceClient()
 
         # Setup request
         project_name = client.project_path('[PROJECT]')

From ec1b24185dbfc2b87fae45c554dd993c88bf4370 Mon Sep 17 00:00:00 2001
From: Yoshi Automation Bot
 <44816363+yoshi-automation@users.noreply.github.com>
Date: Mon, 19 Nov 2018 11:23:09 -0800
Subject: [PATCH 106/467] Add synth metadata. (#6566)

---
 .../synth.metadata                            | 27 +++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 packages/google-cloud-error-reporting/synth.metadata

diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata
new file mode 100644
index 000000000000..f26e69af8847
--- /dev/null
+++ b/packages/google-cloud-error-reporting/synth.metadata
@@ -0,0 +1,27 @@
+{
+  "sources": [
+    {
+      "git": {
+        "name": "googleapis",
+        "remote": "https://github.com/googleapis/googleapis.git",
+        "sha": "5a57f0c13a358b2b15452bf2d67453774a5f6d4f",
+        "internalRef": "221837528"
+      }
+    },
+    {
+      "git": {
+        "name": "googleapis-private",
+        "remote": "https://github.com/googleapis/googleapis-private.git",
+        "sha": "6aa8e1a447bb8d0367150356a28cb4d3f2332641",
+        "internalRef": "221340946"
+      }
+    },
+    {
+      "generator": {
+        "name": "artman",
+        "version": "0.16.0",
+        "dockerImage": "googleapis/artman@sha256:90f9d15e9bad675aeecd586725bce48f5667ffe7d5fc4d1e96d51ff34304815b"
+      }
+    }
+  ]
+}
\ No newline at end of file

From dcbb5feab19a5f6cde72c4818830b20e83120b5b Mon Sep 17 00:00:00 2001
From: Christopher Wilcox 
Date: Wed, 28 Nov 2018 13:55:23 -0800
Subject: [PATCH 107/467] Add templates for flake8, coveragerc, noxfile, and
 black. (#6642)

---
 .../google-cloud-error-reporting/.coveragerc  |   7 +
 packages/google-cloud-error-reporting/.flake8 |   1 +
 .../google-cloud-error-reporting/MANIFEST.in  |   3 +-
 .../google-cloud-error-reporting/noxfile.py   | 147 ++++++++++--------
 .../google-cloud-error-reporting/synth.py     |  44 +++---
 5 files changed, 119 insertions(+), 83 deletions(-)

diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc
index a54b99aa14b7..51fec440cebf 100644
--- a/packages/google-cloud-error-reporting/.coveragerc
+++ b/packages/google-cloud-error-reporting/.coveragerc
@@ -9,3 +9,10 @@ exclude_lines =
     pragma: NO COVER
     # Ignore debug-only repr
     def __repr__
+    # Ignore abstract methods
+    raise NotImplementedError
+omit =
+  */gapic/*.py
+  */proto/*.py
+  */google-cloud-python/core/*.py
+  */site-packages/*.py
\ No newline at end of file
diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8
index 1f44a90f8195..61766fa84d02 100644
--- a/packages/google-cloud-error-reporting/.flake8
+++ b/packages/google-cloud-error-reporting/.flake8
@@ -1,4 +1,5 @@
 [flake8]
+ignore = E203, E266, E501, W503
 exclude =
   # Exclude generated code.
   **/proto/**
diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in
index fc77f8c82ff0..9cbf175afe6b 100644
--- a/packages/google-cloud-error-reporting/MANIFEST.in
+++ b/packages/google-cloud-error-reporting/MANIFEST.in
@@ -1,4 +1,5 @@
 include README.rst LICENSE
 recursive-include google *.json *.proto
 recursive-include tests *
-global-exclude *.pyc __pycache__
+global-exclude *.py[co]
+global-exclude __pycache__
diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py
index 909559610370..a9efc0e344ce 100644
--- a/packages/google-cloud-error-reporting/noxfile.py
+++ b/packages/google-cloud-error-reporting/noxfile.py
@@ -1,10 +1,12 @@
-# Copyright 2016 Google LLC
+# -*- coding: utf-8 -*-
+#
+# Copyright 2018 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
+#     https://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,
@@ -13,103 +15,126 @@
 # limitations under the License.
 
 from __future__ import absolute_import
-
 import os
 
 import nox
 
 
-LOCAL_DEPS = (
-    os.path.join('..', 'api_core'),
-    os.path.join('..', 'core'),
-    os.path.join('..', 'logging'),
-)
+LOCAL_DEPS = (os.path.join("..", "api_core"), os.path.join("..", "core"))
 
+@nox.session(python="3.7")
+def blacken(session):
+    """Run black.
 
-def default(session):
-    """Default unit test session.
-
-    This is intended to be run **without** an interpreter set, so
-    that the current ``python`` (on the ``PATH``) or the version of
-    Python corresponding to the ``nox`` binary the ``PATH`` can
-    run the tests.
+    Format code to uniform standard.
     """
-    # Install all test dependencies, then install local packages in-place.
-    session.install('mock', 'pytest', 'pytest-cov')
-    for local_dep in LOCAL_DEPS:
-        session.install('-e', local_dep)
-    session.install('-e', '.')
-
-    # Run py.test against the unit tests.
+    session.install("black")
     session.run(
-        'py.test',
-        '--quiet',
-        '--cov=google.cloud.error_reporting',
-        '--cov=tests.unit',
-        '--cov-append',
-        '--cov-config=.coveragerc',
-        '--cov-report=',
-        '--cov-fail-under=97',
-        'tests/unit',
+        "black",
+        "google",
+        "tests",
+        "docs",
+        "--exclude",
+        ".*/proto/.*|.*/gapic/.*|.*/.*_pb2.py",
     )
 
 
-@nox.session(python=['2.7', '3.5', '3.6', '3.7'])
-def unit(session):
-    """Run the unit test suite."""
-
-    default(session)
-
-
-@nox.session(python='3.6')
+@nox.session(python="3.7")
 def lint(session):
     """Run linters.
 
     Returns a failure if the linters find linting errors or sufficiently
     serious code quality issues.
     """
-    session.install('flake8', *LOCAL_DEPS)
-    session.install('.')
-    session.run('flake8', 'google', 'tests')
+    session.install("flake8", "black", *LOCAL_DEPS)
+    session.run(
+        "black",
+        "--check",
+        "google",
+        "tests",
+        "docs",
+        "--exclude",
+        ".*/proto/.*|.*/gapic/.*|.*/.*_pb2.py",
+    )
+    session.run("flake8", "google", "tests")
 
 
-@nox.session(python='3.6')
+@nox.session(python="3.7")
 def lint_setup_py(session):
     """Verify that setup.py is valid (including RST check)."""
-    session.install('docutils', 'Pygments')
+    session.install("docutils", "pygments")
+    session.run("python", "setup.py", "check", "--restructuredtext", "--strict")
+
+
+def default(session):
+    # Install all test dependencies, then install this package in-place.
+    session.install("mock", "pytest", "pytest-cov")
+    for local_dep in LOCAL_DEPS:
+        session.install("-e", local_dep)
+    session.install("-e", ".")
+
+    # Run py.test against the unit tests.
     session.run(
-        'python', 'setup.py', 'check', '--restructuredtext', '--strict')
+        "py.test",
+        "--quiet",
+        "--cov=google.cloud",
+        "--cov=tests.unit",
+        "--cov-append",
+        "--cov-config=.coveragerc",
+        "--cov-report=",
+        "--cov-fail-under=97",
+        os.path.join("tests", "unit"),
+        *session.posargs,
+    )
 
 
-@nox.session(python=['2.7', '3.6'])
+@nox.session(python=["2.7", "3.5", "3.6", "3.7"])
+def unit(session):
+    """Run the unit test suite."""
+    default(session)
+
+
+@nox.session(python=["2.7", "3.7"])
 def system(session):
     """Run the system test suite."""
-
-    # Sanity check: Only run system tests if the environment variable is set.
-    if not os.environ.get('GOOGLE_APPLICATION_CREDENTIALS', ''):
-        session.skip('Credentials must be set via environment variable.')
+    system_test_path = os.path.join("tests", "system.py")
+    system_test_folder_path = os.path.join("tests", "system")
+    # Sanity check: Only run tests if the environment variable is set.
+    if not os.environ.get("GOOGLE_APPLICATION_CREDENTIALS", ""):
+        session.skip("Credentials must be set via environment variable")
+
+    system_test_exists = os.path.exists(system_test_path)
+    system_test_folder_exists = os.path.exists(system_test_folder_path)
+    # Sanity check: only run tests if found.
+    if not system_test_exists and not system_test_folder_exists:
+        session.skip("System tests were not found")
 
     # Use pre-release gRPC for system tests.
-    session.install('--pre', 'grpcio')
+    session.install("--pre", "grpcio")
 
-    # Install all test dependencies, then install local packages in-place.
-    session.install('mock', 'pytest')
+    # Install all test dependencies, then install this package into the
+    # virtualenv's dist-packages.
+    session.install("mock", "pytest")
     for local_dep in LOCAL_DEPS:
-        session.install('-e', local_dep)
-    session.install('-e', '../test_utils/')
-    session.install('-e', '.')
+        session.install("-e", local_dep)
+    session.install("-e", "../test_utils/")
+    session.install("-e", ".")
 
     # Run py.test against the system tests.
-    session.run('py.test', '-vvv', 'tests/system', *session.posargs)
+    if system_test_exists:
+        session.run("py.test", "--quiet", system_test_path, *session.posargs)
+    if system_test_folder_exists:
+        session.run("py.test", "--quiet", system_test_folder_path, *session.posargs)
 
 
-@nox.session(python='3.6')
+@nox.session(python="3.7")
 def cover(session):
     """Run the final coverage report.
 
     This outputs the coverage report aggregating coverage from the unit
     test runs (not system test runs), and then erases coverage data.
     """
-    session.install('coverage', 'pytest-cov')
-    session.run('coverage', 'report', '--show-missing', '--fail-under=100')
-    session.run('coverage', 'erase')
+    session.install("coverage", "pytest-cov")
+    session.run("coverage", "report", "--show-missing", "--fail-under=100")
+
+    session.run("coverage", "erase")
diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py
index a1fa37c850ce..2fcd333bb551 100644
--- a/packages/google-cloud-error-reporting/synth.py
+++ b/packages/google-cloud-error-reporting/synth.py
@@ -17,26 +17,26 @@
 from synthtool import gcp
 
 gapic = gcp.GAPICGenerator()
+common = gcp.CommonTemplates()
 
-
-#----------------------------------------------------------------------------
-# Generate error_reporting client
-#----------------------------------------------------------------------------
+# ----------------------------------------------------------------------------
+# Generate error_reporting GAPIC layer
+# ----------------------------------------------------------------------------
 library = gapic.py_library(
-    'error_reporting',
-    'v1beta1',
-    config_path='/google/devtools/clouderrorreporting'
-                '/artman_errorreporting.yaml',
-    artman_output_name='error-reporting-v1beta1')
+    "error_reporting",
+    "v1beta1",
+    config_path="/google/devtools/clouderrorreporting" "/artman_errorreporting.yaml",
+    artman_output_name="error-reporting-v1beta1",
+)
 
-s.move(library / 'google/cloud/errorreporting_v1beta1/proto')
-s.move(library / 'google/cloud/errorreporting_v1beta1/gapic')
-s.move(library / 'tests/unit/gapic/v1beta1')
-s.move(library / 'tests/system/gapic/v1beta1')
+s.move(library / "google/cloud/errorreporting_v1beta1/proto")
+s.move(library / "google/cloud/errorreporting_v1beta1/gapic")
+s.move(library / "tests/unit/gapic/v1beta1")
+s.move(library / "tests/system/gapic/v1beta1")
 
 # Fix up imports
 s.replace(
-    'google/**/*.py',
+    "google/**/*.py",
     r"from google.devtools.clouderrorreporting_v1beta1.proto import ",
     r"from google.cloud.errorreporting_v1beta1.proto import ",
 )
@@ -52,12 +52,14 @@
 """
 
 targets = [
-    'google/cloud/errorreporting_v1beta1/gapic/*_client.py',
-    'google/cloud/errorreporting_v1beta1/gapic/transports/*_transport.py',
+    "google/cloud/errorreporting_v1beta1/gapic/*_client.py",
+    "google/cloud/errorreporting_v1beta1/gapic/transports/*_transport.py",
 ]
 
-s.replace(
-    targets,
-    DISCARD_AUTH_BOILERPLATE,
-    r"",
-)
+s.replace(targets, DISCARD_AUTH_BOILERPLATE, r"")
+
+# ----------------------------------------------------------------------------
+# Add templated files
+# ----------------------------------------------------------------------------
+templated_files = common.py_library(unit_cov_level=97, cov_level=100)
+s.move(templated_files)

From 4397c287d691bcb6712f0c2c74b999437e144d1a Mon Sep 17 00:00:00 2001
From: Christopher Wilcox 
Date: Wed, 28 Nov 2018 14:28:56 -0800
Subject: [PATCH 108/467] Run Black on Generated libraries (#6666)

* blacken appveyor

* Blacken all gen'd libraries not under PR
---
 .../google-cloud-error-reporting/docs/conf.py | 168 ++++++++-------
 .../google/__init__.py                        |   2 +
 .../google/cloud/__init__.py                  |   2 +
 .../google/cloud/error_reporting/__init__.py  |   5 +-
 .../google/cloud/error_reporting/_gapic.py    |  12 +-
 .../google/cloud/error_reporting/_logging.py  |   6 +-
 .../google/cloud/error_reporting/client.py    | 102 +++++----
 .../google/cloud/error_reporting/util.py      |  11 +-
 .../cloud/errorreporting_v1beta1/__init__.py  |  28 +--
 .../errorreporting_v1beta1/gapic/enums.py     |   3 +
 .../gapic/error_group_service_client.py       | 133 ++++++------
 .../error_group_service_client_config.py      |  12 +-
 .../gapic/error_stats_service_client.py       | 199 ++++++++++--------
 .../error_stats_service_client_config.py      |  14 +-
 .../gapic/report_errors_service_client.py     | 105 ++++-----
 .../report_errors_service_client_config.py    |   8 +-
 .../error_group_service_grpc_transport.py     |  43 ++--
 .../error_stats_service_grpc_transport.py     |  45 ++--
 .../report_errors_service_grpc_transport.py   |  41 ++--
 .../cloud/errorreporting_v1beta1/types.py     |   8 +-
 ...st_system_report_errors_service_v1beta1.py |  26 +--
 .../tests/system/test_system.py               |  20 +-
 ...test_error_group_service_client_v1beta1.py |  35 ++-
 ...test_error_stats_service_client_v1beta1.py |  63 +++---
 ...st_report_errors_service_client_v1beta1.py |  19 +-
 .../tests/unit/test__gapic.py                 |  30 ++-
 .../tests/unit/test__logging.py               |  21 +-
 .../tests/unit/test_client.py                 | 123 +++++------
 .../tests/unit/test_util.py                   |  11 +-
 29 files changed, 664 insertions(+), 631 deletions(-)

diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py
index 5c67ea1badda..bad104f28b17 100644
--- a/packages/google-cloud-error-reporting/docs/conf.py
+++ b/packages/google-cloud-error-reporting/docs/conf.py
@@ -18,50 +18,50 @@
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.insert(0, os.path.abspath('..'))
+sys.path.insert(0, os.path.abspath(".."))
 
-__version__ = '0.1.0'
+__version__ = "0.1.0"
 
 # -- General configuration ------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
+# needs_sphinx = '1.0'
 
 # Add any Sphinx extension module names here, as strings. They can be
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
 extensions = [
-    'sphinx.ext.autodoc',
-    'sphinx.ext.autosummary',
-    'sphinx.ext.intersphinx',
-    'sphinx.ext.coverage',
-    'sphinx.ext.napoleon',
-    'sphinx.ext.viewcode',
+    "sphinx.ext.autodoc",
+    "sphinx.ext.autosummary",
+    "sphinx.ext.intersphinx",
+    "sphinx.ext.coverage",
+    "sphinx.ext.napoleon",
+    "sphinx.ext.viewcode",
 ]
 
 # autodoc/autosummary flags
-autoclass_content = 'both'
-autodoc_default_flags = ['members']
+autoclass_content = "both"
+autodoc_default_flags = ["members"]
 autosummary_generate = True
 
 # Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+templates_path = ["_templates"]
 
 # The suffix(es) of source filenames.
 # You can specify multiple suffix as a list of string:
 # source_suffix = ['.rst', '.md']
-source_suffix = '.rst'
+source_suffix = ".rst"
 
 # The encoding of source files.
-#source_encoding = 'utf-8-sig'
+# source_encoding = 'utf-8-sig'
 
 # The master toctree document.
-master_doc = 'index'
+master_doc = "index"
 
 # General information about the project.
-project = u'google-cloud-error-reporting'
-copyright = u'2017, Google'
-author = u'Google APIs'
+project = u"google-cloud-error-reporting"
+copyright = u"2017, Google"
+author = u"Google APIs"
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
@@ -70,7 +70,7 @@
 # The full version, including alpha/beta/rc tags.
 release = __version__
 # The short X.Y version.
-version = '.'.join(release.split('.')[0:2])
+version = ".".join(release.split(".")[0:2])
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -81,37 +81,37 @@
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
-#today = ''
+# today = ''
 # Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
+# today_fmt = '%B %d, %Y'
 
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
-exclude_patterns = ['_build']
+exclude_patterns = ["_build"]
 
 # The reST default role (used for this markup: `text`) to use for all
 # documents.
-#default_role = None
+# default_role = None
 
 # If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
+# add_function_parentheses = True
 
 # If true, the current module name will be prepended to all description
 # unit titles (such as .. function::).
-#add_module_names = True
+# add_module_names = True
 
 # If true, sectionauthor and moduleauthor directives will be shown in the
 # output. They are ignored by default.
-#show_authors = False
+# show_authors = False
 
 # The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
+pygments_style = "sphinx"
 
 # A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
+# modindex_common_prefix = []
 
 # If true, keep warnings as "system message" paragraphs in the built documents.
-#keep_warnings = False
+# keep_warnings = False
 
 # If true, `todo` and `todoList` produce output, else they produce nothing.
 todo_include_todos = True
@@ -120,31 +120,31 @@
 
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
-html_theme = 'sphinx_rtd_theme'
+html_theme = "sphinx_rtd_theme"
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
 # documentation.
-#html_theme_options = {}
+# html_theme_options = {}
 
 # Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
+# html_theme_path = []
 
 # The name for this set of Sphinx documents.  If None, it defaults to
 # " v documentation".
-#html_title = None
+# html_title = None
 
 # A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
+# html_short_title = None
 
 # The name of an image file (relative to this directory) to place at the top
 # of the sidebar.
-#html_logo = None
+# html_logo = None
 
 # The name of an image file (within the static path) to use as favicon of the
 # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
 # pixels large.
-#html_favicon = None
+# html_favicon = None
 
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
@@ -154,78 +154,75 @@
 # Add any extra paths that contain custom files (such as robots.txt or
 # .htaccess) here, relative to this directory. These files are copied
 # directly to the root of the documentation.
-#html_extra_path = []
+# html_extra_path = []
 
 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
 # using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
+# html_last_updated_fmt = '%b %d, %Y'
 
 # If true, SmartyPants will be used to convert quotes and dashes to
 # typographically correct entities.
-#html_use_smartypants = True
+# html_use_smartypants = True
 
 # Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
+# html_sidebars = {}
 
 # Additional templates that should be rendered to pages, maps page names to
 # template names.
-#html_additional_pages = {}
+# html_additional_pages = {}
 
 # If false, no module index is generated.
-#html_domain_indices = True
+# html_domain_indices = True
 
 # If false, no index is generated.
-#html_use_index = True
+# html_use_index = True
 
 # If true, the index is split into individual pages for each letter.
-#html_split_index = False
+# html_split_index = False
 
 # If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
+# html_show_sourcelink = True
 
 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
+# html_show_sphinx = True
 
 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
+# html_show_copyright = True
 
 # If true, an OpenSearch description file will be output, and all pages will
 # contain a  tag referring to it.  The value of this option must be the
 # base URL from which the finished HTML is served.
-#html_use_opensearch = ''
+# html_use_opensearch = ''
 
 # This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
+# html_file_suffix = None
 
 # Language to be used for generating the HTML full-text search index.
 # Sphinx supports the following languages:
 #   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
 #   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
-#html_search_language = 'en'
+# html_search_language = 'en'
 
 # A dictionary with options for the search language support, empty by default.
 # Now only 'ja' uses this config value
-#html_search_options = {'type': 'default'}
+# html_search_options = {'type': 'default'}
 
 # The name of a javascript file (relative to the configuration directory) that
 # implements a search results scorer. If empty, the default will be used.
-#html_search_scorer = 'scorer.js'
+# html_search_scorer = 'scorer.js'
 
 # Output file base name for HTML help builder.
-htmlhelp_basename = 'google-cloud-error-reporting-doc'
+htmlhelp_basename = "google-cloud-error-reporting-doc"
 
 # -- Options for LaTeX output ---------------------------------------------
 
 latex_elements = {
     # The paper size ('letterpaper' or 'a4paper').
     #'papersize': 'letterpaper',
-
     # The font size ('10pt', '11pt' or '12pt').
     #'pointsize': '10pt',
-
     # Additional stuff for the LaTeX preamble.
     #'preamble': '',
-
     # Latex figure (float) alignment
     #'figure_align': 'htbp',
 }
@@ -234,39 +231,51 @@
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
 latex_documents = [
-    (master_doc, 'google-cloud-error-reporting.tex',
-     u'google-cloud-error-reporting Documentation', author, 'manual'),
+    (
+        master_doc,
+        "google-cloud-error-reporting.tex",
+        u"google-cloud-error-reporting Documentation",
+        author,
+        "manual",
+    )
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
 # the title page.
-#latex_logo = None
+# latex_logo = None
 
 # For "manual" documents, if this is true, then toplevel headings are parts,
 # not chapters.
-#latex_use_parts = False
+# latex_use_parts = False
 
 # If true, show page references after internal links.
-#latex_show_pagerefs = False
+# latex_show_pagerefs = False
 
 # If true, show URL addresses after external links.
-#latex_show_urls = False
+# latex_show_urls = False
 
 # Documents to append as an appendix to all manuals.
-#latex_appendices = []
+# latex_appendices = []
 
 # If false, no module index is generated.
-#latex_domain_indices = True
+# latex_domain_indices = True
 
 # -- Options for manual page output ---------------------------------------
 
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
-man_pages = [(master_doc, 'google-cloud-error-reporting',
-              u'google-cloud-error-reporting Documentation', [author], 1)]
+man_pages = [
+    (
+        master_doc,
+        "google-cloud-error-reporting",
+        u"google-cloud-error-reporting Documentation",
+        [author],
+        1,
+    )
+]
 
 # If true, show URL addresses after external links.
-#man_show_urls = False
+# man_show_urls = False
 
 # -- Options for Texinfo output -------------------------------------------
 
@@ -274,28 +283,33 @@
 # (source start file, target name, title, author,
 #  dir menu entry, description, category)
 texinfo_documents = [
-    (master_doc, 'google-cloud-error-reporting',
-     u'google-cloud-error-reporting Documentation', author,
-     'google-cloud-error-reporting',
-     'GAPIC library for the {metadata.shortName} v1beta1 service', 'APIs'),
+    (
+        master_doc,
+        "google-cloud-error-reporting",
+        u"google-cloud-error-reporting Documentation",
+        author,
+        "google-cloud-error-reporting",
+        "GAPIC library for the {metadata.shortName} v1beta1 service",
+        "APIs",
+    )
 ]
 
 # Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
+# texinfo_appendices = []
 
 # If false, no module index is generated.
-#texinfo_domain_indices = True
+# texinfo_domain_indices = True
 
 # How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
+# texinfo_show_urls = 'footnote'
 
 # If true, do not generate a @detailmenu in the "Top" node's menu.
-#texinfo_no_detailmenu = False
+# texinfo_no_detailmenu = False
 
 # Example configuration for intersphinx: refer to the Python standard library.
 intersphinx_mapping = {
-    'python': ('http://python.readthedocs.org/en/latest/', None),
-    'gax': ('https://gax-python.readthedocs.org/en/latest/', None),
+    "python": ("http://python.readthedocs.org/en/latest/", None),
+    "gax": ("https://gax-python.readthedocs.org/en/latest/", None),
 }
 
 # Napoleon settings
diff --git a/packages/google-cloud-error-reporting/google/__init__.py b/packages/google-cloud-error-reporting/google/__init__.py
index 9ee9bf4342ab..0e1bc5131ba6 100644
--- a/packages/google-cloud-error-reporting/google/__init__.py
+++ b/packages/google-cloud-error-reporting/google/__init__.py
@@ -14,7 +14,9 @@
 
 try:
     import pkg_resources
+
     pkg_resources.declare_namespace(__name__)
 except ImportError:
     import pkgutil
+
     __path__ = pkgutil.extend_path(__path__, __name__)
diff --git a/packages/google-cloud-error-reporting/google/cloud/__init__.py b/packages/google-cloud-error-reporting/google/cloud/__init__.py
index 9ee9bf4342ab..0e1bc5131ba6 100644
--- a/packages/google-cloud-error-reporting/google/cloud/__init__.py
+++ b/packages/google-cloud-error-reporting/google/cloud/__init__.py
@@ -14,7 +14,9 @@
 
 try:
     import pkg_resources
+
     pkg_resources.declare_namespace(__name__)
 except ImportError:
     import pkgutil
+
     __path__ = pkgutil.extend_path(__path__, __name__)
diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py
index e1890b39b3c2..9443b99e3d24 100644
--- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py
+++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py
@@ -16,10 +16,11 @@
 
 
 from pkg_resources import get_distribution
-__version__ = get_distribution('google-cloud-error-reporting').version
+
+__version__ = get_distribution("google-cloud-error-reporting").version
 
 from google.cloud.error_reporting.client import Client
 from google.cloud.error_reporting.client import HTTPContext
 from google.cloud.error_reporting.util import build_flask_context
 
-__all__ = ['__version__', 'Client', 'HTTPContext', 'build_flask_context']
+__all__ = ["__version__", "Client", "HTTPContext", "build_flask_context"]
diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py
index 6ce0bb967a65..227092f9bfb0 100644
--- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py
+++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py
@@ -17,14 +17,11 @@
 from google.api_core.gapic_v1 import client_info
 
 from google.cloud.error_reporting import __version__
-from google.cloud.errorreporting_v1beta1.gapic import (
-    report_errors_service_client)
-from google.cloud.errorreporting_v1beta1.proto import (
-    report_errors_service_pb2)
+from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client
+from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2
 from google.protobuf.json_format import ParseDict
 
-_CLIENT_INFO = client_info.ClientInfo(
-    client_library_version=__version__)
+_CLIENT_INFO = client_info.ClientInfo(client_library_version=__version__)
 
 
 def make_report_error_api(client):
@@ -37,7 +34,8 @@ def make_report_error_api(client):
     :returns: An Error Reporting API instance.
     """
     gax_client = report_errors_service_client.ReportErrorsServiceClient(
-        credentials=client._credentials, client_info=_CLIENT_INFO)
+        credentials=client._credentials, client_info=_CLIENT_INFO
+    )
     return _ErrorReportingGapicApi(gax_client, client.project)
 
 
diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py
index f0e5a0f274ec..b09488914ce9 100644
--- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py
+++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py
@@ -46,9 +46,11 @@ class _ErrorReportingLoggingAPI(object):
                   This parameter should be considered private, and could
                   change in the future.
     """
+
     def __init__(self, project, credentials=None, _http=None):
         self.logging_client = google.cloud.logging.client.Client(
-            project, credentials, _http=_http)
+            project, credentials, _http=_http
+        )
 
     def report_error_event(self, error_report):
         """Report error payload.
@@ -60,5 +62,5 @@ def report_error_event(self, error_report):
             This object should be built using
             :meth:~`google.cloud.error_reporting.client._build_error_report`
         """
-        logger = self.logging_client.logger('errors')
+        logger = self.logging_client.logger("errors")
         logger.log_struct(error_report)
diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py
index c331bd298b06..699fbdb7d97f 100644
--- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py
+++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py
@@ -19,6 +19,7 @@
 
 try:
     from google.cloud.error_reporting._gapic import make_report_error_api
+
     _HAVE_GRPC = True
 except ImportError:  # pragma: NO COVER
     _HAVE_GRPC = False
@@ -61,9 +62,15 @@ class HTTPContext(object):
                       provided in the error report.
     """
 
-    def __init__(self, method=None, url=None,
-                 user_agent=None, referrer=None,
-                 response_status_code=None, remote_ip=None):
+    def __init__(
+        self,
+        method=None,
+        url=None,
+        user_agent=None,
+        referrer=None,
+        response_status_code=None,
+        remote_ip=None,
+    ):
         self.method = method
         self.url = url
         # intentionally camel case for mapping to JSON API expects
@@ -125,17 +132,21 @@ class Client(ClientWithProject):
              set in the environment.
     """
 
-    SCOPE = ('https://www.googleapis.com/auth/cloud-platform',)
+    SCOPE = ("https://www.googleapis.com/auth/cloud-platform",)
     """The scopes required for authenticating as an API consumer."""
 
-    def __init__(self, project=None,
-                 credentials=None,
-                 _http=None,
-                 service=None,
-                 version=None,
-                 _use_grpc=None):
-        super(Client, self).__init__(project=project, credentials=credentials,
-                                     _http=_http)
+    def __init__(
+        self,
+        project=None,
+        credentials=None,
+        _http=None,
+        service=None,
+        version=None,
+        _use_grpc=None,
+    ):
+        super(Client, self).__init__(
+            project=project, credentials=credentials, _http=_http
+        )
         self._report_errors_api = None
 
         self.service = service if service else self.DEFAULT_SERVICE
@@ -145,7 +156,7 @@ def __init__(self, project=None,
         else:
             self._use_grpc = _use_grpc
 
-    DEFAULT_SERVICE = 'python'
+    DEFAULT_SERVICE = "python"
 
     @property
     def report_errors_api(self):
@@ -166,14 +177,13 @@ def report_errors_api(self):
                 self._report_errors_api = make_report_error_api(self)
             else:
                 self._report_errors_api = _ErrorReportingLoggingAPI(
-                    self.project, self._credentials, self._http)
+                    self.project, self._credentials, self._http
+                )
         return self._report_errors_api
 
-    def _build_error_report(self,
-                            message,
-                            report_location=None,
-                            http_context=None,
-                            user=None):
+    def _build_error_report(
+        self, message, report_location=None, http_context=None, user=None
+    ):
         """Builds the Error Reporting object to report.
 
         This builds the object according to
@@ -211,37 +221,34 @@ def _build_error_report(self,
                   the API.
          """
         payload = {
-            'serviceContext': {
-                'service': self.service,
-            },
-            'message': '{0}'.format(message)
+            "serviceContext": {"service": self.service},
+            "message": "{0}".format(message),
         }
 
         if self.version:
-            payload['serviceContext']['version'] = self.version
+            payload["serviceContext"]["version"] = self.version
 
         if report_location or http_context or user:
-            payload['context'] = {}
+            payload["context"] = {}
 
         if report_location:
-            payload['context']['reportLocation'] = report_location
+            payload["context"]["reportLocation"] = report_location
 
         if http_context:
             http_context_dict = http_context.__dict__
             # strip out None values
-            payload['context']['httpRequest'] = {
-                key: value for key, value in six.iteritems(http_context_dict)
+            payload["context"]["httpRequest"] = {
+                key: value
+                for key, value in six.iteritems(http_context_dict)
                 if value is not None
             }
         if user:
-            payload['context']['user'] = user
+            payload["context"]["user"] = user
         return payload
 
-    def _send_error_report(self,
-                           message,
-                           report_location=None,
-                           http_context=None,
-                           user=None):
+    def _send_error_report(
+        self, message, report_location=None, http_context=None, user=None
+    ):
         """Makes the call to the Error Reporting API.
 
         This is the lower-level interface to build and send the payload,
@@ -275,8 +282,9 @@ def _send_error_report(self,
                      use other data, such as remote IP address,
                      to distinguish affected users.
         """
-        error_report = self._build_error_report(message, report_location,
-                                                http_context, user)
+        error_report = self._build_error_report(
+            message, report_location, http_context, user
+        )
         self.report_errors_api.report_error_event(error_report)
 
     def report(self, message, http_context=None, user=None):
@@ -312,15 +320,17 @@ def report(self, message, http_context=None, user=None):
         line_number = last_call[1]
         function_name = last_call[2]
         report_location = {
-            'filePath': file_path,
-            'lineNumber': line_number,
-            'functionName': function_name
+            "filePath": file_path,
+            "lineNumber": line_number,
+            "functionName": function_name,
         }
 
-        self._send_error_report(message,
-                                http_context=http_context,
-                                user=user,
-                                report_location=report_location)
+        self._send_error_report(
+            message,
+            http_context=http_context,
+            user=user,
+            report_location=report_location,
+        )
 
     def report_exception(self, http_context=None, user=None):
         """ Reports the details of the latest exceptions to Stackdriver Error
@@ -346,6 +356,6 @@ def report_exception(self, http_context=None, user=None):
                 >>>     except Exception:
                 >>>         client.report_exception()
         """
-        self._send_error_report(traceback.format_exc(),
-                                http_context=http_context,
-                                user=user)
+        self._send_error_report(
+            traceback.format_exc(), http_context=http_context, user=user
+        )
diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py
index 8cbe4bdea471..151540cdb855 100644
--- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py
+++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py
@@ -38,7 +38,10 @@ def build_flask_context(request):
     :returns: An HTTPContext object ready to be sent to the Stackdriver Error
               Reporting API.
     """
-    return HTTPContext(url=request.url, method=request.method,
-                       user_agent=request.user_agent.string,
-                       referrer=request.referrer,
-                       remote_ip=request.remote_addr)
+    return HTTPContext(
+        url=request.url,
+        method=request.method,
+        user_agent=request.user_agent.string,
+        referrer=request.referrer,
+        remote_ip=request.remote_addr,
+    )
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py
index 89c9fe7c639b..9553e4a4738c 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py
@@ -16,36 +16,30 @@
 
 from google.cloud.errorreporting_v1beta1 import types
 from google.cloud.errorreporting_v1beta1.gapic import enums
-from google.cloud.errorreporting_v1beta1.gapic import (
-    error_group_service_client)
-from google.cloud.errorreporting_v1beta1.gapic import (
-    error_stats_service_client)
-from google.cloud.errorreporting_v1beta1.gapic import (
-    report_errors_service_client)
+from google.cloud.errorreporting_v1beta1.gapic import error_group_service_client
+from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client
+from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client
 
 
-class ErrorGroupServiceClient(
-        error_group_service_client.ErrorGroupServiceClient):
+class ErrorGroupServiceClient(error_group_service_client.ErrorGroupServiceClient):
     __doc__ = error_group_service_client.ErrorGroupServiceClient.__doc__
     enums = enums
 
 
-class ErrorStatsServiceClient(
-        error_stats_service_client.ErrorStatsServiceClient):
+class ErrorStatsServiceClient(error_stats_service_client.ErrorStatsServiceClient):
     __doc__ = error_stats_service_client.ErrorStatsServiceClient.__doc__
     enums = enums
 
 
-class ReportErrorsServiceClient(
-        report_errors_service_client.ReportErrorsServiceClient):
+class ReportErrorsServiceClient(report_errors_service_client.ReportErrorsServiceClient):
     __doc__ = report_errors_service_client.ReportErrorsServiceClient.__doc__
     enums = enums
 
 
 __all__ = (
-    'enums',
-    'types',
-    'ErrorGroupServiceClient',
-    'ErrorStatsServiceClient',
-    'ReportErrorsServiceClient',
+    "enums",
+    "types",
+    "ErrorGroupServiceClient",
+    "ErrorStatsServiceClient",
+    "ReportErrorsServiceClient",
 )
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py
index 0d176b182c42..056758bbfe7e 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py
@@ -35,6 +35,7 @@ class TimedCountAlignment(enum.IntEnum):
       period. This can result in a different size of the
       first time period.
     """
+
     ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0
     ALIGNMENT_EQUAL_ROUNDED = 1
     ALIGNMENT_EQUAL_AT_END = 2
@@ -52,6 +53,7 @@ class ErrorGroupOrder(enum.IntEnum):
       CREATED_DESC (int): Timestamp when the group was created in descending order.
       AFFECTED_USERS_DESC (int): Number of affected users in the given time window in descending order.
     """
+
     GROUP_ORDER_UNSPECIFIED = 0
     COUNT_DESC = 1
     LAST_SEEN_DESC = 2
@@ -77,6 +79,7 @@ class Period(enum.IntEnum):
           PERIOD_30_DAYS (int): Retrieve data for the last 30 days.
           Recommended minimum timed count duration: 1 day.
         """
+
         PERIOD_UNSPECIFIED = 0
         PERIOD_1_HOUR = 1
         PERIOD_6_HOURS = 2
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py
index 760e86572a31..08d90ac63832 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py
@@ -28,24 +28,27 @@
 
 from google.cloud.errorreporting_v1beta1.gapic import enums
 from google.cloud.errorreporting_v1beta1.gapic import error_group_service_client_config
-from google.cloud.errorreporting_v1beta1.gapic.transports import error_group_service_grpc_transport
+from google.cloud.errorreporting_v1beta1.gapic.transports import (
+    error_group_service_grpc_transport,
+)
 from google.cloud.errorreporting_v1beta1.proto import common_pb2
 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2
 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc
 
 _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
-    'google-cloud-error-reporting', ).version
+    "google-cloud-error-reporting"
+).version
 
 
 class ErrorGroupServiceClient(object):
     """Service for retrieving and updating individual error groups."""
 
-    SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443'
+    SERVICE_ADDRESS = "clouderrorreporting.googleapis.com:443"
     """The default address of the service."""
 
     # The name of the interface for this client. This is the key used to
     # find the method configuration in the client_config dictionary.
-    _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService'
+    _INTERFACE_NAME = "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService"
 
     @classmethod
     def from_service_account_file(cls, filename, *args, **kwargs):
@@ -61,9 +64,8 @@ def from_service_account_file(cls, filename, *args, **kwargs):
         Returns:
             ErrorGroupServiceClient: The constructed client.
         """
-        credentials = service_account.Credentials.from_service_account_file(
-            filename)
-        kwargs['credentials'] = credentials
+        credentials = service_account.Credentials.from_service_account_file(filename)
+        kwargs["credentials"] = credentials
         return cls(*args, **kwargs)
 
     from_service_account_json = from_service_account_file
@@ -72,17 +74,17 @@ def from_service_account_file(cls, filename, *args, **kwargs):
     def group_path(cls, project, group):
         """Return a fully-qualified group string."""
         return google.api_core.path_template.expand(
-            'projects/{project}/groups/{group}',
-            project=project,
-            group=group,
+            "projects/{project}/groups/{group}", project=project, group=group
         )
 
-    def __init__(self,
-                 transport=None,
-                 channel=None,
-                 credentials=None,
-                 client_config=None,
-                 client_info=None):
+    def __init__(
+        self,
+        transport=None,
+        channel=None,
+        credentials=None,
+        client_config=None,
+        client_info=None,
+    ):
         """Constructor.
 
         Args:
@@ -116,18 +118,19 @@ def __init__(self,
         # Raise deprecation warnings for things we want to go away.
         if client_config is not None:
             warnings.warn(
-                'The `client_config` argument is deprecated.',
+                "The `client_config` argument is deprecated.",
                 PendingDeprecationWarning,
-                stacklevel=2)
+                stacklevel=2,
+            )
         else:
             client_config = error_group_service_client_config.config
 
         if channel:
             warnings.warn(
-                'The `channel` argument is deprecated; use '
-                '`transport` instead.',
+                "The `channel` argument is deprecated; use " "`transport` instead.",
                 PendingDeprecationWarning,
-                stacklevel=2)
+                stacklevel=2,
+            )
 
         # Instantiate the transport.
         # The transport is responsible for handling serialization and
@@ -136,25 +139,24 @@ def __init__(self,
             if callable(transport):
                 self.transport = transport(
                     credentials=credentials,
-                    default_class=error_group_service_grpc_transport.
-                    ErrorGroupServiceGrpcTransport,
+                    default_class=error_group_service_grpc_transport.ErrorGroupServiceGrpcTransport,
                 )
             else:
                 if credentials:
                     raise ValueError(
-                        'Received both a transport instance and '
-                        'credentials; these are mutually exclusive.')
+                        "Received both a transport instance and "
+                        "credentials; these are mutually exclusive."
+                    )
                 self.transport = transport
         else:
             self.transport = error_group_service_grpc_transport.ErrorGroupServiceGrpcTransport(
-                address=self.SERVICE_ADDRESS,
-                channel=channel,
-                credentials=credentials,
+                address=self.SERVICE_ADDRESS, channel=channel, credentials=credentials
             )
 
         if client_info is None:
             client_info = google.api_core.gapic_v1.client_info.ClientInfo(
-                gapic_version=_GAPIC_LIBRARY_VERSION, )
+                gapic_version=_GAPIC_LIBRARY_VERSION
+            )
         else:
             client_info.gapic_version = _GAPIC_LIBRARY_VERSION
         self._client_info = client_info
@@ -164,7 +166,8 @@ def __init__(self,
         # (Ordinarily, these are the defaults specified in the `*_config.py`
         # file next to this one.)
         self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
-            client_config['interfaces'][self._INTERFACE_NAME], )
+            client_config["interfaces"][self._INTERFACE_NAME]
+        )
 
         # Save a dictionary of cached API call functions.
         # These are the actual callables which invoke the proper
@@ -173,11 +176,13 @@ def __init__(self,
         self._inner_api_calls = {}
 
     # Service calls
-    def get_group(self,
-                  group_name,
-                  retry=google.api_core.gapic_v1.method.DEFAULT,
-                  timeout=google.api_core.gapic_v1.method.DEFAULT,
-                  metadata=None):
+    def get_group(
+        self,
+        group_name,
+        retry=google.api_core.gapic_v1.method.DEFAULT,
+        timeout=google.api_core.gapic_v1.method.DEFAULT,
+        metadata=None,
+    ):
         """
         Get the specified group.
 
@@ -216,25 +221,28 @@ def get_group(self,
             ValueError: If the parameters are invalid.
         """
         # Wrap the transport method to add retry and timeout logic.
-        if 'get_group' not in self._inner_api_calls:
+        if "get_group" not in self._inner_api_calls:
             self._inner_api_calls[
-                'get_group'] = google.api_core.gapic_v1.method.wrap_method(
-                    self.transport.get_group,
-                    default_retry=self._method_configs['GetGroup'].retry,
-                    default_timeout=self._method_configs['GetGroup'].timeout,
-                    client_info=self._client_info,
-                )
+                "get_group"
+            ] = google.api_core.gapic_v1.method.wrap_method(
+                self.transport.get_group,
+                default_retry=self._method_configs["GetGroup"].retry,
+                default_timeout=self._method_configs["GetGroup"].timeout,
+                client_info=self._client_info,
+            )
 
-        request = error_group_service_pb2.GetGroupRequest(
-            group_name=group_name, )
-        return self._inner_api_calls['get_group'](
-            request, retry=retry, timeout=timeout, metadata=metadata)
+        request = error_group_service_pb2.GetGroupRequest(group_name=group_name)
+        return self._inner_api_calls["get_group"](
+            request, retry=retry, timeout=timeout, metadata=metadata
+        )
 
-    def update_group(self,
-                     group,
-                     retry=google.api_core.gapic_v1.method.DEFAULT,
-                     timeout=google.api_core.gapic_v1.method.DEFAULT,
-                     metadata=None):
+    def update_group(
+        self,
+        group,
+        retry=google.api_core.gapic_v1.method.DEFAULT,
+        timeout=google.api_core.gapic_v1.method.DEFAULT,
+        metadata=None,
+    ):
         """
         Replace the data for the specified group.
         Fails if the group does not exist.
@@ -274,16 +282,17 @@ def update_group(self,
             ValueError: If the parameters are invalid.
         """
         # Wrap the transport method to add retry and timeout logic.
-        if 'update_group' not in self._inner_api_calls:
+        if "update_group" not in self._inner_api_calls:
             self._inner_api_calls[
-                'update_group'] = google.api_core.gapic_v1.method.wrap_method(
-                    self.transport.update_group,
-                    default_retry=self._method_configs['UpdateGroup'].retry,
-                    default_timeout=self._method_configs['UpdateGroup'].
-                    timeout,
-                    client_info=self._client_info,
-                )
+                "update_group"
+            ] = google.api_core.gapic_v1.method.wrap_method(
+                self.transport.update_group,
+                default_retry=self._method_configs["UpdateGroup"].retry,
+                default_timeout=self._method_configs["UpdateGroup"].timeout,
+                client_info=self._client_info,
+            )
 
-        request = error_group_service_pb2.UpdateGroupRequest(group=group, )
-        return self._inner_api_calls['update_group'](
-            request, retry=retry, timeout=timeout, metadata=metadata)
+        request = error_group_service_pb2.UpdateGroupRequest(group=group)
+        return self._inner_api_calls["update_group"](
+            request, retry=retry, timeout=timeout, metadata=metadata
+        )
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py
index cff4fca5a4c5..e70ec324be62 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py
@@ -3,7 +3,7 @@
         "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService": {
             "retry_codes": {
                 "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
-                "non_idempotent": []
+                "non_idempotent": [],
             },
             "retry_params": {
                 "default": {
@@ -13,21 +13,21 @@
                     "initial_rpc_timeout_millis": 20000,
                     "rpc_timeout_multiplier": 1.0,
                     "max_rpc_timeout_millis": 20000,
-                    "total_timeout_millis": 600000
+                    "total_timeout_millis": 600000,
                 }
             },
             "methods": {
                 "GetGroup": {
                     "timeout_millis": 60000,
                     "retry_codes_name": "idempotent",
-                    "retry_params_name": "default"
+                    "retry_params_name": "default",
                 },
                 "UpdateGroup": {
                     "timeout_millis": 60000,
                     "retry_codes_name": "idempotent",
-                    "retry_params_name": "default"
-                }
-            }
+                    "retry_params_name": "default",
+                },
+            },
         }
     }
 }
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py
index 12e0c9f4261b..286a6ca66e46 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py
@@ -30,7 +30,9 @@
 
 from google.cloud.errorreporting_v1beta1.gapic import enums
 from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client_config
-from google.cloud.errorreporting_v1beta1.gapic.transports import error_stats_service_grpc_transport
+from google.cloud.errorreporting_v1beta1.gapic.transports import (
+    error_stats_service_grpc_transport,
+)
 from google.cloud.errorreporting_v1beta1.proto import common_pb2
 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2
 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc
@@ -40,7 +42,8 @@
 from google.protobuf import timestamp_pb2
 
 _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
-    'google-cloud-error-reporting', ).version
+    "google-cloud-error-reporting"
+).version
 
 
 class ErrorStatsServiceClient(object):
@@ -49,12 +52,12 @@ class ErrorStatsServiceClient(object):
     individual events.
     """
 
-    SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443'
+    SERVICE_ADDRESS = "clouderrorreporting.googleapis.com:443"
     """The default address of the service."""
 
     # The name of the interface for this client. This is the key used to
     # find the method configuration in the client_config dictionary.
-    _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService'
+    _INTERFACE_NAME = "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService"
 
     @classmethod
     def from_service_account_file(cls, filename, *args, **kwargs):
@@ -70,9 +73,8 @@ def from_service_account_file(cls, filename, *args, **kwargs):
         Returns:
             ErrorStatsServiceClient: The constructed client.
         """
-        credentials = service_account.Credentials.from_service_account_file(
-            filename)
-        kwargs['credentials'] = credentials
+        credentials = service_account.Credentials.from_service_account_file(filename)
+        kwargs["credentials"] = credentials
         return cls(*args, **kwargs)
 
     from_service_account_json = from_service_account_file
@@ -81,16 +83,17 @@ def from_service_account_file(cls, filename, *args, **kwargs):
     def project_path(cls, project):
         """Return a fully-qualified project string."""
         return google.api_core.path_template.expand(
-            'projects/{project}',
-            project=project,
+            "projects/{project}", project=project
         )
 
-    def __init__(self,
-                 transport=None,
-                 channel=None,
-                 credentials=None,
-                 client_config=None,
-                 client_info=None):
+    def __init__(
+        self,
+        transport=None,
+        channel=None,
+        credentials=None,
+        client_config=None,
+        client_info=None,
+    ):
         """Constructor.
 
         Args:
@@ -124,18 +127,19 @@ def __init__(self,
         # Raise deprecation warnings for things we want to go away.
         if client_config is not None:
             warnings.warn(
-                'The `client_config` argument is deprecated.',
+                "The `client_config` argument is deprecated.",
                 PendingDeprecationWarning,
-                stacklevel=2)
+                stacklevel=2,
+            )
         else:
             client_config = error_stats_service_client_config.config
 
         if channel:
             warnings.warn(
-                'The `channel` argument is deprecated; use '
-                '`transport` instead.',
+                "The `channel` argument is deprecated; use " "`transport` instead.",
                 PendingDeprecationWarning,
-                stacklevel=2)
+                stacklevel=2,
+            )
 
         # Instantiate the transport.
         # The transport is responsible for handling serialization and
@@ -144,25 +148,24 @@ def __init__(self,
             if callable(transport):
                 self.transport = transport(
                     credentials=credentials,
-                    default_class=error_stats_service_grpc_transport.
-                    ErrorStatsServiceGrpcTransport,
+                    default_class=error_stats_service_grpc_transport.ErrorStatsServiceGrpcTransport,
                 )
             else:
                 if credentials:
                     raise ValueError(
-                        'Received both a transport instance and '
-                        'credentials; these are mutually exclusive.')
+                        "Received both a transport instance and "
+                        "credentials; these are mutually exclusive."
+                    )
                 self.transport = transport
         else:
             self.transport = error_stats_service_grpc_transport.ErrorStatsServiceGrpcTransport(
-                address=self.SERVICE_ADDRESS,
-                channel=channel,
-                credentials=credentials,
+                address=self.SERVICE_ADDRESS, channel=channel, credentials=credentials
             )
 
         if client_info is None:
             client_info = google.api_core.gapic_v1.client_info.ClientInfo(
-                gapic_version=_GAPIC_LIBRARY_VERSION, )
+                gapic_version=_GAPIC_LIBRARY_VERSION
+            )
         else:
             client_info.gapic_version = _GAPIC_LIBRARY_VERSION
         self._client_info = client_info
@@ -172,7 +175,8 @@ def __init__(self,
         # (Ordinarily, these are the defaults specified in the `*_config.py`
         # file next to this one.)
         self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
-            client_config['interfaces'][self._INTERFACE_NAME], )
+            client_config["interfaces"][self._INTERFACE_NAME]
+        )
 
         # Save a dictionary of cached API call functions.
         # These are the actual callables which invoke the proper
@@ -181,19 +185,21 @@ def __init__(self,
         self._inner_api_calls = {}
 
     # Service calls
-    def list_group_stats(self,
-                         project_name,
-                         time_range,
-                         group_id=None,
-                         service_filter=None,
-                         timed_count_duration=None,
-                         alignment=None,
-                         alignment_time=None,
-                         order=None,
-                         page_size=None,
-                         retry=google.api_core.gapic_v1.method.DEFAULT,
-                         timeout=google.api_core.gapic_v1.method.DEFAULT,
-                         metadata=None):
+    def list_group_stats(
+        self,
+        project_name,
+        time_range,
+        group_id=None,
+        service_filter=None,
+        timed_count_duration=None,
+        alignment=None,
+        alignment_time=None,
+        order=None,
+        page_size=None,
+        retry=google.api_core.gapic_v1.method.DEFAULT,
+        timeout=google.api_core.gapic_v1.method.DEFAULT,
+        metadata=None,
+    ):
         """
         Lists the specified groups.
 
@@ -284,15 +290,15 @@ def list_group_stats(self,
             ValueError: If the parameters are invalid.
         """
         # Wrap the transport method to add retry and timeout logic.
-        if 'list_group_stats' not in self._inner_api_calls:
+        if "list_group_stats" not in self._inner_api_calls:
             self._inner_api_calls[
-                'list_group_stats'] = google.api_core.gapic_v1.method.wrap_method(
-                    self.transport.list_group_stats,
-                    default_retry=self._method_configs['ListGroupStats'].retry,
-                    default_timeout=self._method_configs['ListGroupStats'].
-                    timeout,
-                    client_info=self._client_info,
-                )
+                "list_group_stats"
+            ] = google.api_core.gapic_v1.method.wrap_method(
+                self.transport.list_group_stats,
+                default_retry=self._method_configs["ListGroupStats"].retry,
+                default_timeout=self._method_configs["ListGroupStats"].timeout,
+                client_info=self._client_info,
+            )
 
         request = error_stats_service_pb2.ListGroupStatsRequest(
             project_name=project_name,
@@ -308,26 +314,29 @@ def list_group_stats(self,
         iterator = google.api_core.page_iterator.GRPCIterator(
             client=None,
             method=functools.partial(
-                self._inner_api_calls['list_group_stats'],
+                self._inner_api_calls["list_group_stats"],
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata),
+                metadata=metadata,
+            ),
             request=request,
-            items_field='error_group_stats',
-            request_token_field='page_token',
-            response_token_field='next_page_token',
+            items_field="error_group_stats",
+            request_token_field="page_token",
+            response_token_field="next_page_token",
         )
         return iterator
 
-    def list_events(self,
-                    project_name,
-                    group_id,
-                    service_filter=None,
-                    time_range=None,
-                    page_size=None,
-                    retry=google.api_core.gapic_v1.method.DEFAULT,
-                    timeout=google.api_core.gapic_v1.method.DEFAULT,
-                    metadata=None):
+    def list_events(
+        self,
+        project_name,
+        group_id,
+        service_filter=None,
+        time_range=None,
+        page_size=None,
+        retry=google.api_core.gapic_v1.method.DEFAULT,
+        timeout=google.api_core.gapic_v1.method.DEFAULT,
+        metadata=None,
+    ):
         """
         Lists the specified events.
 
@@ -401,14 +410,15 @@ def list_events(self,
             ValueError: If the parameters are invalid.
         """
         # Wrap the transport method to add retry and timeout logic.
-        if 'list_events' not in self._inner_api_calls:
+        if "list_events" not in self._inner_api_calls:
             self._inner_api_calls[
-                'list_events'] = google.api_core.gapic_v1.method.wrap_method(
-                    self.transport.list_events,
-                    default_retry=self._method_configs['ListEvents'].retry,
-                    default_timeout=self._method_configs['ListEvents'].timeout,
-                    client_info=self._client_info,
-                )
+                "list_events"
+            ] = google.api_core.gapic_v1.method.wrap_method(
+                self.transport.list_events,
+                default_retry=self._method_configs["ListEvents"].retry,
+                default_timeout=self._method_configs["ListEvents"].timeout,
+                client_info=self._client_info,
+            )
 
         request = error_stats_service_pb2.ListEventsRequest(
             project_name=project_name,
@@ -420,22 +430,25 @@ def list_events(self,
         iterator = google.api_core.page_iterator.GRPCIterator(
             client=None,
             method=functools.partial(
-                self._inner_api_calls['list_events'],
+                self._inner_api_calls["list_events"],
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata),
+                metadata=metadata,
+            ),
             request=request,
-            items_field='error_events',
-            request_token_field='page_token',
-            response_token_field='next_page_token',
+            items_field="error_events",
+            request_token_field="page_token",
+            response_token_field="next_page_token",
         )
         return iterator
 
-    def delete_events(self,
-                      project_name,
-                      retry=google.api_core.gapic_v1.method.DEFAULT,
-                      timeout=google.api_core.gapic_v1.method.DEFAULT,
-                      metadata=None):
+    def delete_events(
+        self,
+        project_name,
+        retry=google.api_core.gapic_v1.method.DEFAULT,
+        timeout=google.api_core.gapic_v1.method.DEFAULT,
+        metadata=None,
+    ):
         """
         Deletes all error events of a given project.
 
@@ -473,17 +486,17 @@ def delete_events(self,
             ValueError: If the parameters are invalid.
         """
         # Wrap the transport method to add retry and timeout logic.
-        if 'delete_events' not in self._inner_api_calls:
+        if "delete_events" not in self._inner_api_calls:
             self._inner_api_calls[
-                'delete_events'] = google.api_core.gapic_v1.method.wrap_method(
-                    self.transport.delete_events,
-                    default_retry=self._method_configs['DeleteEvents'].retry,
-                    default_timeout=self._method_configs['DeleteEvents'].
-                    timeout,
-                    client_info=self._client_info,
-                )
+                "delete_events"
+            ] = google.api_core.gapic_v1.method.wrap_method(
+                self.transport.delete_events,
+                default_retry=self._method_configs["DeleteEvents"].retry,
+                default_timeout=self._method_configs["DeleteEvents"].timeout,
+                client_info=self._client_info,
+            )
 
-        request = error_stats_service_pb2.DeleteEventsRequest(
-            project_name=project_name, )
-        return self._inner_api_calls['delete_events'](
-            request, retry=retry, timeout=timeout, metadata=metadata)
+        request = error_stats_service_pb2.DeleteEventsRequest(project_name=project_name)
+        return self._inner_api_calls["delete_events"](
+            request, retry=retry, timeout=timeout, metadata=metadata
+        )
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py
index 72c655421477..fead94c5b733 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py
@@ -3,7 +3,7 @@
         "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService": {
             "retry_codes": {
                 "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
-                "non_idempotent": []
+                "non_idempotent": [],
             },
             "retry_params": {
                 "default": {
@@ -13,26 +13,26 @@
                     "initial_rpc_timeout_millis": 20000,
                     "rpc_timeout_multiplier": 1.0,
                     "max_rpc_timeout_millis": 20000,
-                    "total_timeout_millis": 600000
+                    "total_timeout_millis": 600000,
                 }
             },
             "methods": {
                 "ListGroupStats": {
                     "timeout_millis": 60000,
                     "retry_codes_name": "idempotent",
-                    "retry_params_name": "default"
+                    "retry_params_name": "default",
                 },
                 "ListEvents": {
                     "timeout_millis": 60000,
                     "retry_codes_name": "idempotent",
-                    "retry_params_name": "default"
+                    "retry_params_name": "default",
                 },
                 "DeleteEvents": {
                     "timeout_millis": 60000,
                     "retry_codes_name": "idempotent",
-                    "retry_params_name": "default"
-                }
-            }
+                    "retry_params_name": "default",
+                },
+            },
         }
     }
 }
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py
index fc0c5fa31cf0..77d5c6fc9d1a 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py
@@ -27,8 +27,12 @@
 import grpc
 
 from google.cloud.errorreporting_v1beta1.gapic import enums
-from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client_config
-from google.cloud.errorreporting_v1beta1.gapic.transports import report_errors_service_grpc_transport
+from google.cloud.errorreporting_v1beta1.gapic import (
+    report_errors_service_client_config,
+)
+from google.cloud.errorreporting_v1beta1.gapic.transports import (
+    report_errors_service_grpc_transport,
+)
 from google.cloud.errorreporting_v1beta1.proto import common_pb2
 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2
 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc
@@ -40,18 +44,19 @@
 from google.protobuf import timestamp_pb2
 
 _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
-    'google-cloud-error-reporting', ).version
+    "google-cloud-error-reporting"
+).version
 
 
 class ReportErrorsServiceClient(object):
     """An API for reporting error events."""
 
-    SERVICE_ADDRESS = 'clouderrorreporting.googleapis.com:443'
+    SERVICE_ADDRESS = "clouderrorreporting.googleapis.com:443"
     """The default address of the service."""
 
     # The name of the interface for this client. This is the key used to
     # find the method configuration in the client_config dictionary.
-    _INTERFACE_NAME = 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService'
+    _INTERFACE_NAME = "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService"
 
     @classmethod
     def from_service_account_file(cls, filename, *args, **kwargs):
@@ -67,9 +72,8 @@ def from_service_account_file(cls, filename, *args, **kwargs):
         Returns:
             ReportErrorsServiceClient: The constructed client.
         """
-        credentials = service_account.Credentials.from_service_account_file(
-            filename)
-        kwargs['credentials'] = credentials
+        credentials = service_account.Credentials.from_service_account_file(filename)
+        kwargs["credentials"] = credentials
         return cls(*args, **kwargs)
 
     from_service_account_json = from_service_account_file
@@ -78,16 +82,17 @@ def from_service_account_file(cls, filename, *args, **kwargs):
     def project_path(cls, project):
         """Return a fully-qualified project string."""
         return google.api_core.path_template.expand(
-            'projects/{project}',
-            project=project,
+            "projects/{project}", project=project
         )
 
-    def __init__(self,
-                 transport=None,
-                 channel=None,
-                 credentials=None,
-                 client_config=None,
-                 client_info=None):
+    def __init__(
+        self,
+        transport=None,
+        channel=None,
+        credentials=None,
+        client_config=None,
+        client_info=None,
+    ):
         """Constructor.
 
         Args:
@@ -121,18 +126,19 @@ def __init__(self,
         # Raise deprecation warnings for things we want to go away.
         if client_config is not None:
             warnings.warn(
-                'The `client_config` argument is deprecated.',
+                "The `client_config` argument is deprecated.",
                 PendingDeprecationWarning,
-                stacklevel=2)
+                stacklevel=2,
+            )
         else:
             client_config = report_errors_service_client_config.config
 
         if channel:
             warnings.warn(
-                'The `channel` argument is deprecated; use '
-                '`transport` instead.',
+                "The `channel` argument is deprecated; use " "`transport` instead.",
                 PendingDeprecationWarning,
-                stacklevel=2)
+                stacklevel=2,
+            )
 
         # Instantiate the transport.
         # The transport is responsible for handling serialization and
@@ -141,25 +147,24 @@ def __init__(self,
             if callable(transport):
                 self.transport = transport(
                     credentials=credentials,
-                    default_class=report_errors_service_grpc_transport.
-                    ReportErrorsServiceGrpcTransport,
+                    default_class=report_errors_service_grpc_transport.ReportErrorsServiceGrpcTransport,
                 )
             else:
                 if credentials:
                     raise ValueError(
-                        'Received both a transport instance and '
-                        'credentials; these are mutually exclusive.')
+                        "Received both a transport instance and "
+                        "credentials; these are mutually exclusive."
+                    )
                 self.transport = transport
         else:
             self.transport = report_errors_service_grpc_transport.ReportErrorsServiceGrpcTransport(
-                address=self.SERVICE_ADDRESS,
-                channel=channel,
-                credentials=credentials,
+                address=self.SERVICE_ADDRESS, channel=channel, credentials=credentials
             )
 
         if client_info is None:
             client_info = google.api_core.gapic_v1.client_info.ClientInfo(
-                gapic_version=_GAPIC_LIBRARY_VERSION, )
+                gapic_version=_GAPIC_LIBRARY_VERSION
+            )
         else:
             client_info.gapic_version = _GAPIC_LIBRARY_VERSION
         self._client_info = client_info
@@ -169,7 +174,8 @@ def __init__(self,
         # (Ordinarily, these are the defaults specified in the `*_config.py`
         # file next to this one.)
         self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
-            client_config['interfaces'][self._INTERFACE_NAME], )
+            client_config["interfaces"][self._INTERFACE_NAME]
+        )
 
         # Save a dictionary of cached API call functions.
         # These are the actual callables which invoke the proper
@@ -178,12 +184,14 @@ def __init__(self,
         self._inner_api_calls = {}
 
     # Service calls
-    def report_error_event(self,
-                           project_name,
-                           event,
-                           retry=google.api_core.gapic_v1.method.DEFAULT,
-                           timeout=google.api_core.gapic_v1.method.DEFAULT,
-                           metadata=None):
+    def report_error_event(
+        self,
+        project_name,
+        event,
+        retry=google.api_core.gapic_v1.method.DEFAULT,
+        timeout=google.api_core.gapic_v1.method.DEFAULT,
+        metadata=None,
+    ):
         """
         Report an individual error event.
 
@@ -228,20 +236,19 @@ def report_error_event(self,
             ValueError: If the parameters are invalid.
         """
         # Wrap the transport method to add retry and timeout logic.
-        if 'report_error_event' not in self._inner_api_calls:
+        if "report_error_event" not in self._inner_api_calls:
             self._inner_api_calls[
-                'report_error_event'] = google.api_core.gapic_v1.method.wrap_method(
-                    self.transport.report_error_event,
-                    default_retry=self._method_configs['ReportErrorEvent'].
-                    retry,
-                    default_timeout=self._method_configs['ReportErrorEvent'].
-                    timeout,
-                    client_info=self._client_info,
-                )
+                "report_error_event"
+            ] = google.api_core.gapic_v1.method.wrap_method(
+                self.transport.report_error_event,
+                default_retry=self._method_configs["ReportErrorEvent"].retry,
+                default_timeout=self._method_configs["ReportErrorEvent"].timeout,
+                client_info=self._client_info,
+            )
 
         request = report_errors_service_pb2.ReportErrorEventRequest(
-            project_name=project_name,
-            event=event,
+            project_name=project_name, event=event
+        )
+        return self._inner_api_calls["report_error_event"](
+            request, retry=retry, timeout=timeout, metadata=metadata
         )
-        return self._inner_api_calls['report_error_event'](
-            request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py
index a84dde22b57c..cfefc7eb95f2 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py
@@ -3,7 +3,7 @@
         "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService": {
             "retry_codes": {
                 "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
-                "non_idempotent": []
+                "non_idempotent": [],
             },
             "retry_params": {
                 "default": {
@@ -13,16 +13,16 @@
                     "initial_rpc_timeout_millis": 20000,
                     "rpc_timeout_multiplier": 1.0,
                     "max_rpc_timeout_millis": 20000,
-                    "total_timeout_millis": 600000
+                    "total_timeout_millis": 600000,
                 }
             },
             "methods": {
                 "ReportErrorEvent": {
                     "timeout_millis": 60000,
                     "retry_codes_name": "non_idempotent",
-                    "retry_params_name": "default"
+                    "retry_params_name": "default",
                 }
-            }
+            },
         }
     }
 }
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py
index d7d5f051d4b3..4bd458c97388 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py
@@ -27,14 +27,17 @@ class ErrorGroupServiceGrpcTransport(object):
     which can be used to take advantage of advanced
     features of gRPC.
     """
+
     # The scopes needed to make gRPC calls to all of the methods defined
     # in this service.
-    _OAUTH_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', )
-
-    def __init__(self,
-                 channel=None,
-                 credentials=None,
-                 address='clouderrorreporting.googleapis.com:443'):
+    _OAUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",)
+
+    def __init__(
+        self,
+        channel=None,
+        credentials=None,
+        address="clouderrorreporting.googleapis.com:443",
+    ):
         """Instantiate the transport class.
 
         Args:
@@ -52,29 +55,27 @@ def __init__(self,
         # exception (channels come with credentials baked in already).
         if channel is not None and credentials is not None:
             raise ValueError(
-                'The `channel` and `credentials` arguments are mutually '
-                'exclusive.', )
+                "The `channel` and `credentials` arguments are mutually " "exclusive."
+            )
 
         # Create the channel.
         if channel is None:
-            channel = self.create_channel(
-                address=address,
-                credentials=credentials,
-            )
+            channel = self.create_channel(address=address, credentials=credentials)
 
         self._channel = channel
 
         # gRPC uses objects called "stubs" that are bound to the
         # channel and provide a basic method for each RPC.
         self._stubs = {
-            'error_group_service_stub':
-            error_group_service_pb2_grpc.ErrorGroupServiceStub(channel),
+            "error_group_service_stub": error_group_service_pb2_grpc.ErrorGroupServiceStub(
+                channel
+            )
         }
 
     @classmethod
-    def create_channel(cls,
-                       address='clouderrorreporting.googleapis.com:443',
-                       credentials=None):
+    def create_channel(
+        cls, address="clouderrorreporting.googleapis.com:443", credentials=None
+    ):
         """Create and return a gRPC channel object.
 
         Args:
@@ -89,9 +90,7 @@ def create_channel(cls,
             grpc.Channel: A gRPC channel object.
         """
         return google.api_core.grpc_helpers.create_channel(
-            address,
-            credentials=credentials,
-            scopes=cls._OAUTH_SCOPES,
+            address, credentials=credentials, scopes=cls._OAUTH_SCOPES
         )
 
     @property
@@ -114,7 +113,7 @@ def get_group(self):
                 deserialized request object and returns a
                 deserialized response object.
         """
-        return self._stubs['error_group_service_stub'].GetGroup
+        return self._stubs["error_group_service_stub"].GetGroup
 
     @property
     def update_group(self):
@@ -128,4 +127,4 @@ def update_group(self):
                 deserialized request object and returns a
                 deserialized response object.
         """
-        return self._stubs['error_group_service_stub'].UpdateGroup
+        return self._stubs["error_group_service_stub"].UpdateGroup
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py
index 5958feea3f5e..4cfba78f744b 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py
@@ -27,14 +27,17 @@ class ErrorStatsServiceGrpcTransport(object):
     which can be used to take advantage of advanced
     features of gRPC.
     """
+
     # The scopes needed to make gRPC calls to all of the methods defined
     # in this service.
-    _OAUTH_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', )
-
-    def __init__(self,
-                 channel=None,
-                 credentials=None,
-                 address='clouderrorreporting.googleapis.com:443'):
+    _OAUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",)
+
+    def __init__(
+        self,
+        channel=None,
+        credentials=None,
+        address="clouderrorreporting.googleapis.com:443",
+    ):
         """Instantiate the transport class.
 
         Args:
@@ -52,29 +55,27 @@ def __init__(self,
         # exception (channels come with credentials baked in already).
         if channel is not None and credentials is not None:
             raise ValueError(
-                'The `channel` and `credentials` arguments are mutually '
-                'exclusive.', )
+                "The `channel` and `credentials` arguments are mutually " "exclusive."
+            )
 
         # Create the channel.
         if channel is None:
-            channel = self.create_channel(
-                address=address,
-                credentials=credentials,
-            )
+            channel = self.create_channel(address=address, credentials=credentials)
 
         self._channel = channel
 
         # gRPC uses objects called "stubs" that are bound to the
         # channel and provide a basic method for each RPC.
         self._stubs = {
-            'error_stats_service_stub':
-            error_stats_service_pb2_grpc.ErrorStatsServiceStub(channel),
+            "error_stats_service_stub": error_stats_service_pb2_grpc.ErrorStatsServiceStub(
+                channel
+            )
         }
 
     @classmethod
-    def create_channel(cls,
-                       address='clouderrorreporting.googleapis.com:443',
-                       credentials=None):
+    def create_channel(
+        cls, address="clouderrorreporting.googleapis.com:443", credentials=None
+    ):
         """Create and return a gRPC channel object.
 
         Args:
@@ -89,9 +90,7 @@ def create_channel(cls,
             grpc.Channel: A gRPC channel object.
         """
         return google.api_core.grpc_helpers.create_channel(
-            address,
-            credentials=credentials,
-            scopes=cls._OAUTH_SCOPES,
+            address, credentials=credentials, scopes=cls._OAUTH_SCOPES
         )
 
     @property
@@ -114,7 +113,7 @@ def list_group_stats(self):
                 deserialized request object and returns a
                 deserialized response object.
         """
-        return self._stubs['error_stats_service_stub'].ListGroupStats
+        return self._stubs["error_stats_service_stub"].ListGroupStats
 
     @property
     def list_events(self):
@@ -127,7 +126,7 @@ def list_events(self):
                 deserialized request object and returns a
                 deserialized response object.
         """
-        return self._stubs['error_stats_service_stub'].ListEvents
+        return self._stubs["error_stats_service_stub"].ListEvents
 
     @property
     def delete_events(self):
@@ -140,4 +139,4 @@ def delete_events(self):
                 deserialized request object and returns a
                 deserialized response object.
         """
-        return self._stubs['error_stats_service_stub'].DeleteEvents
+        return self._stubs["error_stats_service_stub"].DeleteEvents
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py
index 3fbaa975f966..aa7893dca6f1 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py
@@ -27,14 +27,17 @@ class ReportErrorsServiceGrpcTransport(object):
     which can be used to take advantage of advanced
     features of gRPC.
     """
+
     # The scopes needed to make gRPC calls to all of the methods defined
     # in this service.
-    _OAUTH_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', )
-
-    def __init__(self,
-                 channel=None,
-                 credentials=None,
-                 address='clouderrorreporting.googleapis.com:443'):
+    _OAUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",)
+
+    def __init__(
+        self,
+        channel=None,
+        credentials=None,
+        address="clouderrorreporting.googleapis.com:443",
+    ):
         """Instantiate the transport class.
 
         Args:
@@ -52,29 +55,27 @@ def __init__(self,
         # exception (channels come with credentials baked in already).
         if channel is not None and credentials is not None:
             raise ValueError(
-                'The `channel` and `credentials` arguments are mutually '
-                'exclusive.', )
+                "The `channel` and `credentials` arguments are mutually " "exclusive."
+            )
 
         # Create the channel.
         if channel is None:
-            channel = self.create_channel(
-                address=address,
-                credentials=credentials,
-            )
+            channel = self.create_channel(address=address, credentials=credentials)
 
         self._channel = channel
 
         # gRPC uses objects called "stubs" that are bound to the
         # channel and provide a basic method for each RPC.
         self._stubs = {
-            'report_errors_service_stub':
-            report_errors_service_pb2_grpc.ReportErrorsServiceStub(channel),
+            "report_errors_service_stub": report_errors_service_pb2_grpc.ReportErrorsServiceStub(
+                channel
+            )
         }
 
     @classmethod
-    def create_channel(cls,
-                       address='clouderrorreporting.googleapis.com:443',
-                       credentials=None):
+    def create_channel(
+        cls, address="clouderrorreporting.googleapis.com:443", credentials=None
+    ):
         """Create and return a gRPC channel object.
 
         Args:
@@ -89,9 +90,7 @@ def create_channel(cls,
             grpc.Channel: A gRPC channel object.
         """
         return google.api_core.grpc_helpers.create_channel(
-            address,
-            credentials=credentials,
-            scopes=cls._OAUTH_SCOPES,
+            address, credentials=credentials, scopes=cls._OAUTH_SCOPES
         )
 
     @property
@@ -114,4 +113,4 @@ def report_error_event(self):
                 deserialized request object and returns a
                 deserialized response object.
         """
-        return self._stubs['report_errors_service_stub'].ReportErrorEvent
+        return self._stubs["report_errors_service_stub"].ReportErrorEvent
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py
index 0c54b22b5856..388e69bbad78 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py
@@ -39,11 +39,7 @@
     timestamp_pb2,
 ]
 
-_local_modules = [
-    common_pb2,
-    error_group_service_pb2,
-    error_stats_service_pb2,
-]
+_local_modules = [common_pb2, error_group_service_pb2, error_stats_service_pb2]
 
 names = []
 
@@ -54,7 +50,7 @@
 
 for module in _local_modules:
     for name, message in get_messages(module).items():
-        message.__module__ = 'google.cloud.errorreporting_v1beta1.types'
+        message.__module__ = "google.cloud.errorreporting_v1beta1.types"
         setattr(sys.modules[__name__], name, message)
         names.append(name)
 
diff --git a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py
index 642306e624b3..a2d1fe117624 100644
--- a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py
+++ b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py
@@ -24,25 +24,25 @@
 
 class TestSystemReportErrorsService(object):
     def test_report_error_event(self):
-        project_id = os.environ['PROJECT_ID']
+        project_id = os.environ["PROJECT_ID"]
 
         client = errorreporting_v1beta1.ReportErrorsServiceClient()
         project_name = client.project_path(project_id)
-        message = '[MESSAGE]'
-        service = '[SERVICE]'
-        service_context = {'service': service}
-        file_path = 'path/to/file.lang'
+        message = "[MESSAGE]"
+        service = "[SERVICE]"
+        service_context = {"service": service}
+        file_path = "path/to/file.lang"
         line_number = 42
-        function_name = 'meaningOfLife'
+        function_name = "meaningOfLife"
         report_location = {
-            'file_path': file_path,
-            'line_number': line_number,
-            'function_name': function_name
+            "file_path": file_path,
+            "line_number": line_number,
+            "function_name": function_name,
         }
-        context = {'report_location': report_location}
+        context = {"report_location": report_location}
         event = {
-            'message': message,
-            'service_context': service_context,
-            'context': context
+            "message": message,
+            "service_context": service_context,
+            "context": context,
         }
         response = client.report_error_event(project_name, event)
diff --git a/packages/google-cloud-error-reporting/tests/system/test_system.py b/packages/google-cloud-error-reporting/tests/system/test_system.py
index 598576cacb47..b72223e2ae0a 100644
--- a/packages/google-cloud-error-reporting/tests/system/test_system.py
+++ b/packages/google-cloud-error-reporting/tests/system/test_system.py
@@ -17,17 +17,15 @@
 import unittest
 
 from google.cloud import error_reporting
-from google.cloud.errorreporting_v1beta1.gapic import (
-    error_stats_service_client)
-from google.cloud.errorreporting_v1beta1.proto import (
-    error_stats_service_pb2)
+from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client
+from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2
 from google.protobuf.duration_pb2 import Duration
 
 from test_utils.retry import RetryResult
 from test_utils.system import unique_resource_id
 
 
-ERROR_MSG = 'Stackdriver Error Reporting System Test'
+ERROR_MSG = "Stackdriver Error Reporting System Test"
 
 
 def setUpModule():
@@ -40,6 +38,7 @@ class Config(object):
     This is a mutable stand-in to allow test set-up to modify
     global state.
     """
+
     CLIENT = None
 
 
@@ -57,7 +56,8 @@ def _list_groups(client):
     :returns: Iterable of :class:`~.error_stats_service_pb2.ErrorGroupStats`.
     """
     gax_api = error_stats_service_client.ErrorStatsServiceClient(
-        credentials=client._credentials)
+        credentials=client._credentials
+    )
     project_name = gax_api.project_path(client.project)
 
     time_range = error_stats_service_pb2.QueryTimeRange()
@@ -66,7 +66,8 @@ def _list_groups(client):
     duration = Duration(seconds=60 * 60)
 
     return gax_api.list_group_stats(
-        project_name, time_range, timed_count_duration=duration)
+        project_name, time_range, timed_count_duration=duration
+    )
 
 
 def _simulate_exception(class_name, client):
@@ -106,17 +107,16 @@ def _get_error_count(class_name, client):
 
 
 class TestErrorReporting(unittest.TestCase):
-
     def test_report_exception(self):
         # Get a class name unique to this test case.
-        class_name = 'RuntimeError' + unique_resource_id('_')
+        class_name = "RuntimeError" + unique_resource_id("_")
 
         # Simulate an error: group won't exist until we report
         # first exception.
         _simulate_exception(class_name, Config.CLIENT)
 
         is_one = functools.partial(operator.eq, 1)
-        is_one.__name__ = 'is_one'  # partial() has no name.
+        is_one.__name__ = "is_one"  # partial() has no name.
         retry = RetryResult(is_one, max_tries=6)
         wrapped_get_count = retry(_get_error_count)
 
diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py
index 7d632a2d69d1..518152c407ed 100644
--- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py
+++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py
@@ -51,10 +51,7 @@ def __init__(self, responses=[]):
         self.responses = responses
         self.requests = []
 
-    def unary_unary(self,
-                    method,
-                    request_serializer=None,
-                    response_deserializer=None):
+    def unary_unary(self, method, request_serializer=None, response_deserializer=None):
         return MultiCallableStub(method, self)
 
 
@@ -65,54 +62,55 @@ class CustomException(Exception):
 class TestErrorGroupServiceClient(object):
     def test_get_group(self):
         # Setup Expected Response
-        name = 'name3373707'
-        group_id = 'groupId506361563'
-        expected_response = {'name': name, 'group_id': group_id}
+        name = "name3373707"
+        group_id = "groupId506361563"
+        expected_response = {"name": name, "group_id": group_id}
         expected_response = common_pb2.ErrorGroup(**expected_response)
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorGroupServiceClient()
 
         # Setup Request
-        group_name = client.group_path('[PROJECT]', '[GROUP]')
+        group_name = client.group_path("[PROJECT]", "[GROUP]")
 
         response = client.get_group(group_name)
         assert expected_response == response
 
         assert len(channel.requests) == 1
         expected_request = error_group_service_pb2.GetGroupRequest(
-            group_name=group_name)
+            group_name=group_name
+        )
         actual_request = channel.requests[0][1]
         assert expected_request == actual_request
 
     def test_get_group_exception(self):
         # Mock the API response
         channel = ChannelStub(responses=[CustomException()])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorGroupServiceClient()
 
         # Setup request
-        group_name = client.group_path('[PROJECT]', '[GROUP]')
+        group_name = client.group_path("[PROJECT]", "[GROUP]")
 
         with pytest.raises(CustomException):
             client.get_group(group_name)
 
     def test_update_group(self):
         # Setup Expected Response
-        name = 'name3373707'
-        group_id = 'groupId506361563'
-        expected_response = {'name': name, 'group_id': group_id}
+        name = "name3373707"
+        group_id = "groupId506361563"
+        expected_response = {"name": name, "group_id": group_id}
         expected_response = common_pb2.ErrorGroup(**expected_response)
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorGroupServiceClient()
@@ -124,15 +122,14 @@ def test_update_group(self):
         assert expected_response == response
 
         assert len(channel.requests) == 1
-        expected_request = error_group_service_pb2.UpdateGroupRequest(
-            group=group)
+        expected_request = error_group_service_pb2.UpdateGroupRequest(group=group)
         actual_request = channel.requests[0][1]
         assert expected_request == actual_request
 
     def test_update_group_exception(self):
         # Mock the API response
         channel = ChannelStub(responses=[CustomException()])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorGroupServiceClient()
diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py
index 0d362cc0db60..8dae0b22589c 100644
--- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py
+++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py
@@ -51,10 +51,7 @@ def __init__(self, responses=[]):
         self.responses = responses
         self.requests = []
 
-    def unary_unary(self,
-                    method,
-                    request_serializer=None,
-                    response_deserializer=None):
+    def unary_unary(self, method, request_serializer=None, response_deserializer=None):
         return MultiCallableStub(method, self)
 
 
@@ -65,25 +62,26 @@ class CustomException(Exception):
 class TestErrorStatsServiceClient(object):
     def test_list_group_stats(self):
         # Setup Expected Response
-        next_page_token = ''
+        next_page_token = ""
         error_group_stats_element = {}
         error_group_stats = [error_group_stats_element]
         expected_response = {
-            'next_page_token': next_page_token,
-            'error_group_stats': error_group_stats
+            "next_page_token": next_page_token,
+            "error_group_stats": error_group_stats,
         }
         expected_response = error_stats_service_pb2.ListGroupStatsResponse(
-            **expected_response)
+            **expected_response
+        )
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup Request
-        project_name = client.project_path('[PROJECT]')
+        project_name = client.project_path("[PROJECT]")
         time_range = {}
 
         paged_list_response = client.list_group_stats(project_name, time_range)
@@ -94,19 +92,20 @@ def test_list_group_stats(self):
 
         assert len(channel.requests) == 1
         expected_request = error_stats_service_pb2.ListGroupStatsRequest(
-            project_name=project_name, time_range=time_range)
+            project_name=project_name, time_range=time_range
+        )
         actual_request = channel.requests[0][1]
         assert expected_request == actual_request
 
     def test_list_group_stats_exception(self):
         channel = ChannelStub(responses=[CustomException()])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup request
-        project_name = client.project_path('[PROJECT]')
+        project_name = client.project_path("[PROJECT]")
         time_range = {}
 
         paged_list_response = client.list_group_stats(project_name, time_range)
@@ -115,26 +114,27 @@ def test_list_group_stats_exception(self):
 
     def test_list_events(self):
         # Setup Expected Response
-        next_page_token = ''
+        next_page_token = ""
         error_events_element = {}
         error_events = [error_events_element]
         expected_response = {
-            'next_page_token': next_page_token,
-            'error_events': error_events
+            "next_page_token": next_page_token,
+            "error_events": error_events,
         }
         expected_response = error_stats_service_pb2.ListEventsResponse(
-            **expected_response)
+            **expected_response
+        )
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup Request
-        project_name = client.project_path('[PROJECT]')
-        group_id = 'groupId506361563'
+        project_name = client.project_path("[PROJECT]")
+        group_id = "groupId506361563"
 
         paged_list_response = client.list_events(project_name, group_id)
         resources = list(paged_list_response)
@@ -144,20 +144,21 @@ def test_list_events(self):
 
         assert len(channel.requests) == 1
         expected_request = error_stats_service_pb2.ListEventsRequest(
-            project_name=project_name, group_id=group_id)
+            project_name=project_name, group_id=group_id
+        )
         actual_request = channel.requests[0][1]
         assert expected_request == actual_request
 
     def test_list_events_exception(self):
         channel = ChannelStub(responses=[CustomException()])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup request
-        project_name = client.project_path('[PROJECT]')
-        group_id = 'groupId506361563'
+        project_name = client.project_path("[PROJECT]")
+        group_id = "groupId506361563"
 
         paged_list_response = client.list_events(project_name, group_id)
         with pytest.raises(CustomException):
@@ -167,37 +168,39 @@ def test_delete_events(self):
         # Setup Expected Response
         expected_response = {}
         expected_response = error_stats_service_pb2.DeleteEventsResponse(
-            **expected_response)
+            **expected_response
+        )
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup Request
-        project_name = client.project_path('[PROJECT]')
+        project_name = client.project_path("[PROJECT]")
 
         response = client.delete_events(project_name)
         assert expected_response == response
 
         assert len(channel.requests) == 1
         expected_request = error_stats_service_pb2.DeleteEventsRequest(
-            project_name=project_name)
+            project_name=project_name
+        )
         actual_request = channel.requests[0][1]
         assert expected_request == actual_request
 
     def test_delete_events_exception(self):
         # Mock the API response
         channel = ChannelStub(responses=[CustomException()])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ErrorStatsServiceClient()
 
         # Setup request
-        project_name = client.project_path('[PROJECT]')
+        project_name = client.project_path("[PROJECT]")
 
         with pytest.raises(CustomException):
             client.delete_events(project_name)
diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py
index 458eb094ab06..6f715244c700 100644
--- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py
+++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py
@@ -50,10 +50,7 @@ def __init__(self, responses=[]):
         self.responses = responses
         self.requests = []
 
-    def unary_unary(self,
-                    method,
-                    request_serializer=None,
-                    response_deserializer=None):
+    def unary_unary(self, method, request_serializer=None, response_deserializer=None):
         return MultiCallableStub(method, self)
 
 
@@ -66,17 +63,18 @@ def test_report_error_event(self):
         # Setup Expected Response
         expected_response = {}
         expected_response = report_errors_service_pb2.ReportErrorEventResponse(
-            **expected_response)
+            **expected_response
+        )
 
         # Mock the API response
         channel = ChannelStub(responses=[expected_response])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ReportErrorsServiceClient()
 
         # Setup Request
-        project_name = client.project_path('[PROJECT]')
+        project_name = client.project_path("[PROJECT]")
         event = {}
 
         response = client.report_error_event(project_name, event)
@@ -84,20 +82,21 @@ def test_report_error_event(self):
 
         assert len(channel.requests) == 1
         expected_request = report_errors_service_pb2.ReportErrorEventRequest(
-            project_name=project_name, event=event)
+            project_name=project_name, event=event
+        )
         actual_request = channel.requests[0][1]
         assert expected_request == actual_request
 
     def test_report_error_event_exception(self):
         # Mock the API response
         channel = ChannelStub(responses=[CustomException()])
-        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
+        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
         with patch as create_channel:
             create_channel.return_value = channel
             client = errorreporting_v1beta1.ReportErrorsServiceClient()
 
         # Setup request
-        project_name = client.project_path('[PROJECT]')
+        project_name = client.project_path("[PROJECT]")
         event = {}
 
         with pytest.raises(CustomException):
diff --git a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py
index 2f41553dfb72..2b6dbbb37be2 100644
--- a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py
+++ b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py
@@ -18,22 +18,22 @@
 
 
 class Test_make_report_error_api(unittest.TestCase):
-
     def test_make_report_error_api(self):
         from google.cloud.errorreporting_v1beta1.gapic import (
-            report_errors_service_client)
+            report_errors_service_client,
+        )
 
         from google.cloud.error_reporting._gapic import make_report_error_api
 
         client = mock.Mock(
             _credentials=mock.sentinel.credentials,
-            project='prahj-ekt',
-            spec=['project', '_credentials'],
+            project="prahj-ekt",
+            spec=["project", "_credentials"],
         )
 
         # Mock out the constructor for the GAPIC client.
         ServiceClient = report_errors_service_client.ReportErrorsServiceClient
-        with mock.patch.object(ServiceClient, '__init__') as resc:
+        with mock.patch.object(ServiceClient, "__init__") as resc:
             resc.return_value = None
 
             # Call the function being tested.
@@ -43,8 +43,8 @@ def test_make_report_error_api(self):
             # to be correct.
             resc.assert_called_once()
             _, _, kwargs = resc.mock_calls[0]
-            self.assertEqual(kwargs['credentials'], mock.sentinel.credentials)
-            self.assertIsNotNone(kwargs['client_info'])
+            self.assertEqual(kwargs["credentials"], mock.sentinel.credentials)
+            self.assertIsNotNone(kwargs["client_info"])
 
         # Assert that the final error client has the project in
         # the expected location.
@@ -53,7 +53,7 @@ def test_make_report_error_api(self):
 
 class Test_ErrorReportingGapicApi(unittest.TestCase):
 
-    PROJECT = 'PROJECT'
+    PROJECT = "PROJECT"
 
     def _make_one(self, gapic_api, project):
         from google.cloud.error_reporting._gapic import _ErrorReportingGapicApi
@@ -68,21 +68,17 @@ def test_constructor(self):
         self.assertEqual(gapic_client_wrapper._gapic_api, gapic_api)
 
     def test_report_error_event(self):
-        from google.cloud.errorreporting_v1beta1.proto import (
-            report_errors_service_pb2)
+        from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2
 
-        gapic_api = mock.Mock(spec=['project_path', 'report_error_event'])
+        gapic_api = mock.Mock(spec=["project_path", "report_error_event"])
         gapic_client_wrapper = self._make_one(gapic_api, self.PROJECT)
 
-        error_report = {
-            'message': 'The cabs are here.',
-        }
+        error_report = {"message": "The cabs are here."}
         gapic_client_wrapper.report_error_event(error_report)
 
         gapic_api.project_path.assert_called_once_with(self.PROJECT)
         project_name = gapic_api.project_path.return_value
         error_pb = report_errors_service_pb2.ReportedErrorEvent(
-            message=error_report['message'],
+            message=error_report["message"]
         )
-        gapic_api.report_error_event.assert_called_once_with(
-            project_name, error_pb)
+        gapic_api.report_error_event.assert_called_once_with(project_name, error_pb)
diff --git a/packages/google-cloud-error-reporting/tests/unit/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py
index 924bedb27f6b..674a3a9ee726 100644
--- a/packages/google-cloud-error-reporting/tests/unit/test__logging.py
+++ b/packages/google-cloud-error-reporting/tests/unit/test__logging.py
@@ -25,11 +25,10 @@ def _make_credentials():
 
 class Test_ErrorReportingLoggingAPI(unittest.TestCase):
 
-    PROJECT = 'PROJECT'
+    PROJECT = "PROJECT"
 
     def _make_one(self, project, credentials):
-        from google.cloud.error_reporting._logging import (
-            _ErrorReportingLoggingAPI)
+        from google.cloud.error_reporting._logging import _ErrorReportingLoggingAPI
 
         return _ErrorReportingLoggingAPI(project, credentials)
 
@@ -37,25 +36,23 @@ def test_constructor(self):
         credentials = _make_credentials()
         logging_api = self._make_one(self.PROJECT, credentials)
 
-        self.assertEqual(logging_api.logging_client._connection.credentials,
-                         credentials)
+        self.assertEqual(
+            logging_api.logging_client._connection.credentials, credentials
+        )
         self.assertEqual(logging_api.logging_client.project, self.PROJECT)
 
-    @mock.patch('google.cloud.logging.client.Client')
+    @mock.patch("google.cloud.logging.client.Client")
     def test_report_error_event(self, mocked_cls):
         credentials = _make_credentials()
         logging_api = self._make_one(self.PROJECT, credentials)
-        mocked_cls.assert_called_once_with(
-            self.PROJECT, credentials, _http=None)
+        mocked_cls.assert_called_once_with(self.PROJECT, credentials, _http=None)
         self.assertIs(logging_api.logging_client, mocked_cls.return_value)
 
-        logger = mock.Mock(spec=['log_struct'])
+        logger = mock.Mock(spec=["log_struct"])
         logging_api.logging_client.logger.return_value = logger
 
         # Actually make the API call.
-        error_report = {
-            'message': 'The cabs are here.',
-        }
+        error_report = {"message": "The cabs are here."}
         logging_api.report_error_event(error_report)
 
         # Check the mocks.
diff --git a/packages/google-cloud-error-reporting/tests/unit/test_client.py b/packages/google-cloud-error-reporting/tests/unit/test_client.py
index 9a7bdf47feb0..458db5136e11 100644
--- a/packages/google-cloud-error-reporting/tests/unit/test_client.py
+++ b/packages/google-cloud-error-reporting/tests/unit/test_client.py
@@ -26,9 +26,9 @@ def _make_credentials():
 
 class TestClient(unittest.TestCase):
 
-    PROJECT = 'PROJECT'
-    SERVICE = 'SERVICE'
-    VERSION = 'myversion'
+    PROJECT = "PROJECT"
+    SERVICE = "SERVICE"
+    VERSION = "myversion"
 
     @staticmethod
     def _get_target_class():
@@ -52,10 +52,10 @@ def _get_report_payload(self, error_api):
         self.assertEqual(len(positional), 1)
         return positional[0]
 
-    @mock.patch('google.cloud.client._determine_default_project')
+    @mock.patch("google.cloud.client._determine_default_project")
     def test_ctor_default(self, default_mock):
         credentials = _make_credentials()
-        default_mock.return_value = 'foo'
+        default_mock.return_value = "foo"
         client = self._make_one(credentials=credentials)
         self.assertEqual(client.service, client.DEFAULT_SERVICE)
         self.assertEqual(client.version, None)
@@ -63,20 +63,20 @@ def test_ctor_default(self, default_mock):
 
     def test_ctor_params(self):
         credentials = _make_credentials()
-        client = self._make_one(project=self.PROJECT,
-                                credentials=credentials,
-                                service=self.SERVICE,
-                                version=self.VERSION)
+        client = self._make_one(
+            project=self.PROJECT,
+            credentials=credentials,
+            service=self.SERVICE,
+            version=self.VERSION,
+        )
         self.assertEqual(client.service, self.SERVICE)
         self.assertEqual(client.version, self.VERSION)
 
     def test_report_exception_with_gax(self):
         credentials = _make_credentials()
-        client = self._make_one(project=self.PROJECT,
-                                credentials=credentials)
+        client = self._make_one(project=self.PROJECT, credentials=credentials)
 
-        patch = mock.patch(
-            'google.cloud.error_reporting.client.make_report_error_api')
+        patch = mock.patch("google.cloud.error_reporting.client.make_report_error_api")
         with patch as make_api:
             try:
                 raise NameError
@@ -85,19 +85,17 @@ def test_report_exception_with_gax(self):
             payload = make_api.return_value.report_error_event.call_args[0][0]
             make_api.assert_called_once_with(client)
 
-        self.assertEqual(payload['serviceContext'], {
-            'service': client.DEFAULT_SERVICE,
-        })
-        self.assertIn('test_report', payload['message'])
-        self.assertIn('test_client.py', payload['message'])
+        self.assertEqual(payload["serviceContext"], {"service": client.DEFAULT_SERVICE})
+        self.assertIn("test_report", payload["message"])
+        self.assertIn("test_client.py", payload["message"])
 
     def test_report_exception_wo_gax(self):
         credentials = _make_credentials()
-        client = self._make_one(project=self.PROJECT,
-                                credentials=credentials,
-                                _use_grpc=False)
+        client = self._make_one(
+            project=self.PROJECT, credentials=credentials, _use_grpc=False
+        )
         patch = mock.patch(
-            'google.cloud.error_reporting.client._ErrorReportingLoggingAPI'
+            "google.cloud.error_reporting.client._ErrorReportingLoggingAPI"
         )
         with patch as _error_api:
             try:
@@ -107,29 +105,27 @@ def test_report_exception_wo_gax(self):
             mock_report = _error_api.return_value.report_error_event
             payload = mock_report.call_args[0][0]
 
-        self.assertEqual(payload['serviceContext'], {
-            'service': client.DEFAULT_SERVICE,
-        })
-        self.assertIn('test_report', payload['message'])
-        self.assertIn('test_client.py', payload['message'])
+        self.assertEqual(payload["serviceContext"], {"service": client.DEFAULT_SERVICE})
+        self.assertIn("test_report", payload["message"])
+        self.assertIn("test_client.py", payload["message"])
         self.assertIsNotNone(client.report_errors_api)
 
-    @mock.patch('google.cloud.error_reporting.client.make_report_error_api')
-    def test_report_exception_with_service_version_in_constructor(
-            self, make_api):
+    @mock.patch("google.cloud.error_reporting.client.make_report_error_api")
+    def test_report_exception_with_service_version_in_constructor(self, make_api):
         credentials = _make_credentials()
-        service = 'notdefault'
-        version = 'notdefaultversion'
-        client = self._make_one(project=self.PROJECT,
-                                credentials=credentials,
-                                service=service,
-                                version=version)
-
-        http_context = self._make_http(
-            method='GET', response_status_code=500)
-        user = 'user@gmail.com'
-
-        error_api = mock.Mock(spec=['report_error_event'])
+        service = "notdefault"
+        version = "notdefaultversion"
+        client = self._make_one(
+            project=self.PROJECT,
+            credentials=credentials,
+            service=service,
+            version=version,
+        )
+
+        http_context = self._make_http(method="GET", response_status_code=500)
+        user = "user@gmail.com"
+
+        error_api = mock.Mock(spec=["report_error_event"])
         make_api.return_value = error_api
 
         try:
@@ -140,37 +136,34 @@ def test_report_exception_with_service_version_in_constructor(
         make_api.assert_called_once_with(client)
 
         payload = self._get_report_payload(error_api)
-        self.assertEqual(payload['serviceContext'], {
-            'service': service,
-            'version': version
-        })
-        self.assertIn(
-            'test_report_exception_with_service_version_in_constructor',
-            payload['message'])
-        self.assertIn('test_client.py', payload['message'])
-        self.assertEqual(
-            payload['context']['httpRequest']['responseStatusCode'], 500)
         self.assertEqual(
-            payload['context']['httpRequest']['method'], 'GET')
-        self.assertEqual(payload['context']['user'], user)
+            payload["serviceContext"], {"service": service, "version": version}
+        )
+        self.assertIn(
+            "test_report_exception_with_service_version_in_constructor",
+            payload["message"],
+        )
+        self.assertIn("test_client.py", payload["message"])
+        self.assertEqual(payload["context"]["httpRequest"]["responseStatusCode"], 500)
+        self.assertEqual(payload["context"]["httpRequest"]["method"], "GET")
+        self.assertEqual(payload["context"]["user"], user)
 
-    @mock.patch('google.cloud.error_reporting.client.make_report_error_api')
+    @mock.patch("google.cloud.error_reporting.client.make_report_error_api")
     def test_report(self, make_api):
         credentials = _make_credentials()
-        client = self._make_one(project=self.PROJECT,
-                                credentials=credentials)
+        client = self._make_one(project=self.PROJECT, credentials=credentials)
 
-        error_api = mock.Mock(spec=['report_error_event'])
+        error_api = mock.Mock(spec=["report_error_event"])
         make_api.return_value = error_api
 
-        message = 'this is an error'
+        message = "this is an error"
         client.report(message)
 
         payload = self._get_report_payload(error_api)
 
-        self.assertEqual(payload['message'], message)
-        report_location = payload['context']['reportLocation']
-        self.assertIn('test_client.py', report_location['filePath'])
-        self.assertEqual(report_location['functionName'], 'test_report')
-        self.assertGreater(report_location['lineNumber'], 100)
-        self.assertLess(report_location['lineNumber'], 250)
+        self.assertEqual(payload["message"], message)
+        report_location = payload["context"]["reportLocation"]
+        self.assertIn("test_client.py", report_location["filePath"])
+        self.assertEqual(report_location["functionName"], "test_report")
+        self.assertGreater(report_location["lineNumber"], 100)
+        self.assertLess(report_location["lineNumber"], 250)
diff --git a/packages/google-cloud-error-reporting/tests/unit/test_util.py b/packages/google-cloud-error-reporting/tests/unit/test_util.py
index bdd86bd6cb93..cd48f3f8d3ad 100644
--- a/packages/google-cloud-error-reporting/tests/unit/test_util.py
+++ b/packages/google-cloud-error-reporting/tests/unit/test_util.py
@@ -16,7 +16,6 @@
 
 
 class Test_build_flask_context(unittest.TestCase):
-
     def _call_fut(self, request):
         from google.cloud.error_reporting.util import build_flask_context
 
@@ -25,11 +24,10 @@ def _call_fut(self, request):
     def test_flask_helper(self):
         import mock
 
-        user_agent = mock.Mock(string='Google Cloud Unit Tests Agent')
-        request = _Request('http://google.com', 'GET',
-                           user_agent,
-                           'http://gmail.com',
-                           '127.0.0.1')
+        user_agent = mock.Mock(string="Google Cloud Unit Tests Agent")
+        request = _Request(
+            "http://google.com", "GET", user_agent, "http://gmail.com", "127.0.0.1"
+        )
 
         context = self._call_fut(request)
         self.assertEqual(request.url, context.url)
@@ -40,7 +38,6 @@ def test_flask_helper(self):
 
 
 class _Request(object):
-
     def __init__(self, url, method, user_agent, referrer, remote_addr):
         self.url = url
         self.method = method

From faf86ae9606f057154ccfe7e9e3765c65aa37e9e Mon Sep 17 00:00:00 2001
From: Christopher Wilcox 
Date: Thu, 29 Nov 2018 13:13:54 -0800
Subject: [PATCH 109/467] Run black at end of synth.py (#6698)

* Run black at end of synth.py
* blacken logging
---
 packages/google-cloud-error-reporting/synth.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py
index 2fcd333bb551..540761b4c55a 100644
--- a/packages/google-cloud-error-reporting/synth.py
+++ b/packages/google-cloud-error-reporting/synth.py
@@ -63,3 +63,5 @@
 # ----------------------------------------------------------------------------
 templated_files = common.py_library(unit_cov_level=97, cov_level=100)
 s.move(templated_files)
+
+s.shell.run(["nox", "-s", "blacken"], hide_output=False)

From fa09ed49b5d2942a2994e672e93a00b470a01d8d Mon Sep 17 00:00:00 2001
From: Christopher Wilcox 
Date: Thu, 29 Nov 2018 13:23:53 -0800
Subject: [PATCH 110/467] omit local deps (#6701)

---
 packages/google-cloud-error-reporting/.coveragerc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc
index 51fec440cebf..6b9ab9da4a1b 100644
--- a/packages/google-cloud-error-reporting/.coveragerc
+++ b/packages/google-cloud-error-reporting/.coveragerc
@@ -14,5 +14,5 @@ exclude_lines =
 omit =
   */gapic/*.py
   */proto/*.py
-  */google-cloud-python/core/*.py
+  */core/*.py
   */site-packages/*.py
\ No newline at end of file

From f83205171aa92613a2581bf628cea054701ab77d Mon Sep 17 00:00:00 2001
From: Christopher Wilcox 
Date: Fri, 30 Nov 2018 15:25:18 -0800
Subject: [PATCH 111/467] blacken all gen'd libs (#6792)

* blacken all gen'd libs
---
 .../proto/common_pb2.py                       | 1016 +++++----
 .../proto/common_pb2_grpc.py                  |    1 -
 .../proto/error_group_service_pb2.py          |  267 ++-
 .../proto/error_group_service_pb2_grpc.py     |   84 +-
 .../proto/error_stats_service_pb2.py          | 1899 +++++++++++------
 .../proto/error_stats_service_pb2_grpc.py     |  108 +-
 .../proto/report_errors_service_pb2.py        |  412 ++--
 .../proto/report_errors_service_pb2_grpc.py   |   52 +-
 8 files changed, 2373 insertions(+), 1466 deletions(-)

diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py
index 3b4dd43acd8b..1fe8f9099b68 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py
@@ -2,381 +2,625 @@
 # source: google/devtools/clouderrorreporting_v1beta1/proto/common.proto
 
 import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+
+_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode("latin1"))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 from google.protobuf import descriptor_pb2
+
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
 
 
 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
-from google.api import monitored_resource_pb2 as google_dot_api_dot_monitored__resource__pb2
+from google.api import (
+    monitored_resource_pb2 as google_dot_api_dot_monitored__resource__pb2,
+)
 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
-  name='google/devtools/clouderrorreporting_v1beta1/proto/common.proto',
-  package='google.devtools.clouderrorreporting.v1beta1',
-  syntax='proto3',
-  serialized_pb=_b('\n>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a#google/api/monitored_resource.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x81\x01\n\nErrorGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12S\n\x0ftracking_issues\x18\x03 \x03(\x0b\x32:.google.devtools.clouderrorreporting.v1beta1.TrackingIssue\"\x1c\n\rTrackingIssue\x12\x0b\n\x03url\x18\x01 \x01(\t\"\xef\x01\n\nErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext\"I\n\x0eServiceContext\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\"\xc9\x01\n\x0c\x45rrorContext\x12U\n\x0chttp_request\x18\x01 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.HttpRequestContext\x12\x0c\n\x04user\x18\x02 \x01(\t\x12T\n\x0freport_location\x18\x03 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.SourceLocation\"\x88\x01\n\x12HttpRequestContext\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x12\n\nuser_agent\x18\x03 \x01(\t\x12\x10\n\x08referrer\x18\x04 \x01(\t\x12\x1c\n\x14response_status_code\x18\x05 \x01(\x05\x12\x11\n\tremote_ip\x18\x06 \x01(\t\"O\n\x0eSourceLocation\x12\x11\n\tfile_path\x18\x01 \x01(\t\x12\x13\n\x0bline_number\x18\x02 \x01(\x05\x12\x15\n\rfunction_name\x18\x04 \x01(\tB\xec\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x0b\x43ommonProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3')
-  ,
-  dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_api_dot_monitored__resource__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
-
-
+    name="google/devtools/clouderrorreporting_v1beta1/proto/common.proto",
+    package="google.devtools.clouderrorreporting.v1beta1",
+    syntax="proto3",
+    serialized_pb=_b(
+        '\n>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a#google/api/monitored_resource.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x81\x01\n\nErrorGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12S\n\x0ftracking_issues\x18\x03 \x03(\x0b\x32:.google.devtools.clouderrorreporting.v1beta1.TrackingIssue"\x1c\n\rTrackingIssue\x12\x0b\n\x03url\x18\x01 \x01(\t"\xef\x01\n\nErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext"I\n\x0eServiceContext\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t"\xc9\x01\n\x0c\x45rrorContext\x12U\n\x0chttp_request\x18\x01 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.HttpRequestContext\x12\x0c\n\x04user\x18\x02 \x01(\t\x12T\n\x0freport_location\x18\x03 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.SourceLocation"\x88\x01\n\x12HttpRequestContext\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x12\n\nuser_agent\x18\x03 \x01(\t\x12\x10\n\x08referrer\x18\x04 \x01(\t\x12\x1c\n\x14response_status_code\x18\x05 \x01(\x05\x12\x11\n\tremote_ip\x18\x06 \x01(\t"O\n\x0eSourceLocation\x12\x11\n\tfile_path\x18\x01 \x01(\t\x12\x13\n\x0bline_number\x18\x02 \x01(\x05\x12\x15\n\rfunction_name\x18\x04 \x01(\tB\xec\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x0b\x43ommonProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3'
+    ),
+    dependencies=[
+        google_dot_api_dot_annotations__pb2.DESCRIPTOR,
+        google_dot_api_dot_monitored__resource__pb2.DESCRIPTOR,
+        google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,
+    ],
+)
 
 
 _ERRORGROUP = _descriptor.Descriptor(
-  name='ErrorGroup',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup.group_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='tracking_issues', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroup.tracking_issues', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=212,
-  serialized_end=341,
+    name="ErrorGroup",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroup",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="name",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroup.name",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="group_id",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroup.group_id",
+            index=1,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="tracking_issues",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroup.tracking_issues",
+            index=2,
+            number=3,
+            type=11,
+            cpp_type=10,
+            label=3,
+            has_default_value=False,
+            default_value=[],
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=212,
+    serialized_end=341,
 )
 
 
 _TRACKINGISSUE = _descriptor.Descriptor(
-  name='TrackingIssue',
-  full_name='google.devtools.clouderrorreporting.v1beta1.TrackingIssue',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='url', full_name='google.devtools.clouderrorreporting.v1beta1.TrackingIssue.url', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=343,
-  serialized_end=371,
+    name="TrackingIssue",
+    full_name="google.devtools.clouderrorreporting.v1beta1.TrackingIssue",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="url",
+            full_name="google.devtools.clouderrorreporting.v1beta1.TrackingIssue.url",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        )
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=343,
+    serialized_end=371,
 )
 
 
 _ERROREVENT = _descriptor.Descriptor(
-  name='ErrorEvent',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event_time', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.event_time', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='service_context', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.service_context', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='message', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.message', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='context', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorEvent.context', index=3,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=374,
-  serialized_end=613,
+    name="ErrorEvent",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="event_time",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent.event_time",
+            index=0,
+            number=1,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="service_context",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent.service_context",
+            index=1,
+            number=2,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="message",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent.message",
+            index=2,
+            number=3,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="context",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent.context",
+            index=3,
+            number=5,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=374,
+    serialized_end=613,
 )
 
 
 _SERVICECONTEXT = _descriptor.Descriptor(
-  name='ServiceContext',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext.service', index=0,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='version', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext.version', index=1,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='resource_type', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContext.resource_type', index=2,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=615,
-  serialized_end=688,
+    name="ServiceContext",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContext",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="service",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContext.service",
+            index=0,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="version",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContext.version",
+            index=1,
+            number=3,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="resource_type",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContext.resource_type",
+            index=2,
+            number=4,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=615,
+    serialized_end=688,
 )
 
 
 _ERRORCONTEXT = _descriptor.Descriptor(
-  name='ErrorContext',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='http_request', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext.http_request', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext.user', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='report_location', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorContext.report_location', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=691,
-  serialized_end=892,
+    name="ErrorContext",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ErrorContext",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="http_request",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorContext.http_request",
+            index=0,
+            number=1,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="user",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorContext.user",
+            index=1,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="report_location",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorContext.report_location",
+            index=2,
+            number=3,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=691,
+    serialized_end=892,
 )
 
 
 _HTTPREQUESTCONTEXT = _descriptor.Descriptor(
-  name='HttpRequestContext',
-  full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='method', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.method', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='url', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.url', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_agent', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.user_agent', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='referrer', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.referrer', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='response_status_code', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.response_status_code', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='remote_ip', full_name='google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.remote_ip', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=895,
-  serialized_end=1031,
+    name="HttpRequestContext",
+    full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="method",
+            full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.method",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="url",
+            full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.url",
+            index=1,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="user_agent",
+            full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.user_agent",
+            index=2,
+            number=3,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="referrer",
+            full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.referrer",
+            index=3,
+            number=4,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="response_status_code",
+            full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.response_status_code",
+            index=4,
+            number=5,
+            type=5,
+            cpp_type=1,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="remote_ip",
+            full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.remote_ip",
+            index=5,
+            number=6,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=895,
+    serialized_end=1031,
 )
 
 
 _SOURCELOCATION = _descriptor.Descriptor(
-  name='SourceLocation',
-  full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='file_path', full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation.file_path', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='line_number', full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation.line_number', index=1,
-      number=2, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='function_name', full_name='google.devtools.clouderrorreporting.v1beta1.SourceLocation.function_name', index=2,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1033,
-  serialized_end=1112,
+    name="SourceLocation",
+    full_name="google.devtools.clouderrorreporting.v1beta1.SourceLocation",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="file_path",
+            full_name="google.devtools.clouderrorreporting.v1beta1.SourceLocation.file_path",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="line_number",
+            full_name="google.devtools.clouderrorreporting.v1beta1.SourceLocation.line_number",
+            index=1,
+            number=2,
+            type=5,
+            cpp_type=1,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="function_name",
+            full_name="google.devtools.clouderrorreporting.v1beta1.SourceLocation.function_name",
+            index=2,
+            number=4,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=1033,
+    serialized_end=1112,
 )
 
-_ERRORGROUP.fields_by_name['tracking_issues'].message_type = _TRACKINGISSUE
-_ERROREVENT.fields_by_name['event_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_ERROREVENT.fields_by_name['service_context'].message_type = _SERVICECONTEXT
-_ERROREVENT.fields_by_name['context'].message_type = _ERRORCONTEXT
-_ERRORCONTEXT.fields_by_name['http_request'].message_type = _HTTPREQUESTCONTEXT
-_ERRORCONTEXT.fields_by_name['report_location'].message_type = _SOURCELOCATION
-DESCRIPTOR.message_types_by_name['ErrorGroup'] = _ERRORGROUP
-DESCRIPTOR.message_types_by_name['TrackingIssue'] = _TRACKINGISSUE
-DESCRIPTOR.message_types_by_name['ErrorEvent'] = _ERROREVENT
-DESCRIPTOR.message_types_by_name['ServiceContext'] = _SERVICECONTEXT
-DESCRIPTOR.message_types_by_name['ErrorContext'] = _ERRORCONTEXT
-DESCRIPTOR.message_types_by_name['HttpRequestContext'] = _HTTPREQUESTCONTEXT
-DESCRIPTOR.message_types_by_name['SourceLocation'] = _SOURCELOCATION
+_ERRORGROUP.fields_by_name["tracking_issues"].message_type = _TRACKINGISSUE
+_ERROREVENT.fields_by_name[
+    "event_time"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_ERROREVENT.fields_by_name["service_context"].message_type = _SERVICECONTEXT
+_ERROREVENT.fields_by_name["context"].message_type = _ERRORCONTEXT
+_ERRORCONTEXT.fields_by_name["http_request"].message_type = _HTTPREQUESTCONTEXT
+_ERRORCONTEXT.fields_by_name["report_location"].message_type = _SOURCELOCATION
+DESCRIPTOR.message_types_by_name["ErrorGroup"] = _ERRORGROUP
+DESCRIPTOR.message_types_by_name["TrackingIssue"] = _TRACKINGISSUE
+DESCRIPTOR.message_types_by_name["ErrorEvent"] = _ERROREVENT
+DESCRIPTOR.message_types_by_name["ServiceContext"] = _SERVICECONTEXT
+DESCRIPTOR.message_types_by_name["ErrorContext"] = _ERRORCONTEXT
+DESCRIPTOR.message_types_by_name["HttpRequestContext"] = _HTTPREQUESTCONTEXT
+DESCRIPTOR.message_types_by_name["SourceLocation"] = _SOURCELOCATION
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-ErrorGroup = _reflection.GeneratedProtocolMessageType('ErrorGroup', (_message.Message,), dict(
-  DESCRIPTOR = _ERRORGROUP,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2'
-  ,
-  __doc__ = """Description of a group of similar error events.
+ErrorGroup = _reflection.GeneratedProtocolMessageType(
+    "ErrorGroup",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_ERRORGROUP,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2",
+        __doc__="""Description of a group of similar error events.
   
   
   Attributes:
@@ -390,15 +634,18 @@
       tracking_issues:
           Associated tracking issues.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroup)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroup)
+    ),
+)
 _sym_db.RegisterMessage(ErrorGroup)
 
-TrackingIssue = _reflection.GeneratedProtocolMessageType('TrackingIssue', (_message.Message,), dict(
-  DESCRIPTOR = _TRACKINGISSUE,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2'
-  ,
-  __doc__ = """Information related to tracking the progress on resolving the error.
+TrackingIssue = _reflection.GeneratedProtocolMessageType(
+    "TrackingIssue",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_TRACKINGISSUE,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2",
+        __doc__="""Information related to tracking the progress on resolving the error.
   
   
   Attributes:
@@ -406,15 +653,18 @@
           A URL pointing to a related entry in an issue tracking system.
           Example: https://github.com/user/project/issues/4
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TrackingIssue)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TrackingIssue)
+    ),
+)
 _sym_db.RegisterMessage(TrackingIssue)
 
-ErrorEvent = _reflection.GeneratedProtocolMessageType('ErrorEvent', (_message.Message,), dict(
-  DESCRIPTOR = _ERROREVENT,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2'
-  ,
-  __doc__ = """An error event which is returned by the Error Reporting system.
+ErrorEvent = _reflection.GeneratedProtocolMessageType(
+    "ErrorEvent",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_ERROREVENT,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2",
+        __doc__="""An error event which is returned by the Error Reporting system.
   
   
   Attributes:
@@ -429,15 +679,18 @@
       context:
           Data about the context in which the error occurred.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorEvent)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorEvent)
+    ),
+)
 _sym_db.RegisterMessage(ErrorEvent)
 
-ServiceContext = _reflection.GeneratedProtocolMessageType('ServiceContext', (_message.Message,), dict(
-  DESCRIPTOR = _SERVICECONTEXT,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2'
-  ,
-  __doc__ = """Describes a running service that sends errors. Its version changes over
+ServiceContext = _reflection.GeneratedProtocolMessageType(
+    "ServiceContext",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_SERVICECONTEXT,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2",
+        __doc__="""Describes a running service that sends errors. Its version changes over
   time and multiple versions can run in parallel.
   
   
@@ -460,15 +713,18 @@
           set automatically for incoming errors and must not be set when
           reporting errors.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContext)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContext)
+    ),
+)
 _sym_db.RegisterMessage(ServiceContext)
 
-ErrorContext = _reflection.GeneratedProtocolMessageType('ErrorContext', (_message.Message,), dict(
-  DESCRIPTOR = _ERRORCONTEXT,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2'
-  ,
-  __doc__ = """A description of the context in which an error occurred. This data
+ErrorContext = _reflection.GeneratedProtocolMessageType(
+    "ErrorContext",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_ERRORCONTEXT,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2",
+        __doc__="""A description of the context in which an error occurred. This data
   should be provided by the application when reporting an error, unless
   the error report has been generated automatically from Google App Engine
   logs.
@@ -495,15 +751,18 @@
           ``Exception.cause_location``, which describes the source line
           where the exception was thrown.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorContext)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorContext)
+    ),
+)
 _sym_db.RegisterMessage(ErrorContext)
 
-HttpRequestContext = _reflection.GeneratedProtocolMessageType('HttpRequestContext', (_message.Message,), dict(
-  DESCRIPTOR = _HTTPREQUESTCONTEXT,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2'
-  ,
-  __doc__ = """HTTP request data that is related to a reported error. This data should
+HttpRequestContext = _reflection.GeneratedProtocolMessageType(
+    "HttpRequestContext",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_HTTPREQUESTCONTEXT,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2",
+        __doc__="""HTTP request data that is related to a reported error. This data should
   be provided by the application when reporting an error, unless the error
   report has been generated automatically from Google App Engine logs.
   
@@ -525,15 +784,18 @@
           depending on the data that has been provided in the error
           report.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.HttpRequestContext)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.HttpRequestContext)
+    ),
+)
 _sym_db.RegisterMessage(HttpRequestContext)
 
-SourceLocation = _reflection.GeneratedProtocolMessageType('SourceLocation', (_message.Message,), dict(
-  DESCRIPTOR = _SOURCELOCATION,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.common_pb2'
-  ,
-  __doc__ = """Indicates a location in the source code of the service for which errors
+SourceLocation = _reflection.GeneratedProtocolMessageType(
+    "SourceLocation",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_SOURCELOCATION,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2",
+        __doc__="""Indicates a location in the source code of the service for which errors
   are reported. This data should be provided by the application when
   reporting an error, unless the error report has been generated
   automatically from Google App Engine logs. All fields are optional.
@@ -550,11 +812,17 @@
           include optional context like the class or package name. For
           example, ``my.package.MyClass.method`` in case of Java.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.SourceLocation)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.SourceLocation)
+    ),
+)
 _sym_db.RegisterMessage(SourceLocation)
 
 
 DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1'))
+DESCRIPTOR._options = _descriptor._ParseOptions(
+    descriptor_pb2.FileOptions(),
+    _b(
+        "\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1"
+    ),
+)
 # @@protoc_insertion_point(module_scope)
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py
index a89435267cb2..07cb78fe03a9 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py
@@ -1,3 +1,2 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
 import grpc
-
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py
index 7e1d729036cb..8df5d10ebcd5 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py
@@ -2,103 +2,132 @@
 # source: google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto
 
 import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+
+_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode("latin1"))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 from google.protobuf import descriptor_pb2
+
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
 
 
 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
-from google.cloud.errorreporting_v1beta1.proto import common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2
+from google.cloud.errorreporting_v1beta1.proto import (
+    common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2,
+)
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
-  name='google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto',
-  package='google.devtools.clouderrorreporting.v1beta1',
-  syntax='proto3',
-  serialized_pb=_b('\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\"%\n\x0fGetGroupRequest\x12\x12\n\ngroup_name\x18\x01 \x01(\t\"\\\n\x12UpdateGroupRequest\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup2\x8e\x03\n\x11\x45rrorGroupService\x12\xb4\x01\n\x08GetGroup\x12<.google.devtools.clouderrorreporting.v1beta1.GetGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{group_name=projects/*/groups/*}\x12\xc1\x01\n\x0bUpdateGroup\x12?.google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\"8\x82\xd3\xe4\x93\x02\x32\x1a)/v1beta1/{group.name=projects/*/groups/*}:\x05groupB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorGroupServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3')
-  ,
-  dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,])
-
-
+    name="google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto",
+    package="google.devtools.clouderrorreporting.v1beta1",
+    syntax="proto3",
+    serialized_pb=_b(
+        '\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto"%\n\x0fGetGroupRequest\x12\x12\n\ngroup_name\x18\x01 \x01(\t"\\\n\x12UpdateGroupRequest\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup2\x8e\x03\n\x11\x45rrorGroupService\x12\xb4\x01\n\x08GetGroup\x12<.google.devtools.clouderrorreporting.v1beta1.GetGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{group_name=projects/*/groups/*}\x12\xc1\x01\n\x0bUpdateGroup\x12?.google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup"8\x82\xd3\xe4\x93\x02\x32\x1a)/v1beta1/{group.name=projects/*/groups/*}:\x05groupB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorGroupServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3'
+    ),
+    dependencies=[
+        google_dot_api_dot_annotations__pb2.DESCRIPTOR,
+        google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,
+    ],
+)
 
 
 _GETGROUPREQUEST = _descriptor.Descriptor(
-  name='GetGroupRequest',
-  full_name='google.devtools.clouderrorreporting.v1beta1.GetGroupRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='group_name', full_name='google.devtools.clouderrorreporting.v1beta1.GetGroupRequest.group_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=218,
-  serialized_end=255,
+    name="GetGroupRequest",
+    full_name="google.devtools.clouderrorreporting.v1beta1.GetGroupRequest",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="group_name",
+            full_name="google.devtools.clouderrorreporting.v1beta1.GetGroupRequest.group_name",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        )
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=218,
+    serialized_end=255,
 )
 
 
 _UPDATEGROUPREQUEST = _descriptor.Descriptor(
-  name='UpdateGroupRequest',
-  full_name='google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='group', full_name='google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest.group', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=257,
-  serialized_end=349,
+    name="UpdateGroupRequest",
+    full_name="google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="group",
+            full_name="google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest.group",
+            index=0,
+            number=1,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        )
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=257,
+    serialized_end=349,
 )
 
-_UPDATEGROUPREQUEST.fields_by_name['group'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP
-DESCRIPTOR.message_types_by_name['GetGroupRequest'] = _GETGROUPREQUEST
-DESCRIPTOR.message_types_by_name['UpdateGroupRequest'] = _UPDATEGROUPREQUEST
+_UPDATEGROUPREQUEST.fields_by_name[
+    "group"
+].message_type = (
+    google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP
+)
+DESCRIPTOR.message_types_by_name["GetGroupRequest"] = _GETGROUPREQUEST
+DESCRIPTOR.message_types_by_name["UpdateGroupRequest"] = _UPDATEGROUPREQUEST
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-GetGroupRequest = _reflection.GeneratedProtocolMessageType('GetGroupRequest', (_message.Message,), dict(
-  DESCRIPTOR = _GETGROUPREQUEST,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2'
-  ,
-  __doc__ = """A request to return an individual group.
+GetGroupRequest = _reflection.GeneratedProtocolMessageType(
+    "GetGroupRequest",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_GETGROUPREQUEST,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2",
+        __doc__="""A request to return an individual group.
   
   
   Attributes:
@@ -108,15 +137,18 @@
           return a list of groups belonging to this project.  Example:
           projects/my-project-123/groups/my-group
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.GetGroupRequest)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.GetGroupRequest)
+    ),
+)
 _sym_db.RegisterMessage(GetGroupRequest)
 
-UpdateGroupRequest = _reflection.GeneratedProtocolMessageType('UpdateGroupRequest', (_message.Message,), dict(
-  DESCRIPTOR = _UPDATEGROUPREQUEST,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2'
-  ,
-  __doc__ = """A request to replace the existing data for the given group.
+UpdateGroupRequest = _reflection.GeneratedProtocolMessageType(
+    "UpdateGroupRequest",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_UPDATEGROUPREQUEST,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2",
+        __doc__="""A request to replace the existing data for the given group.
   
   
   Attributes:
@@ -124,44 +156,61 @@
           [Required] The group which replaces the resource on the
           server.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest)
+    ),
+)
 _sym_db.RegisterMessage(UpdateGroupRequest)
 
 
 DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1'))
+DESCRIPTOR._options = _descriptor._ParseOptions(
+    descriptor_pb2.FileOptions(),
+    _b(
+        "\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1"
+    ),
+)
 
 _ERRORGROUPSERVICE = _descriptor.ServiceDescriptor(
-  name='ErrorGroupService',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupService',
-  file=DESCRIPTOR,
-  index=0,
-  options=None,
-  serialized_start=352,
-  serialized_end=750,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='GetGroup',
-    full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.GetGroup',
+    name="ErrorGroupService",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupService",
+    file=DESCRIPTOR,
     index=0,
-    containing_service=None,
-    input_type=_GETGROUPREQUEST,
-    output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP,
-    options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002+\022)/v1beta1/{group_name=projects/*/groups/*}')),
-  ),
-  _descriptor.MethodDescriptor(
-    name='UpdateGroup',
-    full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.UpdateGroup',
-    index=1,
-    containing_service=None,
-    input_type=_UPDATEGROUPREQUEST,
-    output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP,
-    options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0022\032)/v1beta1/{group.name=projects/*/groups/*}:\005group')),
-  ),
-])
+    options=None,
+    serialized_start=352,
+    serialized_end=750,
+    methods=[
+        _descriptor.MethodDescriptor(
+            name="GetGroup",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.GetGroup",
+            index=0,
+            containing_service=None,
+            input_type=_GETGROUPREQUEST,
+            output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP,
+            options=_descriptor._ParseOptions(
+                descriptor_pb2.MethodOptions(),
+                _b(
+                    "\202\323\344\223\002+\022)/v1beta1/{group_name=projects/*/groups/*}"
+                ),
+            ),
+        ),
+        _descriptor.MethodDescriptor(
+            name="UpdateGroup",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.UpdateGroup",
+            index=1,
+            containing_service=None,
+            input_type=_UPDATEGROUPREQUEST,
+            output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP,
+            options=_descriptor._ParseOptions(
+                descriptor_pb2.MethodOptions(),
+                _b(
+                    "\202\323\344\223\0022\032)/v1beta1/{group.name=projects/*/groups/*}:\005group"
+                ),
+            ),
+        ),
+    ],
+)
 _sym_db.RegisterServiceDescriptor(_ERRORGROUPSERVICE)
 
-DESCRIPTOR.services_by_name['ErrorGroupService'] = _ERRORGROUPSERVICE
+DESCRIPTOR.services_by_name["ErrorGroupService"] = _ERRORGROUPSERVICE
 
 # @@protoc_insertion_point(module_scope)
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py
index 3efb75e49df7..3849772ff67d 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py
@@ -1,65 +1,71 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
 import grpc
 
-from google.cloud.errorreporting_v1beta1.proto import common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2
-from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2
+from google.cloud.errorreporting_v1beta1.proto import (
+    common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2,
+)
+from google.cloud.errorreporting_v1beta1.proto import (
+    error_group_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2,
+)
 
 
 class ErrorGroupServiceStub(object):
-  """Service for retrieving and updating individual error groups.
+    """Service for retrieving and updating individual error groups.
   """
 
-  def __init__(self, channel):
-    """Constructor.
+    def __init__(self, channel):
+        """Constructor.
 
     Args:
       channel: A grpc.Channel.
     """
-    self.GetGroup = channel.unary_unary(
-        '/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup',
-        request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.SerializeToString,
-        response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString,
+        self.GetGroup = channel.unary_unary(
+            "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup",
+            request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.SerializeToString,
+            response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString,
         )
-    self.UpdateGroup = channel.unary_unary(
-        '/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup',
-        request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.SerializeToString,
-        response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString,
+        self.UpdateGroup = channel.unary_unary(
+            "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup",
+            request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.SerializeToString,
+            response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString,
         )
 
 
 class ErrorGroupServiceServicer(object):
-  """Service for retrieving and updating individual error groups.
+    """Service for retrieving and updating individual error groups.
   """
 
-  def GetGroup(self, request, context):
-    """Get the specified group.
+    def GetGroup(self, request, context):
+        """Get the specified group.
     """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details("Method not implemented!")
+        raise NotImplementedError("Method not implemented!")
 
-  def UpdateGroup(self, request, context):
-    """Replace the data for the specified group.
+    def UpdateGroup(self, request, context):
+        """Replace the data for the specified group.
     Fails if the group does not exist.
     """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details("Method not implemented!")
+        raise NotImplementedError("Method not implemented!")
 
 
 def add_ErrorGroupServiceServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'GetGroup': grpc.unary_unary_rpc_method_handler(
-          servicer.GetGroup,
-          request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.FromString,
-          response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString,
-      ),
-      'UpdateGroup': grpc.unary_unary_rpc_method_handler(
-          servicer.UpdateGroup,
-          request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.FromString,
-          response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'google.devtools.clouderrorreporting.v1beta1.ErrorGroupService', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+        "GetGroup": grpc.unary_unary_rpc_method_handler(
+            servicer.GetGroup,
+            request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.FromString,
+            response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString,
+        ),
+        "UpdateGroup": grpc.unary_unary_rpc_method_handler(
+            servicer.UpdateGroup,
+            request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.FromString,
+            response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString,
+        ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+        "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService",
+        rpc_method_handlers,
+    )
+    server.add_generic_rpc_handlers((generic_handler,))
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py
index b4a827bd4f65..1369272ee6a9 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py
@@ -2,90 +2,97 @@
 # source: google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto
 
 import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+
+_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode("latin1"))
 from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 from google.protobuf import descriptor_pb2
+
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
 
 
 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
-from google.cloud.errorreporting_v1beta1.proto import common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2
+from google.cloud.errorreporting_v1beta1.proto import (
+    common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2,
+)
 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
-  name='google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto',
-  package='google.devtools.clouderrorreporting.v1beta1',
-  syntax='proto3',
-  serialized_pb=_b('\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xa1\x04\n\x15ListGroupStatsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x03(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x05 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x37\n\x14timed_count_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12S\n\talignment\x18\x07 \x01(\x0e\x32@.google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment\x12\x32\n\x0e\x61lignment_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12K\n\x05order\x18\t \x01(\x0e\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder\x12\x11\n\tpage_size\x18\x0b \x01(\x05\x12\x12\n\npage_token\x18\x0c \x01(\t\"\xc0\x01\n\x16ListGroupStatsResponse\x12W\n\x11\x65rror_group_stats\x18\x01 \x03(\x0b\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x86\x04\n\x0f\x45rrorGroupStats\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\x1c\n\x14\x61\x66\x66\x65\x63ted_users_count\x18\x03 \x01(\x03\x12M\n\x0ctimed_counts\x18\x04 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.TimedCount\x12\x33\n\x0f\x66irst_seen_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x32\n\x0elast_seen_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12V\n\x11\x61\x66\x66\x65\x63ted_services\x18\x07 \x03(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x1d\n\x15num_affected_services\x18\x08 \x01(\x05\x12O\n\x0erepresentative\x18\t \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\"y\n\nTimedCount\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x8e\x02\n\x11ListEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x04 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x11\n\tpage_size\x18\x06 \x01(\x05\x12\x12\n\npage_token\x18\x07 \x01(\t\"\xb2\x01\n\x12ListEventsResponse\x12M\n\x0c\x65rror_events\x18\x01 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe7\x01\n\x0eQueryTimeRange\x12R\n\x06period\x18\x01 \x01(\x0e\x32\x42.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period\"\x80\x01\n\x06Period\x12\x16\n\x12PERIOD_UNSPECIFIED\x10\x00\x12\x11\n\rPERIOD_1_HOUR\x10\x01\x12\x12\n\x0ePERIOD_6_HOURS\x10\x02\x12\x10\n\x0cPERIOD_1_DAY\x10\x03\x12\x11\n\rPERIOD_1_WEEK\x10\x04\x12\x12\n\x0ePERIOD_30_DAYS\x10\x05\"O\n\x14ServiceContextFilter\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\"+\n\x13\x44\x65leteEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteEventsResponse*u\n\x13TimedCountAlignment\x12%\n!ERROR_COUNT_ALIGNMENT_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x41LIGNMENT_EQUAL_ROUNDED\x10\x01\x12\x1a\n\x16\x41LIGNMENT_EQUAL_AT_END\x10\x02*}\n\x0f\x45rrorGroupOrder\x12\x1b\n\x17GROUP_ORDER_UNSPECIFIED\x10\x00\x12\x0e\n\nCOUNT_DESC\x10\x01\x12\x12\n\x0eLAST_SEEN_DESC\x10\x02\x12\x10\n\x0c\x43REATED_DESC\x10\x03\x12\x17\n\x13\x41\x46\x46\x45\x43TED_USERS_DESC\x10\x04\x32\xf2\x04\n\x11\x45rrorStatsService\x12\xd0\x01\n\x0eListGroupStats\x12\x42.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest\x1a\x43.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse\"5\x82\xd3\xe4\x93\x02/\x12-/v1beta1/{project_name=projects/*}/groupStats\x12\xc0\x01\n\nListEvents\x12>.google.devtools.clouderrorreporting.v1beta1.ListEventsRequest\x1a?.google.devtools.clouderrorreporting.v1beta1.ListEventsResponse\"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{project_name=projects/*}/events\x12\xc6\x01\n\x0c\x44\x65leteEvents\x12@.google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest\x1a\x41.google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse\"1\x82\xd3\xe4\x93\x02+*)/v1beta1/{project_name=projects/*}/eventsB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorStatsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3')
-  ,
-  dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
+    name="google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto",
+    package="google.devtools.clouderrorreporting.v1beta1",
+    syntax="proto3",
+    serialized_pb=_b(
+        '\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xa1\x04\n\x15ListGroupStatsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x03(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x05 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x37\n\x14timed_count_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12S\n\talignment\x18\x07 \x01(\x0e\x32@.google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment\x12\x32\n\x0e\x61lignment_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12K\n\x05order\x18\t \x01(\x0e\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder\x12\x11\n\tpage_size\x18\x0b \x01(\x05\x12\x12\n\npage_token\x18\x0c \x01(\t"\xc0\x01\n\x16ListGroupStatsResponse\x12W\n\x11\x65rror_group_stats\x18\x01 \x03(\x0b\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\x86\x04\n\x0f\x45rrorGroupStats\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\x1c\n\x14\x61\x66\x66\x65\x63ted_users_count\x18\x03 \x01(\x03\x12M\n\x0ctimed_counts\x18\x04 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.TimedCount\x12\x33\n\x0f\x66irst_seen_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x32\n\x0elast_seen_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12V\n\x11\x61\x66\x66\x65\x63ted_services\x18\x07 \x03(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x1d\n\x15num_affected_services\x18\x08 \x01(\x05\x12O\n\x0erepresentative\x18\t \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent"y\n\nTimedCount\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\x8e\x02\n\x11ListEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x04 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x11\n\tpage_size\x18\x06 \x01(\x05\x12\x12\n\npage_token\x18\x07 \x01(\t"\xb2\x01\n\x12ListEventsResponse\x12M\n\x0c\x65rror_events\x18\x01 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\xe7\x01\n\x0eQueryTimeRange\x12R\n\x06period\x18\x01 \x01(\x0e\x32\x42.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period"\x80\x01\n\x06Period\x12\x16\n\x12PERIOD_UNSPECIFIED\x10\x00\x12\x11\n\rPERIOD_1_HOUR\x10\x01\x12\x12\n\x0ePERIOD_6_HOURS\x10\x02\x12\x10\n\x0cPERIOD_1_DAY\x10\x03\x12\x11\n\rPERIOD_1_WEEK\x10\x04\x12\x12\n\x0ePERIOD_30_DAYS\x10\x05"O\n\x14ServiceContextFilter\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t"+\n\x13\x44\x65leteEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t"\x16\n\x14\x44\x65leteEventsResponse*u\n\x13TimedCountAlignment\x12%\n!ERROR_COUNT_ALIGNMENT_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x41LIGNMENT_EQUAL_ROUNDED\x10\x01\x12\x1a\n\x16\x41LIGNMENT_EQUAL_AT_END\x10\x02*}\n\x0f\x45rrorGroupOrder\x12\x1b\n\x17GROUP_ORDER_UNSPECIFIED\x10\x00\x12\x0e\n\nCOUNT_DESC\x10\x01\x12\x12\n\x0eLAST_SEEN_DESC\x10\x02\x12\x10\n\x0c\x43REATED_DESC\x10\x03\x12\x17\n\x13\x41\x46\x46\x45\x43TED_USERS_DESC\x10\x04\x32\xf2\x04\n\x11\x45rrorStatsService\x12\xd0\x01\n\x0eListGroupStats\x12\x42.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest\x1a\x43.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse"5\x82\xd3\xe4\x93\x02/\x12-/v1beta1/{project_name=projects/*}/groupStats\x12\xc0\x01\n\nListEvents\x12>.google.devtools.clouderrorreporting.v1beta1.ListEventsRequest\x1a?.google.devtools.clouderrorreporting.v1beta1.ListEventsResponse"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{project_name=projects/*}/events\x12\xc6\x01\n\x0c\x44\x65leteEvents\x12@.google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest\x1a\x41.google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse"1\x82\xd3\xe4\x93\x02+*)/v1beta1/{project_name=projects/*}/eventsB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorStatsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3'
+    ),
+    dependencies=[
+        google_dot_api_dot_annotations__pb2.DESCRIPTOR,
+        google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,
+        google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,
+        google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,
+    ],
+)
 
 _TIMEDCOUNTALIGNMENT = _descriptor.EnumDescriptor(
-  name='TimedCountAlignment',
-  full_name='google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ERROR_COUNT_ALIGNMENT_UNSPECIFIED', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ALIGNMENT_EQUAL_ROUNDED', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ALIGNMENT_EQUAL_AT_END', index=2, number=2,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=2508,
-  serialized_end=2625,
+    name="TimedCountAlignment",
+    full_name="google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment",
+    filename=None,
+    file=DESCRIPTOR,
+    values=[
+        _descriptor.EnumValueDescriptor(
+            name="ERROR_COUNT_ALIGNMENT_UNSPECIFIED",
+            index=0,
+            number=0,
+            options=None,
+            type=None,
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="ALIGNMENT_EQUAL_ROUNDED", index=1, number=1, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="ALIGNMENT_EQUAL_AT_END", index=2, number=2, options=None, type=None
+        ),
+    ],
+    containing_type=None,
+    options=None,
+    serialized_start=2508,
+    serialized_end=2625,
 )
 _sym_db.RegisterEnumDescriptor(_TIMEDCOUNTALIGNMENT)
 
 TimedCountAlignment = enum_type_wrapper.EnumTypeWrapper(_TIMEDCOUNTALIGNMENT)
 _ERRORGROUPORDER = _descriptor.EnumDescriptor(
-  name='ErrorGroupOrder',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='GROUP_ORDER_UNSPECIFIED', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='COUNT_DESC', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='LAST_SEEN_DESC', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='CREATED_DESC', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='AFFECTED_USERS_DESC', index=4, number=4,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=2627,
-  serialized_end=2752,
+    name="ErrorGroupOrder",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder",
+    filename=None,
+    file=DESCRIPTOR,
+    values=[
+        _descriptor.EnumValueDescriptor(
+            name="GROUP_ORDER_UNSPECIFIED", index=0, number=0, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="COUNT_DESC", index=1, number=1, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="LAST_SEEN_DESC", index=2, number=2, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="CREATED_DESC", index=3, number=3, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="AFFECTED_USERS_DESC", index=4, number=4, options=None, type=None
+        ),
+    ],
+    containing_type=None,
+    options=None,
+    serialized_start=2627,
+    serialized_end=2752,
 )
 _sym_db.RegisterEnumDescriptor(_ERRORGROUPORDER)
 
@@ -101,598 +108,1027 @@
 
 
 _QUERYTIMERANGE_PERIOD = _descriptor.EnumDescriptor(
-  name='Period',
-  full_name='google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='PERIOD_UNSPECIFIED', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='PERIOD_1_HOUR', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='PERIOD_6_HOURS', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='PERIOD_1_DAY', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='PERIOD_1_WEEK', index=4, number=4,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='PERIOD_30_DAYS', index=5, number=5,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=2228,
-  serialized_end=2356,
+    name="Period",
+    full_name="google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period",
+    filename=None,
+    file=DESCRIPTOR,
+    values=[
+        _descriptor.EnumValueDescriptor(
+            name="PERIOD_UNSPECIFIED", index=0, number=0, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="PERIOD_1_HOUR", index=1, number=1, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="PERIOD_6_HOURS", index=2, number=2, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="PERIOD_1_DAY", index=3, number=3, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="PERIOD_1_WEEK", index=4, number=4, options=None, type=None
+        ),
+        _descriptor.EnumValueDescriptor(
+            name="PERIOD_30_DAYS", index=5, number=5, options=None, type=None
+        ),
+    ],
+    containing_type=None,
+    options=None,
+    serialized_start=2228,
+    serialized_end=2356,
 )
 _sym_db.RegisterEnumDescriptor(_QUERYTIMERANGE_PERIOD)
 
 
 _LISTGROUPSTATSREQUEST = _descriptor.Descriptor(
-  name='ListGroupStatsRequest',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='project_name', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.project_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id', index=1,
-      number=2, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='service_filter', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.service_filter', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='time_range', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.time_range', index=3,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='timed_count_duration', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.timed_count_duration', index=4,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='alignment', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment', index=5,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='alignment_time', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment_time', index=6,
-      number=8, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='order', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.order', index=7,
-      number=9, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='page_size', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_size', index=8,
-      number=11, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_token', index=9,
-      number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=284,
-  serialized_end=829,
+    name="ListGroupStatsRequest",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="project_name",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.project_name",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="group_id",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id",
+            index=1,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=3,
+            has_default_value=False,
+            default_value=[],
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="service_filter",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.service_filter",
+            index=2,
+            number=3,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="time_range",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.time_range",
+            index=3,
+            number=5,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="timed_count_duration",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.timed_count_duration",
+            index=4,
+            number=6,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="alignment",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment",
+            index=5,
+            number=7,
+            type=14,
+            cpp_type=8,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="alignment_time",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment_time",
+            index=6,
+            number=8,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="order",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.order",
+            index=7,
+            number=9,
+            type=14,
+            cpp_type=8,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="page_size",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_size",
+            index=8,
+            number=11,
+            type=5,
+            cpp_type=1,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="page_token",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_token",
+            index=9,
+            number=12,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=284,
+    serialized_end=829,
 )
 
 
 _LISTGROUPSTATSRESPONSE = _descriptor.Descriptor(
-  name='ListGroupStatsResponse',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='error_group_stats', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.error_group_stats', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='next_page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.next_page_token', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='time_range_begin', full_name='google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.time_range_begin', index=2,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=832,
-  serialized_end=1024,
+    name="ListGroupStatsResponse",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="error_group_stats",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.error_group_stats",
+            index=0,
+            number=1,
+            type=11,
+            cpp_type=10,
+            label=3,
+            has_default_value=False,
+            default_value=[],
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="next_page_token",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.next_page_token",
+            index=1,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="time_range_begin",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.time_range_begin",
+            index=2,
+            number=4,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=832,
+    serialized_end=1024,
 )
 
 
 _ERRORGROUPSTATS = _descriptor.Descriptor(
-  name='ErrorGroupStats',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='group', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.group', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='count', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.count', index=1,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='affected_users_count', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_users_count', index=2,
-      number=3, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='timed_counts', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.timed_counts', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='first_seen_time', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.first_seen_time', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='last_seen_time', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.last_seen_time', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='affected_services', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_services', index=6,
-      number=7, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='num_affected_services', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.num_affected_services', index=7,
-      number=8, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='representative', full_name='google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.representative', index=8,
-      number=9, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1027,
-  serialized_end=1545,
+    name="ErrorGroupStats",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="group",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.group",
+            index=0,
+            number=1,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="count",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.count",
+            index=1,
+            number=2,
+            type=3,
+            cpp_type=2,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="affected_users_count",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_users_count",
+            index=2,
+            number=3,
+            type=3,
+            cpp_type=2,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="timed_counts",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.timed_counts",
+            index=3,
+            number=4,
+            type=11,
+            cpp_type=10,
+            label=3,
+            has_default_value=False,
+            default_value=[],
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="first_seen_time",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.first_seen_time",
+            index=4,
+            number=5,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="last_seen_time",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.last_seen_time",
+            index=5,
+            number=6,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="affected_services",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_services",
+            index=6,
+            number=7,
+            type=11,
+            cpp_type=10,
+            label=3,
+            has_default_value=False,
+            default_value=[],
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="num_affected_services",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.num_affected_services",
+            index=7,
+            number=8,
+            type=5,
+            cpp_type=1,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="representative",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.representative",
+            index=8,
+            number=9,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=1027,
+    serialized_end=1545,
 )
 
 
 _TIMEDCOUNT = _descriptor.Descriptor(
-  name='TimedCount',
-  full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='count', full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount.count', index=0,
-      number=1, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='start_time', full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount.start_time', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='end_time', full_name='google.devtools.clouderrorreporting.v1beta1.TimedCount.end_time', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1547,
-  serialized_end=1668,
+    name="TimedCount",
+    full_name="google.devtools.clouderrorreporting.v1beta1.TimedCount",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="count",
+            full_name="google.devtools.clouderrorreporting.v1beta1.TimedCount.count",
+            index=0,
+            number=1,
+            type=3,
+            cpp_type=2,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="start_time",
+            full_name="google.devtools.clouderrorreporting.v1beta1.TimedCount.start_time",
+            index=1,
+            number=2,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="end_time",
+            full_name="google.devtools.clouderrorreporting.v1beta1.TimedCount.end_time",
+            index=2,
+            number=3,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=1547,
+    serialized_end=1668,
 )
 
 
 _LISTEVENTSREQUEST = _descriptor.Descriptor(
-  name='ListEventsRequest',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='project_name', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.project_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='group_id', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.group_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='service_filter', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.service_filter', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='time_range', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.time_range', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='page_size', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_size', index=4,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_token', index=5,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1671,
-  serialized_end=1941,
+    name="ListEventsRequest",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="project_name",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.project_name",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="group_id",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.group_id",
+            index=1,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="service_filter",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.service_filter",
+            index=2,
+            number=3,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="time_range",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.time_range",
+            index=3,
+            number=4,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="page_size",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_size",
+            index=4,
+            number=6,
+            type=5,
+            cpp_type=1,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="page_token",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_token",
+            index=5,
+            number=7,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=1671,
+    serialized_end=1941,
 )
 
 
 _LISTEVENTSRESPONSE = _descriptor.Descriptor(
-  name='ListEventsResponse',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='error_events', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.error_events', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='next_page_token', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.next_page_token', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='time_range_begin', full_name='google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.time_range_begin', index=2,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1944,
-  serialized_end=2122,
+    name="ListEventsResponse",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsResponse",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="error_events",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.error_events",
+            index=0,
+            number=1,
+            type=11,
+            cpp_type=10,
+            label=3,
+            has_default_value=False,
+            default_value=[],
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="next_page_token",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.next_page_token",
+            index=1,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="time_range_begin",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.time_range_begin",
+            index=2,
+            number=4,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=1944,
+    serialized_end=2122,
 )
 
 
 _QUERYTIMERANGE = _descriptor.Descriptor(
-  name='QueryTimeRange',
-  full_name='google.devtools.clouderrorreporting.v1beta1.QueryTimeRange',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='period', full_name='google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.period', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _QUERYTIMERANGE_PERIOD,
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2125,
-  serialized_end=2356,
+    name="QueryTimeRange",
+    full_name="google.devtools.clouderrorreporting.v1beta1.QueryTimeRange",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="period",
+            full_name="google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.period",
+            index=0,
+            number=1,
+            type=14,
+            cpp_type=8,
+            label=1,
+            has_default_value=False,
+            default_value=0,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        )
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[_QUERYTIMERANGE_PERIOD],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=2125,
+    serialized_end=2356,
 )
 
 
 _SERVICECONTEXTFILTER = _descriptor.Descriptor(
-  name='ServiceContextFilter',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.service', index=0,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='version', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.version', index=1,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='resource_type', full_name='google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.resource_type', index=2,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2358,
-  serialized_end=2437,
+    name="ServiceContextFilter",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="service",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.service",
+            index=0,
+            number=2,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="version",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.version",
+            index=1,
+            number=3,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="resource_type",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.resource_type",
+            index=2,
+            number=4,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=2358,
+    serialized_end=2437,
 )
 
 
 _DELETEEVENTSREQUEST = _descriptor.Descriptor(
-  name='DeleteEventsRequest',
-  full_name='google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='project_name', full_name='google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest.project_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2439,
-  serialized_end=2482,
+    name="DeleteEventsRequest",
+    full_name="google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="project_name",
+            full_name="google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest.project_name",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        )
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=2439,
+    serialized_end=2482,
 )
 
 
 _DELETEEVENTSRESPONSE = _descriptor.Descriptor(
-  name='DeleteEventsResponse',
-  full_name='google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2484,
-  serialized_end=2506,
+    name="DeleteEventsResponse",
+    full_name="google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=2484,
+    serialized_end=2506,
 )
 
-_LISTGROUPSTATSREQUEST.fields_by_name['service_filter'].message_type = _SERVICECONTEXTFILTER
-_LISTGROUPSTATSREQUEST.fields_by_name['time_range'].message_type = _QUERYTIMERANGE
-_LISTGROUPSTATSREQUEST.fields_by_name['timed_count_duration'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
-_LISTGROUPSTATSREQUEST.fields_by_name['alignment'].enum_type = _TIMEDCOUNTALIGNMENT
-_LISTGROUPSTATSREQUEST.fields_by_name['alignment_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_LISTGROUPSTATSREQUEST.fields_by_name['order'].enum_type = _ERRORGROUPORDER
-_LISTGROUPSTATSRESPONSE.fields_by_name['error_group_stats'].message_type = _ERRORGROUPSTATS
-_LISTGROUPSTATSRESPONSE.fields_by_name['time_range_begin'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_ERRORGROUPSTATS.fields_by_name['group'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP
-_ERRORGROUPSTATS.fields_by_name['timed_counts'].message_type = _TIMEDCOUNT
-_ERRORGROUPSTATS.fields_by_name['first_seen_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_ERRORGROUPSTATS.fields_by_name['last_seen_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_ERRORGROUPSTATS.fields_by_name['affected_services'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT
-_ERRORGROUPSTATS.fields_by_name['representative'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT
-_TIMEDCOUNT.fields_by_name['start_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_TIMEDCOUNT.fields_by_name['end_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_LISTEVENTSREQUEST.fields_by_name['service_filter'].message_type = _SERVICECONTEXTFILTER
-_LISTEVENTSREQUEST.fields_by_name['time_range'].message_type = _QUERYTIMERANGE
-_LISTEVENTSRESPONSE.fields_by_name['error_events'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT
-_LISTEVENTSRESPONSE.fields_by_name['time_range_begin'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_QUERYTIMERANGE.fields_by_name['period'].enum_type = _QUERYTIMERANGE_PERIOD
+_LISTGROUPSTATSREQUEST.fields_by_name[
+    "service_filter"
+].message_type = _SERVICECONTEXTFILTER
+_LISTGROUPSTATSREQUEST.fields_by_name["time_range"].message_type = _QUERYTIMERANGE
+_LISTGROUPSTATSREQUEST.fields_by_name[
+    "timed_count_duration"
+].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
+_LISTGROUPSTATSREQUEST.fields_by_name["alignment"].enum_type = _TIMEDCOUNTALIGNMENT
+_LISTGROUPSTATSREQUEST.fields_by_name[
+    "alignment_time"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_LISTGROUPSTATSREQUEST.fields_by_name["order"].enum_type = _ERRORGROUPORDER
+_LISTGROUPSTATSRESPONSE.fields_by_name[
+    "error_group_stats"
+].message_type = _ERRORGROUPSTATS
+_LISTGROUPSTATSRESPONSE.fields_by_name[
+    "time_range_begin"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_ERRORGROUPSTATS.fields_by_name[
+    "group"
+].message_type = (
+    google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP
+)
+_ERRORGROUPSTATS.fields_by_name["timed_counts"].message_type = _TIMEDCOUNT
+_ERRORGROUPSTATS.fields_by_name[
+    "first_seen_time"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_ERRORGROUPSTATS.fields_by_name[
+    "last_seen_time"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_ERRORGROUPSTATS.fields_by_name[
+    "affected_services"
+].message_type = (
+    google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT
+)
+_ERRORGROUPSTATS.fields_by_name[
+    "representative"
+].message_type = (
+    google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT
+)
+_TIMEDCOUNT.fields_by_name[
+    "start_time"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_TIMEDCOUNT.fields_by_name[
+    "end_time"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_LISTEVENTSREQUEST.fields_by_name["service_filter"].message_type = _SERVICECONTEXTFILTER
+_LISTEVENTSREQUEST.fields_by_name["time_range"].message_type = _QUERYTIMERANGE
+_LISTEVENTSRESPONSE.fields_by_name[
+    "error_events"
+].message_type = (
+    google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT
+)
+_LISTEVENTSRESPONSE.fields_by_name[
+    "time_range_begin"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_QUERYTIMERANGE.fields_by_name["period"].enum_type = _QUERYTIMERANGE_PERIOD
 _QUERYTIMERANGE_PERIOD.containing_type = _QUERYTIMERANGE
-DESCRIPTOR.message_types_by_name['ListGroupStatsRequest'] = _LISTGROUPSTATSREQUEST
-DESCRIPTOR.message_types_by_name['ListGroupStatsResponse'] = _LISTGROUPSTATSRESPONSE
-DESCRIPTOR.message_types_by_name['ErrorGroupStats'] = _ERRORGROUPSTATS
-DESCRIPTOR.message_types_by_name['TimedCount'] = _TIMEDCOUNT
-DESCRIPTOR.message_types_by_name['ListEventsRequest'] = _LISTEVENTSREQUEST
-DESCRIPTOR.message_types_by_name['ListEventsResponse'] = _LISTEVENTSRESPONSE
-DESCRIPTOR.message_types_by_name['QueryTimeRange'] = _QUERYTIMERANGE
-DESCRIPTOR.message_types_by_name['ServiceContextFilter'] = _SERVICECONTEXTFILTER
-DESCRIPTOR.message_types_by_name['DeleteEventsRequest'] = _DELETEEVENTSREQUEST
-DESCRIPTOR.message_types_by_name['DeleteEventsResponse'] = _DELETEEVENTSRESPONSE
-DESCRIPTOR.enum_types_by_name['TimedCountAlignment'] = _TIMEDCOUNTALIGNMENT
-DESCRIPTOR.enum_types_by_name['ErrorGroupOrder'] = _ERRORGROUPORDER
+DESCRIPTOR.message_types_by_name["ListGroupStatsRequest"] = _LISTGROUPSTATSREQUEST
+DESCRIPTOR.message_types_by_name["ListGroupStatsResponse"] = _LISTGROUPSTATSRESPONSE
+DESCRIPTOR.message_types_by_name["ErrorGroupStats"] = _ERRORGROUPSTATS
+DESCRIPTOR.message_types_by_name["TimedCount"] = _TIMEDCOUNT
+DESCRIPTOR.message_types_by_name["ListEventsRequest"] = _LISTEVENTSREQUEST
+DESCRIPTOR.message_types_by_name["ListEventsResponse"] = _LISTEVENTSRESPONSE
+DESCRIPTOR.message_types_by_name["QueryTimeRange"] = _QUERYTIMERANGE
+DESCRIPTOR.message_types_by_name["ServiceContextFilter"] = _SERVICECONTEXTFILTER
+DESCRIPTOR.message_types_by_name["DeleteEventsRequest"] = _DELETEEVENTSREQUEST
+DESCRIPTOR.message_types_by_name["DeleteEventsResponse"] = _DELETEEVENTSRESPONSE
+DESCRIPTOR.enum_types_by_name["TimedCountAlignment"] = _TIMEDCOUNTALIGNMENT
+DESCRIPTOR.enum_types_by_name["ErrorGroupOrder"] = _ERRORGROUPORDER
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-ListGroupStatsRequest = _reflection.GeneratedProtocolMessageType('ListGroupStatsRequest', (_message.Message,), dict(
-  DESCRIPTOR = _LISTGROUPSTATSREQUEST,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Specifies a set of ``ErrorGroupStats`` to return.
+ListGroupStatsRequest = _reflection.GeneratedProtocolMessageType(
+    "ListGroupStatsRequest",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_LISTGROUPSTATSREQUEST,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Specifies a set of ``ErrorGroupStats`` to return.
   
   
   Attributes:
@@ -734,15 +1170,18 @@
           response. To view additional results, pass this token along
           with the identical query parameters as the first request.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest)
+    ),
+)
 _sym_db.RegisterMessage(ListGroupStatsRequest)
 
-ListGroupStatsResponse = _reflection.GeneratedProtocolMessageType('ListGroupStatsResponse', (_message.Message,), dict(
-  DESCRIPTOR = _LISTGROUPSTATSRESPONSE,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Contains a set of requested error group stats.
+ListGroupStatsResponse = _reflection.GeneratedProtocolMessageType(
+    "ListGroupStatsResponse",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_LISTGROUPSTATSRESPONSE,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Contains a set of requested error group stats.
   
   
   Attributes:
@@ -759,15 +1198,18 @@
           has exceeded the storage quota and older data has been
           deleted.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse)
+    ),
+)
 _sym_db.RegisterMessage(ListGroupStatsResponse)
 
-ErrorGroupStats = _reflection.GeneratedProtocolMessageType('ErrorGroupStats', (_message.Message,), dict(
-  DESCRIPTOR = _ERRORGROUPSTATS,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Data extracted for a specific group based on certain filter criteria,
+ErrorGroupStats = _reflection.GeneratedProtocolMessageType(
+    "ErrorGroupStats",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_ERRORGROUPSTATS,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Data extracted for a specific group based on certain filter criteria,
   such as a given time period and/or service filter.
   
   
@@ -818,15 +1260,18 @@
           showing an arbitrary representative provides insight into the
           characteristics of the group as a whole.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats)
+    ),
+)
 _sym_db.RegisterMessage(ErrorGroupStats)
 
-TimedCount = _reflection.GeneratedProtocolMessageType('TimedCount', (_message.Message,), dict(
-  DESCRIPTOR = _TIMEDCOUNT,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """The number of errors in a given time period. All numbers are approximate
+TimedCount = _reflection.GeneratedProtocolMessageType(
+    "TimedCount",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_TIMEDCOUNT,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""The number of errors in a given time period. All numbers are approximate
   since the error events are sampled before counting them.
   
   
@@ -838,15 +1283,18 @@
       end_time:
           End of the time period to which ``count`` refers (excluded).
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TimedCount)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TimedCount)
+    ),
+)
 _sym_db.RegisterMessage(TimedCount)
 
-ListEventsRequest = _reflection.GeneratedProtocolMessageType('ListEventsRequest', (_message.Message,), dict(
-  DESCRIPTOR = _LISTEVENTSREQUEST,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Specifies a set of error events to return.
+ListEventsRequest = _reflection.GeneratedProtocolMessageType(
+    "ListEventsRequest",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_LISTEVENTSREQUEST,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Specifies a set of error events to return.
   
   
   Attributes:
@@ -873,15 +1321,18 @@
           [Optional] A ``next_page_token`` provided by a previous
           response.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsRequest)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsRequest)
+    ),
+)
 _sym_db.RegisterMessage(ListEventsRequest)
 
-ListEventsResponse = _reflection.GeneratedProtocolMessageType('ListEventsResponse', (_message.Message,), dict(
-  DESCRIPTOR = _LISTEVENTSRESPONSE,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Contains a set of requested error events.
+ListEventsResponse = _reflection.GeneratedProtocolMessageType(
+    "ListEventsResponse",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_LISTEVENTSRESPONSE,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Contains a set of requested error events.
   
   
   Attributes:
@@ -895,15 +1346,18 @@
           The timestamp specifies the start time to which the request
           was restricted.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsResponse)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsResponse)
+    ),
+)
 _sym_db.RegisterMessage(ListEventsResponse)
 
-QueryTimeRange = _reflection.GeneratedProtocolMessageType('QueryTimeRange', (_message.Message,), dict(
-  DESCRIPTOR = _QUERYTIMERANGE,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Requests might be rejected or the resulting timed count durations might
+QueryTimeRange = _reflection.GeneratedProtocolMessageType(
+    "QueryTimeRange",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_QUERYTIMERANGE,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Requests might be rejected or the resulting timed count durations might
   be adjusted for lower durations.
   
   
@@ -911,15 +1365,18 @@
       period:
           Restricts the query to the specified time range.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.QueryTimeRange)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.QueryTimeRange)
+    ),
+)
 _sym_db.RegisterMessage(QueryTimeRange)
 
-ServiceContextFilter = _reflection.GeneratedProtocolMessageType('ServiceContextFilter', (_message.Message,), dict(
-  DESCRIPTOR = _SERVICECONTEXTFILTER,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Specifies criteria for filtering a subset of service contexts. The
+ServiceContextFilter = _reflection.GeneratedProtocolMessageType(
+    "ServiceContextFilter",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_SERVICECONTEXTFILTER,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Specifies criteria for filtering a subset of service contexts. The
   fields in the filter correspond to the fields in ``ServiceContext``.
   Only exact, case-sensitive matches are supported. If a field is unset or
   empty, it matches arbitrary values.
@@ -939,15 +1396,18 @@
           ```ServiceContext.resource_type`` `__.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter)
+    ),
+)
 _sym_db.RegisterMessage(ServiceContextFilter)
 
-DeleteEventsRequest = _reflection.GeneratedProtocolMessageType('DeleteEventsRequest', (_message.Message,), dict(
-  DESCRIPTOR = _DELETEEVENTSREQUEST,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Deletes all events in the project.
+DeleteEventsRequest = _reflection.GeneratedProtocolMessageType(
+    "DeleteEventsRequest",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_DELETEEVENTSREQUEST,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Deletes all events in the project.
   
   
   Attributes:
@@ -958,63 +1418,86 @@
           `__. Example:
           ``projects/my-project-123``.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest)
+    ),
+)
 _sym_db.RegisterMessage(DeleteEventsRequest)
 
-DeleteEventsResponse = _reflection.GeneratedProtocolMessageType('DeleteEventsResponse', (_message.Message,), dict(
-  DESCRIPTOR = _DELETEEVENTSRESPONSE,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2'
-  ,
-  __doc__ = """Response message for deleting error events.
+DeleteEventsResponse = _reflection.GeneratedProtocolMessageType(
+    "DeleteEventsResponse",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_DELETEEVENTSRESPONSE,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2",
+        __doc__="""Response message for deleting error events.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse)
+    ),
+)
 _sym_db.RegisterMessage(DeleteEventsResponse)
 
 
 DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1'))
+DESCRIPTOR._options = _descriptor._ParseOptions(
+    descriptor_pb2.FileOptions(),
+    _b(
+        "\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1"
+    ),
+)
 
 _ERRORSTATSSERVICE = _descriptor.ServiceDescriptor(
-  name='ErrorStatsService',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ErrorStatsService',
-  file=DESCRIPTOR,
-  index=0,
-  options=None,
-  serialized_start=2755,
-  serialized_end=3381,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='ListGroupStats',
-    full_name='google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats',
+    name="ErrorStatsService",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService",
+    file=DESCRIPTOR,
     index=0,
-    containing_service=None,
-    input_type=_LISTGROUPSTATSREQUEST,
-    output_type=_LISTGROUPSTATSRESPONSE,
-    options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002/\022-/v1beta1/{project_name=projects/*}/groupStats')),
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListEvents',
-    full_name='google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListEvents',
-    index=1,
-    containing_service=None,
-    input_type=_LISTEVENTSREQUEST,
-    output_type=_LISTEVENTSRESPONSE,
-    options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002+\022)/v1beta1/{project_name=projects/*}/events')),
-  ),
-  _descriptor.MethodDescriptor(
-    name='DeleteEvents',
-    full_name='google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.DeleteEvents',
-    index=2,
-    containing_service=None,
-    input_type=_DELETEEVENTSREQUEST,
-    output_type=_DELETEEVENTSRESPONSE,
-    options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002+*)/v1beta1/{project_name=projects/*}/events')),
-  ),
-])
+    options=None,
+    serialized_start=2755,
+    serialized_end=3381,
+    methods=[
+        _descriptor.MethodDescriptor(
+            name="ListGroupStats",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats",
+            index=0,
+            containing_service=None,
+            input_type=_LISTGROUPSTATSREQUEST,
+            output_type=_LISTGROUPSTATSRESPONSE,
+            options=_descriptor._ParseOptions(
+                descriptor_pb2.MethodOptions(),
+                _b(
+                    "\202\323\344\223\002/\022-/v1beta1/{project_name=projects/*}/groupStats"
+                ),
+            ),
+        ),
+        _descriptor.MethodDescriptor(
+            name="ListEvents",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListEvents",
+            index=1,
+            containing_service=None,
+            input_type=_LISTEVENTSREQUEST,
+            output_type=_LISTEVENTSRESPONSE,
+            options=_descriptor._ParseOptions(
+                descriptor_pb2.MethodOptions(),
+                _b(
+                    "\202\323\344\223\002+\022)/v1beta1/{project_name=projects/*}/events"
+                ),
+            ),
+        ),
+        _descriptor.MethodDescriptor(
+            name="DeleteEvents",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.DeleteEvents",
+            index=2,
+            containing_service=None,
+            input_type=_DELETEEVENTSREQUEST,
+            output_type=_DELETEEVENTSRESPONSE,
+            options=_descriptor._ParseOptions(
+                descriptor_pb2.MethodOptions(),
+                _b("\202\323\344\223\002+*)/v1beta1/{project_name=projects/*}/events"),
+            ),
+        ),
+    ],
+)
 _sym_db.RegisterServiceDescriptor(_ERRORSTATSSERVICE)
 
-DESCRIPTOR.services_by_name['ErrorStatsService'] = _ERRORSTATSSERVICE
+DESCRIPTOR.services_by_name["ErrorStatsService"] = _ERRORSTATSSERVICE
 
 # @@protoc_insertion_point(module_scope)
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py
index 6148a05a166a..06944055deb1 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py
@@ -1,82 +1,86 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
 import grpc
 
-from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2
+from google.cloud.errorreporting_v1beta1.proto import (
+    error_stats_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2,
+)
 
 
 class ErrorStatsServiceStub(object):
-  """An API for retrieving and managing error statistics as well as data for
+    """An API for retrieving and managing error statistics as well as data for
   individual events.
   """
 
-  def __init__(self, channel):
-    """Constructor.
+    def __init__(self, channel):
+        """Constructor.
 
     Args:
       channel: A grpc.Channel.
     """
-    self.ListGroupStats = channel.unary_unary(
-        '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats',
-        request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.SerializeToString,
-        response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.FromString,
+        self.ListGroupStats = channel.unary_unary(
+            "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats",
+            request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.SerializeToString,
+            response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.FromString,
         )
-    self.ListEvents = channel.unary_unary(
-        '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents',
-        request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.SerializeToString,
-        response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.FromString,
+        self.ListEvents = channel.unary_unary(
+            "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents",
+            request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.SerializeToString,
+            response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.FromString,
         )
-    self.DeleteEvents = channel.unary_unary(
-        '/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents',
-        request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.SerializeToString,
-        response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.FromString,
+        self.DeleteEvents = channel.unary_unary(
+            "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents",
+            request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.SerializeToString,
+            response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.FromString,
         )
 
 
 class ErrorStatsServiceServicer(object):
-  """An API for retrieving and managing error statistics as well as data for
+    """An API for retrieving and managing error statistics as well as data for
   individual events.
   """
 
-  def ListGroupStats(self, request, context):
-    """Lists the specified groups.
+    def ListGroupStats(self, request, context):
+        """Lists the specified groups.
     """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details("Method not implemented!")
+        raise NotImplementedError("Method not implemented!")
 
-  def ListEvents(self, request, context):
-    """Lists the specified events.
+    def ListEvents(self, request, context):
+        """Lists the specified events.
     """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details("Method not implemented!")
+        raise NotImplementedError("Method not implemented!")
 
-  def DeleteEvents(self, request, context):
-    """Deletes all error events of a given project.
+    def DeleteEvents(self, request, context):
+        """Deletes all error events of a given project.
     """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details("Method not implemented!")
+        raise NotImplementedError("Method not implemented!")
 
 
 def add_ErrorStatsServiceServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'ListGroupStats': grpc.unary_unary_rpc_method_handler(
-          servicer.ListGroupStats,
-          request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.FromString,
-          response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.SerializeToString,
-      ),
-      'ListEvents': grpc.unary_unary_rpc_method_handler(
-          servicer.ListEvents,
-          request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.FromString,
-          response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.SerializeToString,
-      ),
-      'DeleteEvents': grpc.unary_unary_rpc_method_handler(
-          servicer.DeleteEvents,
-          request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.FromString,
-          response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'google.devtools.clouderrorreporting.v1beta1.ErrorStatsService', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+        "ListGroupStats": grpc.unary_unary_rpc_method_handler(
+            servicer.ListGroupStats,
+            request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.FromString,
+            response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.SerializeToString,
+        ),
+        "ListEvents": grpc.unary_unary_rpc_method_handler(
+            servicer.ListEvents,
+            request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.FromString,
+            response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.SerializeToString,
+        ),
+        "DeleteEvents": grpc.unary_unary_rpc_method_handler(
+            servicer.DeleteEvents,
+            request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.FromString,
+            response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.SerializeToString,
+        ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+        "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService",
+        rpc_method_handlers,
+    )
+    server.add_generic_rpc_handlers((generic_handler,))
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py
index c8499c5f4cfd..2c5b50c14f15 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py
@@ -2,160 +2,236 @@
 # source: google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto
 
 import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+
+_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode("latin1"))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 from google.protobuf import descriptor_pb2
+
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
 
 
 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
-from google.cloud.errorreporting_v1beta1.proto import common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2
+from google.cloud.errorreporting_v1beta1.proto import (
+    common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2,
+)
 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
-  name='google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto',
-  package='google.devtools.clouderrorreporting.v1beta1',
-  syntax='proto3',
-  serialized_pb=_b('\nMgoogle/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x7f\n\x17ReportErrorEventRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12N\n\x05\x65vent\x18\x02 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent\"\x1a\n\x18ReportErrorEventResponse\"\xf7\x01\n\x12ReportedErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext2\xf8\x01\n\x13ReportErrorsService\x12\xe0\x01\n\x10ReportErrorEvent\x12\x44.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest\x1a\x45.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse\"?\x82\xd3\xe4\x93\x02\x39\"0/v1beta1/{project_name=projects/*}/events:report:\x05\x65ventB\xf9\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x18ReportErrorsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3')
-  ,
-  dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
-
-
+    name="google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto",
+    package="google.devtools.clouderrorreporting.v1beta1",
+    syntax="proto3",
+    serialized_pb=_b(
+        '\nMgoogle/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x7f\n\x17ReportErrorEventRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12N\n\x05\x65vent\x18\x02 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent"\x1a\n\x18ReportErrorEventResponse"\xf7\x01\n\x12ReportedErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext2\xf8\x01\n\x13ReportErrorsService\x12\xe0\x01\n\x10ReportErrorEvent\x12\x44.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest\x1a\x45.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse"?\x82\xd3\xe4\x93\x02\x39"0/v1beta1/{project_name=projects/*}/events:report:\x05\x65ventB\xf9\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x18ReportErrorsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3'
+    ),
+    dependencies=[
+        google_dot_api_dot_annotations__pb2.DESCRIPTOR,
+        google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR,
+        google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,
+    ],
+)
 
 
 _REPORTERROREVENTREQUEST = _descriptor.Descriptor(
-  name='ReportErrorEventRequest',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='project_name', full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.project_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='event', full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.event', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=253,
-  serialized_end=380,
+    name="ReportErrorEventRequest",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="project_name",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.project_name",
+            index=0,
+            number=1,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="event",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.event",
+            index=1,
+            number=2,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=253,
+    serialized_end=380,
 )
 
 
 _REPORTERROREVENTRESPONSE = _descriptor.Descriptor(
-  name='ReportErrorEventResponse',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=382,
-  serialized_end=408,
+    name="ReportErrorEventResponse",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=382,
+    serialized_end=408,
 )
 
 
 _REPORTEDERROREVENT = _descriptor.Descriptor(
-  name='ReportedErrorEvent',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event_time', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.event_time', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='service_context', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.service_context', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='message', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.message', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='context', full_name='google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.context', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=411,
-  serialized_end=658,
+    name="ReportedErrorEvent",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
+    filename=None,
+    file=DESCRIPTOR,
+    containing_type=None,
+    fields=[
+        _descriptor.FieldDescriptor(
+            name="event_time",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.event_time",
+            index=0,
+            number=1,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="service_context",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.service_context",
+            index=1,
+            number=2,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="message",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.message",
+            index=2,
+            number=3,
+            type=9,
+            cpp_type=9,
+            label=1,
+            has_default_value=False,
+            default_value=_b("").decode("utf-8"),
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+        _descriptor.FieldDescriptor(
+            name="context",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.context",
+            index=3,
+            number=4,
+            type=11,
+            cpp_type=10,
+            label=1,
+            has_default_value=False,
+            default_value=None,
+            message_type=None,
+            enum_type=None,
+            containing_type=None,
+            is_extension=False,
+            extension_scope=None,
+            options=None,
+            file=DESCRIPTOR,
+        ),
+    ],
+    extensions=[],
+    nested_types=[],
+    enum_types=[],
+    options=None,
+    is_extendable=False,
+    syntax="proto3",
+    extension_ranges=[],
+    oneofs=[],
+    serialized_start=411,
+    serialized_end=658,
 )
 
-_REPORTERROREVENTREQUEST.fields_by_name['event'].message_type = _REPORTEDERROREVENT
-_REPORTEDERROREVENT.fields_by_name['event_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_REPORTEDERROREVENT.fields_by_name['service_context'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT
-_REPORTEDERROREVENT.fields_by_name['context'].message_type = google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORCONTEXT
-DESCRIPTOR.message_types_by_name['ReportErrorEventRequest'] = _REPORTERROREVENTREQUEST
-DESCRIPTOR.message_types_by_name['ReportErrorEventResponse'] = _REPORTERROREVENTRESPONSE
-DESCRIPTOR.message_types_by_name['ReportedErrorEvent'] = _REPORTEDERROREVENT
+_REPORTERROREVENTREQUEST.fields_by_name["event"].message_type = _REPORTEDERROREVENT
+_REPORTEDERROREVENT.fields_by_name[
+    "event_time"
+].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_REPORTEDERROREVENT.fields_by_name[
+    "service_context"
+].message_type = (
+    google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT
+)
+_REPORTEDERROREVENT.fields_by_name[
+    "context"
+].message_type = (
+    google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORCONTEXT
+)
+DESCRIPTOR.message_types_by_name["ReportErrorEventRequest"] = _REPORTERROREVENTREQUEST
+DESCRIPTOR.message_types_by_name["ReportErrorEventResponse"] = _REPORTERROREVENTRESPONSE
+DESCRIPTOR.message_types_by_name["ReportedErrorEvent"] = _REPORTEDERROREVENT
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-ReportErrorEventRequest = _reflection.GeneratedProtocolMessageType('ReportErrorEventRequest', (_message.Message,), dict(
-  DESCRIPTOR = _REPORTERROREVENTREQUEST,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2'
-  ,
-  __doc__ = """A request for reporting an individual error event.
+ReportErrorEventRequest = _reflection.GeneratedProtocolMessageType(
+    "ReportErrorEventRequest",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_REPORTERROREVENTREQUEST,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2",
+        __doc__="""A request for reporting an individual error event.
   
   
   Attributes:
@@ -168,26 +244,32 @@
       event:
           [Required] The error event to be reported.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest)
+    ),
+)
 _sym_db.RegisterMessage(ReportErrorEventRequest)
 
-ReportErrorEventResponse = _reflection.GeneratedProtocolMessageType('ReportErrorEventResponse', (_message.Message,), dict(
-  DESCRIPTOR = _REPORTERROREVENTRESPONSE,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2'
-  ,
-  __doc__ = """Response for reporting an individual error event. Data may be added to
+ReportErrorEventResponse = _reflection.GeneratedProtocolMessageType(
+    "ReportErrorEventResponse",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_REPORTERROREVENTRESPONSE,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2",
+        __doc__="""Response for reporting an individual error event. Data may be added to
   this message in the future.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse)
+    ),
+)
 _sym_db.RegisterMessage(ReportErrorEventResponse)
 
-ReportedErrorEvent = _reflection.GeneratedProtocolMessageType('ReportedErrorEvent', (_message.Message,), dict(
-  DESCRIPTOR = _REPORTEDERROREVENT,
-  __module__ = 'google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2'
-  ,
-  __doc__ = """An error event which is reported to the Error Reporting system.
+ReportedErrorEvent = _reflection.GeneratedProtocolMessageType(
+    "ReportedErrorEvent",
+    (_message.Message,),
+    dict(
+        DESCRIPTOR=_REPORTEDERROREVENT,
+        __module__="google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2",
+        __doc__="""An error event which is reported to the Error Reporting system.
   
   
   Attributes:
@@ -208,35 +290,47 @@
           [Optional] A description of the context in which the error
           occurred.
   """,
-  # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent)
-  ))
+        # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent)
+    ),
+)
 _sym_db.RegisterMessage(ReportedErrorEvent)
 
 
 DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1'))
+DESCRIPTOR._options = _descriptor._ParseOptions(
+    descriptor_pb2.FileOptions(),
+    _b(
+        "\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1"
+    ),
+)
 
 _REPORTERRORSSERVICE = _descriptor.ServiceDescriptor(
-  name='ReportErrorsService',
-  full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorsService',
-  file=DESCRIPTOR,
-  index=0,
-  options=None,
-  serialized_start=661,
-  serialized_end=909,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='ReportErrorEvent',
-    full_name='google.devtools.clouderrorreporting.v1beta1.ReportErrorsService.ReportErrorEvent',
+    name="ReportErrorsService",
+    full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorsService",
+    file=DESCRIPTOR,
     index=0,
-    containing_service=None,
-    input_type=_REPORTERROREVENTREQUEST,
-    output_type=_REPORTERROREVENTRESPONSE,
-    options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0029\"0/v1beta1/{project_name=projects/*}/events:report:\005event')),
-  ),
-])
+    options=None,
+    serialized_start=661,
+    serialized_end=909,
+    methods=[
+        _descriptor.MethodDescriptor(
+            name="ReportErrorEvent",
+            full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorsService.ReportErrorEvent",
+            index=0,
+            containing_service=None,
+            input_type=_REPORTERROREVENTREQUEST,
+            output_type=_REPORTERROREVENTRESPONSE,
+            options=_descriptor._ParseOptions(
+                descriptor_pb2.MethodOptions(),
+                _b(
+                    '\202\323\344\223\0029"0/v1beta1/{project_name=projects/*}/events:report:\005event'
+                ),
+            ),
+        )
+    ],
+)
 _sym_db.RegisterServiceDescriptor(_REPORTERRORSSERVICE)
 
-DESCRIPTOR.services_by_name['ReportErrorsService'] = _REPORTERRORSSERVICE
+DESCRIPTOR.services_by_name["ReportErrorsService"] = _REPORTERRORSSERVICE
 
 # @@protoc_insertion_point(module_scope)
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py
index f2a8a011b2c0..e3e8507da26e 100644
--- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py
+++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py
@@ -1,32 +1,34 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
 import grpc
 
-from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2
+from google.cloud.errorreporting_v1beta1.proto import (
+    report_errors_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2,
+)
 
 
 class ReportErrorsServiceStub(object):
-  """An API for reporting error events.
+    """An API for reporting error events.
   """
 
-  def __init__(self, channel):
-    """Constructor.
+    def __init__(self, channel):
+        """Constructor.
 
     Args:
       channel: A grpc.Channel.
     """
-    self.ReportErrorEvent = channel.unary_unary(
-        '/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent',
-        request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.SerializeToString,
-        response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.FromString,
+        self.ReportErrorEvent = channel.unary_unary(
+            "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent",
+            request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.SerializeToString,
+            response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.FromString,
         )
 
 
 class ReportErrorsServiceServicer(object):
-  """An API for reporting error events.
+    """An API for reporting error events.
   """
 
-  def ReportErrorEvent(self, request, context):
-    """Report an individual error event.
+    def ReportErrorEvent(self, request, context):
+        """Report an individual error event.
 
     This endpoint accepts either an OAuth token,
     or an
@@ -35,19 +37,21 @@ def ReportErrorEvent(self, request, context):
     a `key` parameter. For example:
     
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") def add_ReportErrorsServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'ReportErrorEvent': grpc.unary_unary_rpc_method_handler( - servicer.ReportErrorEvent, - request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'google.devtools.clouderrorreporting.v1beta1.ReportErrorsService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) + rpc_method_handlers = { + "ReportErrorEvent": grpc.unary_unary_rpc_method_handler( + servicer.ReportErrorEvent, + request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.FromString, + response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.SerializeToString, + ) + } + generic_handler = grpc.method_handlers_generic_handler( + "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + rpc_method_handlers, + ) + server.add_generic_rpc_handlers((generic_handler,)) From f860d8c6d3854d7b1393bae50ac71618f2ff7a60 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Fri, 30 Nov 2018 18:36:15 -0800 Subject: [PATCH 112/467] Update noxfile. --- .../google-cloud-error-reporting/noxfile.py | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index a9efc0e344ce..bfac9f4c2bce 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -23,40 +23,36 @@ LOCAL_DEPS = (os.path.join("..", "api_core"), os.path.join("..", "core")) @nox.session(python="3.7") -def blacken(session): - """Run black. +def lint(session): + """Run linters. - Format code to uniform standard. + Returns a failure if the linters find linting errors or sufficiently + serious code quality issues. """ - session.install("black") + session.install("flake8", "black", *LOCAL_DEPS) session.run( "black", + "--check", "google", "tests", "docs", - "--exclude", - ".*/proto/.*|.*/gapic/.*|.*/.*_pb2.py", ) + session.run("flake8", "google", "tests") -@nox.session(python="3.7") -def lint(session): - """Run linters. +@nox.session(python="3.6") +def blacken(session): + """Run black. - Returns a failure if the linters find linting errors or sufficiently - serious code quality issues. + Format code to uniform standard. """ - session.install("flake8", "black", *LOCAL_DEPS) + session.install("black") session.run( "black", - "--check", "google", "tests", "docs", - "--exclude", - ".*/proto/.*|.*/gapic/.*|.*/.*_pb2.py", ) - session.run("flake8", "google", "tests") @nox.session(python="3.7") From adfa27295eab4fcd63ef3b9e1e0e488f7c1c61c1 Mon Sep 17 00:00:00 2001 From: Christopher Wilcox Date: Fri, 14 Dec 2018 12:25:37 -0800 Subject: [PATCH 113/467] Document Python 2 deprecation (#6910) --- packages/google-cloud-error-reporting/README.rst | 9 +++++++++ packages/google-cloud-error-reporting/setup.py | 2 ++ 2 files changed, 11 insertions(+) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 0b28b3298ee4..872f8b0358f2 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -50,6 +50,15 @@ dependencies. .. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ +Supported Python Versions +^^^^^^^^^^^^^^^^^^^^^^^^^ +Python >= 3.4 + +Deprecated Python Versions +^^^^^^^^^^^^^^^^^^^^^^^^^^ +Python == 2.7. Python 2.7 support will be removed on January 1, 2020. + + Mac/Linux ^^^^^^^^^ diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 1fe16f1286d2..86e35d02f2c6 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -75,6 +75,7 @@ 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'Operating System :: OS Independent', 'Topic :: Internet', ], @@ -83,6 +84,7 @@ namespace_packages=namespaces, install_requires=dependencies, extras_require=extras, + python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*', include_package_data=True, zip_safe=False, ) From f82b8bd2162b8f50f3dec36ee008885187871b67 Mon Sep 17 00:00:00 2001 From: Christopher Wilcox Date: Wed, 19 Dec 2018 12:21:12 -0800 Subject: [PATCH 114/467] Release error_reporting 0.30.1 (#6961) * Release 0.30.1 * Update error_reporting/CHANGELOG.md Co-Authored-By: crwilcox * Update error_reporting/CHANGELOG.md Co-Authored-By: crwilcox --- .../google-cloud-error-reporting/CHANGELOG.md | 27 +++++++++++++++++++ .../google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index dd7d42e26068..3bfbdeb428f0 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,33 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## 0.30.1 + +12-17-2018 18:17 PST + + +### Implementation Changes +- Pick up fixes to GAPIC generator. ([#6522](https://github.com/googleapis/google-cloud-python/pull/6522)) +- Fix `client_info` bug, update docstrings via synth. ([#6442](https://github.com/googleapis/google-cloud-python/pull/6442)) + +### Documentation +- Document Python 2 deprecation ([#6910](https://github.com/googleapis/google-cloud-python/pull/6910)) +- Fix [#6321](https://github.com/googleapis/google-cloud-python/pull/6321) Update README service links in quickstart guides. ([#6322](https://github.com/googleapis/google-cloud-python/pull/6322)) +- Prep docs for repo split. ([#6155](https://github.com/googleapis/google-cloud-python/pull/6155)) +- Replace links to `/stable/` with `/latest/`. ([#5901](https://github.com/googleapis/google-cloud-python/pull/5901)) + +### Internal / Testing Changes +- Update noxfile. +- Blacken all gen'd libs ([#6792](https://github.com/googleapis/google-cloud-python/pull/6792)) +- Omit local deps ([#6701](https://github.com/googleapis/google-cloud-python/pull/6701)) +- Run black at end of synth.py ([#6698](https://github.com/googleapis/google-cloud-python/pull/6698)) +- Run Black on Generated libraries ([#6666](https://github.com/googleapis/google-cloud-python/pull/6666)) +- Add templates for flake8, coveragerc, noxfile, and black. ([#6642](https://github.com/googleapis/google-cloud-python/pull/6642)) +- Add synth metadata. ([#6566](https://github.com/googleapis/google-cloud-python/pull/6566)) +- Use new Nox ([#6175](https://github.com/googleapis/google-cloud-python/pull/6175)) +- Add 'synth.py'. ([#6082](https://github.com/googleapis/google-cloud-python/pull/6082)) +- Use Nox inplace installs ([#5865](https://github.com/googleapis/google-cloud-python/pull/5865)) + ## 0.30.0 ### Implementation Changes diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 86e35d02f2c6..d90e610c0abe 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = 'google-cloud-error-reporting' description = 'Stackdriver Error Reporting API client library' -version = '0.30.0' +version = '0.30.1' # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From d7b81321f992ec2f152fb6f8aa161b6122e0bca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20B=C3=A1nffy?= <41662111+zenbanffy@users.noreply.github.com> Date: Thu, 3 Jan 2019 22:37:43 +0000 Subject: [PATCH 115/467] Fix formatting (#7002) --- packages/google-cloud-error-reporting/docs/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/docs/usage.rst b/packages/google-cloud-error-reporting/docs/usage.rst index 291621597e2d..f97f8df668c4 100644 --- a/packages/google-cloud-error-reporting/docs/usage.rst +++ b/packages/google-cloud-error-reporting/docs/usage.rst @@ -99,7 +99,7 @@ line number of the location where the error was reported. client = error_reporting.Client() error_reporting.report("Found an error!") - As with reporting an exception, the user and HTTP context can be provided: +As with reporting an exception, the user and HTTP context can be provided: .. code-block:: python From ecdf961744e5803789a4c21a7ffad777d8c8fac9 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Fri, 4 Jan 2019 10:12:51 -0800 Subject: [PATCH 116/467] Pick up stub docstring fix in GAPIC generator. (#6970) --- .../errorreporting_v1beta1/gapic/enums.py | 40 +++++++++---------- .../error_group_service_grpc_transport.py | 4 +- .../error_stats_service_grpc_transport.py | 6 +-- .../report_errors_service_grpc_transport.py | 2 +- .../synth.metadata | 36 +++++++++++------ 5 files changed, 50 insertions(+), 38 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py index 056758bbfe7e..4b95cebb045a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py @@ -18,6 +18,26 @@ import enum +class ErrorGroupOrder(enum.IntEnum): + """ + A sorting order of error groups. + + Attributes: + GROUP_ORDER_UNSPECIFIED (int): No group order specified. + COUNT_DESC (int): Total count of errors in the given time window in descending order. + LAST_SEEN_DESC (int): Timestamp when the group was last seen in the given time window + in descending order. + CREATED_DESC (int): Timestamp when the group was created in descending order. + AFFECTED_USERS_DESC (int): Number of affected users in the given time window in descending order. + """ + + GROUP_ORDER_UNSPECIFIED = 0 + COUNT_DESC = 1 + LAST_SEEN_DESC = 2 + CREATED_DESC = 3 + AFFECTED_USERS_DESC = 4 + + class TimedCountAlignment(enum.IntEnum): """ Specifies how the time periods of error group counts are aligned. @@ -41,26 +61,6 @@ class TimedCountAlignment(enum.IntEnum): ALIGNMENT_EQUAL_AT_END = 2 -class ErrorGroupOrder(enum.IntEnum): - """ - A sorting order of error groups. - - Attributes: - GROUP_ORDER_UNSPECIFIED (int): No group order specified. - COUNT_DESC (int): Total count of errors in the given time window in descending order. - LAST_SEEN_DESC (int): Timestamp when the group was last seen in the given time window - in descending order. - CREATED_DESC (int): Timestamp when the group was created in descending order. - AFFECTED_USERS_DESC (int): Number of affected users in the given time window in descending order. - """ - - GROUP_ORDER_UNSPECIFIED = 0 - COUNT_DESC = 1 - LAST_SEEN_DESC = 2 - CREATED_DESC = 3 - AFFECTED_USERS_DESC = 4 - - class QueryTimeRange(object): class Period(enum.IntEnum): """ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py index 4bd458c97388..b1a4ce771eb3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py @@ -104,7 +104,7 @@ def channel(self): @property def get_group(self): - """Return the gRPC stub for {$apiMethod.name}. + """Return the gRPC stub for :meth:`ErrorGroupServiceClient.get_group`. Get the specified group. @@ -117,7 +117,7 @@ def get_group(self): @property def update_group(self): - """Return the gRPC stub for {$apiMethod.name}. + """Return the gRPC stub for :meth:`ErrorGroupServiceClient.update_group`. Replace the data for the specified group. Fails if the group does not exist. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py index 4cfba78f744b..3a09b2e44c57 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py @@ -104,7 +104,7 @@ def channel(self): @property def list_group_stats(self): - """Return the gRPC stub for {$apiMethod.name}. + """Return the gRPC stub for :meth:`ErrorStatsServiceClient.list_group_stats`. Lists the specified groups. @@ -117,7 +117,7 @@ def list_group_stats(self): @property def list_events(self): - """Return the gRPC stub for {$apiMethod.name}. + """Return the gRPC stub for :meth:`ErrorStatsServiceClient.list_events`. Lists the specified events. @@ -130,7 +130,7 @@ def list_events(self): @property def delete_events(self): - """Return the gRPC stub for {$apiMethod.name}. + """Return the gRPC stub for :meth:`ErrorStatsServiceClient.delete_events`. Deletes all error events of a given project. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index aa7893dca6f1..478488578c36 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -104,7 +104,7 @@ def channel(self): @property def report_error_event(self): - """Return the gRPC stub for {$apiMethod.name}. + """Return the gRPC stub for :meth:`ReportErrorsServiceClient.report_error_event`. Report an individual error event. diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index f26e69af8847..3a8c4a4f20a8 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,26 +1,38 @@ { + "updateTime": "2018-12-18T13:17:33.308017Z", "sources": [ + { + "generator": { + "name": "artman", + "version": "0.16.3", + "dockerImage": "googleapis/artman@sha256:bfb92654b4a77368471f70e2808eaf4e60f263b9559f27bb3284097322787bf1" + } + }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "5a57f0c13a358b2b15452bf2d67453774a5f6d4f", - "internalRef": "221837528" + "sha": "c04bc0dc0a9164d924a9ab923fd6845b4ae6a7ab", + "internalRef": "225851467" } }, { - "git": { - "name": "googleapis-private", - "remote": "https://github.com/googleapis/googleapis-private.git", - "sha": "6aa8e1a447bb8d0367150356a28cb4d3f2332641", - "internalRef": "221340946" + "template": { + "name": "python_library", + "origin": "synthtool.gcp", + "version": "2018.12.6" } - }, + } + ], + "destinations": [ { - "generator": { - "name": "artman", - "version": "0.16.0", - "dockerImage": "googleapis/artman@sha256:90f9d15e9bad675aeecd586725bce48f5667ffe7d5fc4d1e96d51ff34304815b" + "client": { + "source": "googleapis", + "apiName": "error_reporting", + "apiVersion": "v1beta1", + "language": "python", + "generator": "gapic", + "config": "google/devtools/clouderrorreporting/artman_errorreporting.yaml" } } ] From e198caa11406b3650ae16fe8cda9033ae2d8f540 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Wed, 9 Jan 2019 11:35:14 -0800 Subject: [PATCH 117/467] Protoc-generated serialization update. (#7082) --- .../proto/common_pb2.py | 72 ++++--- .../proto/error_group_service_pb2.py | 36 ++-- .../proto/error_stats_service_pb2.py | 185 +++++++++--------- .../proto/report_errors_service_pb2.py | 39 ++-- .../synth.metadata | 10 +- 5 files changed, 165 insertions(+), 177 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py index 1fe8f9099b68..7c3f31f9c393 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py @@ -8,7 +8,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) @@ -26,6 +25,9 @@ name="google/devtools/clouderrorreporting_v1beta1/proto/common.proto", package="google.devtools.clouderrorreporting.v1beta1", syntax="proto3", + serialized_options=_b( + "\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" + ), serialized_pb=_b( '\n>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a#google/api/monitored_resource.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x81\x01\n\nErrorGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12S\n\x0ftracking_issues\x18\x03 \x03(\x0b\x32:.google.devtools.clouderrorreporting.v1beta1.TrackingIssue"\x1c\n\rTrackingIssue\x12\x0b\n\x03url\x18\x01 \x01(\t"\xef\x01\n\nErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext"I\n\x0eServiceContext\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t"\xc9\x01\n\x0c\x45rrorContext\x12U\n\x0chttp_request\x18\x01 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.HttpRequestContext\x12\x0c\n\x04user\x18\x02 \x01(\t\x12T\n\x0freport_location\x18\x03 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.SourceLocation"\x88\x01\n\x12HttpRequestContext\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x12\n\nuser_agent\x18\x03 \x01(\t\x12\x10\n\x08referrer\x18\x04 \x01(\t\x12\x1c\n\x14response_status_code\x18\x05 \x01(\x05\x12\x11\n\tremote_ip\x18\x06 \x01(\t"O\n\x0eSourceLocation\x12\x11\n\tfile_path\x18\x01 \x01(\t\x12\x13\n\x0bline_number\x18\x02 \x01(\x05\x12\x15\n\rfunction_name\x18\x04 \x01(\tB\xec\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x0b\x43ommonProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3' ), @@ -59,7 +61,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -77,7 +79,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -95,14 +97,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -134,14 +136,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ) ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -173,7 +175,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -191,7 +193,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -209,7 +211,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -227,14 +229,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -266,7 +268,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -284,7 +286,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -302,14 +304,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -341,7 +343,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -359,7 +361,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -377,14 +379,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -416,7 +418,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -434,7 +436,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -452,7 +454,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -470,7 +472,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -488,7 +490,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -506,14 +508,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -545,7 +547,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -563,7 +565,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -581,14 +583,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -818,11 +820,5 @@ _sym_db.RegisterMessage(SourceLocation) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions( - descriptor_pb2.FileOptions(), - _b( - "\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" - ), -) +DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py index 8df5d10ebcd5..0d62e5d8c096 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py @@ -8,7 +8,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) @@ -25,6 +24,9 @@ name="google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto", package="google.devtools.clouderrorreporting.v1beta1", syntax="proto3", + serialized_options=_b( + "\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" + ), serialized_pb=_b( '\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto"%\n\x0fGetGroupRequest\x12\x12\n\ngroup_name\x18\x01 \x01(\t"\\\n\x12UpdateGroupRequest\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup2\x8e\x03\n\x11\x45rrorGroupService\x12\xb4\x01\n\x08GetGroup\x12<.google.devtools.clouderrorreporting.v1beta1.GetGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{group_name=projects/*/groups/*}\x12\xc1\x01\n\x0bUpdateGroup\x12?.google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup"8\x82\xd3\xe4\x93\x02\x32\x1a)/v1beta1/{group.name=projects/*/groups/*}:\x05groupB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorGroupServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3' ), @@ -57,14 +59,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ) ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -96,14 +98,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ) ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -162,20 +164,14 @@ _sym_db.RegisterMessage(UpdateGroupRequest) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions( - descriptor_pb2.FileOptions(), - _b( - "\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" - ), -) +DESCRIPTOR._options = None _ERRORGROUPSERVICE = _descriptor.ServiceDescriptor( name="ErrorGroupService", full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=352, serialized_end=750, methods=[ @@ -186,11 +182,8 @@ containing_service=None, input_type=_GETGROUPREQUEST, output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, - options=_descriptor._ParseOptions( - descriptor_pb2.MethodOptions(), - _b( - "\202\323\344\223\002+\022)/v1beta1/{group_name=projects/*/groups/*}" - ), + serialized_options=_b( + "\202\323\344\223\002+\022)/v1beta1/{group_name=projects/*/groups/*}" ), ), _descriptor.MethodDescriptor( @@ -200,11 +193,8 @@ containing_service=None, input_type=_UPDATEGROUPREQUEST, output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, - options=_descriptor._ParseOptions( - descriptor_pb2.MethodOptions(), - _b( - "\202\323\344\223\0022\032)/v1beta1/{group.name=projects/*/groups/*}:\005group" - ), + serialized_options=_b( + "\202\323\344\223\0022\032)/v1beta1/{group.name=projects/*/groups/*}:\005group" ), ), ], diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py index 1369272ee6a9..3cacf890da44 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py @@ -9,7 +9,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) @@ -28,6 +27,9 @@ name="google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto", package="google.devtools.clouderrorreporting.v1beta1", syntax="proto3", + serialized_options=_b( + "\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" + ), serialized_pb=_b( '\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xa1\x04\n\x15ListGroupStatsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x03(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x05 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x37\n\x14timed_count_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12S\n\talignment\x18\x07 \x01(\x0e\x32@.google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment\x12\x32\n\x0e\x61lignment_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12K\n\x05order\x18\t \x01(\x0e\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder\x12\x11\n\tpage_size\x18\x0b \x01(\x05\x12\x12\n\npage_token\x18\x0c \x01(\t"\xc0\x01\n\x16ListGroupStatsResponse\x12W\n\x11\x65rror_group_stats\x18\x01 \x03(\x0b\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\x86\x04\n\x0f\x45rrorGroupStats\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\x1c\n\x14\x61\x66\x66\x65\x63ted_users_count\x18\x03 \x01(\x03\x12M\n\x0ctimed_counts\x18\x04 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.TimedCount\x12\x33\n\x0f\x66irst_seen_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x32\n\x0elast_seen_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12V\n\x11\x61\x66\x66\x65\x63ted_services\x18\x07 \x03(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x1d\n\x15num_affected_services\x18\x08 \x01(\x05\x12O\n\x0erepresentative\x18\t \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent"y\n\nTimedCount\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\x8e\x02\n\x11ListEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x04 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x11\n\tpage_size\x18\x06 \x01(\x05\x12\x12\n\npage_token\x18\x07 \x01(\t"\xb2\x01\n\x12ListEventsResponse\x12M\n\x0c\x65rror_events\x18\x01 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\xe7\x01\n\x0eQueryTimeRange\x12R\n\x06period\x18\x01 \x01(\x0e\x32\x42.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period"\x80\x01\n\x06Period\x12\x16\n\x12PERIOD_UNSPECIFIED\x10\x00\x12\x11\n\rPERIOD_1_HOUR\x10\x01\x12\x12\n\x0ePERIOD_6_HOURS\x10\x02\x12\x10\n\x0cPERIOD_1_DAY\x10\x03\x12\x11\n\rPERIOD_1_WEEK\x10\x04\x12\x12\n\x0ePERIOD_30_DAYS\x10\x05"O\n\x14ServiceContextFilter\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t"+\n\x13\x44\x65leteEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t"\x16\n\x14\x44\x65leteEventsResponse*u\n\x13TimedCountAlignment\x12%\n!ERROR_COUNT_ALIGNMENT_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x41LIGNMENT_EQUAL_ROUNDED\x10\x01\x12\x1a\n\x16\x41LIGNMENT_EQUAL_AT_END\x10\x02*}\n\x0f\x45rrorGroupOrder\x12\x1b\n\x17GROUP_ORDER_UNSPECIFIED\x10\x00\x12\x0e\n\nCOUNT_DESC\x10\x01\x12\x12\n\x0eLAST_SEEN_DESC\x10\x02\x12\x10\n\x0c\x43REATED_DESC\x10\x03\x12\x17\n\x13\x41\x46\x46\x45\x43TED_USERS_DESC\x10\x04\x32\xf2\x04\n\x11\x45rrorStatsService\x12\xd0\x01\n\x0eListGroupStats\x12\x42.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest\x1a\x43.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse"5\x82\xd3\xe4\x93\x02/\x12-/v1beta1/{project_name=projects/*}/groupStats\x12\xc0\x01\n\nListEvents\x12>.google.devtools.clouderrorreporting.v1beta1.ListEventsRequest\x1a?.google.devtools.clouderrorreporting.v1beta1.ListEventsResponse"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{project_name=projects/*}/events\x12\xc6\x01\n\x0c\x44\x65leteEvents\x12@.google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest\x1a\x41.google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse"1\x82\xd3\xe4\x93\x02+*)/v1beta1/{project_name=projects/*}/eventsB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorStatsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3' ), @@ -49,18 +51,26 @@ name="ERROR_COUNT_ALIGNMENT_UNSPECIFIED", index=0, number=0, - options=None, + serialized_options=None, type=None, ), _descriptor.EnumValueDescriptor( - name="ALIGNMENT_EQUAL_ROUNDED", index=1, number=1, options=None, type=None + name="ALIGNMENT_EQUAL_ROUNDED", + index=1, + number=1, + serialized_options=None, + type=None, ), _descriptor.EnumValueDescriptor( - name="ALIGNMENT_EQUAL_AT_END", index=2, number=2, options=None, type=None + name="ALIGNMENT_EQUAL_AT_END", + index=2, + number=2, + serialized_options=None, + type=None, ), ], containing_type=None, - options=None, + serialized_options=None, serialized_start=2508, serialized_end=2625, ) @@ -74,23 +84,31 @@ file=DESCRIPTOR, values=[ _descriptor.EnumValueDescriptor( - name="GROUP_ORDER_UNSPECIFIED", index=0, number=0, options=None, type=None + name="GROUP_ORDER_UNSPECIFIED", + index=0, + number=0, + serialized_options=None, + type=None, ), _descriptor.EnumValueDescriptor( - name="COUNT_DESC", index=1, number=1, options=None, type=None + name="COUNT_DESC", index=1, number=1, serialized_options=None, type=None ), _descriptor.EnumValueDescriptor( - name="LAST_SEEN_DESC", index=2, number=2, options=None, type=None + name="LAST_SEEN_DESC", index=2, number=2, serialized_options=None, type=None ), _descriptor.EnumValueDescriptor( - name="CREATED_DESC", index=3, number=3, options=None, type=None + name="CREATED_DESC", index=3, number=3, serialized_options=None, type=None ), _descriptor.EnumValueDescriptor( - name="AFFECTED_USERS_DESC", index=4, number=4, options=None, type=None + name="AFFECTED_USERS_DESC", + index=4, + number=4, + serialized_options=None, + type=None, ), ], containing_type=None, - options=None, + serialized_options=None, serialized_start=2627, serialized_end=2752, ) @@ -114,26 +132,30 @@ file=DESCRIPTOR, values=[ _descriptor.EnumValueDescriptor( - name="PERIOD_UNSPECIFIED", index=0, number=0, options=None, type=None + name="PERIOD_UNSPECIFIED", + index=0, + number=0, + serialized_options=None, + type=None, ), _descriptor.EnumValueDescriptor( - name="PERIOD_1_HOUR", index=1, number=1, options=None, type=None + name="PERIOD_1_HOUR", index=1, number=1, serialized_options=None, type=None ), _descriptor.EnumValueDescriptor( - name="PERIOD_6_HOURS", index=2, number=2, options=None, type=None + name="PERIOD_6_HOURS", index=2, number=2, serialized_options=None, type=None ), _descriptor.EnumValueDescriptor( - name="PERIOD_1_DAY", index=3, number=3, options=None, type=None + name="PERIOD_1_DAY", index=3, number=3, serialized_options=None, type=None ), _descriptor.EnumValueDescriptor( - name="PERIOD_1_WEEK", index=4, number=4, options=None, type=None + name="PERIOD_1_WEEK", index=4, number=4, serialized_options=None, type=None ), _descriptor.EnumValueDescriptor( - name="PERIOD_30_DAYS", index=5, number=5, options=None, type=None + name="PERIOD_30_DAYS", index=5, number=5, serialized_options=None, type=None ), ], containing_type=None, - options=None, + serialized_options=None, serialized_start=2228, serialized_end=2356, ) @@ -162,7 +184,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -180,7 +202,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -198,7 +220,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -216,7 +238,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -234,7 +256,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -252,7 +274,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -270,7 +292,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -288,7 +310,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -306,7 +328,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -324,14 +346,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -363,7 +385,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -381,7 +403,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -399,14 +421,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -438,7 +460,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -456,7 +478,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -474,7 +496,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -492,7 +514,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -510,7 +532,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -528,7 +550,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -546,7 +568,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -564,7 +586,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -582,14 +604,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -621,7 +643,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -639,7 +661,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -657,14 +679,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -696,7 +718,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -714,7 +736,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -732,7 +754,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -750,7 +772,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -768,7 +790,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -786,14 +808,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -825,7 +847,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -843,7 +865,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -861,14 +883,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -900,14 +922,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ) ], extensions=[], nested_types=[], enum_types=[_QUERYTIMERANGE_PERIOD], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -939,7 +961,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -957,7 +979,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -975,14 +997,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -1014,14 +1036,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ) ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -1041,7 +1063,7 @@ extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -1437,20 +1459,14 @@ _sym_db.RegisterMessage(DeleteEventsResponse) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions( - descriptor_pb2.FileOptions(), - _b( - "\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" - ), -) +DESCRIPTOR._options = None _ERRORSTATSSERVICE = _descriptor.ServiceDescriptor( name="ErrorStatsService", full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=2755, serialized_end=3381, methods=[ @@ -1461,11 +1477,8 @@ containing_service=None, input_type=_LISTGROUPSTATSREQUEST, output_type=_LISTGROUPSTATSRESPONSE, - options=_descriptor._ParseOptions( - descriptor_pb2.MethodOptions(), - _b( - "\202\323\344\223\002/\022-/v1beta1/{project_name=projects/*}/groupStats" - ), + serialized_options=_b( + "\202\323\344\223\002/\022-/v1beta1/{project_name=projects/*}/groupStats" ), ), _descriptor.MethodDescriptor( @@ -1475,11 +1488,8 @@ containing_service=None, input_type=_LISTEVENTSREQUEST, output_type=_LISTEVENTSRESPONSE, - options=_descriptor._ParseOptions( - descriptor_pb2.MethodOptions(), - _b( - "\202\323\344\223\002+\022)/v1beta1/{project_name=projects/*}/events" - ), + serialized_options=_b( + "\202\323\344\223\002+\022)/v1beta1/{project_name=projects/*}/events" ), ), _descriptor.MethodDescriptor( @@ -1489,9 +1499,8 @@ containing_service=None, input_type=_DELETEEVENTSREQUEST, output_type=_DELETEEVENTSRESPONSE, - options=_descriptor._ParseOptions( - descriptor_pb2.MethodOptions(), - _b("\202\323\344\223\002+*)/v1beta1/{project_name=projects/*}/events"), + serialized_options=_b( + "\202\323\344\223\002+*)/v1beta1/{project_name=projects/*}/events" ), ), ], diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py index 2c5b50c14f15..b23993fbca71 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py @@ -8,7 +8,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) @@ -26,6 +25,9 @@ name="google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto", package="google.devtools.clouderrorreporting.v1beta1", syntax="proto3", + serialized_options=_b( + "\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" + ), serialized_pb=_b( '\nMgoogle/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x7f\n\x17ReportErrorEventRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12N\n\x05\x65vent\x18\x02 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent"\x1a\n\x18ReportErrorEventResponse"\xf7\x01\n\x12ReportedErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext2\xf8\x01\n\x13ReportErrorsService\x12\xe0\x01\n\x10ReportErrorEvent\x12\x44.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest\x1a\x45.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse"?\x82\xd3\xe4\x93\x02\x39"0/v1beta1/{project_name=projects/*}/events:report:\x05\x65ventB\xf9\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x18ReportErrorsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3' ), @@ -59,7 +61,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -77,14 +79,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -104,7 +106,7 @@ extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -136,7 +138,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -154,7 +156,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -172,7 +174,7 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), _descriptor.FieldDescriptor( @@ -190,14 +192,14 @@ containing_type=None, is_extension=False, extension_scope=None, - options=None, + serialized_options=None, file=DESCRIPTOR, ), ], extensions=[], nested_types=[], enum_types=[], - options=None, + serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], @@ -296,20 +298,14 @@ _sym_db.RegisterMessage(ReportedErrorEvent) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions( - descriptor_pb2.FileOptions(), - _b( - "\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" - ), -) +DESCRIPTOR._options = None _REPORTERRORSSERVICE = _descriptor.ServiceDescriptor( name="ReportErrorsService", full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=661, serialized_end=909, methods=[ @@ -320,11 +316,8 @@ containing_service=None, input_type=_REPORTERROREVENTREQUEST, output_type=_REPORTERROREVENTRESPONSE, - options=_descriptor._ParseOptions( - descriptor_pb2.MethodOptions(), - _b( - '\202\323\344\223\0029"0/v1beta1/{project_name=projects/*}/events:report:\005event' - ), + serialized_options=_b( + '\202\323\344\223\0029"0/v1beta1/{project_name=projects/*}/events:report:\005event' ), ) ], diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 3a8c4a4f20a8..ba7c4026dea6 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2018-12-18T13:17:33.308017Z", + "updateTime": "2019-01-09T13:19:01.819124Z", "sources": [ { "generator": { "name": "artman", - "version": "0.16.3", - "dockerImage": "googleapis/artman@sha256:bfb92654b4a77368471f70e2808eaf4e60f263b9559f27bb3284097322787bf1" + "version": "0.16.5", + "dockerImage": "googleapis/artman@sha256:5a96c2c5c6f9570cc9556b63dc9ce1838777fd9166b5b64e43ad8e0ecee2fe2c" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "c04bc0dc0a9164d924a9ab923fd6845b4ae6a7ab", - "internalRef": "225851467" + "sha": "659d66ec24bf40b35a41a0b79218d96ba3add3d3", + "internalRef": "228437827" } }, { From 397d03b5d6f20e84293318547bcbc10580b0991c Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Thu, 17 Jan 2019 15:30:44 -0800 Subject: [PATCH 118/467] Update copyright headers --- .../cloud/errorreporting_v1beta1/gapic/enums.py | 2 +- .../gapic/error_group_service_client.py | 2 +- .../gapic/error_stats_service_client.py | 2 +- .../gapic/report_errors_service_client.py | 2 +- .../transports/error_group_service_grpc_transport.py | 2 +- .../transports/error_stats_service_grpc_transport.py | 2 +- .../report_errors_service_grpc_transport.py | 2 +- packages/google-cloud-error-reporting/synth.metadata | 12 ++++++------ .../test_system_report_errors_service_v1beta1.py | 2 +- .../test_error_group_service_client_v1beta1.py | 2 +- .../test_error_stats_service_client_v1beta1.py | 2 +- .../test_report_errors_service_client_v1beta1.py | 2 +- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py index 4b95cebb045a..35ddcba699e9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py index 08d90ac63832..2421ac6c94b0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py index 286a6ca66e46..3de9c25a17de 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index 77d5c6fc9d1a..cae5eeb109eb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py index b1a4ce771eb3..932abc306263 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py index 3a09b2e44c57..b8237b66fa00 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index 478488578c36..40499ed7b6be 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index ba7c4026dea6..6227a41a3012 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,26 +1,26 @@ { - "updateTime": "2019-01-09T13:19:01.819124Z", + "updateTime": "2019-01-17T13:18:30.046159Z", "sources": [ { "generator": { "name": "artman", - "version": "0.16.5", - "dockerImage": "googleapis/artman@sha256:5a96c2c5c6f9570cc9556b63dc9ce1838777fd9166b5b64e43ad8e0ecee2fe2c" + "version": "0.16.6", + "dockerImage": "googleapis/artman@sha256:12722f2ca3fbc3b53cc6aa5f0e569d7d221b46bd876a2136497089dec5e3634e" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "659d66ec24bf40b35a41a0b79218d96ba3add3d3", - "internalRef": "228437827" + "sha": "0ac60e21a1aa86c07c1836865b35308ba8178b05", + "internalRef": "229626798" } }, { "template": { "name": "python_library", "origin": "synthtool.gcp", - "version": "2018.12.6" + "version": "2019.1.16" } } ], diff --git a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py index a2d1fe117624..bb4239282d68 100644 --- a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py index 518152c407ed..d6f3be850097 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py index 8dae0b22589c..949cfc61b32b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py index 6f715244c700..401e386ad633 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 5b18c6bee368af0c29f39cc5a4efc99a20f153d0 Mon Sep 17 00:00:00 2001 From: Christopher Wilcox Date: Tue, 29 Jan 2019 13:28:49 -0800 Subject: [PATCH 119/467] Add protos as an artifact to library (#7205) --- .../errorreporting_v1beta1/proto/common.proto | 165 +++++++++ .../proto/error_group_service.proto | 61 ++++ .../proto/error_stats_service.proto | 342 ++++++++++++++++++ .../proto/report_errors_service.proto | 82 +++++ .../proto/synth.metadata | 3 + .../synth.metadata | 12 +- .../google-cloud-error-reporting/synth.py | 3 +- 7 files changed, 661 insertions(+), 7 deletions(-) create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/synth.metadata diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto new file mode 100644 index 000000000000..5d60cb2fb575 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto @@ -0,0 +1,165 @@ +// Copyright 2016 Google Inc. +// +// 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. + +syntax = "proto3"; + +package google.devtools.clouderrorreporting.v1beta1; + +import "google/api/annotations.proto"; +import "google/api/monitored_resource.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; +option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; +option java_multiple_files = true; +option java_outer_classname = "CommonProto"; +option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; +option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; + + +// Description of a group of similar error events. +message ErrorGroup { + // The group resource name. + // Example: projects/my-project-123/groups/my-groupid + string name = 1; + + // Group IDs are unique for a given project. If the same kind of error + // occurs in different service contexts, it will receive the same group ID. + string group_id = 2; + + // Associated tracking issues. + repeated TrackingIssue tracking_issues = 3; +} + +// Information related to tracking the progress on resolving the error. +message TrackingIssue { + // A URL pointing to a related entry in an issue tracking system. + // Example: https://github.com/user/project/issues/4 + string url = 1; +} + +// An error event which is returned by the Error Reporting system. +message ErrorEvent { + // Time when the event occurred as provided in the error report. + // If the report did not contain a timestamp, the time the error was received + // by the Error Reporting system is used. + google.protobuf.Timestamp event_time = 1; + + // The `ServiceContext` for which this error was reported. + ServiceContext service_context = 2; + + // The stack trace that was reported or logged by the service. + string message = 3; + + // Data about the context in which the error occurred. + ErrorContext context = 5; +} + +// Describes a running service that sends errors. +// Its version changes over time and multiple versions can run in parallel. +message ServiceContext { + // An identifier of the service, such as the name of the + // executable, job, or Google App Engine service name. This field is expected + // to have a low number of values that are relatively stable over time, as + // opposed to `version`, which can be changed whenever new code is deployed. + // + // Contains the service name for error reports extracted from Google + // App Engine logs or `default` if the App Engine default service is used. + string service = 2; + + // Represents the source code version that the developer provided, + // which could represent a version label or a Git SHA-1 hash, for example. + string version = 3; + + // Type of the MonitoredResource. List of possible values: + // https://cloud.google.com/monitoring/api/resources + // + // Value is set automatically for incoming errors and must not be set when + // reporting errors. + string resource_type = 4; +} + +// A description of the context in which an error occurred. +// This data should be provided by the application when reporting an error, +// unless the +// error report has been generated automatically from Google App Engine logs. +message ErrorContext { + // The HTTP request which was processed when the error was + // triggered. + HttpRequestContext http_request = 1; + + // The user who caused or was affected by the crash. + // This can be a user ID, an email address, or an arbitrary token that + // uniquely identifies the user. + // When sending an error report, leave this field empty if the user was not + // logged in. In this case the + // Error Reporting system will use other data, such as remote IP address, to + // distinguish affected users. See `affected_users_count` in + // `ErrorGroupStats`. + string user = 2; + + // The location in the source code where the decision was made to + // report the error, usually the place where it was logged. + // For a logged exception this would be the source line where the + // exception is logged, usually close to the place where it was + // caught. This value is in contrast to `Exception.cause_location`, + // which describes the source line where the exception was thrown. + SourceLocation report_location = 3; +} + +// HTTP request data that is related to a reported error. +// This data should be provided by the application when reporting an error, +// unless the +// error report has been generated automatically from Google App Engine logs. +message HttpRequestContext { + // The type of HTTP request, such as `GET`, `POST`, etc. + string method = 1; + + // The URL of the request. + string url = 2; + + // The user agent information that is provided with the request. + string user_agent = 3; + + // The referrer information that is provided with the request. + string referrer = 4; + + // The HTTP response status code for the request. + int32 response_status_code = 5; + + // The IP address from which the request originated. + // This can be IPv4, IPv6, or a token which is derived from the + // IP address, depending on the data that has been provided + // in the error report. + string remote_ip = 6; +} + +// Indicates a location in the source code of the service for which +// errors are reported. +// This data should be provided by the application when reporting an error, +// unless the error report has been generated automatically from Google App +// Engine logs. All fields are optional. +message SourceLocation { + // The source code filename, which can include a truncated relative + // path, or a full path from a production machine. + string file_path = 1; + + // 1-based. 0 indicates that the line number is unknown. + int32 line_number = 2; + + // Human-readable name of a function or method. + // The value can include optional context like the class or package name. + // For example, `my.package.MyClass.method` in case of Java. + string function_name = 4; +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto new file mode 100644 index 000000000000..5c32e068d98a --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto @@ -0,0 +1,61 @@ +// Copyright 2016 Google Inc. +// +// 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. + +syntax = "proto3"; + +package google.devtools.clouderrorreporting.v1beta1; + +import "google/api/annotations.proto"; +import "google/devtools/clouderrorreporting/v1beta1/common.proto"; + +option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; +option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; +option java_multiple_files = true; +option java_outer_classname = "ErrorGroupServiceProto"; +option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; +option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; + + +// Service for retrieving and updating individual error groups. +service ErrorGroupService { + // Get the specified group. + rpc GetGroup(GetGroupRequest) returns (ErrorGroup) { + option (google.api.http) = { get: "/v1beta1/{group_name=projects/*/groups/*}" }; + } + + // Replace the data for the specified group. + // Fails if the group does not exist. + rpc UpdateGroup(UpdateGroupRequest) returns (ErrorGroup) { + option (google.api.http) = { put: "/v1beta1/{group.name=projects/*/groups/*}" body: "group" }; + } +} + +// A request to return an individual group. +message GetGroupRequest { + // [Required] The group resource name. Written as + // projects/projectID/groups/group_name. + // Call + // + // groupStats.list to return a list of groups belonging to + // this project. + // + // Example: projects/my-project-123/groups/my-group + string group_name = 1; +} + +// A request to replace the existing data for the given group. +message UpdateGroupRequest { + // [Required] The group which replaces the resource on the server. + ErrorGroup group = 1; +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto new file mode 100644 index 000000000000..5b6213436d8e --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto @@ -0,0 +1,342 @@ +// Copyright 2016 Google Inc. +// +// 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. + +syntax = "proto3"; + +package google.devtools.clouderrorreporting.v1beta1; + +import "google/api/annotations.proto"; +import "google/devtools/clouderrorreporting/v1beta1/common.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; +option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; +option java_multiple_files = true; +option java_outer_classname = "ErrorStatsServiceProto"; +option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; +option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; + + +// An API for retrieving and managing error statistics as well as data for +// individual events. +service ErrorStatsService { + // Lists the specified groups. + rpc ListGroupStats(ListGroupStatsRequest) returns (ListGroupStatsResponse) { + option (google.api.http) = { get: "/v1beta1/{project_name=projects/*}/groupStats" }; + } + + // Lists the specified events. + rpc ListEvents(ListEventsRequest) returns (ListEventsResponse) { + option (google.api.http) = { get: "/v1beta1/{project_name=projects/*}/events" }; + } + + // Deletes all error events of a given project. + rpc DeleteEvents(DeleteEventsRequest) returns (DeleteEventsResponse) { + option (google.api.http) = { delete: "/v1beta1/{project_name=projects/*}/events" }; + } +} + +// Specifies a set of `ErrorGroupStats` to return. +message ListGroupStatsRequest { + // [Required] The resource name of the Google Cloud Platform project. Written + // as projects/ plus the + // Google Cloud + // Platform project ID. + // + // Example: projects/my-project-123. + string project_name = 1; + + // [Optional] List all ErrorGroupStats with these IDs. + repeated string group_id = 2; + + // [Optional] List only ErrorGroupStats which belong to a service + // context that matches the filter. + // Data for all service contexts is returned if this field is not specified. + ServiceContextFilter service_filter = 3; + + // [Optional] List data for the given time range. + // If not set a default time range is used. The field time_range_begin + // in the response will specify the beginning of this time range. + // Only ErrorGroupStats with a non-zero count in the given time + // range are returned, unless the request contains an explicit group_id list. + // If a group_id list is given, also ErrorGroupStats with zero + // occurrences are returned. + QueryTimeRange time_range = 5; + + // [Optional] The preferred duration for a single returned `TimedCount`. + // If not set, no timed counts are returned. + google.protobuf.Duration timed_count_duration = 6; + + // [Optional] The alignment of the timed counts to be returned. + // Default is `ALIGNMENT_EQUAL_AT_END`. + TimedCountAlignment alignment = 7; + + // [Optional] Time where the timed counts shall be aligned if rounded + // alignment is chosen. Default is 00:00 UTC. + google.protobuf.Timestamp alignment_time = 8; + + // [Optional] The sort order in which the results are returned. + // Default is `COUNT_DESC`. + ErrorGroupOrder order = 9; + + // [Optional] The maximum number of results to return per response. + // Default is 20. + int32 page_size = 11; + + // [Optional] A `next_page_token` provided by a previous response. To view + // additional results, pass this token along with the identical query + // parameters as the first request. + string page_token = 12; +} + +// Contains a set of requested error group stats. +message ListGroupStatsResponse { + // The error group stats which match the given request. + repeated ErrorGroupStats error_group_stats = 1; + + // If non-empty, more results are available. + // Pass this token, along with the same query parameters as the first + // request, to view the next page of results. + string next_page_token = 2; + + // The timestamp specifies the start time to which the request was restricted. + // The start time is set based on the requested time range. It may be adjusted + // to a later time if a project has exceeded the storage quota and older data + // has been deleted. + google.protobuf.Timestamp time_range_begin = 4; +} + +// Data extracted for a specific group based on certain filter criteria, +// such as a given time period and/or service filter. +message ErrorGroupStats { + // Group data that is independent of the filter criteria. + ErrorGroup group = 1; + + // Approximate total number of events in the given group that match + // the filter criteria. + int64 count = 2; + + // Approximate number of affected users in the given group that + // match the filter criteria. + // Users are distinguished by data in the `ErrorContext` of the + // individual error events, such as their login name or their remote + // IP address in case of HTTP requests. + // The number of affected users can be zero even if the number of + // errors is non-zero if no data was provided from which the + // affected user could be deduced. + // Users are counted based on data in the request + // context that was provided in the error report. If more users are + // implicitly affected, such as due to a crash of the whole service, + // this is not reflected here. + int64 affected_users_count = 3; + + // Approximate number of occurrences over time. + // Timed counts returned by ListGroups are guaranteed to be: + // + // - Inside the requested time interval + // - Non-overlapping, and + // - Ordered by ascending time. + repeated TimedCount timed_counts = 4; + + // Approximate first occurrence that was ever seen for this group + // and which matches the given filter criteria, ignoring the + // time_range that was specified in the request. + google.protobuf.Timestamp first_seen_time = 5; + + // Approximate last occurrence that was ever seen for this group and + // which matches the given filter criteria, ignoring the time_range + // that was specified in the request. + google.protobuf.Timestamp last_seen_time = 6; + + // Service contexts with a non-zero error count for the given filter + // criteria. This list can be truncated if multiple services are affected. + // Refer to `num_affected_services` for the total count. + repeated ServiceContext affected_services = 7; + + // The total number of services with a non-zero error count for the given + // filter criteria. + int32 num_affected_services = 8; + + // An arbitrary event that is chosen as representative for the whole group. + // The representative event is intended to be used as a quick preview for + // the whole group. Events in the group are usually sufficiently similar + // to each other such that showing an arbitrary representative provides + // insight into the characteristics of the group as a whole. + ErrorEvent representative = 9; +} + +// The number of errors in a given time period. +// All numbers are approximate since the error events are sampled +// before counting them. +message TimedCount { + // Approximate number of occurrences in the given time period. + int64 count = 1; + + // Start of the time period to which `count` refers (included). + google.protobuf.Timestamp start_time = 2; + + // End of the time period to which `count` refers (excluded). + google.protobuf.Timestamp end_time = 3; +} + +// Specifies a set of error events to return. +message ListEventsRequest { + // [Required] The resource name of the Google Cloud Platform project. Written + // as `projects/` plus the + // [Google Cloud Platform project + // ID](https://support.google.com/cloud/answer/6158840). + // Example: `projects/my-project-123`. + string project_name = 1; + + // [Required] The group for which events shall be returned. + string group_id = 2; + + // [Optional] List only ErrorGroups which belong to a service context that + // matches the filter. + // Data for all service contexts is returned if this field is not specified. + ServiceContextFilter service_filter = 3; + + // [Optional] List only data for the given time range. + // If not set a default time range is used. The field time_range_begin + // in the response will specify the beginning of this time range. + QueryTimeRange time_range = 4; + + // [Optional] The maximum number of results to return per response. + int32 page_size = 6; + + // [Optional] A `next_page_token` provided by a previous response. + string page_token = 7; +} + +// Contains a set of requested error events. +message ListEventsResponse { + // The error events which match the given request. + repeated ErrorEvent error_events = 1; + + // If non-empty, more results are available. + // Pass this token, along with the same query parameters as the first + // request, to view the next page of results. + string next_page_token = 2; + + // The timestamp specifies the start time to which the request was restricted. + google.protobuf.Timestamp time_range_begin = 4; +} + +// Requests might be rejected or the resulting timed count durations might be +// adjusted for lower durations. +message QueryTimeRange { + // The supported time ranges. + enum Period { + // Do not use. + PERIOD_UNSPECIFIED = 0; + + // Retrieve data for the last hour. + // Recommended minimum timed count duration: 1 min. + PERIOD_1_HOUR = 1; + + // Retrieve data for the last 6 hours. + // Recommended minimum timed count duration: 10 min. + PERIOD_6_HOURS = 2; + + // Retrieve data for the last day. + // Recommended minimum timed count duration: 1 hour. + PERIOD_1_DAY = 3; + + // Retrieve data for the last week. + // Recommended minimum timed count duration: 6 hours. + PERIOD_1_WEEK = 4; + + // Retrieve data for the last 30 days. + // Recommended minimum timed count duration: 1 day. + PERIOD_30_DAYS = 5; + } + + // Restricts the query to the specified time range. + Period period = 1; +} + +// Specifies criteria for filtering a subset of service contexts. +// The fields in the filter correspond to the fields in `ServiceContext`. +// Only exact, case-sensitive matches are supported. +// If a field is unset or empty, it matches arbitrary values. +message ServiceContextFilter { + // [Optional] The exact value to match against + // [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service). + string service = 2; + + // [Optional] The exact value to match against + // [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version). + string version = 3; + + // [Optional] The exact value to match against + // [`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type). + string resource_type = 4; +} + +// Deletes all events in the project. +message DeleteEventsRequest { + // [Required] The resource name of the Google Cloud Platform project. Written + // as `projects/` plus the + // [Google Cloud Platform project + // ID](https://support.google.com/cloud/answer/6158840). + // Example: `projects/my-project-123`. + string project_name = 1; +} + +// Response message for deleting error events. +message DeleteEventsResponse { + +} + +// Specifies how the time periods of error group counts are aligned. +enum TimedCountAlignment { + // No alignment specified. + ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0; + + // The time periods shall be consecutive, have width equal to the + // requested duration, and be aligned at the `alignment_time` provided in + // the request. + // The `alignment_time` does not have to be inside the query period but + // even if it is outside, only time periods are returned which overlap + // with the query period. + // A rounded alignment will typically result in a + // different size of the first or the last time period. + ALIGNMENT_EQUAL_ROUNDED = 1; + + // The time periods shall be consecutive, have width equal to the + // requested duration, and be aligned at the end of the requested time + // period. This can result in a different size of the + // first time period. + ALIGNMENT_EQUAL_AT_END = 2; +} + +// A sorting order of error groups. +enum ErrorGroupOrder { + // No group order specified. + GROUP_ORDER_UNSPECIFIED = 0; + + // Total count of errors in the given time window in descending order. + COUNT_DESC = 1; + + // Timestamp when the group was last seen in the given time window + // in descending order. + LAST_SEEN_DESC = 2; + + // Timestamp when the group was created in descending order. + CREATED_DESC = 3; + + // Number of affected users in the given time window in descending order. + AFFECTED_USERS_DESC = 4; +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto new file mode 100644 index 000000000000..cf22f4971834 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto @@ -0,0 +1,82 @@ +// Copyright 2016 Google Inc. +// +// 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. + +syntax = "proto3"; + +package google.devtools.clouderrorreporting.v1beta1; + +import "google/api/annotations.proto"; +import "google/devtools/clouderrorreporting/v1beta1/common.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; +option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; +option java_multiple_files = true; +option java_outer_classname = "ReportErrorsServiceProto"; +option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; +option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; + + +// An API for reporting error events. +service ReportErrorsService { + // Report an individual error event. + // + // This endpoint accepts either an OAuth token, + // or an + // API key + // for authentication. To use an API key, append it to the URL as the value of + // a `key` parameter. For example: + //
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ rpc ReportErrorEvent(ReportErrorEventRequest) returns (ReportErrorEventResponse) { + option (google.api.http) = { post: "/v1beta1/{project_name=projects/*}/events:report" body: "event" }; + } +} + +// A request for reporting an individual error event. +message ReportErrorEventRequest { + // [Required] The resource name of the Google Cloud Platform project. Written + // as `projects/` plus the + // [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). + // Example: `projects/my-project-123`. + string project_name = 1; + + // [Required] The error event to be reported. + ReportedErrorEvent event = 2; +} + +// Response for reporting an individual error event. +// Data may be added to this message in the future. +message ReportErrorEventResponse { + +} + +// An error event which is reported to the Error Reporting system. +message ReportedErrorEvent { + // [Optional] Time when the event occurred. + // If not provided, the time when the event was received by the + // Error Reporting system will be used. + google.protobuf.Timestamp event_time = 1; + + // [Required] The service context in which this error has occurred. + ServiceContext service_context = 2; + + // [Required] A message describing the error. The message can contain an + // exception stack in one of the supported programming languages and formats. + // In that case, the message is parsed and detailed exception information + // is returned when retrieving the error event again. + string message = 3; + + // [Optional] A description of the context in which the error occurred. + ErrorContext context = 4; +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/synth.metadata b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/synth.metadata new file mode 100644 index 000000000000..aa85442f198e --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/synth.metadata @@ -0,0 +1,3 @@ +{ + "updateTime": "2019-01-23T23:03:31.526988Z" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 6227a41a3012..6c0c17eca3e2 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-01-17T13:18:30.046159Z", + "updateTime": "2019-01-23T23:04:41.736646Z", "sources": [ { "generator": { "name": "artman", - "version": "0.16.6", - "dockerImage": "googleapis/artman@sha256:12722f2ca3fbc3b53cc6aa5f0e569d7d221b46bd876a2136497089dec5e3634e" + "version": "0.16.7", + "dockerImage": "googleapis/artman@sha256:d6c8ced606eb49973ca95d2af7c55a681acc042db0f87d135968349e7bf6dd80" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "0ac60e21a1aa86c07c1836865b35308ba8178b05", - "internalRef": "229626798" + "sha": "9aac88a22468b1e291937f55fa1ef237adfdc63e", + "internalRef": "230568136" } }, { @@ -28,7 +28,7 @@ { "client": { "source": "googleapis", - "apiName": "error_reporting", + "apiName": "errorreporting", "apiVersion": "v1beta1", "language": "python", "generator": "gapic", diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index 540761b4c55a..0dd24c997469 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -23,10 +23,11 @@ # Generate error_reporting GAPIC layer # ---------------------------------------------------------------------------- library = gapic.py_library( - "error_reporting", + "errorreporting", "v1beta1", config_path="/google/devtools/clouderrorreporting" "/artman_errorreporting.yaml", artman_output_name="error-reporting-v1beta1", + include_protos=True, ) s.move(library / "google/cloud/errorreporting_v1beta1/proto") From a45b98ec2c822ef5555459635d1e6155b980f666 Mon Sep 17 00:00:00 2001 From: Pravin Dahal Date: Mon, 11 Feb 2019 19:12:32 +0100 Subject: [PATCH 120/467] Updated client library documentation URLs. (#7307) Previously, the URLs would redirect using JavaScript, which would either be slow or not work at all (in case JavaScript is disabled on the browser) --- packages/google-cloud-error-reporting/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 872f8b0358f2..28815c9f360f 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -14,7 +14,7 @@ to receive email and mobile alerts on new errors. - `Product Documentation`_ .. _Error Reporting: https://cloud.google.com/error-reporting/ -.. _Client Library Documentation: https://googlecloudplatform.github.io/google-cloud-python/latest/error-reporting/usage.html +.. _Client Library Documentation: https://googleapis.github.io/google-cloud-python/latest/error-reporting/usage.html .. _Product Documentation: https://cloud.google.com/error-reporting/reference/ .. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ @@ -34,7 +34,7 @@ In order to use this library, you first need to go through the following steps: .. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project .. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project .. _Enable the Google Cloud Error Reporting API.: https://cloud.google.com/error-reporting -.. _Setup Authentication.: https://googlecloudplatform.github.io/google-cloud-python/latest/core/auth.html +.. _Setup Authentication.: https://googleapis.github.io/google-cloud-python/latest/core/auth.html Installation ~~~~~~~~~~~~ From d20d02fe90cad22b2c33f2dc26a116b91511a554 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Wed, 20 Feb 2019 10:50:53 -0800 Subject: [PATCH 121/467] [CHANGE ME] Re-generated error_reporting to pick up changes in the API or client library generator. (#7391) --- packages/google-cloud-error-reporting/noxfile.py | 4 ++++ packages/google-cloud-error-reporting/synth.metadata | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index bfac9f4c2bce..d692cf37f39c 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -45,6 +45,10 @@ def blacken(session): """Run black. Format code to uniform standard. + + This currently uses Python 3.6 due to the automated Kokoro run of synthtool. + That run uses an image that doesn't have 3.6 installed. Before updating this + check the state of the `gcp_ubuntu_config` we use for that Kokoro run. """ session.install("black") session.run( diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 6c0c17eca3e2..a4e81d325a82 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-01-23T23:04:41.736646Z", + "updateTime": "2019-02-20T18:04:45.949682Z", "sources": [ { "generator": { "name": "artman", - "version": "0.16.7", - "dockerImage": "googleapis/artman@sha256:d6c8ced606eb49973ca95d2af7c55a681acc042db0f87d135968349e7bf6dd80" + "version": "0.16.13", + "dockerImage": "googleapis/artman@sha256:5fd9aee1d82a00cebf425c8fa431f5457539562f5867ad9c54370f0ec9a7ccaa" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "9aac88a22468b1e291937f55fa1ef237adfdc63e", - "internalRef": "230568136" + "sha": "18ab81eec27942a942622d5a8d9c9e7a202e8c16", + "internalRef": "234814197" } }, { From 4975babb140b70ebeae400a41e709b9520967f85 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Tue, 26 Feb 2019 09:06:48 -0800 Subject: [PATCH 122/467] Copy lintified proto files (via synth). (#7447) --- .../gapic/report_errors_service_client.py | 8 +++++++ .../report_errors_service_grpc_transport.py | 8 +++++++ .../errorreporting_v1beta1/proto/common.proto | 1 - .../proto/error_group_service.proto | 10 ++++++--- .../proto/error_stats_service.proto | 17 ++++++++------- .../proto/report_errors_service.proto | 21 +++++++++++-------- .../proto/report_errors_service_pb2_grpc.py | 3 ++- .../synth.metadata | 10 ++++----- 8 files changed, 52 insertions(+), 26 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index cae5eeb109eb..efe391d05c6b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -195,6 +195,14 @@ def report_error_event( """ Report an individual error event. + This endpoint accepts either an OAuth token, or an API key for + authentication. To use an API key, append it to the URL as the value of + a ``key`` parameter. For example: + + .. raw:: html +
POST
+            https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ Example: >>> from google.cloud import errorreporting_v1beta1 >>> diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index 40499ed7b6be..69ec136dca56 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -108,6 +108,14 @@ def report_error_event(self): Report an individual error event. + This endpoint accepts either an OAuth token, or an API key for + authentication. To use an API key, append it to the URL as the value of + a ``key`` parameter. For example: + + .. raw:: html +
POST
+            https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto index 5d60cb2fb575..132f1a646f87 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto @@ -27,7 +27,6 @@ option java_outer_classname = "CommonProto"; option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; - // Description of a group of similar error events. message ErrorGroup { // The group resource name. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto index 5c32e068d98a..15086a9eaa47 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto @@ -26,18 +26,22 @@ option java_outer_classname = "ErrorGroupServiceProto"; option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; - // Service for retrieving and updating individual error groups. service ErrorGroupService { // Get the specified group. rpc GetGroup(GetGroupRequest) returns (ErrorGroup) { - option (google.api.http) = { get: "/v1beta1/{group_name=projects/*/groups/*}" }; + option (google.api.http) = { + get: "/v1beta1/{group_name=projects/*/groups/*}" + }; } // Replace the data for the specified group. // Fails if the group does not exist. rpc UpdateGroup(UpdateGroupRequest) returns (ErrorGroup) { - option (google.api.http) = { put: "/v1beta1/{group.name=projects/*/groups/*}" body: "group" }; + option (google.api.http) = { + put: "/v1beta1/{group.name=projects/*/groups/*}" + body: "group" + }; } } diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto index 5b6213436d8e..ffb25b2b8ac2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto @@ -28,23 +28,28 @@ option java_outer_classname = "ErrorStatsServiceProto"; option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; - // An API for retrieving and managing error statistics as well as data for // individual events. service ErrorStatsService { // Lists the specified groups. rpc ListGroupStats(ListGroupStatsRequest) returns (ListGroupStatsResponse) { - option (google.api.http) = { get: "/v1beta1/{project_name=projects/*}/groupStats" }; + option (google.api.http) = { + get: "/v1beta1/{project_name=projects/*}/groupStats" + }; } // Lists the specified events. rpc ListEvents(ListEventsRequest) returns (ListEventsResponse) { - option (google.api.http) = { get: "/v1beta1/{project_name=projects/*}/events" }; + option (google.api.http) = { + get: "/v1beta1/{project_name=projects/*}/events" + }; } // Deletes all error events of a given project. rpc DeleteEvents(DeleteEventsRequest) returns (DeleteEventsResponse) { - option (google.api.http) = { delete: "/v1beta1/{project_name=projects/*}/events" }; + option (google.api.http) = { + delete: "/v1beta1/{project_name=projects/*}/events" + }; } } @@ -296,9 +301,7 @@ message DeleteEventsRequest { } // Response message for deleting error events. -message DeleteEventsResponse { - -} +message DeleteEventsResponse {} // Specifies how the time periods of error group counts are aligned. enum TimedCountAlignment { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto index cf22f4971834..d77f646ce464 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto @@ -27,7 +27,6 @@ option java_outer_classname = "ReportErrorsServiceProto"; option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; - // An API for reporting error events. service ReportErrorsService { // Report an individual error event. @@ -37,9 +36,14 @@ service ReportErrorsService { // API key // for authentication. To use an API key, append it to the URL as the value of // a `key` parameter. For example: - //
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- rpc ReportErrorEvent(ReportErrorEventRequest) returns (ReportErrorEventResponse) { - option (google.api.http) = { post: "/v1beta1/{project_name=projects/*}/events:report" body: "event" }; + //
POST
+  // https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+ rpc ReportErrorEvent(ReportErrorEventRequest) + returns (ReportErrorEventResponse) { + option (google.api.http) = { + post: "/v1beta1/{project_name=projects/*}/events:report" + body: "event" + }; } } @@ -47,8 +51,9 @@ service ReportErrorsService { message ReportErrorEventRequest { // [Required] The resource name of the Google Cloud Platform project. Written // as `projects/` plus the - // [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). - // Example: `projects/my-project-123`. + // [Google Cloud Platform project + // ID](https://support.google.com/cloud/answer/6158840). Example: + // `projects/my-project-123`. string project_name = 1; // [Required] The error event to be reported. @@ -57,9 +62,7 @@ message ReportErrorEventRequest { // Response for reporting an individual error event. // Data may be added to this message in the future. -message ReportErrorEventResponse { - -} +message ReportErrorEventResponse {} // An error event which is reported to the Error Reporting system. message ReportedErrorEvent { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py index e3e8507da26e..12f6e08e7b57 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py @@ -35,7 +35,8 @@ def ReportErrorEvent(self, request, context): API key for authentication. To use an API key, append it to the URL as the value of a `key` parameter. For example: -
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
+
POST
+    https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details("Method not implemented!") diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index a4e81d325a82..a286a490f985 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-02-20T18:04:45.949682Z", + "updateTime": "2019-02-26T13:15:27.166417Z", "sources": [ { "generator": { "name": "artman", - "version": "0.16.13", - "dockerImage": "googleapis/artman@sha256:5fd9aee1d82a00cebf425c8fa431f5457539562f5867ad9c54370f0ec9a7ccaa" + "version": "0.16.14", + "dockerImage": "googleapis/artman@sha256:f3d61ae45abaeefb6be5f228cda22732c2f1b00fb687c79c4bd4f2c42bb1e1a7" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "18ab81eec27942a942622d5a8d9c9e7a202e8c16", - "internalRef": "234814197" + "sha": "29f098cb03a9983cc9cb15993de5da64419046f2", + "internalRef": "235621085" } }, { From f990ac8bd9b61932c6375d4a8c55b48bf97aec1b Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Tue, 26 Feb 2019 14:57:06 -0800 Subject: [PATCH 123/467] Fix docstring replace in synth (#7458) --- .../gapic/report_errors_service_client.py | 8 -------- .../transports/report_errors_service_grpc_transport.py | 8 -------- packages/google-cloud-error-reporting/synth.metadata | 4 ++-- packages/google-cloud-error-reporting/synth.py | 3 ++- 4 files changed, 4 insertions(+), 19 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index efe391d05c6b..cae5eeb109eb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -195,14 +195,6 @@ def report_error_event( """ Report an individual error event. - This endpoint accepts either an OAuth token, or an API key for - authentication. To use an API key, append it to the URL as the value of - a ``key`` parameter. For example: - - .. raw:: html -
POST
-            https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- Example: >>> from google.cloud import errorreporting_v1beta1 >>> diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index 69ec136dca56..40499ed7b6be 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -108,14 +108,6 @@ def report_error_event(self): Report an individual error event. - This endpoint accepts either an OAuth token, or an API key for - authentication. To use an API key, append it to the URL as the value of - a ``key`` parameter. For example: - - .. raw:: html -
POST
-            https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index a286a490f985..0fab74195069 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,5 +1,5 @@ { - "updateTime": "2019-02-26T13:15:27.166417Z", + "updateTime": "2019-02-26T21:22:37.725638Z", "sources": [ { "generator": { @@ -20,7 +20,7 @@ "template": { "name": "python_library", "origin": "synthtool.gcp", - "version": "2019.1.16" + "version": "2019.2.26" } } ], diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index 0dd24c997469..6c34630d506e 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -49,7 +49,8 @@ a ``key`` parameter. For example: \.\. raw:: html -
POST .*
+        
POST
+            .*
""" targets = [ From 904d0f0e1e06144af0eb403752d1cf340a6eb18f Mon Sep 17 00:00:00 2001 From: Christopher Wilcox Date: Wed, 20 Mar 2019 13:41:12 -0700 Subject: [PATCH 124/467] Remove classifier for Python 3.4 for end-of-life. (#7535) * Remove classifier for Python 3.4 for end-of-life. * Update supported versions in Client README, Contributing Guide --- packages/google-cloud-error-reporting/README.rst | 2 +- packages/google-cloud-error-reporting/setup.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 28815c9f360f..46bb326bdb78 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -52,7 +52,7 @@ dependencies. Supported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^ -Python >= 3.4 +Python >= 3.5 Deprecated Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index d90e610c0abe..954b888f11cb 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -72,7 +72,6 @@ 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', From 6d99a7133a3fd0aa58a06e590e8d5c2803c4b8e2 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Mon, 1 Apr 2019 09:16:33 -0700 Subject: [PATCH 125/467] Add routing header to method metadata (via synth). (#7594) --- .../gapic/error_group_service_client.py | 27 +++++++++++++ .../gapic/error_stats_service_client.py | 40 +++++++++++++++++++ .../gapic/report_errors_service_client.py | 14 +++++++ .../synth.metadata | 10 ++--- 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py index 2421ac6c94b0..c5e2eaae343a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -22,6 +22,7 @@ import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method +import google.api_core.gapic_v1.routing_header import google.api_core.grpc_helpers import google.api_core.path_template import grpc @@ -232,6 +233,19 @@ def get_group( ) request = error_group_service_pb2.GetGroupRequest(group_name=group_name) + if metadata is None: + metadata = [] + metadata = list(metadata) + try: + routing_header = [("group_name", group_name)] + except AttributeError: + pass + else: + routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( + routing_header + ) + metadata.append(routing_metadata) + return self._inner_api_calls["get_group"]( request, retry=retry, timeout=timeout, metadata=metadata ) @@ -293,6 +307,19 @@ def update_group( ) request = error_group_service_pb2.UpdateGroupRequest(group=group) + if metadata is None: + metadata = [] + metadata = list(metadata) + try: + routing_header = [("group.name", group.name)] + except AttributeError: + pass + else: + routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( + routing_header + ) + metadata.append(routing_metadata) + return self._inner_api_calls["update_group"]( request, retry=retry, timeout=timeout, metadata=metadata ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py index 3de9c25a17de..53a5d5738edd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -23,6 +23,7 @@ import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method +import google.api_core.gapic_v1.routing_header import google.api_core.grpc_helpers import google.api_core.page_iterator import google.api_core.path_template @@ -311,6 +312,19 @@ def list_group_stats( order=order, page_size=page_size, ) + if metadata is None: + metadata = [] + metadata = list(metadata) + try: + routing_header = [("project_name", project_name)] + except AttributeError: + pass + else: + routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( + routing_header + ) + metadata.append(routing_metadata) + iterator = google.api_core.page_iterator.GRPCIterator( client=None, method=functools.partial( @@ -427,6 +441,19 @@ def list_events( time_range=time_range, page_size=page_size, ) + if metadata is None: + metadata = [] + metadata = list(metadata) + try: + routing_header = [("project_name", project_name)] + except AttributeError: + pass + else: + routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( + routing_header + ) + metadata.append(routing_metadata) + iterator = google.api_core.page_iterator.GRPCIterator( client=None, method=functools.partial( @@ -497,6 +524,19 @@ def delete_events( ) request = error_stats_service_pb2.DeleteEventsRequest(project_name=project_name) + if metadata is None: + metadata = [] + metadata = list(metadata) + try: + routing_header = [("project_name", project_name)] + except AttributeError: + pass + else: + routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( + routing_header + ) + metadata.append(routing_metadata) + return self._inner_api_calls["delete_events"]( request, retry=retry, timeout=timeout, metadata=metadata ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index cae5eeb109eb..c270edb72ccd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -22,6 +22,7 @@ import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method +import google.api_core.gapic_v1.routing_header import google.api_core.grpc_helpers import google.api_core.path_template import grpc @@ -249,6 +250,19 @@ def report_error_event( request = report_errors_service_pb2.ReportErrorEventRequest( project_name=project_name, event=event ) + if metadata is None: + metadata = [] + metadata = list(metadata) + try: + routing_header = [("project_name", project_name)] + except AttributeError: + pass + else: + routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( + routing_header + ) + metadata.append(routing_metadata) + return self._inner_api_calls["report_error_event"]( request, retry=retry, timeout=timeout, metadata=metadata ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 0fab74195069..416715b72ffa 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-02-26T21:22:37.725638Z", + "updateTime": "2019-03-28T12:14:00.009958Z", "sources": [ { "generator": { "name": "artman", - "version": "0.16.14", - "dockerImage": "googleapis/artman@sha256:f3d61ae45abaeefb6be5f228cda22732c2f1b00fb687c79c4bd4f2c42bb1e1a7" + "version": "0.16.20", + "dockerImage": "googleapis/artman@sha256:e3c054a2fb85a12481c722af616c7fb6f1d02d862248385eecbec3e4240ebd1e" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "29f098cb03a9983cc9cb15993de5da64419046f2", - "internalRef": "235621085" + "sha": "6a84b3267b0a95e922608b9891219075047eee29", + "internalRef": "240640999" } }, { From 81664c1d56f0025820eb72067d6ef0acb04670db Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Thu, 2 May 2019 12:15:23 -0700 Subject: [PATCH 126/467] Error Reporting: Add nox session `docs` (via synth). (#7770) --- .../docs/README.rst | 0 .../google-cloud-error-reporting/docs/conf.py | 42 +++++++++++++++++-- .../docs/index.rst | 2 +- .../google-cloud-error-reporting/noxfile.py | 20 +++++++++ .../synth.metadata | 12 +++--- 5 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 packages/google-cloud-error-reporting/docs/README.rst diff --git a/packages/google-cloud-error-reporting/docs/README.rst b/packages/google-cloud-error-reporting/docs/README.rst new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index bad104f28b17..4969d6a6c313 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -25,7 +25,7 @@ # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. -# needs_sphinx = '1.0' +needs_sphinx = "1.6.3" # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom @@ -36,6 +36,7 @@ "sphinx.ext.intersphinx", "sphinx.ext.coverage", "sphinx.ext.napoleon", + "sphinx.ext.todo", "sphinx.ext.viewcode", ] @@ -47,10 +48,14 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] +# Allow markdown includes (so releases.md can include CHANGLEOG.md) +# http://www.sphinx-doc.org/en/master/markdown.html +source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} + # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] -source_suffix = ".rst" +source_suffix = [".rst", ".md"] # The encoding of source files. # source_encoding = 'utf-8-sig' @@ -120,12 +125,20 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = "sphinx_rtd_theme" +html_theme = "alabaster" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -# html_theme_options = {} +html_theme_options = { + "description": "Google Cloud Client Libraries for Python", + "github_user": "googleapis", + "github_repo": "google-cloud-python", + "github_banner": True, + "font_family": "'Roboto', Georgia, sans", + "head_font_family": "'Roboto', Georgia, serif", + "code_font_family": "'Roboto Mono', 'Consolas', monospace", +} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] @@ -214,6 +227,17 @@ # Output file base name for HTML help builder. htmlhelp_basename = "google-cloud-error-reporting-doc" +# -- Options for warnings ------------------------------------------------------ + +suppress_warnings = [ + # Temporarily suppress this to avoid "more than one target found for + # cross-reference" warning, which are intractable for us to avoid while in + # a mono-repo. + # See https://github.com/sphinx-doc/sphinx/blob + # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 + "ref.python" +] + # -- Options for LaTeX output --------------------------------------------- latex_elements = { @@ -310,6 +334,16 @@ intersphinx_mapping = { "python": ("http://python.readthedocs.org/en/latest/", None), "gax": ("https://gax-python.readthedocs.org/en/latest/", None), + "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), + "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), + "google.api_core": ( + "https://googleapis.github.io/google-cloud-python/latest", + None, + ), + "grpc": ("https://grpc.io/grpc/python/", None), + "requests": ("http://docs.python-requests.org/en/master/", None), + "fastavro": ("https://fastavro.readthedocs.io/en/stable/", None), + "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), } # Napoleon settings diff --git a/packages/google-cloud-error-reporting/docs/index.rst b/packages/google-cloud-error-reporting/docs/index.rst index 885ef592d373..3fd35c32a475 100644 --- a/packages/google-cloud-error-reporting/docs/index.rst +++ b/packages/google-cloud-error-reporting/docs/index.rst @@ -1,4 +1,4 @@ -.. include:: /../error_reporting/README.rst +.. include:: README.rst Usage Documentation ------------------- diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index d692cf37f39c..0f528b7f3902 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -16,6 +16,7 @@ from __future__ import absolute_import import os +import shutil import nox @@ -138,3 +139,22 @@ def cover(session): session.run("coverage", "report", "--show-missing", "--fail-under=100") session.run("coverage", "erase") + +@nox.session(python="3.7") +def docs(session): + """Build the docs for this library.""" + + session.install('-e', '.') + session.install('sphinx', 'alabaster', 'recommonmark') + + shutil.rmtree(os.path.join('docs', '_build'), ignore_errors=True) + session.run( + 'sphinx-build', + '-W', # warnings as errors + '-T', # show full traceback on exception + '-N', # no colors + '-b', 'html', + '-d', os.path.join('docs', '_build', 'doctrees', ''), + os.path.join('docs', ''), + os.path.join('docs', '_build', 'html', ''), + ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 416715b72ffa..2b398e3cc3c4 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,26 +1,26 @@ { - "updateTime": "2019-03-28T12:14:00.009958Z", + "updateTime": "2019-05-02T16:27:29.223842Z", "sources": [ { "generator": { "name": "artman", - "version": "0.16.20", - "dockerImage": "googleapis/artman@sha256:e3c054a2fb85a12481c722af616c7fb6f1d02d862248385eecbec3e4240ebd1e" + "version": "0.17.1", + "dockerImage": "googleapis/artman@sha256:a40ca4dd4ef031c0ded4df4909ffdf7b3f20d29b23e682ef991eb60ba0ca6025" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "6a84b3267b0a95e922608b9891219075047eee29", - "internalRef": "240640999" + "sha": "dd42335a9a8613072bef9cbda2725e84631d7043", + "internalRef": "246232940" } }, { "template": { "name": "python_library", "origin": "synthtool.gcp", - "version": "2019.2.26" + "version": "2019.4.10" } } ], From ecd15232c13db08a563d1636b7624788572d141c Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Wed, 8 May 2019 16:43:57 -0400 Subject: [PATCH 127/467] Add 'client_info' support to Client. (#7903) --- .../google/cloud/error_reporting/_gapic.py | 11 ++-- .../google/cloud/error_reporting/_logging.py | 13 ++++- .../google/cloud/error_reporting/client.py | 28 ++++++++-- .../tests/unit/test__gapic.py | 38 ++++++------- .../tests/unit/test__logging.py | 31 ++++++++--- .../tests/unit/test_client.py | 54 +++++++++++++++++-- 6 files changed, 126 insertions(+), 49 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py index 227092f9bfb0..b1925ff6a491 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py @@ -14,15 +14,10 @@ """GAX wrapper for Error Reporting API requests.""" -from google.api_core.gapic_v1 import client_info - -from google.cloud.error_reporting import __version__ from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 from google.protobuf.json_format import ParseDict -_CLIENT_INFO = client_info.ClientInfo(client_library_version=__version__) - def make_report_error_api(client): """Create an instance of the gapic Logging API. @@ -33,10 +28,10 @@ def make_report_error_api(client): :rtype: :class:_ErrorReportingGapicApi :returns: An Error Reporting API instance. """ - gax_client = report_errors_service_client.ReportErrorsServiceClient( - credentials=client._credentials, client_info=_CLIENT_INFO + gapic_api = report_errors_service_client.ReportErrorsServiceClient( + credentials=client._credentials, client_info=client._client_info ) - return _ErrorReportingGapicApi(gax_client, client.project) + return _ErrorReportingGapicApi(gapic_api, client.project) class _ErrorReportingGapicApi(object): diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index b09488914ce9..5eaa4693c96f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -45,11 +45,20 @@ class _ErrorReportingLoggingAPI(object): ``credentials`` for the current object. This parameter should be considered private, and could change in the future. + + :type client_info: + :class:`google.api_core.client_info.ClientInfo` or + :class:`google.api_core.gapic_v1.client_info.ClientInfo` + :param client_info: + 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 library + or partner tool. """ - def __init__(self, project, credentials=None, _http=None): + def __init__(self, project, credentials=None, _http=None, client_info=None): self.logging_client = google.cloud.logging.client.Client( - project, credentials, _http=_http + project, credentials, _http=_http, client_info=client_info ) def report_error_event(self, error_report): diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 699fbdb7d97f..e2c0e4261c52 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -17,21 +17,27 @@ import os import traceback +import six + try: from google.cloud.error_reporting._gapic import make_report_error_api - - _HAVE_GRPC = True except ImportError: # pragma: NO COVER + from google.api_core import ciient_info # noqa + _HAVE_GRPC = False +else: + from google.api_core.gapic_v1 import client_info + + _HAVE_GRPC = True from google.cloud.client import ClientWithProject +from google.cloud.error_reporting import __version__ from google.cloud.error_reporting._logging import _ErrorReportingLoggingAPI from google.cloud.environment_vars import DISABLE_GRPC -import six - _DISABLE_GRPC = os.getenv(DISABLE_GRPC, False) _USE_GRPC = _HAVE_GRPC and not _DISABLE_GRPC +_CLIENT_INFO = client_info.ClientInfo(client_library_version=__version__) class HTTPContext(object): @@ -128,6 +134,15 @@ class Client(ClientWithProject): This parameter should be considered private, and could change in the future. + :type client_info: + :class:`google.api_core.client_info.ClientInfo` or + :class:`google.api_core.gapic_v1.client_info.ClientInfo` + :param client_info: + 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 library + or partner tool. + :raises: :class:`ValueError` if the project is neither passed in nor set in the environment. """ @@ -142,6 +157,7 @@ def __init__( _http=None, service=None, version=None, + client_info=_CLIENT_INFO, _use_grpc=None, ): super(Client, self).__init__( @@ -151,6 +167,8 @@ def __init__( self.service = service if service else self.DEFAULT_SERVICE self.version = version + self._client_info = client_info + if _use_grpc is None: self._use_grpc = _USE_GRPC else: @@ -177,7 +195,7 @@ def report_errors_api(self): self._report_errors_api = make_report_error_api(self) else: self._report_errors_api = _ErrorReportingLoggingAPI( - self.project, self._credentials, self._http + self.project, self._credentials, self._http, self._client_info ) return self._report_errors_api diff --git a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py index 2b6dbbb37be2..836f46b82495 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py @@ -18,37 +18,31 @@ class Test_make_report_error_api(unittest.TestCase): - def test_make_report_error_api(self): - from google.cloud.errorreporting_v1beta1.gapic import ( - report_errors_service_client, - ) - + @staticmethod + def _call_fut(client): from google.cloud.error_reporting._gapic import make_report_error_api - client = mock.Mock( - _credentials=mock.sentinel.credentials, - project="prahj-ekt", - spec=["project", "_credentials"], - ) + return make_report_error_api(client) - # Mock out the constructor for the GAPIC client. - ServiceClient = report_errors_service_client.ReportErrorsServiceClient - with mock.patch.object(ServiceClient, "__init__") as resc: - resc.return_value = None + def test_make_report_error_api(self): + client = mock.Mock(spec=["project", "_credentials", "_client_info"]) - # Call the function being tested. - report_error_client = make_report_error_api(client) + # Call the function being tested. + patch = mock.patch( + "google.cloud.errorreporting_v1beta1." + "gapic.report_errors_service_client.ReportErrorsServiceClient" + ) - # Assert that the arguments to the GAPIC constructor appear - # to be correct. - resc.assert_called_once() - _, _, kwargs = resc.mock_calls[0] - self.assertEqual(kwargs["credentials"], mock.sentinel.credentials) - self.assertIsNotNone(kwargs["client_info"]) + with patch as patched: + report_error_client = self._call_fut(client) # Assert that the final error client has the project in # the expected location. self.assertIs(report_error_client._project, client.project) + self.assertIs(report_error_client._gapic_api, patched.return_value) + patched.assert_called_once_with( + credentials=client._credentials, client_info=client._client_info + ) class Test_ErrorReportingGapicApi(unittest.TestCase): diff --git a/packages/google-cloud-error-reporting/tests/unit/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py index 674a3a9ee726..e2b0638b986e 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__logging.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__logging.py @@ -27,26 +27,41 @@ class Test_ErrorReportingLoggingAPI(unittest.TestCase): PROJECT = "PROJECT" - def _make_one(self, project, credentials): + def _make_one(self, project, credentials, **kw): from google.cloud.error_reporting._logging import _ErrorReportingLoggingAPI - return _ErrorReportingLoggingAPI(project, credentials) + return _ErrorReportingLoggingAPI(project, credentials, **kw) - def test_constructor(self): + @mock.patch("google.cloud.logging.client.Client") + def test_ctor_defaults(self, mocked_cls): credentials = _make_credentials() + logging_api = self._make_one(self.PROJECT, credentials) - self.assertEqual( - logging_api.logging_client._connection.credentials, credentials + self.assertIs(logging_api.logging_client, mocked_cls.return_value) + mocked_cls.assert_called_once_with( + self.PROJECT, credentials, _http=None, client_info=None + ) + + @mock.patch("google.cloud.logging.client.Client") + def test_ctor_explicit(self, mocked_cls): + credentials = _make_credentials() + http = mock.Mock() + client_info = mock.Mock() + + logging_api = self._make_one( + self.PROJECT, credentials, _http=http, client_info=client_info + ) + + self.assertIs(logging_api.logging_client, mocked_cls.return_value) + mocked_cls.assert_called_once_with( + self.PROJECT, credentials, _http=http, client_info=client_info ) - self.assertEqual(logging_api.logging_client.project, self.PROJECT) @mock.patch("google.cloud.logging.client.Client") def test_report_error_event(self, mocked_cls): credentials = _make_credentials() logging_api = self._make_one(self.PROJECT, credentials) - mocked_cls.assert_called_once_with(self.PROJECT, credentials, _http=None) - self.assertIs(logging_api.logging_client, mocked_cls.return_value) logger = mock.Mock(spec=["log_struct"]) logging_api.logging_client.logger.return_value = logger diff --git a/packages/google-cloud-error-reporting/tests/unit/test_client.py b/packages/google-cloud-error-reporting/tests/unit/test_client.py index 458db5136e11..5e4dc925a65f 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test_client.py +++ b/packages/google-cloud-error-reporting/tests/unit/test_client.py @@ -53,26 +53,72 @@ def _get_report_payload(self, error_api): return positional[0] @mock.patch("google.cloud.client._determine_default_project") - def test_ctor_default(self, default_mock): + def test_ctor_defaults(self, default_mock): + from google.api_core.client_info import ClientInfo + credentials = _make_credentials() default_mock.return_value = "foo" client = self._make_one(credentials=credentials) self.assertEqual(client.service, client.DEFAULT_SERVICE) self.assertEqual(client.version, None) + self.assertIsInstance(client._client_info, ClientInfo) default_mock.assert_called_once_with(None) - def test_ctor_params(self): + def test_ctor_explicit(self): credentials = _make_credentials() + client_info = mock.Mock() client = self._make_one( project=self.PROJECT, credentials=credentials, service=self.SERVICE, version=self.VERSION, + client_info=client_info, ) self.assertEqual(client.service, self.SERVICE) self.assertEqual(client.version, self.VERSION) + self.assertIs(client._client_info, client_info) + + def test_report_errors_api_already(self): + credentials = _make_credentials() + client = self._make_one(project=self.PROJECT, credentials=credentials) + client._report_errors_api = already = mock.Mock() + self.assertIs(client.report_errors_api, already) + + def test_report_errors_api_wo_grpc(self): + credentials = _make_credentials() + client_info = mock.Mock() + http = mock.Mock() + client = self._make_one( + project=self.PROJECT, + credentials=credentials, + client_info=client_info, + _http=http, + _use_grpc=False, + ) + patch = mock.patch( + "google.cloud.error_reporting.client._ErrorReportingLoggingAPI" + ) + + with patch as patched: + api = client.report_errors_api + + self.assertIs(api, patched.return_value) + patched.assert_called_once_with(self.PROJECT, credentials, http, client_info) + + def test_report_errors_api_w_grpc(self): + credentials = _make_credentials() + client = self._make_one( + project=self.PROJECT, credentials=credentials, _use_grpc=True + ) + patch = mock.patch("google.cloud.error_reporting.client.make_report_error_api") + + with patch as patched: + api = client.report_errors_api + + self.assertIs(api, patched.return_value) + patched.assert_called_once_with(client) - def test_report_exception_with_gax(self): + def test_report_exception_with_grpc(self): credentials = _make_credentials() client = self._make_one(project=self.PROJECT, credentials=credentials) @@ -89,7 +135,7 @@ def test_report_exception_with_gax(self): self.assertIn("test_report", payload["message"]) self.assertIn("test_client.py", payload["message"]) - def test_report_exception_wo_gax(self): + def test_report_exception_wo_grpc(self): credentials = _make_credentials() client = self._make_one( project=self.PROJECT, credentials=credentials, _use_grpc=False From 592ef41349982991d3620feaec5950b9575e3760 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Wed, 8 May 2019 15:09:27 -0700 Subject: [PATCH 128/467] Remove retries for DEADLINE_EXCEEDED (via synth). (#7883) --- .../gapic/error_group_service_client_config.py | 5 +---- .../gapic/error_stats_service_client_config.py | 5 +---- .../gapic/report_errors_service_client_config.py | 5 +---- packages/google-cloud-error-reporting/synth.metadata | 12 ++++++------ 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py index e70ec324be62..28e53efcf5a6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py @@ -1,10 +1,7 @@ config = { "interfaces": { "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService": { - "retry_codes": { - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], - "non_idempotent": [], - }, + "retry_codes": {"idempotent": ["UNAVAILABLE"], "non_idempotent": []}, "retry_params": { "default": { "initial_retry_delay_millis": 100, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py index fead94c5b733..0cabc4562bef 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py @@ -1,10 +1,7 @@ config = { "interfaces": { "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService": { - "retry_codes": { - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], - "non_idempotent": [], - }, + "retry_codes": {"idempotent": ["UNAVAILABLE"], "non_idempotent": []}, "retry_params": { "default": { "initial_retry_delay_millis": 100, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py index cfefc7eb95f2..cbb478311a8a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py @@ -1,10 +1,7 @@ config = { "interfaces": { "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService": { - "retry_codes": { - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], - "non_idempotent": [], - }, + "retry_codes": {"idempotent": ["UNAVAILABLE"], "non_idempotent": []}, "retry_params": { "default": { "initial_retry_delay_millis": 100, diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 2b398e3cc3c4..3586e3503a79 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,26 +1,26 @@ { - "updateTime": "2019-05-02T16:27:29.223842Z", + "updateTime": "2019-05-08T12:18:53.426272Z", "sources": [ { "generator": { "name": "artman", - "version": "0.17.1", - "dockerImage": "googleapis/artman@sha256:a40ca4dd4ef031c0ded4df4909ffdf7b3f20d29b23e682ef991eb60ba0ca6025" + "version": "0.19.0", + "dockerImage": "googleapis/artman@sha256:d3df563538225ac6caac45d8ad86499500211d1bcb2536955a6dbda15e1b368e" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "dd42335a9a8613072bef9cbda2725e84631d7043", - "internalRef": "246232940" + "sha": "51145ff7812d2bb44c1219d0b76dac92a8bd94b2", + "internalRef": "247143125" } }, { "template": { "name": "python_library", "origin": "synthtool.gcp", - "version": "2019.4.10" + "version": "2019.5.2" } } ], From aa767e91fc16fbd1016d5a7e47ff0b66e7d92fc2 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Fri, 10 May 2019 10:17:01 -0700 Subject: [PATCH 129/467] Retry DEADLINE_EXCEEDED (via synth). (#7927) --- .../gapic/error_group_service_client_config.py | 5 ++++- .../gapic/error_stats_service_client_config.py | 5 ++++- .../gapic/report_errors_service_client_config.py | 5 ++++- packages/google-cloud-error-reporting/synth.metadata | 6 +++--- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py index 28e53efcf5a6..e70ec324be62 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py @@ -1,7 +1,10 @@ config = { "interfaces": { "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService": { - "retry_codes": {"idempotent": ["UNAVAILABLE"], "non_idempotent": []}, + "retry_codes": { + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], + "non_idempotent": [], + }, "retry_params": { "default": { "initial_retry_delay_millis": 100, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py index 0cabc4562bef..fead94c5b733 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py @@ -1,7 +1,10 @@ config = { "interfaces": { "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService": { - "retry_codes": {"idempotent": ["UNAVAILABLE"], "non_idempotent": []}, + "retry_codes": { + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], + "non_idempotent": [], + }, "retry_params": { "default": { "initial_retry_delay_millis": 100, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py index cbb478311a8a..cfefc7eb95f2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py @@ -1,7 +1,10 @@ config = { "interfaces": { "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService": { - "retry_codes": {"idempotent": ["UNAVAILABLE"], "non_idempotent": []}, + "retry_codes": { + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], + "non_idempotent": [], + }, "retry_params": { "default": { "initial_retry_delay_millis": 100, diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 3586e3503a79..903fa5927ff1 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,5 +1,5 @@ { - "updateTime": "2019-05-08T12:18:53.426272Z", + "updateTime": "2019-05-10T12:22:12.008625Z", "sources": [ { "generator": { @@ -12,8 +12,8 @@ "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "51145ff7812d2bb44c1219d0b76dac92a8bd94b2", - "internalRef": "247143125" + "sha": "07883be5bf3c3233095e99d8e92b8094f5d7084a", + "internalRef": "247530843" } }, { From c3fa3386cf182da5ee58fa0189f2a88efe6482a9 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Fri, 17 May 2019 11:17:52 -0400 Subject: [PATCH 130/467] Pin 'google-cloud-logging >= 1.11.0'. (#8015) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 954b888f11cb..eb55050bf114 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = 'Development Status :: 3 - Alpha' dependencies = [ - 'google-cloud-logging>=1.4.0, <2.0dev', + 'google-cloud-logging>=1.11.0, <2.0dev', ] extras = { } From be2a1c71293a9f939a6ed8343d4603e52b8ae3db Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Fri, 17 May 2019 12:58:55 -0400 Subject: [PATCH 131/467] Release error_reporting-0.31.0 (#8019) --- .../google-cloud-error-reporting/CHANGELOG.md | 28 +++++++++++++++++++ .../google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 3bfbdeb428f0..5bdd517294e4 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,34 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## 0.31.0 + +05-17-2019 08:23 PDT + +### Implementation Changes +- Add routing header to method metadata (via synth). ([#7594](https://github.com/googleapis/google-cloud-python/pull/7594)) +- Remove classifier for Python 3.4 for end-of-life. ([#7535](https://github.com/googleapis/google-cloud-python/pull/7535)) + +### New Features +- Add `client_info` support to Client. ([#7903](https://github.com/googleapis/google-cloud-python/pull/7903)) + +### Dependencies +- Pin `google-cloud-logging >= 1.11.0`. ([#8015](https://github.com/googleapis/google-cloud-python/pull/8015)) + +### Documentation +- Update client library documentation URLs. ([#7307](https://github.com/googleapis/google-cloud-python/pull/7307)) + +### Internal / Testing Changes +- Add nox session `docs` (via synth). ([#7770](https://github.com/googleapis/google-cloud-python/pull/7770)) +- Fix docstring replace in synth ([#7458](https://github.com/googleapis/google-cloud-python/pull/7458)) +- Copy lintified proto files (via synth). ([#7447](https://github.com/googleapis/google-cloud-python/pull/7447)) +- Add clarifying comment to blacken nox target (via synth). ([#7391](https://github.com/googleapis/google-cloud-python/pull/7391)) +- Add protos as an artifact to library ([#7205](https://github.com/googleapis/google-cloud-python/pull/7205)) +- Update copyright headers. ([#7144](https://github.com/googleapis/google-cloud-python/pull/7144)) +- Protoc-generated serialization update. ([#7082](https://github.com/googleapis/google-cloud-python/pull/7082)) +- Pick up stub docstring fix in GAPIC generator. ([#6970](https://github.com/googleapis/google-cloud-python/pull/6970)) +- Fix formatting ([#7002](https://github.com/googleapis/google-cloud-python/pull/7002)) + ## 0.30.1 12-17-2018 18:17 PST diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index eb55050bf114..1ce4da984ab8 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = 'google-cloud-error-reporting' description = 'Stackdriver Error Reporting API client library' -version = '0.30.1' +version = '0.31.0' # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 5193d1dcdebb5eae1b2f077e4b5a7c4862a200af Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Mon, 20 May 2019 11:42:11 -0400 Subject: [PATCH 132/467] Fix typo in non-gRPC import. (#8028) Closes #8026. --- .../google/cloud/error_reporting/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index e2c0e4261c52..4fdae4c69e25 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -22,7 +22,7 @@ try: from google.cloud.error_reporting._gapic import make_report_error_api except ImportError: # pragma: NO COVER - from google.api_core import ciient_info # noqa + from google.api_core import client_info # noqa _HAVE_GRPC = False else: From 1d515f9b522b4a5b2fbc494d41975f42f413209e Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Tue, 21 May 2019 09:11:59 -0700 Subject: [PATCH 133/467] Add empty lines (via synth). (#8057) --- .../google/cloud/errorreporting_v1beta1/gapic/enums.py | 1 + .../gapic/error_group_service_client.py | 2 ++ .../gapic/error_stats_service_client.py | 2 ++ .../gapic/report_errors_service_client.py | 2 ++ .../transports/error_group_service_grpc_transport.py | 1 + .../transports/error_stats_service_grpc_transport.py | 1 + .../transports/report_errors_service_grpc_transport.py | 1 + packages/google-cloud-error-reporting/synth.metadata | 10 +++++----- .../v1beta1/test_error_group_service_client_v1beta1.py | 1 + .../v1beta1/test_error_stats_service_client_v1beta1.py | 1 + .../test_report_errors_service_client_v1beta1.py | 1 + 11 files changed, 18 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py index 35ddcba699e9..890ea7e7e4c2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py @@ -13,6 +13,7 @@ # 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. + """Wrappers for protocol buffer enum types.""" import enum diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py index c5e2eaae343a..b30fb425695c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -13,6 +13,7 @@ # 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. + """Accesses the google.devtools.clouderrorreporting.v1beta1 ErrorGroupService API.""" import pkg_resources @@ -36,6 +37,7 @@ from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc + _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( "google-cloud-error-reporting" ).version diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py index 53a5d5738edd..84093e5c7979 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -13,6 +13,7 @@ # 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. + """Accesses the google.devtools.clouderrorreporting.v1beta1 ErrorStatsService API.""" import functools @@ -42,6 +43,7 @@ from google.protobuf import duration_pb2 from google.protobuf import timestamp_pb2 + _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( "google-cloud-error-reporting" ).version diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index c270edb72ccd..337e91d4bb02 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -13,6 +13,7 @@ # 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. + """Accesses the google.devtools.clouderrorreporting.v1beta1 ReportErrorsService API.""" import pkg_resources @@ -44,6 +45,7 @@ from google.protobuf import duration_pb2 from google.protobuf import timestamp_pb2 + _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( "google-cloud-error-reporting" ).version diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py index 932abc306263..ef4951e9c5db 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py @@ -14,6 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. + import google.api_core.grpc_helpers from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py index b8237b66fa00..9dd453eab404 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py @@ -14,6 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. + import google.api_core.grpc_helpers from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2_grpc diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index 40499ed7b6be..9632c7d07ba6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -14,6 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. + import google.api_core.grpc_helpers from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2_grpc diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 903fa5927ff1..dacdc9194747 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-05-10T12:22:12.008625Z", + "updateTime": "2019-05-21T12:19:34.037856Z", "sources": [ { "generator": { "name": "artman", - "version": "0.19.0", - "dockerImage": "googleapis/artman@sha256:d3df563538225ac6caac45d8ad86499500211d1bcb2536955a6dbda15e1b368e" + "version": "0.20.0", + "dockerImage": "googleapis/artman@sha256:3246adac900f4bdbd62920e80de2e5877380e44036b3feae13667ec255ebf5ec" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "07883be5bf3c3233095e99d8e92b8094f5d7084a", - "internalRef": "247530843" + "sha": "32a10f69e2c9ce15bba13ab1ff928bacebb25160", + "internalRef": "249058354" } }, { diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py index d6f3be850097..d65f3f1f7527 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py @@ -13,6 +13,7 @@ # 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. + """Unit tests.""" import mock diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py index 949cfc61b32b..dc09b13fc1b1 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py @@ -13,6 +13,7 @@ # 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. + """Unit tests.""" import mock diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py index 401e386ad633..ef85fa15051a 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py @@ -13,6 +13,7 @@ # 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. + """Unit tests.""" import mock From ce604360242e8fd4d7c0d78d7437783dcd73dd2d Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Fri, 24 May 2019 08:18:57 -0700 Subject: [PATCH 134/467] Blacken noxfile.py, setup.py (via synth). (#8122) --- .../google-cloud-error-reporting/noxfile.py | 46 +++++++------- .../google-cloud-error-reporting/setup.py | 63 +++++++++---------- .../synth.metadata | 6 +- 3 files changed, 55 insertions(+), 60 deletions(-) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 0f528b7f3902..f021e0290c80 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -23,6 +23,12 @@ LOCAL_DEPS = (os.path.join("..", "api_core"), os.path.join("..", "core")) +BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] + +if os.path.exists("samples"): + BLACK_PATHS.append("samples") + + @nox.session(python="3.7") def lint(session): """Run linters. @@ -31,13 +37,7 @@ def lint(session): serious code quality issues. """ session.install("flake8", "black", *LOCAL_DEPS) - session.run( - "black", - "--check", - "google", - "tests", - "docs", - ) + session.run("black", "--check", *BLACK_PATHS) session.run("flake8", "google", "tests") @@ -52,12 +52,7 @@ def blacken(session): check the state of the `gcp_ubuntu_config` we use for that Kokoro run. """ session.install("black") - session.run( - "black", - "google", - "tests", - "docs", - ) + session.run("black", *BLACK_PATHS) @nox.session(python="3.7") @@ -140,21 +135,24 @@ def cover(session): session.run("coverage", "erase") + @nox.session(python="3.7") def docs(session): """Build the docs for this library.""" - session.install('-e', '.') - session.install('sphinx', 'alabaster', 'recommonmark') + session.install("-e", ".") + session.install("sphinx", "alabaster", "recommonmark") - shutil.rmtree(os.path.join('docs', '_build'), ignore_errors=True) + shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( - 'sphinx-build', - '-W', # warnings as errors - '-T', # show full traceback on exception - '-N', # no colors - '-b', 'html', - '-d', os.path.join('docs', '_build', 'doctrees', ''), - os.path.join('docs', ''), - os.path.join('docs', '_build', 'html', ''), + "sphinx-build", + "-W", # warnings as errors + "-T", # show full traceback on exception + "-N", # no colors + "-b", + "html", + "-d", + os.path.join("docs", "_build", "doctrees", ""), + os.path.join("docs", ""), + os.path.join("docs", "_build", "html", ""), ) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 1ce4da984ab8..83156e935aba 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -20,39 +20,36 @@ # Package metadata. -name = 'google-cloud-error-reporting' -description = 'Stackdriver Error Reporting API client library' -version = '0.31.0' +name = "google-cloud-error-reporting" +description = "Stackdriver Error Reporting API client library" +version = "0.31.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' # 'Development Status :: 5 - Production/Stable' -release_status = 'Development Status :: 3 - Alpha' -dependencies = [ - 'google-cloud-logging>=1.11.0, <2.0dev', -] -extras = { -} +release_status = "Development Status :: 3 - Alpha" +dependencies = ["google-cloud-logging>=1.11.0, <2.0dev"] +extras = {} # Setup boilerplate below this line. package_root = os.path.abspath(os.path.dirname(__file__)) -readme_filename = os.path.join(package_root, 'README.rst') -with io.open(readme_filename, encoding='utf-8') as readme_file: +readme_filename = os.path.join(package_root, "README.rst") +with io.open(readme_filename, encoding="utf-8") as readme_file: readme = readme_file.read() # Only include packages under the 'google' namespace. Do not include tests, # benchmarks, etc. packages = [ - package for package in setuptools.find_packages() - if package.startswith('google')] + package for package in setuptools.find_packages() if package.startswith("google") +] # Determine which namespaces are needed. -namespaces = ['google'] -if 'google.cloud' in packages: - namespaces.append('google.cloud') +namespaces = ["google"] +if "google.cloud" in packages: + namespaces.append("google.cloud") setuptools.setup( @@ -60,30 +57,30 @@ version=version, description=description, long_description=readme, - author='Google LLC', - author_email='googleapis-packages@google.com', - license='Apache 2.0', - url='https://github.com/GoogleCloudPlatform/google-cloud-python', + author="Google LLC", + author_email="googleapis-packages@google.com", + license="Apache 2.0", + url="https://github.com/GoogleCloudPlatform/google-cloud-python", classifiers=[ release_status, - 'Intended Audience :: Developers', - 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Operating System :: OS Independent', - 'Topic :: Internet', + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Operating System :: OS Independent", + "Topic :: Internet", ], - platforms='Posix; MacOS X; Windows', + platforms="Posix; MacOS X; Windows", packages=packages, namespace_packages=namespaces, install_requires=dependencies, extras_require=extras, - python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*', + python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", include_package_data=True, zip_safe=False, ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index dacdc9194747..5cd3ca97fb2b 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,5 +1,5 @@ { - "updateTime": "2019-05-21T12:19:34.037856Z", + "updateTime": "2019-05-24T12:19:18.424207Z", "sources": [ { "generator": { @@ -12,8 +12,8 @@ "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "32a10f69e2c9ce15bba13ab1ff928bacebb25160", - "internalRef": "249058354" + "sha": "0537189470f04f24836d6959821c24197a0ed120", + "internalRef": "249742806" } }, { From b67db60e7ce78906c6d1a6eade7880484a11f6f0 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 6 Jun 2019 09:30:22 -0700 Subject: [PATCH 135/467] Suppress checking 'cov-fail-under' in nox default session (via synth). (#8240) --- packages/google-cloud-error-reporting/noxfile.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index f021e0290c80..968fb5a09bf1 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -46,7 +46,7 @@ def blacken(session): """Run black. Format code to uniform standard. - + This currently uses Python 3.6 due to the automated Kokoro run of synthtool. That run uses an image that doesn't have 3.6 installed. Before updating this check the state of the `gcp_ubuntu_config` we use for that Kokoro run. @@ -78,7 +78,7 @@ def default(session): "--cov-append", "--cov-config=.coveragerc", "--cov-report=", - "--cov-fail-under=97", + "--cov-fail-under=0", os.path.join("tests", "unit"), *session.posargs, ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 5cd3ca97fb2b..1e135c3a5d31 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-05-24T12:19:18.424207Z", + "updateTime": "2019-06-06T12:19:53.660940Z", "sources": [ { "generator": { "name": "artman", - "version": "0.20.0", - "dockerImage": "googleapis/artman@sha256:3246adac900f4bdbd62920e80de2e5877380e44036b3feae13667ec255ebf5ec" + "version": "0.23.1", + "dockerImage": "googleapis/artman@sha256:9d5cae1454da64ac3a87028f8ef486b04889e351c83bb95e83b8fab3959faed0" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "0537189470f04f24836d6959821c24197a0ed120", - "internalRef": "249742806" + "sha": "f03bf2139ee85aac88411d6c20a21f4c901fe83c", + "internalRef": "251806891" } }, { From 09dd88981dcefa5c7c0742552a558e634cebd09d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joni=20K=C3=A4mpp=C3=A4?= Date: Tue, 11 Jun 2019 18:35:30 +0200 Subject: [PATCH 136/467] fixed mistake in documentation (#8271) --- packages/google-cloud-error-reporting/docs/usage.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/docs/usage.rst b/packages/google-cloud-error-reporting/docs/usage.rst index f97f8df668c4..4e971d368f52 100644 --- a/packages/google-cloud-error-reporting/docs/usage.rst +++ b/packages/google-cloud-error-reporting/docs/usage.rst @@ -97,7 +97,7 @@ line number of the location where the error was reported. from google.cloud import error_reporting client = error_reporting.Client() - error_reporting.report("Found an error!") + client.report("Found an error!") As with reporting an exception, the user and HTTP context can be provided: @@ -111,5 +111,5 @@ As with reporting an exception, the user and HTTP context can be provided: method='GET', url='/', user_agent='test agent', referrer='example.com', response_status_code=500, remote_ip='1.2.3.4') - error_reporting.report( + client.report( "Found an error!", http_context=http_context, user=user)) From cd843f52f1cb75d2c38eae7c50c45eb8ac95ef09 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Fri, 14 Jun 2019 09:47:33 -0700 Subject: [PATCH 137/467] [CHANGE ME] Re-generated error_reporting to pick up changes in the API or client library generator. (#8313) --- packages/google-cloud-error-reporting/.coveragerc | 1 + packages/google-cloud-error-reporting/.flake8 | 1 + packages/google-cloud-error-reporting/noxfile.py | 2 ++ packages/google-cloud-error-reporting/setup.cfg | 1 + packages/google-cloud-error-reporting/synth.metadata | 10 +++++----- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc index 6b9ab9da4a1b..b178b094aa1d 100644 --- a/packages/google-cloud-error-reporting/.coveragerc +++ b/packages/google-cloud-error-reporting/.coveragerc @@ -1,3 +1,4 @@ +# Generated by synthtool. DO NOT EDIT! [run] branch = True diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index 61766fa84d02..0268ecc9c55c 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -1,3 +1,4 @@ +# Generated by synthtool. DO NOT EDIT! [flake8] ignore = E203, E266, E501, W503 exclude = diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 968fb5a09bf1..f6257317fccd 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -14,6 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Generated by synthtool. DO NOT EDIT! + from __future__ import absolute_import import os import shutil diff --git a/packages/google-cloud-error-reporting/setup.cfg b/packages/google-cloud-error-reporting/setup.cfg index 2a9acf13daa9..3bd555500e37 100644 --- a/packages/google-cloud-error-reporting/setup.cfg +++ b/packages/google-cloud-error-reporting/setup.cfg @@ -1,2 +1,3 @@ +# Generated by synthtool. DO NOT EDIT! [bdist_wheel] universal = 1 diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 1e135c3a5d31..750a12e99a4a 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-06-06T12:19:53.660940Z", + "updateTime": "2019-06-14T12:18:24.583572Z", "sources": [ { "generator": { "name": "artman", - "version": "0.23.1", - "dockerImage": "googleapis/artman@sha256:9d5cae1454da64ac3a87028f8ef486b04889e351c83bb95e83b8fab3959faed0" + "version": "0.25.0", + "dockerImage": "googleapis/artman@sha256:ef1a98ab1e2b8f05f4d9a56f27d63347aefe14020e5f2d585172b14ca76f1d90" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "f03bf2139ee85aac88411d6c20a21f4c901fe83c", - "internalRef": "251806891" + "sha": "c23b68eecb00c4d285a730a49b1d7d943cd56183", + "internalRef": "253113405" } }, { From 23e9fb7f68c0e81820e7c112c2043a0bd09025b4 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 17 Jun 2019 09:36:55 -0700 Subject: [PATCH 138/467] Declare encoding as utf-8 in pb2 files (via synth). (#8351) --- .../cloud/errorreporting_v1beta1/proto/common_pb2.py | 1 + .../proto/error_group_service_pb2.py | 1 + .../proto/error_stats_service_pb2.py | 1 + .../proto/report_errors_service_pb2.py | 1 + packages/google-cloud-error-reporting/synth.metadata | 10 +++++----- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py index 7c3f31f9c393..c9ebc4c6d279 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: google/devtools/clouderrorreporting_v1beta1/proto/common.proto diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py index 0d62e5d8c096..a6406ab03623 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py index 3cacf890da44..a8fe60bd67f7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py index b23993fbca71..9562dd34b90b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 750a12e99a4a..7f07052e46e0 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-06-14T12:18:24.583572Z", + "updateTime": "2019-06-15T12:18:00.028978Z", "sources": [ { "generator": { "name": "artman", - "version": "0.25.0", - "dockerImage": "googleapis/artman@sha256:ef1a98ab1e2b8f05f4d9a56f27d63347aefe14020e5f2d585172b14ca76f1d90" + "version": "0.26.0", + "dockerImage": "googleapis/artman@sha256:6db0735b0d3beec5b887153a2a7c7411fc7bb53f73f6f389a822096bd14a3a15" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "c23b68eecb00c4d285a730a49b1d7d943cd56183", - "internalRef": "253113405" + "sha": "7b58b37559f6a5337c4c564518e9573d742df225", + "internalRef": "253322136" } }, { From 5656c110649829dd78c5f445e6be582e306d81bb Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Tue, 18 Jun 2019 11:25:22 -0700 Subject: [PATCH 139/467] Allow kwargs to be passed to create_channel (via synth). (#8389) --- .../transports/error_group_service_grpc_transport.py | 9 +++++++-- .../transports/error_stats_service_grpc_transport.py | 9 +++++++-- .../transports/report_errors_service_grpc_transport.py | 9 +++++++-- packages/google-cloud-error-reporting/synth.metadata | 10 +++++----- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py index ef4951e9c5db..a994b9e074e5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py @@ -75,7 +75,10 @@ def __init__( @classmethod def create_channel( - cls, address="clouderrorreporting.googleapis.com:443", credentials=None + cls, + address="clouderrorreporting.googleapis.com:443", + credentials=None, + **kwargs ): """Create and return a gRPC channel object. @@ -86,12 +89,14 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. + kwargs (dict): Keyword arguments, which are passed to the + channel creation. Returns: grpc.Channel: A gRPC channel object. """ return google.api_core.grpc_helpers.create_channel( - address, credentials=credentials, scopes=cls._OAUTH_SCOPES + address, credentials=credentials, scopes=cls._OAUTH_SCOPES, **kwargs ) @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py index 9dd453eab404..f828ba09cee9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py @@ -75,7 +75,10 @@ def __init__( @classmethod def create_channel( - cls, address="clouderrorreporting.googleapis.com:443", credentials=None + cls, + address="clouderrorreporting.googleapis.com:443", + credentials=None, + **kwargs ): """Create and return a gRPC channel object. @@ -86,12 +89,14 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. + kwargs (dict): Keyword arguments, which are passed to the + channel creation. Returns: grpc.Channel: A gRPC channel object. """ return google.api_core.grpc_helpers.create_channel( - address, credentials=credentials, scopes=cls._OAUTH_SCOPES + address, credentials=credentials, scopes=cls._OAUTH_SCOPES, **kwargs ) @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index 9632c7d07ba6..1bc14030974d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -75,7 +75,10 @@ def __init__( @classmethod def create_channel( - cls, address="clouderrorreporting.googleapis.com:443", credentials=None + cls, + address="clouderrorreporting.googleapis.com:443", + credentials=None, + **kwargs ): """Create and return a gRPC channel object. @@ -86,12 +89,14 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. + kwargs (dict): Keyword arguments, which are passed to the + channel creation. Returns: grpc.Channel: A gRPC channel object. """ return google.api_core.grpc_helpers.create_channel( - address, credentials=credentials, scopes=cls._OAUTH_SCOPES + address, credentials=credentials, scopes=cls._OAUTH_SCOPES, **kwargs ) @property diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 7f07052e46e0..d41dfb3e7935 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-06-15T12:18:00.028978Z", + "updateTime": "2019-06-18T12:16:52.238099Z", "sources": [ { "generator": { "name": "artman", - "version": "0.26.0", - "dockerImage": "googleapis/artman@sha256:6db0735b0d3beec5b887153a2a7c7411fc7bb53f73f6f389a822096bd14a3a15" + "version": "0.27.0", + "dockerImage": "googleapis/artman@sha256:b036a7f4278d9deb5796f065e5c7f608d47d75369985ca7ab5039998120e972d" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "7b58b37559f6a5337c4c564518e9573d742df225", - "internalRef": "253322136" + "sha": "384aa843867c4d17756d14a01f047b6368494d32", + "internalRef": "253675319" } }, { From a5efa677cdda67bddbc71618f9bf1df501bfdfbd Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Tue, 25 Jun 2019 12:44:16 -0700 Subject: [PATCH 140/467] All: Add docs job to publish to googleapis.dev. (#8464) --- .../.repo-metadata.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/google-cloud-error-reporting/.repo-metadata.json diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json new file mode 100644 index 000000000000..9bbc93ae5596 --- /dev/null +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -0,0 +1,13 @@ +{ + "name": "clouderroreporting", + "name_pretty": "Stackdriver Error Reporting", + "product_documentation": "https://cloud.google.com/error-reporting", + "client_documentation": "https://googleapis.dev/python/clouderroreporting/latest", + "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", + "release_level": "alpha", + "language": "python", + "repo": "googleapis/google-cloud-python", + "distribution_name": "google-cloud-error-reporting", + "api_id": "clouderroreporting.googleapis.com", + "requires_billing": false +} \ No newline at end of file From 9274eaaa7cda26808bb9534d001854cc4e54ac1d Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Fri, 28 Jun 2019 09:18:36 -0700 Subject: [PATCH 141/467] Add 'client_options' support, update list method docstrings (via synth). (#8508) --- .../gapic/error_group_service_client.py | 17 +++++++++- .../gapic/error_stats_service_client.py | 33 ++++++++++++++----- .../gapic/report_errors_service_client.py | 17 +++++++++- .../synth.metadata | 10 +++--- 4 files changed, 61 insertions(+), 16 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py index b30fb425695c..77f5b2935178 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -20,6 +20,7 @@ import warnings from google.oauth2 import service_account +import google.api_core.client_options import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method @@ -87,6 +88,7 @@ def __init__( credentials=None, client_config=None, client_info=None, + client_options=None, ): """Constructor. @@ -117,6 +119,9 @@ def __init__( 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. + client_options (Union[dict, google.api_core.client_options.ClientOptions]): + Client options used to set user options on the client. API Endpoint + should be set through client_options. """ # Raise deprecation warnings for things we want to go away. if client_config is not None: @@ -135,6 +140,15 @@ def __init__( stacklevel=2, ) + api_endpoint = self.SERVICE_ADDRESS + if client_options: + if type(client_options) == dict: + client_options = google.api_core.client_options.from_dict( + client_options + ) + if client_options.api_endpoint: + api_endpoint = client_options.api_endpoint + # Instantiate the transport. # The transport is responsible for handling serialization and # deserialization and actually sending data to the service. @@ -143,6 +157,7 @@ def __init__( self.transport = transport( credentials=credentials, default_class=error_group_service_grpc_transport.ErrorGroupServiceGrpcTransport, + address=api_endpoint, ) else: if credentials: @@ -153,7 +168,7 @@ def __init__( self.transport = transport else: self.transport = error_group_service_grpc_transport.ErrorGroupServiceGrpcTransport( - address=self.SERVICE_ADDRESS, channel=channel, credentials=credentials + address=api_endpoint, channel=channel, credentials=credentials ) if client_info is None: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py index 84093e5c7979..01cfc0cf9430 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -21,6 +21,7 @@ import warnings from google.oauth2 import service_account +import google.api_core.client_options import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method @@ -96,6 +97,7 @@ def __init__( credentials=None, client_config=None, client_info=None, + client_options=None, ): """Constructor. @@ -126,6 +128,9 @@ def __init__( 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. + client_options (Union[dict, google.api_core.client_options.ClientOptions]): + Client options used to set user options on the client. API Endpoint + should be set through client_options. """ # Raise deprecation warnings for things we want to go away. if client_config is not None: @@ -144,6 +149,15 @@ def __init__( stacklevel=2, ) + api_endpoint = self.SERVICE_ADDRESS + if client_options: + if type(client_options) == dict: + client_options = google.api_core.client_options.from_dict( + client_options + ) + if client_options.api_endpoint: + api_endpoint = client_options.api_endpoint + # Instantiate the transport. # The transport is responsible for handling serialization and # deserialization and actually sending data to the service. @@ -152,6 +166,7 @@ def __init__( self.transport = transport( credentials=credentials, default_class=error_stats_service_grpc_transport.ErrorStatsServiceGrpcTransport, + address=api_endpoint, ) else: if credentials: @@ -162,7 +177,7 @@ def __init__( self.transport = transport else: self.transport = error_stats_service_grpc_transport.ErrorStatsServiceGrpcTransport( - address=self.SERVICE_ADDRESS, channel=channel, credentials=credentials + address=api_endpoint, channel=channel, credentials=credentials ) if client_info is None: @@ -280,10 +295,10 @@ def list_group_stats( that is provided to the method. Returns: - A :class:`~google.gax.PageIterator` instance. By default, this - is an iterable of :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroupStats` instances. - This object can also be configured to iterate over the pages - of the response through the `options` parameter. + A :class:`~google.api_core.page_iterator.PageIterator` instance. + An iterable of :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroupStats` instances. + You can also iterate over the pages of the response + using its `pages` property. Raises: google.api_core.exceptions.GoogleAPICallError: If the request @@ -413,10 +428,10 @@ def list_events( that is provided to the method. Returns: - A :class:`~google.gax.PageIterator` instance. By default, this - is an iterable of :class:`~google.cloud.errorreporting_v1beta1.types.ErrorEvent` instances. - This object can also be configured to iterate over the pages - of the response through the `options` parameter. + A :class:`~google.api_core.page_iterator.PageIterator` instance. + An iterable of :class:`~google.cloud.errorreporting_v1beta1.types.ErrorEvent` instances. + You can also iterate over the pages of the response + using its `pages` property. Raises: google.api_core.exceptions.GoogleAPICallError: If the request diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index 337e91d4bb02..d6e921113f4a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -20,6 +20,7 @@ import warnings from google.oauth2 import service_account +import google.api_core.client_options import google.api_core.gapic_v1.client_info import google.api_core.gapic_v1.config import google.api_core.gapic_v1.method @@ -95,6 +96,7 @@ def __init__( credentials=None, client_config=None, client_info=None, + client_options=None, ): """Constructor. @@ -125,6 +127,9 @@ def __init__( 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. + client_options (Union[dict, google.api_core.client_options.ClientOptions]): + Client options used to set user options on the client. API Endpoint + should be set through client_options. """ # Raise deprecation warnings for things we want to go away. if client_config is not None: @@ -143,6 +148,15 @@ def __init__( stacklevel=2, ) + api_endpoint = self.SERVICE_ADDRESS + if client_options: + if type(client_options) == dict: + client_options = google.api_core.client_options.from_dict( + client_options + ) + if client_options.api_endpoint: + api_endpoint = client_options.api_endpoint + # Instantiate the transport. # The transport is responsible for handling serialization and # deserialization and actually sending data to the service. @@ -151,6 +165,7 @@ def __init__( self.transport = transport( credentials=credentials, default_class=report_errors_service_grpc_transport.ReportErrorsServiceGrpcTransport, + address=api_endpoint, ) else: if credentials: @@ -161,7 +176,7 @@ def __init__( self.transport = transport else: self.transport = report_errors_service_grpc_transport.ReportErrorsServiceGrpcTransport( - address=self.SERVICE_ADDRESS, channel=channel, credentials=credentials + address=api_endpoint, channel=channel, credentials=credentials ) if client_info is None: diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index d41dfb3e7935..1c696c9d0212 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-06-18T12:16:52.238099Z", + "updateTime": "2019-06-28T12:22:22.949697Z", "sources": [ { "generator": { "name": "artman", - "version": "0.27.0", - "dockerImage": "googleapis/artman@sha256:b036a7f4278d9deb5796f065e5c7f608d47d75369985ca7ab5039998120e972d" + "version": "0.29.2", + "dockerImage": "googleapis/artman@sha256:45263333b058a4b3c26a8b7680a2710f43eae3d250f791a6cb66423991dcb2df" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "384aa843867c4d17756d14a01f047b6368494d32", - "internalRef": "253675319" + "sha": "84c8ad4e52f8eec8f08a60636cfa597b86969b5c", + "internalRef": "255474859" } }, { From e51f0d191e1275a1e0f5bbf7411d8ef41ec37c01 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 3 Jul 2019 10:47:52 -0700 Subject: [PATCH 142/467] Pin black version (via synth). (#8582) --- packages/google-cloud-error-reporting/noxfile.py | 6 +++--- packages/google-cloud-error-reporting/synth.metadata | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index f6257317fccd..a2eefbb6765f 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -24,7 +24,7 @@ LOCAL_DEPS = (os.path.join("..", "api_core"), os.path.join("..", "core")) - +BLACK_VERSION = "black==19.3b0" BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] if os.path.exists("samples"): @@ -38,7 +38,7 @@ def lint(session): Returns a failure if the linters find linting errors or sufficiently serious code quality issues. """ - session.install("flake8", "black", *LOCAL_DEPS) + session.install("flake8", BLACK_VERSION, *LOCAL_DEPS) session.run("black", "--check", *BLACK_PATHS) session.run("flake8", "google", "tests") @@ -53,7 +53,7 @@ def blacken(session): That run uses an image that doesn't have 3.6 installed. Before updating this check the state of the `gcp_ubuntu_config` we use for that Kokoro run. """ - session.install("black") + session.install(BLACK_VERSION) session.run("black", *BLACK_PATHS) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 1c696c9d0212..fe13ec15f163 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-06-28T12:22:22.949697Z", + "updateTime": "2019-07-03T12:25:57.493986Z", "sources": [ { "generator": { "name": "artman", - "version": "0.29.2", - "dockerImage": "googleapis/artman@sha256:45263333b058a4b3c26a8b7680a2710f43eae3d250f791a6cb66423991dcb2df" + "version": "0.29.3", + "dockerImage": "googleapis/artman@sha256:8900f94a81adaab0238965aa8a7b3648791f4f3a95ee65adc6a56cfcc3753101" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "84c8ad4e52f8eec8f08a60636cfa597b86969b5c", - "internalRef": "255474859" + "sha": "69916b6ffbb7717fa009033351777d0c9909fb79", + "internalRef": "256241904" } }, { From 8c1d48e00bb059b330d25a37b0a277ac06e714bb Mon Sep 17 00:00:00 2001 From: ylil93 Date: Mon, 15 Jul 2019 12:12:29 -0700 Subject: [PATCH 143/467] Add compatibility check badges to READMEs. (#8288) --- packages/google-cloud-error-reporting/README.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 46bb326bdb78..393ae746c2fb 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -1,7 +1,7 @@ Python Client for Stackdriver Error Reporting ============================================= -|pypi| |versions| +|pypi| |versions| |compat_check_pypi| |compat_check_github| The Stackdriver `Error Reporting`_ API counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management @@ -20,6 +20,10 @@ to receive email and mobile alerts on new errors. :target: https://pypi.org/project/google-cloud-error-reporting/ .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ +.. |compat_check_pypi| image:: https://python-compatibility-tools.appspot.com/one_badge_image?package=google-cloud-error-reporting + :target: https://python-compatibility-tools.appspot.com/one_badge_target?package=google-cloud-error-reporting +.. |compat_check_github| image:: https://python-compatibility-tools.appspot.com/one_badge_image?package=git%2Bgit%3A//github.com/googleapis/google-cloud-python.git%23subdirectory%3Derror_reporting + :target: https://python-compatibility-tools.appspot.com/one_badge_target?package=git%2Bgit%3A//github.com/googleapis/google-cloud-python.git%23subdirectory%3Derror_reporting Quick Start ----------- From 01a533a2460be5e66f3a4308e31d0f1bf18bee87 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Fri, 19 Jul 2019 14:45:47 -0700 Subject: [PATCH 144/467] Link to googleapis.dev documentation in READMEs. (#8705) --- packages/google-cloud-error-reporting/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 393ae746c2fb..0221d00e0f46 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -14,7 +14,7 @@ to receive email and mobile alerts on new errors. - `Product Documentation`_ .. _Error Reporting: https://cloud.google.com/error-reporting/ -.. _Client Library Documentation: https://googleapis.github.io/google-cloud-python/latest/error-reporting/usage.html +.. _Client Library Documentation: https://googleapis.dev/python/clouderroreporting/latest .. _Product Documentation: https://cloud.google.com/error-reporting/reference/ .. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ @@ -38,7 +38,7 @@ In order to use this library, you first need to go through the following steps: .. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project .. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project .. _Enable the Google Cloud Error Reporting API.: https://cloud.google.com/error-reporting -.. _Setup Authentication.: https://googleapis.github.io/google-cloud-python/latest/core/auth.html +.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html Installation ~~~~~~~~~~~~ From 6376608e014077825e79b5156a25c25302736ebf Mon Sep 17 00:00:00 2001 From: Ryan Yuan Date: Wed, 24 Jul 2019 02:30:21 +1000 Subject: [PATCH 145/467] Fix docs navigation issues. (#8723) --- packages/google-cloud-error-reporting/docs/README.rst | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 120000 packages/google-cloud-error-reporting/docs/README.rst diff --git a/packages/google-cloud-error-reporting/docs/README.rst b/packages/google-cloud-error-reporting/docs/README.rst deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/google-cloud-error-reporting/docs/README.rst b/packages/google-cloud-error-reporting/docs/README.rst new file mode 120000 index 000000000000..38473f99d57f --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/README.rst @@ -0,0 +1 @@ +../../error_reporting/README.rst \ No newline at end of file From 5f82d814e16a4ee3404f5b80db813eaa1775fc5b Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Thu, 25 Jul 2019 14:59:19 -0700 Subject: [PATCH 146/467] Release 0.32.0 (#8753) --- .../google-cloud-error-reporting/CHANGELOG.md | 27 +++++++++++++++++++ .../google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 5bdd517294e4..7942fe8081dd 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,33 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## 0.32.0 + +07-24-2019 16:17 PDT + + +### Implementation Changes +- Allow kwargs to be passed to create_channel (via synth). ([#8389](https://github.com/googleapis/google-cloud-python/pull/8389)) +- Fix typo in non-gRPC import. ([#8028](https://github.com/googleapis/google-cloud-python/pull/8028)) + +### New Features +- Add 'client_options' support, update list method docstrings (via synth). ([#8508](https://github.com/googleapis/google-cloud-python/pull/8508)) + +### Documentation +- Fix docs navigation issues. ([#8723](https://github.com/googleapis/google-cloud-python/pull/8723)) +- Link to googleapis.dev documentation in READMEs. ([#8705](https://github.com/googleapis/google-cloud-python/pull/8705)) +- Add compatibility check badges to READMEs. ([#8288](https://github.com/googleapis/google-cloud-python/pull/8288)) +- Fix mistake in documentation ([#8271](https://github.com/googleapis/google-cloud-python/pull/8271)) + +### Internal / Testing Changes +- Pin black version (via synth). ([#8582](https://github.com/googleapis/google-cloud-python/pull/8582)) +- Add docs job to publish to googleapis.dev. ([#8464](https://github.com/googleapis/google-cloud-python/pull/8464)) +- Declare encoding as utf-8 in pb2 files (via synth). ([#8351](https://github.com/googleapis/google-cloud-python/pull/8351)) +- Add disclaimer to auto-generated template files (via synth). ([#8313](https://github.com/googleapis/google-cloud-python/pull/8313)) +- Suppress checking 'cov-fail-under' in nox default session (via synth). ([#8240](https://github.com/googleapis/google-cloud-python/pull/8240)) +- Blacken noxfile.py, setup.py (via synth). ([#8122](https://github.com/googleapis/google-cloud-python/pull/8122)) +- Add empty lines (via synth). ([#8057](https://github.com/googleapis/google-cloud-python/pull/8057)) + ## 0.31.0 05-17-2019 08:23 PDT diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 83156e935aba..0eb3f4669829 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Stackdriver Error Reporting API client library" -version = "0.31.0" +version = "0.32.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 0bd47df3803ba70870c319f52c56974dd77ac10a Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Mon, 29 Jul 2019 12:53:23 -0700 Subject: [PATCH 147/467] Update intersphinx mapping for requests. (#8805) --- packages/google-cloud-error-reporting/docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 4969d6a6c313..71428583d3c7 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -341,7 +341,7 @@ None, ), "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("http://docs.python-requests.org/en/master/", None), + "requests": ("https://2.python-requests.org/en/master/", None), "fastavro": ("https://fastavro.readthedocs.io/en/stable/", None), "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), } From c441866ed8e6f5a102e315672eb4e5e8ed7fd5cd Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Tue, 6 Aug 2019 09:25:47 -0700 Subject: [PATCH 148/467] Remove send/recv msg size limit (via synth). (#8954) --- .../gapic/error_group_service_client.py | 8 ++++---- .../gapic/error_stats_service_client.py | 12 ++++++------ .../gapic/report_errors_service_client.py | 4 ++-- .../transports/error_group_service_grpc_transport.py | 9 ++++++++- .../transports/error_stats_service_grpc_transport.py | 9 ++++++++- .../report_errors_service_grpc_transport.py | 9 ++++++++- packages/google-cloud-error-reporting/synth.metadata | 10 +++++----- 7 files changed, 41 insertions(+), 20 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py index 77f5b2935178..af60931f74e9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -220,8 +220,8 @@ def get_group( Example: projects/my-project-123/groups/my-group retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will not - be retried. + to retry requests. If ``None`` is specified, requests will + be retried using a default configuration. timeout (Optional[float]): The amount of time, in seconds, to wait for the request to complete. Note that if ``retry`` is specified, the timeout applies to each individual attempt. @@ -294,8 +294,8 @@ def update_group( If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will not - be retried. + to retry requests. If ``None`` is specified, requests will + be retried using a default configuration. timeout (Optional[float]): The amount of time, in seconds, to wait for the request to complete. Note that if ``retry`` is specified, the timeout applies to each individual attempt. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py index 01cfc0cf9430..692f0329e8de 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -286,8 +286,8 @@ def list_group_stats( streaming is performed per-page, this determines the maximum number of resources in a page. retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will not - be retried. + to retry requests. If ``None`` is specified, requests will + be retried using a default configuration. timeout (Optional[float]): The amount of time, in seconds, to wait for the request to complete. Note that if ``retry`` is specified, the timeout applies to each individual attempt. @@ -419,8 +419,8 @@ def list_events( streaming is performed per-page, this determines the maximum number of resources in a page. retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will not - be retried. + to retry requests. If ``None`` is specified, requests will + be retried using a default configuration. timeout (Optional[float]): The amount of time, in seconds, to wait for the request to complete. Note that if ``retry`` is specified, the timeout applies to each individual attempt. @@ -511,8 +511,8 @@ def delete_events( ID `__. Example: ``projects/my-project-123``. retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will not - be retried. + to retry requests. If ``None`` is specified, requests will + be retried using a default configuration. timeout (Optional[float]): The amount of time, in seconds, to wait for the request to complete. Note that if ``retry`` is specified, the timeout applies to each individual attempt. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index d6e921113f4a..7ad37cc1cd36 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -235,8 +235,8 @@ def report_error_event( If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent` retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will not - be retried. + to retry requests. If ``None`` is specified, requests will + be retried using a default configuration. timeout (Optional[float]): The amount of time, in seconds, to wait for the request to complete. Note that if ``retry`` is specified, the timeout applies to each individual attempt. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py index a994b9e074e5..cde299b8edb0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py @@ -61,7 +61,14 @@ def __init__( # Create the channel. if channel is None: - channel = self.create_channel(address=address, credentials=credentials) + channel = self.create_channel( + address=address, + credentials=credentials, + options={ + "grpc.max_send_message_length": -1, + "grpc.max_receive_message_length": -1, + }.items(), + ) self._channel = channel diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py index f828ba09cee9..2ef5f2126019 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py @@ -61,7 +61,14 @@ def __init__( # Create the channel. if channel is None: - channel = self.create_channel(address=address, credentials=credentials) + channel = self.create_channel( + address=address, + credentials=credentials, + options={ + "grpc.max_send_message_length": -1, + "grpc.max_receive_message_length": -1, + }.items(), + ) self._channel = channel diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index 1bc14030974d..e367e49c4c39 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -61,7 +61,14 @@ def __init__( # Create the channel. if channel is None: - channel = self.create_channel(address=address, credentials=credentials) + channel = self.create_channel( + address=address, + credentials=credentials, + options={ + "grpc.max_send_message_length": -1, + "grpc.max_receive_message_length": -1, + }.items(), + ) self._channel = channel diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index fe13ec15f163..ab416d10e320 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,19 +1,19 @@ { - "updateTime": "2019-07-03T12:25:57.493986Z", + "updateTime": "2019-08-06T12:24:11.470016Z", "sources": [ { "generator": { "name": "artman", - "version": "0.29.3", - "dockerImage": "googleapis/artman@sha256:8900f94a81adaab0238965aa8a7b3648791f4f3a95ee65adc6a56cfcc3753101" + "version": "0.32.1", + "dockerImage": "googleapis/artman@sha256:a684d40ba9a4e15946f5f2ca6b4bd9fe301192f522e9de4fff622118775f309b" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "69916b6ffbb7717fa009033351777d0c9909fb79", - "internalRef": "256241904" + "sha": "e699b0cba64ffddfae39633417180f1f65875896", + "internalRef": "261759677" } }, { From e1e2f6f8788b4022474dc9490338ecb5dd1760ad Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Fri, 16 Aug 2019 13:25:32 -0700 Subject: [PATCH 149/467] Remove compatability badges from READMEs. (#9035) --- packages/google-cloud-error-reporting/README.rst | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 0221d00e0f46..49439485c48f 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -1,7 +1,7 @@ Python Client for Stackdriver Error Reporting ============================================= -|pypi| |versions| |compat_check_pypi| |compat_check_github| +|pypi| |versions| The Stackdriver `Error Reporting`_ API counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management @@ -20,10 +20,6 @@ to receive email and mobile alerts on new errors. :target: https://pypi.org/project/google-cloud-error-reporting/ .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ -.. |compat_check_pypi| image:: https://python-compatibility-tools.appspot.com/one_badge_image?package=google-cloud-error-reporting - :target: https://python-compatibility-tools.appspot.com/one_badge_target?package=google-cloud-error-reporting -.. |compat_check_github| image:: https://python-compatibility-tools.appspot.com/one_badge_image?package=git%2Bgit%3A//github.com/googleapis/google-cloud-python.git%23subdirectory%3Derror_reporting - :target: https://python-compatibility-tools.appspot.com/one_badge_target?package=git%2Bgit%3A//github.com/googleapis/google-cloud-python.git%23subdirectory%3Derror_reporting Quick Start ----------- From ff71f5a2e1733278da6e29e585cead29865aabdf Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Fri, 23 Aug 2019 10:09:28 -0700 Subject: [PATCH 150/467] Fix documentation links for iam and error-reporting. (#9073) --- packages/google-cloud-error-reporting/.repo-metadata.json | 6 +++--- packages/google-cloud-error-reporting/README.rst | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index 9bbc93ae5596..291301df028c 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -1,13 +1,13 @@ { - "name": "clouderroreporting", + "name": "clouderrorreporting", "name_pretty": "Stackdriver Error Reporting", "product_documentation": "https://cloud.google.com/error-reporting", - "client_documentation": "https://googleapis.dev/python/clouderroreporting/latest", + "client_documentation": "https://googleapis.dev/python/clouderrorreporting/latest", "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", "release_level": "alpha", "language": "python", "repo": "googleapis/google-cloud-python", "distribution_name": "google-cloud-error-reporting", - "api_id": "clouderroreporting.googleapis.com", + "api_id": "clouderrorreporting.googleapis.com", "requires_billing": false } \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 49439485c48f..39561dd92cb3 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -14,7 +14,7 @@ to receive email and mobile alerts on new errors. - `Product Documentation`_ .. _Error Reporting: https://cloud.google.com/error-reporting/ -.. _Client Library Documentation: https://googleapis.dev/python/clouderroreporting/latest +.. _Client Library Documentation: https://googleapis.dev/python/clouderrorreporting/latest .. _Product Documentation: https://cloud.google.com/error-reporting/reference/ .. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ From 6a50f8e29a1a636b9a65076aa8e668071c66ddc1 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Tue, 27 Aug 2019 10:27:42 -0700 Subject: [PATCH 151/467] Release error_reporting 0.32.1 (#9094) --- packages/google-cloud-error-reporting/CHANGELOG.md | 12 ++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 7942fe8081dd..81c20812af9f 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,18 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## 0.32.1 + +08-23-2019 10:12 PDT + +### Implementation Changes +- Remove send/recv msg size limit (via synth). ([#8954](https://github.com/googleapis/google-cloud-python/pull/8954)) + +### Documentation +- Fix documentation links for iam and error-reporting. ([#9073](https://github.com/googleapis/google-cloud-python/pull/9073)) +- Remove compatability badges from READMEs. ([#9035](https://github.com/googleapis/google-cloud-python/pull/9035)) +- Update intersphinx mapping for requests. ([#8805](https://github.com/googleapis/google-cloud-python/pull/8805)) + ## 0.32.0 07-24-2019 16:17 PDT diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 0eb3f4669829..da91c2707903 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Stackdriver Error Reporting API client library" -version = "0.32.0" +version = "0.32.1" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 726fcb03211cebe8f7b94a691b5fcf08ad288479 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Tue, 27 Aug 2019 16:35:22 -0700 Subject: [PATCH 152/467] Docs: Remove CI for gh-pages, use googleapis.dev for api_core refs. (#9085) --- packages/google-cloud-error-reporting/docs/conf.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 71428583d3c7..97c5250b84c8 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -336,10 +336,7 @@ "gax": ("https://gax-python.readthedocs.org/en/latest/", None), "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), - "google.api_core": ( - "https://googleapis.github.io/google-cloud-python/latest", - None, - ), + "google.api_core": ("https://googleapis.dev/python/google-api-core/latest", None), "grpc": ("https://grpc.io/grpc/python/", None), "requests": ("https://2.python-requests.org/en/master/", None), "fastavro": ("https://fastavro.readthedocs.io/en/stable/", None), From 01d80dfeebdea9f8227a77b37ded9425d53c7948 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Wed, 25 Sep 2019 12:35:50 -0400 Subject: [PATCH 153/467] docs: fix intersphinx reference to requests (#9294) --- packages/google-cloud-error-reporting/docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 97c5250b84c8..db959a13ca88 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -338,7 +338,7 @@ "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), "google.api_core": ("https://googleapis.dev/python/google-api-core/latest", None), "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("https://2.python-requests.org/en/master/", None), + "requests": ("https://requests.kennethreitz.org/en/stable/", None), "fastavro": ("https://fastavro.readthedocs.io/en/stable/", None), "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), } From e360864afffd205b2703eeba1bf8052049e424df Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Mon, 30 Sep 2019 10:45:27 -0400 Subject: [PATCH 154/467] feat(error_reporting): add client_options to constructor (#9152) --- .../google/cloud/error_reporting/_gapic.py | 4 +++- .../google/cloud/error_reporting/_logging.py | 20 +++++++++++++++++-- .../google/cloud/error_reporting/client.py | 13 +++++++++++- .../tests/unit/test__gapic.py | 8 ++++++-- .../tests/unit/test__logging.py | 15 +++++++++++--- .../tests/unit/test_client.py | 9 ++++++++- 6 files changed, 59 insertions(+), 10 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py index b1925ff6a491..0c6ec9e60a1a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py @@ -29,7 +29,9 @@ def make_report_error_api(client): :returns: An Error Reporting API instance. """ gapic_api = report_errors_service_client.ReportErrorsServiceClient( - credentials=client._credentials, client_info=client._client_info + credentials=client._credentials, + client_info=client._client_info, + client_options=client._client_options, ) return _ErrorReportingGapicApi(gapic_api, client.project) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index 5eaa4693c96f..29e17b6eb5a9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -54,11 +54,27 @@ class _ErrorReportingLoggingAPI(object): requests. If ``None``, then default info will be used. Generally, you only need to set this if you're developing your own library or partner tool. + + :type client_options: :class:`~google.api_core.client_options.ClientOptions` + or :class:`dict` + :param client_options: (Optional) Client options used to set user options + on the client. API Endpoint should be set through client_options. """ - def __init__(self, project, credentials=None, _http=None, client_info=None): + def __init__( + self, + project, + credentials=None, + _http=None, + client_info=None, + client_options=None, + ): self.logging_client = google.cloud.logging.client.Client( - project, credentials, _http=_http, client_info=client_info + project, + credentials, + _http=_http, + client_info=client_info, + client_options=client_options, ) def report_error_event(self, error_report): diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 4fdae4c69e25..629455198dd6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -143,6 +143,11 @@ class Client(ClientWithProject): you only need to set this if you're developing your own library or partner tool. + :type client_options: :class:`~google.api_core.client_options.ClientOptions` + or :class:`dict` + :param client_options: (Optional) Client options used to set user options + on the client. API Endpoint should be set through client_options. + :raises: :class:`ValueError` if the project is neither passed in nor set in the environment. """ @@ -158,6 +163,7 @@ def __init__( service=None, version=None, client_info=_CLIENT_INFO, + client_options=None, _use_grpc=None, ): super(Client, self).__init__( @@ -168,6 +174,7 @@ def __init__( self.service = service if service else self.DEFAULT_SERVICE self.version = version self._client_info = client_info + self._client_options = client_options if _use_grpc is None: self._use_grpc = _USE_GRPC @@ -195,7 +202,11 @@ def report_errors_api(self): self._report_errors_api = make_report_error_api(self) else: self._report_errors_api = _ErrorReportingLoggingAPI( - self.project, self._credentials, self._http, self._client_info + self.project, + self._credentials, + self._http, + self._client_info, + self._client_options, ) return self._report_errors_api diff --git a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py index 836f46b82495..00940f466df0 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py @@ -25,7 +25,9 @@ def _call_fut(client): return make_report_error_api(client) def test_make_report_error_api(self): - client = mock.Mock(spec=["project", "_credentials", "_client_info"]) + client = mock.Mock( + spec=["project", "_credentials", "_client_info", "_client_options"] + ) # Call the function being tested. patch = mock.patch( @@ -41,7 +43,9 @@ def test_make_report_error_api(self): self.assertIs(report_error_client._project, client.project) self.assertIs(report_error_client._gapic_api, patched.return_value) patched.assert_called_once_with( - credentials=client._credentials, client_info=client._client_info + credentials=client._credentials, + client_info=client._client_info, + client_options=client._client_options, ) diff --git a/packages/google-cloud-error-reporting/tests/unit/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py index e2b0638b986e..726eaabfec75 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__logging.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__logging.py @@ -40,7 +40,7 @@ def test_ctor_defaults(self, mocked_cls): self.assertIs(logging_api.logging_client, mocked_cls.return_value) mocked_cls.assert_called_once_with( - self.PROJECT, credentials, _http=None, client_info=None + self.PROJECT, credentials, _http=None, client_info=None, client_options=None ) @mock.patch("google.cloud.logging.client.Client") @@ -48,14 +48,23 @@ def test_ctor_explicit(self, mocked_cls): credentials = _make_credentials() http = mock.Mock() client_info = mock.Mock() + client_options = mock.Mock() logging_api = self._make_one( - self.PROJECT, credentials, _http=http, client_info=client_info + self.PROJECT, + credentials, + _http=http, + client_info=client_info, + client_options=client_options, ) self.assertIs(logging_api.logging_client, mocked_cls.return_value) mocked_cls.assert_called_once_with( - self.PROJECT, credentials, _http=http, client_info=client_info + self.PROJECT, + credentials, + _http=http, + client_info=client_info, + client_options=client_options, ) @mock.patch("google.cloud.logging.client.Client") diff --git a/packages/google-cloud-error-reporting/tests/unit/test_client.py b/packages/google-cloud-error-reporting/tests/unit/test_client.py index 5e4dc925a65f..3a7290e8aa96 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test_client.py +++ b/packages/google-cloud-error-reporting/tests/unit/test_client.py @@ -67,16 +67,19 @@ def test_ctor_defaults(self, default_mock): def test_ctor_explicit(self): credentials = _make_credentials() client_info = mock.Mock() + client_options = mock.Mock() client = self._make_one( project=self.PROJECT, credentials=credentials, service=self.SERVICE, version=self.VERSION, client_info=client_info, + client_options=client_options, ) self.assertEqual(client.service, self.SERVICE) self.assertEqual(client.version, self.VERSION) self.assertIs(client._client_info, client_info) + self.assertIs(client._client_options, client_options) def test_report_errors_api_already(self): credentials = _make_credentials() @@ -87,11 +90,13 @@ def test_report_errors_api_already(self): def test_report_errors_api_wo_grpc(self): credentials = _make_credentials() client_info = mock.Mock() + client_options = mock.Mock() http = mock.Mock() client = self._make_one( project=self.PROJECT, credentials=credentials, client_info=client_info, + client_options=client_options, _http=http, _use_grpc=False, ) @@ -103,7 +108,9 @@ def test_report_errors_api_wo_grpc(self): api = client.report_errors_api self.assertIs(api, patched.return_value) - patched.assert_called_once_with(self.PROJECT, credentials, http, client_info) + patched.assert_called_once_with( + self.PROJECT, credentials, http, client_info, client_options + ) def test_report_errors_api_w_grpc(self): credentials = _make_credentials() From 2ae4960f68a5b076b8996b458db28626f9f0e730 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Fri, 4 Oct 2019 17:45:35 -0400 Subject: [PATCH 155/467] tests(error_reporting): increase 'max_tries'. (#9396) Closes #6987 --- .../google-cloud-error-reporting/tests/system/test_system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/tests/system/test_system.py b/packages/google-cloud-error-reporting/tests/system/test_system.py index b72223e2ae0a..cf454aecdbd1 100644 --- a/packages/google-cloud-error-reporting/tests/system/test_system.py +++ b/packages/google-cloud-error-reporting/tests/system/test_system.py @@ -117,7 +117,7 @@ def test_report_exception(self): is_one = functools.partial(operator.eq, 1) is_one.__name__ = "is_one" # partial() has no name. - retry = RetryResult(is_one, max_tries=6) + retry = RetryResult(is_one, max_tries=8) wrapped_get_count = retry(_get_error_count) error_count = wrapped_get_count(class_name, Config.CLIENT) From f80b2792d961c87c4fe6dd3a07cd3924bfdb39eb Mon Sep 17 00:00:00 2001 From: Leonid Emar-Kar <46078689+Emar-Kar@users.noreply.github.com> Date: Mon, 14 Oct 2019 13:43:59 -0700 Subject: [PATCH 156/467] docs: remove references to the old authentication credentials (#9456) --- .../google/cloud/error_reporting/_logging.py | 10 +++++----- .../google/cloud/error_reporting/client.py | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index 29e17b6eb5a9..5832cc7e2d24 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -30,12 +30,12 @@ class _ErrorReportingLoggingAPI(object): passed falls back to the default inferred from the environment. - :type credentials: :class:`oauth2client.client.OAuth2Credentials` or + :type credentials: :class:`google.auth.credentials.Credentials` or :class:`NoneType` - :param credentials: The OAuth2 Credentials to use for the connection - owned by this client. If not passed (and if no - ``_http`` object is passed), falls back to the default - inferred from the environment. + :param credentials: The authorization credentials to attach to requests. + These credentials identify this application to the service. + If none are specified, the client will attempt to ascertain + the credentials from the environment. :type _http: :class:`~requests.Session` :param _http: (Optional) HTTP object to make requests. Can be any object diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index 629455198dd6..c4cb816ead75 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -96,12 +96,12 @@ class Client(ClientWithProject): passed falls back to the default inferred from the environment. - :type credentials: :class:`oauth2client.client.OAuth2Credentials` or + :type credentials: :class:`google.auth.credentials.Credentials` or :class:`NoneType` - :param credentials: The OAuth2 Credentials to use for the connection - owned by this client. If not passed (and if no - ``_http`` object is passed), falls back to the default - inferred from the environment. + :param credentials: The authorization credentials to attach to requests. + These credentials identify this application to the service. + If none are specified, the client will attempt to ascertain + the credentials from the environment. :type _http: :class:`~requests.Session` :param _http: (Optional) HTTP object to make requests. Can be any object From 885195d2b11c3b4362417e2a03372878eda3bebf Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Wed, 16 Oct 2019 13:47:19 -0400 Subject: [PATCH 157/467] chore(error_reporting): pin 'google-cloud-logging >= 1.14.0, < 2.0.0dev (#9476) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index da91c2707903..29422204bcda 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -28,7 +28,7 @@ # 'Development Status :: 4 - Beta' # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 3 - Alpha" -dependencies = ["google-cloud-logging>=1.11.0, <2.0dev"] +dependencies = ["google-cloud-logging>=1.14.0, <2.0dev"] extras = {} From b54739f1f879a258b7f6083c1e13dd5188105b34 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Tue, 22 Oct 2019 15:36:34 -0400 Subject: [PATCH 158/467] chore(error_reporting): release 0.33.0 (#9515) --- .../google-cloud-error-reporting/CHANGELOG.md | 18 ++++++++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 81c20812af9f..aa3924d1f596 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,24 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## 0.33.0 + +10-22-2019 12:10 PDT + +### New Features +- Add `client_options` to constructor ([#9152](https://github.com/googleapis/google-cloud-python/pull/9152)) + +### Dependencies +- Pin `google-cloud-logging >= 1.14.0, < 2.0.0dev`. ([#9476](https://github.com/googleapis/google-cloud-python/pull/9476)) + +### Documentation +- Remove references to the old authentication credentials. ([#9456](https://github.com/googleapis/google-cloud-python/pull/9456)) +- Fix intersphinx reference to requests. ([#9294](https://github.com/googleapis/google-cloud-python/pull/9294)) +- Remove CI for `gh-pages`, use googleapis.dev for `api_core` refs. ([#9085](https://github.com/googleapis/google-cloud-python/pull/9085)) + +### Internal / Testing Changes +- Harden `test_report_exception` systest by increasing `max_tries`. ([#9396](https://github.com/googleapis/google-cloud-python/pull/9396)) + ## 0.32.1 08-23-2019 10:12 PDT diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 29422204bcda..80a0350ad79a 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Stackdriver Error Reporting API client library" -version = "0.32.1" +version = "0.33.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From bb7863ca45f9f6f222bc1d857c319d302406568f Mon Sep 17 00:00:00 2001 From: Sebastien Williams-Wynn Date: Wed, 23 Oct 2019 17:43:12 +0100 Subject: [PATCH 159/467] docs(datastore): remove duplication of word 'API' (#9524) --- packages/google-cloud-error-reporting/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 39561dd92cb3..bce80fd49e14 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -85,7 +85,7 @@ Windows Next Steps ~~~~~~~~~~ -- Read the `Client Library Documentation`_ for Google Cloud Datastore API +- Read the `Client Library Documentation`_ for Google Cloud Datastore API to see other available methods on the client. - Read the `Product documentation`_ to learn more about the product and see How-to Guides. From cfdafc9c7afc1ff28a3f0962b1381a0a12bf0b94 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Mon, 11 Nov 2019 15:15:32 -0800 Subject: [PATCH 160/467] docs: add python 2 sunset banner to documentation (#9036) --- .../docs/_static/custom.css | 4 ++ .../docs/_templates/layout.html | 49 +++++++++++++++++++ .../google-cloud-error-reporting/docs/conf.py | 2 +- 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 packages/google-cloud-error-reporting/docs/_static/custom.css create mode 100644 packages/google-cloud-error-reporting/docs/_templates/layout.html diff --git a/packages/google-cloud-error-reporting/docs/_static/custom.css b/packages/google-cloud-error-reporting/docs/_static/custom.css new file mode 100644 index 000000000000..9a6f9f8ddc3a --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/_static/custom.css @@ -0,0 +1,4 @@ +div#python2-eol { + border-color: red; + border-width: medium; +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/_templates/layout.html b/packages/google-cloud-error-reporting/docs/_templates/layout.html new file mode 100644 index 000000000000..de457b2c2767 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/_templates/layout.html @@ -0,0 +1,49 @@ +{% extends "!layout.html" %} +{%- block content %} +{%- if theme_fixed_sidebar|lower == 'true' %} +
+ {{ sidebar() }} + {%- block document %} +
+ {%- if render_sidebar %} +
+ {%- endif %} + + {%- block relbar_top %} + {%- if theme_show_relbar_top|tobool %} + + {%- endif %} + {% endblock %} + +
+
+ On January 1, 2020 this library will no longer support Python 2 on the latest released version. + Previously released library versions will continue to be available. For more information please + visit Python 2 support on Google Cloud. +
+ {% block body %} {% endblock %} +
+ + {%- block relbar_bottom %} + {%- if theme_show_relbar_bottom|tobool %} + + {%- endif %} + {% endblock %} + + {%- if render_sidebar %} +
+ {%- endif %} +
+ {%- endblock %} +
+
+{%- else %} +{{ super() }} +{%- endif %} +{%- endblock %} diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index db959a13ca88..4a2abf0f5bc1 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -162,7 +162,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = [] +html_static_path = ["_static"] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied From 41ce75fc774fc7d94d2f56b831e0f59430f09882 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 13 Nov 2019 12:33:14 -0800 Subject: [PATCH 161/467] chore(error_reporting): change spacing in docs templates (via synth) (#9749) --- .../docs/_static/custom.css | 2 +- .../docs/_templates/layout.html | 1 + packages/google-cloud-error-reporting/synth.metadata | 12 ++++++------ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/docs/_static/custom.css b/packages/google-cloud-error-reporting/docs/_static/custom.css index 9a6f9f8ddc3a..0abaf229fce3 100644 --- a/packages/google-cloud-error-reporting/docs/_static/custom.css +++ b/packages/google-cloud-error-reporting/docs/_static/custom.css @@ -1,4 +1,4 @@ div#python2-eol { border-color: red; border-width: medium; -} \ No newline at end of file +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/_templates/layout.html b/packages/google-cloud-error-reporting/docs/_templates/layout.html index de457b2c2767..228529efe2d2 100644 --- a/packages/google-cloud-error-reporting/docs/_templates/layout.html +++ b/packages/google-cloud-error-reporting/docs/_templates/layout.html @@ -1,3 +1,4 @@ + {% extends "!layout.html" %} {%- block content %} {%- if theme_fixed_sidebar|lower == 'true' %} diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index ab416d10e320..f02edcf46dae 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,26 +1,26 @@ { - "updateTime": "2019-08-06T12:24:11.470016Z", + "updateTime": "2019-11-12T13:27:15.140489Z", "sources": [ { "generator": { "name": "artman", - "version": "0.32.1", - "dockerImage": "googleapis/artman@sha256:a684d40ba9a4e15946f5f2ca6b4bd9fe301192f522e9de4fff622118775f309b" + "version": "0.41.1", + "dockerImage": "googleapis/artman@sha256:545c758c76c3f779037aa259023ec3d1ef2d57d2c8cd00a222cb187d63ceac5e" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "e699b0cba64ffddfae39633417180f1f65875896", - "internalRef": "261759677" + "sha": "f69562be0608904932bdcfbc5ad8b9a22d9dceb8", + "internalRef": "279774957" } }, { "template": { "name": "python_library", "origin": "synthtool.gcp", - "version": "2019.5.2" + "version": "2019.10.17" } } ], From f845c0cdc22d2af389842aac1ec4400c9ce18950 Mon Sep 17 00:00:00 2001 From: Peter Lamut Date: Fri, 7 Feb 2020 00:29:27 +0000 Subject: [PATCH 162/467] chore: add split repo templates (#1) --- .../.github/CONTRIBUTING.md | 28 ++ .../.github/ISSUE_TEMPLATE/bug_report.md | 44 +++ .../.github/ISSUE_TEMPLATE/feature_request.md | 18 ++ .../.github/ISSUE_TEMPLATE/support_request.md | 7 + .../.github/PULL_REQUEST_TEMPLATE.md | 7 + .../.github/release-please.yml | 1 + .../google-cloud-error-reporting/.gitignore | 58 ++++ .../.kokoro/build.sh | 39 +++ .../.kokoro/continuous/common.cfg | 27 ++ .../.kokoro/continuous/continuous.cfg | 1 + .../.kokoro/docs/common.cfg | 48 +++ .../.kokoro/docs/docs.cfg | 1 + .../.kokoro/presubmit/common.cfg | 27 ++ .../.kokoro/presubmit/presubmit.cfg | 1 + .../.kokoro/publish-docs.sh | 57 ++++ .../.kokoro/release.sh | 34 +++ .../.kokoro/release/common.cfg | 64 ++++ .../.kokoro/release/release.cfg | 1 + .../.kokoro/trampoline.sh | 23 ++ .../.repo-metadata.json | 2 +- .../CODE_OF_CONDUCT.md | 44 +++ .../CONTRIBUTING.rst | 279 ++++++++++++++++++ packages/google-cloud-error-reporting/LICENSE | 7 +- .../google-cloud-error-reporting/MANIFEST.in | 1 + .../docs/README.rst | 2 +- .../google-cloud-error-reporting/docs/conf.py | 24 +- .../google-cloud-error-reporting/noxfile.py | 15 +- .../renovate.json | 5 + .../google-cloud-error-reporting/setup.py | 2 +- .../synth.metadata | 12 +- .../google-cloud-error-reporting/synth.py | 4 +- .../test_utils/credentials.json.enc | 49 +++ .../scripts/circleci/get_tagged_package.py | 64 ++++ .../scripts/circleci/twine_upload.sh | 36 +++ .../test_utils/scripts/get_target_packages.py | 268 +++++++++++++++++ .../scripts/get_target_packages_kokoro.py | 98 ++++++ .../test_utils/scripts/run_emulator.py | 199 +++++++++++++ .../test_utils/scripts/update_docs.sh | 93 ++++++ .../test_utils/setup.py | 64 ++++ .../test_utils/test_utils/__init__.py | 0 .../test_utils/test_utils/imports.py | 38 +++ .../test_utils/test_utils/retry.py | 207 +++++++++++++ .../test_utils/test_utils/system.py | 81 +++++ .../test_utils/test_utils/vpcsc_config.py | 118 ++++++++ 44 files changed, 2164 insertions(+), 34 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.github/CONTRIBUTING.md create mode 100644 packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/support_request.md create mode 100644 packages/google-cloud-error-reporting/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 packages/google-cloud-error-reporting/.github/release-please.yml create mode 100644 packages/google-cloud-error-reporting/.gitignore create mode 100755 packages/google-cloud-error-reporting/.kokoro/build.sh create mode 100644 packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/continuous/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/docs/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/docs/docs.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/presubmit/presubmit.cfg create mode 100755 packages/google-cloud-error-reporting/.kokoro/publish-docs.sh create mode 100755 packages/google-cloud-error-reporting/.kokoro/release.sh create mode 100644 packages/google-cloud-error-reporting/.kokoro/release/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/release/release.cfg create mode 100755 packages/google-cloud-error-reporting/.kokoro/trampoline.sh create mode 100644 packages/google-cloud-error-reporting/CODE_OF_CONDUCT.md create mode 100644 packages/google-cloud-error-reporting/CONTRIBUTING.rst create mode 100644 packages/google-cloud-error-reporting/renovate.json create mode 100644 packages/google-cloud-error-reporting/test_utils/credentials.json.enc create mode 100644 packages/google-cloud-error-reporting/test_utils/scripts/circleci/get_tagged_package.py create mode 100755 packages/google-cloud-error-reporting/test_utils/scripts/circleci/twine_upload.sh create mode 100644 packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages.py create mode 100644 packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages_kokoro.py create mode 100644 packages/google-cloud-error-reporting/test_utils/scripts/run_emulator.py create mode 100755 packages/google-cloud-error-reporting/test_utils/scripts/update_docs.sh create mode 100644 packages/google-cloud-error-reporting/test_utils/setup.py create mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/__init__.py create mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/imports.py create mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/retry.py create mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/system.py create mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/vpcsc_config.py diff --git a/packages/google-cloud-error-reporting/.github/CONTRIBUTING.md b/packages/google-cloud-error-reporting/.github/CONTRIBUTING.md new file mode 100644 index 000000000000..939e5341e74d --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/CONTRIBUTING.md @@ -0,0 +1,28 @@ +# How to Contribute + +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement. You (or your employer) retain the copyright to your contribution; +this simply gives us permission to use and redistribute your contributions as +part of the project. Head over to to see +your current agreements on file or to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Community Guidelines + +This project follows [Google's Open Source Community +Guidelines](https://opensource.google.com/conduct/). diff --git a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000000..df85cb2b1cbe --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,44 @@ +--- +name: Bug report +about: Create a report to help us improve + +--- + +Thanks for stopping by to let us know something could be better! + +**PLEASE READ**: If you have a support contract with Google, please create an issue in the [support console](https://cloud.google.com/support/) instead of filing on GitHub. This will ensure a timely response. + +Please run down the following list and make sure you've tried the usual "quick fixes": + + - Search the issues already opened: https://github.com/googleapis/python-error-reporting/issues + - Search the issues on our "catch-all" repository: https://github.com/googleapis/google-cloud-python + - Search StackOverflow: http://stackoverflow.com/questions/tagged/google-cloud-platform+python + +If you are still having issues, please be sure to include as much information as possible: + +#### Environment details + + - OS type and version: + - Python version: `python --version` + - pip version: `pip --version` + - `google-cloud-error-reporting` version: `pip show google-cloud-error-reporting` + +#### Steps to reproduce + + 1. ? + 2. ? + +#### Code example + +```python +# example +``` + +#### Stack trace +``` +# example +``` + +Making sure to follow these steps will guarantee the quickest resolution possible. + +Thanks! diff --git a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/feature_request.md b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000000..6365857f33c6 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,18 @@ +--- +name: Feature request +about: Suggest an idea for this library + +--- + +Thanks for stopping by to let us know something could be better! + +**PLEASE READ**: If you have a support contract with Google, please create an issue in the [support console](https://cloud.google.com/support/) instead of filing on GitHub. This will ensure a timely response. + + **Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + **Describe the solution you'd like** +A clear and concise description of what you want to happen. + **Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + **Additional context** +Add any other context or screenshots about the feature request here. diff --git a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/support_request.md b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/support_request.md new file mode 100644 index 000000000000..995869032125 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/support_request.md @@ -0,0 +1,7 @@ +--- +name: Support request +about: If you have a support contract with Google, please create an issue in the Google Cloud Support console. + +--- + +**PLEASE READ**: If you have a support contract with Google, please create an issue in the [support console](https://cloud.google.com/support/) instead of filing on GitHub. This will ensure a timely response. diff --git a/packages/google-cloud-error-reporting/.github/PULL_REQUEST_TEMPLATE.md b/packages/google-cloud-error-reporting/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000000..5884ea526e9a --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,7 @@ +Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: +- [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-error-reporting/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea +- [ ] Ensure the tests and linter pass +- [ ] Code coverage does not decrease (if any source code was changed) +- [ ] Appropriate docs were updated (if necessary) + +Fixes # 🦕 diff --git a/packages/google-cloud-error-reporting/.github/release-please.yml b/packages/google-cloud-error-reporting/.github/release-please.yml new file mode 100644 index 000000000000..4507ad0598a5 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/release-please.yml @@ -0,0 +1 @@ +releaseType: python diff --git a/packages/google-cloud-error-reporting/.gitignore b/packages/google-cloud-error-reporting/.gitignore new file mode 100644 index 000000000000..3fb06e09ce74 --- /dev/null +++ b/packages/google-cloud-error-reporting/.gitignore @@ -0,0 +1,58 @@ +*.py[cod] +*.sw[op] + +# C extensions +*.so + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg +lib +lib64 +__pycache__ + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.nox +.cache +.pytest_cache + + +# Mac +.DS_Store + +# JetBrains +.idea + +# VS Code +.vscode + +# emacs +*~ + +# Built documentation +docs/_build +bigquery/docs/generated + +# Virtual environment +env/ +coverage.xml + +# System test environment variables. +system_tests/local_test_setup + +# Make sure a generated file isn't accidentally committed. +pylintrc +pylintrc.test \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh new file mode 100755 index 000000000000..8d62ff18db09 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Copyright 2018 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 +# +# https://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. + +set -eo pipefail + +cd github/python-error-reporting + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +# Debug: show build environment +env | grep KOKORO + +# Setup service account credentials. +export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/service-account.json + +# Setup project id. +export PROJECT_ID=$(cat "${KOKORO_GFILE_DIR}/project-id.json") + +# Remove old nox +python3.6 -m pip uninstall --yes --quiet nox-automation + +# Install nox +python3.6 -m pip install --upgrade --quiet nox +python3.6 -m nox --version + +python3.6 -m nox diff --git a/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg b/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg new file mode 100644 index 000000000000..ccbc23c7673f --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg @@ -0,0 +1,27 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Download resources for system tests (service account key, etc.) +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/google-cloud-python" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" +} +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/build.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/continuous/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/continuous/continuous.cfg new file mode 100644 index 000000000000..8f43917d92fe --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/continuous/continuous.cfg @@ -0,0 +1 @@ +# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg new file mode 100644 index 000000000000..7cdc05f8bfeb --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg @@ -0,0 +1,48 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" +} +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/publish-docs.sh" +} + +env_vars: { + key: "STAGING_BUCKET" + value: "docs-staging" +} + +# Fetch the token needed for reporting release status to GitHub +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "yoshi-automation-github-key" + } + } +} + +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "docuploader_service_account" + } + } +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/docs.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/docs.cfg new file mode 100644 index 000000000000..8f43917d92fe --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/docs/docs.cfg @@ -0,0 +1 @@ +# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg b/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg new file mode 100644 index 000000000000..ccbc23c7673f --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg @@ -0,0 +1,27 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Download resources for system tests (service account key, etc.) +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/google-cloud-python" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" +} +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/build.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/presubmit/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/presubmit/presubmit.cfg new file mode 100644 index 000000000000..8f43917d92fe --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/presubmit/presubmit.cfg @@ -0,0 +1 @@ +# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh new file mode 100755 index 000000000000..465d235bc43a --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# Copyright 2020 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 +# +# https://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. + +#!/bin/bash + +set -eo pipefail + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +cd github/python-error-reporting + +# Remove old nox +python3.6 -m pip uninstall --yes --quiet nox-automation + +# Install nox +python3.6 -m pip install --upgrade --quiet nox +python3.6 -m nox --version + +# build docs +nox -s docs + +python3 -m pip install gcp-docuploader + +# install a json parser +sudo apt-get update +sudo apt-get -y install software-properties-common +sudo add-apt-repository universe +sudo apt-get update +sudo apt-get -y install jq + +# create metadata +python3 -m docuploader create-metadata \ + --name=$(jq --raw-output '.name // empty' .repo-metadata.json) \ + --version=$(python3 setup.py --version) \ + --language=$(jq --raw-output '.language // empty' .repo-metadata.json) \ + --distribution-name=$(python3 setup.py --name) \ + --product-page=$(jq --raw-output '.product_documentation // empty' .repo-metadata.json) \ + --github-repository=$(jq --raw-output '.repo // empty' .repo-metadata.json) \ + --issue-tracker=$(jq --raw-output '.issue_tracker // empty' .repo-metadata.json) + +cat docs.metadata + +# upload docs +python3 -m docuploader upload docs/_build/html --metadata-file docs.metadata --staging-bucket docs-staging diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh new file mode 100755 index 000000000000..7264e127e43e --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Copyright 2020 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 +# +# https://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. + +#!/bin/bash + +set -eo pipefail + +# Start the releasetool reporter +python3 -m pip install gcp-releasetool +python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script + +# Ensure that we have the latest versions of Twine, Wheel, and Setuptools. +python3 -m pip install --upgrade twine wheel setuptools + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +# Move into the package, build the distribution and upload. +TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google_cloud_pypi_password") +cd github/python-error-reporting +python3 setup.py sdist bdist_wheel +twine upload --username gcloudpypi --password "${TWINE_PASSWORD}" dist/* diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg new file mode 100644 index 000000000000..6d10664eed90 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg @@ -0,0 +1,64 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" +} +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/release.sh" +} + +# Fetch the token needed for reporting release status to GitHub +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "yoshi-automation-github-key" + } + } +} + +# Fetch PyPI password +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "google_cloud_pypi_password" + } + } +} + +# Fetch magictoken to use with Magic Github Proxy +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "releasetool-magictoken" + } + } +} + +# Fetch api key to use with Magic Github Proxy +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "magic-github-proxy-api-key" + } + } +} diff --git a/packages/google-cloud-error-reporting/.kokoro/release/release.cfg b/packages/google-cloud-error-reporting/.kokoro/release/release.cfg new file mode 100644 index 000000000000..8f43917d92fe --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/release/release.cfg @@ -0,0 +1 @@ +# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh new file mode 100755 index 000000000000..e8c4251f3ed4 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Copyright 2017 Google Inc. +# +# 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. + +set -eo pipefail + +python3 "${KOKORO_GFILE_DIR}/trampoline_v1.py" || ret_code=$? + +chmod +x ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh +${KOKORO_GFILE_DIR}/trampoline_cleanup.sh || true + +exit ${ret_code} diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index 291301df028c..52772e8cdd36 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -6,7 +6,7 @@ "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", "release_level": "alpha", "language": "python", - "repo": "googleapis/google-cloud-python", + "repo": "googleapis/python-error-reporting", "distribution_name": "google-cloud-error-reporting", "api_id": "clouderrorreporting.googleapis.com", "requires_billing": false diff --git a/packages/google-cloud-error-reporting/CODE_OF_CONDUCT.md b/packages/google-cloud-error-reporting/CODE_OF_CONDUCT.md new file mode 100644 index 000000000000..b3d1f6029849 --- /dev/null +++ b/packages/google-cloud-error-reporting/CODE_OF_CONDUCT.md @@ -0,0 +1,44 @@ + +# Contributor Code of Conduct + +As contributors and maintainers of this project, +and in the interest of fostering an open and welcoming community, +we pledge to respect all people who contribute through reporting issues, +posting feature requests, updating documentation, +submitting pull requests or patches, and other activities. + +We are committed to making participation in this project +a harassment-free experience for everyone, +regardless of level of experience, gender, gender identity and expression, +sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, +such as physical or electronic +addresses, without explicit permission +* Other unethical or unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct. +By adopting this Code of Conduct, +project maintainers commit themselves to fairly and consistently +applying these principles to every aspect of managing this project. +Project maintainers who do not follow or enforce the Code of Conduct +may be permanently removed from the project team. + +This code of conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior +may be reported by opening an issue +or contacting one or more of the project maintainers. + +This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, +available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst new file mode 100644 index 000000000000..0e1b9ed7feaf --- /dev/null +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -0,0 +1,279 @@ +.. Generated by synthtool. DO NOT EDIT! +############ +Contributing +############ + +#. **Please sign one of the contributor license agreements below.** +#. Fork the repo, develop and test your code changes, add docs. +#. Make sure that your commit messages clearly describe the changes. +#. Send a pull request. (Please Read: `Faster Pull Request Reviews`_) + +.. _Faster Pull Request Reviews: https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md#best-practices-for-faster-reviews + +.. contents:: Here are some guidelines for hacking on the Google Cloud Client libraries. + +*************** +Adding Features +*************** + +In order to add a feature: + +- The feature must be documented in both the API and narrative + documentation. + +- The feature must work fully on the following CPython versions: 2.7, + 3.5, 3.6, and 3.7 on both UNIX and Windows. + +- The feature must not add unnecessary dependencies (where + "unnecessary" is of course subjective, but new dependencies should + be discussed). + +**************************** +Using a Development Checkout +**************************** + +You'll have to create a development environment using a Git checkout: + +- While logged into your GitHub account, navigate to the + ``python-error-reporting`` `repo`_ on GitHub. + +- Fork and clone the ``python-error-reporting`` repository to your GitHub account by + clicking the "Fork" button. + +- Clone your fork of ``python-error-reporting`` from your GitHub account to your local + computer, substituting your account username and specifying the destination + as ``hack-on-python-error-reporting``. E.g.:: + + $ cd ${HOME} + $ git clone git@github.com:USERNAME/python-error-reporting.git hack-on-python-error-reporting + $ cd hack-on-python-error-reporting + # Configure remotes such that you can pull changes from the googleapis/python-error-reporting + # repository into your local repository. + $ git remote add upstream git@github.com:googleapis/python-error-reporting.git + # fetch and merge changes from upstream into master + $ git fetch upstream + $ git merge upstream/master + +Now your local repo is set up such that you will push changes to your GitHub +repo, from which you can submit a pull request. + +To work on the codebase and run the tests, we recommend using ``nox``, +but you can also use a ``virtualenv`` of your own creation. + +.. _repo: https://github.com/googleapis/python-error-reporting + +Using ``nox`` +============= + +We use `nox `__ to instrument our tests. + +- To test your changes, run unit tests with ``nox``:: + + $ nox -s unit-2.7 + $ nox -s unit-3.7 + $ ... + + .. note:: + + The unit tests and system tests are described in the + ``noxfile.py`` files in each directory. + +.. nox: https://pypi.org/project/nox/ + +Note on Editable Installs / Develop Mode +======================================== + +- As mentioned previously, using ``setuptools`` in `develop mode`_ + or a ``pip`` `editable install`_ is not possible with this + library. This is because this library uses `namespace packages`_. + For context see `Issue #2316`_ and the relevant `PyPA issue`_. + + Since ``editable`` / ``develop`` mode can't be used, packages + need to be installed directly. Hence your changes to the source + tree don't get incorporated into the **already installed** + package. + +.. _namespace packages: https://www.python.org/dev/peps/pep-0420/ +.. _Issue #2316: https://github.com/GoogleCloudPlatform/google-cloud-python/issues/2316 +.. _PyPA issue: https://github.com/pypa/packaging-problems/issues/12 +.. _develop mode: https://setuptools.readthedocs.io/en/latest/setuptools.html#development-mode +.. _editable install: https://pip.pypa.io/en/stable/reference/pip_install/#editable-installs + +***************************************** +I'm getting weird errors... Can you help? +***************************************** + +If the error mentions ``Python.h`` not being found, +install ``python-dev`` and try again. +On Debian/Ubuntu:: + + $ sudo apt-get install python-dev + +************ +Coding Style +************ + +- PEP8 compliance, with exceptions defined in the linter configuration. + If you have ``nox`` installed, you can test that you have not introduced + any non-compliant code via:: + + $ nox -s lint + +- In order to make ``nox -s lint`` run faster, you can set some environment + variables:: + + export GOOGLE_CLOUD_TESTING_REMOTE="upstream" + export GOOGLE_CLOUD_TESTING_BRANCH="master" + + By doing this, you are specifying the location of the most up-to-date + version of ``python-error-reporting``. The the suggested remote name ``upstream`` + should point to the official ``googleapis`` checkout and the + the branch should be the main branch on that remote (``master``). + +Exceptions to PEP8: + +- Many unit tests use a helper method, ``_call_fut`` ("FUT" is short for + "Function-Under-Test"), which is PEP8-incompliant, but more readable. + Some also use a local variable, ``MUT`` (short for "Module-Under-Test"). + +******************** +Running System Tests +******************** + +- To run system tests, you can execute:: + + $ nox -s system-3.7 + $ nox -s system-2.7 + + .. note:: + + System tests are only configured to run under Python 2.7 and + Python 3.7. For expediency, we do not run them in older versions + of Python 3. + + This alone will not run the tests. You'll need to change some local + auth settings and change some configuration in your project to + run all the tests. + +- System tests will be run against an actual project and + so you'll need to provide some environment variables to facilitate + authentication to your project: + + - ``GOOGLE_APPLICATION_CREDENTIALS``: The path to a JSON key file; + Such a file can be downloaded directly from the developer's console by clicking + "Generate new JSON key". See private key + `docs `__ + for more details. + +- Once you have downloaded your json keys, set the environment variable + ``GOOGLE_APPLICATION_CREDENTIALS`` to the absolute path of the json file:: + + $ export GOOGLE_APPLICATION_CREDENTIALS="/Users//path/to/app_credentials.json" + + +************* +Test Coverage +************* + +- The codebase *must* have 100% test statement coverage after each commit. + You can test coverage via ``nox -s cover``. + +****************************************************** +Documentation Coverage and Building HTML Documentation +****************************************************** + +If you fix a bug, and the bug requires an API or behavior modification, all +documentation in this package which references that API or behavior must be +changed to reflect the bug fix, ideally in the same commit that fixes the bug +or adds the feature. + +Build the docs via: + + $ nox -s docs + +******************************************** +Note About ``README`` as it pertains to PyPI +******************************************** + +The `description on PyPI`_ for the project comes directly from the +``README``. Due to the reStructuredText (``rst``) parser used by +PyPI, relative links which will work on GitHub (e.g. ``CONTRIBUTING.rst`` +instead of +``https://github.com/googleapis/python-error-reporting/blob/master/CONTRIBUTING.rst``) +may cause problems creating links or rendering the description. + +.. _description on PyPI: https://pypi.org/project/google-cloud-error-reporting + + +************************* +Supported Python Versions +************************* + +We support: + +- `Python 3.5`_ +- `Python 3.6`_ +- `Python 3.7`_ + +.. _Python 3.5: https://docs.python.org/3.5/ +.. _Python 3.6: https://docs.python.org/3.6/ +.. _Python 3.7: https://docs.python.org/3.7/ + + +Supported versions can be found in our ``noxfile.py`` `config`_. + +.. _config: https://github.com/googleapis/python-error-reporting/blob/master/noxfile.py + +We explicitly decided not to support `Python 2.5`_ due to `decreased usage`_ +and lack of continuous integration `support`_. + +.. _Python 2.5: https://docs.python.org/2.5/ +.. _decreased usage: https://caremad.io/2013/10/a-look-at-pypi-downloads/ +.. _support: https://blog.travis-ci.com/2013-11-18-upcoming-build-environment-updates/ + +We have `dropped 2.6`_ as a supported version as well since Python 2.6 is no +longer supported by the core development team. + +Python 2.7 support is deprecated. All code changes should maintain Python 2.7 compatibility until January 1, 2020. + +We also explicitly decided to support Python 3 beginning with version +3.5. Reasons for this include: + +- Encouraging use of newest versions of Python 3 +- Taking the lead of `prominent`_ open-source `projects`_ +- `Unicode literal support`_ which allows for a cleaner codebase that + works in both Python 2 and Python 3 + +.. _prominent: https://docs.djangoproject.com/en/1.9/faq/install/#what-python-version-can-i-use-with-django +.. _projects: http://flask.pocoo.org/docs/0.10/python3/ +.. _Unicode literal support: https://www.python.org/dev/peps/pep-0414/ +.. _dropped 2.6: https://github.com/googleapis/google-cloud-python/issues/995 + +********** +Versioning +********** + +This library follows `Semantic Versioning`_. + +.. _Semantic Versioning: http://semver.org/ + +Some packages are currently in major version zero (``0.y.z``), which means that +anything may change at any time and the public API should not be considered +stable. + +****************************** +Contributor License Agreements +****************************** + +Before we can accept your pull requests you'll need to sign a Contributor +License Agreement (CLA): + +- **If you are an individual writing original source code** and **you own the + intellectual property**, then you'll need to sign an + `individual CLA `__. +- **If you work for a company that wants to allow you to contribute your work**, + then you'll need to sign a + `corporate CLA `__. + +You can sign these electronically (just scroll to the bottom). After that, +we'll be able to accept your pull requests. diff --git a/packages/google-cloud-error-reporting/LICENSE b/packages/google-cloud-error-reporting/LICENSE index d64569567334..a8ee855de2aa 100644 --- a/packages/google-cloud-error-reporting/LICENSE +++ b/packages/google-cloud-error-reporting/LICENSE @@ -1,7 +1,6 @@ - - Apache License + Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -193,7 +192,7 @@ 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 + https://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, diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index 9cbf175afe6b..cd011be27a0e 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -1,3 +1,4 @@ +# Generated by synthtool. DO NOT EDIT! include README.rst LICENSE recursive-include google *.json *.proto recursive-include tests * diff --git a/packages/google-cloud-error-reporting/docs/README.rst b/packages/google-cloud-error-reporting/docs/README.rst index 38473f99d57f..89a0106941ff 120000 --- a/packages/google-cloud-error-reporting/docs/README.rst +++ b/packages/google-cloud-error-reporting/docs/README.rst @@ -1 +1 @@ -../../error_reporting/README.rst \ No newline at end of file +../README.rst \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 4a2abf0f5bc1..be56ae5582ef 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -20,7 +20,7 @@ # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath("..")) -__version__ = "0.1.0" +__version__ = "" # -- General configuration ------------------------------------------------ @@ -45,6 +45,7 @@ autodoc_default_flags = ["members"] autosummary_generate = True + # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] @@ -65,7 +66,7 @@ # General information about the project. project = u"google-cloud-error-reporting" -copyright = u"2017, Google" +copyright = u"2019, Google" author = u"Google APIs" # The version info for the project you're documenting, acts as replacement for @@ -121,6 +122,7 @@ # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True + # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for @@ -131,9 +133,9 @@ # further. For a list of options available for each theme, see the # documentation. html_theme_options = { - "description": "Google Cloud Client Libraries for Python", + "description": "Google Cloud Client Libraries for google-cloud-error-reporting", "github_user": "googleapis", - "github_repo": "google-cloud-python", + "github_repo": "python-error-reporting", "github_banner": True, "font_family": "'Roboto', Georgia, sans", "head_font_family": "'Roboto', Georgia, serif", @@ -229,6 +231,7 @@ # -- Options for warnings ------------------------------------------------------ + suppress_warnings = [ # Temporarily suppress this to avoid "more than one target found for # cross-reference" warning, which are intractable for us to avoid while in @@ -284,6 +287,7 @@ # If false, no module index is generated. # latex_domain_indices = True + # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples @@ -301,6 +305,7 @@ # If true, show URL addresses after external links. # man_show_urls = False + # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples @@ -313,7 +318,7 @@ u"google-cloud-error-reporting Documentation", author, "google-cloud-error-reporting", - "GAPIC library for the {metadata.shortName} v1beta1 service", + "google-cloud-error-reporting Library", "APIs", ) ] @@ -330,19 +335,16 @@ # If true, do not generate a @detailmenu in the "Top" node's menu. # texinfo_no_detailmenu = False + # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { "python": ("http://python.readthedocs.org/en/latest/", None), - "gax": ("https://gax-python.readthedocs.org/en/latest/", None), "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), - "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest", None), + "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("https://requests.kennethreitz.org/en/stable/", None), - "fastavro": ("https://fastavro.readthedocs.io/en/stable/", None), - "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), } + # Napoleon settings napoleon_google_docstring = True napoleon_numpy_docstring = True diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index a2eefbb6765f..6dec2c95b606 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -23,7 +23,6 @@ import nox -LOCAL_DEPS = (os.path.join("..", "api_core"), os.path.join("..", "core")) BLACK_VERSION = "black==19.3b0" BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] @@ -38,7 +37,7 @@ def lint(session): Returns a failure if the linters find linting errors or sufficiently serious code quality issues. """ - session.install("flake8", BLACK_VERSION, *LOCAL_DEPS) + session.install("flake8", BLACK_VERSION) session.run("black", "--check", *BLACK_PATHS) session.run("flake8", "google", "tests") @@ -67,14 +66,13 @@ def lint_setup_py(session): def default(session): # Install all test dependencies, then install this package in-place. session.install("mock", "pytest", "pytest-cov") - for local_dep in LOCAL_DEPS: - session.install("-e", local_dep) session.install("-e", ".") # Run py.test against the unit tests. session.run( "py.test", "--quiet", + "--cov=google.cloud.clouderrorreporting", "--cov=google.cloud", "--cov=tests.unit", "--cov-append", @@ -86,7 +84,7 @@ def default(session): ) -@nox.session(python=["2.7", "3.5", "3.6", "3.7"]) +@nox.session(python=["2.7", "3.5", "3.6", "3.7", "3.8"]) def unit(session): """Run the unit test suite.""" default(session) @@ -113,9 +111,8 @@ def system(session): # Install all test dependencies, then install this package into the # virtualenv's dist-packages. session.install("mock", "pytest") - for local_dep in LOCAL_DEPS: - session.install("-e", local_dep) - session.install("-e", "../test_utils/") + + session.install("-e", "test_utils") session.install("-e", ".") # Run py.test against the system tests. @@ -133,7 +130,7 @@ def cover(session): test runs (not system test runs), and then erases coverage data. """ session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") + session.run("coverage", "report", "--show-missing", "--fail-under=98") session.run("coverage", "erase") diff --git a/packages/google-cloud-error-reporting/renovate.json b/packages/google-cloud-error-reporting/renovate.json new file mode 100644 index 000000000000..4fa949311b20 --- /dev/null +++ b/packages/google-cloud-error-reporting/renovate.json @@ -0,0 +1,5 @@ +{ + "extends": [ + "config:base", ":preserveSemverRanges" + ] +} diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 80a0350ad79a..a7bdb4373b78 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -60,7 +60,7 @@ author="Google LLC", author_email="googleapis-packages@google.com", license="Apache 2.0", - url="https://github.com/GoogleCloudPlatform/google-cloud-python", + url="https://github.com/googleapis/python-error-reporting", classifiers=[ release_status, "Intended Audience :: Developers", diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index f02edcf46dae..7b112178dd11 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,24 +1,24 @@ { - "updateTime": "2019-11-12T13:27:15.140489Z", + "updateTime": "2020-02-06T11:35:02.101302Z", "sources": [ { "generator": { "name": "artman", - "version": "0.41.1", - "dockerImage": "googleapis/artman@sha256:545c758c76c3f779037aa259023ec3d1ef2d57d2c8cd00a222cb187d63ceac5e" + "version": "0.44.4", + "dockerImage": "googleapis/artman@sha256:19e945954fc960a4bdfee6cb34695898ab21a8cf0bac063ee39b91f00a1faec8" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "f69562be0608904932bdcfbc5ad8b9a22d9dceb8", - "internalRef": "279774957" + "sha": "45d2a569ab526a1fad3720f95eefb1c7330eaada", + "internalRef": "293515675" } }, { "template": { - "name": "python_library", + "name": "python_split_library", "origin": "synthtool.gcp", "version": "2019.10.17" } diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index 6c34630d506e..f4bbe74b5c79 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -63,7 +63,9 @@ # ---------------------------------------------------------------------------- # Add templated files # ---------------------------------------------------------------------------- -templated_files = common.py_library(unit_cov_level=97, cov_level=100) +templated_files = common.py_library( + unit_cov_level=97, cov_level=98, system_test_dependencies=["test_utils"] +) s.move(templated_files) s.shell.run(["nox", "-s", "blacken"], hide_output=False) diff --git a/packages/google-cloud-error-reporting/test_utils/credentials.json.enc b/packages/google-cloud-error-reporting/test_utils/credentials.json.enc new file mode 100644 index 000000000000..f073c7e4f774 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/credentials.json.enc @@ -0,0 +1,49 @@ +U2FsdGVkX1/vVm/dOEg1DCACYbdOcL+ey6+64A+DZGZVgF8Z/3skK6rpPocu6GOA +UZAqASsBH9QifDf8cKVXQXVYpYq6HSv2O0w7vOmVorZO9GYPo98s9/8XO+4ty/AU +aB6TD68frBAYv4cT/l5m7aYdzfzMTy0EOXoleZT09JYP3B5FV3KCO114FzMXGwrj +HXsR6E5SyUUlUnWPC3eD3aqmovay0gxOKYO3ZwjFK1nlbN/8q6/8nwBCf/Bg6SHV +V93pNxdolRlJev9kgKz4RN1z4jGCy5PAndhSLE82NFIs9LoAiEOU5YeMlN+Ulqus +J92nh+ptUe9a4pJGbAuveUWO7zdS1QyXvTMUcmmSfXCNm/eIQjNuu5+rHtIjWKh8 +Ilwj2w1aTfSptQEhk/kwRgFz/d11vfwJzvwTmCxO6zyOeL0VUWLqdCBGgG5As9He +/RenF8PZ1O0WbTt7fns5oTlTk/MUo+0xJ1xqvu/y45LaqqcBAnEdrWKmtM3dJHWv +ufQku+kD+83F/VwBnQdvgMHu6KZEs6LRrNo58r4QuK6fS7VCACdzxID1RM2cL7kT +6BFRlyGj1aigmjne9g9M9Jx4R+mZDpPU1WDzzG71J4qCUwaX8Dfwutuv4uiFvzwq +NUF0wLJJPtKWmtW+hnZ/fhHQGCRsOpZzFnqp6Zv7J7k6esqxMgIjfal7Djk5Acy8 +j3iVvm6CYmKMVqzL62JHYS9Ye83tzBCaR8hpnJQKgH3FSOFY8HSwrtQSIsl/hSeF +41sgnz0Y+/gkzNeU18qFk+eCZmvljyu+JK0nPYUgpOCJYVBNQpNHz5PUyiAEKhtM +IOSdjPRW1Y+Xf4RroJnLPoF24Ijwrow5LCm9hBRY6TPPMMmnIXCd23xcLJ1rMj6g +x4ZikElans+cwuc9wtbb7w01DcpTwQ1+eIV1qV+KIgpnLjRGLhZD4etobBsrwYu/ +vnIwy2QHCKENPb8sbdgp7x2mF7VSX0/7tf+9+i70EBiMzpOKBkiZhtLzm6hOBkEy +ODaWrx4lTTwbSw8Rmtf58APhPFMsjHoNsjiUoK249Y8Y2Ff4fMfqYsXu6VC1n/At +CuWYHc3EfBwFcLJS+RQB9kFk/4FygFBWq4Kj0MqoRruLbKmoGeJKH9q35W0f0NCD +j+iHt3014kMGiuyJe1UDQ6fvEihFFdHuDivFpPAXDt4PTY/WtpDhaGMx23kb54pK +jkAuxpznAB1lK3u9bGRXDasGeHIrNtIlPvgkrWHXvoBVqM7zry8TGtoxp3E3I42Z +cUfDWfB9GqVdrOwvrTzyZsl2uShRkAJaZFZj5aMyYxiptp4gM8CwWiNtOd2EwtRO +LxZX4M02PQFIqXV3FSDA0q6EwglUrTZdAlYeOEkopaKCtG31dEPOSQG3NGJAEYso +Cxm99H7970dp0OAgpNSgRbcWDbhVbQXnRzvFGqLeH6a9dQ/a8uD3s8Qm9Du/kB6d +XxTRe2OGxzcD0AgI8GClE4rIZHCLbcwuJRp0EYcN+pgY80O4U98fZ5RYpU6OYbU/ +MEiaBYFKtZtGkV6AQD568V7hHJWqc5DDfVHUQ/aeQwnKi2vnU66u+nnV2rZxXxLP ++dqeLRpul+wKa5b/Z5SfQ14Ff8s7aVyxaogGpyggyPL1vyq4KWZ6Or/wEE5hgNO4 +kBh6ht0QT1Hti8XY2JK1M+Jgbjgcg4jkHBGVqegrG1Rvcc2A4TYKwx+QMSBhyxrU +5qhROjS4lTcC42hQslMUkUwc4U/Y91XdFbOOnaAkwzI36NRYL0pmgZnYxGJZeRvr +E5foOhnOEVSFGdOkLfFh+FkWZQf56Lmn8Gg2wHE3dZTxLHibiUYfkgOr1uEosq29 +D1NstvlJURPQ0Q+8QQNWcl9nEZHMAjOmnL1hbx+QfuC6seucp+sXGzdZByMLZbvT +tG8KNL293CmyQowgf9MXToWYnwRkcvqfTaKyor2Ggze3JtoFW4t0j4DI1XPciZFX +XmfApHrzdB/bZadzxyaZ2NE0CuH9zDelwI6rz38xsN5liYnp5qmNKVCZVOHccXa6 +J8x365m5/VaaA2RrtdPqKxn8VaKy7+T690QgMXVGM4PbzQzQxHuSleklocqlP+sB +jSMXCZY+ng/i4UmRO9noiyW3UThYh0hIdMYs12EmmI9cnF/OuYZpl30fmqwV+VNM +td5B2fYvAvvsjiX60SFCn3DATP1GrPMBlZSmhhP3GYS+xrWt3Xxta9qIX2BEF1Gg +twnZZRjoULSRFUYPfJPEOfEH2UQwm84wxx/GezVE+S/RpBlatPOgCiLnNNaLfdTC +mTG9qY9elJv3GGQO8Lqgf4i8blExs05lSPk1BDhzTB6H9TLz+Ge0/l1QxKf3gPXU +aImK1azieXMXHECkdKxrzmehwu1dZ/oYOLc/OFQCETwSRoLPFOFpYUpizwmVVHR6 +uLSfRptte4ZOU3zHfpd/0+J4tkwHwEkGzsmMdqudlm7qME6upuIplyVBH8JiXzUK +n1RIH/OPmVEluAnexWRLZNdk7MrakIO4XACVbICENiYQgAIErP568An6twWEGDbZ +bEN64E3cVDTDRPRAunIhhsEaapcxpFEPWlHorxv36nMUt0R0h0bJlCu5QdzckfcX +ZrRuu1kl76ZfbSE8T0G4/rBb9gsU4Gn3WyvLIO3MgFBuxR68ZwcR8LpEUd8qp38H +NG4cxPmN1nGKo663Z+xI2Gt5up4gpl+fOt4mXqxY386rB7yHaOfElMG5TUYdrS9w +1xbbCVgeJ6zxX+NFlndG33cSAPprhw+C18eUu6ZU63WZcYFo3GfK6rs3lvYtofvE +8DxztdTidQedNVNE+63YCjhxd/cZUI5n/UpgYkr9owp7hNGJiR3tdoNLR2gcoGqL +qWhH928k2aSgF2j97LZ2OqoPCp0tUB7ho4jD2u4Ik3GLVNlCc3dCvWRvpHtDTQDv +tujESMfHUc9I2r4S/PD3bku/ABGwa977Yp1PjzJGr9RajA5is5n6GVpyynwjtKG4 +iyyITpdwpCgr8pueTBLwZnas3slmiMOog/E4PmPgctHzvC+vhQijhUtw5zSsmv0l +bZlw/mVhp5Ta7dTcLBKR8DA3m3vTbaEGkz0xpfQr7GfiSMRbJyvIw88pDK0gyTMD diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/circleci/get_tagged_package.py b/packages/google-cloud-error-reporting/test_utils/scripts/circleci/get_tagged_package.py new file mode 100644 index 000000000000..c148b9dc2370 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/scripts/circleci/get_tagged_package.py @@ -0,0 +1,64 @@ +# Copyright 2016 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. + +"""Helper to determine package from tag. +Get the current package directory corresponding to the Circle Tag. +""" + +from __future__ import print_function + +import os +import re +import sys + + +TAG_RE = re.compile(r""" + ^ + (?P + (([a-z]+)[_-])*) # pkg-name-with-hyphens-or-underscores (empty allowed) + ([0-9]+)\.([0-9]+)\.([0-9]+) # Version x.y.z (x, y, z all ints) + $ +""", re.VERBOSE) +TAG_ENV = 'CIRCLE_TAG' +ERROR_MSG = '%s env. var. not set' % (TAG_ENV,) +BAD_TAG_MSG = 'Invalid tag name: %s. Expected pkg-name-x.y.z' +CIRCLE_CI_SCRIPTS_DIR = os.path.dirname(__file__) +ROOT_DIR = os.path.realpath( + os.path.join(CIRCLE_CI_SCRIPTS_DIR, '..', '..', '..')) + + +def main(): + """Get the current package directory. + Prints the package directory out so callers can consume it. + """ + if TAG_ENV not in os.environ: + print(ERROR_MSG, file=sys.stderr) + sys.exit(1) + + tag_name = os.environ[TAG_ENV] + match = TAG_RE.match(tag_name) + if match is None: + print(BAD_TAG_MSG % (tag_name,), file=sys.stderr) + sys.exit(1) + + pkg_name = match.group('pkg') + if pkg_name is None: + print(ROOT_DIR) + else: + pkg_dir = pkg_name.rstrip('-').replace('-', '_') + print(os.path.join(ROOT_DIR, pkg_dir)) + + +if __name__ == '__main__': + main() diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/circleci/twine_upload.sh b/packages/google-cloud-error-reporting/test_utils/scripts/circleci/twine_upload.sh new file mode 100755 index 000000000000..23a4738e90b9 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/scripts/circleci/twine_upload.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Copyright 2016 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. + +set -ev + +# If this is not a CircleCI tag, no-op. +if [[ -z "$CIRCLE_TAG" ]]; then + echo "This is not a release tag. Doing nothing." + exit 0 +fi + +# H/T: http://stackoverflow.com/a/246128/1068170 +SCRIPT="$(dirname "${BASH_SOURCE[0]}")/get_tagged_package.py" +# Determine the package directory being deploying on this tag. +PKG_DIR="$(python ${SCRIPT})" + +# Ensure that we have the latest versions of Twine, Wheel, and Setuptools. +python3 -m pip install --upgrade twine wheel setuptools + +# Move into the package, build the distribution and upload. +cd ${PKG_DIR} +python3 setup.py sdist bdist_wheel +twine upload dist/* diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages.py b/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages.py new file mode 100644 index 000000000000..1d51830cc23a --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages.py @@ -0,0 +1,268 @@ +# Copyright 2017 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. + +"""Print a list of packages which require testing.""" + +import os +import re +import subprocess +import warnings + + +CURRENT_DIR = os.path.realpath(os.path.dirname(__file__)) +BASE_DIR = os.path.realpath(os.path.join(CURRENT_DIR, '..', '..')) +GITHUB_REPO = os.environ.get('GITHUB_REPO', 'google-cloud-python') +CI = os.environ.get('CI', '') +CI_BRANCH = os.environ.get('CIRCLE_BRANCH') +CI_PR = os.environ.get('CIRCLE_PR_NUMBER') +CIRCLE_TAG = os.environ.get('CIRCLE_TAG') +head_hash, head_name = subprocess.check_output(['git', 'show-ref', 'HEAD'] +).strip().decode('ascii').split() +rev_parse = subprocess.check_output( + ['git', 'rev-parse', '--abbrev-ref', 'HEAD'] +).strip().decode('ascii') +MAJOR_DIV = '#' * 78 +MINOR_DIV = '#' + '-' * 77 + +# NOTE: This reg-ex is copied from ``get_tagged_packages``. +TAG_RE = re.compile(r""" + ^ + (?P + (([a-z]+)-)*) # pkg-name-with-hyphens- (empty allowed) + ([0-9]+)\.([0-9]+)\.([0-9]+) # Version x.y.z (x, y, z all ints) + $ +""", re.VERBOSE) + +# This is the current set of dependencies by package. +# As of this writing, the only "real" dependency is that of error_reporting +# (on logging), the rest are just system test dependencies. +PKG_DEPENDENCIES = { + 'logging': {'pubsub'}, +} + + +def get_baseline(): + """Return the baseline commit. + + On a pull request, or on a branch, return the common parent revision + with the master branch. + + Locally, return a value pulled from environment variables, or None if + the environment variables are not set. + + On a push to master, return None. This will effectively cause everything + to be considered to be affected. + """ + + # If this is a pull request or branch, return the tip for master. + # We will test only packages which have changed since that point. + ci_non_master = (CI == 'true') and any([CI_BRANCH != 'master', CI_PR]) + + if ci_non_master: + + repo_url = 'git@github.com:GoogleCloudPlatform/{}'.format(GITHUB_REPO) + subprocess.run(['git', 'remote', 'add', 'baseline', repo_url], + stderr=subprocess.DEVNULL) + subprocess.run(['git', 'pull', 'baseline'], stderr=subprocess.DEVNULL) + + if CI_PR is None and CI_BRANCH is not None: + output = subprocess.check_output([ + 'git', 'merge-base', '--fork-point', + 'baseline/master', CI_BRANCH]) + return output.strip().decode('ascii') + + return 'baseline/master' + + # If environment variables are set identifying what the master tip is, + # use that. + if os.environ.get('GOOGLE_CLOUD_TESTING_REMOTE', ''): + remote = os.environ['GOOGLE_CLOUD_TESTING_REMOTE'] + branch = os.environ.get('GOOGLE_CLOUD_TESTING_BRANCH', 'master') + return '%s/%s' % (remote, branch) + + # If we are not in CI and we got this far, issue a warning. + if not CI: + warnings.warn('No baseline could be determined; this means tests ' + 'will run for every package. If this is local ' + 'development, set the $GOOGLE_CLOUD_TESTING_REMOTE ' + 'environment variable.') + + # That is all we can do; return None. + return None + + +def get_changed_files(): + """Return a list of files that have been changed since the baseline. + + If there is no base, return None. + """ + # Get the baseline, and fail quickly if there is no baseline. + baseline = get_baseline() + print('# Baseline commit: {}'.format(baseline)) + if not baseline: + return None + + # Return a list of altered files. + try: + return subprocess.check_output([ + 'git', 'diff', '--name-only', '{}..HEAD'.format(baseline), + ], stderr=subprocess.DEVNULL).decode('utf8').strip().split('\n') + except subprocess.CalledProcessError: + warnings.warn('Unable to perform git diff; falling back to assuming ' + 'all packages have changed.') + return None + + +def reverse_map(dict_of_sets): + """Reverse a map of one-to-many. + + So the map:: + + { + 'A': {'B', 'C'}, + 'B': {'C'}, + } + + becomes + + { + 'B': {'A'}, + 'C': {'A', 'B'}, + } + + Args: + dict_of_sets (dict[set]): A dictionary of sets, mapping + one value to many. + + Returns: + dict[set]: The reversed map. + """ + result = {} + for key, values in dict_of_sets.items(): + for value in values: + result.setdefault(value, set()).add(key) + + return result + +def get_changed_packages(file_list): + """Return a list of changed packages based on the provided file list. + + If the file list is None, then all packages should be considered to be + altered. + """ + # Determine a complete list of packages. + all_packages = set() + for file_ in os.listdir(BASE_DIR): + abs_file = os.path.realpath(os.path.join(BASE_DIR, file_)) + nox_file = os.path.join(abs_file, 'nox.py') + if os.path.isdir(abs_file) and os.path.isfile(nox_file): + all_packages.add(file_) + + # If ther is no file list, send down the full package set. + if file_list is None: + return all_packages + + # Create a set based on the list of changed files. + answer = set() + reverse_deps = reverse_map(PKG_DEPENDENCIES) + for file_ in file_list: + # Ignore root directory changes (setup.py, .gitignore, etc.). + if os.path.sep not in file_: + continue + + # Ignore changes that are not in a package (usually this will be docs). + package = file_.split(os.path.sep, 1)[0] + if package not in all_packages: + continue + + # If there is a change in core, short-circuit now and return + # everything. + if package in ('core',): + return all_packages + + # Add the package, as well as any dependencies this package has. + # NOTE: For now, dependencies only go down one level. + answer.add(package) + answer = answer.union(reverse_deps.get(package, set())) + + # We got this far without being short-circuited; return the final answer. + return answer + + +def get_tagged_package(): + """Return the package corresponding to the current tag. + + If there is not tag, will return :data:`None`. + """ + if CIRCLE_TAG is None: + return + + match = TAG_RE.match(CIRCLE_TAG) + if match is None: + return + + pkg_name = match.group('pkg') + if pkg_name == '': + # NOTE: This corresponds to the "umbrella" tag. + return + + return pkg_name.rstrip('-').replace('-', '_') + + +def get_target_packages(): + """Return a list of target packages to be run in the current build. + + If in a tag build, will run only the package(s) that are tagged, otherwise + will run the packages that have file changes in them (or packages that + depend on those). + """ + tagged_package = get_tagged_package() + if tagged_package is None: + file_list = get_changed_files() + print(MAJOR_DIV) + print('# Changed files:') + print(MINOR_DIV) + for file_ in file_list or (): + print('# {}'.format(file_)) + for package in sorted(get_changed_packages(file_list)): + yield package + else: + yield tagged_package + + +def main(): + print(MAJOR_DIV) + print('# Environment') + print(MINOR_DIV) + print('# CircleCI: {}'.format(CI)) + print('# CircleCI branch: {}'.format(CI_BRANCH)) + print('# CircleCI pr: {}'.format(CI_PR)) + print('# CircleCI tag: {}'.format(CIRCLE_TAG)) + print('# HEAD ref: {}'.format(head_hash)) + print('# {}'.format(head_name)) + print('# Git branch: {}'.format(rev_parse)) + print(MAJOR_DIV) + + packages = list(get_target_packages()) + + print(MAJOR_DIV) + print('# Target packages:') + print(MINOR_DIV) + for package in packages: + print(package) + print(MAJOR_DIV) + + +if __name__ == '__main__': + main() diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages_kokoro.py b/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages_kokoro.py new file mode 100644 index 000000000000..27d3a0c940ea --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages_kokoro.py @@ -0,0 +1,98 @@ +# Copyright 2017 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. + +"""Print a list of packages which require testing.""" + +import pathlib +import subprocess + +import ci_diff_helper +import requests + + +def print_environment(environment): + print("-> CI environment:") + print('Branch', environment.branch) + print('PR', environment.pr) + print('In PR', environment.in_pr) + print('Repo URL', environment.repo_url) + if environment.in_pr: + print('PR Base', environment.base) + + +def get_base(environment): + if environment.in_pr: + return environment.base + else: + # If we're not in a PR, just calculate the changes between this commit + # and its parent. + return 'HEAD~1' + + +def get_changed_files_from_base(base): + return subprocess.check_output([ + 'git', 'diff', '--name-only', f'{base}..HEAD', + ], stderr=subprocess.DEVNULL).decode('utf8').strip().split('\n') + + +_URL_TEMPLATE = ( + 'https://api.github.com/repos/googleapis/google-cloud-python/pulls/' + '{}/files' +) + + +def get_changed_files_from_pr(pr): + url = _URL_TEMPLATE.format(pr) + while url is not None: + response = requests.get(url) + for info in response.json(): + yield info['filename'] + url = response.links.get('next', {}).get('url') + + +def determine_changed_packages(changed_files): + packages = [ + path.parent for path in pathlib.Path('.').glob('*/noxfile.py') + ] + + changed_packages = set() + for file in changed_files: + file = pathlib.Path(file) + for package in packages: + if package in file.parents: + changed_packages.add(package) + + return changed_packages + + +def main(): + environment = ci_diff_helper.get_config() + print_environment(environment) + base = get_base(environment) + + if environment.in_pr: + changed_files = list(get_changed_files_from_pr(environment.pr)) + else: + changed_files = get_changed_files_from_base(base) + + packages = determine_changed_packages(changed_files) + + print(f"Comparing against {base}.") + print("-> Changed packages:") + + for package in packages: + print(package) + + +main() diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/run_emulator.py b/packages/google-cloud-error-reporting/test_utils/scripts/run_emulator.py new file mode 100644 index 000000000000..287b08640691 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/scripts/run_emulator.py @@ -0,0 +1,199 @@ +# Copyright 2016 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. + +"""Run system tests locally with the emulator. + +First makes system calls to spawn the emulator and get the local environment +variable needed for it. Then calls the system tests. +""" + + +import argparse +import os +import subprocess + +import psutil + +from google.cloud.environment_vars import BIGTABLE_EMULATOR +from google.cloud.environment_vars import GCD_DATASET +from google.cloud.environment_vars import GCD_HOST +from google.cloud.environment_vars import PUBSUB_EMULATOR +from run_system_test import run_module_tests + + +BIGTABLE = 'bigtable' +DATASTORE = 'datastore' +PUBSUB = 'pubsub' +PACKAGE_INFO = { + BIGTABLE: (BIGTABLE_EMULATOR,), + DATASTORE: (GCD_DATASET, GCD_HOST), + PUBSUB: (PUBSUB_EMULATOR,), +} +EXTRA = { + DATASTORE: ('--no-legacy',), +} +_DS_READY_LINE = '[datastore] Dev App Server is now running.\n' +_PS_READY_LINE_PREFIX = '[pubsub] INFO: Server started, listening on ' +_BT_READY_LINE_PREFIX = '[bigtable] Cloud Bigtable emulator running on ' + + +def get_parser(): + """Get simple ``argparse`` parser to determine package. + + :rtype: :class:`argparse.ArgumentParser` + :returns: The parser for this script. + """ + parser = argparse.ArgumentParser( + description='Run google-cloud system tests against local emulator.') + parser.add_argument('--package', dest='package', + choices=sorted(PACKAGE_INFO.keys()), + default=DATASTORE, help='Package to be tested.') + return parser + + +def get_start_command(package): + """Get command line arguments for starting emulator. + + :type package: str + :param package: The package to start an emulator for. + + :rtype: tuple + :returns: The arguments to be used, in a tuple. + """ + result = ('gcloud', 'beta', 'emulators', package, 'start') + extra = EXTRA.get(package, ()) + return result + extra + + +def get_env_init_command(package): + """Get command line arguments for getting emulator env. info. + + :type package: str + :param package: The package to get environment info for. + + :rtype: tuple + :returns: The arguments to be used, in a tuple. + """ + result = ('gcloud', 'beta', 'emulators', package, 'env-init') + extra = EXTRA.get(package, ()) + return result + extra + + +def datastore_wait_ready(popen): + """Wait until the datastore emulator is ready to use. + + :type popen: :class:`subprocess.Popen` + :param popen: An open subprocess to interact with. + """ + emulator_ready = False + while not emulator_ready: + emulator_ready = popen.stderr.readline() == _DS_READY_LINE + + +def wait_ready_prefix(popen, prefix): + """Wait until the a process encounters a line with matching prefix. + + :type popen: :class:`subprocess.Popen` + :param popen: An open subprocess to interact with. + + :type prefix: str + :param prefix: The prefix to match + """ + emulator_ready = False + while not emulator_ready: + emulator_ready = popen.stderr.readline().startswith(prefix) + + +def wait_ready(package, popen): + """Wait until the emulator is ready to use. + + :type package: str + :param package: The package to check if ready. + + :type popen: :class:`subprocess.Popen` + :param popen: An open subprocess to interact with. + + :raises: :class:`KeyError` if the ``package`` is not among + ``datastore``, ``pubsub`` or ``bigtable``. + """ + if package == DATASTORE: + datastore_wait_ready(popen) + elif package == PUBSUB: + wait_ready_prefix(popen, _PS_READY_LINE_PREFIX) + elif package == BIGTABLE: + wait_ready_prefix(popen, _BT_READY_LINE_PREFIX) + else: + raise KeyError('Package not supported', package) + + +def cleanup(pid): + """Cleanup a process (including all of its children). + + :type pid: int + :param pid: Process ID. + """ + proc = psutil.Process(pid) + for child_proc in proc.children(recursive=True): + try: + child_proc.kill() + child_proc.terminate() + except psutil.NoSuchProcess: + pass + proc.terminate() + proc.kill() + + +def run_tests_in_emulator(package): + """Spawn an emulator instance and run the system tests. + + :type package: str + :param package: The package to run system tests against. + """ + # Make sure this package has environment vars to replace. + env_vars = PACKAGE_INFO[package] + + start_command = get_start_command(package) + # Ignore stdin and stdout, don't pollute the user's output with them. + proc_start = subprocess.Popen(start_command, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + try: + wait_ready(package, proc_start) + env_init_command = get_env_init_command(package) + proc_env = subprocess.Popen(env_init_command, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + env_status = proc_env.wait() + if env_status != 0: + raise RuntimeError(env_status, proc_env.stderr.read()) + env_lines = proc_env.stdout.read().strip().split('\n') + # Set environment variables before running the system tests. + for env_var in env_vars: + line_prefix = 'export ' + env_var + '=' + value, = [line.split(line_prefix, 1)[1] for line in env_lines + if line.startswith(line_prefix)] + os.environ[env_var] = value + run_module_tests(package, + ignore_requirements=True) + finally: + cleanup(proc_start.pid) + + +def main(): + """Main method to run this script.""" + parser = get_parser() + args = parser.parse_args() + run_tests_in_emulator(args.package) + + +if __name__ == '__main__': + main() diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/update_docs.sh b/packages/google-cloud-error-reporting/test_utils/scripts/update_docs.sh new file mode 100755 index 000000000000..8cbab9f0dad0 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/scripts/update_docs.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +# Copyright 2016 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. + +set -ev + +GH_OWNER='GoogleCloudPlatform' +GH_PROJECT_NAME='google-cloud-python' + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Function to build the docs. +function build_docs { + rm -rf docs/_build/ + rm -f docs/bigquery/generated/*.rst + # -W -> warnings as errors + # -T -> show full traceback on exception + # -N -> no color + sphinx-build \ + -W -T -N \ + -b html \ + -d docs/_build/doctrees \ + docs/ \ + docs/_build/html/ + return $? +} + +# Only update docs if we are on CircleCI. +if [[ "${CIRCLE_BRANCH}" == "master" ]] && [[ -z "${CIRCLE_PR_NUMBER}" ]]; then + echo "Building new docs on a merged commit." +elif [[ "$1" == "kokoro" ]]; then + echo "Building and publishing docs on Kokoro." +elif [[ -n "${CIRCLE_TAG}" ]]; then + echo "Building new docs on a tag (but will not deploy)." + build_docs + exit $? +else + echo "Not on master nor a release tag." + echo "Building new docs for testing purposes, but not deploying." + build_docs + exit $? +fi + +# Adding GitHub pages branch. `git submodule add` checks it +# out at HEAD. +GH_PAGES_DIR='ghpages' +git submodule add -q -b gh-pages \ + "git@github.com:${GH_OWNER}/${GH_PROJECT_NAME}" ${GH_PAGES_DIR} + +# Determine if we are building a new tag or are building docs +# for master. Then build new docs in docs/_build from master. +if [[ -n "${CIRCLE_TAG}" ]]; then + # Sphinx will use the package version by default. + build_docs +else + SPHINX_RELEASE=$(git log -1 --pretty=%h) build_docs +fi + +# Update gh-pages with the created docs. +cd ${GH_PAGES_DIR} +git rm -fr latest/ +cp -R ../docs/_build/html/ latest/ + +# Update the files push to gh-pages. +git add . +git status + +# If there are no changes, just exit cleanly. +if [[ -z "$(git status --porcelain)" ]]; then + echo "Nothing to commit. Exiting without pushing changes." + exit +fi + +# Commit to gh-pages branch to apply changes. +git config --global user.email "dpebot@google.com" +git config --global user.name "dpebot" +git commit -m "Update docs after merge to master." + +# NOTE: This may fail if two docs updates (on merges to master) +# happen in close proximity. +git push -q origin HEAD:gh-pages diff --git a/packages/google-cloud-error-reporting/test_utils/setup.py b/packages/google-cloud-error-reporting/test_utils/setup.py new file mode 100644 index 000000000000..8e9222a7f862 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/setup.py @@ -0,0 +1,64 @@ +# Copyright 2017 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 os + +from setuptools import find_packages +from setuptools import setup + + +PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__)) + + +# NOTE: This is duplicated throughout and we should try to +# consolidate. +SETUP_BASE = { + 'author': 'Google Cloud Platform', + 'author_email': 'googleapis-publisher@google.com', + 'scripts': [], + 'url': 'https://github.com/GoogleCloudPlatform/google-cloud-python', + 'license': 'Apache 2.0', + 'platforms': 'Posix; MacOS X; Windows', + 'include_package_data': True, + 'zip_safe': False, + 'classifiers': [ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: Apache Software License', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Topic :: Internet', + ], +} + + +REQUIREMENTS = [ + 'google-auth >= 0.4.0', + 'six', +] + +setup( + name='google-cloud-testutils', + version='0.24.0', + description='System test utilities for google-cloud-python', + packages=find_packages(), + install_requires=REQUIREMENTS, + python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*', + **SETUP_BASE +) diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/__init__.py b/packages/google-cloud-error-reporting/test_utils/test_utils/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/imports.py b/packages/google-cloud-error-reporting/test_utils/test_utils/imports.py new file mode 100644 index 000000000000..5991af7fc465 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/test_utils/imports.py @@ -0,0 +1,38 @@ +# Copyright 2019 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 mock +import six + + +def maybe_fail_import(predicate): + """Create and return a patcher that conditionally makes an import fail. + + Args: + predicate (Callable[[...], bool]): A callable that, if it returns `True`, + triggers an `ImportError`. It must accept the same arguments as the + built-in `__import__` function. + https://docs.python.org/3/library/functions.html#__import__ + + Returns: + A mock patcher object that can be used to enable patched import behavior. + """ + orig_import = six.moves.builtins.__import__ + + def custom_import(name, globals=None, locals=None, fromlist=(), level=0): + if predicate(name, globals, locals, fromlist, level): + raise ImportError + return orig_import(name, globals, locals, fromlist, level) + + return mock.patch.object(six.moves.builtins, "__import__", new=custom_import) diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/retry.py b/packages/google-cloud-error-reporting/test_utils/test_utils/retry.py new file mode 100644 index 000000000000..e61c001a03e1 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/test_utils/retry.py @@ -0,0 +1,207 @@ +# Copyright 2016 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 time +from functools import wraps + +import six + +MAX_TRIES = 4 +DELAY = 1 +BACKOFF = 2 + + +def _retry_all(_): + """Retry all caught exceptions.""" + return True + + +class BackoffFailed(Exception): + """Retry w/ backoffs did not complete successfully.""" + + +class RetryBase(object): + """Base for retrying calling a decorated function w/ exponential backoff. + + :type max_tries: int + :param max_tries: Number of times to try (not retry) before giving up. + + :type delay: int + :param delay: Initial delay between retries in seconds. + + :type backoff: int + :param backoff: Backoff multiplier e.g. value of 2 will double the + delay each retry. + + :type logger: logging.Logger instance + :param logger: Logger to use. If None, print. + """ + def __init__(self, max_tries=MAX_TRIES, delay=DELAY, backoff=BACKOFF, + logger=None): + self.max_tries = max_tries + self.delay = delay + self.backoff = backoff + self.logger = logger.warning if logger else six.print_ + + +class RetryErrors(RetryBase): + """Decorator for retrying given exceptions in testing. + + :type exception: Exception or tuple of Exceptions + :param exception: The exception to check or may be a tuple of + exceptions to check. + + :type error_predicate: function, takes caught exception, returns bool + :param error_predicate: Predicate evaluating whether to retry after a + caught exception. + + :type max_tries: int + :param max_tries: Number of times to try (not retry) before giving up. + + :type delay: int + :param delay: Initial delay between retries in seconds. + + :type backoff: int + :param backoff: Backoff multiplier e.g. value of 2 will double the + delay each retry. + + :type logger: logging.Logger instance + :param logger: Logger to use. If None, print. + """ + def __init__(self, exception, error_predicate=_retry_all, + max_tries=MAX_TRIES, delay=DELAY, backoff=BACKOFF, + logger=None): + super(RetryErrors, self).__init__(max_tries, delay, backoff, logger) + self.exception = exception + self.error_predicate = error_predicate + + def __call__(self, to_wrap): + @wraps(to_wrap) + def wrapped_function(*args, **kwargs): + tries = 0 + while tries < self.max_tries: + try: + return to_wrap(*args, **kwargs) + except self.exception as caught_exception: + + if not self.error_predicate(caught_exception): + raise + + delay = self.delay * self.backoff**tries + msg = ("%s, Trying again in %d seconds..." % + (caught_exception, delay)) + self.logger(msg) + + time.sleep(delay) + tries += 1 + return to_wrap(*args, **kwargs) + + return wrapped_function + + +class RetryResult(RetryBase): + """Decorator for retrying based on non-error result. + + :type result_predicate: function, takes result, returns bool + :param result_predicate: Predicate evaluating whether to retry after a + result is returned. + + :type max_tries: int + :param max_tries: Number of times to try (not retry) before giving up. + + :type delay: int + :param delay: Initial delay between retries in seconds. + + :type backoff: int + :param backoff: Backoff multiplier e.g. value of 2 will double the + delay each retry. + + :type logger: logging.Logger instance + :param logger: Logger to use. If None, print. + """ + def __init__(self, result_predicate, + max_tries=MAX_TRIES, delay=DELAY, backoff=BACKOFF, + logger=None): + super(RetryResult, self).__init__(max_tries, delay, backoff, logger) + self.result_predicate = result_predicate + + def __call__(self, to_wrap): + @wraps(to_wrap) + def wrapped_function(*args, **kwargs): + tries = 0 + while tries < self.max_tries: + result = to_wrap(*args, **kwargs) + if self.result_predicate(result): + return result + + delay = self.delay * self.backoff**tries + msg = "%s. Trying again in %d seconds..." % ( + self.result_predicate.__name__, delay,) + self.logger(msg) + + time.sleep(delay) + tries += 1 + raise BackoffFailed() + + return wrapped_function + + +class RetryInstanceState(RetryBase): + """Decorator for retrying based on instance state. + + :type instance_predicate: function, takes instance, returns bool + :param instance_predicate: Predicate evaluating whether to retry after an + API-invoking method is called. + + :type max_tries: int + :param max_tries: Number of times to try (not retry) before giving up. + + :type delay: int + :param delay: Initial delay between retries in seconds. + + :type backoff: int + :param backoff: Backoff multiplier e.g. value of 2 will double the + delay each retry. + + :type logger: logging.Logger instance + :param logger: Logger to use. If None, print. + """ + def __init__(self, instance_predicate, + max_tries=MAX_TRIES, delay=DELAY, backoff=BACKOFF, + logger=None): + super(RetryInstanceState, self).__init__( + max_tries, delay, backoff, logger) + self.instance_predicate = instance_predicate + + def __call__(self, to_wrap): + instance = to_wrap.__self__ # only instance methods allowed + + @wraps(to_wrap) + def wrapped_function(*args, **kwargs): + tries = 0 + while tries < self.max_tries: + result = to_wrap(*args, **kwargs) + if self.instance_predicate(instance): + return result + + delay = self.delay * self.backoff**tries + msg = "%s. Trying again in %d seconds..." % ( + self.instance_predicate.__name__, delay,) + self.logger(msg) + + time.sleep(delay) + tries += 1 + raise BackoffFailed() + + return wrapped_function diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/system.py b/packages/google-cloud-error-reporting/test_utils/test_utils/system.py new file mode 100644 index 000000000000..590dc62a06e6 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/test_utils/system.py @@ -0,0 +1,81 @@ +# Copyright 2014 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 __future__ import print_function +import os +import sys +import time + +import google.auth.credentials +from google.auth.environment_vars import CREDENTIALS as TEST_CREDENTIALS + + +# From shell environ. May be None. +CREDENTIALS = os.getenv(TEST_CREDENTIALS) + +ENVIRON_ERROR_MSG = """\ +To run the system tests, you need to set some environment variables. +Please check the CONTRIBUTING guide for instructions. +""" + + +class EmulatorCreds(google.auth.credentials.Credentials): + """A mock credential object. + + Used to avoid unnecessary token refreshing or reliance on the network + while an emulator is running. + """ + + def __init__(self): # pylint: disable=super-init-not-called + self.token = b'seekrit' + self.expiry = None + + @property + def valid(self): + """Would-be validity check of the credentials. + + Always is :data:`True`. + """ + return True + + def refresh(self, unused_request): # pylint: disable=unused-argument + """Off-limits implementation for abstract method.""" + raise RuntimeError('Should never be refreshed.') + + +def check_environ(): + err_msg = None + if CREDENTIALS is None: + err_msg = '\nMissing variables: ' + TEST_CREDENTIALS + elif not os.path.isfile(CREDENTIALS): + err_msg = '\nThe %s path %r is not a file.' % (TEST_CREDENTIALS, + CREDENTIALS) + + if err_msg is not None: + msg = ENVIRON_ERROR_MSG + err_msg + print(msg, file=sys.stderr) + sys.exit(1) + + +def unique_resource_id(delimiter='_'): + """A unique identifier for a resource. + + Intended to help locate resources created in particular + testing environments and at particular times. + """ + build_id = os.getenv('CIRCLE_BUILD_NUM', '') + if build_id == '': + return '%s%d' % (delimiter, 1000 * time.time()) + else: + return '%s%s%s%d' % (delimiter, build_id, delimiter, time.time()) diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/vpcsc_config.py b/packages/google-cloud-error-reporting/test_utils/test_utils/vpcsc_config.py new file mode 100644 index 000000000000..36b15d6be991 --- /dev/null +++ b/packages/google-cloud-error-reporting/test_utils/test_utils/vpcsc_config.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2019 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 +# +# https://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 os + +import pytest + + +INSIDE_VPCSC_ENVVAR = "GOOGLE_CLOUD_TESTS_IN_VPCSC" +PROJECT_INSIDE_ENVVAR = "PROJECT_ID" +PROJECT_OUTSIDE_ENVVAR = "GOOGLE_CLOUD_TESTS_VPCSC_OUTSIDE_PERIMETER_PROJECT" +BUCKET_OUTSIDE_ENVVAR = "GOOGLE_CLOUD_TESTS_VPCSC_OUTSIDE_PERIMETER_BUCKET" + + +class VPCSCTestConfig(object): + """System test utility for VPCSC detection. + + See: https://cloud.google.com/vpc-service-controls/docs/ + """ + + @property + def inside_vpcsc(self): + """Test whether the test environment is configured to run inside VPCSC. + + Returns: + bool: + true if the environment is configured to run inside VPCSC, + else false. + """ + return INSIDE_VPCSC_ENVVAR in os.environ + + @property + def project_inside(self): + """Project ID for testing outside access. + + Returns: + str: project ID used for testing outside access; None if undefined. + """ + return os.environ.get(PROJECT_INSIDE_ENVVAR, None) + + @property + def project_outside(self): + """Project ID for testing inside access. + + Returns: + str: project ID used for testing inside access; None if undefined. + """ + return os.environ.get(PROJECT_OUTSIDE_ENVVAR, None) + + @property + def bucket_outside(self): + """GCS bucket for testing inside access. + + Returns: + str: bucket ID used for testing inside access; None if undefined. + """ + return os.environ.get(BUCKET_OUTSIDE_ENVVAR, None) + + def skip_if_inside_vpcsc(self, testcase): + """Test decorator: skip if running inside VPCSC.""" + reason = ( + "Running inside VPCSC. " + "Unset the {} environment variable to enable this test." + ).format(INSIDE_VPCSC_ENVVAR) + skip = pytest.mark.skipif(self.inside_vpcsc, reason=reason) + return skip(testcase) + + def skip_unless_inside_vpcsc(self, testcase): + """Test decorator: skip if running outside VPCSC.""" + reason = ( + "Running outside VPCSC. " + "Set the {} environment variable to enable this test." + ).format(INSIDE_VPCSC_ENVVAR) + skip = pytest.mark.skipif(not self.inside_vpcsc, reason=reason) + return skip(testcase) + + def skip_unless_inside_project(self, testcase): + """Test decorator: skip if inside project env var not set.""" + reason = ( + "Project ID for running inside VPCSC not set. " + "Set the {} environment variable to enable this test." + ).format(PROJECT_INSIDE_ENVVAR) + skip = pytest.mark.skipif(self.project_inside is None, reason=reason) + return skip(testcase) + + def skip_unless_outside_project(self, testcase): + """Test decorator: skip if outside project env var not set.""" + reason = ( + "Project ID for running outside VPCSC not set. " + "Set the {} environment variable to enable this test." + ).format(PROJECT_OUTSIDE_ENVVAR) + skip = pytest.mark.skipif(self.project_outside is None, reason=reason) + return skip(testcase) + + def skip_unless_outside_bucket(self, testcase): + """Test decorator: skip if outside bucket env var not set.""" + reason = ( + "Bucket ID for running outside VPCSC not set. " + "Set the {} environment variable to enable this test." + ).format(BUCKET_OUTSIDE_ENVVAR) + skip = pytest.mark.skipif(self.bucket_outside is None, reason=reason) + return skip(testcase) + + +vpcsc_config = VPCSCTestConfig() From a85611f636233e580a16df89116c000b4b06dc03 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Tue, 28 Apr 2020 16:15:48 -0700 Subject: [PATCH 163/467] chore: update template (via synth) (#7) --- .../google-cloud-error-reporting/.coveragerc | 16 +++++++++++++ packages/google-cloud-error-reporting/.flake8 | 16 +++++++++++++ .../.github/ISSUE_TEMPLATE/bug_report.md | 3 +-- .../CONTRIBUTING.rst | 15 +++--------- .../google-cloud-error-reporting/MANIFEST.in | 16 +++++++++++++ .../google-cloud-error-reporting/noxfile.py | 5 ++-- .../google-cloud-error-reporting/setup.cfg | 16 +++++++++++++ .../synth.metadata | 24 ++++++++++++------- 8 files changed, 85 insertions(+), 26 deletions(-) diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc index b178b094aa1d..dd39c8546c41 100644 --- a/packages/google-cloud-error-reporting/.coveragerc +++ b/packages/google-cloud-error-reporting/.coveragerc @@ -1,3 +1,19 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2020 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 +# +# https://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. + # Generated by synthtool. DO NOT EDIT! [run] branch = True diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index 0268ecc9c55c..20fe9bda2ee4 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -1,3 +1,19 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2020 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 +# +# https://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. + # Generated by synthtool. DO NOT EDIT! [flake8] ignore = E203, E266, E501, W503 diff --git a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md index df85cb2b1cbe..fcbad57eda9b 100644 --- a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md +++ b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md @@ -11,8 +11,7 @@ Thanks for stopping by to let us know something could be better! Please run down the following list and make sure you've tried the usual "quick fixes": - Search the issues already opened: https://github.com/googleapis/python-error-reporting/issues - - Search the issues on our "catch-all" repository: https://github.com/googleapis/google-cloud-python - - Search StackOverflow: http://stackoverflow.com/questions/tagged/google-cloud-platform+python + - Search StackOverflow: https://stackoverflow.com/questions/tagged/google-cloud-platform+python If you are still having issues, please be sure to include as much information as possible: diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 0e1b9ed7feaf..49efd398981f 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: 2.7, - 3.5, 3.6, and 3.7 on both UNIX and Windows. + 3.5, 3.6, 3.7 and 3.8 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -214,26 +214,18 @@ We support: - `Python 3.5`_ - `Python 3.6`_ - `Python 3.7`_ +- `Python 3.8`_ .. _Python 3.5: https://docs.python.org/3.5/ .. _Python 3.6: https://docs.python.org/3.6/ .. _Python 3.7: https://docs.python.org/3.7/ +.. _Python 3.8: https://docs.python.org/3.8/ Supported versions can be found in our ``noxfile.py`` `config`_. .. _config: https://github.com/googleapis/python-error-reporting/blob/master/noxfile.py -We explicitly decided not to support `Python 2.5`_ due to `decreased usage`_ -and lack of continuous integration `support`_. - -.. _Python 2.5: https://docs.python.org/2.5/ -.. _decreased usage: https://caremad.io/2013/10/a-look-at-pypi-downloads/ -.. _support: https://blog.travis-ci.com/2013-11-18-upcoming-build-environment-updates/ - -We have `dropped 2.6`_ as a supported version as well since Python 2.6 is no -longer supported by the core development team. - Python 2.7 support is deprecated. All code changes should maintain Python 2.7 compatibility until January 1, 2020. We also explicitly decided to support Python 3 beginning with version @@ -247,7 +239,6 @@ We also explicitly decided to support Python 3 beginning with version .. _prominent: https://docs.djangoproject.com/en/1.9/faq/install/#what-python-version-can-i-use-with-django .. _projects: http://flask.pocoo.org/docs/0.10/python3/ .. _Unicode literal support: https://www.python.org/dev/peps/pep-0414/ -.. _dropped 2.6: https://github.com/googleapis/google-cloud-python/issues/995 ********** Versioning diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index cd011be27a0e..68855abc3f02 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -1,3 +1,19 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2020 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 +# +# https://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. + # Generated by synthtool. DO NOT EDIT! include README.rst LICENSE recursive-include google *.json *.proto diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 6dec2c95b606..9e8112b9998e 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -110,8 +110,7 @@ def system(session): # Install all test dependencies, then install this package into the # virtualenv's dist-packages. - session.install("mock", "pytest") - + session.install("mock", "pytest", "google-cloud-testutils") session.install("-e", "test_utils") session.install("-e", ".") @@ -140,7 +139,7 @@ def docs(session): """Build the docs for this library.""" session.install("-e", ".") - session.install("sphinx", "alabaster", "recommonmark") + session.install("sphinx<3.0.0", "alabaster", "recommonmark") shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( diff --git a/packages/google-cloud-error-reporting/setup.cfg b/packages/google-cloud-error-reporting/setup.cfg index 3bd555500e37..c3a2b39f6528 100644 --- a/packages/google-cloud-error-reporting/setup.cfg +++ b/packages/google-cloud-error-reporting/setup.cfg @@ -1,3 +1,19 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2020 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 +# +# https://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. + # Generated by synthtool. DO NOT EDIT! [bdist_wheel] universal = 1 diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 7b112178dd11..8ea0204fcc27 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,26 +1,32 @@ { - "updateTime": "2020-02-06T11:35:02.101302Z", "sources": [ { "generator": { "name": "artman", - "version": "0.44.4", - "dockerImage": "googleapis/artman@sha256:19e945954fc960a4bdfee6cb34695898ab21a8cf0bac063ee39b91f00a1faec8" + "version": "2.0.0", + "dockerImage": "googleapis/artman@sha256:b3b47805231a305d0f40c4bf069df20f6a2635574e6d4259fac651d3f9f6e098" + } + }, + { + "git": { + "name": ".", + "remote": "git@github.com:googleapis/python-error-reporting.git", + "sha": "ff63d75f476e1eb3ff30f35b70d2dfa77dc17504" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "45d2a569ab526a1fad3720f95eefb1c7330eaada", - "internalRef": "293515675" + "sha": "756b174de4a122461993c1c583345533d819936d", + "internalRef": "308824110" } }, { - "template": { - "name": "python_split_library", - "origin": "synthtool.gcp", - "version": "2019.10.17" + "git": { + "name": "synthtool", + "remote": "https://github.com/googleapis/synthtool.git", + "sha": "01b6f23d24b27878b48667ce597876d66b59780e" } } ], From a72d0aad6acda778b25270e0e6823ad9ab181219 Mon Sep 17 00:00:00 2001 From: Vadym Matsishevskyi <25311427+vam-google@users.noreply.github.com> Date: Fri, 1 May 2020 17:15:41 -0700 Subject: [PATCH 164/467] chore: Migrate python-error-reporting synth.py from artman to bazel (#6) --- .../google-cloud-error-reporting/synth.py | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index f4bbe74b5c79..d554697bdca2 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -16,29 +16,40 @@ import synthtool as s from synthtool import gcp -gapic = gcp.GAPICGenerator() +gapic = gcp.GAPICBazel() common = gcp.CommonTemplates() # ---------------------------------------------------------------------------- # Generate error_reporting GAPIC layer # ---------------------------------------------------------------------------- library = gapic.py_library( - "errorreporting", - "v1beta1", - config_path="/google/devtools/clouderrorreporting" "/artman_errorreporting.yaml", - artman_output_name="error-reporting-v1beta1", + service="errorreporting", + version="v1beta1", + bazel_target="//google/devtools/clouderrorreporting/v1beta1:devtools-clouderrorreporting-v1beta1-py", include_protos=True, ) +s.move(library / "google/cloud/devtools/clouderrorreporting_v1beta1/proto", + "google/cloud/errorreporting_v1beta1/proto") s.move(library / "google/cloud/errorreporting_v1beta1/proto") s.move(library / "google/cloud/errorreporting_v1beta1/gapic") s.move(library / "tests/unit/gapic/v1beta1") s.move(library / "tests/system/gapic/v1beta1") +s.replace( + [ + "google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py", + "google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py", + "google/cloud/errorreporting_v1beta1/gapic/ereport_errors_service_client.py", + ], + "google-cloud-devtools-clouderrorreporting", + "google-cloud-error-reporting", +) + # Fix up imports s.replace( "google/**/*.py", - r"from google.devtools.clouderrorreporting_v1beta1.proto import ", + r"from google.cloud.devtools.clouderrorreporting_v1beta1.proto import ", r"from google.cloud.errorreporting_v1beta1.proto import ", ) From 6c55eafed645b765df25fa9de9c93d15caca8f06 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Sun, 3 May 2020 13:00:04 -0700 Subject: [PATCH 165/467] feat: set release_status to beta (#5) The underlying API is beta, and the surface has been relatively stable for >1 year. --- packages/google-cloud-error-reporting/.repo-metadata.json | 2 +- packages/google-cloud-error-reporting/README.rst | 4 +++- packages/google-cloud-error-reporting/setup.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index 52772e8cdd36..9b36cbe30a8e 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -4,7 +4,7 @@ "product_documentation": "https://cloud.google.com/error-reporting", "client_documentation": "https://googleapis.dev/python/clouderrorreporting/latest", "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", - "release_level": "alpha", + "release_level": "beta", "language": "python", "repo": "googleapis/python-error-reporting", "distribution_name": "google-cloud-error-reporting", diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index bce80fd49e14..2cc4486de582 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -1,7 +1,7 @@ Python Client for Stackdriver Error Reporting ============================================= -|pypi| |versions| +|beta| |pypi| |versions| The Stackdriver `Error Reporting`_ API counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management @@ -16,6 +16,8 @@ to receive email and mobile alerts on new errors. .. _Error Reporting: https://cloud.google.com/error-reporting/ .. _Client Library Documentation: https://googleapis.dev/python/clouderrorreporting/latest .. _Product Documentation: https://cloud.google.com/error-reporting/reference/ +.. |beta| image:: https://img.shields.io/badge/support-beta-orange.svg + :target: https://github.com/googleapis/google-cloud-python/blob/master/README.rst#beta-support .. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index a7bdb4373b78..eeca2731a951 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -27,7 +27,7 @@ # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' # 'Development Status :: 5 - Production/Stable' -release_status = "Development Status :: 3 - Alpha" +release_status = "Development Status :: 4 - Beta" dependencies = ["google-cloud-logging>=1.14.0, <2.0dev"] extras = {} From 450446310fa02ef0f79dfa58e28847714cd79af7 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 12 May 2020 18:14:39 -0700 Subject: [PATCH 166/467] chore: release 0.34.0 (#9) --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index aa3924d1f596..c587c6f8adbc 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [0.34.0](https://www.github.com/googleapis/python-error-reporting/compare/v0.33.0...v0.34.0) (2020-05-03) + + +### Features + +* set release_status to beta ([#5](https://www.github.com/googleapis/python-error-reporting/issues/5)) ([e9361c5](https://www.github.com/googleapis/python-error-reporting/commit/e9361c5e0f427a4796974fd4a3da506324220e9e)) + ## 0.33.0 10-22-2019 12:10 PDT diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index eeca2731a951..845cfc367551 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Stackdriver Error Reporting API client library" -version = "0.33.0" +version = "0.34.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From c2c1c69a6fac24d76b6c62e720b2099fcc3e5856 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 1 Jul 2020 15:03:25 -0700 Subject: [PATCH 167/467] docs: add multiprocessing note (#13) --- packages/google-cloud-error-reporting/.flake8 | 2 + .../google-cloud-error-reporting/.gitignore | 2 + .../.kokoro/publish-docs.sh | 2 - .../.kokoro/release.sh | 2 - .../.kokoro/samples/lint/common.cfg | 34 ++ .../.kokoro/samples/lint/continuous.cfg | 6 + .../.kokoro/samples/lint/periodic.cfg | 6 + .../.kokoro/samples/lint/presubmit.cfg | 6 + .../.kokoro/samples/python3.6/common.cfg | 34 ++ .../.kokoro/samples/python3.6/continuous.cfg | 7 + .../.kokoro/samples/python3.6/periodic.cfg | 6 + .../.kokoro/samples/python3.6/presubmit.cfg | 6 + .../.kokoro/samples/python3.7/common.cfg | 34 ++ .../.kokoro/samples/python3.7/continuous.cfg | 6 + .../.kokoro/samples/python3.7/periodic.cfg | 6 + .../.kokoro/samples/python3.7/presubmit.cfg | 6 + .../.kokoro/samples/python3.8/common.cfg | 34 ++ .../.kokoro/samples/python3.8/continuous.cfg | 6 + .../.kokoro/samples/python3.8/periodic.cfg | 6 + .../.kokoro/samples/python3.8/presubmit.cfg | 6 + .../.kokoro/test-samples.sh | 104 ++++ .../google-cloud-error-reporting/MANIFEST.in | 3 + .../docs/_templates/layout.html | 4 +- .../google-cloud-error-reporting/docs/conf.py | 9 +- .../docs/index.rst | 2 + .../docs/multiprocessing.rst | 7 + .../errorreporting_v1beta1/gapic/enums.py | 8 +- .../gapic/error_group_service_client.py | 85 +-- .../error_group_service_client_config.py | 4 +- .../gapic/error_stats_service_client.py | 234 ++++----- .../error_stats_service_client_config.py | 6 +- .../gapic/report_errors_service_client.py | 25 +- .../error_group_service_grpc_transport.py | 24 +- .../error_stats_service_grpc_transport.py | 30 +- .../report_errors_service_grpc_transport.py | 13 +- .../errorreporting_v1beta1/proto/common.proto | 27 +- .../proto/common_pb2.py | 221 ++++---- .../proto/common_pb2_grpc.py | 1 + .../proto/error_group_service.proto | 36 +- .../proto/error_group_service_pb2.py | 110 ++-- .../proto/error_group_service_pb2_grpc.py | 97 +++- .../proto/error_stats_service.proto | 202 +++++--- .../proto/error_stats_service_pb2.py | 488 +++++++++++------- .../proto/error_stats_service_pb2_grpc.py | 135 ++++- .../proto/report_errors_service.proto | 84 ++- .../proto/report_errors_service_pb2.py | 165 +++--- .../proto/report_errors_service_pb2_grpc.py | 72 ++- .../google-cloud-error-reporting/noxfile.py | 31 +- .../samples/AUTHORING_GUIDE.md | 1 + .../samples/CONTRIBUTING.md | 1 + .../scripts/decrypt-secrets.sh | 33 ++ .../scripts/readme-gen/readme_gen.py | 66 +++ .../readme-gen/templates/README.tmpl.rst | 87 ++++ .../readme-gen/templates/auth.tmpl.rst | 9 + .../templates/auth_api_key.tmpl.rst | 14 + .../templates/install_deps.tmpl.rst | 29 ++ .../templates/install_portaudio.tmpl.rst | 35 ++ .../synth.metadata | 18 +- .../google-cloud-error-reporting/synth.py | 56 +- .../testing/.gitignore | 3 + ...st_system_report_errors_service_v1beta1.py | 2 +- ...test_error_group_service_client_v1beta1.py | 34 +- ...test_error_stats_service_client_v1beta1.py | 88 ++-- ...st_report_errors_service_client_v1beta1.py | 2 +- 64 files changed, 2007 insertions(+), 915 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/lint/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/lint/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/lint/presubmit.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/presubmit.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/presubmit.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/presubmit.cfg create mode 100755 packages/google-cloud-error-reporting/.kokoro/test-samples.sh create mode 100644 packages/google-cloud-error-reporting/docs/multiprocessing.rst create mode 100644 packages/google-cloud-error-reporting/samples/AUTHORING_GUIDE.md create mode 100644 packages/google-cloud-error-reporting/samples/CONTRIBUTING.md create mode 100755 packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh create mode 100644 packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py create mode 100644 packages/google-cloud-error-reporting/scripts/readme-gen/templates/README.tmpl.rst create mode 100644 packages/google-cloud-error-reporting/scripts/readme-gen/templates/auth.tmpl.rst create mode 100644 packages/google-cloud-error-reporting/scripts/readme-gen/templates/auth_api_key.tmpl.rst create mode 100644 packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst create mode 100644 packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_portaudio.tmpl.rst create mode 100644 packages/google-cloud-error-reporting/testing/.gitignore diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index 20fe9bda2ee4..ed9316381c9c 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -21,6 +21,8 @@ exclude = # Exclude generated code. **/proto/** **/gapic/** + **/services/** + **/types/** *_pb2.py # Standard linting exemptions. diff --git a/packages/google-cloud-error-reporting/.gitignore b/packages/google-cloud-error-reporting/.gitignore index 3fb06e09ce74..b87e1ed580d9 100644 --- a/packages/google-cloud-error-reporting/.gitignore +++ b/packages/google-cloud-error-reporting/.gitignore @@ -10,6 +10,7 @@ dist build eggs +.eggs parts bin var @@ -49,6 +50,7 @@ bigquery/docs/generated # Virtual environment env/ coverage.xml +sponge_log.xml # System test environment variables. system_tests/local_test_setup diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh index 465d235bc43a..307339cd0260 100755 --- a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh +++ b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh @@ -13,8 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -#!/bin/bash - set -eo pipefail # Disable buffering, so that the logs stream through. diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh index 7264e127e43e..3a61da134e98 100755 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -13,8 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -#!/bin/bash - set -eo pipefail # Start the releasetool reporter diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg new file mode 100644 index 000000000000..8b918a78c03b --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg @@ -0,0 +1,34 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "lint" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/lint/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/periodic.cfg new file mode 100644 index 000000000000..50fec9649732 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/lint/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/lint/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg new file mode 100644 index 000000000000..cce0189eb640 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg @@ -0,0 +1,34 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.6" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/continuous.cfg new file mode 100644 index 000000000000..7218af1499e5 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/continuous.cfg @@ -0,0 +1,7 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg new file mode 100644 index 000000000000..50fec9649732 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg new file mode 100644 index 000000000000..edcdfb90c23b --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg @@ -0,0 +1,34 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.7" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg new file mode 100644 index 000000000000..50fec9649732 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg new file mode 100644 index 000000000000..7130d05ddfee --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg @@ -0,0 +1,34 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.8" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg new file mode 100644 index 000000000000..50fec9649732 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh new file mode 100755 index 000000000000..7c2e854cd3e7 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh @@ -0,0 +1,104 @@ +#!/bin/bash +# Copyright 2020 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 +# +# https://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. + + +# `-e` enables the script to automatically fail when a command fails +# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero +set -eo pipefail +# Enables `**` to include files nested inside sub-folders +shopt -s globstar + +cd github/python-error-reporting + +# Run periodic samples tests at latest release +if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then + LATEST_RELEASE=$(git describe --abbrev=0 --tags) + git checkout $LATEST_RELEASE +fi + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +# Debug: show build environment +env | grep KOKORO + +# Install nox +python3.6 -m pip install --upgrade --quiet nox + +# Use secrets acessor service account to get secrets +if [[ -f "${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" ]]; then + gcloud auth activate-service-account \ + --key-file="${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" \ + --project="cloud-devrel-kokoro-resources" +fi + +# This script will create 3 files: +# - testing/test-env.sh +# - testing/service-account.json +# - testing/client-secrets.json +./scripts/decrypt-secrets.sh + +source ./testing/test-env.sh +export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/testing/service-account.json + +# For cloud-run session, we activate the service account for gcloud sdk. +gcloud auth activate-service-account \ + --key-file "${GOOGLE_APPLICATION_CREDENTIALS}" + +export GOOGLE_CLIENT_SECRETS=$(pwd)/testing/client-secrets.json + +echo -e "\n******************** TESTING PROJECTS ********************" + +# Switch to 'fail at end' to allow all tests to complete before exiting. +set +e +# Use RTN to return a non-zero value if the test fails. +RTN=0 +ROOT=$(pwd) +# Find all requirements.txt in the samples directory (may break on whitespace). +for file in samples/**/requirements.txt; do + cd "$ROOT" + # Navigate to the project folder. + file=$(dirname "$file") + cd "$file" + + echo "------------------------------------------------------------" + echo "- testing $file" + echo "------------------------------------------------------------" + + # Use nox to execute the tests for the project. + python3.6 -m nox -s "$RUN_TESTS_SESSION" + EXIT=$? + + # If this is a periodic build, send the test log to the Build Cop Bot. + # See https://github.com/googleapis/repo-automation-bots/tree/master/packages/buildcop. + if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then + chmod +x $KOKORO_GFILE_DIR/linux_amd64/buildcop + $KOKORO_GFILE_DIR/linux_amd64/buildcop + fi + + if [[ $EXIT -ne 0 ]]; then + RTN=1 + echo -e "\n Testing failed: Nox returned a non-zero exit code. \n" + else + echo -e "\n Testing completed.\n" + fi + +done +cd "$ROOT" + +# Workaround for Kokoro permissions issue: delete secrets +rm testing/{test-env.sh,client-secrets.json,service-account.json} + +exit "$RTN" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index 68855abc3f02..e9e29d12033d 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -20,3 +20,6 @@ recursive-include google *.json *.proto recursive-include tests * global-exclude *.py[co] global-exclude __pycache__ + +# Exclude scripts for samples readmegen +prune scripts/readme-gen \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/_templates/layout.html b/packages/google-cloud-error-reporting/docs/_templates/layout.html index 228529efe2d2..6316a537f72b 100644 --- a/packages/google-cloud-error-reporting/docs/_templates/layout.html +++ b/packages/google-cloud-error-reporting/docs/_templates/layout.html @@ -21,8 +21,8 @@
- On January 1, 2020 this library will no longer support Python 2 on the latest released version. - Previously released library versions will continue to be available. For more information please + As of January 1, 2020 this library no longer supports Python 2 on the latest released version. + Library versions released prior to that date will continue to be available. For more information please visit Python 2 support on Google Cloud.
{% block body %} {% endblock %} diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index be56ae5582ef..af91f6e56e0c 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -38,21 +38,18 @@ "sphinx.ext.napoleon", "sphinx.ext.todo", "sphinx.ext.viewcode", + "recommonmark", ] # autodoc/autosummary flags autoclass_content = "both" -autodoc_default_flags = ["members"] +autodoc_default_options = {"members": True} autosummary_generate = True # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] -# Allow markdown includes (so releases.md can include CHANGLEOG.md) -# http://www.sphinx-doc.org/en/master/markdown.html -source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} - # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] @@ -340,7 +337,7 @@ intersphinx_mapping = { "python": ("http://python.readthedocs.org/en/latest/", None), "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), + "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None,), "grpc": ("https://grpc.io/grpc/python/", None), } diff --git a/packages/google-cloud-error-reporting/docs/index.rst b/packages/google-cloud-error-reporting/docs/index.rst index 3fd35c32a475..f9772f3b4e24 100644 --- a/packages/google-cloud-error-reporting/docs/index.rst +++ b/packages/google-cloud-error-reporting/docs/index.rst @@ -1,5 +1,7 @@ .. include:: README.rst +.. include:: multiprocessing.rst + Usage Documentation ------------------- diff --git a/packages/google-cloud-error-reporting/docs/multiprocessing.rst b/packages/google-cloud-error-reporting/docs/multiprocessing.rst new file mode 100644 index 000000000000..1cb29d4ca967 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/multiprocessing.rst @@ -0,0 +1,7 @@ +.. note:: + + Because this client uses :mod:`grpcio` library, it is safe to + share instances across threads. In multiprocessing scenarios, the best + practice is to create client instances *after* the invocation of + :func:`os.fork` by :class:`multiprocessing.Pool` or + :class:`multiprocessing.Process`. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py index 890ea7e7e4c2..52002c1710dc 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -45,9 +45,9 @@ class TimedCountAlignment(enum.IntEnum): Attributes: ERROR_COUNT_ALIGNMENT_UNSPECIFIED (int): No alignment specified. - ALIGNMENT_EQUAL_ROUNDED (int): The time periods shall be consecutive, have width equal to the requested - duration, and be aligned at the ``alignment_time`` provided in the - request. The ``alignment_time`` does not have to be inside the query + ALIGNMENT_EQUAL_ROUNDED (int): The time periods shall be consecutive, have width equal to the + requested duration, and be aligned at the ``alignment_time`` provided in + the request. The ``alignment_time`` does not have to be inside the query period but even if it is outside, only time periods are returned which overlap with the query period. A rounded alignment will typically result in a different size of the first or the last time period. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py index af60931f74e9..98bfceef218f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -40,7 +40,7 @@ _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( - "google-cloud-error-reporting" + "google-cloud-error-reporting", ).version @@ -76,9 +76,9 @@ def from_service_account_file(cls, filename, *args, **kwargs): @classmethod def group_path(cls, project, group): - """Return a fully-qualified group string.""" + """Return a fully-qualified error_group string.""" return google.api_core.path_template.expand( - "projects/{project}/groups/{group}", project=project, group=group + "projects/{project}/groups/{group}", project=project, group=group, ) def __init__( @@ -168,12 +168,12 @@ def __init__( self.transport = transport else: self.transport = error_group_service_grpc_transport.ErrorGroupServiceGrpcTransport( - address=api_endpoint, channel=channel, credentials=credentials + address=api_endpoint, channel=channel, credentials=credentials, ) if client_info is None: client_info = google.api_core.gapic_v1.client_info.ClientInfo( - gapic_version=_GAPIC_LIBRARY_VERSION + gapic_version=_GAPIC_LIBRARY_VERSION, ) else: client_info.gapic_version = _GAPIC_LIBRARY_VERSION @@ -184,7 +184,7 @@ def __init__( # (Ordinarily, these are the defaults specified in the `*_config.py` # file next to this one.) self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( - client_config["interfaces"][self._INTERFACE_NAME] + client_config["interfaces"][self._INTERFACE_NAME], ) # Save a dictionary of cached API call functions. @@ -194,31 +194,32 @@ def __init__( self._inner_api_calls = {} # Service calls - def get_group( + def update_group( self, - group_name, + group, retry=google.api_core.gapic_v1.method.DEFAULT, timeout=google.api_core.gapic_v1.method.DEFAULT, metadata=None, ): """ - Get the specified group. + Replace the data for the specified group. + Fails if the group does not exist. Example: >>> from google.cloud import errorreporting_v1beta1 >>> >>> client = errorreporting_v1beta1.ErrorGroupServiceClient() >>> - >>> group_name = client.group_path('[PROJECT]', '[GROUP]') + >>> # TODO: Initialize `group`: + >>> group = {} >>> - >>> response = client.get_group(group_name) + >>> response = client.update_group(group) Args: - group_name (str): [Required] The group resource name. Written as - projects/projectID/groups/group\_name. Call groupStats.list to return a - list of groups belonging to this project. + group (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ErrorGroup]): Required. The group which replaces the resource on the server. - Example: projects/my-project-123/groups/my-group + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` retry (Optional[google.api_core.retry.Retry]): A retry object used to retry requests. If ``None`` is specified, requests will be retried using a default configuration. @@ -239,22 +240,22 @@ def get_group( ValueError: If the parameters are invalid. """ # Wrap the transport method to add retry and timeout logic. - if "get_group" not in self._inner_api_calls: + if "update_group" not in self._inner_api_calls: self._inner_api_calls[ - "get_group" + "update_group" ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.get_group, - default_retry=self._method_configs["GetGroup"].retry, - default_timeout=self._method_configs["GetGroup"].timeout, + self.transport.update_group, + default_retry=self._method_configs["UpdateGroup"].retry, + default_timeout=self._method_configs["UpdateGroup"].timeout, client_info=self._client_info, ) - request = error_group_service_pb2.GetGroupRequest(group_name=group_name) + request = error_group_service_pb2.UpdateGroupRequest(group=group,) if metadata is None: metadata = [] metadata = list(metadata) try: - routing_header = [("group_name", group_name)] + routing_header = [("group.name", group.name)] except AttributeError: pass else: @@ -263,36 +264,36 @@ def get_group( ) metadata.append(routing_metadata) - return self._inner_api_calls["get_group"]( + return self._inner_api_calls["update_group"]( request, retry=retry, timeout=timeout, metadata=metadata ) - def update_group( + def get_group( self, - group, + group_name, retry=google.api_core.gapic_v1.method.DEFAULT, timeout=google.api_core.gapic_v1.method.DEFAULT, metadata=None, ): """ - Replace the data for the specified group. - Fails if the group does not exist. + Get the specified group. Example: >>> from google.cloud import errorreporting_v1beta1 >>> >>> client = errorreporting_v1beta1.ErrorGroupServiceClient() >>> - >>> # TODO: Initialize `group`: - >>> group = {} + >>> group_name = client.group_path('[PROJECT]', '[GROUP]') >>> - >>> response = client.update_group(group) + >>> response = client.get_group(group_name) Args: - group (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ErrorGroup]): [Required] The group which replaces the resource on the server. + group_name (str): The group resource name. Written as + ``projects/{projectID}/groups/{group_name}``. Call + ```groupStats.list`` `__ + to return a list of groups belonging to this project. - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` + Example: ``projects/my-project-123/groups/my-group`` retry (Optional[google.api_core.retry.Retry]): A retry object used to retry requests. If ``None`` is specified, requests will be retried using a default configuration. @@ -313,22 +314,22 @@ def update_group( ValueError: If the parameters are invalid. """ # Wrap the transport method to add retry and timeout logic. - if "update_group" not in self._inner_api_calls: + if "get_group" not in self._inner_api_calls: self._inner_api_calls[ - "update_group" + "get_group" ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.update_group, - default_retry=self._method_configs["UpdateGroup"].retry, - default_timeout=self._method_configs["UpdateGroup"].timeout, + self.transport.get_group, + default_retry=self._method_configs["GetGroup"].retry, + default_timeout=self._method_configs["GetGroup"].timeout, client_info=self._client_info, ) - request = error_group_service_pb2.UpdateGroupRequest(group=group) + request = error_group_service_pb2.GetGroupRequest(group_name=group_name,) if metadata is None: metadata = [] metadata = list(metadata) try: - routing_header = [("group.name", group.name)] + routing_header = [("group_name", group_name)] except AttributeError: pass else: @@ -337,6 +338,6 @@ def update_group( ) metadata.append(routing_metadata) - return self._inner_api_calls["update_group"]( + return self._inner_api_calls["get_group"]( request, retry=retry, timeout=timeout, metadata=metadata ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py index e70ec324be62..dee3d0d865ed 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py @@ -17,12 +17,12 @@ } }, "methods": { - "GetGroup": { + "UpdateGroup": { "timeout_millis": 60000, "retry_codes_name": "idempotent", "retry_params_name": "default", }, - "UpdateGroup": { + "GetGroup": { "timeout_millis": 60000, "retry_codes_name": "idempotent", "retry_params_name": "default", diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py index 692f0329e8de..88a5a29c5188 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -46,7 +46,7 @@ _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( - "google-cloud-error-reporting" + "google-cloud-error-reporting", ).version @@ -87,7 +87,7 @@ def from_service_account_file(cls, filename, *args, **kwargs): def project_path(cls, project): """Return a fully-qualified project string.""" return google.api_core.path_template.expand( - "projects/{project}", project=project + "projects/{project}", project=project, ) def __init__( @@ -177,12 +177,12 @@ def __init__( self.transport = transport else: self.transport = error_stats_service_grpc_transport.ErrorStatsServiceGrpcTransport( - address=api_endpoint, channel=channel, credentials=credentials + address=api_endpoint, channel=channel, credentials=credentials, ) if client_info is None: client_info = google.api_core.gapic_v1.client_info.ClientInfo( - gapic_version=_GAPIC_LIBRARY_VERSION + gapic_version=_GAPIC_LIBRARY_VERSION, ) else: client_info.gapic_version = _GAPIC_LIBRARY_VERSION @@ -193,7 +193,7 @@ def __init__( # (Ordinarily, these are the defaults specified in the `*_config.py` # file next to this one.) self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( - client_config["interfaces"][self._INTERFACE_NAME] + client_config["interfaces"][self._INTERFACE_NAME], ) # Save a dictionary of cached API call functions. @@ -203,10 +203,84 @@ def __init__( self._inner_api_calls = {} # Service calls + def delete_events( + self, + project_name, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None, + ): + """ + Deletes all error events of a given project. + + Example: + >>> from google.cloud import errorreporting_v1beta1 + >>> + >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() + >>> + >>> project_name = client.project_path('[PROJECT]') + >>> + >>> response = client.delete_events(project_name) + + Args: + project_name (str): Required. The resource name of the Google Cloud Platform project. + Written as ``projects/`` plus the `Google Cloud Platform project + ID `__. Example: + ``projects/my-project-123``. + retry (Optional[google.api_core.retry.Retry]): A retry object used + to retry requests. If ``None`` is specified, requests will + be retried using a default configuration. + timeout (Optional[float]): The amount of time, in seconds, to wait + for the request to complete. Note that if ``retry`` is + specified, the timeout applies to each individual attempt. + metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata + that is provided to the method. + + Returns: + A :class:`~google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse` instance. + + Raises: + google.api_core.exceptions.GoogleAPICallError: If the request + failed for any reason. + google.api_core.exceptions.RetryError: If the request failed due + to a retryable error and retry attempts failed. + ValueError: If the parameters are invalid. + """ + # Wrap the transport method to add retry and timeout logic. + if "delete_events" not in self._inner_api_calls: + self._inner_api_calls[ + "delete_events" + ] = google.api_core.gapic_v1.method.wrap_method( + self.transport.delete_events, + default_retry=self._method_configs["DeleteEvents"].retry, + default_timeout=self._method_configs["DeleteEvents"].timeout, + client_info=self._client_info, + ) + + request = error_stats_service_pb2.DeleteEventsRequest( + project_name=project_name, + ) + if metadata is None: + metadata = [] + metadata = list(metadata) + try: + routing_header = [("project_name", project_name)] + except AttributeError: + pass + else: + routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( + routing_header + ) + metadata.append(routing_metadata) + + return self._inner_api_calls["delete_events"]( + request, retry=retry, timeout=timeout, metadata=metadata + ) + def list_group_stats( self, project_name, - time_range, + time_range=None, # DO NOT MOVE, see synth.py group_id=None, service_filter=None, timed_count_duration=None, @@ -218,6 +292,7 @@ def list_group_stats( timeout=google.api_core.gapic_v1.method.DEFAULT, metadata=None, ): + """ Lists the specified groups. @@ -228,11 +303,8 @@ def list_group_stats( >>> >>> project_name = client.project_path('[PROJECT]') >>> - >>> # TODO: Initialize `time_range`: - >>> time_range = {} - >>> >>> # Iterate over all results - >>> for element in client.list_group_stats(project_name, time_range): + >>> for element in client.list_group_stats(project_name): ... # process element ... pass >>> @@ -240,46 +312,48 @@ def list_group_stats( >>> # Alternatively: >>> >>> # Iterate over results one page at a time - >>> for page in client.list_group_stats(project_name, time_range).pages: + >>> for page in client.list_group_stats(project_name).pages: ... for element in page: ... # process element ... pass Args: - project_name (str): [Required] The resource name of the Google Cloud Platform project. - Written as projects/ plus the Google Cloud Platform project ID. - - Example: projects/my-project-123. - time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): [Optional] List data for the given time range. If not set a default time - range is used. The field time\_range\_begin in the response will specify - the beginning of this time range. Only ErrorGroupStats with a non-zero - count in the given time range are returned, unless the request contains - an explicit group\_id list. If a group\_id list is given, also - ErrorGroupStats with zero occurrences are returned. + project_name (str): Required. The resource name of the Google Cloud Platform project. Written + as projects/ plus the + Google Cloud + Platform project ID. - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` - group_id (list[str]): [Optional] List all ErrorGroupStats with these IDs. - service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): [Optional] List only ErrorGroupStats which belong to a service context - that matches the filter. Data for all service contexts is returned if - this field is not specified. + Example: projects/my-project-123. + group_id (list[str]): Optional. List all ErrorGroupStats with these IDs. + service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): Optional. List only ErrorGroupStats which belong to a service + context that matches the filter. + Data for all service contexts is returned if this field is not specified. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter` - timed_count_duration (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Duration]): [Optional] The preferred duration for a single returned ``TimedCount``. - If not set, no timed counts are returned. + time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): Optional. List data for the given time range. If not set, a default + time range is used. The field time_range_begin in the response will + specify the beginning of this time range. Only ErrorGroupStats with a + non-zero count in the given time range are returned, unless the request + contains an explicit group_id list. If a group_id list is given, also + ErrorGroupStats with zero occurrences are returned. + + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` + timed_count_duration (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Duration]): Optional. The preferred duration for a single returned + ``TimedCount``. If not set, no timed counts are returned. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.Duration` - alignment (~google.cloud.errorreporting_v1beta1.types.TimedCountAlignment): [Optional] The alignment of the timed counts to be returned. Default is - ``ALIGNMENT_EQUAL_AT_END``. - alignment_time (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Timestamp]): [Optional] Time where the timed counts shall be aligned if rounded + alignment (~google.cloud.errorreporting_v1beta1.types.TimedCountAlignment): Optional. The alignment of the timed counts to be returned. Default + is ``ALIGNMENT_EQUAL_AT_END``. + alignment_time (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Timestamp]): Optional. Time where the timed counts shall be aligned if rounded alignment is chosen. Default is 00:00 UTC. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.Timestamp` - order (~google.cloud.errorreporting_v1beta1.types.ErrorGroupOrder): [Optional] The sort order in which the results are returned. Default is - ``COUNT_DESC``. + order (~google.cloud.errorreporting_v1beta1.types.ErrorGroupOrder): Optional. The sort order in which the results are returned. Default + is ``COUNT_DESC``. page_size (int): The maximum number of resources contained in the underlying API response. If page streaming is performed per- resource, this parameter does not affect the return value. If page @@ -320,9 +394,9 @@ def list_group_stats( request = error_stats_service_pb2.ListGroupStatsRequest( project_name=project_name, - time_range=time_range, group_id=group_id, service_filter=service_filter, + time_range=time_range, timed_count_duration=timed_count_duration, alignment=alignment, alignment_time=alignment_time, @@ -396,20 +470,20 @@ def list_events( ... pass Args: - project_name (str): [Required] The resource name of the Google Cloud Platform project. + project_name (str): Required. The resource name of the Google Cloud Platform project. Written as ``projects/`` plus the `Google Cloud Platform project ID `__. Example: ``projects/my-project-123``. - group_id (str): [Required] The group for which events shall be returned. - service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): [Optional] List only ErrorGroups which belong to a service context that - matches the filter. Data for all service contexts is returned if this - field is not specified. + group_id (str): Required. The group for which events shall be returned. + service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): Optional. List only ErrorGroups which belong to a service context that + matches the filter. + Data for all service contexts is returned if this field is not specified. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter` - time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): [Optional] List only data for the given time range. If not set a default - time range is used. The field time\_range\_begin in the response will - specify the beginning of this time range. + time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): Optional. List only data for the given time range. If not set a + default time range is used. The field time_range_begin in the response + will specify the beginning of this time range. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` @@ -485,75 +559,3 @@ def list_events( response_token_field="next_page_token", ) return iterator - - def delete_events( - self, - project_name, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Deletes all error events of a given project. - - Example: - >>> from google.cloud import errorreporting_v1beta1 - >>> - >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() - >>> - >>> project_name = client.project_path('[PROJECT]') - >>> - >>> response = client.delete_events(project_name) - - Args: - project_name (str): [Required] The resource name of the Google Cloud Platform project. - Written as ``projects/`` plus the `Google Cloud Platform project - ID `__. Example: - ``projects/my-project-123``. - retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will - be retried using a default configuration. - timeout (Optional[float]): The amount of time, in seconds, to wait - for the request to complete. Note that if ``retry`` is - specified, the timeout applies to each individual attempt. - metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata - that is provided to the method. - - Returns: - A :class:`~google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse` instance. - - Raises: - google.api_core.exceptions.GoogleAPICallError: If the request - failed for any reason. - google.api_core.exceptions.RetryError: If the request failed due - to a retryable error and retry attempts failed. - ValueError: If the parameters are invalid. - """ - # Wrap the transport method to add retry and timeout logic. - if "delete_events" not in self._inner_api_calls: - self._inner_api_calls[ - "delete_events" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.delete_events, - default_retry=self._method_configs["DeleteEvents"].retry, - default_timeout=self._method_configs["DeleteEvents"].timeout, - client_info=self._client_info, - ) - - request = error_stats_service_pb2.DeleteEventsRequest(project_name=project_name) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("project_name", project_name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - return self._inner_api_calls["delete_events"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py index fead94c5b733..0af98e64b9ab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py @@ -17,17 +17,17 @@ } }, "methods": { - "ListGroupStats": { + "DeleteEvents": { "timeout_millis": 60000, "retry_codes_name": "idempotent", "retry_params_name": "default", }, - "ListEvents": { + "ListGroupStats": { "timeout_millis": 60000, "retry_codes_name": "idempotent", "retry_params_name": "default", }, - "DeleteEvents": { + "ListEvents": { "timeout_millis": 60000, "retry_codes_name": "idempotent", "retry_params_name": "default", diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py index 7ad37cc1cd36..9d35c6b62906 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,7 +48,7 @@ _GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( - "google-cloud-error-reporting" + "google-cloud-error-reporting", ).version @@ -86,7 +86,7 @@ def from_service_account_file(cls, filename, *args, **kwargs): def project_path(cls, project): """Return a fully-qualified project string.""" return google.api_core.path_template.expand( - "projects/{project}", project=project + "projects/{project}", project=project, ) def __init__( @@ -176,12 +176,12 @@ def __init__( self.transport = transport else: self.transport = report_errors_service_grpc_transport.ReportErrorsServiceGrpcTransport( - address=api_endpoint, channel=channel, credentials=credentials + address=api_endpoint, channel=channel, credentials=credentials, ) if client_info is None: client_info = google.api_core.gapic_v1.client_info.ClientInfo( - gapic_version=_GAPIC_LIBRARY_VERSION + gapic_version=_GAPIC_LIBRARY_VERSION, ) else: client_info.gapic_version = _GAPIC_LIBRARY_VERSION @@ -192,7 +192,7 @@ def __init__( # (Ordinarily, these are the defaults specified in the `*_config.py` # file next to this one.) self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( - client_config["interfaces"][self._INTERFACE_NAME] + client_config["interfaces"][self._INTERFACE_NAME], ) # Save a dictionary of cached API call functions. @@ -213,6 +213,13 @@ def report_error_event( """ Report an individual error event. + This endpoint accepts **either** an OAuth token, **or** an `API + key `__ for + authentication. To use an API key, append it to the URL as the value of + a ``key`` parameter. For example: + + ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + Example: >>> from google.cloud import errorreporting_v1beta1 >>> @@ -226,11 +233,11 @@ def report_error_event( >>> response = client.report_error_event(project_name, event) Args: - project_name (str): [Required] The resource name of the Google Cloud Platform project. + project_name (str): Required. The resource name of the Google Cloud Platform project. Written as ``projects/`` plus the `Google Cloud Platform project ID `__. Example: ``projects/my-project-123``. - event (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent]): [Required] The error event to be reported. + event (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent]): Required. The error event to be reported. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent` @@ -265,7 +272,7 @@ def report_error_event( ) request = report_errors_service_pb2.ReportErrorEventRequest( - project_name=project_name, event=event + project_name=project_name, event=event, ) if metadata is None: metadata = [] diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py index cde299b8edb0..b877baf4e84d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -56,7 +56,7 @@ def __init__( # exception (channels come with credentials baked in already). if channel is not None and credentials is not None: raise ValueError( - "The `channel` and `credentials` arguments are mutually " "exclusive." + "The `channel` and `credentials` arguments are mutually " "exclusive.", ) # Create the channel. @@ -77,7 +77,7 @@ def __init__( self._stubs = { "error_group_service_stub": error_group_service_pb2_grpc.ErrorGroupServiceStub( channel - ) + ), } @classmethod @@ -116,28 +116,28 @@ def channel(self): return self._channel @property - def get_group(self): - """Return the gRPC stub for :meth:`ErrorGroupServiceClient.get_group`. + def update_group(self): + """Return the gRPC stub for :meth:`ErrorGroupServiceClient.update_group`. - Get the specified group. + Replace the data for the specified group. + Fails if the group does not exist. Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a deserialized response object. """ - return self._stubs["error_group_service_stub"].GetGroup + return self._stubs["error_group_service_stub"].UpdateGroup @property - def update_group(self): - """Return the gRPC stub for :meth:`ErrorGroupServiceClient.update_group`. + def get_group(self): + """Return the gRPC stub for :meth:`ErrorGroupServiceClient.get_group`. - Replace the data for the specified group. - Fails if the group does not exist. + Get the specified group. Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a deserialized response object. """ - return self._stubs["error_group_service_stub"].UpdateGroup + return self._stubs["error_group_service_stub"].GetGroup diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py index 2ef5f2126019..f1e15226a4d3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -56,7 +56,7 @@ def __init__( # exception (channels come with credentials baked in already). if channel is not None and credentials is not None: raise ValueError( - "The `channel` and `credentials` arguments are mutually " "exclusive." + "The `channel` and `credentials` arguments are mutually " "exclusive.", ) # Create the channel. @@ -77,7 +77,7 @@ def __init__( self._stubs = { "error_stats_service_stub": error_stats_service_pb2_grpc.ErrorStatsServiceStub( channel - ) + ), } @classmethod @@ -116,40 +116,40 @@ def channel(self): return self._channel @property - def list_group_stats(self): - """Return the gRPC stub for :meth:`ErrorStatsServiceClient.list_group_stats`. + def delete_events(self): + """Return the gRPC stub for :meth:`ErrorStatsServiceClient.delete_events`. - Lists the specified groups. + Deletes all error events of a given project. Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a deserialized response object. """ - return self._stubs["error_stats_service_stub"].ListGroupStats + return self._stubs["error_stats_service_stub"].DeleteEvents @property - def list_events(self): - """Return the gRPC stub for :meth:`ErrorStatsServiceClient.list_events`. + def list_group_stats(self): + """Return the gRPC stub for :meth:`ErrorStatsServiceClient.list_group_stats`. - Lists the specified events. + Lists the specified groups. Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a deserialized response object. """ - return self._stubs["error_stats_service_stub"].ListEvents + return self._stubs["error_stats_service_stub"].ListGroupStats @property - def delete_events(self): - """Return the gRPC stub for :meth:`ErrorStatsServiceClient.delete_events`. + def list_events(self): + """Return the gRPC stub for :meth:`ErrorStatsServiceClient.list_events`. - Deletes all error events of a given project. + Lists the specified events. Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a deserialized response object. """ - return self._stubs["error_stats_service_stub"].DeleteEvents + return self._stubs["error_stats_service_stub"].ListEvents diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py index e367e49c4c39..6a97b861c6c1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -56,7 +56,7 @@ def __init__( # exception (channels come with credentials baked in already). if channel is not None and credentials is not None: raise ValueError( - "The `channel` and `credentials` arguments are mutually " "exclusive." + "The `channel` and `credentials` arguments are mutually " "exclusive.", ) # Create the channel. @@ -77,7 +77,7 @@ def __init__( self._stubs = { "report_errors_service_stub": report_errors_service_pb2_grpc.ReportErrorsServiceStub( channel - ) + ), } @classmethod @@ -121,6 +121,13 @@ def report_error_event(self): Report an individual error event. + This endpoint accepts **either** an OAuth token, **or** an `API + key `__ for + authentication. To use an API key, append it to the URL as the value of + a ``key`` parameter. For example: + + ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + Returns: Callable: A callable which accepts the appropriate deserialized request object and returns a diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto index 132f1a646f87..7a1d200370da 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto @@ -1,4 +1,4 @@ -// Copyright 2016 Google Inc. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,18 +17,25 @@ syntax = "proto3"; package google.devtools.clouderrorreporting.v1beta1; import "google/api/annotations.proto"; -import "google/api/monitored_resource.proto"; +import "google/api/resource.proto"; import "google/protobuf/timestamp.proto"; +option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; option java_multiple_files = true; option java_outer_classname = "CommonProto"; option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; +option ruby_package = "Google::Cloud::ErrorReporting::V1beta1"; // Description of a group of similar error events. message ErrorGroup { + option (google.api.resource) = { + type: "clouderrorreporting.googleapis.com/ErrorGroup" + pattern: "projects/{project}/groups/{group}" + }; + // The group resource name. // Example: projects/my-project-123/groups/my-groupid string name = 1; @@ -44,7 +51,7 @@ message ErrorGroup { // Information related to tracking the progress on resolving the error. message TrackingIssue { // A URL pointing to a related entry in an issue tracking system. - // Example: https://github.com/user/project/issues/4 + // Example: `https://github.com/user/project/issues/4` string url = 1; } @@ -79,6 +86,8 @@ message ServiceContext { // Represents the source code version that the developer provided, // which could represent a version label or a Git SHA-1 hash, for example. + // For App Engine standard environment, the version is set to the version of + // the app. string version = 3; // Type of the MonitoredResource. List of possible values: @@ -112,8 +121,7 @@ message ErrorContext { // report the error, usually the place where it was logged. // For a logged exception this would be the source line where the // exception is logged, usually close to the place where it was - // caught. This value is in contrast to `Exception.cause_location`, - // which describes the source line where the exception was thrown. + // caught. SourceLocation report_location = 3; } @@ -144,11 +152,10 @@ message HttpRequestContext { string remote_ip = 6; } -// Indicates a location in the source code of the service for which -// errors are reported. -// This data should be provided by the application when reporting an error, -// unless the error report has been generated automatically from Google App -// Engine logs. All fields are optional. +// Indicates a location in the source code of the service for which errors are +// reported. `functionName` must be provided by the application when reporting +// an error, unless the error report contains a `message` with a supported +// exception stack trace. All fields are optional for the later case. message SourceLocation { // The source code filename, which can include a truncated relative // path, or a full path from a production machine. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py index c9ebc4c6d279..76efff196888 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py @@ -1,10 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/devtools/clouderrorreporting_v1beta1/proto/common.proto - -import sys - -_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode("latin1")) +# source: google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -16,25 +13,20 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import ( - monitored_resource_pb2 as google_dot_api_dot_monitored__resource__pb2, -) +from google.api import resource_pb2 as google_dot_api_dot_resource__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 DESCRIPTOR = _descriptor.FileDescriptor( - name="google/devtools/clouderrorreporting_v1beta1/proto/common.proto", + name="google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto", package="google.devtools.clouderrorreporting.v1beta1", syntax="proto3", - serialized_options=_b( - "\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" - ), - serialized_pb=_b( - '\n>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a#google/api/monitored_resource.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x81\x01\n\nErrorGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12S\n\x0ftracking_issues\x18\x03 \x03(\x0b\x32:.google.devtools.clouderrorreporting.v1beta1.TrackingIssue"\x1c\n\rTrackingIssue\x12\x0b\n\x03url\x18\x01 \x01(\t"\xef\x01\n\nErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext"I\n\x0eServiceContext\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t"\xc9\x01\n\x0c\x45rrorContext\x12U\n\x0chttp_request\x18\x01 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.HttpRequestContext\x12\x0c\n\x04user\x18\x02 \x01(\t\x12T\n\x0freport_location\x18\x03 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.SourceLocation"\x88\x01\n\x12HttpRequestContext\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x12\n\nuser_agent\x18\x03 \x01(\t\x12\x10\n\x08referrer\x18\x04 \x01(\t\x12\x1c\n\x14response_status_code\x18\x05 \x01(\x05\x12\x11\n\tremote_ip\x18\x06 \x01(\t"O\n\x0eSourceLocation\x12\x11\n\tfile_path\x18\x01 \x01(\t\x12\x13\n\x0bline_number\x18\x02 \x01(\x05\x12\x15\n\rfunction_name\x18\x04 \x01(\tB\xec\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x0b\x43ommonProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3' - ), + serialized_options=b"\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\370\001\001\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1\352\002&Google::Cloud::ErrorReporting::V1beta1", + create_key=_descriptor._internal_create_key, + serialized_pb=b'\nDgoogle/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x19google/api/resource.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xd8\x01\n\nErrorGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12S\n\x0ftracking_issues\x18\x03 \x03(\x0b\x32:.google.devtools.clouderrorreporting.v1beta1.TrackingIssue:U\xea\x41R\n-clouderrorreporting.googleapis.com/ErrorGroup\x12!projects/{project}/groups/{group}"\x1c\n\rTrackingIssue\x12\x0b\n\x03url\x18\x01 \x01(\t"\xef\x01\n\nErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext"I\n\x0eServiceContext\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t"\xc9\x01\n\x0c\x45rrorContext\x12U\n\x0chttp_request\x18\x01 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.HttpRequestContext\x12\x0c\n\x04user\x18\x02 \x01(\t\x12T\n\x0freport_location\x18\x03 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.SourceLocation"\x88\x01\n\x12HttpRequestContext\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x12\n\nuser_agent\x18\x03 \x01(\t\x12\x10\n\x08referrer\x18\x04 \x01(\t\x12\x1c\n\x14response_status_code\x18\x05 \x01(\x05\x12\x11\n\tremote_ip\x18\x06 \x01(\t"O\n\x0eSourceLocation\x12\x11\n\tfile_path\x18\x01 \x01(\t\x12\x13\n\x0bline_number\x18\x02 \x01(\x05\x12\x15\n\rfunction_name\x18\x04 \x01(\tB\x98\x02\n/com.google.devtools.clouderrorreporting.v1beta1B\x0b\x43ommonProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xf8\x01\x01\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1\xea\x02&Google::Cloud::ErrorReporting::V1beta1b\x06proto3', dependencies=[ google_dot_api_dot_annotations__pb2.DESCRIPTOR, - google_dot_api_dot_monitored__resource__pb2.DESCRIPTOR, + google_dot_api_dot_resource__pb2.DESCRIPTOR, google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, ], ) @@ -46,6 +38,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="name", @@ -56,7 +49,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -64,6 +57,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="group_id", @@ -74,7 +68,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -82,6 +76,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="tracking_issues", @@ -100,18 +95,19 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], nested_types=[], enum_types=[], - serialized_options=None, + serialized_options=b"\352AR\n-clouderrorreporting.googleapis.com/ErrorGroup\022!projects/{project}/groups/{group}", is_extendable=False, syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=212, - serialized_end=341, + serialized_start=208, + serialized_end=424, ) @@ -121,6 +117,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="url", @@ -131,7 +128,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -139,7 +136,8 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, - ) + create_key=_descriptor._internal_create_key, + ), ], extensions=[], nested_types=[], @@ -149,8 +147,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=343, - serialized_end=371, + serialized_start=426, + serialized_end=454, ) @@ -160,6 +158,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="event_time", @@ -178,6 +177,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="service_context", @@ -196,6 +196,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="message", @@ -206,7 +207,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -214,6 +215,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="context", @@ -232,6 +234,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -242,8 +245,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=374, - serialized_end=613, + serialized_start=457, + serialized_end=696, ) @@ -253,6 +256,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="service", @@ -263,7 +267,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -271,6 +275,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="version", @@ -281,7 +286,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -289,6 +294,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="resource_type", @@ -299,7 +305,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -307,6 +313,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -317,8 +324,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=615, - serialized_end=688, + serialized_start=698, + serialized_end=771, ) @@ -328,6 +335,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="http_request", @@ -346,6 +354,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="user", @@ -356,7 +365,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -364,6 +373,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="report_location", @@ -382,6 +392,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -392,8 +403,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=691, - serialized_end=892, + serialized_start=774, + serialized_end=975, ) @@ -403,6 +414,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="method", @@ -413,7 +425,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -421,6 +433,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="url", @@ -431,7 +444,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -439,6 +452,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="user_agent", @@ -449,7 +463,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -457,6 +471,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="referrer", @@ -467,7 +482,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -475,6 +490,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="response_status_code", @@ -493,6 +509,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="remote_ip", @@ -503,7 +520,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -511,6 +528,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -521,8 +539,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=895, - serialized_end=1031, + serialized_start=978, + serialized_end=1114, ) @@ -532,6 +550,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="file_path", @@ -542,7 +561,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -550,6 +569,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="line_number", @@ -568,6 +588,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="function_name", @@ -578,7 +599,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -586,6 +607,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -596,8 +618,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=1033, - serialized_end=1112, + serialized_start=1116, + serialized_end=1195, ) _ERRORGROUP.fields_by_name["tracking_issues"].message_type = _TRACKINGISSUE @@ -620,11 +642,10 @@ ErrorGroup = _reflection.GeneratedProtocolMessageType( "ErrorGroup", (_message.Message,), - dict( - DESCRIPTOR=_ERRORGROUP, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - __doc__="""Description of a group of similar error events. - + { + "DESCRIPTOR": _ERRORGROUP, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", + "__doc__": """Description of a group of similar error events. Attributes: name: @@ -638,37 +659,35 @@ Associated tracking issues. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroup) - ), + }, ) _sym_db.RegisterMessage(ErrorGroup) TrackingIssue = _reflection.GeneratedProtocolMessageType( "TrackingIssue", (_message.Message,), - dict( - DESCRIPTOR=_TRACKINGISSUE, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - __doc__="""Information related to tracking the progress on resolving the error. - + { + "DESCRIPTOR": _TRACKINGISSUE, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", + "__doc__": """Information related to tracking the progress on resolving the error. Attributes: url: A URL pointing to a related entry in an issue tracking system. - Example: https://github.com/user/project/issues/4 + Example: ``https://github.com/user/project/issues/4`` """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TrackingIssue) - ), + }, ) _sym_db.RegisterMessage(TrackingIssue) ErrorEvent = _reflection.GeneratedProtocolMessageType( "ErrorEvent", (_message.Message,), - dict( - DESCRIPTOR=_ERROREVENT, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - __doc__="""An error event which is returned by the Error Reporting system. - + { + "DESCRIPTOR": _ERROREVENT, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", + "__doc__": """An error event which is returned by the Error Reporting system. Attributes: event_time: @@ -683,19 +702,18 @@ Data about the context in which the error occurred. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorEvent) - ), + }, ) _sym_db.RegisterMessage(ErrorEvent) ServiceContext = _reflection.GeneratedProtocolMessageType( "ServiceContext", (_message.Message,), - dict( - DESCRIPTOR=_SERVICECONTEXT, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - __doc__="""Describes a running service that sends errors. Its version changes over - time and multiple versions can run in parallel. - + { + "DESCRIPTOR": _SERVICECONTEXT, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", + "__doc__": """Describes a running service that sends errors. Its version changes + over time and multiple versions can run in parallel. Attributes: service: @@ -709,7 +727,8 @@ version: Represents the source code version that the developer provided, which could represent a version label or a Git SHA-1 - hash, for example. + hash, for example. For App Engine standard environment, the + version is set to the version of the app. resource_type: Type of the MonitoredResource. List of possible values: https://cloud.google.com/monitoring/api/resources Value is @@ -717,21 +736,20 @@ reporting errors. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContext) - ), + }, ) _sym_db.RegisterMessage(ServiceContext) ErrorContext = _reflection.GeneratedProtocolMessageType( "ErrorContext", (_message.Message,), - dict( - DESCRIPTOR=_ERRORCONTEXT, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - __doc__="""A description of the context in which an error occurred. This data + { + "DESCRIPTOR": _ERRORCONTEXT, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", + "__doc__": """A description of the context in which an error occurred. This data should be provided by the application when reporting an error, unless - the error report has been generated automatically from Google App Engine - logs. - + the error report has been generated automatically from Google App + Engine logs. Attributes: http_request: @@ -750,25 +768,23 @@ report the error, usually the place where it was logged. For a logged exception this would be the source line where the exception is logged, usually close to the place where it was - caught. This value is in contrast to - ``Exception.cause_location``, which describes the source line - where the exception was thrown. + caught. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorContext) - ), + }, ) _sym_db.RegisterMessage(ErrorContext) HttpRequestContext = _reflection.GeneratedProtocolMessageType( "HttpRequestContext", (_message.Message,), - dict( - DESCRIPTOR=_HTTPREQUESTCONTEXT, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - __doc__="""HTTP request data that is related to a reported error. This data should - be provided by the application when reporting an error, unless the error - report has been generated automatically from Google App Engine logs. - + { + "DESCRIPTOR": _HTTPREQUESTCONTEXT, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", + "__doc__": """HTTP request data that is related to a reported error. This data + should be provided by the application when reporting an error, unless + the error report has been generated automatically from Google App + Engine logs. Attributes: method: @@ -788,21 +804,21 @@ report. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.HttpRequestContext) - ), + }, ) _sym_db.RegisterMessage(HttpRequestContext) SourceLocation = _reflection.GeneratedProtocolMessageType( "SourceLocation", (_message.Message,), - dict( - DESCRIPTOR=_SOURCELOCATION, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - __doc__="""Indicates a location in the source code of the service for which errors - are reported. This data should be provided by the application when - reporting an error, unless the error report has been generated - automatically from Google App Engine logs. All fields are optional. - + { + "DESCRIPTOR": _SOURCELOCATION, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", + "__doc__": """Indicates a location in the source code of the service for which + errors are reported. ``functionName`` must be provided by the + application when reporting an error, unless the error report contains + a ``message`` with a supported exception stack trace. All fields are + optional for the later case. Attributes: file_path: @@ -816,10 +832,11 @@ example, ``my.package.MyClass.method`` in case of Java. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.SourceLocation) - ), + }, ) _sym_db.RegisterMessage(SourceLocation) DESCRIPTOR._options = None +_ERRORGROUP._options = None # @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py index 07cb78fe03a9..8a9393943bdf 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py @@ -1,2 +1,3 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" import grpc diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto index 15086a9eaa47..18182729efd6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto @@ -1,4 +1,4 @@ -// Copyright 2016 Google Inc. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,28 +11,38 @@ // 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. +// syntax = "proto3"; package google.devtools.clouderrorreporting.v1beta1; import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; import "google/devtools/clouderrorreporting/v1beta1/common.proto"; +option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; option java_multiple_files = true; option java_outer_classname = "ErrorGroupServiceProto"; option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; +option ruby_package = "Google::Cloud::ErrorReporting::V1beta1"; // Service for retrieving and updating individual error groups. service ErrorGroupService { + option (google.api.default_host) = "clouderrorreporting.googleapis.com"; + option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; + // Get the specified group. rpc GetGroup(GetGroupRequest) returns (ErrorGroup) { option (google.api.http) = { get: "/v1beta1/{group_name=projects/*/groups/*}" }; + option (google.api.method_signature) = "group_name"; } // Replace the data for the specified group. @@ -42,24 +52,28 @@ service ErrorGroupService { put: "/v1beta1/{group.name=projects/*/groups/*}" body: "group" }; + option (google.api.method_signature) = "group"; } } // A request to return an individual group. message GetGroupRequest { - // [Required] The group resource name. Written as - // projects/projectID/groups/group_name. - // Call - // - // groupStats.list to return a list of groups belonging to - // this project. + // The group resource name. Written as + // `projects/{projectID}/groups/{group_name}`. Call + // [`groupStats.list`](https://cloud.google.com/error-reporting/reference/rest/v1beta1/projects.groupStats/list) + // to return a list of groups belonging to this project. // - // Example: projects/my-project-123/groups/my-group - string group_name = 1; + // Example: `projects/my-project-123/groups/my-group` + string group_name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "clouderrorreporting.googleapis.com/ErrorGroup" + } + ]; } // A request to replace the existing data for the given group. message UpdateGroupRequest { - // [Required] The group which replaces the resource on the server. - ErrorGroup group = 1; + // Required. The group which replaces the resource on the server. + ErrorGroup group = 1 [(google.api.field_behavior) = REQUIRED]; } diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py index a6406ab03623..49358c4c7c8f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py @@ -1,10 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto - -import sys - -_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode("latin1")) +# source: google/cloud/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -16,24 +13,27 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import client_pb2 as google_dot_api_dot_client__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import resource_pb2 as google_dot_api_dot_resource__pb2 from google.cloud.errorreporting_v1beta1.proto import ( - common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, + common_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, ) DESCRIPTOR = _descriptor.FileDescriptor( - name="google/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto", + name="google/cloud/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto", package="google.devtools.clouderrorreporting.v1beta1", syntax="proto3", - serialized_options=_b( - "\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" - ), - serialized_pb=_b( - '\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto"%\n\x0fGetGroupRequest\x12\x12\n\ngroup_name\x18\x01 \x01(\t"\\\n\x12UpdateGroupRequest\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup2\x8e\x03\n\x11\x45rrorGroupService\x12\xb4\x01\n\x08GetGroup\x12<.google.devtools.clouderrorreporting.v1beta1.GetGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{group_name=projects/*/groups/*}\x12\xc1\x01\n\x0bUpdateGroup\x12?.google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup"8\x82\xd3\xe4\x93\x02\x32\x1a)/v1beta1/{group.name=projects/*/groups/*}:\x05groupB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorGroupServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3' - ), + serialized_options=b"\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\370\001\001\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1\352\002&Google::Cloud::ErrorReporting::V1beta1", + create_key=_descriptor._internal_create_key, + serialized_pb=b'\nQgoogle/cloud/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x44google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto"\\\n\x0fGetGroupRequest\x12I\n\ngroup_name\x18\x01 \x01(\tB5\xe0\x41\x02\xfa\x41/\n-clouderrorreporting.googleapis.com/ErrorGroup"a\n\x12UpdateGroupRequest\x12K\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroupB\x03\xe0\x41\x02\x32\xfb\x03\n\x11\x45rrorGroupService\x12\xc1\x01\n\x08GetGroup\x12<.google.devtools.clouderrorreporting.v1beta1.GetGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup">\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{group_name=projects/*/groups/*}\xda\x41\ngroup_name\x12\xc9\x01\n\x0bUpdateGroup\x12?.google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup"@\x82\xd3\xe4\x93\x02\x32\x1a)/v1beta1/{group.name=projects/*/groups/*}:\x05group\xda\x41\x05group\x1aV\xca\x41"clouderrorreporting.googleapis.com\xd2\x41.https://www.googleapis.com/auth/cloud-platformB\xa3\x02\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorGroupServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xf8\x01\x01\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1\xea\x02&Google::Cloud::ErrorReporting::V1beta1b\x06proto3', dependencies=[ google_dot_api_dot_annotations__pb2.DESCRIPTOR, - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, + google_dot_api_dot_client__pb2.DESCRIPTOR, + google_dot_api_dot_field__behavior__pb2.DESCRIPTOR, + google_dot_api_dot_resource__pb2.DESCRIPTOR, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, ], ) @@ -44,6 +44,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="group_name", @@ -54,15 +55,16 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002\372A/\n-clouderrorreporting.googleapis.com/ErrorGroup", file=DESCRIPTOR, - ) + create_key=_descriptor._internal_create_key, + ), ], extensions=[], nested_types=[], @@ -72,8 +74,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=218, - serialized_end=255, + serialized_start=315, + serialized_end=407, ) @@ -83,6 +85,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="group", @@ -99,9 +102,10 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002", file=DESCRIPTOR, - ) + create_key=_descriptor._internal_create_key, + ), ], extensions=[], nested_types=[], @@ -111,14 +115,14 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=257, - serialized_end=349, + serialized_start=409, + serialized_end=506, ) _UPDATEGROUPREQUEST.fields_by_name[ "group" ].message_type = ( - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP ) DESCRIPTOR.message_types_by_name["GetGroupRequest"] = _GETGROUPREQUEST DESCRIPTOR.message_types_by_name["UpdateGroupRequest"] = _UPDATEGROUPREQUEST @@ -127,54 +131,56 @@ GetGroupRequest = _reflection.GeneratedProtocolMessageType( "GetGroupRequest", (_message.Message,), - dict( - DESCRIPTOR=_GETGROUPREQUEST, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2", - __doc__="""A request to return an individual group. - + { + "DESCRIPTOR": _GETGROUPREQUEST, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2", + "__doc__": """A request to return an individual group. Attributes: group_name: - [Required] The group resource name. Written as - projects/projectID/groups/group\_name. Call groupStats.list to - return a list of groups belonging to this project. Example: - projects/my-project-123/groups/my-group + The group resource name. Written as + ``projects/{projectID}/groups/{group_name}``. Call + ```groupStats.list`` `__ + to return a list of groups belonging to this project. + Example: ``projects/my-project-123/groups/my-group`` """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.GetGroupRequest) - ), + }, ) _sym_db.RegisterMessage(GetGroupRequest) UpdateGroupRequest = _reflection.GeneratedProtocolMessageType( "UpdateGroupRequest", (_message.Message,), - dict( - DESCRIPTOR=_UPDATEGROUPREQUEST, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2", - __doc__="""A request to replace the existing data for the given group. - + { + "DESCRIPTOR": _UPDATEGROUPREQUEST, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2", + "__doc__": """A request to replace the existing data for the given group. Attributes: group: - [Required] The group which replaces the resource on the - server. + Required. The group which replaces the resource on the server. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest) - ), + }, ) _sym_db.RegisterMessage(UpdateGroupRequest) DESCRIPTOR._options = None +_GETGROUPREQUEST.fields_by_name["group_name"]._options = None +_UPDATEGROUPREQUEST.fields_by_name["group"]._options = None _ERRORGROUPSERVICE = _descriptor.ServiceDescriptor( name="ErrorGroupService", full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", file=DESCRIPTOR, index=0, - serialized_options=None, - serialized_start=352, - serialized_end=750, + serialized_options=b'\312A"clouderrorreporting.googleapis.com\322A.https://www.googleapis.com/auth/cloud-platform', + create_key=_descriptor._internal_create_key, + serialized_start=509, + serialized_end=1016, methods=[ _descriptor.MethodDescriptor( name="GetGroup", @@ -182,10 +188,9 @@ index=0, containing_service=None, input_type=_GETGROUPREQUEST, - output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, - serialized_options=_b( - "\202\323\344\223\002+\022)/v1beta1/{group_name=projects/*/groups/*}" - ), + output_type=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, + serialized_options=b"\202\323\344\223\002+\022)/v1beta1/{group_name=projects/*/groups/*}\332A\ngroup_name", + create_key=_descriptor._internal_create_key, ), _descriptor.MethodDescriptor( name="UpdateGroup", @@ -193,10 +198,9 @@ index=1, containing_service=None, input_type=_UPDATEGROUPREQUEST, - output_type=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, - serialized_options=_b( - "\202\323\344\223\0022\032)/v1beta1/{group.name=projects/*/groups/*}:\005group" - ), + output_type=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, + serialized_options=b"\202\323\344\223\0022\032)/v1beta1/{group.name=projects/*/groups/*}:\005group\332A\005group", + create_key=_descriptor._internal_create_key, ), ], ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py index 3849772ff67d..9e9af29ea2e2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py @@ -1,51 +1,52 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" import grpc from google.cloud.errorreporting_v1beta1.proto import ( - common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, + common_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, ) from google.cloud.errorreporting_v1beta1.proto import ( - error_group_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2, + error_group_service_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2, ) class ErrorGroupServiceStub(object): """Service for retrieving and updating individual error groups. - """ + """ def __init__(self, channel): """Constructor. - Args: - channel: A grpc.Channel. - """ + Args: + channel: A grpc.Channel. + """ self.GetGroup = channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", - request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.SerializeToString, - response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, ) self.UpdateGroup = channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", - request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.SerializeToString, - response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, ) class ErrorGroupServiceServicer(object): """Service for retrieving and updating individual error groups. - """ + """ def GetGroup(self, request, context): """Get the specified group. - """ + """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details("Method not implemented!") raise NotImplementedError("Method not implemented!") def UpdateGroup(self, request, context): """Replace the data for the specified group. - Fails if the group does not exist. - """ + Fails if the group does not exist. + """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details("Method not implemented!") raise NotImplementedError("Method not implemented!") @@ -55,13 +56,13 @@ def add_ErrorGroupServiceServicer_to_server(servicer, server): rpc_method_handlers = { "GetGroup": grpc.unary_unary_rpc_method_handler( servicer.GetGroup, - request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, + request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.FromString, + response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, ), "UpdateGroup": grpc.unary_unary_rpc_method_handler( servicer.UpdateGroup, - request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, + request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.FromString, + response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( @@ -69,3 +70,63 @@ def add_ErrorGroupServiceServicer_to_server(servicer, server): rpc_method_handlers, ) server.add_generic_rpc_handlers((generic_handler,)) + + +# This class is part of an EXPERIMENTAL API. +class ErrorGroupService(object): + """Service for retrieving and updating individual error groups. + """ + + @staticmethod + def GetGroup( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_unary( + request, + target, + "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.SerializeToString, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def UpdateGroup( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_unary( + request, + target, + "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.SerializeToString, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto index ffb25b2b8ac2..0773f488d1cb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto @@ -1,4 +1,4 @@ -// Copyright 2016 Google Inc. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,31 +11,41 @@ // 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. +// syntax = "proto3"; package google.devtools.clouderrorreporting.v1beta1; import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; import "google/devtools/clouderrorreporting/v1beta1/common.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; +option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; option java_multiple_files = true; option java_outer_classname = "ErrorStatsServiceProto"; option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; +option ruby_package = "Google::Cloud::ErrorReporting::V1beta1"; // An API for retrieving and managing error statistics as well as data for // individual events. service ErrorStatsService { + option (google.api.default_host) = "clouderrorreporting.googleapis.com"; + option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; + // Lists the specified groups. rpc ListGroupStats(ListGroupStatsRequest) returns (ListGroupStatsResponse) { option (google.api.http) = { get: "/v1beta1/{project_name=projects/*}/groupStats" }; + option (google.api.method_signature) = "project_name,time_range"; } // Lists the specified events. @@ -43,6 +53,7 @@ service ErrorStatsService { option (google.api.http) = { get: "/v1beta1/{project_name=projects/*}/events" }; + option (google.api.method_signature) = "project_name,group_id"; } // Deletes all error events of a given project. @@ -50,60 +61,67 @@ service ErrorStatsService { option (google.api.http) = { delete: "/v1beta1/{project_name=projects/*}/events" }; + option (google.api.method_signature) = "project_name"; } } // Specifies a set of `ErrorGroupStats` to return. message ListGroupStatsRequest { - // [Required] The resource name of the Google Cloud Platform project. Written + // Required. The resource name of the Google Cloud Platform project. Written // as projects/ plus the // Google Cloud // Platform project ID. // // Example: projects/my-project-123. - string project_name = 1; + string project_name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; - // [Optional] List all ErrorGroupStats with these IDs. - repeated string group_id = 2; + // Optional. List all ErrorGroupStats with these IDs. + repeated string group_id = 2 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] List only ErrorGroupStats which belong to a service + // Optional. List only ErrorGroupStats which belong to a service // context that matches the filter. // Data for all service contexts is returned if this field is not specified. - ServiceContextFilter service_filter = 3; + ServiceContextFilter service_filter = 3 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] List data for the given time range. - // If not set a default time range is used. The field time_range_begin - // in the response will specify the beginning of this time range. + // Optional. List data for the given time range. + // If not set, a default time range is used. The field + // time_range_begin in the response will specify the beginning + // of this time range. // Only ErrorGroupStats with a non-zero count in the given time - // range are returned, unless the request contains an explicit group_id list. - // If a group_id list is given, also ErrorGroupStats with zero - // occurrences are returned. - QueryTimeRange time_range = 5; + // range are returned, unless the request contains an explicit + // group_id list. If a group_id list is given, also + // ErrorGroupStats with zero occurrences are returned. + QueryTimeRange time_range = 5 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] The preferred duration for a single returned `TimedCount`. + // Optional. The preferred duration for a single returned `TimedCount`. // If not set, no timed counts are returned. - google.protobuf.Duration timed_count_duration = 6; + google.protobuf.Duration timed_count_duration = 6 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] The alignment of the timed counts to be returned. + // Optional. The alignment of the timed counts to be returned. // Default is `ALIGNMENT_EQUAL_AT_END`. - TimedCountAlignment alignment = 7; + TimedCountAlignment alignment = 7 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] Time where the timed counts shall be aligned if rounded + // Optional. Time where the timed counts shall be aligned if rounded // alignment is chosen. Default is 00:00 UTC. - google.protobuf.Timestamp alignment_time = 8; + google.protobuf.Timestamp alignment_time = 8 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] The sort order in which the results are returned. + // Optional. The sort order in which the results are returned. // Default is `COUNT_DESC`. - ErrorGroupOrder order = 9; + ErrorGroupOrder order = 9 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] The maximum number of results to return per response. + // Optional. The maximum number of results to return per response. // Default is 20. - int32 page_size = 11; + int32 page_size = 11 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] A `next_page_token` provided by a previous response. To view + // Optional. A `next_page_token` provided by a previous response. To view // additional results, pass this token along with the identical query // parameters as the first request. - string page_token = 12; + string page_token = 12 [(google.api.field_behavior) = OPTIONAL]; } // Contains a set of requested error group stats. @@ -196,33 +214,79 @@ message TimedCount { google.protobuf.Timestamp end_time = 3; } +// Specifies how the time periods of error group counts are aligned. +enum TimedCountAlignment { + // No alignment specified. + ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0; + + // The time periods shall be consecutive, have width equal to the + // requested duration, and be aligned at the `alignment_time` provided in + // the request. + // The `alignment_time` does not have to be inside the query period but + // even if it is outside, only time periods are returned which overlap + // with the query period. + // A rounded alignment will typically result in a + // different size of the first or the last time period. + ALIGNMENT_EQUAL_ROUNDED = 1; + + // The time periods shall be consecutive, have width equal to the + // requested duration, and be aligned at the end of the requested time + // period. This can result in a different size of the + // first time period. + ALIGNMENT_EQUAL_AT_END = 2; +} + +// A sorting order of error groups. +enum ErrorGroupOrder { + // No group order specified. + GROUP_ORDER_UNSPECIFIED = 0; + + // Total count of errors in the given time window in descending order. + COUNT_DESC = 1; + + // Timestamp when the group was last seen in the given time window + // in descending order. + LAST_SEEN_DESC = 2; + + // Timestamp when the group was created in descending order. + CREATED_DESC = 3; + + // Number of affected users in the given time window in descending order. + AFFECTED_USERS_DESC = 4; +} + // Specifies a set of error events to return. message ListEventsRequest { - // [Required] The resource name of the Google Cloud Platform project. Written + // Required. The resource name of the Google Cloud Platform project. Written // as `projects/` plus the // [Google Cloud Platform project // ID](https://support.google.com/cloud/answer/6158840). // Example: `projects/my-project-123`. - string project_name = 1; + string project_name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; - // [Required] The group for which events shall be returned. - string group_id = 2; + // Required. The group for which events shall be returned. + string group_id = 2 [(google.api.field_behavior) = REQUIRED]; - // [Optional] List only ErrorGroups which belong to a service context that + // Optional. List only ErrorGroups which belong to a service context that // matches the filter. // Data for all service contexts is returned if this field is not specified. - ServiceContextFilter service_filter = 3; + ServiceContextFilter service_filter = 3 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] List only data for the given time range. + // Optional. List only data for the given time range. // If not set a default time range is used. The field time_range_begin // in the response will specify the beginning of this time range. - QueryTimeRange time_range = 4; + QueryTimeRange time_range = 4 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] The maximum number of results to return per response. - int32 page_size = 6; + // Optional. The maximum number of results to return per response. + int32 page_size = 6 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] A `next_page_token` provided by a previous response. - string page_token = 7; + // Optional. A `next_page_token` provided by a previous response. + string page_token = 7 [(google.api.field_behavior) = OPTIONAL]; } // Contains a set of requested error events. @@ -277,69 +341,35 @@ message QueryTimeRange { // Only exact, case-sensitive matches are supported. // If a field is unset or empty, it matches arbitrary values. message ServiceContextFilter { - // [Optional] The exact value to match against + // Optional. The exact value to match against // [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service). - string service = 2; + string service = 2 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] The exact value to match against + // Optional. The exact value to match against // [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version). - string version = 3; + string version = 3 [(google.api.field_behavior) = OPTIONAL]; - // [Optional] The exact value to match against + // Optional. The exact value to match against // [`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type). - string resource_type = 4; + string resource_type = 4 [(google.api.field_behavior) = OPTIONAL]; } // Deletes all events in the project. message DeleteEventsRequest { - // [Required] The resource name of the Google Cloud Platform project. Written + // Required. The resource name of the Google Cloud Platform project. Written // as `projects/` plus the // [Google Cloud Platform project // ID](https://support.google.com/cloud/answer/6158840). // Example: `projects/my-project-123`. - string project_name = 1; + string project_name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; } // Response message for deleting error events. -message DeleteEventsResponse {} - -// Specifies how the time periods of error group counts are aligned. -enum TimedCountAlignment { - // No alignment specified. - ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0; - - // The time periods shall be consecutive, have width equal to the - // requested duration, and be aligned at the `alignment_time` provided in - // the request. - // The `alignment_time` does not have to be inside the query period but - // even if it is outside, only time periods are returned which overlap - // with the query period. - // A rounded alignment will typically result in a - // different size of the first or the last time period. - ALIGNMENT_EQUAL_ROUNDED = 1; - - // The time periods shall be consecutive, have width equal to the - // requested duration, and be aligned at the end of the requested time - // period. This can result in a different size of the - // first time period. - ALIGNMENT_EQUAL_AT_END = 2; -} +message DeleteEventsResponse { -// A sorting order of error groups. -enum ErrorGroupOrder { - // No group order specified. - GROUP_ORDER_UNSPECIFIED = 0; - - // Total count of errors in the given time window in descending order. - COUNT_DESC = 1; - - // Timestamp when the group was last seen in the given time window - // in descending order. - LAST_SEEN_DESC = 2; - - // Timestamp when the group was created in descending order. - CREATED_DESC = 3; - - // Number of affected users in the given time window in descending order. - AFFECTED_USERS_DESC = 4; } diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py index a8fe60bd67f7..de0efed38cd7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py @@ -1,10 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto - -import sys - -_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode("latin1")) +# source: google/cloud/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto +"""Generated protocol buffer code.""" from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message @@ -17,26 +14,29 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import client_pb2 as google_dot_api_dot_client__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import resource_pb2 as google_dot_api_dot_resource__pb2 from google.cloud.errorreporting_v1beta1.proto import ( - common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, + common_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, ) from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 DESCRIPTOR = _descriptor.FileDescriptor( - name="google/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto", + name="google/cloud/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto", package="google.devtools.clouderrorreporting.v1beta1", syntax="proto3", - serialized_options=_b( - "\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" - ), - serialized_pb=_b( - '\nKgoogle/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xa1\x04\n\x15ListGroupStatsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x03(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x05 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x37\n\x14timed_count_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12S\n\talignment\x18\x07 \x01(\x0e\x32@.google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment\x12\x32\n\x0e\x61lignment_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12K\n\x05order\x18\t \x01(\x0e\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder\x12\x11\n\tpage_size\x18\x0b \x01(\x05\x12\x12\n\npage_token\x18\x0c \x01(\t"\xc0\x01\n\x16ListGroupStatsResponse\x12W\n\x11\x65rror_group_stats\x18\x01 \x03(\x0b\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\x86\x04\n\x0f\x45rrorGroupStats\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\x1c\n\x14\x61\x66\x66\x65\x63ted_users_count\x18\x03 \x01(\x03\x12M\n\x0ctimed_counts\x18\x04 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.TimedCount\x12\x33\n\x0f\x66irst_seen_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x32\n\x0elast_seen_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12V\n\x11\x61\x66\x66\x65\x63ted_services\x18\x07 \x03(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x1d\n\x15num_affected_services\x18\x08 \x01(\x05\x12O\n\x0erepresentative\x18\t \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent"y\n\nTimedCount\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\x8e\x02\n\x11ListEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12Y\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter\x12O\n\ntime_range\x18\x04 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange\x12\x11\n\tpage_size\x18\x06 \x01(\x05\x12\x12\n\npage_token\x18\x07 \x01(\t"\xb2\x01\n\x12ListEventsResponse\x12M\n\x0c\x65rror_events\x18\x01 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\xe7\x01\n\x0eQueryTimeRange\x12R\n\x06period\x18\x01 \x01(\x0e\x32\x42.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period"\x80\x01\n\x06Period\x12\x16\n\x12PERIOD_UNSPECIFIED\x10\x00\x12\x11\n\rPERIOD_1_HOUR\x10\x01\x12\x12\n\x0ePERIOD_6_HOURS\x10\x02\x12\x10\n\x0cPERIOD_1_DAY\x10\x03\x12\x11\n\rPERIOD_1_WEEK\x10\x04\x12\x12\n\x0ePERIOD_30_DAYS\x10\x05"O\n\x14ServiceContextFilter\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t"+\n\x13\x44\x65leteEventsRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t"\x16\n\x14\x44\x65leteEventsResponse*u\n\x13TimedCountAlignment\x12%\n!ERROR_COUNT_ALIGNMENT_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x41LIGNMENT_EQUAL_ROUNDED\x10\x01\x12\x1a\n\x16\x41LIGNMENT_EQUAL_AT_END\x10\x02*}\n\x0f\x45rrorGroupOrder\x12\x1b\n\x17GROUP_ORDER_UNSPECIFIED\x10\x00\x12\x0e\n\nCOUNT_DESC\x10\x01\x12\x12\n\x0eLAST_SEEN_DESC\x10\x02\x12\x10\n\x0c\x43REATED_DESC\x10\x03\x12\x17\n\x13\x41\x46\x46\x45\x43TED_USERS_DESC\x10\x04\x32\xf2\x04\n\x11\x45rrorStatsService\x12\xd0\x01\n\x0eListGroupStats\x12\x42.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest\x1a\x43.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse"5\x82\xd3\xe4\x93\x02/\x12-/v1beta1/{project_name=projects/*}/groupStats\x12\xc0\x01\n\nListEvents\x12>.google.devtools.clouderrorreporting.v1beta1.ListEventsRequest\x1a?.google.devtools.clouderrorreporting.v1beta1.ListEventsResponse"1\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{project_name=projects/*}/events\x12\xc6\x01\n\x0c\x44\x65leteEvents\x12@.google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest\x1a\x41.google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse"1\x82\xd3\xe4\x93\x02+*)/v1beta1/{project_name=projects/*}/eventsB\xf7\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorStatsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3' - ), + serialized_options=b"\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\370\001\001\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1\352\002&Google::Cloud::ErrorReporting::V1beta1", + create_key=_descriptor._internal_create_key, + serialized_pb=b'\nQgoogle/cloud/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x44google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x83\x05\n\x15ListGroupStatsRequest\x12I\n\x0cproject_name\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\x15\n\x08group_id\x18\x02 \x03(\tB\x03\xe0\x41\x01\x12^\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilterB\x03\xe0\x41\x01\x12T\n\ntime_range\x18\x05 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRangeB\x03\xe0\x41\x01\x12<\n\x14timed_count_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\x03\xe0\x41\x01\x12X\n\talignment\x18\x07 \x01(\x0e\x32@.google.devtools.clouderrorreporting.v1beta1.TimedCountAlignmentB\x03\xe0\x41\x01\x12\x37\n\x0e\x61lignment_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x01\x12P\n\x05order\x18\t \x01(\x0e\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrderB\x03\xe0\x41\x01\x12\x16\n\tpage_size\x18\x0b \x01(\x05\x42\x03\xe0\x41\x01\x12\x17\n\npage_token\x18\x0c \x01(\tB\x03\xe0\x41\x01"\xc0\x01\n\x16ListGroupStatsResponse\x12W\n\x11\x65rror_group_stats\x18\x01 \x03(\x0b\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\x86\x04\n\x0f\x45rrorGroupStats\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\x1c\n\x14\x61\x66\x66\x65\x63ted_users_count\x18\x03 \x01(\x03\x12M\n\x0ctimed_counts\x18\x04 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.TimedCount\x12\x33\n\x0f\x66irst_seen_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x32\n\x0elast_seen_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12V\n\x11\x61\x66\x66\x65\x63ted_services\x18\x07 \x03(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x1d\n\x15num_affected_services\x18\x08 \x01(\x05\x12O\n\x0erepresentative\x18\t \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent"y\n\nTimedCount\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\xdc\x02\n\x11ListEventsRequest\x12I\n\x0cproject_name\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\x15\n\x08group_id\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12^\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilterB\x03\xe0\x41\x01\x12T\n\ntime_range\x18\x04 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRangeB\x03\xe0\x41\x01\x12\x16\n\tpage_size\x18\x06 \x01(\x05\x42\x03\xe0\x41\x01\x12\x17\n\npage_token\x18\x07 \x01(\tB\x03\xe0\x41\x01"\xb2\x01\n\x12ListEventsResponse\x12M\n\x0c\x65rror_events\x18\x01 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\xe7\x01\n\x0eQueryTimeRange\x12R\n\x06period\x18\x01 \x01(\x0e\x32\x42.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period"\x80\x01\n\x06Period\x12\x16\n\x12PERIOD_UNSPECIFIED\x10\x00\x12\x11\n\rPERIOD_1_HOUR\x10\x01\x12\x12\n\x0ePERIOD_6_HOURS\x10\x02\x12\x10\n\x0cPERIOD_1_DAY\x10\x03\x12\x11\n\rPERIOD_1_WEEK\x10\x04\x12\x12\n\x0ePERIOD_30_DAYS\x10\x05"^\n\x14ServiceContextFilter\x12\x14\n\x07service\x18\x02 \x01(\tB\x03\xe0\x41\x01\x12\x14\n\x07version\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12\x1a\n\rresource_type\x18\x04 \x01(\tB\x03\xe0\x41\x01"`\n\x13\x44\x65leteEventsRequest\x12I\n\x0cproject_name\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project"\x16\n\x14\x44\x65leteEventsResponse*u\n\x13TimedCountAlignment\x12%\n!ERROR_COUNT_ALIGNMENT_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x41LIGNMENT_EQUAL_ROUNDED\x10\x01\x12\x1a\n\x16\x41LIGNMENT_EQUAL_AT_END\x10\x02*}\n\x0f\x45rrorGroupOrder\x12\x1b\n\x17GROUP_ORDER_UNSPECIFIED\x10\x00\x12\x0e\n\nCOUNT_DESC\x10\x01\x12\x12\n\x0eLAST_SEEN_DESC\x10\x02\x12\x10\n\x0c\x43REATED_DESC\x10\x03\x12\x17\n\x13\x41\x46\x46\x45\x43TED_USERS_DESC\x10\x04\x32\x8b\x06\n\x11\x45rrorStatsService\x12\xea\x01\n\x0eListGroupStats\x12\x42.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest\x1a\x43.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse"O\x82\xd3\xe4\x93\x02/\x12-/v1beta1/{project_name=projects/*}/groupStats\xda\x41\x17project_name,time_range\x12\xd8\x01\n\nListEvents\x12>.google.devtools.clouderrorreporting.v1beta1.ListEventsRequest\x1a?.google.devtools.clouderrorreporting.v1beta1.ListEventsResponse"I\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{project_name=projects/*}/events\xda\x41\x15project_name,group_id\x12\xd5\x01\n\x0c\x44\x65leteEvents\x12@.google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest\x1a\x41.google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse"@\x82\xd3\xe4\x93\x02+*)/v1beta1/{project_name=projects/*}/events\xda\x41\x0cproject_name\x1aV\xca\x41"clouderrorreporting.googleapis.com\xd2\x41.https://www.googleapis.com/auth/cloud-platformB\xa3\x02\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorStatsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xf8\x01\x01\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1\xea\x02&Google::Cloud::ErrorReporting::V1beta1b\x06proto3', dependencies=[ google_dot_api_dot_annotations__pb2.DESCRIPTOR, - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, + google_dot_api_dot_client__pb2.DESCRIPTOR, + google_dot_api_dot_field__behavior__pb2.DESCRIPTOR, + google_dot_api_dot_resource__pb2.DESCRIPTOR, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, google_dot_protobuf_dot_duration__pb2.DESCRIPTOR, google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, ], @@ -47,6 +47,7 @@ full_name="google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment", filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name="ERROR_COUNT_ALIGNMENT_UNSPECIFIED", @@ -54,6 +55,7 @@ number=0, serialized_options=None, type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( name="ALIGNMENT_EQUAL_ROUNDED", @@ -61,6 +63,7 @@ number=1, serialized_options=None, type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( name="ALIGNMENT_EQUAL_AT_END", @@ -68,12 +71,13 @@ number=2, serialized_options=None, type=None, + create_key=_descriptor._internal_create_key, ), ], containing_type=None, serialized_options=None, - serialized_start=2508, - serialized_end=2625, + serialized_start=2849, + serialized_end=2966, ) _sym_db.RegisterEnumDescriptor(_TIMEDCOUNTALIGNMENT) @@ -83,6 +87,7 @@ full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder", filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name="GROUP_ORDER_UNSPECIFIED", @@ -90,15 +95,31 @@ number=0, serialized_options=None, type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( - name="COUNT_DESC", index=1, number=1, serialized_options=None, type=None + name="COUNT_DESC", + index=1, + number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( - name="LAST_SEEN_DESC", index=2, number=2, serialized_options=None, type=None + name="LAST_SEEN_DESC", + index=2, + number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( - name="CREATED_DESC", index=3, number=3, serialized_options=None, type=None + name="CREATED_DESC", + index=3, + number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( name="AFFECTED_USERS_DESC", @@ -106,12 +127,13 @@ number=4, serialized_options=None, type=None, + create_key=_descriptor._internal_create_key, ), ], containing_type=None, serialized_options=None, - serialized_start=2627, - serialized_end=2752, + serialized_start=2968, + serialized_end=3093, ) _sym_db.RegisterEnumDescriptor(_ERRORGROUPORDER) @@ -131,6 +153,7 @@ full_name="google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period", filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name="PERIOD_UNSPECIFIED", @@ -138,27 +161,53 @@ number=0, serialized_options=None, type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( - name="PERIOD_1_HOUR", index=1, number=1, serialized_options=None, type=None + name="PERIOD_1_HOUR", + index=1, + number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( - name="PERIOD_6_HOURS", index=2, number=2, serialized_options=None, type=None + name="PERIOD_6_HOURS", + index=2, + number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( - name="PERIOD_1_DAY", index=3, number=3, serialized_options=None, type=None + name="PERIOD_1_DAY", + index=3, + number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( - name="PERIOD_1_WEEK", index=4, number=4, serialized_options=None, type=None + name="PERIOD_1_WEEK", + index=4, + number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key, ), _descriptor.EnumValueDescriptor( - name="PERIOD_30_DAYS", index=5, number=5, serialized_options=None, type=None + name="PERIOD_30_DAYS", + index=5, + number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key, ), ], containing_type=None, serialized_options=None, - serialized_start=2228, - serialized_end=2356, + serialized_start=2501, + serialized_end=2629, ) _sym_db.RegisterEnumDescriptor(_QUERYTIMERANGE_PERIOD) @@ -169,6 +218,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="project_name", @@ -179,14 +229,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="group_id", @@ -203,8 +254,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="service_filter", @@ -221,8 +273,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="time_range", @@ -239,8 +292,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="timed_count_duration", @@ -257,8 +311,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="alignment", @@ -275,8 +330,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="alignment_time", @@ -293,8 +349,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="order", @@ -311,8 +368,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="page_size", @@ -329,8 +387,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="page_token", @@ -341,14 +400,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -359,8 +419,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=284, - serialized_end=829, + serialized_start=381, + serialized_end=1024, ) @@ -370,6 +430,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="error_group_stats", @@ -388,6 +449,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="next_page_token", @@ -398,7 +460,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -406,6 +468,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="time_range_begin", @@ -424,6 +487,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -434,8 +498,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=832, - serialized_end=1024, + serialized_start=1027, + serialized_end=1219, ) @@ -445,6 +509,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="group", @@ -463,6 +528,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="count", @@ -481,6 +547,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="affected_users_count", @@ -499,6 +566,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="timed_counts", @@ -517,6 +585,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="first_seen_time", @@ -535,6 +604,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="last_seen_time", @@ -553,6 +623,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="affected_services", @@ -571,6 +642,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="num_affected_services", @@ -589,6 +661,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="representative", @@ -607,6 +680,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -617,8 +691,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=1027, - serialized_end=1545, + serialized_start=1222, + serialized_end=1740, ) @@ -628,6 +702,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="count", @@ -646,6 +721,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="start_time", @@ -664,6 +740,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="end_time", @@ -682,6 +759,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -692,8 +770,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=1547, - serialized_end=1668, + serialized_start=1742, + serialized_end=1863, ) @@ -703,6 +781,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="project_name", @@ -713,14 +792,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="group_id", @@ -731,14 +811,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="service_filter", @@ -755,8 +836,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="time_range", @@ -773,8 +855,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="page_size", @@ -791,8 +874,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="page_token", @@ -803,14 +887,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -821,8 +906,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=1671, - serialized_end=1941, + serialized_start=1866, + serialized_end=2214, ) @@ -832,6 +917,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="error_events", @@ -850,6 +936,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="next_page_token", @@ -860,7 +947,7 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, @@ -868,6 +955,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="time_range_begin", @@ -886,6 +974,7 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -896,8 +985,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=1944, - serialized_end=2122, + serialized_start=2217, + serialized_end=2395, ) @@ -907,6 +996,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="period", @@ -925,18 +1015,19 @@ extension_scope=None, serialized_options=None, file=DESCRIPTOR, - ) + create_key=_descriptor._internal_create_key, + ), ], extensions=[], nested_types=[], - enum_types=[_QUERYTIMERANGE_PERIOD], + enum_types=[_QUERYTIMERANGE_PERIOD,], serialized_options=None, is_extendable=False, syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=2125, - serialized_end=2356, + serialized_start=2398, + serialized_end=2629, ) @@ -946,6 +1037,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="service", @@ -956,14 +1048,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="version", @@ -974,14 +1067,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="resource_type", @@ -992,14 +1086,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -1010,8 +1105,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=2358, - serialized_end=2437, + serialized_start=2631, + serialized_end=2725, ) @@ -1021,6 +1116,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="project_name", @@ -1031,15 +1127,16 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project", file=DESCRIPTOR, - ) + create_key=_descriptor._internal_create_key, + ), ], extensions=[], nested_types=[], @@ -1049,8 +1146,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=2439, - serialized_end=2482, + serialized_start=2727, + serialized_end=2823, ) @@ -1060,6 +1157,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[], extensions=[], nested_types=[], @@ -1069,8 +1167,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=2484, - serialized_end=2506, + serialized_start=2825, + serialized_end=2847, ) _LISTGROUPSTATSREQUEST.fields_by_name[ @@ -1094,7 +1192,7 @@ _ERRORGROUPSTATS.fields_by_name[ "group" ].message_type = ( - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP ) _ERRORGROUPSTATS.fields_by_name["timed_counts"].message_type = _TIMEDCOUNT _ERRORGROUPSTATS.fields_by_name[ @@ -1106,12 +1204,12 @@ _ERRORGROUPSTATS.fields_by_name[ "affected_services" ].message_type = ( - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT ) _ERRORGROUPSTATS.fields_by_name[ "representative" ].message_type = ( - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT ) _TIMEDCOUNT.fields_by_name[ "start_time" @@ -1124,7 +1222,7 @@ _LISTEVENTSRESPONSE.fields_by_name[ "error_events" ].message_type = ( - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT ) _LISTEVENTSRESPONSE.fields_by_name[ "time_range_begin" @@ -1148,64 +1246,62 @@ ListGroupStatsRequest = _reflection.GeneratedProtocolMessageType( "ListGroupStatsRequest", (_message.Message,), - dict( - DESCRIPTOR=_LISTGROUPSTATSREQUEST, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Specifies a set of ``ErrorGroupStats`` to return. - + { + "DESCRIPTOR": _LISTGROUPSTATSREQUEST, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Specifies a set of ``ErrorGroupStats`` to return. Attributes: project_name: - [Required] The resource name of the Google Cloud Platform + Required. The resource name of the Google Cloud Platform project. Written as projects/ plus the Google Cloud Platform project ID. Example: projects/my-project-123. group_id: - [Optional] List all ErrorGroupStats with these IDs. + Optional. List all ErrorGroupStats with these IDs. service_filter: - [Optional] List only ErrorGroupStats which belong to a service + Optional. List only ErrorGroupStats which belong to a service context that matches the filter. Data for all service contexts is returned if this field is not specified. time_range: - [Optional] List data for the given time range. If not set a - default time range is used. The field time\_range\_begin in - the response will specify the beginning of this time range. - Only ErrorGroupStats with a non-zero count in the given time - range are returned, unless the request contains an explicit - group\_id list. If a group\_id list is given, also - ErrorGroupStats with zero occurrences are returned. + Optional. List data for the given time range. If not set, a + default time range is used. The field time_range_begin in the + response will specify the beginning of this time range. Only + ErrorGroupStats with a non-zero count in the given time range + are returned, unless the request contains an explicit group_id + list. If a group_id list is given, also ErrorGroupStats with + zero occurrences are returned. timed_count_duration: - [Optional] The preferred duration for a single returned + Optional. The preferred duration for a single returned ``TimedCount``. If not set, no timed counts are returned. alignment: - [Optional] The alignment of the timed counts to be returned. + Optional. The alignment of the timed counts to be returned. Default is ``ALIGNMENT_EQUAL_AT_END``. alignment_time: - [Optional] Time where the timed counts shall be aligned if + Optional. Time where the timed counts shall be aligned if rounded alignment is chosen. Default is 00:00 UTC. order: - [Optional] The sort order in which the results are returned. + Optional. The sort order in which the results are returned. Default is ``COUNT_DESC``. page_size: - [Optional] The maximum number of results to return per + Optional. The maximum number of results to return per response. Default is 20. page_token: - [Optional] A ``next_page_token`` provided by a previous + Optional. A ``next_page_token`` provided by a previous response. To view additional results, pass this token along with the identical query parameters as the first request. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest) - ), + }, ) _sym_db.RegisterMessage(ListGroupStatsRequest) ListGroupStatsResponse = _reflection.GeneratedProtocolMessageType( "ListGroupStatsResponse", (_message.Message,), - dict( - DESCRIPTOR=_LISTGROUPSTATSRESPONSE, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Contains a set of requested error group stats. - + { + "DESCRIPTOR": _LISTGROUPSTATSRESPONSE, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Contains a set of requested error group stats. Attributes: error_group_stats: @@ -1222,20 +1318,19 @@ deleted. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse) - ), + }, ) _sym_db.RegisterMessage(ListGroupStatsResponse) ErrorGroupStats = _reflection.GeneratedProtocolMessageType( "ErrorGroupStats", (_message.Message,), - dict( - DESCRIPTOR=_ERRORGROUPSTATS, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Data extracted for a specific group based on certain filter criteria, + { + "DESCRIPTOR": _ERRORGROUPSTATS, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Data extracted for a specific group based on certain filter criteria, such as a given time period and/or service filter. - Attributes: group: Group data that is independent of the filter criteria. @@ -1262,11 +1357,11 @@ first_seen_time: Approximate first occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the - time\_range that was specified in the request. + time_range that was specified in the request. last_seen_time: Approximate last occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the - time\_range that was specified in the request. + time_range that was specified in the request. affected_services: Service contexts with a non-zero error count for the given filter criteria. This list can be truncated if multiple @@ -1284,19 +1379,18 @@ characteristics of the group as a whole. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats) - ), + }, ) _sym_db.RegisterMessage(ErrorGroupStats) TimedCount = _reflection.GeneratedProtocolMessageType( "TimedCount", (_message.Message,), - dict( - DESCRIPTOR=_TIMEDCOUNT, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""The number of errors in a given time period. All numbers are approximate - since the error events are sampled before counting them. - + { + "DESCRIPTOR": _TIMEDCOUNT, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """The number of errors in a given time period. All numbers are + approximate since the error events are sampled before counting them. Attributes: count: @@ -1307,56 +1401,54 @@ End of the time period to which ``count`` refers (excluded). """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TimedCount) - ), + }, ) _sym_db.RegisterMessage(TimedCount) ListEventsRequest = _reflection.GeneratedProtocolMessageType( "ListEventsRequest", (_message.Message,), - dict( - DESCRIPTOR=_LISTEVENTSREQUEST, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Specifies a set of error events to return. - + { + "DESCRIPTOR": _LISTEVENTSREQUEST, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Specifies a set of error events to return. Attributes: project_name: - [Required] The resource name of the Google Cloud Platform + Required. The resource name of the Google Cloud Platform project. Written as ``projects/`` plus the `Google Cloud Platform project ID `__. Example: ``projects/my-project-123``. group_id: - [Required] The group for which events shall be returned. + Required. The group for which events shall be returned. service_filter: - [Optional] List only ErrorGroups which belong to a service + Optional. List only ErrorGroups which belong to a service context that matches the filter. Data for all service contexts is returned if this field is not specified. time_range: - [Optional] List only data for the given time range. If not set - a default time range is used. The field time\_range\_begin in + Optional. List only data for the given time range. If not set + a default time range is used. The field time_range_begin in the response will specify the beginning of this time range. page_size: - [Optional] The maximum number of results to return per + Optional. The maximum number of results to return per response. page_token: - [Optional] A ``next_page_token`` provided by a previous + Optional. A ``next_page_token`` provided by a previous response. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsRequest) - ), + }, ) _sym_db.RegisterMessage(ListEventsRequest) ListEventsResponse = _reflection.GeneratedProtocolMessageType( "ListEventsResponse", (_message.Message,), - dict( - DESCRIPTOR=_LISTEVENTSRESPONSE, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Contains a set of requested error events. - + { + "DESCRIPTOR": _LISTEVENTSRESPONSE, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Contains a set of requested error events. Attributes: error_events: @@ -1370,106 +1462,123 @@ was restricted. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsResponse) - ), + }, ) _sym_db.RegisterMessage(ListEventsResponse) QueryTimeRange = _reflection.GeneratedProtocolMessageType( "QueryTimeRange", (_message.Message,), - dict( - DESCRIPTOR=_QUERYTIMERANGE, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Requests might be rejected or the resulting timed count durations might - be adjusted for lower durations. - + { + "DESCRIPTOR": _QUERYTIMERANGE, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Requests might be rejected or the resulting timed count durations + might be adjusted for lower durations. Attributes: period: Restricts the query to the specified time range. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.QueryTimeRange) - ), + }, ) _sym_db.RegisterMessage(QueryTimeRange) ServiceContextFilter = _reflection.GeneratedProtocolMessageType( "ServiceContextFilter", (_message.Message,), - dict( - DESCRIPTOR=_SERVICECONTEXTFILTER, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Specifies criteria for filtering a subset of service contexts. The + { + "DESCRIPTOR": _SERVICECONTEXTFILTER, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Specifies criteria for filtering a subset of service contexts. The fields in the filter correspond to the fields in ``ServiceContext``. - Only exact, case-sensitive matches are supported. If a field is unset or - empty, it matches arbitrary values. - + Only exact, case-sensitive matches are supported. If a field is unset + or empty, it matches arbitrary values. Attributes: service: - [Optional] The exact value to match against + Optional. The exact value to match against ```ServiceContext.service`` `__. version: - [Optional] The exact value to match against + Optional. The exact value to match against ```ServiceContext.version`` `__. resource_type: - [Optional] The exact value to match against + Optional. The exact value to match against ```ServiceContext.resource_type`` `__. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter) - ), + }, ) _sym_db.RegisterMessage(ServiceContextFilter) DeleteEventsRequest = _reflection.GeneratedProtocolMessageType( "DeleteEventsRequest", (_message.Message,), - dict( - DESCRIPTOR=_DELETEEVENTSREQUEST, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Deletes all events in the project. - + { + "DESCRIPTOR": _DELETEEVENTSREQUEST, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Deletes all events in the project. Attributes: project_name: - [Required] The resource name of the Google Cloud Platform + Required. The resource name of the Google Cloud Platform project. Written as ``projects/`` plus the `Google Cloud Platform project ID `__. Example: ``projects/my-project-123``. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest) - ), + }, ) _sym_db.RegisterMessage(DeleteEventsRequest) DeleteEventsResponse = _reflection.GeneratedProtocolMessageType( "DeleteEventsResponse", (_message.Message,), - dict( - DESCRIPTOR=_DELETEEVENTSRESPONSE, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - __doc__="""Response message for deleting error events. - """, + { + "DESCRIPTOR": _DELETEEVENTSRESPONSE, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", + "__doc__": """Response message for deleting error events.""", # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse) - ), + }, ) _sym_db.RegisterMessage(DeleteEventsResponse) DESCRIPTOR._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["project_name"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["group_id"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["service_filter"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["time_range"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["timed_count_duration"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["alignment"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["alignment_time"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["order"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["page_size"]._options = None +_LISTGROUPSTATSREQUEST.fields_by_name["page_token"]._options = None +_LISTEVENTSREQUEST.fields_by_name["project_name"]._options = None +_LISTEVENTSREQUEST.fields_by_name["group_id"]._options = None +_LISTEVENTSREQUEST.fields_by_name["service_filter"]._options = None +_LISTEVENTSREQUEST.fields_by_name["time_range"]._options = None +_LISTEVENTSREQUEST.fields_by_name["page_size"]._options = None +_LISTEVENTSREQUEST.fields_by_name["page_token"]._options = None +_SERVICECONTEXTFILTER.fields_by_name["service"]._options = None +_SERVICECONTEXTFILTER.fields_by_name["version"]._options = None +_SERVICECONTEXTFILTER.fields_by_name["resource_type"]._options = None +_DELETEEVENTSREQUEST.fields_by_name["project_name"]._options = None _ERRORSTATSSERVICE = _descriptor.ServiceDescriptor( name="ErrorStatsService", full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", file=DESCRIPTOR, index=0, - serialized_options=None, - serialized_start=2755, - serialized_end=3381, + serialized_options=b'\312A"clouderrorreporting.googleapis.com\322A.https://www.googleapis.com/auth/cloud-platform', + create_key=_descriptor._internal_create_key, + serialized_start=3096, + serialized_end=3875, methods=[ _descriptor.MethodDescriptor( name="ListGroupStats", @@ -1478,9 +1587,8 @@ containing_service=None, input_type=_LISTGROUPSTATSREQUEST, output_type=_LISTGROUPSTATSRESPONSE, - serialized_options=_b( - "\202\323\344\223\002/\022-/v1beta1/{project_name=projects/*}/groupStats" - ), + serialized_options=b"\202\323\344\223\002/\022-/v1beta1/{project_name=projects/*}/groupStats\332A\027project_name,time_range", + create_key=_descriptor._internal_create_key, ), _descriptor.MethodDescriptor( name="ListEvents", @@ -1489,9 +1597,8 @@ containing_service=None, input_type=_LISTEVENTSREQUEST, output_type=_LISTEVENTSRESPONSE, - serialized_options=_b( - "\202\323\344\223\002+\022)/v1beta1/{project_name=projects/*}/events" - ), + serialized_options=b"\202\323\344\223\002+\022)/v1beta1/{project_name=projects/*}/events\332A\025project_name,group_id", + create_key=_descriptor._internal_create_key, ), _descriptor.MethodDescriptor( name="DeleteEvents", @@ -1500,9 +1607,8 @@ containing_service=None, input_type=_DELETEEVENTSREQUEST, output_type=_DELETEEVENTSRESPONSE, - serialized_options=_b( - "\202\323\344\223\002+*)/v1beta1/{project_name=projects/*}/events" - ), + serialized_options=b"\202\323\344\223\002+*)/v1beta1/{project_name=projects/*}/events\332A\014project_name", + create_key=_descriptor._internal_create_key, ), ], ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py index 06944055deb1..e6bb94fcb52a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py @@ -1,61 +1,62 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" import grpc from google.cloud.errorreporting_v1beta1.proto import ( - error_stats_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2, + error_stats_service_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2, ) class ErrorStatsServiceStub(object): """An API for retrieving and managing error statistics as well as data for - individual events. - """ + individual events. + """ def __init__(self, channel): """Constructor. - Args: - channel: A grpc.Channel. - """ + Args: + channel: A grpc.Channel. + """ self.ListGroupStats = channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", - request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.SerializeToString, - response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.FromString, + request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.FromString, ) self.ListEvents = channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", - request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.SerializeToString, - response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.FromString, + request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.FromString, ) self.DeleteEvents = channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", - request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.SerializeToString, - response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.FromString, + request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.FromString, ) class ErrorStatsServiceServicer(object): """An API for retrieving and managing error statistics as well as data for - individual events. - """ + individual events. + """ def ListGroupStats(self, request, context): """Lists the specified groups. - """ + """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details("Method not implemented!") raise NotImplementedError("Method not implemented!") def ListEvents(self, request, context): """Lists the specified events. - """ + """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details("Method not implemented!") raise NotImplementedError("Method not implemented!") def DeleteEvents(self, request, context): """Deletes all error events of a given project. - """ + """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details("Method not implemented!") raise NotImplementedError("Method not implemented!") @@ -65,18 +66,18 @@ def add_ErrorStatsServiceServicer_to_server(servicer, server): rpc_method_handlers = { "ListGroupStats": grpc.unary_unary_rpc_method_handler( servicer.ListGroupStats, - request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.SerializeToString, + request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.FromString, + response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.SerializeToString, ), "ListEvents": grpc.unary_unary_rpc_method_handler( servicer.ListEvents, - request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.SerializeToString, + request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.FromString, + response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.SerializeToString, ), "DeleteEvents": grpc.unary_unary_rpc_method_handler( servicer.DeleteEvents, - request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.SerializeToString, + request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.FromString, + response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( @@ -84,3 +85,91 @@ def add_ErrorStatsServiceServicer_to_server(servicer, server): rpc_method_handlers, ) server.add_generic_rpc_handlers((generic_handler,)) + + +# This class is part of an EXPERIMENTAL API. +class ErrorStatsService(object): + """An API for retrieving and managing error statistics as well as data for + individual events. + """ + + @staticmethod + def ListGroupStats( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_unary( + request, + target, + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.SerializeToString, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ListEvents( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_unary( + request, + target, + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.SerializeToString, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DeleteEvents( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_unary( + request, + target, + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.SerializeToString, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto index d77f646ce464..f46f546d85b7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto @@ -1,4 +1,4 @@ -// Copyright 2016 Google Inc. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,75 +11,111 @@ // 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. +// syntax = "proto3"; package google.devtools.clouderrorreporting.v1beta1; import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; import "google/devtools/clouderrorreporting/v1beta1/common.proto"; import "google/protobuf/timestamp.proto"; +option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; option java_multiple_files = true; option java_outer_classname = "ReportErrorsServiceProto"; option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; +option ruby_package = "Google::Cloud::ErrorReporting::V1beta1"; // An API for reporting error events. service ReportErrorsService { + option (google.api.default_host) = "clouderrorreporting.googleapis.com"; + option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; + // Report an individual error event. // - // This endpoint accepts either an OAuth token, - // or an - // API key + // This endpoint accepts **either** an OAuth token, + // **or** an [API key](https://support.google.com/cloud/answer/6158862) // for authentication. To use an API key, append it to the URL as the value of // a `key` parameter. For example: - //
POST
-  // https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- rpc ReportErrorEvent(ReportErrorEventRequest) - returns (ReportErrorEventResponse) { + // + // `POST + // https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456` + rpc ReportErrorEvent(ReportErrorEventRequest) returns (ReportErrorEventResponse) { option (google.api.http) = { post: "/v1beta1/{project_name=projects/*}/events:report" body: "event" }; + option (google.api.method_signature) = "project_name,event"; } } // A request for reporting an individual error event. message ReportErrorEventRequest { - // [Required] The resource name of the Google Cloud Platform project. Written + // Required. The resource name of the Google Cloud Platform project. Written // as `projects/` plus the // [Google Cloud Platform project // ID](https://support.google.com/cloud/answer/6158840). Example: // `projects/my-project-123`. - string project_name = 1; + string project_name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; - // [Required] The error event to be reported. - ReportedErrorEvent event = 2; + // Required. The error event to be reported. + ReportedErrorEvent event = 2 [(google.api.field_behavior) = REQUIRED]; } // Response for reporting an individual error event. // Data may be added to this message in the future. -message ReportErrorEventResponse {} +message ReportErrorEventResponse { + +} // An error event which is reported to the Error Reporting system. message ReportedErrorEvent { - // [Optional] Time when the event occurred. + // Optional. Time when the event occurred. // If not provided, the time when the event was received by the // Error Reporting system will be used. - google.protobuf.Timestamp event_time = 1; + google.protobuf.Timestamp event_time = 1 [(google.api.field_behavior) = OPTIONAL]; - // [Required] The service context in which this error has occurred. - ServiceContext service_context = 2; + // Required. The service context in which this error has occurred. + ServiceContext service_context = 2 [(google.api.field_behavior) = REQUIRED]; - // [Required] A message describing the error. The message can contain an - // exception stack in one of the supported programming languages and formats. - // In that case, the message is parsed and detailed exception information - // is returned when retrieving the error event again. - string message = 3; + // Required. The error message. + // If no `context.reportLocation` is provided, the message must contain a + // header (typically consisting of the exception type name and an error + // message) and an exception stack trace in one of the supported programming + // languages and formats. + // Supported languages are Java, Python, JavaScript, Ruby, C#, PHP, and Go. + // Supported stack trace formats are: + // + // * **Java**: Must be the return value of + // [`Throwable.printStackTrace()`](https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#printStackTrace%28%29). + // * **Python**: Must be the return value of + // [`traceback.format_exc()`](https://docs.python.org/2/library/traceback.html#traceback.format_exc). + // * **JavaScript**: Must be the value of + // [`error.stack`](https://github.com/v8/v8/wiki/Stack-Trace-API) as returned + // by V8. + // * **Ruby**: Must contain frames returned by + // [`Exception.backtrace`](https://ruby-doc.org/core-2.2.0/Exception.html#method-i-backtrace). + // * **C#**: Must be the return value of + // [`Exception.ToString()`](https://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx). + // * **PHP**: Must start with `PHP (Notice|Parse error|Fatal error|Warning)` + // and contain the result of + // [`(string)$exception`](http://php.net/manual/en/exception.tostring.php). + // * **Go**: Must be the return value of + // [`runtime.Stack()`](https://golang.org/pkg/runtime/debug/#Stack). + string message = 3 [(google.api.field_behavior) = REQUIRED]; - // [Optional] A description of the context in which the error occurred. - ErrorContext context = 4; + // Optional. A description of the context in which the error occurred. + ErrorContext context = 4 [(google.api.field_behavior) = OPTIONAL]; } diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py index 9562dd34b90b..6c8369959d3c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py @@ -1,10 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto - -import sys - -_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode("latin1")) +# source: google/cloud/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -16,25 +13,28 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import client_pb2 as google_dot_api_dot_client__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import resource_pb2 as google_dot_api_dot_resource__pb2 from google.cloud.errorreporting_v1beta1.proto import ( - common_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, + common_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, ) from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 DESCRIPTOR = _descriptor.FileDescriptor( - name="google/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto", + name="google/cloud/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto", package="google.devtools.clouderrorreporting.v1beta1", syntax="proto3", - serialized_options=_b( - "\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1" - ), - serialized_pb=_b( - '\nMgoogle/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a>google/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x7f\n\x17ReportErrorEventRequest\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12N\n\x05\x65vent\x18\x02 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent"\x1a\n\x18ReportErrorEventResponse"\xf7\x01\n\x12ReportedErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext2\xf8\x01\n\x13ReportErrorsService\x12\xe0\x01\n\x10ReportErrorEvent\x12\x44.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest\x1a\x45.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse"?\x82\xd3\xe4\x93\x02\x39"0/v1beta1/{project_name=projects/*}/events:report:\x05\x65ventB\xf9\x01\n/com.google.devtools.clouderrorreporting.v1beta1B\x18ReportErrorsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1b\x06proto3' - ), + serialized_options=b"\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\370\001\001\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1\352\002&Google::Cloud::ErrorReporting::V1beta1", + create_key=_descriptor._internal_create_key, + serialized_pb=b'\nSgoogle/cloud/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x44google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xb9\x01\n\x17ReportErrorEventRequest\x12I\n\x0cproject_name\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12S\n\x05\x65vent\x18\x02 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEventB\x03\xe0\x41\x02"\x1a\n\x18ReportErrorEventResponse"\x8b\x02\n\x12ReportedErrorEvent\x12\x33\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x01\x12Y\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContextB\x03\xe0\x41\x02\x12\x14\n\x07message\x18\x03 \x01(\tB\x03\xe0\x41\x02\x12O\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContextB\x03\xe0\x41\x01\x32\xe5\x02\n\x13ReportErrorsService\x12\xf5\x01\n\x10ReportErrorEvent\x12\x44.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest\x1a\x45.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse"T\x82\xd3\xe4\x93\x02\x39"0/v1beta1/{project_name=projects/*}/events:report:\x05\x65vent\xda\x41\x12project_name,event\x1aV\xca\x41"clouderrorreporting.googleapis.com\xd2\x41.https://www.googleapis.com/auth/cloud-platformB\xa5\x02\n/com.google.devtools.clouderrorreporting.v1beta1B\x18ReportErrorsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xf8\x01\x01\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1\xea\x02&Google::Cloud::ErrorReporting::V1beta1b\x06proto3', dependencies=[ google_dot_api_dot_annotations__pb2.DESCRIPTOR, - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, + google_dot_api_dot_client__pb2.DESCRIPTOR, + google_dot_api_dot_field__behavior__pb2.DESCRIPTOR, + google_dot_api_dot_resource__pb2.DESCRIPTOR, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, ], ) @@ -46,6 +46,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="project_name", @@ -56,14 +57,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="event", @@ -80,8 +82,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -92,8 +95,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=253, - serialized_end=380, + serialized_start=351, + serialized_end=536, ) @@ -103,6 +106,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[], extensions=[], nested_types=[], @@ -112,8 +116,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=382, - serialized_end=408, + serialized_start=538, + serialized_end=564, ) @@ -123,6 +127,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name="event_time", @@ -139,8 +144,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="service_context", @@ -157,8 +163,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="message", @@ -169,14 +176,15 @@ cpp_type=9, label=1, has_default_value=False, - default_value=_b("").decode("utf-8"), + default_value=b"".decode("utf-8"), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\002", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), _descriptor.FieldDescriptor( name="context", @@ -193,8 +201,9 @@ containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, + serialized_options=b"\340A\001", file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, ), ], extensions=[], @@ -205,8 +214,8 @@ syntax="proto3", extension_ranges=[], oneofs=[], - serialized_start=411, - serialized_end=658, + serialized_start=567, + serialized_end=834, ) _REPORTERROREVENTREQUEST.fields_by_name["event"].message_type = _REPORTEDERROREVENT @@ -216,12 +225,12 @@ _REPORTEDERROREVENT.fields_by_name[ "service_context" ].message_type = ( - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT ) _REPORTEDERROREVENT.fields_by_name[ "context" ].message_type = ( - google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORCONTEXT + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORCONTEXT ) DESCRIPTOR.message_types_by_name["ReportErrorEventRequest"] = _REPORTERROREVENTREQUEST DESCRIPTOR.message_types_by_name["ReportErrorEventResponse"] = _REPORTERROREVENTRESPONSE @@ -231,84 +240,109 @@ ReportErrorEventRequest = _reflection.GeneratedProtocolMessageType( "ReportErrorEventRequest", (_message.Message,), - dict( - DESCRIPTOR=_REPORTERROREVENTREQUEST, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", - __doc__="""A request for reporting an individual error event. - + { + "DESCRIPTOR": _REPORTERROREVENTREQUEST, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", + "__doc__": """A request for reporting an individual error event. Attributes: project_name: - [Required] The resource name of the Google Cloud Platform + Required. The resource name of the Google Cloud Platform project. Written as ``projects/`` plus the `Google Cloud Platform project ID `__. Example: ``projects/my-project-123``. event: - [Required] The error event to be reported. + Required. The error event to be reported. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest) - ), + }, ) _sym_db.RegisterMessage(ReportErrorEventRequest) ReportErrorEventResponse = _reflection.GeneratedProtocolMessageType( "ReportErrorEventResponse", (_message.Message,), - dict( - DESCRIPTOR=_REPORTERROREVENTRESPONSE, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", - __doc__="""Response for reporting an individual error event. Data may be added to - this message in the future. - """, + { + "DESCRIPTOR": _REPORTERROREVENTRESPONSE, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", + "__doc__": """Response for reporting an individual error event. Data may be added to + this message in the future.""", # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse) - ), + }, ) _sym_db.RegisterMessage(ReportErrorEventResponse) ReportedErrorEvent = _reflection.GeneratedProtocolMessageType( "ReportedErrorEvent", (_message.Message,), - dict( - DESCRIPTOR=_REPORTEDERROREVENT, - __module__="google.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", - __doc__="""An error event which is reported to the Error Reporting system. - + { + "DESCRIPTOR": _REPORTEDERROREVENT, + "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", + "__doc__": """An error event which is reported to the Error Reporting system. Attributes: event_time: - [Optional] Time when the event occurred. If not provided, the + Optional. Time when the event occurred. If not provided, the time when the event was received by the Error Reporting system will be used. service_context: - [Required] The service context in which this error has + Required. The service context in which this error has occurred. message: - [Required] A message describing the error. The message can - contain an exception stack in one of the supported programming - languages and formats. In that case, the message is parsed and - detailed exception information is returned when retrieving the - error event again. + Required. The error message. If no ``context.reportLocation`` + is provided, the message must contain a header (typically + consisting of the exception type name and an error message) + and an exception stack trace in one of the supported + programming languages and formats. Supported languages are + Java, Python, JavaScript, Ruby, C#, PHP, and Go. Supported + stack trace formats are: - **Java**: Must be the return + value of ```Throwable.printStackTrace()`` `__. - **Python**: Must be the return value of + ```traceback.format_exc()`` `__. - **JavaScript**: + Must be the value of ```error.stack`` + `__ as + returned by V8. - **Ruby**: Must contain frames returned by + ```Exception.backtrace`` `__. - + **C#**: Must be the return value of + ```Exception.ToString()`` `__. - **PHP**: + Must start with ``PHP (Notice|Parse error|Fatal + error|Warning)`` and contain the result of + ```(string)$exception`` + `__. - + **Go**: Must be the return value of ```runtime.Stack()`` + `__. context: - [Optional] A description of the context in which the error + Optional. A description of the context in which the error occurred. """, # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent) - ), + }, ) _sym_db.RegisterMessage(ReportedErrorEvent) DESCRIPTOR._options = None +_REPORTERROREVENTREQUEST.fields_by_name["project_name"]._options = None +_REPORTERROREVENTREQUEST.fields_by_name["event"]._options = None +_REPORTEDERROREVENT.fields_by_name["event_time"]._options = None +_REPORTEDERROREVENT.fields_by_name["service_context"]._options = None +_REPORTEDERROREVENT.fields_by_name["message"]._options = None +_REPORTEDERROREVENT.fields_by_name["context"]._options = None _REPORTERRORSSERVICE = _descriptor.ServiceDescriptor( name="ReportErrorsService", full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", file=DESCRIPTOR, index=0, - serialized_options=None, - serialized_start=661, - serialized_end=909, + serialized_options=b'\312A"clouderrorreporting.googleapis.com\322A.https://www.googleapis.com/auth/cloud-platform', + create_key=_descriptor._internal_create_key, + serialized_start=837, + serialized_end=1194, methods=[ _descriptor.MethodDescriptor( name="ReportErrorEvent", @@ -317,10 +351,9 @@ containing_service=None, input_type=_REPORTERROREVENTREQUEST, output_type=_REPORTERROREVENTRESPONSE, - serialized_options=_b( - '\202\323\344\223\0029"0/v1beta1/{project_name=projects/*}/events:report:\005event' - ), - ) + serialized_options=b'\202\323\344\223\0029"0/v1beta1/{project_name=projects/*}/events:report:\005event\332A\022project_name,event', + create_key=_descriptor._internal_create_key, + ), ], ) _sym_db.RegisterServiceDescriptor(_REPORTERRORSSERVICE) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py index 12f6e08e7b57..521deb2802d1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py @@ -1,43 +1,44 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" import grpc from google.cloud.errorreporting_v1beta1.proto import ( - report_errors_service_pb2 as google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2, + report_errors_service_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2, ) class ReportErrorsServiceStub(object): """An API for reporting error events. - """ + """ def __init__(self, channel): """Constructor. - Args: - channel: A grpc.Channel. - """ + Args: + channel: A grpc.Channel. + """ self.ReportErrorEvent = channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", - request_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.SerializeToString, - response_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.FromString, + request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.FromString, ) class ReportErrorsServiceServicer(object): """An API for reporting error events. - """ + """ def ReportErrorEvent(self, request, context): """Report an individual error event. - This endpoint accepts either an OAuth token, - or an - API key - for authentication. To use an API key, append it to the URL as the value of - a `key` parameter. For example: -
POST
-    https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456
- """ + This endpoint accepts **either** an OAuth token, + **or** an [API key](https://support.google.com/cloud/answer/6158862) + for authentication. To use an API key, append it to the URL as the value of + a `key` parameter. For example: + + `POST + https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456` + """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details("Method not implemented!") raise NotImplementedError("Method not implemented!") @@ -47,12 +48,45 @@ def add_ReportErrorsServiceServicer_to_server(servicer, server): rpc_method_handlers = { "ReportErrorEvent": grpc.unary_unary_rpc_method_handler( servicer.ReportErrorEvent, - request_deserializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.FromString, - response_serializer=google_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.SerializeToString, - ) + request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.FromString, + response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", rpc_method_handlers, ) server.add_generic_rpc_handlers((generic_handler,)) + + +# This class is part of an EXPERIMENTAL API. +class ReportErrorsService(object): + """An API for reporting error events. + """ + + @staticmethod + def ReportErrorEvent( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_unary( + request, + target, + "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.SerializeToString, + google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 9e8112b9998e..0b2e586ff711 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -23,14 +23,15 @@ import nox -BLACK_VERSION = "black==19.3b0" +BLACK_VERSION = "black==19.10b0" BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] -if os.path.exists("samples"): - BLACK_PATHS.append("samples") +DEFAULT_PYTHON_VERSION = "" +SYSTEM_TEST_PYTHON_VERSIONS = [] +UNIT_TEST_PYTHON_VERSIONS = [] -@nox.session(python="3.7") +@nox.session(python=DEFAULT_PYTHON_VERSION) def lint(session): """Run linters. @@ -38,7 +39,9 @@ def lint(session): serious code quality issues. """ session.install("flake8", BLACK_VERSION) - session.run("black", "--check", *BLACK_PATHS) + session.run( + "black", "--check", *BLACK_PATHS, + ) session.run("flake8", "google", "tests") @@ -53,10 +56,12 @@ def blacken(session): check the state of the `gcp_ubuntu_config` we use for that Kokoro run. """ session.install(BLACK_VERSION) - session.run("black", *BLACK_PATHS) + session.run( + "black", *BLACK_PATHS, + ) -@nox.session(python="3.7") +@nox.session(python=DEFAULT_PYTHON_VERSION) def lint_setup_py(session): """Verify that setup.py is valid (including RST check).""" session.install("docutils", "pygments") @@ -84,13 +89,13 @@ def default(session): ) -@nox.session(python=["2.7", "3.5", "3.6", "3.7", "3.8"]) +@nox.session(python=UNIT_TEST_PYTHON_VERSIONS) def unit(session): """Run the unit test suite.""" default(session) -@nox.session(python=["2.7", "3.7"]) +@nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS) def system(session): """Run the system test suite.""" system_test_path = os.path.join("tests", "system.py") @@ -110,7 +115,9 @@ def system(session): # Install all test dependencies, then install this package into the # virtualenv's dist-packages. - session.install("mock", "pytest", "google-cloud-testutils") + session.install( + "mock", "pytest", "google-cloud-testutils", + ) session.install("-e", "test_utils") session.install("-e", ".") @@ -121,7 +128,7 @@ def system(session): session.run("py.test", "--quiet", system_test_folder_path, *session.posargs) -@nox.session(python="3.7") +@nox.session(python=DEFAULT_PYTHON_VERSION) def cover(session): """Run the final coverage report. @@ -134,7 +141,7 @@ def cover(session): session.run("coverage", "erase") -@nox.session(python="3.7") +@nox.session(python=DEFAULT_PYTHON_VERSION) def docs(session): """Build the docs for this library.""" diff --git a/packages/google-cloud-error-reporting/samples/AUTHORING_GUIDE.md b/packages/google-cloud-error-reporting/samples/AUTHORING_GUIDE.md new file mode 100644 index 000000000000..55c97b32f4c1 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/AUTHORING_GUIDE.md @@ -0,0 +1 @@ +See https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/samples/CONTRIBUTING.md b/packages/google-cloud-error-reporting/samples/CONTRIBUTING.md new file mode 100644 index 000000000000..34c882b6f1a3 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/CONTRIBUTING.md @@ -0,0 +1 @@ +See https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/CONTRIBUTING.md \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh b/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh new file mode 100755 index 000000000000..ff599eb2af25 --- /dev/null +++ b/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Copyright 2015 Google Inc. All rights reserved. +# +# 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. + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +ROOT=$( dirname "$DIR" ) + +# Work from the project root. +cd $ROOT + +# Use SECRET_MANAGER_PROJECT if set, fallback to cloud-devrel-kokoro-resources. +PROJECT_ID="${SECRET_MANAGER_PROJECT:-cloud-devrel-kokoro-resources}" + +gcloud secrets versions access latest --secret="python-docs-samples-test-env" \ + > testing/test-env.sh +gcloud secrets versions access latest \ + --secret="python-docs-samples-service-account" \ + > testing/service-account.json +gcloud secrets versions access latest \ + --secret="python-docs-samples-client-secrets" \ + > testing/client-secrets.json \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py b/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py new file mode 100644 index 000000000000..d309d6e97518 --- /dev/null +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +# Copyright 2016 Google Inc +# +# 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. + +"""Generates READMEs using configuration defined in yaml.""" + +import argparse +import io +import os +import subprocess + +import jinja2 +import yaml + + +jinja_env = jinja2.Environment( + trim_blocks=True, + loader=jinja2.FileSystemLoader( + os.path.abspath(os.path.join(os.path.dirname(__file__), 'templates')))) + +README_TMPL = jinja_env.get_template('README.tmpl.rst') + + +def get_help(file): + return subprocess.check_output(['python', file, '--help']).decode() + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('source') + parser.add_argument('--destination', default='README.rst') + + args = parser.parse_args() + + source = os.path.abspath(args.source) + root = os.path.dirname(source) + destination = os.path.join(root, args.destination) + + jinja_env.globals['get_help'] = get_help + + with io.open(source, 'r') as f: + config = yaml.load(f) + + # This allows get_help to execute in the right directory. + os.chdir(root) + + output = README_TMPL.render(config) + + with io.open(destination, 'w') as f: + f.write(output) + + +if __name__ == '__main__': + main() diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/README.tmpl.rst b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/README.tmpl.rst new file mode 100644 index 000000000000..4fd239765b0a --- /dev/null +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/README.tmpl.rst @@ -0,0 +1,87 @@ +{# The following line is a lie. BUT! Once jinja2 is done with it, it will + become truth! #} +.. This file is automatically generated. Do not edit this file directly. + +{{product.name}} Python Samples +=============================================================================== + +.. image:: https://gstatic.com/cloudssh/images/open-btn.png + :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor={{folder}}/README.rst + + +This directory contains samples for {{product.name}}. {{product.description}} + +{{description}} + +.. _{{product.name}}: {{product.url}} + +{% if required_api_url %} +To run the sample, you need to enable the API at: {{required_api_url}} +{% endif %} + +{% if required_role %} +To run the sample, you need to have `{{required_role}}` role. +{% endif %} + +{{other_required_steps}} + +{% if setup %} +Setup +------------------------------------------------------------------------------- + +{% for section in setup %} + +{% include section + '.tmpl.rst' %} + +{% endfor %} +{% endif %} + +{% if samples %} +Samples +------------------------------------------------------------------------------- + +{% for sample in samples %} +{{sample.name}} ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +{% if not sample.hide_cloudshell_button %} +.. image:: https://gstatic.com/cloudssh/images/open-btn.png + :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor={{folder}}/{{sample.file}},{{folder}}/README.rst +{% endif %} + + +{{sample.description}} + +To run this sample: + +.. code-block:: bash + + $ python {{sample.file}} +{% if sample.show_help %} + + {{get_help(sample.file)|indent}} +{% endif %} + + +{% endfor %} +{% endif %} + +{% if cloud_client_library %} + +The client library +------------------------------------------------------------------------------- + +This sample uses the `Google Cloud Client Library for Python`_. +You can read the documentation for more details on API usage and use GitHub +to `browse the source`_ and `report issues`_. + +.. _Google Cloud Client Library for Python: + https://googlecloudplatform.github.io/google-cloud-python/ +.. _browse the source: + https://github.com/GoogleCloudPlatform/google-cloud-python +.. _report issues: + https://github.com/GoogleCloudPlatform/google-cloud-python/issues + +{% endif %} + +.. _Google Cloud SDK: https://cloud.google.com/sdk/ \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/auth.tmpl.rst b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/auth.tmpl.rst new file mode 100644 index 000000000000..1446b94a5e3a --- /dev/null +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/auth.tmpl.rst @@ -0,0 +1,9 @@ +Authentication +++++++++++++++ + +This sample requires you to have authentication setup. Refer to the +`Authentication Getting Started Guide`_ for instructions on setting up +credentials for applications. + +.. _Authentication Getting Started Guide: + https://cloud.google.com/docs/authentication/getting-started diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/auth_api_key.tmpl.rst b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/auth_api_key.tmpl.rst new file mode 100644 index 000000000000..11957ce2714a --- /dev/null +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/auth_api_key.tmpl.rst @@ -0,0 +1,14 @@ +Authentication +++++++++++++++ + +Authentication for this service is done via an `API Key`_. To obtain an API +Key: + +1. Open the `Cloud Platform Console`_ +2. Make sure that billing is enabled for your project. +3. From the **Credentials** page, create a new **API Key** or use an existing + one for your project. + +.. _API Key: + https://developers.google.com/api-client-library/python/guide/aaa_apikeys +.. _Cloud Console: https://console.cloud.google.com/project?_ diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst new file mode 100644 index 000000000000..a0406dba8c84 --- /dev/null +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst @@ -0,0 +1,29 @@ +Install Dependencies +++++++++++++++++++++ + +#. Clone python-docs-samples and change directory to the sample directory you want to use. + + .. code-block:: bash + + $ git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git + +#. Install `pip`_ and `virtualenv`_ if you do not already have them. You may want to refer to the `Python Development Environment Setup Guide`_ for Google Cloud Platform for instructions. + + .. _Python Development Environment Setup Guide: + https://cloud.google.com/python/setup + +#. Create a virtualenv. Samples are compatible with Python 2.7 and 3.4+. + + .. code-block:: bash + + $ virtualenv env + $ source env/bin/activate + +#. Install the dependencies needed to run the samples. + + .. code-block:: bash + + $ pip install -r requirements.txt + +.. _pip: https://pip.pypa.io/ +.. _virtualenv: https://virtualenv.pypa.io/ diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_portaudio.tmpl.rst b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_portaudio.tmpl.rst new file mode 100644 index 000000000000..5ea33d18c00c --- /dev/null +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_portaudio.tmpl.rst @@ -0,0 +1,35 @@ +Install PortAudio ++++++++++++++++++ + +Install `PortAudio`_. This is required by the `PyAudio`_ library to stream +audio from your computer's microphone. PyAudio depends on PortAudio for cross-platform compatibility, and is installed differently depending on the +platform. + +* For Mac OS X, you can use `Homebrew`_:: + + brew install portaudio + + **Note**: if you encounter an error when running `pip install` that indicates + it can't find `portaudio.h`, try running `pip install` with the following + flags:: + + pip install --global-option='build_ext' \ + --global-option='-I/usr/local/include' \ + --global-option='-L/usr/local/lib' \ + pyaudio + +* For Debian / Ubuntu Linux:: + + apt-get install portaudio19-dev python-all-dev + +* Windows may work without having to install PortAudio explicitly (it will get + installed with PyAudio). + +For more details, see the `PyAudio installation`_ page. + + +.. _PyAudio: https://people.csail.mit.edu/hubert/pyaudio/ +.. _PortAudio: http://www.portaudio.com/ +.. _PyAudio installation: + https://people.csail.mit.edu/hubert/pyaudio/#downloads +.. _Homebrew: http://brew.sh diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 8ea0204fcc27..4822d78496cb 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -1,32 +1,25 @@ { "sources": [ - { - "generator": { - "name": "artman", - "version": "2.0.0", - "dockerImage": "googleapis/artman@sha256:b3b47805231a305d0f40c4bf069df20f6a2635574e6d4259fac651d3f9f6e098" - } - }, { "git": { "name": ".", "remote": "git@github.com:googleapis/python-error-reporting.git", - "sha": "ff63d75f476e1eb3ff30f35b70d2dfa77dc17504" + "sha": "98a2c71f717cca54fe8d8dc192d2b497058ae297" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "756b174de4a122461993c1c583345533d819936d", - "internalRef": "308824110" + "sha": "5202cfe3e5c2907a1a21a4c6d4bd0812029b6aa3", + "internalRef": "319247865" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "01b6f23d24b27878b48667ce597876d66b59780e" + "sha": "303271797a360f8a439203413f13a160f2f5b3b4" } } ], @@ -37,8 +30,7 @@ "apiName": "errorreporting", "apiVersion": "v1beta1", "language": "python", - "generator": "gapic", - "config": "google/devtools/clouderrorreporting/artman_errorreporting.yaml" + "generator": "bazel" } } ] diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index d554697bdca2..dc6e7550492e 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -37,11 +37,7 @@ s.move(library / "tests/system/gapic/v1beta1") s.replace( - [ - "google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py", - "google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py", - "google/cloud/errorreporting_v1beta1/gapic/ereport_errors_service_client.py", - ], + "google/cloud/**/*py", "google-cloud-devtools-clouderrorreporting", "google-cloud-error-reporting", ) @@ -71,6 +67,52 @@ s.replace(targets, DISCARD_AUTH_BOILERPLATE, r"") +# TODO(busunkim): Remove during microgenerator transition +s.replace( + ["google/cloud/**/*.py", "tests/**/*.py"], + "error_group_path", + "group_path" +) + +# TODO(busunkim) Remove during microgenerator transition +# Keeps the previous param order to avoid breaking existing +# code +n = s.replace( + "google/cloud/**/error_stats_service_client.py", +"""def list_group_stats\( +\s+self, +\s+project_name, +\s+group_id=None, +\s+service_filter=None, +\s+time_range=None, +\s+timed_count_duration=None, +\s+alignment=None, +\s+alignment_time=None, +\s+order=None, +\s+page_size=None, +\s+retry=google\.api_core\.gapic_v1\.method\.DEFAULT, +\s+timeout=google\.api_core\.gapic_v1\.method\.DEFAULT, +\s+metadata=None\):""", +"""def list_group_stats( + self, + project_name, + time_range=None, # DO NOT MOVE, see synth.py + group_id=None, + service_filter=None, + timed_count_duration=None, + alignment=None, + alignment_time=None, + order=None, + page_size=None, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None, + ): +""" +) + +if n != 1: + raise Exception("Required replacement not made.") # ---------------------------------------------------------------------------- # Add templated files # ---------------------------------------------------------------------------- @@ -79,4 +121,8 @@ ) s.move(templated_files) +# TODO(busunkim): Use latest sphinx after microgenerator transition +s.replace("noxfile.py", """['"]sphinx['"]""", '"sphinx<3.0.0"') + + s.shell.run(["nox", "-s", "blacken"], hide_output=False) diff --git a/packages/google-cloud-error-reporting/testing/.gitignore b/packages/google-cloud-error-reporting/testing/.gitignore new file mode 100644 index 000000000000..b05fbd630881 --- /dev/null +++ b/packages/google-cloud-error-reporting/testing/.gitignore @@ -0,0 +1,3 @@ +test-env.sh +service-account.json +client-secrets.json \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py index bb4239282d68..6b9106bfe5f6 100644 --- a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py index d65f3f1f7527..5feb9c2c801c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -61,7 +61,7 @@ class CustomException(Exception): class TestErrorGroupServiceClient(object): - def test_get_group(self): + def test_update_group(self): # Setup Expected Response name = "name3373707" group_id = "groupId506361563" @@ -76,19 +76,17 @@ def test_get_group(self): client = errorreporting_v1beta1.ErrorGroupServiceClient() # Setup Request - group_name = client.group_path("[PROJECT]", "[GROUP]") + group = {} - response = client.get_group(group_name) + response = client.update_group(group) assert expected_response == response assert len(channel.requests) == 1 - expected_request = error_group_service_pb2.GetGroupRequest( - group_name=group_name - ) + expected_request = error_group_service_pb2.UpdateGroupRequest(group=group) actual_request = channel.requests[0][1] assert expected_request == actual_request - def test_get_group_exception(self): + def test_update_group_exception(self): # Mock the API response channel = ChannelStub(responses=[CustomException()]) patch = mock.patch("google.api_core.grpc_helpers.create_channel") @@ -97,12 +95,12 @@ def test_get_group_exception(self): client = errorreporting_v1beta1.ErrorGroupServiceClient() # Setup request - group_name = client.group_path("[PROJECT]", "[GROUP]") + group = {} with pytest.raises(CustomException): - client.get_group(group_name) + client.update_group(group) - def test_update_group(self): + def test_get_group(self): # Setup Expected Response name = "name3373707" group_id = "groupId506361563" @@ -117,17 +115,19 @@ def test_update_group(self): client = errorreporting_v1beta1.ErrorGroupServiceClient() # Setup Request - group = {} + group_name = client.group_path("[PROJECT]", "[GROUP]") - response = client.update_group(group) + response = client.get_group(group_name) assert expected_response == response assert len(channel.requests) == 1 - expected_request = error_group_service_pb2.UpdateGroupRequest(group=group) + expected_request = error_group_service_pb2.GetGroupRequest( + group_name=group_name + ) actual_request = channel.requests[0][1] assert expected_request == actual_request - def test_update_group_exception(self): + def test_get_group_exception(self): # Mock the API response channel = ChannelStub(responses=[CustomException()]) patch = mock.patch("google.api_core.grpc_helpers.create_channel") @@ -136,7 +136,7 @@ def test_update_group_exception(self): client = errorreporting_v1beta1.ErrorGroupServiceClient() # Setup request - group = {} + group_name = client.group_path("[PROJECT]", "[GROUP]") with pytest.raises(CustomException): - client.update_group(group) + client.get_group(group_name) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py index dc09b13fc1b1..7c15ac22baf6 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -61,16 +61,10 @@ class CustomException(Exception): class TestErrorStatsServiceClient(object): - def test_list_group_stats(self): + def test_delete_events(self): # Setup Expected Response - next_page_token = "" - error_group_stats_element = {} - error_group_stats = [error_group_stats_element] - expected_response = { - "next_page_token": next_page_token, - "error_group_stats": error_group_stats, - } - expected_response = error_stats_service_pb2.ListGroupStatsResponse( + expected_response = {} + expected_response = error_stats_service_pb2.DeleteEventsResponse( **expected_response ) @@ -83,22 +77,19 @@ def test_list_group_stats(self): # Setup Request project_name = client.project_path("[PROJECT]") - time_range = {} - - paged_list_response = client.list_group_stats(project_name, time_range) - resources = list(paged_list_response) - assert len(resources) == 1 - assert expected_response.error_group_stats[0] == resources[0] + response = client.delete_events(project_name) + assert expected_response == response assert len(channel.requests) == 1 - expected_request = error_stats_service_pb2.ListGroupStatsRequest( - project_name=project_name, time_range=time_range + expected_request = error_stats_service_pb2.DeleteEventsRequest( + project_name=project_name ) actual_request = channel.requests[0][1] assert expected_request == actual_request - def test_list_group_stats_exception(self): + def test_delete_events_exception(self): + # Mock the API response channel = ChannelStub(responses=[CustomException()]) patch = mock.patch("google.api_core.grpc_helpers.create_channel") with patch as create_channel: @@ -107,22 +98,20 @@ def test_list_group_stats_exception(self): # Setup request project_name = client.project_path("[PROJECT]") - time_range = {} - paged_list_response = client.list_group_stats(project_name, time_range) with pytest.raises(CustomException): - list(paged_list_response) + client.delete_events(project_name) - def test_list_events(self): + def test_list_group_stats(self): # Setup Expected Response next_page_token = "" - error_events_element = {} - error_events = [error_events_element] + error_group_stats_element = {} + error_group_stats = [error_group_stats_element] expected_response = { "next_page_token": next_page_token, - "error_events": error_events, + "error_group_stats": error_group_stats, } - expected_response = error_stats_service_pb2.ListEventsResponse( + expected_response = error_stats_service_pb2.ListGroupStatsResponse( **expected_response ) @@ -135,22 +124,21 @@ def test_list_events(self): # Setup Request project_name = client.project_path("[PROJECT]") - group_id = "groupId506361563" - paged_list_response = client.list_events(project_name, group_id) + paged_list_response = client.list_group_stats(project_name) resources = list(paged_list_response) assert len(resources) == 1 - assert expected_response.error_events[0] == resources[0] + assert expected_response.error_group_stats[0] == resources[0] assert len(channel.requests) == 1 - expected_request = error_stats_service_pb2.ListEventsRequest( - project_name=project_name, group_id=group_id + expected_request = error_stats_service_pb2.ListGroupStatsRequest( + project_name=project_name ) actual_request = channel.requests[0][1] assert expected_request == actual_request - def test_list_events_exception(self): + def test_list_group_stats_exception(self): channel = ChannelStub(responses=[CustomException()]) patch = mock.patch("google.api_core.grpc_helpers.create_channel") with patch as create_channel: @@ -159,16 +147,21 @@ def test_list_events_exception(self): # Setup request project_name = client.project_path("[PROJECT]") - group_id = "groupId506361563" - paged_list_response = client.list_events(project_name, group_id) + paged_list_response = client.list_group_stats(project_name) with pytest.raises(CustomException): list(paged_list_response) - def test_delete_events(self): + def test_list_events(self): # Setup Expected Response - expected_response = {} - expected_response = error_stats_service_pb2.DeleteEventsResponse( + next_page_token = "" + error_events_element = {} + error_events = [error_events_element] + expected_response = { + "next_page_token": next_page_token, + "error_events": error_events, + } + expected_response = error_stats_service_pb2.ListEventsResponse( **expected_response ) @@ -181,19 +174,22 @@ def test_delete_events(self): # Setup Request project_name = client.project_path("[PROJECT]") + group_id = "groupId506361563" - response = client.delete_events(project_name) - assert expected_response == response + paged_list_response = client.list_events(project_name, group_id) + resources = list(paged_list_response) + assert len(resources) == 1 + + assert expected_response.error_events[0] == resources[0] assert len(channel.requests) == 1 - expected_request = error_stats_service_pb2.DeleteEventsRequest( - project_name=project_name + expected_request = error_stats_service_pb2.ListEventsRequest( + project_name=project_name, group_id=group_id ) actual_request = channel.requests[0][1] assert expected_request == actual_request - def test_delete_events_exception(self): - # Mock the API response + def test_list_events_exception(self): channel = ChannelStub(responses=[CustomException()]) patch = mock.patch("google.api_core.grpc_helpers.create_channel") with patch as create_channel: @@ -202,6 +198,8 @@ def test_delete_events_exception(self): # Setup request project_name = client.project_path("[PROJECT]") + group_id = "groupId506361563" + paged_list_response = client.list_events(project_name, group_id) with pytest.raises(CustomException): - client.delete_events(project_name) + list(paged_list_response) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py index ef85fa15051a..8806285f260d 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 96aa7b8a570dd73604ea6550b2932b69a8a3832c Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 2 Jul 2020 10:27:33 -0700 Subject: [PATCH 168/467] chore: update noxfile (#15) --- packages/google-cloud-error-reporting/noxfile.py | 6 +++--- packages/google-cloud-error-reporting/synth.metadata | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 0b2e586ff711..0889d61651c6 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -26,9 +26,9 @@ BLACK_VERSION = "black==19.10b0" BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] -DEFAULT_PYTHON_VERSION = "" -SYSTEM_TEST_PYTHON_VERSIONS = [] -UNIT_TEST_PYTHON_VERSIONS = [] +DEFAULT_PYTHON_VERSION = "3.8" +SYSTEM_TEST_PYTHON_VERSIONS = ["2.7", "3.8"] +UNIT_TEST_PYTHON_VERSIONS = ["2.7", "3.5", "3.6", "3.7", "3.8"] @nox.session(python=DEFAULT_PYTHON_VERSION) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 4822d78496cb..ccbf1f4d38aa 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -3,8 +3,8 @@ { "git": { "name": ".", - "remote": "git@github.com:googleapis/python-error-reporting.git", - "sha": "98a2c71f717cca54fe8d8dc192d2b497058ae297" + "remote": "https://github.com/googleapis/python-error-reporting.git", + "sha": "840d67c09502ae99ce4771c66bde1cefb961a367" } }, { From 3b5a4de4a04c2d34f6e9852616420b80af88916d Mon Sep 17 00:00:00 2001 From: arithmetic1728 <58957152+arithmetic1728@users.noreply.github.com> Date: Thu, 13 Aug 2020 14:22:51 -0700 Subject: [PATCH 169/467] chore: move samples from python-docs-sample (#18) * Add Error Reporting Code * Updating doc links [(#324)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/324) * Commenting noxfile, renaming a test file. Change-Id: Ice25caa7c035c24a585a66575dda69e170862df8 * Update requirements. [(#436)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/436) * Fix import order lint errors Change-Id: Ieaf7237fc6f925daec46a07d2e81a452b841198a * bump Change-Id: I02e7767d13ba267ee9fc72c5b68a57013bb8b8d3 * Auto-update dependencies. [(#537)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/537) * Update samples to support latest Google Cloud Python [(#656)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/656) * Switch Error Reporting to Google Cloud Python [(#663)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/663) * Switch Error Reporting to Google Cloud Python * Switch Error Reporting to Google Cloud Python * Auto-update dependencies. [(#715)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/715) * Auto-update dependencies. [(#914)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/914) * Auto-update dependencies. * xfail the error reporting test * Fix lint * Re-generate all readmes * Auto-update dependencies. [(#922)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/922) * Auto-update dependencies. * Fix pubsub iam samples * Fix README rst links [(#962)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/962) * Fix README rst links * Update all READMEs * Auto-update dependencies. [(#1004)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1004) * Auto-update dependencies. * Fix natural language samples * Fix pubsub iam samples * Fix language samples * Fix bigquery samples * Auto-update dependencies. [(#1011)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1011) * Auto-update dependencies. [(#1055)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1055) * Auto-update dependencies. * Explicitly use latest bigtable client Change-Id: Id71e9e768f020730e4ca9514a0d7ebaa794e7d9e * Revert language update for now Change-Id: I8867f154e9a5aae00d0047c9caf880e5e8f50c53 * Remove pdb. smh Change-Id: I5ff905fadc026eebbcd45512d4e76e003e3b2b43 * Auto-update dependencies. [(#1093)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1093) * Auto-update dependencies. * Fix storage notification poll sample Change-Id: I6afbc79d15e050531555e4c8e51066996717a0f3 * Fix spanner samples Change-Id: I40069222c60d57e8f3d3878167591af9130895cb * Drop coverage because it's not useful Change-Id: Iae399a7083d7866c3c7b9162d0de244fbff8b522 * Try again to fix flaky logging test Change-Id: I6225c074701970c17c426677ef1935bb6d7e36b4 * Update all generated readme auth instructions [(#1121)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1121) Change-Id: I03b5eaef8b17ac3dc3c0339fd2c7447bd3e11bd2 * Added Link to Python Setup Guide [(#1158)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1158) * Update Readme.rst to add Python setup guide As requested in b/64770713. This sample is linked in documentation https://cloud.google.com/bigtable/docs/scaling, and it would make more sense to update the guide here than in the documentation. * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update install_deps.tmpl.rst * Updated readmegen scripts and re-generated related README files * Fixed the lint error * Auto-update dependencies. [(#1186)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1186) * Add error reporting sample for manual reporting * Readd fluentd samples * rename dir * Auto-update dependencies. [(#1205)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1205) * Auto-update dependencies. [(#1215)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1215) * Auto-update dependencies. [(#1245)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1245) * Auto-update dependencies. [(#1248)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1248) * Added "Open in Cloud Shell" buttons to README files [(#1254)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1254) * Auto-update dependencies. [(#1276)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1276) * Auto-update dependencies. [(#1282)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1282) * Auto-update dependencies. * Fix storage acl sample Change-Id: I413bea899fdde4c4859e4070a9da25845b81f7cf * Auto-update dependencies. [(#1317)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1317) * Auto-update dependencies. [(#1320)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1320) * Auto-update dependencies. [(#1359)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1359) * Auto-update dependencies. [(#1377)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1377) * Auto-update dependencies. * Update requirements.txt * Regenerate the README files and fix the Open in Cloud Shell link for some samples [(#1441)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1441) * Update READMEs to fix numbering and add git clone [(#1464)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1464) * Auto-update dependencies. [(#1658)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1658) * Auto-update dependencies. * Rollback appengine/standard/bigquery/. * Rollback appengine/standard/iap/. * Rollback bigtable/metricscaler. * Rolledback appengine/flexible/datastore. * Rollback dataproc/ * Rollback jobs/api_client * Rollback vision/cloud-client. * Rollback functions/ocr/app. * Rollback iot/api-client/end_to_end_example. * Rollback storage/cloud-client. * Rollback kms/api-client. * Rollback dlp/ * Rollback bigquery/cloud-client. * Rollback iot/api-client/manager. * Rollback appengine/flexible/cloudsql_postgresql. * Put in new region code error_reporting_quickstart [(#1842)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1842) * New region tags [(#1843)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1843) * Auto-update dependencies. [(#1980)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1980) * Auto-update dependencies. * Update requirements.txt * Update requirements.txt * Adds updates including compute [(#2436)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2436) * Adds updates including compute * Python 2 compat pytest * Fixing weird \r\n issue from GH merge * Put asset tests back in * Re-add pod operator test * Hack parameter for k8s pod operator * Auto-update dependencies. [(#2005)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2005) * Auto-update dependencies. * Revert update of appengine/flexible/datastore. * revert update of appengine/flexible/scipy * revert update of bigquery/bqml * revert update of bigquery/cloud-client * revert update of bigquery/datalab-migration * revert update of bigtable/quickstart * revert update of compute/api * revert update of container_registry/container_analysis * revert update of dataflow/run_template * revert update of datastore/cloud-ndb * revert update of dialogflow/cloud-client * revert update of dlp * revert update of functions/imagemagick * revert update of functions/ocr/app * revert update of healthcare/api-client/fhir * revert update of iam/api-client * revert update of iot/api-client/gcs_file_to_device * revert update of iot/api-client/mqtt_example * revert update of language/automl * revert update of run/image-processing * revert update of vision/automl * revert update testing/requirements.txt * revert update of vision/cloud-client/detect * revert update of vision/cloud-client/product_search * revert update of jobs/v2/api_client * revert update of jobs/v3/api_client * revert update of opencensus * revert update of translate/cloud-client * revert update to speech/cloud-client Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> Co-authored-by: Doug Mahugh * chore(deps): update dependency fluent-logger to v0.9.5 [(#3004)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3004) * chore(deps): update dependency fluent-logger to v0.9.6 [(#3080)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3080) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [fluent-logger](https://togithub.com/fluent/fluent-logger-python) | patch | `==0.9.5` -> `==0.9.6` | --- ### Release Notes
fluent/fluent-logger-python ### [`v0.9.6`](https://togithub.com/fluent/fluent-logger-python/compare/v0.9.5...v0.9.6) [Compare Source](https://togithub.com/fluent/fluent-logger-python/compare/v0.9.5...v0.9.6)
--- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples). * Simplify noxfile setup. [(#2806)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2806) * chore(deps): update dependency requests to v2.23.0 * Simplify noxfile and add version control. * Configure appengine/standard to only test Python 2.7. * Update Kokokro configs to match noxfile. * Add requirements-test to each folder. * Remove Py2 versions from everything execept appengine/standard. * Remove conftest.py. * Remove appengine/standard/conftest.py * Remove 'no-sucess-flaky-report' from pytest.ini. * Add GAE SDK back to appengine/standard tests. * Fix typo. * Roll pytest to python 2 version. * Add a bunch of testing requirements. * Remove typo. * Add appengine lib directory back in. * Add some additional requirements. * Fix issue with flake8 args. * Even more requirements. * Readd appengine conftest.py. * Add a few more requirements. * Even more Appengine requirements. * Add webtest for appengine/standard/mailgun. * Add some additional requirements. * Add workaround for issue with mailjet-rest. * Add responses for appengine/standard/mailjet. Co-authored-by: Renovate Bot * chore(deps): update dependency google-cloud-error-reporting to v0.34.0 [(#3782)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3782) * chore(deps): update dependency pytest to v5.4.3 [(#4279)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4279) * chore(deps): update dependency pytest to v5.4.3 * specify pytest for python 2 in appengine Co-authored-by: Leah Cole * chore(deps): update dependency mock to v4 [(#4287)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4287) * chore(deps): update dependency mock to v4 * specify mock version for appengine python 2 Co-authored-by: Leah Cole * Update dependency pytest to v6 [(#4390)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4390) * chore: update templates Co-authored-by: Bill Prin Co-authored-by: Jon Wayne Parrott Co-authored-by: DPE bot Co-authored-by: Bill Prin Co-authored-by: michaelawyu Co-authored-by: Andrew Gorcester Co-authored-by: Andrew Gorcester Co-authored-by: Frank Natividad Co-authored-by: Charles Engelke Co-authored-by: Gus Class Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> Co-authored-by: Doug Mahugh Co-authored-by: WhiteSource Renovate Co-authored-by: Leah Cole --- .../.github/CODEOWNERS | 8 + .../google-cloud-error-reporting/.gitignore | 3 +- .../.kokoro/build.sh | 8 +- .../.kokoro/docker/docs/Dockerfile | 98 ++++ .../.kokoro/docker/docs/fetch_gpg_keys.sh | 45 ++ .../.kokoro/docs/common.cfg | 21 +- .../.kokoro/docs/docs-presubmit.cfg | 17 + .../.kokoro/publish-docs.sh | 39 +- .../.kokoro/trampoline_v2.sh | 487 ++++++++++++++++++ .../.trampolinerc | 51 ++ .../google-cloud-error-reporting/docs/conf.py | 11 +- .../google-cloud-error-reporting/noxfile.py | 37 ++ .../samples/snippets/api/README.rst | 98 ++++ .../samples/snippets/api/README.rst.in | 21 + .../samples/snippets/api/noxfile.py | 224 ++++++++ .../samples/snippets/api/report_exception.py | 46 ++ .../snippets/api/report_exception_test.py | 23 + .../snippets/api/requirements-test.txt | 1 + .../samples/snippets/api/requirements.txt | 1 + .../snippets/fluent_on_compute/README.md | 35 ++ .../snippets/fluent_on_compute/main.py | 42 ++ .../snippets/fluent_on_compute/main_test.py | 23 + .../snippets/fluent_on_compute/noxfile.py | 224 ++++++++ .../fluent_on_compute/requirements-test.txt | 2 + .../fluent_on_compute/requirements.txt | 1 + .../fluent_on_compute/startup_script.sh | 35 ++ .../synth.metadata | 11 +- .../google-cloud-error-reporting/synth.py | 11 +- 28 files changed, 1596 insertions(+), 27 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.github/CODEOWNERS create mode 100644 packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile create mode 100755 packages/google-cloud-error-reporting/.kokoro/docker/docs/fetch_gpg_keys.sh create mode 100644 packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg create mode 100755 packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh create mode 100644 packages/google-cloud-error-reporting/.trampolinerc create mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/README.rst create mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in create mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py create mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/report_exception.py create mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/report_exception_test.py create mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt create mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt create mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/README.md create mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main.py create mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main_test.py create mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py create mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt create mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt create mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/startup_script.sh diff --git a/packages/google-cloud-error-reporting/.github/CODEOWNERS b/packages/google-cloud-error-reporting/.github/CODEOWNERS new file mode 100644 index 000000000000..d2cf5a107cfc --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/CODEOWNERS @@ -0,0 +1,8 @@ +# Code owners file. +# This file controls who is tagged for review for any given pull request. +# +# For syntax help see: +# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax + + +/samples/**/*.py @googleapis/python-samples-owners \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.gitignore b/packages/google-cloud-error-reporting/.gitignore index b87e1ed580d9..b9daa52f118d 100644 --- a/packages/google-cloud-error-reporting/.gitignore +++ b/packages/google-cloud-error-reporting/.gitignore @@ -46,6 +46,7 @@ pip-log.txt # Built documentation docs/_build bigquery/docs/generated +docs.metadata # Virtual environment env/ @@ -57,4 +58,4 @@ system_tests/local_test_setup # Make sure a generated file isn't accidentally committed. pylintrc -pylintrc.test \ No newline at end of file +pylintrc.test diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh index 8d62ff18db09..8e64a1c98a47 100755 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -36,4 +36,10 @@ python3.6 -m pip uninstall --yes --quiet nox-automation python3.6 -m pip install --upgrade --quiet nox python3.6 -m nox --version -python3.6 -m nox +# If NOX_SESSION is set, it only runs the specified session, +# otherwise run all the sessions. +if [[ -n "${NOX_SESSION:-}" ]]; then + python3.6 -m nox -s "${NOX_SESSION:-}" +else + python3.6 -m nox +fi diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile new file mode 100644 index 000000000000..412b0b56a921 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -0,0 +1,98 @@ +# Copyright 2020 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 ubuntu:20.04 + +ENV DEBIAN_FRONTEND noninteractive + +# Ensure local Python is preferred over distribution Python. +ENV PATH /usr/local/bin:$PATH + +# Install dependencies. +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + apt-transport-https \ + build-essential \ + ca-certificates \ + curl \ + dirmngr \ + git \ + gpg-agent \ + graphviz \ + libbz2-dev \ + libdb5.3-dev \ + libexpat1-dev \ + libffi-dev \ + liblzma-dev \ + libreadline-dev \ + libsnappy-dev \ + libssl-dev \ + libsqlite3-dev \ + portaudio19-dev \ + redis-server \ + software-properties-common \ + ssh \ + sudo \ + tcl \ + tcl-dev \ + tk \ + tk-dev \ + uuid-dev \ + wget \ + zlib1g-dev \ + && add-apt-repository universe \ + && apt-get update \ + && apt-get -y install jq \ + && apt-get clean autoclean \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && rm -f /var/cache/apt/archives/*.deb + + +COPY fetch_gpg_keys.sh /tmp +# Install the desired versions of Python. +RUN set -ex \ + && export GNUPGHOME="$(mktemp -d)" \ + && echo "disable-ipv6" >> "${GNUPGHOME}/dirmngr.conf" \ + && /tmp/fetch_gpg_keys.sh \ + && for PYTHON_VERSION in 3.7.8 3.8.5; do \ + wget --no-check-certificate -O python-${PYTHON_VERSION}.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \ + && wget --no-check-certificate -O python-${PYTHON_VERSION}.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \ + && gpg --batch --verify python-${PYTHON_VERSION}.tar.xz.asc python-${PYTHON_VERSION}.tar.xz \ + && rm -r python-${PYTHON_VERSION}.tar.xz.asc \ + && mkdir -p /usr/src/python-${PYTHON_VERSION} \ + && tar -xJC /usr/src/python-${PYTHON_VERSION} --strip-components=1 -f python-${PYTHON_VERSION}.tar.xz \ + && rm python-${PYTHON_VERSION}.tar.xz \ + && cd /usr/src/python-${PYTHON_VERSION} \ + && ./configure \ + --enable-shared \ + # This works only on Python 2.7 and throws a warning on every other + # version, but seems otherwise harmless. + --enable-unicode=ucs4 \ + --with-system-ffi \ + --without-ensurepip \ + && make -j$(nproc) \ + && make install \ + && ldconfig \ + ; done \ + && rm -rf "${GNUPGHOME}" \ + && rm -rf /usr/src/python* \ + && rm -rf ~/.cache/ + +RUN wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ + && python3.7 /tmp/get-pip.py \ + && python3.8 /tmp/get-pip.py \ + && rm /tmp/get-pip.py + +CMD ["python3.7"] diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/fetch_gpg_keys.sh b/packages/google-cloud-error-reporting/.kokoro/docker/docs/fetch_gpg_keys.sh new file mode 100755 index 000000000000..d653dd868e4b --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/fetch_gpg_keys.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# Copyright 2020 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. + +# A script to fetch gpg keys with retry. +# Avoid jinja parsing the file. +# + +function retry { + if [[ "${#}" -le 1 ]]; then + echo "Usage: ${0} retry_count commands.." + exit 1 + fi + local retries=${1} + local command="${@:2}" + until [[ "${retries}" -le 0 ]]; do + $command && return 0 + if [[ $? -ne 0 ]]; then + echo "command failed, retrying" + ((retries--)) + fi + done + return 1 +} + +# 3.6.9, 3.7.5 (Ned Deily) +retry 3 gpg --keyserver ha.pool.sks-keyservers.net --recv-keys \ + 0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D + +# 3.8.0 (Łukasz Langa) +retry 3 gpg --keyserver ha.pool.sks-keyservers.net --recv-keys \ + E3FF2839C048B25C084DEBE9B26995E310250568 + +# diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg index 7cdc05f8bfeb..f3e7d6d1a7e0 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg @@ -11,12 +11,12 @@ action { gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" + value: "gcr.io/cloud-devrel-kokoro-resources/python-lib-docs" } env_vars: { key: "TRAMPOLINE_BUILD_FILE" @@ -28,6 +28,23 @@ env_vars: { value: "docs-staging" } +env_vars: { + key: "V2_STAGING_BUCKET" + value: "docs-staging-v2-staging" +} + +# It will upload the docker image after successful builds. +env_vars: { + key: "TRAMPOLINE_IMAGE_UPLOAD" + value: "true" +} + +# It will always build the docker image. +env_vars: { + key: "TRAMPOLINE_DOCKERFILE" + value: ".kokoro/docker/docs/Dockerfile" +} + # Fetch the token needed for reporting release status to GitHub before_action { fetch_keystore { diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg new file mode 100644 index 000000000000..1118107829b7 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg @@ -0,0 +1,17 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "STAGING_BUCKET" + value: "gcloud-python-test" +} + +env_vars: { + key: "V2_STAGING_BUCKET" + value: "gcloud-python-test" +} + +# We only upload the image in the main `docs` build. +env_vars: { + key: "TRAMPOLINE_IMAGE_UPLOAD" + value: "false" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh index 307339cd0260..8acb14e802b0 100755 --- a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh +++ b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh @@ -18,26 +18,16 @@ set -eo pipefail # Disable buffering, so that the logs stream through. export PYTHONUNBUFFERED=1 -cd github/python-error-reporting - -# Remove old nox -python3.6 -m pip uninstall --yes --quiet nox-automation +export PATH="${HOME}/.local/bin:${PATH}" # Install nox -python3.6 -m pip install --upgrade --quiet nox -python3.6 -m nox --version +python3 -m pip install --user --upgrade --quiet nox +python3 -m nox --version # build docs nox -s docs -python3 -m pip install gcp-docuploader - -# install a json parser -sudo apt-get update -sudo apt-get -y install software-properties-common -sudo add-apt-repository universe -sudo apt-get update -sudo apt-get -y install jq +python3 -m pip install --user gcp-docuploader # create metadata python3 -m docuploader create-metadata \ @@ -52,4 +42,23 @@ python3 -m docuploader create-metadata \ cat docs.metadata # upload docs -python3 -m docuploader upload docs/_build/html --metadata-file docs.metadata --staging-bucket docs-staging +python3 -m docuploader upload docs/_build/html --metadata-file docs.metadata --staging-bucket "${STAGING_BUCKET}" + + +# docfx yaml files +nox -s docfx + +# create metadata. +python3 -m docuploader create-metadata \ + --name=$(jq --raw-output '.name // empty' .repo-metadata.json) \ + --version=$(python3 setup.py --version) \ + --language=$(jq --raw-output '.language // empty' .repo-metadata.json) \ + --distribution-name=$(python3 setup.py --name) \ + --product-page=$(jq --raw-output '.product_documentation // empty' .repo-metadata.json) \ + --github-repository=$(jq --raw-output '.repo // empty' .repo-metadata.json) \ + --issue-tracker=$(jq --raw-output '.issue_tracker // empty' .repo-metadata.json) + +cat docs.metadata + +# upload docs +python3 -m docuploader upload docs/_build/html/docfx_yaml --metadata-file docs.metadata --destination-prefix docfx --staging-bucket "${V2_STAGING_BUCKET}" diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh new file mode 100755 index 000000000000..719bcd5ba84d --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh @@ -0,0 +1,487 @@ +#!/usr/bin/env bash +# Copyright 2020 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. + +# trampoline_v2.sh +# +# This script does 3 things. +# +# 1. Prepare the Docker image for the test +# 2. Run the Docker with appropriate flags to run the test +# 3. Upload the newly built Docker image +# +# in a way that is somewhat compatible with trampoline_v1. +# +# To run this script, first download few files from gcs to /dev/shm. +# (/dev/shm is passed into the container as KOKORO_GFILE_DIR). +# +# gsutil cp gs://cloud-devrel-kokoro-resources/python-docs-samples/secrets_viewer_service_account.json /dev/shm +# gsutil cp gs://cloud-devrel-kokoro-resources/python-docs-samples/automl_secrets.txt /dev/shm +# +# Then run the script. +# .kokoro/trampoline_v2.sh +# +# These environment variables are required: +# TRAMPOLINE_IMAGE: The docker image to use. +# TRAMPOLINE_DOCKERFILE: The location of the Dockerfile. +# +# You can optionally change these environment variables: +# TRAMPOLINE_IMAGE_UPLOAD: +# (true|false): Whether to upload the Docker image after the +# successful builds. +# TRAMPOLINE_BUILD_FILE: The script to run in the docker container. +# TRAMPOLINE_WORKSPACE: The workspace path in the docker container. +# Defaults to /workspace. +# Potentially there are some repo specific envvars in .trampolinerc in +# the project root. + + +set -euo pipefail + +TRAMPOLINE_VERSION="2.0.5" + +if command -v tput >/dev/null && [[ -n "${TERM:-}" ]]; then + readonly IO_COLOR_RED="$(tput setaf 1)" + readonly IO_COLOR_GREEN="$(tput setaf 2)" + readonly IO_COLOR_YELLOW="$(tput setaf 3)" + readonly IO_COLOR_RESET="$(tput sgr0)" +else + readonly IO_COLOR_RED="" + readonly IO_COLOR_GREEN="" + readonly IO_COLOR_YELLOW="" + readonly IO_COLOR_RESET="" +fi + +function function_exists { + [ $(LC_ALL=C type -t $1)"" == "function" ] +} + +# Logs a message using the given color. The first argument must be one +# of the IO_COLOR_* variables defined above, such as +# "${IO_COLOR_YELLOW}". The remaining arguments will be logged in the +# given color. The log message will also have an RFC-3339 timestamp +# prepended (in UTC). You can disable the color output by setting +# TERM=vt100. +function log_impl() { + local color="$1" + shift + local timestamp="$(date -u "+%Y-%m-%dT%H:%M:%SZ")" + echo "================================================================" + echo "${color}${timestamp}:" "$@" "${IO_COLOR_RESET}" + echo "================================================================" +} + +# Logs the given message with normal coloring and a timestamp. +function log() { + log_impl "${IO_COLOR_RESET}" "$@" +} + +# Logs the given message in green with a timestamp. +function log_green() { + log_impl "${IO_COLOR_GREEN}" "$@" +} + +# Logs the given message in yellow with a timestamp. +function log_yellow() { + log_impl "${IO_COLOR_YELLOW}" "$@" +} + +# Logs the given message in red with a timestamp. +function log_red() { + log_impl "${IO_COLOR_RED}" "$@" +} + +readonly tmpdir=$(mktemp -d -t ci-XXXXXXXX) +readonly tmphome="${tmpdir}/h" +mkdir -p "${tmphome}" + +function cleanup() { + rm -rf "${tmpdir}" +} +trap cleanup EXIT + +RUNNING_IN_CI="${RUNNING_IN_CI:-false}" + +# The workspace in the container, defaults to /workspace. +TRAMPOLINE_WORKSPACE="${TRAMPOLINE_WORKSPACE:-/workspace}" + +pass_down_envvars=( + # TRAMPOLINE_V2 variables. + # Tells scripts whether they are running as part of CI or not. + "RUNNING_IN_CI" + # Indicates which CI system we're in. + "TRAMPOLINE_CI" + # Indicates the version of the script. + "TRAMPOLINE_VERSION" +) + +log_yellow "Building with Trampoline ${TRAMPOLINE_VERSION}" + +# Detect which CI systems we're in. If we're in any of the CI systems +# we support, `RUNNING_IN_CI` will be true and `TRAMPOLINE_CI` will be +# the name of the CI system. Both envvars will be passing down to the +# container for telling which CI system we're in. +if [[ -n "${KOKORO_BUILD_ID:-}" ]]; then + # descriptive env var for indicating it's on CI. + RUNNING_IN_CI="true" + TRAMPOLINE_CI="kokoro" + if [[ "${TRAMPOLINE_USE_LEGACY_SERVICE_ACCOUNT:-}" == "true" ]]; then + if [[ ! -f "${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json" ]]; then + log_red "${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json does not exist. Did you forget to mount cloud-devrel-kokoro-resources/trampoline? Aborting." + exit 1 + fi + # This service account will be activated later. + TRAMPOLINE_SERVICE_ACCOUNT="${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json" + else + if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then + gcloud auth list + fi + log_yellow "Configuring Container Registry access" + gcloud auth configure-docker --quiet + fi + pass_down_envvars+=( + # KOKORO dynamic variables. + "KOKORO_BUILD_NUMBER" + "KOKORO_BUILD_ID" + "KOKORO_JOB_NAME" + "KOKORO_GIT_COMMIT" + "KOKORO_GITHUB_COMMIT" + "KOKORO_GITHUB_PULL_REQUEST_NUMBER" + "KOKORO_GITHUB_PULL_REQUEST_COMMIT" + # For Build Cop Bot + "KOKORO_GITHUB_COMMIT_URL" + "KOKORO_GITHUB_PULL_REQUEST_URL" + ) +elif [[ "${TRAVIS:-}" == "true" ]]; then + RUNNING_IN_CI="true" + TRAMPOLINE_CI="travis" + pass_down_envvars+=( + "TRAVIS_BRANCH" + "TRAVIS_BUILD_ID" + "TRAVIS_BUILD_NUMBER" + "TRAVIS_BUILD_WEB_URL" + "TRAVIS_COMMIT" + "TRAVIS_COMMIT_MESSAGE" + "TRAVIS_COMMIT_RANGE" + "TRAVIS_JOB_NAME" + "TRAVIS_JOB_NUMBER" + "TRAVIS_JOB_WEB_URL" + "TRAVIS_PULL_REQUEST" + "TRAVIS_PULL_REQUEST_BRANCH" + "TRAVIS_PULL_REQUEST_SHA" + "TRAVIS_PULL_REQUEST_SLUG" + "TRAVIS_REPO_SLUG" + "TRAVIS_SECURE_ENV_VARS" + "TRAVIS_TAG" + ) +elif [[ -n "${GITHUB_RUN_ID:-}" ]]; then + RUNNING_IN_CI="true" + TRAMPOLINE_CI="github-workflow" + pass_down_envvars+=( + "GITHUB_WORKFLOW" + "GITHUB_RUN_ID" + "GITHUB_RUN_NUMBER" + "GITHUB_ACTION" + "GITHUB_ACTIONS" + "GITHUB_ACTOR" + "GITHUB_REPOSITORY" + "GITHUB_EVENT_NAME" + "GITHUB_EVENT_PATH" + "GITHUB_SHA" + "GITHUB_REF" + "GITHUB_HEAD_REF" + "GITHUB_BASE_REF" + ) +elif [[ "${CIRCLECI:-}" == "true" ]]; then + RUNNING_IN_CI="true" + TRAMPOLINE_CI="circleci" + pass_down_envvars+=( + "CIRCLE_BRANCH" + "CIRCLE_BUILD_NUM" + "CIRCLE_BUILD_URL" + "CIRCLE_COMPARE_URL" + "CIRCLE_JOB" + "CIRCLE_NODE_INDEX" + "CIRCLE_NODE_TOTAL" + "CIRCLE_PREVIOUS_BUILD_NUM" + "CIRCLE_PROJECT_REPONAME" + "CIRCLE_PROJECT_USERNAME" + "CIRCLE_REPOSITORY_URL" + "CIRCLE_SHA1" + "CIRCLE_STAGE" + "CIRCLE_USERNAME" + "CIRCLE_WORKFLOW_ID" + "CIRCLE_WORKFLOW_JOB_ID" + "CIRCLE_WORKFLOW_UPSTREAM_JOB_IDS" + "CIRCLE_WORKFLOW_WORKSPACE_ID" + ) +fi + +# Configure the service account for pulling the docker image. +function repo_root() { + local dir="$1" + while [[ ! -d "${dir}/.git" ]]; do + dir="$(dirname "$dir")" + done + echo "${dir}" +} + +# Detect the project root. In CI builds, we assume the script is in +# the git tree and traverse from there, otherwise, traverse from `pwd` +# to find `.git` directory. +if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then + PROGRAM_PATH="$(realpath "$0")" + PROGRAM_DIR="$(dirname "${PROGRAM_PATH}")" + PROJECT_ROOT="$(repo_root "${PROGRAM_DIR}")" +else + PROJECT_ROOT="$(repo_root $(pwd))" +fi + +log_yellow "Changing to the project root: ${PROJECT_ROOT}." +cd "${PROJECT_ROOT}" + +# To support relative path for `TRAMPOLINE_SERVICE_ACCOUNT`, we need +# to use this environment variable in `PROJECT_ROOT`. +if [[ -n "${TRAMPOLINE_SERVICE_ACCOUNT:-}" ]]; then + + mkdir -p "${tmpdir}/gcloud" + gcloud_config_dir="${tmpdir}/gcloud" + + log_yellow "Using isolated gcloud config: ${gcloud_config_dir}." + export CLOUDSDK_CONFIG="${gcloud_config_dir}" + + log_yellow "Using ${TRAMPOLINE_SERVICE_ACCOUNT} for authentication." + gcloud auth activate-service-account \ + --key-file "${TRAMPOLINE_SERVICE_ACCOUNT}" + log_yellow "Configuring Container Registry access" + gcloud auth configure-docker --quiet +fi + +required_envvars=( + # The basic trampoline configurations. + "TRAMPOLINE_IMAGE" + "TRAMPOLINE_BUILD_FILE" +) + +if [[ -f "${PROJECT_ROOT}/.trampolinerc" ]]; then + source "${PROJECT_ROOT}/.trampolinerc" +fi + +log_yellow "Checking environment variables." +for e in "${required_envvars[@]}" +do + if [[ -z "${!e:-}" ]]; then + log "Missing ${e} env var. Aborting." + exit 1 + fi +done + +# We want to support legacy style TRAMPOLINE_BUILD_FILE used with V1 +# script: e.g. "github/repo-name/.kokoro/run_tests.sh" +TRAMPOLINE_BUILD_FILE="${TRAMPOLINE_BUILD_FILE#github/*/}" +log_yellow "Using TRAMPOLINE_BUILD_FILE: ${TRAMPOLINE_BUILD_FILE}" + +# ignore error on docker operations and test execution +set +e + +log_yellow "Preparing Docker image." +# We only download the docker image in CI builds. +if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then + # Download the docker image specified by `TRAMPOLINE_IMAGE` + + # We may want to add --max-concurrent-downloads flag. + + log_yellow "Start pulling the Docker image: ${TRAMPOLINE_IMAGE}." + if docker pull "${TRAMPOLINE_IMAGE}"; then + log_green "Finished pulling the Docker image: ${TRAMPOLINE_IMAGE}." + has_image="true" + else + log_red "Failed pulling the Docker image: ${TRAMPOLINE_IMAGE}." + has_image="false" + fi +else + # For local run, check if we have the image. + if docker images "${TRAMPOLINE_IMAGE}:latest" | grep "${TRAMPOLINE_IMAGE}"; then + has_image="true" + else + has_image="false" + fi +fi + + +# The default user for a Docker container has uid 0 (root). To avoid +# creating root-owned files in the build directory we tell docker to +# use the current user ID. +user_uid="$(id -u)" +user_gid="$(id -g)" +user_name="$(id -un)" + +# To allow docker in docker, we add the user to the docker group in +# the host os. +docker_gid=$(cut -d: -f3 < <(getent group docker)) + +update_cache="false" +if [[ "${TRAMPOLINE_DOCKERFILE:-none}" != "none" ]]; then + # Build the Docker image from the source. + context_dir=$(dirname "${TRAMPOLINE_DOCKERFILE}") + docker_build_flags=( + "-f" "${TRAMPOLINE_DOCKERFILE}" + "-t" "${TRAMPOLINE_IMAGE}" + "--build-arg" "UID=${user_uid}" + "--build-arg" "USERNAME=${user_name}" + ) + if [[ "${has_image}" == "true" ]]; then + docker_build_flags+=("--cache-from" "${TRAMPOLINE_IMAGE}") + fi + + log_yellow "Start building the docker image." + if [[ "${TRAMPOLINE_VERBOSE:-false}" == "true" ]]; then + echo "docker build" "${docker_build_flags[@]}" "${context_dir}" + fi + + # ON CI systems, we want to suppress docker build logs, only + # output the logs when it fails. + if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then + if docker build "${docker_build_flags[@]}" "${context_dir}" \ + > "${tmpdir}/docker_build.log" 2>&1; then + if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then + cat "${tmpdir}/docker_build.log" + fi + + log_green "Finished building the docker image." + update_cache="true" + else + log_red "Failed to build the Docker image, aborting." + log_yellow "Dumping the build logs:" + cat "${tmpdir}/docker_build.log" + exit 1 + fi + else + if docker build "${docker_build_flags[@]}" "${context_dir}"; then + log_green "Finished building the docker image." + update_cache="true" + else + log_red "Failed to build the Docker image, aborting." + exit 1 + fi + fi +else + if [[ "${has_image}" != "true" ]]; then + log_red "We do not have ${TRAMPOLINE_IMAGE} locally, aborting." + exit 1 + fi +fi + +# We use an array for the flags so they are easier to document. +docker_flags=( + # Remove the container after it exists. + "--rm" + + # Use the host network. + "--network=host" + + # Run in priviledged mode. We are not using docker for sandboxing or + # isolation, just for packaging our dev tools. + "--privileged" + + # Run the docker script with the user id. Because the docker image gets to + # write in ${PWD} you typically want this to be your user id. + # To allow docker in docker, we need to use docker gid on the host. + "--user" "${user_uid}:${docker_gid}" + + # Pass down the USER. + "--env" "USER=${user_name}" + + # Mount the project directory inside the Docker container. + "--volume" "${PROJECT_ROOT}:${TRAMPOLINE_WORKSPACE}" + "--workdir" "${TRAMPOLINE_WORKSPACE}" + "--env" "PROJECT_ROOT=${TRAMPOLINE_WORKSPACE}" + + # Mount the temporary home directory. + "--volume" "${tmphome}:/h" + "--env" "HOME=/h" + + # Allow docker in docker. + "--volume" "/var/run/docker.sock:/var/run/docker.sock" + + # Mount the /tmp so that docker in docker can mount the files + # there correctly. + "--volume" "/tmp:/tmp" + # Pass down the KOKORO_GFILE_DIR and KOKORO_KEYSTORE_DIR + # TODO(tmatsuo): This part is not portable. + "--env" "TRAMPOLINE_SECRET_DIR=/secrets" + "--volume" "${KOKORO_GFILE_DIR:-/dev/shm}:/secrets/gfile" + "--env" "KOKORO_GFILE_DIR=/secrets/gfile" + "--volume" "${KOKORO_KEYSTORE_DIR:-/dev/shm}:/secrets/keystore" + "--env" "KOKORO_KEYSTORE_DIR=/secrets/keystore" +) + +# Add an option for nicer output if the build gets a tty. +if [[ -t 0 ]]; then + docker_flags+=("-it") +fi + +# Passing down env vars +for e in "${pass_down_envvars[@]}" +do + if [[ -n "${!e:-}" ]]; then + docker_flags+=("--env" "${e}=${!e}") + fi +done + +# If arguments are given, all arguments will become the commands run +# in the container, otherwise run TRAMPOLINE_BUILD_FILE. +if [[ $# -ge 1 ]]; then + log_yellow "Running the given commands '" "${@:1}" "' in the container." + readonly commands=("${@:1}") + if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then + echo docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" "${commands[@]}" + fi + docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" "${commands[@]}" +else + log_yellow "Running the tests in a Docker container." + docker_flags+=("--entrypoint=${TRAMPOLINE_BUILD_FILE}") + if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then + echo docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" + fi + docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" +fi + + +test_retval=$? + +if [[ ${test_retval} -eq 0 ]]; then + log_green "Build finished with ${test_retval}" +else + log_red "Build finished with ${test_retval}" +fi + +# Only upload it when the test passes. +if [[ "${update_cache}" == "true" ]] && \ + [[ $test_retval == 0 ]] && \ + [[ "${TRAMPOLINE_IMAGE_UPLOAD:-false}" == "true" ]]; then + log_yellow "Uploading the Docker image." + if docker push "${TRAMPOLINE_IMAGE}"; then + log_green "Finished uploading the Docker image." + else + log_red "Failed uploading the Docker image." + fi + # Call trampoline_after_upload_hook if it's defined. + if function_exists trampoline_after_upload_hook; then + trampoline_after_upload_hook + fi + +fi + +exit "${test_retval}" diff --git a/packages/google-cloud-error-reporting/.trampolinerc b/packages/google-cloud-error-reporting/.trampolinerc new file mode 100644 index 000000000000..995ee29111e1 --- /dev/null +++ b/packages/google-cloud-error-reporting/.trampolinerc @@ -0,0 +1,51 @@ +# Copyright 2020 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. + +# Template for .trampolinerc + +# Add required env vars here. +required_envvars+=( + "STAGING_BUCKET" + "V2_STAGING_BUCKET" +) + +# Add env vars which are passed down into the container here. +pass_down_envvars+=( + "STAGING_BUCKET" + "V2_STAGING_BUCKET" +) + +# Prevent unintentional override on the default image. +if [[ "${TRAMPOLINE_IMAGE_UPLOAD:-false}" == "true" ]] && \ + [[ -z "${TRAMPOLINE_IMAGE:-}" ]]; then + echo "Please set TRAMPOLINE_IMAGE if you want to upload the Docker image." + exit 1 +fi + +# Define the default value if it makes sense. +if [[ -z "${TRAMPOLINE_IMAGE_UPLOAD:-}" ]]; then + TRAMPOLINE_IMAGE_UPLOAD="" +fi + +if [[ -z "${TRAMPOLINE_IMAGE:-}" ]]; then + TRAMPOLINE_IMAGE="" +fi + +if [[ -z "${TRAMPOLINE_DOCKERFILE:-}" ]]; then + TRAMPOLINE_DOCKERFILE="" +fi + +if [[ -z "${TRAMPOLINE_BUILD_FILE:-}" ]]; then + TRAMPOLINE_BUILD_FILE="" +fi diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index af91f6e56e0c..755f4854ad16 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -20,6 +20,10 @@ # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath("..")) +# For plugins that can not read conf.py. +# See also: https://github.com/docascode/sphinx-docfx-yaml/issues/85 +sys.path.insert(0, os.path.abspath(".")) + __version__ = "" # -- General configuration ------------------------------------------------ @@ -90,7 +94,12 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. -exclude_patterns = ["_build"] +exclude_patterns = [ + "_build", + "samples/AUTHORING_GUIDE.md", + "samples/CONTRIBUTING.md", + "samples/snippets/README.rst", +] # The reST default role (used for this markup: `text`) to use for all # documents. diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 0889d61651c6..1116c841654a 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -100,6 +100,10 @@ def system(session): """Run the system test suite.""" system_test_path = os.path.join("tests", "system.py") system_test_folder_path = os.path.join("tests", "system") + + # Check the value of `RUN_SYSTEM_TESTS` env var. It defaults to true. + if os.environ.get("RUN_SYSTEM_TESTS", "true") == "false": + session.skip("RUN_SYSTEM_TESTS is set to false, skipping") # Sanity check: Only run tests if the environment variable is set. if not os.environ.get("GOOGLE_APPLICATION_CREDENTIALS", ""): session.skip("Credentials must be set via environment variable") @@ -161,3 +165,36 @@ def docs(session): os.path.join("docs", ""), os.path.join("docs", "_build", "html", ""), ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def docfx(session): + """Build the docfx yaml files for this library.""" + + session.install("-e", ".") + session.install("sphinx<3.0.0", "alabaster", "recommonmark", "sphinx-docfx-yaml") + + shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) + session.run( + "sphinx-build", + "-T", # show full traceback on exception + "-N", # no colors + "-D", + ( + "extensions=sphinx.ext.autodoc," + "sphinx.ext.autosummary," + "docfx_yaml.extension," + "sphinx.ext.intersphinx," + "sphinx.ext.coverage," + "sphinx.ext.napoleon," + "sphinx.ext.todo," + "sphinx.ext.viewcode," + "recommonmark" + ), + "-b", + "html", + "-d", + os.path.join("docs", "_build", "doctrees", ""), + os.path.join("docs", ""), + os.path.join("docs", "_build", "html", ""), + ) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst new file mode 100644 index 000000000000..74bcd6397f29 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst @@ -0,0 +1,98 @@ +.. This file is automatically generated. Do not edit this file directly. + +Stackdriver Error Reporting Python Samples +=============================================================================== + +.. image:: https://gstatic.com/cloudssh/images/open-btn.png + :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=error_reporting/api/README.rst + + +This directory contains samples for Stackdriver Error Reporting. `Stackdriver Error Reporting`_ aggregates and displays errors produced in + your running cloud services. + + + + +.. _Stackdriver Error Reporting: https://cloud.google.com/error-reporting/docs/ + +Setup +------------------------------------------------------------------------------- + + +Authentication +++++++++++++++ + +This sample requires you to have authentication setup. Refer to the +`Authentication Getting Started Guide`_ for instructions on setting up +credentials for applications. + +.. _Authentication Getting Started Guide: + https://cloud.google.com/docs/authentication/getting-started + +Install Dependencies +++++++++++++++++++++ + +#. Clone python-docs-samples and change directory to the sample directory you want to use. + + .. code-block:: bash + + $ git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git + +#. Install `pip`_ and `virtualenv`_ if you do not already have them. You may want to refer to the `Python Development Environment Setup Guide`_ for Google Cloud Platform for instructions. + + .. _Python Development Environment Setup Guide: + https://cloud.google.com/python/setup + +#. Create a virtualenv. Samples are compatible with Python 2.7 and 3.4+. + + .. code-block:: bash + + $ virtualenv env + $ source env/bin/activate + +#. Install the dependencies needed to run the samples. + + .. code-block:: bash + + $ pip install -r requirements.txt + +.. _pip: https://pip.pypa.io/ +.. _virtualenv: https://virtualenv.pypa.io/ + +Samples +------------------------------------------------------------------------------- + +Report Exception ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +.. image:: https://gstatic.com/cloudssh/images/open-btn.png + :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=error_reporting/api/report_exception.py,error_reporting/api/README.rst + + + + +To run this sample: + +.. code-block:: bash + + $ python report_exception.py + + + + +The client library +------------------------------------------------------------------------------- + +This sample uses the `Google Cloud Client Library for Python`_. +You can read the documentation for more details on API usage and use GitHub +to `browse the source`_ and `report issues`_. + +.. _Google Cloud Client Library for Python: + https://googlecloudplatform.github.io/google-cloud-python/ +.. _browse the source: + https://github.com/GoogleCloudPlatform/google-cloud-python +.. _report issues: + https://github.com/GoogleCloudPlatform/google-cloud-python/issues + + +.. _Google Cloud SDK: https://cloud.google.com/sdk/ \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in new file mode 100644 index 000000000000..ac60cc80c81a --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in @@ -0,0 +1,21 @@ +# This file is used to generate README.rst + +product: + name: Stackdriver Error Reporting + short_name: Error Reporting + url: https://cloud.google.com/error-reporting/docs/ + description: > + `Stackdriver Error Reporting`_ aggregates and displays errors produced in + your running cloud services. + +setup: +- auth +- install_deps + +samples: +- name: Report Exception + file: report_exception.py + +cloud_client_library: true + +folder: error_reporting/api \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py new file mode 100644 index 000000000000..ba55d7ce53ca --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -0,0 +1,224 @@ +# Copyright 2019 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 __future__ import print_function + +import os +from pathlib import Path +import sys + +import nox + + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +# Copy `noxfile_config.py` to your directory and modify it instead. + + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + 'ignored_versions': ["2.7"], + + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + 'gcloud_project_env': 'GOOGLE_CLOUD_PROJECT', + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + 'envs': {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append('.') + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars(): + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG['gcloud_project_env'] + # This should error out if not set. + ret['GOOGLE_CLOUD_PROJECT'] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG['envs']) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to tested samples. +ALL_VERSIONS = ["2.7", "3.6", "3.7", "3.8"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG['ignored_versions'] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = bool(os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False)) +# +# Style Checks +# + + +def _determine_local_import_names(start_dir): + """Determines all import names that should be considered "local". + + This is used when running the linter to insure that import order is + properly checked. + """ + file_ext_pairs = [os.path.splitext(path) for path in os.listdir(start_dir)] + return [ + basename + for basename, extension in file_ext_pairs + if extension == ".py" + or os.path.isdir(os.path.join(start_dir, basename)) + and basename not in ("__pycache__") + ] + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--import-order-style=google", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session): + session.install("flake8", "flake8-import-order") + + local_names = _determine_local_import_names(".") + args = FLAKE8_COMMON_ARGS + [ + "--application-import-names", + ",".join(local_names), + "." + ] + session.run("flake8", *args) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests(session, post_install=None): + """Runs py.test for a particular project.""" + if os.path.exists("requirements.txt"): + session.install("-r", "requirements.txt") + + if os.path.exists("requirements-test.txt"): + session.install("-r", "requirements-test.txt") + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars() + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session): + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip("SKIPPED: {} tests are disabled for this sample.".format( + session.python + )) + + +# +# Readmegen +# + + +def _get_repo_root(): + """ Returns the root folder of the project. """ + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session, path): + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/report_exception.py b/packages/google-cloud-error-reporting/samples/snippets/api/report_exception.py new file mode 100644 index 000000000000..2b7e8f06ba92 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/api/report_exception.py @@ -0,0 +1,46 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# 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. + + +# [START error_reporting] +# [START error_reporting_quickstart] +# [START error_reporting_setup_python] +def simulate_error(): + from google.cloud import error_reporting + + client = error_reporting.Client() + try: + # simulate calling a method that's not defined + raise NameError + except Exception: + client.report_exception() +# [END error_reporting_setup_python] +# [END error_reporting_quickstart] +# [END error_reporting] + + +# [START error_reporting_manual] +# [START error_reporting_setup_python_manual] +def report_manual_error(): + from google.cloud import error_reporting + + client = error_reporting.Client() + client.report("An error has occurred.") +# [START error_reporting_setup_python_manual] +# [END error_reporting_manual] + + +if __name__ == '__main__': + simulate_error() + report_manual_error() diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/report_exception_test.py b/packages/google-cloud-error-reporting/samples/snippets/api/report_exception_test.py new file mode 100644 index 000000000000..042951e9a487 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/api/report_exception_test.py @@ -0,0 +1,23 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# 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 report_exception + + +def test_error_sends(): + report_exception.simulate_error() + + +def test_manual_error_sends(): + report_exception.report_manual_error() diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt new file mode 100644 index 000000000000..7e460c8c866e --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -0,0 +1 @@ +pytest==6.0.1 diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt new file mode 100644 index 000000000000..242254e84f2a --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -0,0 +1 @@ +google-cloud-error-reporting==0.34.0 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/README.md b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/README.md new file mode 100644 index 000000000000..d3a58c167d82 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/README.md @@ -0,0 +1,35 @@ +# Google Error Reorting Samples Samples + +[![Open in Cloud Shell][shell_img]][shell_link] + +[shell_img]: http://gstatic.com/cloudssh/images/open-btn.png +[shell_link]: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=error_reporting/fluent_on_compute/README.md + +This section contains samples for [Google Cloud Error Reporting](https://cloud.google.com/error-reporting). + +A startup script has been provided to demonstrated how to properly provision a GCE +instance with fluentd configured. Note the intallation of fluentd, the addition of the config file, + and the restarting of the fluetnd service. You can start an instance using +it like this: + + gcloud compute instances create example-instance --metadata-from-file startup-script=startup_script.sh + +or simply use it as reference when creating your own instance. + +After fluentd is configured, main.py could be used to simulate an error: + + gcloud compute copy-files main.py example-instance:~/main.py + +Then, + + gcloud compute ssh example-instance + python ~/main.py + +And you will see the message in the Errors Console. + + +These samples are used on the following documentation page: + +> https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine + + diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main.py new file mode 100644 index 000000000000..45208c913ac5 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main.py @@ -0,0 +1,42 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# 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. + +# [START error_reporting] +import traceback + +import fluent.event +import fluent.sender + + +def simulate_error(): + fluent.sender.setup('myapp', host='localhost', port=24224) + + def report(ex): + data = {} + data['message'] = '{0}'.format(ex) + data['serviceContext'] = {'service': 'myapp'} + # ... add more metadata + fluent.event.Event('errors', data) + + # report exception data using: + try: + # simulate calling a method that's not defined + raise NameError + except Exception: + report(traceback.format_exc()) +# [END error_reporting] + + +if __name__ == '__main__': + simulate_error() diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main_test.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main_test.py new file mode 100644 index 000000000000..11a24d035438 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main_test.py @@ -0,0 +1,23 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# 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 mock + +import main + + +@mock.patch("fluent.event") +def test_error_sends(event_mock): + main.simulate_error() + event_mock.Event.assert_called_once_with(mock.ANY, mock.ANY) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py new file mode 100644 index 000000000000..ba55d7ce53ca --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -0,0 +1,224 @@ +# Copyright 2019 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 __future__ import print_function + +import os +from pathlib import Path +import sys + +import nox + + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +# Copy `noxfile_config.py` to your directory and modify it instead. + + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + 'ignored_versions': ["2.7"], + + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + 'gcloud_project_env': 'GOOGLE_CLOUD_PROJECT', + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + 'envs': {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append('.') + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars(): + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG['gcloud_project_env'] + # This should error out if not set. + ret['GOOGLE_CLOUD_PROJECT'] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG['envs']) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to tested samples. +ALL_VERSIONS = ["2.7", "3.6", "3.7", "3.8"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG['ignored_versions'] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = bool(os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False)) +# +# Style Checks +# + + +def _determine_local_import_names(start_dir): + """Determines all import names that should be considered "local". + + This is used when running the linter to insure that import order is + properly checked. + """ + file_ext_pairs = [os.path.splitext(path) for path in os.listdir(start_dir)] + return [ + basename + for basename, extension in file_ext_pairs + if extension == ".py" + or os.path.isdir(os.path.join(start_dir, basename)) + and basename not in ("__pycache__") + ] + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--import-order-style=google", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session): + session.install("flake8", "flake8-import-order") + + local_names = _determine_local_import_names(".") + args = FLAKE8_COMMON_ARGS + [ + "--application-import-names", + ",".join(local_names), + "." + ] + session.run("flake8", *args) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests(session, post_install=None): + """Runs py.test for a particular project.""" + if os.path.exists("requirements.txt"): + session.install("-r", "requirements.txt") + + if os.path.exists("requirements-test.txt"): + session.install("-r", "requirements-test.txt") + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars() + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session): + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip("SKIPPED: {} tests are disabled for this sample.".format( + session.python + )) + + +# +# Readmegen +# + + +def _get_repo_root(): + """ Returns the root folder of the project. """ + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session, path): + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt new file mode 100644 index 000000000000..2466e25087c6 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -0,0 +1,2 @@ +pytest==6.0.1 +mock==4.0.2 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt new file mode 100644 index 000000000000..d1c2863f99a0 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt @@ -0,0 +1 @@ +fluent-logger==0.9.6 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/startup_script.sh b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/startup_script.sh new file mode 100644 index 000000000000..f2ef895dcfdc --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/startup_script.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# Copyright 2016 Google Inc. All rights reserved. +# +# 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. + +set -v + +curl -sSO "https://dl.google.com/cloudagents/install-logging-agent.sh" +chmod +x install-logging-agent.sh +./install-logging-agent.sh +mkdir -p /etc/google-fluentd/config.d/ +cat < /etc/google-fluentd/config.d/forward.conf + + type forward + port 24224 + +EOF +service google-fluentd restart + +apt-get update +apt-get install -yq \ + git build-essential supervisor python python-dev python-pip libffi-dev \ + libssl-dev +pip install fluent-logger + diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index ccbf1f4d38aa..7f27343fc919 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,22 +4,21 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "840d67c09502ae99ce4771c66bde1cefb961a367" + "sha": "397c0f8fb57b31a2c74f0cfc410a017e6e3ae712" } }, { "git": { - "name": "googleapis", - "remote": "https://github.com/googleapis/googleapis.git", - "sha": "5202cfe3e5c2907a1a21a4c6d4bd0812029b6aa3", - "internalRef": "319247865" + "name": "synthtool", + "remote": "https://github.com/googleapis/synthtool.git", + "sha": "5747555f7620113d9a2078a48f4c047a99d31b3e" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "303271797a360f8a439203413f13a160f2f5b3b4" + "sha": "5747555f7620113d9a2078a48f4c047a99d31b3e" } } ], diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index dc6e7550492e..089acd5380de 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -15,6 +15,7 @@ """This script is used to synthesize generated parts of this library.""" import synthtool as s from synthtool import gcp +from synthtool.languages import python gapic = gcp.GAPICBazel() common = gcp.CommonTemplates() @@ -117,10 +118,18 @@ # Add templated files # ---------------------------------------------------------------------------- templated_files = common.py_library( - unit_cov_level=97, cov_level=98, system_test_dependencies=["test_utils"] + samples=True, + unit_cov_level=97, + cov_level=98, + system_test_dependencies=["test_utils"] ) s.move(templated_files) +# ---------------------------------------------------------------------------- +# Samples templates +# ---------------------------------------------------------------------------- +python.py_samples(skip_readmes=True) + # TODO(busunkim): Use latest sphinx after microgenerator transition s.replace("noxfile.py", """['"]sphinx['"]""", '"sphinx<3.0.0"') From fd6c4e440d4e17fc8ca6886764cee8c0354da70d Mon Sep 17 00:00:00 2001 From: arithmetic1728 <58957152+arithmetic1728@users.noreply.github.com> Date: Thu, 27 Aug 2020 18:08:13 -0700 Subject: [PATCH 170/467] feat!: migrate to use microgen (#23) * feat!: migrate to use microgen * add comments * remove google/cloud/errorreporting folder --- .../google-cloud-error-reporting/.coveragerc | 13 +- .../google-cloud-error-reporting/README.rst | 6 +- .../docs/errorreporting_v1beta1/services.rst | 12 + .../docs/errorreporting_v1beta1/types.rst | 5 + .../docs/gapic/v1beta1/api.rst | 6 - .../docs/gapic/v1beta1/types.rst | 5 - .../docs/index.rst | 4 +- .../google/cloud/error_reporting/_gapic.py | 25 +- .../cloud/errorreporting_v1beta1/__init__.py | 82 +- .../errorreporting_v1beta1/gapic/__init__.py | 0 .../errorreporting_v1beta1/gapic/enums.py | 89 - .../gapic/error_group_service_client.py | 343 ---- .../error_group_service_client_config.py | 33 - .../gapic/error_stats_service_client.py | 561 ------ .../error_stats_service_client_config.py | 38 - .../gapic/report_errors_service_client.py | 292 --- .../report_errors_service_client_config.py | 28 - .../gapic/transports/__init__.py | 0 .../error_group_service_grpc_transport.py | 143 -- .../error_stats_service_grpc_transport.py | 155 -- .../report_errors_service_grpc_transport.py | 136 -- .../errorreporting_v1beta1/proto/__init__.py | 0 .../proto/common_pb2.py | 842 -------- .../proto/common_pb2_grpc.py | 3 - .../proto/error_group_service_pb2.py | 211 -- .../proto/error_group_service_pb2_grpc.py | 132 -- .../proto/error_stats_service_pb2.py | 1619 ---------------- .../proto/error_stats_service_pb2_grpc.py | 175 -- .../proto/report_errors_service_pb2.py | 363 ---- .../proto/report_errors_service_pb2_grpc.py | 92 - .../proto/synth.metadata | 3 - .../cloud/errorreporting_v1beta1/py.typed | 2 + .../services}/__init__.py | 14 +- .../services/error_group_service}/__init__.py | 18 +- .../error_group_service/async_client.py | 263 +++ .../services/error_group_service/client.py | 407 ++++ .../transports/__init__.py | 36 + .../error_group_service/transports/base.py | 137 ++ .../error_group_service/transports/grpc.py | 269 +++ .../transports/grpc_asyncio.py | 264 +++ .../services/error_stats_service/__init__.py | 24 + .../error_stats_service/async_client.py | 385 ++++ .../services/error_stats_service/client.py | 522 +++++ .../services/error_stats_service/pagers.py | 277 +++ .../transports/__init__.py | 36 + .../error_stats_service/transports/base.py | 157 ++ .../error_stats_service/transports/grpc.py | 302 +++ .../transports/grpc_asyncio.py | 296 +++ .../report_errors_service/__init__.py | 24 + .../report_errors_service/async_client.py | 203 ++ .../services/report_errors_service/client.py | 335 ++++ .../transports/__init__.py | 38 + .../report_errors_service/transports/base.py | 127 ++ .../report_errors_service/transports/grpc.py | 251 +++ .../transports/grpc_asyncio.py | 244 +++ .../cloud/errorreporting_v1beta1/types.py | 57 - .../errorreporting_v1beta1/types/__init__.py | 73 + .../errorreporting_v1beta1/types/common.py | 249 +++ .../types/error_group_service.py | 58 + .../types/error_stats_service.py | 420 ++++ .../types/report_errors_service.py | 115 ++ .../google-cloud-error-reporting/mypy.ini | 3 + .../google-cloud-error-reporting/noxfile.py | 8 +- .../fixup_errorreporting_v1beta1_keywords.py | 183 ++ .../google-cloud-error-reporting/setup.py | 18 +- .../synth.metadata | 6 +- .../google-cloud-error-reporting/synth.py | 92 +- ...st_system_report_errors_service_v1beta1.py | 8 +- .../tests/system/test_system.py | 21 +- .../gapic/errorreporting_v1beta1/__init__.py | 1 + .../test_error_group_service.py | 1139 +++++++++++ .../test_error_stats_service.py | 1693 +++++++++++++++++ .../test_report_errors_service.py | 959 ++++++++++ ...test_error_group_service_client_v1beta1.py | 142 -- ...test_error_stats_service_client_v1beta1.py | 205 -- ...st_report_errors_service_client_v1beta1.py | 104 - .../tests/unit/test__gapic.py | 16 +- 77 files changed, 9656 insertions(+), 5961 deletions(-) create mode 100644 packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst create mode 100644 packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst delete mode 100644 packages/google-cloud-error-reporting/docs/gapic/v1beta1/api.rst delete mode 100644 packages/google-cloud-error-reporting/docs/gapic/v1beta1/types.rst delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/__init__.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/__init__.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/__init__.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/synth.metadata create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/py.typed rename packages/google-cloud-error-reporting/google/{ => cloud/errorreporting_v1beta1/services}/__init__.py (73%) rename packages/google-cloud-error-reporting/google/cloud/{ => errorreporting_v1beta1/services/error_group_service}/__init__.py (70%) create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py create mode 100644 packages/google-cloud-error-reporting/mypy.ini create mode 100644 packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py create mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py create mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py create mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py create mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py delete mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py delete mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py delete mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc index dd39c8546c41..10cb72e8ddfc 100644 --- a/packages/google-cloud-error-reporting/.coveragerc +++ b/packages/google-cloud-error-reporting/.coveragerc @@ -21,15 +21,14 @@ branch = True [report] fail_under = 100 show_missing = True +omit = google/cloud/errorreporting/__init__.py, .nox/* exclude_lines = # Re-enable the standard pragma pragma: NO COVER # Ignore debug-only repr def __repr__ - # Ignore abstract methods - raise NotImplementedError -omit = - */gapic/*.py - */proto/*.py - */core/*.py - */site-packages/*.py \ No newline at end of file + # Ignore pkg_resources exceptions. + # This is added at the module level as a safeguard for if someone + # generates the code and tries to run it without pip installing. This + # makes it virtually impossible to test properly. + except pkg_resources.DistributionNotFound \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 2cc4486de582..9af9209b2f29 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -54,11 +54,13 @@ dependencies. Supported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^ -Python >= 3.5 +Python >= 3.6 Deprecated Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^ -Python == 2.7. Python 2.7 support will be removed on January 1, 2020. +Python == 2.7. + +The last version of this library compatible with Python 2.7 is google-cloud-error-reporting==0.34.0. Mac/Linux diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst new file mode 100644 index 000000000000..a5ec3b928f68 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst @@ -0,0 +1,12 @@ +Services for Google Cloud Errorreporting v1beta1 API +==================================================== + +.. automodule:: google.cloud.errorreporting_v1beta1.services.error_group_service + :members: + :inherited-members: +.. automodule:: google.cloud.errorreporting_v1beta1.services.error_stats_service + :members: + :inherited-members: +.. automodule:: google.cloud.errorreporting_v1beta1.services.report_errors_service + :members: + :inherited-members: diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst new file mode 100644 index 000000000000..9a74e3473dcd --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst @@ -0,0 +1,5 @@ +Types for Google Cloud Errorreporting v1beta1 API +================================================= + +.. automodule:: google.cloud.errorreporting_v1beta1.types + :members: diff --git a/packages/google-cloud-error-reporting/docs/gapic/v1beta1/api.rst b/packages/google-cloud-error-reporting/docs/gapic/v1beta1/api.rst deleted file mode 100644 index 37ead7d3d055..000000000000 --- a/packages/google-cloud-error-reporting/docs/gapic/v1beta1/api.rst +++ /dev/null @@ -1,6 +0,0 @@ -Client for Stackdriver Error Reporting API -========================================== - -.. automodule:: google.cloud.errorreporting_v1beta1 - :members: - :inherited-members: \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/gapic/v1beta1/types.rst b/packages/google-cloud-error-reporting/docs/gapic/v1beta1/types.rst deleted file mode 100644 index 989f48a7d15e..000000000000 --- a/packages/google-cloud-error-reporting/docs/gapic/v1beta1/types.rst +++ /dev/null @@ -1,5 +0,0 @@ -Types for Stackdriver Error Reporting API Client -================================================ - -.. automodule:: google.cloud.errorreporting_v1beta1.types - :members: \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/index.rst b/packages/google-cloud-error-reporting/docs/index.rst index f9772f3b4e24..949b1c9dad8e 100644 --- a/packages/google-cloud-error-reporting/docs/index.rst +++ b/packages/google-cloud-error-reporting/docs/index.rst @@ -19,8 +19,8 @@ API Reference client util - gapic/v1beta1/api - gapic/v1beta1/types + errorreporting_v1beta1/services + errorreporting_v1beta1/types Changelog diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py index 0c6ec9e60a1a..9c7f95c80362 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py @@ -13,10 +13,9 @@ # limitations under the License. """GAX wrapper for Error Reporting API requests.""" +import json -from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client -from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 -from google.protobuf.json_format import ParseDict +import google.cloud.errorreporting_v1beta1 def make_report_error_api(client): @@ -28,7 +27,7 @@ def make_report_error_api(client): :rtype: :class:_ErrorReportingGapicApi :returns: An Error Reporting API instance. """ - gapic_api = report_errors_service_client.ReportErrorsServiceClient( + gapic_api = google.cloud.errorreporting_v1beta1.ReportErrorsServiceClient( credentials=client._credentials, client_info=client._client_info, client_options=client._client_options, @@ -40,7 +39,7 @@ class _ErrorReportingGapicApi(object): """Helper mapping Error Reporting-related APIs :type gapic: - :class:`report_errors_service_client.ReportErrorsServiceClient` + :class:`google.cloud.errorreporting_v1beta1.ReportErrorsServiceClient` :param gapic: API object used to make RPCs. :type project: str @@ -62,7 +61,15 @@ def report_error_event(self, error_report): Use :meth:~`google.cloud.error_reporting.client._build_error_report` """ - project_name = self._gapic_api.project_path(self._project) - error_report_payload = report_errors_service_pb2.ReportedErrorEvent() - ParseDict(error_report, error_report_payload) - self._gapic_api.report_error_event(project_name, error_report_payload) + project_name = f"projects/{self._project}" + + # Since error_report uses camel case for key names (like serviceContext), + # but ReportedErrorEvent uses snake case for key names (like service_context), + # we need to route throught json. + error_report_payload = google.cloud.errorreporting_v1beta1.ReportedErrorEvent.from_json( + json.dumps(error_report) + ) + + self._gapic_api.report_error_event( + project_name=project_name, event=error_report_payload + ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 9553e4a4738c..43fc283fab9e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -1,45 +1,75 @@ -# Copyright 2018 Google LLC +# -*- coding: utf-8 -*- + +# Copyright 2020 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 # -# https://www.apache.org/licenses/LICENSE-2.0 +# 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 __future__ import absolute_import - -from google.cloud.errorreporting_v1beta1 import types -from google.cloud.errorreporting_v1beta1.gapic import enums -from google.cloud.errorreporting_v1beta1.gapic import error_group_service_client -from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client -from google.cloud.errorreporting_v1beta1.gapic import report_errors_service_client - - -class ErrorGroupServiceClient(error_group_service_client.ErrorGroupServiceClient): - __doc__ = error_group_service_client.ErrorGroupServiceClient.__doc__ - enums = enums - - -class ErrorStatsServiceClient(error_stats_service_client.ErrorStatsServiceClient): - __doc__ = error_stats_service_client.ErrorStatsServiceClient.__doc__ - enums = enums - - -class ReportErrorsServiceClient(report_errors_service_client.ReportErrorsServiceClient): - __doc__ = report_errors_service_client.ReportErrorsServiceClient.__doc__ - enums = enums +from .services.error_group_service import ErrorGroupServiceClient +from .services.error_stats_service import ErrorStatsServiceClient +from .services.report_errors_service import ReportErrorsServiceClient +from .types.common import ErrorContext +from .types.common import ErrorEvent +from .types.common import ErrorGroup +from .types.common import HttpRequestContext +from .types.common import ServiceContext +from .types.common import SourceLocation +from .types.common import TrackingIssue +from .types.error_group_service import GetGroupRequest +from .types.error_group_service import UpdateGroupRequest +from .types.error_stats_service import DeleteEventsRequest +from .types.error_stats_service import DeleteEventsResponse +from .types.error_stats_service import ErrorGroupOrder +from .types.error_stats_service import ErrorGroupStats +from .types.error_stats_service import ListEventsRequest +from .types.error_stats_service import ListEventsResponse +from .types.error_stats_service import ListGroupStatsRequest +from .types.error_stats_service import ListGroupStatsResponse +from .types.error_stats_service import QueryTimeRange +from .types.error_stats_service import ServiceContextFilter +from .types.error_stats_service import TimedCount +from .types.error_stats_service import TimedCountAlignment +from .types.report_errors_service import ReportErrorEventRequest +from .types.report_errors_service import ReportErrorEventResponse +from .types.report_errors_service import ReportedErrorEvent __all__ = ( - "enums", - "types", + "DeleteEventsRequest", + "DeleteEventsResponse", + "ErrorContext", + "ErrorEvent", + "ErrorGroup", + "ErrorGroupOrder", "ErrorGroupServiceClient", + "ErrorGroupStats", "ErrorStatsServiceClient", + "GetGroupRequest", + "HttpRequestContext", + "ListEventsRequest", + "ListEventsResponse", + "ListGroupStatsRequest", + "ListGroupStatsResponse", + "QueryTimeRange", + "ReportErrorEventRequest", + "ReportErrorEventResponse", + "ReportedErrorEvent", + "ServiceContext", + "ServiceContextFilter", + "SourceLocation", + "TimedCount", + "TimedCountAlignment", + "TrackingIssue", + "UpdateGroupRequest", "ReportErrorsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py deleted file mode 100644 index 52002c1710dc..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/enums.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -"""Wrappers for protocol buffer enum types.""" - -import enum - - -class ErrorGroupOrder(enum.IntEnum): - """ - A sorting order of error groups. - - Attributes: - GROUP_ORDER_UNSPECIFIED (int): No group order specified. - COUNT_DESC (int): Total count of errors in the given time window in descending order. - LAST_SEEN_DESC (int): Timestamp when the group was last seen in the given time window - in descending order. - CREATED_DESC (int): Timestamp when the group was created in descending order. - AFFECTED_USERS_DESC (int): Number of affected users in the given time window in descending order. - """ - - GROUP_ORDER_UNSPECIFIED = 0 - COUNT_DESC = 1 - LAST_SEEN_DESC = 2 - CREATED_DESC = 3 - AFFECTED_USERS_DESC = 4 - - -class TimedCountAlignment(enum.IntEnum): - """ - Specifies how the time periods of error group counts are aligned. - - Attributes: - ERROR_COUNT_ALIGNMENT_UNSPECIFIED (int): No alignment specified. - ALIGNMENT_EQUAL_ROUNDED (int): The time periods shall be consecutive, have width equal to the - requested duration, and be aligned at the ``alignment_time`` provided in - the request. The ``alignment_time`` does not have to be inside the query - period but even if it is outside, only time periods are returned which - overlap with the query period. A rounded alignment will typically result - in a different size of the first or the last time period. - ALIGNMENT_EQUAL_AT_END (int): The time periods shall be consecutive, have width equal to the - requested duration, and be aligned at the end of the requested time - period. This can result in a different size of the - first time period. - """ - - ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0 - ALIGNMENT_EQUAL_ROUNDED = 1 - ALIGNMENT_EQUAL_AT_END = 2 - - -class QueryTimeRange(object): - class Period(enum.IntEnum): - """ - The supported time ranges. - - Attributes: - PERIOD_UNSPECIFIED (int): Do not use. - PERIOD_1_HOUR (int): Retrieve data for the last hour. - Recommended minimum timed count duration: 1 min. - PERIOD_6_HOURS (int): Retrieve data for the last 6 hours. - Recommended minimum timed count duration: 10 min. - PERIOD_1_DAY (int): Retrieve data for the last day. - Recommended minimum timed count duration: 1 hour. - PERIOD_1_WEEK (int): Retrieve data for the last week. - Recommended minimum timed count duration: 6 hours. - PERIOD_30_DAYS (int): Retrieve data for the last 30 days. - Recommended minimum timed count duration: 1 day. - """ - - PERIOD_UNSPECIFIED = 0 - PERIOD_1_HOUR = 1 - PERIOD_6_HOURS = 2 - PERIOD_1_DAY = 3 - PERIOD_1_WEEK = 4 - PERIOD_30_DAYS = 5 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py deleted file mode 100644 index 98bfceef218f..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py +++ /dev/null @@ -1,343 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -"""Accesses the google.devtools.clouderrorreporting.v1beta1 ErrorGroupService API.""" - -import pkg_resources -import warnings - -from google.oauth2 import service_account -import google.api_core.client_options -import google.api_core.gapic_v1.client_info -import google.api_core.gapic_v1.config -import google.api_core.gapic_v1.method -import google.api_core.gapic_v1.routing_header -import google.api_core.grpc_helpers -import google.api_core.path_template -import grpc - -from google.cloud.errorreporting_v1beta1.gapic import enums -from google.cloud.errorreporting_v1beta1.gapic import error_group_service_client_config -from google.cloud.errorreporting_v1beta1.gapic.transports import ( - error_group_service_grpc_transport, -) -from google.cloud.errorreporting_v1beta1.proto import common_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc - - -_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( - "google-cloud-error-reporting", -).version - - -class ErrorGroupServiceClient(object): - """Service for retrieving and updating individual error groups.""" - - SERVICE_ADDRESS = "clouderrorreporting.googleapis.com:443" - """The default address of the service.""" - - # The name of the interface for this client. This is the key used to - # find the method configuration in the client_config dictionary. - _INTERFACE_NAME = "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService" - - @classmethod - def from_service_account_file(cls, filename, *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: - ErrorGroupServiceClient: 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 - - @classmethod - def group_path(cls, project, group): - """Return a fully-qualified error_group string.""" - return google.api_core.path_template.expand( - "projects/{project}/groups/{group}", project=project, group=group, - ) - - def __init__( - self, - transport=None, - channel=None, - credentials=None, - client_config=None, - client_info=None, - client_options=None, - ): - """Constructor. - - Args: - transport (Union[~.ErrorGroupServiceGrpcTransport, - Callable[[~.Credentials, type], ~.ErrorGroupServiceGrpcTransport]): A transport - instance, responsible for actually making the API calls. - The default transport uses the gRPC protocol. - This argument may also be a callable which returns a - transport instance. Callables will be sent the credentials - as the first argument and the default transport class as - the second argument. - channel (grpc.Channel): DEPRECATED. A ``Channel`` instance - through which to make calls. This argument is mutually exclusive - with ``credentials``; providing both will raise an exception. - credentials (google.auth.credentials.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is mutually exclusive with providing a - transport instance to ``transport``; doing so will raise - an exception. - client_config (dict): DEPRECATED. A dictionary of call options for - each method. If not specified, the default configuration is used. - 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. - client_options (Union[dict, google.api_core.client_options.ClientOptions]): - Client options used to set user options on the client. API Endpoint - should be set through client_options. - """ - # Raise deprecation warnings for things we want to go away. - if client_config is not None: - warnings.warn( - "The `client_config` argument is deprecated.", - PendingDeprecationWarning, - stacklevel=2, - ) - else: - client_config = error_group_service_client_config.config - - if channel: - warnings.warn( - "The `channel` argument is deprecated; use " "`transport` instead.", - PendingDeprecationWarning, - stacklevel=2, - ) - - api_endpoint = self.SERVICE_ADDRESS - if client_options: - if type(client_options) == dict: - client_options = google.api_core.client_options.from_dict( - client_options - ) - if client_options.api_endpoint: - api_endpoint = client_options.api_endpoint - - # Instantiate the transport. - # The transport is responsible for handling serialization and - # deserialization and actually sending data to the service. - if transport: - if callable(transport): - self.transport = transport( - credentials=credentials, - default_class=error_group_service_grpc_transport.ErrorGroupServiceGrpcTransport, - address=api_endpoint, - ) - else: - if credentials: - raise ValueError( - "Received both a transport instance and " - "credentials; these are mutually exclusive." - ) - self.transport = transport - else: - self.transport = error_group_service_grpc_transport.ErrorGroupServiceGrpcTransport( - address=api_endpoint, channel=channel, credentials=credentials, - ) - - if client_info is None: - client_info = google.api_core.gapic_v1.client_info.ClientInfo( - gapic_version=_GAPIC_LIBRARY_VERSION, - ) - else: - client_info.gapic_version = _GAPIC_LIBRARY_VERSION - self._client_info = client_info - - # Parse out the default settings for retry and timeout for each RPC - # from the client configuration. - # (Ordinarily, these are the defaults specified in the `*_config.py` - # file next to this one.) - self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( - client_config["interfaces"][self._INTERFACE_NAME], - ) - - # Save a dictionary of cached API call functions. - # These are the actual callables which invoke the proper - # transport methods, wrapped with `wrap_method` to add retry, - # timeout, and the like. - self._inner_api_calls = {} - - # Service calls - def update_group( - self, - group, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Replace the data for the specified group. - Fails if the group does not exist. - - Example: - >>> from google.cloud import errorreporting_v1beta1 - >>> - >>> client = errorreporting_v1beta1.ErrorGroupServiceClient() - >>> - >>> # TODO: Initialize `group`: - >>> group = {} - >>> - >>> response = client.update_group(group) - - Args: - group (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ErrorGroup]): Required. The group which replaces the resource on the server. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` - retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will - be retried using a default configuration. - timeout (Optional[float]): The amount of time, in seconds, to wait - for the request to complete. Note that if ``retry`` is - specified, the timeout applies to each individual attempt. - metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata - that is provided to the method. - - Returns: - A :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` instance. - - Raises: - google.api_core.exceptions.GoogleAPICallError: If the request - failed for any reason. - google.api_core.exceptions.RetryError: If the request failed due - to a retryable error and retry attempts failed. - ValueError: If the parameters are invalid. - """ - # Wrap the transport method to add retry and timeout logic. - if "update_group" not in self._inner_api_calls: - self._inner_api_calls[ - "update_group" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.update_group, - default_retry=self._method_configs["UpdateGroup"].retry, - default_timeout=self._method_configs["UpdateGroup"].timeout, - client_info=self._client_info, - ) - - request = error_group_service_pb2.UpdateGroupRequest(group=group,) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("group.name", group.name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - return self._inner_api_calls["update_group"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def get_group( - self, - group_name, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Get the specified group. - - Example: - >>> from google.cloud import errorreporting_v1beta1 - >>> - >>> client = errorreporting_v1beta1.ErrorGroupServiceClient() - >>> - >>> group_name = client.group_path('[PROJECT]', '[GROUP]') - >>> - >>> response = client.get_group(group_name) - - Args: - group_name (str): The group resource name. Written as - ``projects/{projectID}/groups/{group_name}``. Call - ```groupStats.list`` `__ - to return a list of groups belonging to this project. - - Example: ``projects/my-project-123/groups/my-group`` - retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will - be retried using a default configuration. - timeout (Optional[float]): The amount of time, in seconds, to wait - for the request to complete. Note that if ``retry`` is - specified, the timeout applies to each individual attempt. - metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata - that is provided to the method. - - Returns: - A :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroup` instance. - - Raises: - google.api_core.exceptions.GoogleAPICallError: If the request - failed for any reason. - google.api_core.exceptions.RetryError: If the request failed due - to a retryable error and retry attempts failed. - ValueError: If the parameters are invalid. - """ - # Wrap the transport method to add retry and timeout logic. - if "get_group" not in self._inner_api_calls: - self._inner_api_calls[ - "get_group" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.get_group, - default_retry=self._method_configs["GetGroup"].retry, - default_timeout=self._method_configs["GetGroup"].timeout, - client_info=self._client_info, - ) - - request = error_group_service_pb2.GetGroupRequest(group_name=group_name,) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("group_name", group_name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - return self._inner_api_calls["get_group"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py deleted file mode 100644 index dee3d0d865ed..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client_config.py +++ /dev/null @@ -1,33 +0,0 @@ -config = { - "interfaces": { - "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService": { - "retry_codes": { - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], - "non_idempotent": [], - }, - "retry_params": { - "default": { - "initial_retry_delay_millis": 100, - "retry_delay_multiplier": 1.3, - "max_retry_delay_millis": 60000, - "initial_rpc_timeout_millis": 20000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 20000, - "total_timeout_millis": 600000, - } - }, - "methods": { - "UpdateGroup": { - "timeout_millis": 60000, - "retry_codes_name": "idempotent", - "retry_params_name": "default", - }, - "GetGroup": { - "timeout_millis": 60000, - "retry_codes_name": "idempotent", - "retry_params_name": "default", - }, - }, - } - } -} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py deleted file mode 100644 index 88a5a29c5188..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py +++ /dev/null @@ -1,561 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -"""Accesses the google.devtools.clouderrorreporting.v1beta1 ErrorStatsService API.""" - -import functools -import pkg_resources -import warnings - -from google.oauth2 import service_account -import google.api_core.client_options -import google.api_core.gapic_v1.client_info -import google.api_core.gapic_v1.config -import google.api_core.gapic_v1.method -import google.api_core.gapic_v1.routing_header -import google.api_core.grpc_helpers -import google.api_core.page_iterator -import google.api_core.path_template -import grpc - -from google.cloud.errorreporting_v1beta1.gapic import enums -from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client_config -from google.cloud.errorreporting_v1beta1.gapic.transports import ( - error_stats_service_grpc_transport, -) -from google.cloud.errorreporting_v1beta1.proto import common_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc -from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2_grpc -from google.protobuf import duration_pb2 -from google.protobuf import timestamp_pb2 - - -_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( - "google-cloud-error-reporting", -).version - - -class ErrorStatsServiceClient(object): - """ - An API for retrieving and managing error statistics as well as data for - individual events. - """ - - SERVICE_ADDRESS = "clouderrorreporting.googleapis.com:443" - """The default address of the service.""" - - # The name of the interface for this client. This is the key used to - # find the method configuration in the client_config dictionary. - _INTERFACE_NAME = "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService" - - @classmethod - def from_service_account_file(cls, filename, *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: - ErrorStatsServiceClient: 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 - - @classmethod - def project_path(cls, project): - """Return a fully-qualified project string.""" - return google.api_core.path_template.expand( - "projects/{project}", project=project, - ) - - def __init__( - self, - transport=None, - channel=None, - credentials=None, - client_config=None, - client_info=None, - client_options=None, - ): - """Constructor. - - Args: - transport (Union[~.ErrorStatsServiceGrpcTransport, - Callable[[~.Credentials, type], ~.ErrorStatsServiceGrpcTransport]): A transport - instance, responsible for actually making the API calls. - The default transport uses the gRPC protocol. - This argument may also be a callable which returns a - transport instance. Callables will be sent the credentials - as the first argument and the default transport class as - the second argument. - channel (grpc.Channel): DEPRECATED. A ``Channel`` instance - through which to make calls. This argument is mutually exclusive - with ``credentials``; providing both will raise an exception. - credentials (google.auth.credentials.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is mutually exclusive with providing a - transport instance to ``transport``; doing so will raise - an exception. - client_config (dict): DEPRECATED. A dictionary of call options for - each method. If not specified, the default configuration is used. - 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. - client_options (Union[dict, google.api_core.client_options.ClientOptions]): - Client options used to set user options on the client. API Endpoint - should be set through client_options. - """ - # Raise deprecation warnings for things we want to go away. - if client_config is not None: - warnings.warn( - "The `client_config` argument is deprecated.", - PendingDeprecationWarning, - stacklevel=2, - ) - else: - client_config = error_stats_service_client_config.config - - if channel: - warnings.warn( - "The `channel` argument is deprecated; use " "`transport` instead.", - PendingDeprecationWarning, - stacklevel=2, - ) - - api_endpoint = self.SERVICE_ADDRESS - if client_options: - if type(client_options) == dict: - client_options = google.api_core.client_options.from_dict( - client_options - ) - if client_options.api_endpoint: - api_endpoint = client_options.api_endpoint - - # Instantiate the transport. - # The transport is responsible for handling serialization and - # deserialization and actually sending data to the service. - if transport: - if callable(transport): - self.transport = transport( - credentials=credentials, - default_class=error_stats_service_grpc_transport.ErrorStatsServiceGrpcTransport, - address=api_endpoint, - ) - else: - if credentials: - raise ValueError( - "Received both a transport instance and " - "credentials; these are mutually exclusive." - ) - self.transport = transport - else: - self.transport = error_stats_service_grpc_transport.ErrorStatsServiceGrpcTransport( - address=api_endpoint, channel=channel, credentials=credentials, - ) - - if client_info is None: - client_info = google.api_core.gapic_v1.client_info.ClientInfo( - gapic_version=_GAPIC_LIBRARY_VERSION, - ) - else: - client_info.gapic_version = _GAPIC_LIBRARY_VERSION - self._client_info = client_info - - # Parse out the default settings for retry and timeout for each RPC - # from the client configuration. - # (Ordinarily, these are the defaults specified in the `*_config.py` - # file next to this one.) - self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( - client_config["interfaces"][self._INTERFACE_NAME], - ) - - # Save a dictionary of cached API call functions. - # These are the actual callables which invoke the proper - # transport methods, wrapped with `wrap_method` to add retry, - # timeout, and the like. - self._inner_api_calls = {} - - # Service calls - def delete_events( - self, - project_name, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Deletes all error events of a given project. - - Example: - >>> from google.cloud import errorreporting_v1beta1 - >>> - >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() - >>> - >>> project_name = client.project_path('[PROJECT]') - >>> - >>> response = client.delete_events(project_name) - - Args: - project_name (str): Required. The resource name of the Google Cloud Platform project. - Written as ``projects/`` plus the `Google Cloud Platform project - ID `__. Example: - ``projects/my-project-123``. - retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will - be retried using a default configuration. - timeout (Optional[float]): The amount of time, in seconds, to wait - for the request to complete. Note that if ``retry`` is - specified, the timeout applies to each individual attempt. - metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata - that is provided to the method. - - Returns: - A :class:`~google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse` instance. - - Raises: - google.api_core.exceptions.GoogleAPICallError: If the request - failed for any reason. - google.api_core.exceptions.RetryError: If the request failed due - to a retryable error and retry attempts failed. - ValueError: If the parameters are invalid. - """ - # Wrap the transport method to add retry and timeout logic. - if "delete_events" not in self._inner_api_calls: - self._inner_api_calls[ - "delete_events" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.delete_events, - default_retry=self._method_configs["DeleteEvents"].retry, - default_timeout=self._method_configs["DeleteEvents"].timeout, - client_info=self._client_info, - ) - - request = error_stats_service_pb2.DeleteEventsRequest( - project_name=project_name, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("project_name", project_name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - return self._inner_api_calls["delete_events"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def list_group_stats( - self, - project_name, - time_range=None, # DO NOT MOVE, see synth.py - group_id=None, - service_filter=None, - timed_count_duration=None, - alignment=None, - alignment_time=None, - order=None, - page_size=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - - """ - Lists the specified groups. - - Example: - >>> from google.cloud import errorreporting_v1beta1 - >>> - >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() - >>> - >>> project_name = client.project_path('[PROJECT]') - >>> - >>> # Iterate over all results - >>> for element in client.list_group_stats(project_name): - ... # process element - ... pass - >>> - >>> - >>> # Alternatively: - >>> - >>> # Iterate over results one page at a time - >>> for page in client.list_group_stats(project_name).pages: - ... for element in page: - ... # process element - ... pass - - Args: - project_name (str): Required. The resource name of the Google Cloud Platform project. Written - as projects/ plus the - Google Cloud - Platform project ID. - - Example: projects/my-project-123. - group_id (list[str]): Optional. List all ErrorGroupStats with these IDs. - service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): Optional. List only ErrorGroupStats which belong to a service - context that matches the filter. - Data for all service contexts is returned if this field is not specified. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter` - time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): Optional. List data for the given time range. If not set, a default - time range is used. The field time_range_begin in the response will - specify the beginning of this time range. Only ErrorGroupStats with a - non-zero count in the given time range are returned, unless the request - contains an explicit group_id list. If a group_id list is given, also - ErrorGroupStats with zero occurrences are returned. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` - timed_count_duration (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Duration]): Optional. The preferred duration for a single returned - ``TimedCount``. If not set, no timed counts are returned. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.Duration` - alignment (~google.cloud.errorreporting_v1beta1.types.TimedCountAlignment): Optional. The alignment of the timed counts to be returned. Default - is ``ALIGNMENT_EQUAL_AT_END``. - alignment_time (Union[dict, ~google.cloud.errorreporting_v1beta1.types.Timestamp]): Optional. Time where the timed counts shall be aligned if rounded - alignment is chosen. Default is 00:00 UTC. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.Timestamp` - order (~google.cloud.errorreporting_v1beta1.types.ErrorGroupOrder): Optional. The sort order in which the results are returned. Default - is ``COUNT_DESC``. - page_size (int): The maximum number of resources contained in the - underlying API response. If page streaming is performed per- - resource, this parameter does not affect the return value. If page - streaming is performed per-page, this determines the maximum number - of resources in a page. - retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will - be retried using a default configuration. - timeout (Optional[float]): The amount of time, in seconds, to wait - for the request to complete. Note that if ``retry`` is - specified, the timeout applies to each individual attempt. - metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata - that is provided to the method. - - Returns: - A :class:`~google.api_core.page_iterator.PageIterator` instance. - An iterable of :class:`~google.cloud.errorreporting_v1beta1.types.ErrorGroupStats` instances. - You can also iterate over the pages of the response - using its `pages` property. - - Raises: - google.api_core.exceptions.GoogleAPICallError: If the request - failed for any reason. - google.api_core.exceptions.RetryError: If the request failed due - to a retryable error and retry attempts failed. - ValueError: If the parameters are invalid. - """ - # Wrap the transport method to add retry and timeout logic. - if "list_group_stats" not in self._inner_api_calls: - self._inner_api_calls[ - "list_group_stats" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.list_group_stats, - default_retry=self._method_configs["ListGroupStats"].retry, - default_timeout=self._method_configs["ListGroupStats"].timeout, - client_info=self._client_info, - ) - - request = error_stats_service_pb2.ListGroupStatsRequest( - project_name=project_name, - group_id=group_id, - service_filter=service_filter, - time_range=time_range, - timed_count_duration=timed_count_duration, - alignment=alignment, - alignment_time=alignment_time, - order=order, - page_size=page_size, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("project_name", project_name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - iterator = google.api_core.page_iterator.GRPCIterator( - client=None, - method=functools.partial( - self._inner_api_calls["list_group_stats"], - retry=retry, - timeout=timeout, - metadata=metadata, - ), - request=request, - items_field="error_group_stats", - request_token_field="page_token", - response_token_field="next_page_token", - ) - return iterator - - def list_events( - self, - project_name, - group_id, - service_filter=None, - time_range=None, - page_size=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Lists the specified events. - - Example: - >>> from google.cloud import errorreporting_v1beta1 - >>> - >>> client = errorreporting_v1beta1.ErrorStatsServiceClient() - >>> - >>> project_name = client.project_path('[PROJECT]') - >>> - >>> # TODO: Initialize `group_id`: - >>> group_id = '' - >>> - >>> # Iterate over all results - >>> for element in client.list_events(project_name, group_id): - ... # process element - ... pass - >>> - >>> - >>> # Alternatively: - >>> - >>> # Iterate over results one page at a time - >>> for page in client.list_events(project_name, group_id).pages: - ... for element in page: - ... # process element - ... pass - - Args: - project_name (str): Required. The resource name of the Google Cloud Platform project. - Written as ``projects/`` plus the `Google Cloud Platform project - ID `__. Example: - ``projects/my-project-123``. - group_id (str): Required. The group for which events shall be returned. - service_filter (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter]): Optional. List only ErrorGroups which belong to a service context that - matches the filter. - Data for all service contexts is returned if this field is not specified. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.ServiceContextFilter` - time_range (Union[dict, ~google.cloud.errorreporting_v1beta1.types.QueryTimeRange]): Optional. List only data for the given time range. If not set a - default time range is used. The field time_range_begin in the response - will specify the beginning of this time range. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.QueryTimeRange` - page_size (int): The maximum number of resources contained in the - underlying API response. If page streaming is performed per- - resource, this parameter does not affect the return value. If page - streaming is performed per-page, this determines the maximum number - of resources in a page. - retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will - be retried using a default configuration. - timeout (Optional[float]): The amount of time, in seconds, to wait - for the request to complete. Note that if ``retry`` is - specified, the timeout applies to each individual attempt. - metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata - that is provided to the method. - - Returns: - A :class:`~google.api_core.page_iterator.PageIterator` instance. - An iterable of :class:`~google.cloud.errorreporting_v1beta1.types.ErrorEvent` instances. - You can also iterate over the pages of the response - using its `pages` property. - - Raises: - google.api_core.exceptions.GoogleAPICallError: If the request - failed for any reason. - google.api_core.exceptions.RetryError: If the request failed due - to a retryable error and retry attempts failed. - ValueError: If the parameters are invalid. - """ - # Wrap the transport method to add retry and timeout logic. - if "list_events" not in self._inner_api_calls: - self._inner_api_calls[ - "list_events" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.list_events, - default_retry=self._method_configs["ListEvents"].retry, - default_timeout=self._method_configs["ListEvents"].timeout, - client_info=self._client_info, - ) - - request = error_stats_service_pb2.ListEventsRequest( - project_name=project_name, - group_id=group_id, - service_filter=service_filter, - time_range=time_range, - page_size=page_size, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("project_name", project_name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - iterator = google.api_core.page_iterator.GRPCIterator( - client=None, - method=functools.partial( - self._inner_api_calls["list_events"], - retry=retry, - timeout=timeout, - metadata=metadata, - ), - request=request, - items_field="error_events", - request_token_field="page_token", - response_token_field="next_page_token", - ) - return iterator diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py deleted file mode 100644 index 0af98e64b9ab..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client_config.py +++ /dev/null @@ -1,38 +0,0 @@ -config = { - "interfaces": { - "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService": { - "retry_codes": { - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], - "non_idempotent": [], - }, - "retry_params": { - "default": { - "initial_retry_delay_millis": 100, - "retry_delay_multiplier": 1.3, - "max_retry_delay_millis": 60000, - "initial_rpc_timeout_millis": 20000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 20000, - "total_timeout_millis": 600000, - } - }, - "methods": { - "DeleteEvents": { - "timeout_millis": 60000, - "retry_codes_name": "idempotent", - "retry_params_name": "default", - }, - "ListGroupStats": { - "timeout_millis": 60000, - "retry_codes_name": "idempotent", - "retry_params_name": "default", - }, - "ListEvents": { - "timeout_millis": 60000, - "retry_codes_name": "idempotent", - "retry_params_name": "default", - }, - }, - } - } -} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py deleted file mode 100644 index 9d35c6b62906..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client.py +++ /dev/null @@ -1,292 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -"""Accesses the google.devtools.clouderrorreporting.v1beta1 ReportErrorsService API.""" - -import pkg_resources -import warnings - -from google.oauth2 import service_account -import google.api_core.client_options -import google.api_core.gapic_v1.client_info -import google.api_core.gapic_v1.config -import google.api_core.gapic_v1.method -import google.api_core.gapic_v1.routing_header -import google.api_core.grpc_helpers -import google.api_core.path_template -import grpc - -from google.cloud.errorreporting_v1beta1.gapic import enums -from google.cloud.errorreporting_v1beta1.gapic import ( - report_errors_service_client_config, -) -from google.cloud.errorreporting_v1beta1.gapic.transports import ( - report_errors_service_grpc_transport, -) -from google.cloud.errorreporting_v1beta1.proto import common_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc -from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2_grpc -from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 -from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2_grpc -from google.protobuf import duration_pb2 -from google.protobuf import timestamp_pb2 - - -_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( - "google-cloud-error-reporting", -).version - - -class ReportErrorsServiceClient(object): - """An API for reporting error events.""" - - SERVICE_ADDRESS = "clouderrorreporting.googleapis.com:443" - """The default address of the service.""" - - # The name of the interface for this client. This is the key used to - # find the method configuration in the client_config dictionary. - _INTERFACE_NAME = "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService" - - @classmethod - def from_service_account_file(cls, filename, *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: - ReportErrorsServiceClient: 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 - - @classmethod - def project_path(cls, project): - """Return a fully-qualified project string.""" - return google.api_core.path_template.expand( - "projects/{project}", project=project, - ) - - def __init__( - self, - transport=None, - channel=None, - credentials=None, - client_config=None, - client_info=None, - client_options=None, - ): - """Constructor. - - Args: - transport (Union[~.ReportErrorsServiceGrpcTransport, - Callable[[~.Credentials, type], ~.ReportErrorsServiceGrpcTransport]): A transport - instance, responsible for actually making the API calls. - The default transport uses the gRPC protocol. - This argument may also be a callable which returns a - transport instance. Callables will be sent the credentials - as the first argument and the default transport class as - the second argument. - channel (grpc.Channel): DEPRECATED. A ``Channel`` instance - through which to make calls. This argument is mutually exclusive - with ``credentials``; providing both will raise an exception. - credentials (google.auth.credentials.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is mutually exclusive with providing a - transport instance to ``transport``; doing so will raise - an exception. - client_config (dict): DEPRECATED. A dictionary of call options for - each method. If not specified, the default configuration is used. - 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. - client_options (Union[dict, google.api_core.client_options.ClientOptions]): - Client options used to set user options on the client. API Endpoint - should be set through client_options. - """ - # Raise deprecation warnings for things we want to go away. - if client_config is not None: - warnings.warn( - "The `client_config` argument is deprecated.", - PendingDeprecationWarning, - stacklevel=2, - ) - else: - client_config = report_errors_service_client_config.config - - if channel: - warnings.warn( - "The `channel` argument is deprecated; use " "`transport` instead.", - PendingDeprecationWarning, - stacklevel=2, - ) - - api_endpoint = self.SERVICE_ADDRESS - if client_options: - if type(client_options) == dict: - client_options = google.api_core.client_options.from_dict( - client_options - ) - if client_options.api_endpoint: - api_endpoint = client_options.api_endpoint - - # Instantiate the transport. - # The transport is responsible for handling serialization and - # deserialization and actually sending data to the service. - if transport: - if callable(transport): - self.transport = transport( - credentials=credentials, - default_class=report_errors_service_grpc_transport.ReportErrorsServiceGrpcTransport, - address=api_endpoint, - ) - else: - if credentials: - raise ValueError( - "Received both a transport instance and " - "credentials; these are mutually exclusive." - ) - self.transport = transport - else: - self.transport = report_errors_service_grpc_transport.ReportErrorsServiceGrpcTransport( - address=api_endpoint, channel=channel, credentials=credentials, - ) - - if client_info is None: - client_info = google.api_core.gapic_v1.client_info.ClientInfo( - gapic_version=_GAPIC_LIBRARY_VERSION, - ) - else: - client_info.gapic_version = _GAPIC_LIBRARY_VERSION - self._client_info = client_info - - # Parse out the default settings for retry and timeout for each RPC - # from the client configuration. - # (Ordinarily, these are the defaults specified in the `*_config.py` - # file next to this one.) - self._method_configs = google.api_core.gapic_v1.config.parse_method_configs( - client_config["interfaces"][self._INTERFACE_NAME], - ) - - # Save a dictionary of cached API call functions. - # These are the actual callables which invoke the proper - # transport methods, wrapped with `wrap_method` to add retry, - # timeout, and the like. - self._inner_api_calls = {} - - # Service calls - def report_error_event( - self, - project_name, - event, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Report an individual error event. - - This endpoint accepts **either** an OAuth token, **or** an `API - key `__ for - authentication. To use an API key, append it to the URL as the value of - a ``key`` parameter. For example: - - ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` - - Example: - >>> from google.cloud import errorreporting_v1beta1 - >>> - >>> client = errorreporting_v1beta1.ReportErrorsServiceClient() - >>> - >>> project_name = client.project_path('[PROJECT]') - >>> - >>> # TODO: Initialize `event`: - >>> event = {} - >>> - >>> response = client.report_error_event(project_name, event) - - Args: - project_name (str): Required. The resource name of the Google Cloud Platform project. - Written as ``projects/`` plus the `Google Cloud Platform project - ID `__. Example: - ``projects/my-project-123``. - event (Union[dict, ~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent]): Required. The error event to be reported. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent` - retry (Optional[google.api_core.retry.Retry]): A retry object used - to retry requests. If ``None`` is specified, requests will - be retried using a default configuration. - timeout (Optional[float]): The amount of time, in seconds, to wait - for the request to complete. Note that if ``retry`` is - specified, the timeout applies to each individual attempt. - metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata - that is provided to the method. - - Returns: - A :class:`~google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse` instance. - - Raises: - google.api_core.exceptions.GoogleAPICallError: If the request - failed for any reason. - google.api_core.exceptions.RetryError: If the request failed due - to a retryable error and retry attempts failed. - ValueError: If the parameters are invalid. - """ - # Wrap the transport method to add retry and timeout logic. - if "report_error_event" not in self._inner_api_calls: - self._inner_api_calls[ - "report_error_event" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.report_error_event, - default_retry=self._method_configs["ReportErrorEvent"].retry, - default_timeout=self._method_configs["ReportErrorEvent"].timeout, - client_info=self._client_info, - ) - - request = report_errors_service_pb2.ReportErrorEventRequest( - project_name=project_name, event=event, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("project_name", project_name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - return self._inner_api_calls["report_error_event"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py deleted file mode 100644 index cfefc7eb95f2..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/report_errors_service_client_config.py +++ /dev/null @@ -1,28 +0,0 @@ -config = { - "interfaces": { - "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService": { - "retry_codes": { - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], - "non_idempotent": [], - }, - "retry_params": { - "default": { - "initial_retry_delay_millis": 100, - "retry_delay_multiplier": 1.3, - "max_retry_delay_millis": 60000, - "initial_rpc_timeout_millis": 20000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 20000, - "total_timeout_millis": 600000, - } - }, - "methods": { - "ReportErrorEvent": { - "timeout_millis": 60000, - "retry_codes_name": "non_idempotent", - "retry_params_name": "default", - } - }, - } - } -} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py deleted file mode 100644 index b877baf4e84d..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_group_service_grpc_transport.py +++ /dev/null @@ -1,143 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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 google.api_core.grpc_helpers - -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2_grpc - - -class ErrorGroupServiceGrpcTransport(object): - """gRPC transport class providing stubs for - google.devtools.clouderrorreporting.v1beta1 ErrorGroupService API. - - The transport provides access to the raw gRPC stubs, - which can be used to take advantage of advanced - features of gRPC. - """ - - # The scopes needed to make gRPC calls to all of the methods defined - # in this service. - _OAUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) - - def __init__( - self, - channel=None, - credentials=None, - address="clouderrorreporting.googleapis.com:443", - ): - """Instantiate the transport class. - - Args: - channel (grpc.Channel): A ``Channel`` instance through - which to make calls. This argument is mutually exclusive - with ``credentials``; providing both will raise an exception. - credentials (google.auth.credentials.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If none - are specified, the client will attempt to ascertain the - credentials from the environment. - address (str): The address where the service is hosted. - """ - # If both `channel` and `credentials` are specified, raise an - # exception (channels come with credentials baked in already). - if channel is not None and credentials is not None: - raise ValueError( - "The `channel` and `credentials` arguments are mutually " "exclusive.", - ) - - # Create the channel. - if channel is None: - channel = self.create_channel( - address=address, - credentials=credentials, - options={ - "grpc.max_send_message_length": -1, - "grpc.max_receive_message_length": -1, - }.items(), - ) - - self._channel = channel - - # gRPC uses objects called "stubs" that are bound to the - # channel and provide a basic method for each RPC. - self._stubs = { - "error_group_service_stub": error_group_service_pb2_grpc.ErrorGroupServiceStub( - channel - ), - } - - @classmethod - def create_channel( - cls, - address="clouderrorreporting.googleapis.com:443", - credentials=None, - **kwargs - ): - """Create and return a gRPC channel object. - - Args: - address (str): The host for the channel to use. - credentials (~.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - kwargs (dict): Keyword arguments, which are passed to the - channel creation. - - Returns: - grpc.Channel: A gRPC channel object. - """ - return google.api_core.grpc_helpers.create_channel( - address, credentials=credentials, scopes=cls._OAUTH_SCOPES, **kwargs - ) - - @property - def channel(self): - """The gRPC channel used by the transport. - - Returns: - grpc.Channel: A gRPC channel object. - """ - return self._channel - - @property - def update_group(self): - """Return the gRPC stub for :meth:`ErrorGroupServiceClient.update_group`. - - Replace the data for the specified group. - Fails if the group does not exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["error_group_service_stub"].UpdateGroup - - @property - def get_group(self): - """Return the gRPC stub for :meth:`ErrorGroupServiceClient.get_group`. - - Get the specified group. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["error_group_service_stub"].GetGroup diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py deleted file mode 100644 index f1e15226a4d3..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/error_stats_service_grpc_transport.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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 google.api_core.grpc_helpers - -from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2_grpc - - -class ErrorStatsServiceGrpcTransport(object): - """gRPC transport class providing stubs for - google.devtools.clouderrorreporting.v1beta1 ErrorStatsService API. - - The transport provides access to the raw gRPC stubs, - which can be used to take advantage of advanced - features of gRPC. - """ - - # The scopes needed to make gRPC calls to all of the methods defined - # in this service. - _OAUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) - - def __init__( - self, - channel=None, - credentials=None, - address="clouderrorreporting.googleapis.com:443", - ): - """Instantiate the transport class. - - Args: - channel (grpc.Channel): A ``Channel`` instance through - which to make calls. This argument is mutually exclusive - with ``credentials``; providing both will raise an exception. - credentials (google.auth.credentials.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If none - are specified, the client will attempt to ascertain the - credentials from the environment. - address (str): The address where the service is hosted. - """ - # If both `channel` and `credentials` are specified, raise an - # exception (channels come with credentials baked in already). - if channel is not None and credentials is not None: - raise ValueError( - "The `channel` and `credentials` arguments are mutually " "exclusive.", - ) - - # Create the channel. - if channel is None: - channel = self.create_channel( - address=address, - credentials=credentials, - options={ - "grpc.max_send_message_length": -1, - "grpc.max_receive_message_length": -1, - }.items(), - ) - - self._channel = channel - - # gRPC uses objects called "stubs" that are bound to the - # channel and provide a basic method for each RPC. - self._stubs = { - "error_stats_service_stub": error_stats_service_pb2_grpc.ErrorStatsServiceStub( - channel - ), - } - - @classmethod - def create_channel( - cls, - address="clouderrorreporting.googleapis.com:443", - credentials=None, - **kwargs - ): - """Create and return a gRPC channel object. - - Args: - address (str): The host for the channel to use. - credentials (~.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - kwargs (dict): Keyword arguments, which are passed to the - channel creation. - - Returns: - grpc.Channel: A gRPC channel object. - """ - return google.api_core.grpc_helpers.create_channel( - address, credentials=credentials, scopes=cls._OAUTH_SCOPES, **kwargs - ) - - @property - def channel(self): - """The gRPC channel used by the transport. - - Returns: - grpc.Channel: A gRPC channel object. - """ - return self._channel - - @property - def delete_events(self): - """Return the gRPC stub for :meth:`ErrorStatsServiceClient.delete_events`. - - Deletes all error events of a given project. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["error_stats_service_stub"].DeleteEvents - - @property - def list_group_stats(self): - """Return the gRPC stub for :meth:`ErrorStatsServiceClient.list_group_stats`. - - Lists the specified groups. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["error_stats_service_stub"].ListGroupStats - - @property - def list_events(self): - """Return the gRPC stub for :meth:`ErrorStatsServiceClient.list_events`. - - Lists the specified events. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["error_stats_service_stub"].ListEvents diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py deleted file mode 100644 index 6a97b861c6c1..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic/transports/report_errors_service_grpc_transport.py +++ /dev/null @@ -1,136 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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 google.api_core.grpc_helpers - -from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2_grpc - - -class ReportErrorsServiceGrpcTransport(object): - """gRPC transport class providing stubs for - google.devtools.clouderrorreporting.v1beta1 ReportErrorsService API. - - The transport provides access to the raw gRPC stubs, - which can be used to take advantage of advanced - features of gRPC. - """ - - # The scopes needed to make gRPC calls to all of the methods defined - # in this service. - _OAUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) - - def __init__( - self, - channel=None, - credentials=None, - address="clouderrorreporting.googleapis.com:443", - ): - """Instantiate the transport class. - - Args: - channel (grpc.Channel): A ``Channel`` instance through - which to make calls. This argument is mutually exclusive - with ``credentials``; providing both will raise an exception. - credentials (google.auth.credentials.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If none - are specified, the client will attempt to ascertain the - credentials from the environment. - address (str): The address where the service is hosted. - """ - # If both `channel` and `credentials` are specified, raise an - # exception (channels come with credentials baked in already). - if channel is not None and credentials is not None: - raise ValueError( - "The `channel` and `credentials` arguments are mutually " "exclusive.", - ) - - # Create the channel. - if channel is None: - channel = self.create_channel( - address=address, - credentials=credentials, - options={ - "grpc.max_send_message_length": -1, - "grpc.max_receive_message_length": -1, - }.items(), - ) - - self._channel = channel - - # gRPC uses objects called "stubs" that are bound to the - # channel and provide a basic method for each RPC. - self._stubs = { - "report_errors_service_stub": report_errors_service_pb2_grpc.ReportErrorsServiceStub( - channel - ), - } - - @classmethod - def create_channel( - cls, - address="clouderrorreporting.googleapis.com:443", - credentials=None, - **kwargs - ): - """Create and return a gRPC channel object. - - Args: - address (str): The host for the channel to use. - credentials (~.Credentials): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - kwargs (dict): Keyword arguments, which are passed to the - channel creation. - - Returns: - grpc.Channel: A gRPC channel object. - """ - return google.api_core.grpc_helpers.create_channel( - address, credentials=credentials, scopes=cls._OAUTH_SCOPES, **kwargs - ) - - @property - def channel(self): - """The gRPC channel used by the transport. - - Returns: - grpc.Channel: A gRPC channel object. - """ - return self._channel - - @property - def report_error_event(self): - """Return the gRPC stub for :meth:`ReportErrorsServiceClient.report_error_event`. - - Report an individual error event. - - This endpoint accepts **either** an OAuth token, **or** an `API - key `__ for - authentication. To use an API key, append it to the URL as the value of - a ``key`` parameter. For example: - - ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["report_errors_service_stub"].ReportErrorEvent diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py deleted file mode 100644 index 76efff196888..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2.py +++ /dev/null @@ -1,842 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database - -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import resource_pb2 as google_dot_api_dot_resource__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto", - package="google.devtools.clouderrorreporting.v1beta1", - syntax="proto3", - serialized_options=b"\n/com.google.devtools.clouderrorreporting.v1beta1B\013CommonProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\370\001\001\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1\352\002&Google::Cloud::ErrorReporting::V1beta1", - create_key=_descriptor._internal_create_key, - serialized_pb=b'\nDgoogle/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x19google/api/resource.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xd8\x01\n\nErrorGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12S\n\x0ftracking_issues\x18\x03 \x03(\x0b\x32:.google.devtools.clouderrorreporting.v1beta1.TrackingIssue:U\xea\x41R\n-clouderrorreporting.googleapis.com/ErrorGroup\x12!projects/{project}/groups/{group}"\x1c\n\rTrackingIssue\x12\x0b\n\x03url\x18\x01 \x01(\t"\xef\x01\n\nErrorEvent\x12.\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12T\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x0f\n\x07message\x18\x03 \x01(\t\x12J\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContext"I\n\x0eServiceContext\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t"\xc9\x01\n\x0c\x45rrorContext\x12U\n\x0chttp_request\x18\x01 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.HttpRequestContext\x12\x0c\n\x04user\x18\x02 \x01(\t\x12T\n\x0freport_location\x18\x03 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.SourceLocation"\x88\x01\n\x12HttpRequestContext\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x12\n\nuser_agent\x18\x03 \x01(\t\x12\x10\n\x08referrer\x18\x04 \x01(\t\x12\x1c\n\x14response_status_code\x18\x05 \x01(\x05\x12\x11\n\tremote_ip\x18\x06 \x01(\t"O\n\x0eSourceLocation\x12\x11\n\tfile_path\x18\x01 \x01(\t\x12\x13\n\x0bline_number\x18\x02 \x01(\x05\x12\x15\n\rfunction_name\x18\x04 \x01(\tB\x98\x02\n/com.google.devtools.clouderrorreporting.v1beta1B\x0b\x43ommonProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xf8\x01\x01\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1\xea\x02&Google::Cloud::ErrorReporting::V1beta1b\x06proto3', - dependencies=[ - google_dot_api_dot_annotations__pb2.DESCRIPTOR, - google_dot_api_dot_resource__pb2.DESCRIPTOR, - google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, - ], -) - - -_ERRORGROUP = _descriptor.Descriptor( - name="ErrorGroup", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroup", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroup.name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="group_id", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroup.group_id", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="tracking_issues", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroup.tracking_issues", - index=2, - number=3, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"\352AR\n-clouderrorreporting.googleapis.com/ErrorGroup\022!projects/{project}/groups/{group}", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=208, - serialized_end=424, -) - - -_TRACKINGISSUE = _descriptor.Descriptor( - name="TrackingIssue", - full_name="google.devtools.clouderrorreporting.v1beta1.TrackingIssue", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="url", - full_name="google.devtools.clouderrorreporting.v1beta1.TrackingIssue.url", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=426, - serialized_end=454, -) - - -_ERROREVENT = _descriptor.Descriptor( - name="ErrorEvent", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="event_time", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent.event_time", - index=0, - number=1, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="service_context", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent.service_context", - index=1, - number=2, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="message", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent.message", - index=2, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="context", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorEvent.context", - index=3, - number=5, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=457, - serialized_end=696, -) - - -_SERVICECONTEXT = _descriptor.Descriptor( - name="ServiceContext", - full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContext", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="service", - full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContext.service", - index=0, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="version", - full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContext.version", - index=1, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="resource_type", - full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContext.resource_type", - index=2, - number=4, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=698, - serialized_end=771, -) - - -_ERRORCONTEXT = _descriptor.Descriptor( - name="ErrorContext", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorContext", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="http_request", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorContext.http_request", - index=0, - number=1, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="user", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorContext.user", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="report_location", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorContext.report_location", - index=2, - number=3, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=774, - serialized_end=975, -) - - -_HTTPREQUESTCONTEXT = _descriptor.Descriptor( - name="HttpRequestContext", - full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="method", - full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.method", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="url", - full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.url", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="user_agent", - full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.user_agent", - index=2, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="referrer", - full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.referrer", - index=3, - number=4, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="response_status_code", - full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.response_status_code", - index=4, - number=5, - type=5, - cpp_type=1, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="remote_ip", - full_name="google.devtools.clouderrorreporting.v1beta1.HttpRequestContext.remote_ip", - index=5, - number=6, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=978, - serialized_end=1114, -) - - -_SOURCELOCATION = _descriptor.Descriptor( - name="SourceLocation", - full_name="google.devtools.clouderrorreporting.v1beta1.SourceLocation", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="file_path", - full_name="google.devtools.clouderrorreporting.v1beta1.SourceLocation.file_path", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="line_number", - full_name="google.devtools.clouderrorreporting.v1beta1.SourceLocation.line_number", - index=1, - number=2, - type=5, - cpp_type=1, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="function_name", - full_name="google.devtools.clouderrorreporting.v1beta1.SourceLocation.function_name", - index=2, - number=4, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1116, - serialized_end=1195, -) - -_ERRORGROUP.fields_by_name["tracking_issues"].message_type = _TRACKINGISSUE -_ERROREVENT.fields_by_name[ - "event_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_ERROREVENT.fields_by_name["service_context"].message_type = _SERVICECONTEXT -_ERROREVENT.fields_by_name["context"].message_type = _ERRORCONTEXT -_ERRORCONTEXT.fields_by_name["http_request"].message_type = _HTTPREQUESTCONTEXT -_ERRORCONTEXT.fields_by_name["report_location"].message_type = _SOURCELOCATION -DESCRIPTOR.message_types_by_name["ErrorGroup"] = _ERRORGROUP -DESCRIPTOR.message_types_by_name["TrackingIssue"] = _TRACKINGISSUE -DESCRIPTOR.message_types_by_name["ErrorEvent"] = _ERROREVENT -DESCRIPTOR.message_types_by_name["ServiceContext"] = _SERVICECONTEXT -DESCRIPTOR.message_types_by_name["ErrorContext"] = _ERRORCONTEXT -DESCRIPTOR.message_types_by_name["HttpRequestContext"] = _HTTPREQUESTCONTEXT -DESCRIPTOR.message_types_by_name["SourceLocation"] = _SOURCELOCATION -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -ErrorGroup = _reflection.GeneratedProtocolMessageType( - "ErrorGroup", - (_message.Message,), - { - "DESCRIPTOR": _ERRORGROUP, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - "__doc__": """Description of a group of similar error events. - - Attributes: - name: - The group resource name. Example: projects/my- - project-123/groups/my-groupid - group_id: - Group IDs are unique for a given project. If the same kind of - error occurs in different service contexts, it will receive - the same group ID. - tracking_issues: - Associated tracking issues. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroup) - }, -) -_sym_db.RegisterMessage(ErrorGroup) - -TrackingIssue = _reflection.GeneratedProtocolMessageType( - "TrackingIssue", - (_message.Message,), - { - "DESCRIPTOR": _TRACKINGISSUE, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - "__doc__": """Information related to tracking the progress on resolving the error. - - Attributes: - url: - A URL pointing to a related entry in an issue tracking system. - Example: ``https://github.com/user/project/issues/4`` - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TrackingIssue) - }, -) -_sym_db.RegisterMessage(TrackingIssue) - -ErrorEvent = _reflection.GeneratedProtocolMessageType( - "ErrorEvent", - (_message.Message,), - { - "DESCRIPTOR": _ERROREVENT, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - "__doc__": """An error event which is returned by the Error Reporting system. - - Attributes: - event_time: - Time when the event occurred as provided in the error report. - If the report did not contain a timestamp, the time the error - was received by the Error Reporting system is used. - service_context: - The ``ServiceContext`` for which this error was reported. - message: - The stack trace that was reported or logged by the service. - context: - Data about the context in which the error occurred. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorEvent) - }, -) -_sym_db.RegisterMessage(ErrorEvent) - -ServiceContext = _reflection.GeneratedProtocolMessageType( - "ServiceContext", - (_message.Message,), - { - "DESCRIPTOR": _SERVICECONTEXT, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - "__doc__": """Describes a running service that sends errors. Its version changes - over time and multiple versions can run in parallel. - - Attributes: - service: - An identifier of the service, such as the name of the - executable, job, or Google App Engine service name. This field - is expected to have a low number of values that are relatively - stable over time, as opposed to ``version``, which can be - changed whenever new code is deployed. Contains the service - name for error reports extracted from Google App Engine logs - or ``default`` if the App Engine default service is used. - version: - Represents the source code version that the developer - provided, which could represent a version label or a Git SHA-1 - hash, for example. For App Engine standard environment, the - version is set to the version of the app. - resource_type: - Type of the MonitoredResource. List of possible values: - https://cloud.google.com/monitoring/api/resources Value is - set automatically for incoming errors and must not be set when - reporting errors. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContext) - }, -) -_sym_db.RegisterMessage(ServiceContext) - -ErrorContext = _reflection.GeneratedProtocolMessageType( - "ErrorContext", - (_message.Message,), - { - "DESCRIPTOR": _ERRORCONTEXT, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - "__doc__": """A description of the context in which an error occurred. This data - should be provided by the application when reporting an error, unless - the error report has been generated automatically from Google App - Engine logs. - - Attributes: - http_request: - The HTTP request which was processed when the error was - triggered. - user: - The user who caused or was affected by the crash. This can be - a user ID, an email address, or an arbitrary token that - uniquely identifies the user. When sending an error report, - leave this field empty if the user was not logged in. In this - case the Error Reporting system will use other data, such as - remote IP address, to distinguish affected users. See - ``affected_users_count`` in ``ErrorGroupStats``. - report_location: - The location in the source code where the decision was made to - report the error, usually the place where it was logged. For a - logged exception this would be the source line where the - exception is logged, usually close to the place where it was - caught. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorContext) - }, -) -_sym_db.RegisterMessage(ErrorContext) - -HttpRequestContext = _reflection.GeneratedProtocolMessageType( - "HttpRequestContext", - (_message.Message,), - { - "DESCRIPTOR": _HTTPREQUESTCONTEXT, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - "__doc__": """HTTP request data that is related to a reported error. This data - should be provided by the application when reporting an error, unless - the error report has been generated automatically from Google App - Engine logs. - - Attributes: - method: - The type of HTTP request, such as ``GET``, ``POST``, etc. - url: - The URL of the request. - user_agent: - The user agent information that is provided with the request. - referrer: - The referrer information that is provided with the request. - response_status_code: - The HTTP response status code for the request. - remote_ip: - The IP address from which the request originated. This can be - IPv4, IPv6, or a token which is derived from the IP address, - depending on the data that has been provided in the error - report. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.HttpRequestContext) - }, -) -_sym_db.RegisterMessage(HttpRequestContext) - -SourceLocation = _reflection.GeneratedProtocolMessageType( - "SourceLocation", - (_message.Message,), - { - "DESCRIPTOR": _SOURCELOCATION, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.common_pb2", - "__doc__": """Indicates a location in the source code of the service for which - errors are reported. ``functionName`` must be provided by the - application when reporting an error, unless the error report contains - a ``message`` with a supported exception stack trace. All fields are - optional for the later case. - - Attributes: - file_path: - The source code filename, which can include a truncated - relative path, or a full path from a production machine. - line_number: - 1-based. 0 indicates that the line number is unknown. - function_name: - Human-readable name of a function or method. The value can - include optional context like the class or package name. For - example, ``my.package.MyClass.method`` in case of Java. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.SourceLocation) - }, -) -_sym_db.RegisterMessage(SourceLocation) - - -DESCRIPTOR._options = None -_ERRORGROUP._options = None -# @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py deleted file mode 100644 index 8a9393943bdf..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py deleted file mode 100644 index 49358c4c7c8f..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py +++ /dev/null @@ -1,211 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database - -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import client_pb2 as google_dot_api_dot_client__pb2 -from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import resource_pb2 as google_dot_api_dot_resource__pb2 -from google.cloud.errorreporting_v1beta1.proto import ( - common_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, -) - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="google/cloud/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto", - package="google.devtools.clouderrorreporting.v1beta1", - syntax="proto3", - serialized_options=b"\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorGroupServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\370\001\001\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1\352\002&Google::Cloud::ErrorReporting::V1beta1", - create_key=_descriptor._internal_create_key, - serialized_pb=b'\nQgoogle/cloud/devtools/clouderrorreporting_v1beta1/proto/error_group_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x44google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto"\\\n\x0fGetGroupRequest\x12I\n\ngroup_name\x18\x01 \x01(\tB5\xe0\x41\x02\xfa\x41/\n-clouderrorreporting.googleapis.com/ErrorGroup"a\n\x12UpdateGroupRequest\x12K\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroupB\x03\xe0\x41\x02\x32\xfb\x03\n\x11\x45rrorGroupService\x12\xc1\x01\n\x08GetGroup\x12<.google.devtools.clouderrorreporting.v1beta1.GetGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup">\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{group_name=projects/*/groups/*}\xda\x41\ngroup_name\x12\xc9\x01\n\x0bUpdateGroup\x12?.google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest\x1a\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup"@\x82\xd3\xe4\x93\x02\x32\x1a)/v1beta1/{group.name=projects/*/groups/*}:\x05group\xda\x41\x05group\x1aV\xca\x41"clouderrorreporting.googleapis.com\xd2\x41.https://www.googleapis.com/auth/cloud-platformB\xa3\x02\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorGroupServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xf8\x01\x01\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1\xea\x02&Google::Cloud::ErrorReporting::V1beta1b\x06proto3', - dependencies=[ - google_dot_api_dot_annotations__pb2.DESCRIPTOR, - google_dot_api_dot_client__pb2.DESCRIPTOR, - google_dot_api_dot_field__behavior__pb2.DESCRIPTOR, - google_dot_api_dot_resource__pb2.DESCRIPTOR, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, - ], -) - - -_GETGROUPREQUEST = _descriptor.Descriptor( - name="GetGroupRequest", - full_name="google.devtools.clouderrorreporting.v1beta1.GetGroupRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="group_name", - full_name="google.devtools.clouderrorreporting.v1beta1.GetGroupRequest.group_name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002\372A/\n-clouderrorreporting.googleapis.com/ErrorGroup", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=315, - serialized_end=407, -) - - -_UPDATEGROUPREQUEST = _descriptor.Descriptor( - name="UpdateGroupRequest", - full_name="google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="group", - full_name="google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest.group", - index=0, - number=1, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=409, - serialized_end=506, -) - -_UPDATEGROUPREQUEST.fields_by_name[ - "group" -].message_type = ( - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP -) -DESCRIPTOR.message_types_by_name["GetGroupRequest"] = _GETGROUPREQUEST -DESCRIPTOR.message_types_by_name["UpdateGroupRequest"] = _UPDATEGROUPREQUEST -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -GetGroupRequest = _reflection.GeneratedProtocolMessageType( - "GetGroupRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETGROUPREQUEST, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2", - "__doc__": """A request to return an individual group. - - Attributes: - group_name: - The group resource name. Written as - ``projects/{projectID}/groups/{group_name}``. Call - ```groupStats.list`` `__ - to return a list of groups belonging to this project. - Example: ``projects/my-project-123/groups/my-group`` - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.GetGroupRequest) - }, -) -_sym_db.RegisterMessage(GetGroupRequest) - -UpdateGroupRequest = _reflection.GeneratedProtocolMessageType( - "UpdateGroupRequest", - (_message.Message,), - { - "DESCRIPTOR": _UPDATEGROUPREQUEST, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_group_service_pb2", - "__doc__": """A request to replace the existing data for the given group. - - Attributes: - group: - Required. The group which replaces the resource on the server. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.UpdateGroupRequest) - }, -) -_sym_db.RegisterMessage(UpdateGroupRequest) - - -DESCRIPTOR._options = None -_GETGROUPREQUEST.fields_by_name["group_name"]._options = None -_UPDATEGROUPREQUEST.fields_by_name["group"]._options = None - -_ERRORGROUPSERVICE = _descriptor.ServiceDescriptor( - name="ErrorGroupService", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", - file=DESCRIPTOR, - index=0, - serialized_options=b'\312A"clouderrorreporting.googleapis.com\322A.https://www.googleapis.com/auth/cloud-platform', - create_key=_descriptor._internal_create_key, - serialized_start=509, - serialized_end=1016, - methods=[ - _descriptor.MethodDescriptor( - name="GetGroup", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.GetGroup", - index=0, - containing_service=None, - input_type=_GETGROUPREQUEST, - output_type=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, - serialized_options=b"\202\323\344\223\002+\022)/v1beta1/{group_name=projects/*/groups/*}\332A\ngroup_name", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="UpdateGroup", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.UpdateGroup", - index=1, - containing_service=None, - input_type=_UPDATEGROUPREQUEST, - output_type=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP, - serialized_options=b"\202\323\344\223\0022\032)/v1beta1/{group.name=projects/*/groups/*}:\005group\332A\005group", - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_ERRORGROUPSERVICE) - -DESCRIPTOR.services_by_name["ErrorGroupService"] = _ERRORGROUPSERVICE - -# @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py deleted file mode 100644 index 9e9af29ea2e2..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2_grpc.py +++ /dev/null @@ -1,132 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from google.cloud.errorreporting_v1beta1.proto import ( - common_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, -) -from google.cloud.errorreporting_v1beta1.proto import ( - error_group_service_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2, -) - - -class ErrorGroupServiceStub(object): - """Service for retrieving and updating individual error groups. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.GetGroup = channel.unary_unary( - "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", - request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, - ) - self.UpdateGroup = channel.unary_unary( - "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", - request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, - ) - - -class ErrorGroupServiceServicer(object): - """Service for retrieving and updating individual error groups. - """ - - def GetGroup(self, request, context): - """Get the specified group. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def UpdateGroup(self, request, context): - """Replace the data for the specified group. - Fails if the group does not exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_ErrorGroupServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - "GetGroup": grpc.unary_unary_rpc_method_handler( - servicer.GetGroup, - request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.FromString, - response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, - ), - "UpdateGroup": grpc.unary_unary_rpc_method_handler( - servicer.UpdateGroup, - request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.FromString, - response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", - rpc_method_handlers, - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class ErrorGroupService(object): - """Service for retrieving and updating individual error groups. - """ - - @staticmethod - def GetGroup( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.GetGroupRequest.SerializeToString, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def UpdateGroup( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__group__service__pb2.UpdateGroupRequest.SerializeToString, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.ErrorGroup.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py deleted file mode 100644 index de0efed38cd7..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py +++ /dev/null @@ -1,1619 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto -"""Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database - -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import client_pb2 as google_dot_api_dot_client__pb2 -from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import resource_pb2 as google_dot_api_dot_resource__pb2 -from google.cloud.errorreporting_v1beta1.proto import ( - common_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, -) -from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="google/cloud/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto", - package="google.devtools.clouderrorreporting.v1beta1", - syntax="proto3", - serialized_options=b"\n/com.google.devtools.clouderrorreporting.v1beta1B\026ErrorStatsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\370\001\001\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1\352\002&Google::Cloud::ErrorReporting::V1beta1", - create_key=_descriptor._internal_create_key, - serialized_pb=b'\nQgoogle/cloud/devtools/clouderrorreporting_v1beta1/proto/error_stats_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x44google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x83\x05\n\x15ListGroupStatsRequest\x12I\n\x0cproject_name\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\x15\n\x08group_id\x18\x02 \x03(\tB\x03\xe0\x41\x01\x12^\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilterB\x03\xe0\x41\x01\x12T\n\ntime_range\x18\x05 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRangeB\x03\xe0\x41\x01\x12<\n\x14timed_count_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\x03\xe0\x41\x01\x12X\n\talignment\x18\x07 \x01(\x0e\x32@.google.devtools.clouderrorreporting.v1beta1.TimedCountAlignmentB\x03\xe0\x41\x01\x12\x37\n\x0e\x61lignment_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x01\x12P\n\x05order\x18\t \x01(\x0e\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrderB\x03\xe0\x41\x01\x12\x16\n\tpage_size\x18\x0b \x01(\x05\x42\x03\xe0\x41\x01\x12\x17\n\npage_token\x18\x0c \x01(\tB\x03\xe0\x41\x01"\xc0\x01\n\x16ListGroupStatsResponse\x12W\n\x11\x65rror_group_stats\x18\x01 \x03(\x0b\x32<.google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\x86\x04\n\x0f\x45rrorGroupStats\x12\x46\n\x05group\x18\x01 \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorGroup\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\x1c\n\x14\x61\x66\x66\x65\x63ted_users_count\x18\x03 \x01(\x03\x12M\n\x0ctimed_counts\x18\x04 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.TimedCount\x12\x33\n\x0f\x66irst_seen_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x32\n\x0elast_seen_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12V\n\x11\x61\x66\x66\x65\x63ted_services\x18\x07 \x03(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContext\x12\x1d\n\x15num_affected_services\x18\x08 \x01(\x05\x12O\n\x0erepresentative\x18\t \x01(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent"y\n\nTimedCount\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\xdc\x02\n\x11ListEventsRequest\x12I\n\x0cproject_name\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12\x15\n\x08group_id\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12^\n\x0eservice_filter\x18\x03 \x01(\x0b\x32\x41.google.devtools.clouderrorreporting.v1beta1.ServiceContextFilterB\x03\xe0\x41\x01\x12T\n\ntime_range\x18\x04 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.QueryTimeRangeB\x03\xe0\x41\x01\x12\x16\n\tpage_size\x18\x06 \x01(\x05\x42\x03\xe0\x41\x01\x12\x17\n\npage_token\x18\x07 \x01(\tB\x03\xe0\x41\x01"\xb2\x01\n\x12ListEventsResponse\x12M\n\x0c\x65rror_events\x18\x01 \x03(\x0b\x32\x37.google.devtools.clouderrorreporting.v1beta1.ErrorEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x34\n\x10time_range_begin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"\xe7\x01\n\x0eQueryTimeRange\x12R\n\x06period\x18\x01 \x01(\x0e\x32\x42.google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period"\x80\x01\n\x06Period\x12\x16\n\x12PERIOD_UNSPECIFIED\x10\x00\x12\x11\n\rPERIOD_1_HOUR\x10\x01\x12\x12\n\x0ePERIOD_6_HOURS\x10\x02\x12\x10\n\x0cPERIOD_1_DAY\x10\x03\x12\x11\n\rPERIOD_1_WEEK\x10\x04\x12\x12\n\x0ePERIOD_30_DAYS\x10\x05"^\n\x14ServiceContextFilter\x12\x14\n\x07service\x18\x02 \x01(\tB\x03\xe0\x41\x01\x12\x14\n\x07version\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12\x1a\n\rresource_type\x18\x04 \x01(\tB\x03\xe0\x41\x01"`\n\x13\x44\x65leteEventsRequest\x12I\n\x0cproject_name\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project"\x16\n\x14\x44\x65leteEventsResponse*u\n\x13TimedCountAlignment\x12%\n!ERROR_COUNT_ALIGNMENT_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x41LIGNMENT_EQUAL_ROUNDED\x10\x01\x12\x1a\n\x16\x41LIGNMENT_EQUAL_AT_END\x10\x02*}\n\x0f\x45rrorGroupOrder\x12\x1b\n\x17GROUP_ORDER_UNSPECIFIED\x10\x00\x12\x0e\n\nCOUNT_DESC\x10\x01\x12\x12\n\x0eLAST_SEEN_DESC\x10\x02\x12\x10\n\x0c\x43REATED_DESC\x10\x03\x12\x17\n\x13\x41\x46\x46\x45\x43TED_USERS_DESC\x10\x04\x32\x8b\x06\n\x11\x45rrorStatsService\x12\xea\x01\n\x0eListGroupStats\x12\x42.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest\x1a\x43.google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse"O\x82\xd3\xe4\x93\x02/\x12-/v1beta1/{project_name=projects/*}/groupStats\xda\x41\x17project_name,time_range\x12\xd8\x01\n\nListEvents\x12>.google.devtools.clouderrorreporting.v1beta1.ListEventsRequest\x1a?.google.devtools.clouderrorreporting.v1beta1.ListEventsResponse"I\x82\xd3\xe4\x93\x02+\x12)/v1beta1/{project_name=projects/*}/events\xda\x41\x15project_name,group_id\x12\xd5\x01\n\x0c\x44\x65leteEvents\x12@.google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest\x1a\x41.google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse"@\x82\xd3\xe4\x93\x02+*)/v1beta1/{project_name=projects/*}/events\xda\x41\x0cproject_name\x1aV\xca\x41"clouderrorreporting.googleapis.com\xd2\x41.https://www.googleapis.com/auth/cloud-platformB\xa3\x02\n/com.google.devtools.clouderrorreporting.v1beta1B\x16\x45rrorStatsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xf8\x01\x01\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1\xea\x02&Google::Cloud::ErrorReporting::V1beta1b\x06proto3', - dependencies=[ - google_dot_api_dot_annotations__pb2.DESCRIPTOR, - google_dot_api_dot_client__pb2.DESCRIPTOR, - google_dot_api_dot_field__behavior__pb2.DESCRIPTOR, - google_dot_api_dot_resource__pb2.DESCRIPTOR, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, - google_dot_protobuf_dot_duration__pb2.DESCRIPTOR, - google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, - ], -) - -_TIMEDCOUNTALIGNMENT = _descriptor.EnumDescriptor( - name="TimedCountAlignment", - full_name="google.devtools.clouderrorreporting.v1beta1.TimedCountAlignment", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="ERROR_COUNT_ALIGNMENT_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="ALIGNMENT_EQUAL_ROUNDED", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="ALIGNMENT_EQUAL_AT_END", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=2849, - serialized_end=2966, -) -_sym_db.RegisterEnumDescriptor(_TIMEDCOUNTALIGNMENT) - -TimedCountAlignment = enum_type_wrapper.EnumTypeWrapper(_TIMEDCOUNTALIGNMENT) -_ERRORGROUPORDER = _descriptor.EnumDescriptor( - name="ErrorGroupOrder", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupOrder", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="GROUP_ORDER_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="COUNT_DESC", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="LAST_SEEN_DESC", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CREATED_DESC", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="AFFECTED_USERS_DESC", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=2968, - serialized_end=3093, -) -_sym_db.RegisterEnumDescriptor(_ERRORGROUPORDER) - -ErrorGroupOrder = enum_type_wrapper.EnumTypeWrapper(_ERRORGROUPORDER) -ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0 -ALIGNMENT_EQUAL_ROUNDED = 1 -ALIGNMENT_EQUAL_AT_END = 2 -GROUP_ORDER_UNSPECIFIED = 0 -COUNT_DESC = 1 -LAST_SEEN_DESC = 2 -CREATED_DESC = 3 -AFFECTED_USERS_DESC = 4 - - -_QUERYTIMERANGE_PERIOD = _descriptor.EnumDescriptor( - name="Period", - full_name="google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.Period", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="PERIOD_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="PERIOD_1_HOUR", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="PERIOD_6_HOURS", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="PERIOD_1_DAY", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="PERIOD_1_WEEK", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="PERIOD_30_DAYS", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=2501, - serialized_end=2629, -) -_sym_db.RegisterEnumDescriptor(_QUERYTIMERANGE_PERIOD) - - -_LISTGROUPSTATSREQUEST = _descriptor.Descriptor( - name="ListGroupStatsRequest", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="project_name", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.project_name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="group_id", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id", - index=1, - number=2, - type=9, - cpp_type=9, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="service_filter", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.service_filter", - index=2, - number=3, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="time_range", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.time_range", - index=3, - number=5, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="timed_count_duration", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.timed_count_duration", - index=4, - number=6, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="alignment", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment", - index=5, - number=7, - type=14, - cpp_type=8, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="alignment_time", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment_time", - index=6, - number=8, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="order", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.order", - index=7, - number=9, - type=14, - cpp_type=8, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_size", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_size", - index=8, - number=11, - type=5, - cpp_type=1, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_token", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.page_token", - index=9, - number=12, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=381, - serialized_end=1024, -) - - -_LISTGROUPSTATSRESPONSE = _descriptor.Descriptor( - name="ListGroupStatsResponse", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="error_group_stats", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.error_group_stats", - index=0, - number=1, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="next_page_token", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.next_page_token", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="time_range_begin", - full_name="google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.time_range_begin", - index=2, - number=4, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1027, - serialized_end=1219, -) - - -_ERRORGROUPSTATS = _descriptor.Descriptor( - name="ErrorGroupStats", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="group", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.group", - index=0, - number=1, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="count", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.count", - index=1, - number=2, - type=3, - cpp_type=2, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="affected_users_count", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_users_count", - index=2, - number=3, - type=3, - cpp_type=2, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="timed_counts", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.timed_counts", - index=3, - number=4, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="first_seen_time", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.first_seen_time", - index=4, - number=5, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="last_seen_time", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.last_seen_time", - index=5, - number=6, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="affected_services", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.affected_services", - index=6, - number=7, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="num_affected_services", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.num_affected_services", - index=7, - number=8, - type=5, - cpp_type=1, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="representative", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats.representative", - index=8, - number=9, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1222, - serialized_end=1740, -) - - -_TIMEDCOUNT = _descriptor.Descriptor( - name="TimedCount", - full_name="google.devtools.clouderrorreporting.v1beta1.TimedCount", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="count", - full_name="google.devtools.clouderrorreporting.v1beta1.TimedCount.count", - index=0, - number=1, - type=3, - cpp_type=2, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="start_time", - full_name="google.devtools.clouderrorreporting.v1beta1.TimedCount.start_time", - index=1, - number=2, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.devtools.clouderrorreporting.v1beta1.TimedCount.end_time", - index=2, - number=3, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1742, - serialized_end=1863, -) - - -_LISTEVENTSREQUEST = _descriptor.Descriptor( - name="ListEventsRequest", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="project_name", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.project_name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="group_id", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.group_id", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="service_filter", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.service_filter", - index=2, - number=3, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="time_range", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.time_range", - index=3, - number=4, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_size", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_size", - index=4, - number=6, - type=5, - cpp_type=1, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_token", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsRequest.page_token", - index=5, - number=7, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1866, - serialized_end=2214, -) - - -_LISTEVENTSRESPONSE = _descriptor.Descriptor( - name="ListEventsResponse", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="error_events", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.error_events", - index=0, - number=1, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="next_page_token", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.next_page_token", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="time_range_begin", - full_name="google.devtools.clouderrorreporting.v1beta1.ListEventsResponse.time_range_begin", - index=2, - number=4, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2217, - serialized_end=2395, -) - - -_QUERYTIMERANGE = _descriptor.Descriptor( - name="QueryTimeRange", - full_name="google.devtools.clouderrorreporting.v1beta1.QueryTimeRange", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="period", - full_name="google.devtools.clouderrorreporting.v1beta1.QueryTimeRange.period", - index=0, - number=1, - type=14, - cpp_type=8, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[_QUERYTIMERANGE_PERIOD,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2398, - serialized_end=2629, -) - - -_SERVICECONTEXTFILTER = _descriptor.Descriptor( - name="ServiceContextFilter", - full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="service", - full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.service", - index=0, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="version", - full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.version", - index=1, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="resource_type", - full_name="google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter.resource_type", - index=2, - number=4, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2631, - serialized_end=2725, -) - - -_DELETEEVENTSREQUEST = _descriptor.Descriptor( - name="DeleteEventsRequest", - full_name="google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="project_name", - full_name="google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest.project_name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2727, - serialized_end=2823, -) - - -_DELETEEVENTSRESPONSE = _descriptor.Descriptor( - name="DeleteEventsResponse", - full_name="google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2825, - serialized_end=2847, -) - -_LISTGROUPSTATSREQUEST.fields_by_name[ - "service_filter" -].message_type = _SERVICECONTEXTFILTER -_LISTGROUPSTATSREQUEST.fields_by_name["time_range"].message_type = _QUERYTIMERANGE -_LISTGROUPSTATSREQUEST.fields_by_name[ - "timed_count_duration" -].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -_LISTGROUPSTATSREQUEST.fields_by_name["alignment"].enum_type = _TIMEDCOUNTALIGNMENT -_LISTGROUPSTATSREQUEST.fields_by_name[ - "alignment_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_LISTGROUPSTATSREQUEST.fields_by_name["order"].enum_type = _ERRORGROUPORDER -_LISTGROUPSTATSRESPONSE.fields_by_name[ - "error_group_stats" -].message_type = _ERRORGROUPSTATS -_LISTGROUPSTATSRESPONSE.fields_by_name[ - "time_range_begin" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_ERRORGROUPSTATS.fields_by_name[ - "group" -].message_type = ( - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORGROUP -) -_ERRORGROUPSTATS.fields_by_name["timed_counts"].message_type = _TIMEDCOUNT -_ERRORGROUPSTATS.fields_by_name[ - "first_seen_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_ERRORGROUPSTATS.fields_by_name[ - "last_seen_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_ERRORGROUPSTATS.fields_by_name[ - "affected_services" -].message_type = ( - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT -) -_ERRORGROUPSTATS.fields_by_name[ - "representative" -].message_type = ( - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT -) -_TIMEDCOUNT.fields_by_name[ - "start_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_TIMEDCOUNT.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_LISTEVENTSREQUEST.fields_by_name["service_filter"].message_type = _SERVICECONTEXTFILTER -_LISTEVENTSREQUEST.fields_by_name["time_range"].message_type = _QUERYTIMERANGE -_LISTEVENTSRESPONSE.fields_by_name[ - "error_events" -].message_type = ( - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERROREVENT -) -_LISTEVENTSRESPONSE.fields_by_name[ - "time_range_begin" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_QUERYTIMERANGE.fields_by_name["period"].enum_type = _QUERYTIMERANGE_PERIOD -_QUERYTIMERANGE_PERIOD.containing_type = _QUERYTIMERANGE -DESCRIPTOR.message_types_by_name["ListGroupStatsRequest"] = _LISTGROUPSTATSREQUEST -DESCRIPTOR.message_types_by_name["ListGroupStatsResponse"] = _LISTGROUPSTATSRESPONSE -DESCRIPTOR.message_types_by_name["ErrorGroupStats"] = _ERRORGROUPSTATS -DESCRIPTOR.message_types_by_name["TimedCount"] = _TIMEDCOUNT -DESCRIPTOR.message_types_by_name["ListEventsRequest"] = _LISTEVENTSREQUEST -DESCRIPTOR.message_types_by_name["ListEventsResponse"] = _LISTEVENTSRESPONSE -DESCRIPTOR.message_types_by_name["QueryTimeRange"] = _QUERYTIMERANGE -DESCRIPTOR.message_types_by_name["ServiceContextFilter"] = _SERVICECONTEXTFILTER -DESCRIPTOR.message_types_by_name["DeleteEventsRequest"] = _DELETEEVENTSREQUEST -DESCRIPTOR.message_types_by_name["DeleteEventsResponse"] = _DELETEEVENTSRESPONSE -DESCRIPTOR.enum_types_by_name["TimedCountAlignment"] = _TIMEDCOUNTALIGNMENT -DESCRIPTOR.enum_types_by_name["ErrorGroupOrder"] = _ERRORGROUPORDER -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -ListGroupStatsRequest = _reflection.GeneratedProtocolMessageType( - "ListGroupStatsRequest", - (_message.Message,), - { - "DESCRIPTOR": _LISTGROUPSTATSREQUEST, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Specifies a set of ``ErrorGroupStats`` to return. - - Attributes: - project_name: - Required. The resource name of the Google Cloud Platform - project. Written as projects/ plus the Google Cloud Platform - project ID. Example: projects/my-project-123. - group_id: - Optional. List all ErrorGroupStats with these IDs. - service_filter: - Optional. List only ErrorGroupStats which belong to a service - context that matches the filter. Data for all service contexts - is returned if this field is not specified. - time_range: - Optional. List data for the given time range. If not set, a - default time range is used. The field time_range_begin in the - response will specify the beginning of this time range. Only - ErrorGroupStats with a non-zero count in the given time range - are returned, unless the request contains an explicit group_id - list. If a group_id list is given, also ErrorGroupStats with - zero occurrences are returned. - timed_count_duration: - Optional. The preferred duration for a single returned - ``TimedCount``. If not set, no timed counts are returned. - alignment: - Optional. The alignment of the timed counts to be returned. - Default is ``ALIGNMENT_EQUAL_AT_END``. - alignment_time: - Optional. Time where the timed counts shall be aligned if - rounded alignment is chosen. Default is 00:00 UTC. - order: - Optional. The sort order in which the results are returned. - Default is ``COUNT_DESC``. - page_size: - Optional. The maximum number of results to return per - response. Default is 20. - page_token: - Optional. A ``next_page_token`` provided by a previous - response. To view additional results, pass this token along - with the identical query parameters as the first request. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest) - }, -) -_sym_db.RegisterMessage(ListGroupStatsRequest) - -ListGroupStatsResponse = _reflection.GeneratedProtocolMessageType( - "ListGroupStatsResponse", - (_message.Message,), - { - "DESCRIPTOR": _LISTGROUPSTATSRESPONSE, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Contains a set of requested error group stats. - - Attributes: - error_group_stats: - The error group stats which match the given request. - next_page_token: - If non-empty, more results are available. Pass this token, - along with the same query parameters as the first request, to - view the next page of results. - time_range_begin: - The timestamp specifies the start time to which the request - was restricted. The start time is set based on the requested - time range. It may be adjusted to a later time if a project - has exceeded the storage quota and older data has been - deleted. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse) - }, -) -_sym_db.RegisterMessage(ListGroupStatsResponse) - -ErrorGroupStats = _reflection.GeneratedProtocolMessageType( - "ErrorGroupStats", - (_message.Message,), - { - "DESCRIPTOR": _ERRORGROUPSTATS, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Data extracted for a specific group based on certain filter criteria, - such as a given time period and/or service filter. - - Attributes: - group: - Group data that is independent of the filter criteria. - count: - Approximate total number of events in the given group that - match the filter criteria. - affected_users_count: - Approximate number of affected users in the given group that - match the filter criteria. Users are distinguished by data in - the ``ErrorContext`` of the individual error events, such as - their login name or their remote IP address in case of HTTP - requests. The number of affected users can be zero even if the - number of errors is non-zero if no data was provided from - which the affected user could be deduced. Users are counted - based on data in the request context that was provided in the - error report. If more users are implicitly affected, such as - due to a crash of the whole service, this is not reflected - here. - timed_counts: - Approximate number of occurrences over time. Timed counts - returned by ListGroups are guaranteed to be: - Inside the - requested time interval - Non-overlapping, and - Ordered by - ascending time. - first_seen_time: - Approximate first occurrence that was ever seen for this group - and which matches the given filter criteria, ignoring the - time_range that was specified in the request. - last_seen_time: - Approximate last occurrence that was ever seen for this group - and which matches the given filter criteria, ignoring the - time_range that was specified in the request. - affected_services: - Service contexts with a non-zero error count for the given - filter criteria. This list can be truncated if multiple - services are affected. Refer to ``num_affected_services`` for - the total count. - num_affected_services: - The total number of services with a non-zero error count for - the given filter criteria. - representative: - An arbitrary event that is chosen as representative for the - whole group. The representative event is intended to be used - as a quick preview for the whole group. Events in the group - are usually sufficiently similar to each other such that - showing an arbitrary representative provides insight into the - characteristics of the group as a whole. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats) - }, -) -_sym_db.RegisterMessage(ErrorGroupStats) - -TimedCount = _reflection.GeneratedProtocolMessageType( - "TimedCount", - (_message.Message,), - { - "DESCRIPTOR": _TIMEDCOUNT, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """The number of errors in a given time period. All numbers are - approximate since the error events are sampled before counting them. - - Attributes: - count: - Approximate number of occurrences in the given time period. - start_time: - Start of the time period to which ``count`` refers (included). - end_time: - End of the time period to which ``count`` refers (excluded). - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.TimedCount) - }, -) -_sym_db.RegisterMessage(TimedCount) - -ListEventsRequest = _reflection.GeneratedProtocolMessageType( - "ListEventsRequest", - (_message.Message,), - { - "DESCRIPTOR": _LISTEVENTSREQUEST, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Specifies a set of error events to return. - - Attributes: - project_name: - Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project ID - `__. Example: - ``projects/my-project-123``. - group_id: - Required. The group for which events shall be returned. - service_filter: - Optional. List only ErrorGroups which belong to a service - context that matches the filter. Data for all service contexts - is returned if this field is not specified. - time_range: - Optional. List only data for the given time range. If not set - a default time range is used. The field time_range_begin in - the response will specify the beginning of this time range. - page_size: - Optional. The maximum number of results to return per - response. - page_token: - Optional. A ``next_page_token`` provided by a previous - response. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsRequest) - }, -) -_sym_db.RegisterMessage(ListEventsRequest) - -ListEventsResponse = _reflection.GeneratedProtocolMessageType( - "ListEventsResponse", - (_message.Message,), - { - "DESCRIPTOR": _LISTEVENTSRESPONSE, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Contains a set of requested error events. - - Attributes: - error_events: - The error events which match the given request. - next_page_token: - If non-empty, more results are available. Pass this token, - along with the same query parameters as the first request, to - view the next page of results. - time_range_begin: - The timestamp specifies the start time to which the request - was restricted. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ListEventsResponse) - }, -) -_sym_db.RegisterMessage(ListEventsResponse) - -QueryTimeRange = _reflection.GeneratedProtocolMessageType( - "QueryTimeRange", - (_message.Message,), - { - "DESCRIPTOR": _QUERYTIMERANGE, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Requests might be rejected or the resulting timed count durations - might be adjusted for lower durations. - - Attributes: - period: - Restricts the query to the specified time range. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.QueryTimeRange) - }, -) -_sym_db.RegisterMessage(QueryTimeRange) - -ServiceContextFilter = _reflection.GeneratedProtocolMessageType( - "ServiceContextFilter", - (_message.Message,), - { - "DESCRIPTOR": _SERVICECONTEXTFILTER, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Specifies criteria for filtering a subset of service contexts. The - fields in the filter correspond to the fields in ``ServiceContext``. - Only exact, case-sensitive matches are supported. If a field is unset - or empty, it matches arbitrary values. - - Attributes: - service: - Optional. The exact value to match against - ```ServiceContext.service`` `__. - version: - Optional. The exact value to match against - ```ServiceContext.version`` `__. - resource_type: - Optional. The exact value to match against - ```ServiceContext.resource_type`` `__. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ServiceContextFilter) - }, -) -_sym_db.RegisterMessage(ServiceContextFilter) - -DeleteEventsRequest = _reflection.GeneratedProtocolMessageType( - "DeleteEventsRequest", - (_message.Message,), - { - "DESCRIPTOR": _DELETEEVENTSREQUEST, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Deletes all events in the project. - - Attributes: - project_name: - Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project ID - `__. Example: - ``projects/my-project-123``. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsRequest) - }, -) -_sym_db.RegisterMessage(DeleteEventsRequest) - -DeleteEventsResponse = _reflection.GeneratedProtocolMessageType( - "DeleteEventsResponse", - (_message.Message,), - { - "DESCRIPTOR": _DELETEEVENTSRESPONSE, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.error_stats_service_pb2", - "__doc__": """Response message for deleting error events.""", - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.DeleteEventsResponse) - }, -) -_sym_db.RegisterMessage(DeleteEventsResponse) - - -DESCRIPTOR._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["project_name"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["group_id"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["service_filter"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["time_range"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["timed_count_duration"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["alignment"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["alignment_time"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["order"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["page_size"]._options = None -_LISTGROUPSTATSREQUEST.fields_by_name["page_token"]._options = None -_LISTEVENTSREQUEST.fields_by_name["project_name"]._options = None -_LISTEVENTSREQUEST.fields_by_name["group_id"]._options = None -_LISTEVENTSREQUEST.fields_by_name["service_filter"]._options = None -_LISTEVENTSREQUEST.fields_by_name["time_range"]._options = None -_LISTEVENTSREQUEST.fields_by_name["page_size"]._options = None -_LISTEVENTSREQUEST.fields_by_name["page_token"]._options = None -_SERVICECONTEXTFILTER.fields_by_name["service"]._options = None -_SERVICECONTEXTFILTER.fields_by_name["version"]._options = None -_SERVICECONTEXTFILTER.fields_by_name["resource_type"]._options = None -_DELETEEVENTSREQUEST.fields_by_name["project_name"]._options = None - -_ERRORSTATSSERVICE = _descriptor.ServiceDescriptor( - name="ErrorStatsService", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", - file=DESCRIPTOR, - index=0, - serialized_options=b'\312A"clouderrorreporting.googleapis.com\322A.https://www.googleapis.com/auth/cloud-platform', - create_key=_descriptor._internal_create_key, - serialized_start=3096, - serialized_end=3875, - methods=[ - _descriptor.MethodDescriptor( - name="ListGroupStats", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats", - index=0, - containing_service=None, - input_type=_LISTGROUPSTATSREQUEST, - output_type=_LISTGROUPSTATSRESPONSE, - serialized_options=b"\202\323\344\223\002/\022-/v1beta1/{project_name=projects/*}/groupStats\332A\027project_name,time_range", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="ListEvents", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListEvents", - index=1, - containing_service=None, - input_type=_LISTEVENTSREQUEST, - output_type=_LISTEVENTSRESPONSE, - serialized_options=b"\202\323\344\223\002+\022)/v1beta1/{project_name=projects/*}/events\332A\025project_name,group_id", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DeleteEvents", - full_name="google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.DeleteEvents", - index=2, - containing_service=None, - input_type=_DELETEEVENTSREQUEST, - output_type=_DELETEEVENTSRESPONSE, - serialized_options=b"\202\323\344\223\002+*)/v1beta1/{project_name=projects/*}/events\332A\014project_name", - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_ERRORSTATSSERVICE) - -DESCRIPTOR.services_by_name["ErrorStatsService"] = _ERRORSTATSSERVICE - -# @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py deleted file mode 100644 index e6bb94fcb52a..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2_grpc.py +++ /dev/null @@ -1,175 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from google.cloud.errorreporting_v1beta1.proto import ( - error_stats_service_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2, -) - - -class ErrorStatsServiceStub(object): - """An API for retrieving and managing error statistics as well as data for - individual events. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.ListGroupStats = channel.unary_unary( - "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", - request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.FromString, - ) - self.ListEvents = channel.unary_unary( - "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", - request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.FromString, - ) - self.DeleteEvents = channel.unary_unary( - "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", - request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.FromString, - ) - - -class ErrorStatsServiceServicer(object): - """An API for retrieving and managing error statistics as well as data for - individual events. - """ - - def ListGroupStats(self, request, context): - """Lists the specified groups. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def ListEvents(self, request, context): - """Lists the specified events. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def DeleteEvents(self, request, context): - """Deletes all error events of a given project. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_ErrorStatsServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - "ListGroupStats": grpc.unary_unary_rpc_method_handler( - servicer.ListGroupStats, - request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.FromString, - response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.SerializeToString, - ), - "ListEvents": grpc.unary_unary_rpc_method_handler( - servicer.ListEvents, - request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.FromString, - response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.SerializeToString, - ), - "DeleteEvents": grpc.unary_unary_rpc_method_handler( - servicer.DeleteEvents, - request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.FromString, - response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", - rpc_method_handlers, - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class ErrorStatsService(object): - """An API for retrieving and managing error statistics as well as data for - individual events. - """ - - @staticmethod - def ListGroupStats( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsRequest.SerializeToString, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListGroupStatsResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def ListEvents( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsRequest.SerializeToString, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.ListEventsResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def DeleteEvents( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsRequest.SerializeToString, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_error__stats__service__pb2.DeleteEventsResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py deleted file mode 100644 index 6c8369959d3c..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2.py +++ /dev/null @@ -1,363 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database - -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import client_pb2 as google_dot_api_dot_client__pb2 -from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import resource_pb2 as google_dot_api_dot_resource__pb2 -from google.cloud.errorreporting_v1beta1.proto import ( - common_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2, -) -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="google/cloud/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto", - package="google.devtools.clouderrorreporting.v1beta1", - syntax="proto3", - serialized_options=b"\n/com.google.devtools.clouderrorreporting.v1beta1B\030ReportErrorsServiceProtoP\001Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\370\001\001\252\002#Google.Cloud.ErrorReporting.V1Beta1\312\002#Google\\Cloud\\ErrorReporting\\V1beta1\352\002&Google::Cloud::ErrorReporting::V1beta1", - create_key=_descriptor._internal_create_key, - serialized_pb=b'\nSgoogle/cloud/devtools/clouderrorreporting_v1beta1/proto/report_errors_service.proto\x12+google.devtools.clouderrorreporting.v1beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x44google/cloud/devtools/clouderrorreporting_v1beta1/proto/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xb9\x01\n\x17ReportErrorEventRequest\x12I\n\x0cproject_name\x18\x01 \x01(\tB3\xe0\x41\x02\xfa\x41-\n+cloudresourcemanager.googleapis.com/Project\x12S\n\x05\x65vent\x18\x02 \x01(\x0b\x32?.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEventB\x03\xe0\x41\x02"\x1a\n\x18ReportErrorEventResponse"\x8b\x02\n\x12ReportedErrorEvent\x12\x33\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x01\x12Y\n\x0fservice_context\x18\x02 \x01(\x0b\x32;.google.devtools.clouderrorreporting.v1beta1.ServiceContextB\x03\xe0\x41\x02\x12\x14\n\x07message\x18\x03 \x01(\tB\x03\xe0\x41\x02\x12O\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x39.google.devtools.clouderrorreporting.v1beta1.ErrorContextB\x03\xe0\x41\x01\x32\xe5\x02\n\x13ReportErrorsService\x12\xf5\x01\n\x10ReportErrorEvent\x12\x44.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest\x1a\x45.google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse"T\x82\xd3\xe4\x93\x02\x39"0/v1beta1/{project_name=projects/*}/events:report:\x05\x65vent\xda\x41\x12project_name,event\x1aV\xca\x41"clouderrorreporting.googleapis.com\xd2\x41.https://www.googleapis.com/auth/cloud-platformB\xa5\x02\n/com.google.devtools.clouderrorreporting.v1beta1B\x18ReportErrorsServiceProtoP\x01Z^google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting\xf8\x01\x01\xaa\x02#Google.Cloud.ErrorReporting.V1Beta1\xca\x02#Google\\Cloud\\ErrorReporting\\V1beta1\xea\x02&Google::Cloud::ErrorReporting::V1beta1b\x06proto3', - dependencies=[ - google_dot_api_dot_annotations__pb2.DESCRIPTOR, - google_dot_api_dot_client__pb2.DESCRIPTOR, - google_dot_api_dot_field__behavior__pb2.DESCRIPTOR, - google_dot_api_dot_resource__pb2.DESCRIPTOR, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2.DESCRIPTOR, - google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, - ], -) - - -_REPORTERROREVENTREQUEST = _descriptor.Descriptor( - name="ReportErrorEventRequest", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="project_name", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.project_name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002\372A-\n+cloudresourcemanager.googleapis.com/Project", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="event", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest.event", - index=1, - number=2, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=351, - serialized_end=536, -) - - -_REPORTERROREVENTRESPONSE = _descriptor.Descriptor( - name="ReportErrorEventResponse", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=538, - serialized_end=564, -) - - -_REPORTEDERROREVENT = _descriptor.Descriptor( - name="ReportedErrorEvent", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="event_time", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.event_time", - index=0, - number=1, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="service_context", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.service_context", - index=1, - number=2, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="message", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.message", - index=2, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="context", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.context", - index=3, - number=4, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=567, - serialized_end=834, -) - -_REPORTERROREVENTREQUEST.fields_by_name["event"].message_type = _REPORTEDERROREVENT -_REPORTEDERROREVENT.fields_by_name[ - "event_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_REPORTEDERROREVENT.fields_by_name[ - "service_context" -].message_type = ( - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._SERVICECONTEXT -) -_REPORTEDERROREVENT.fields_by_name[ - "context" -].message_type = ( - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_common__pb2._ERRORCONTEXT -) -DESCRIPTOR.message_types_by_name["ReportErrorEventRequest"] = _REPORTERROREVENTREQUEST -DESCRIPTOR.message_types_by_name["ReportErrorEventResponse"] = _REPORTERROREVENTRESPONSE -DESCRIPTOR.message_types_by_name["ReportedErrorEvent"] = _REPORTEDERROREVENT -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -ReportErrorEventRequest = _reflection.GeneratedProtocolMessageType( - "ReportErrorEventRequest", - (_message.Message,), - { - "DESCRIPTOR": _REPORTERROREVENTREQUEST, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", - "__doc__": """A request for reporting an individual error event. - - Attributes: - project_name: - Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project ID - `__. Example: - ``projects/my-project-123``. - event: - Required. The error event to be reported. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventRequest) - }, -) -_sym_db.RegisterMessage(ReportErrorEventRequest) - -ReportErrorEventResponse = _reflection.GeneratedProtocolMessageType( - "ReportErrorEventResponse", - (_message.Message,), - { - "DESCRIPTOR": _REPORTERROREVENTRESPONSE, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", - "__doc__": """Response for reporting an individual error event. Data may be added to - this message in the future.""", - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportErrorEventResponse) - }, -) -_sym_db.RegisterMessage(ReportErrorEventResponse) - -ReportedErrorEvent = _reflection.GeneratedProtocolMessageType( - "ReportedErrorEvent", - (_message.Message,), - { - "DESCRIPTOR": _REPORTEDERROREVENT, - "__module__": "google.cloud.devtools.clouderrorreporting_v1beta1.proto.report_errors_service_pb2", - "__doc__": """An error event which is reported to the Error Reporting system. - - Attributes: - event_time: - Optional. Time when the event occurred. If not provided, the - time when the event was received by the Error Reporting system - will be used. - service_context: - Required. The service context in which this error has - occurred. - message: - Required. The error message. If no ``context.reportLocation`` - is provided, the message must contain a header (typically - consisting of the exception type name and an error message) - and an exception stack trace in one of the supported - programming languages and formats. Supported languages are - Java, Python, JavaScript, Ruby, C#, PHP, and Go. Supported - stack trace formats are: - **Java**: Must be the return - value of ```Throwable.printStackTrace()`` `__. - **Python**: Must be the return value of - ```traceback.format_exc()`` `__. - **JavaScript**: - Must be the value of ```error.stack`` - `__ as - returned by V8. - **Ruby**: Must contain frames returned by - ```Exception.backtrace`` `__. - - **C#**: Must be the return value of - ```Exception.ToString()`` `__. - **PHP**: - Must start with ``PHP (Notice|Parse error|Fatal - error|Warning)`` and contain the result of - ```(string)$exception`` - `__. - - **Go**: Must be the return value of ```runtime.Stack()`` - `__. - context: - Optional. A description of the context in which the error - occurred. - """, - # @@protoc_insertion_point(class_scope:google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent) - }, -) -_sym_db.RegisterMessage(ReportedErrorEvent) - - -DESCRIPTOR._options = None -_REPORTERROREVENTREQUEST.fields_by_name["project_name"]._options = None -_REPORTERROREVENTREQUEST.fields_by_name["event"]._options = None -_REPORTEDERROREVENT.fields_by_name["event_time"]._options = None -_REPORTEDERROREVENT.fields_by_name["service_context"]._options = None -_REPORTEDERROREVENT.fields_by_name["message"]._options = None -_REPORTEDERROREVENT.fields_by_name["context"]._options = None - -_REPORTERRORSSERVICE = _descriptor.ServiceDescriptor( - name="ReportErrorsService", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", - file=DESCRIPTOR, - index=0, - serialized_options=b'\312A"clouderrorreporting.googleapis.com\322A.https://www.googleapis.com/auth/cloud-platform', - create_key=_descriptor._internal_create_key, - serialized_start=837, - serialized_end=1194, - methods=[ - _descriptor.MethodDescriptor( - name="ReportErrorEvent", - full_name="google.devtools.clouderrorreporting.v1beta1.ReportErrorsService.ReportErrorEvent", - index=0, - containing_service=None, - input_type=_REPORTERROREVENTREQUEST, - output_type=_REPORTERROREVENTRESPONSE, - serialized_options=b'\202\323\344\223\0029"0/v1beta1/{project_name=projects/*}/events:report:\005event\332A\022project_name,event', - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_REPORTERRORSSERVICE) - -DESCRIPTOR.services_by_name["ReportErrorsService"] = _REPORTERRORSSERVICE - -# @@protoc_insertion_point(module_scope) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py deleted file mode 100644 index 521deb2802d1..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service_pb2_grpc.py +++ /dev/null @@ -1,92 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from google.cloud.errorreporting_v1beta1.proto import ( - report_errors_service_pb2 as google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2, -) - - -class ReportErrorsServiceStub(object): - """An API for reporting error events. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.ReportErrorEvent = channel.unary_unary( - "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", - request_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.FromString, - ) - - -class ReportErrorsServiceServicer(object): - """An API for reporting error events. - """ - - def ReportErrorEvent(self, request, context): - """Report an individual error event. - - This endpoint accepts **either** an OAuth token, - **or** an [API key](https://support.google.com/cloud/answer/6158862) - for authentication. To use an API key, append it to the URL as the value of - a `key` parameter. For example: - - `POST - https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456` - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_ReportErrorsServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - "ReportErrorEvent": grpc.unary_unary_rpc_method_handler( - servicer.ReportErrorEvent, - request_deserializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.FromString, - response_serializer=google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", - rpc_method_handlers, - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class ReportErrorsService(object): - """An API for reporting error events. - """ - - @staticmethod - def ReportErrorEvent( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventRequest.SerializeToString, - google_dot_cloud_dot_devtools_dot_clouderrorreporting__v1beta1_dot_proto_dot_report__errors__service__pb2.ReportErrorEventResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/synth.metadata b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/synth.metadata deleted file mode 100644 index aa85442f198e..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/synth.metadata +++ /dev/null @@ -1,3 +0,0 @@ -{ - "updateTime": "2019-01-23T23:03:31.526988Z" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/py.typed b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/py.typed new file mode 100644 index 000000000000..20bf6ac69e13 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-errorreporting package uses inline types. diff --git a/packages/google-cloud-error-reporting/google/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py similarity index 73% rename from packages/google-cloud-error-reporting/google/__init__.py rename to packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py index 0e1bc5131ba6..42ffdf2bc43d 100644 --- a/packages/google-cloud-error-reporting/google/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py @@ -1,4 +1,6 @@ -# Copyright 2016 Google LLC +# -*- coding: utf-8 -*- + +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,12 +13,4 @@ # 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. - -try: - import pkg_resources - - pkg_resources.declare_namespace(__name__) -except ImportError: - import pkgutil - - __path__ = pkgutil.extend_path(__path__, __name__) +# diff --git a/packages/google-cloud-error-reporting/google/cloud/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py similarity index 70% rename from packages/google-cloud-error-reporting/google/cloud/__init__.py rename to packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py index 0e1bc5131ba6..aff59ad19a91 100644 --- a/packages/google-cloud-error-reporting/google/cloud/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py @@ -1,4 +1,6 @@ -# Copyright 2016 Google LLC +# -*- coding: utf-8 -*- + +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,12 +13,12 @@ # 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. +# -try: - import pkg_resources - - pkg_resources.declare_namespace(__name__) -except ImportError: - import pkgutil +from .client import ErrorGroupServiceClient +from .async_client import ErrorGroupServiceAsyncClient - __path__ = pkgutil.extend_path(__path__, __name__) +__all__ = ( + "ErrorGroupServiceClient", + "ErrorGroupServiceAsyncClient", +) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py new file mode 100644 index 000000000000..8caf2ad71547 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -0,0 +1,263 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +import functools +import re +from typing import Dict, Sequence, Tuple, Type, Union +import pkg_resources + +import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service + +from .transports.base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO +from .transports.grpc_asyncio import ErrorGroupServiceGrpcAsyncIOTransport +from .client import ErrorGroupServiceClient + + +class ErrorGroupServiceAsyncClient: + """Service for retrieving and updating individual error groups.""" + + _client: ErrorGroupServiceClient + + DEFAULT_ENDPOINT = ErrorGroupServiceClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = ErrorGroupServiceClient.DEFAULT_MTLS_ENDPOINT + + error_group_path = staticmethod(ErrorGroupServiceClient.error_group_path) + + from_service_account_file = ErrorGroupServiceClient.from_service_account_file + from_service_account_json = from_service_account_file + + get_transport_class = functools.partial( + type(ErrorGroupServiceClient).get_transport_class, type(ErrorGroupServiceClient) + ) + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, ErrorGroupServiceTransport] = "grpc_asyncio", + client_options: ClientOptions = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the error group service 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 (Union[str, ~.ErrorGroupServiceTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint, this is the default value for + the environment variable) and "auto" (auto switch to the default + mTLS endpoint if client SSL credentials is present). However, + the ``api_endpoint`` property takes precedence if provided. + (2) The ``client_cert_source`` property is used to provide client + SSL credentials for mutual TLS transport. If not provided, the + default SSL credentials will be used if present. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + + self._client = ErrorGroupServiceClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def get_group( + self, + request: error_group_service.GetGroupRequest = None, + *, + group_name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> common.ErrorGroup: + r"""Get the specified group. + + Args: + request (:class:`~.error_group_service.GetGroupRequest`): + The request object. A request to return an individual + group. + group_name (:class:`str`): + The group resource name. Written as + ``projects/{projectID}/groups/{group_name}``. Call + ```groupStats.list`` `__ + to return a list of groups belonging to this project. + + Example: ``projects/my-project-123/groups/my-group`` + This corresponds to the ``group_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.common.ErrorGroup: + Description of a group of similar + error events. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + if request is not None and any([group_name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = error_group_service.GetGroupRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if group_name is not None: + request.group_name = group_name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_group, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("group_name", request.group_name),) + ), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def update_group( + self, + request: error_group_service.UpdateGroupRequest = None, + *, + group: common.ErrorGroup = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> common.ErrorGroup: + r"""Replace the data for the specified group. + Fails if the group does not exist. + + Args: + request (:class:`~.error_group_service.UpdateGroupRequest`): + The request object. A request to replace the existing + data for the given group. + group (:class:`~.common.ErrorGroup`): + Required. The group which replaces + the resource on the server. + This corresponds to the ``group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.common.ErrorGroup: + Description of a group of similar + error events. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + if request is not None and any([group]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = error_group_service.UpdateGroupRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if group is not None: + request.group = group + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_group, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("group.name", request.group.name),) + ), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("ErrorGroupServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py new file mode 100644 index 000000000000..3cd79780dc7b --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -0,0 +1,407 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +import os +import re +from typing import Callable, Dict, Sequence, Tuple, Type, Union +import pkg_resources + +import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service + +from .transports.base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO +from .transports.grpc import ErrorGroupServiceGrpcTransport +from .transports.grpc_asyncio import ErrorGroupServiceGrpcAsyncIOTransport + + +class ErrorGroupServiceClientMeta(type): + """Metaclass for the ErrorGroupService client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[ErrorGroupServiceTransport]] + _transport_registry["grpc"] = ErrorGroupServiceGrpcTransport + _transport_registry["grpc_asyncio"] = ErrorGroupServiceGrpcAsyncIOTransport + + def get_transport_class( + cls, label: str = None, + ) -> Type[ErrorGroupServiceTransport]: + """Return an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class ErrorGroupServiceClient(metaclass=ErrorGroupServiceClientMeta): + """Service for retrieving and updating individual error groups.""" + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Convert api endpoint to mTLS endpoint. + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "clouderrorreporting.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @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: + {@api.name}: 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 + + @staticmethod + def error_group_path(project: str, group: str,) -> str: + """Return a fully-qualified error_group string.""" + return "projects/{project}/groups/{group}".format(project=project, group=group,) + + @staticmethod + def parse_error_group_path(path: str) -> Dict[str, str]: + """Parse a error_group path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/groups/(?P.+?)$", path) + return m.groupdict() if m else {} + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, ErrorGroupServiceTransport] = None, + client_options: ClientOptions = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the error group service 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 (Union[str, ~.ErrorGroupServiceTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint, this is the default value for + the environment variable) and "auto" (auto switch to the default + mTLS endpoint if client SSL credentials is present). However, + the ``api_endpoint`` property takes precedence if provided. + (2) The ``client_cert_source`` property is used to provide client + SSL credentials for mutual TLS transport. If not provided, the + default SSL credentials will be used if present. + 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. + """ + if isinstance(client_options, dict): + client_options = ClientOptions.from_dict(client_options) + if client_options is None: + client_options = ClientOptions.ClientOptions() + + if client_options.api_endpoint is None: + use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS", "never") + if use_mtls_env == "never": + client_options.api_endpoint = self.DEFAULT_ENDPOINT + elif use_mtls_env == "always": + client_options.api_endpoint = self.DEFAULT_MTLS_ENDPOINT + elif use_mtls_env == "auto": + has_client_cert_source = ( + client_options.client_cert_source is not None + or mtls.has_default_client_cert_source() + ) + client_options.api_endpoint = ( + self.DEFAULT_MTLS_ENDPOINT + if has_client_cert_source + else self.DEFAULT_ENDPOINT + ) + else: + raise MutualTLSChannelError( + "Unsupported GOOGLE_API_USE_MTLS value. Accepted values: never, auto, always" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, ErrorGroupServiceTransport): + # transport is a ErrorGroupServiceTransport instance. + if credentials or client_options.credentials_file: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, " + "provide its scopes directly." + ) + self._transport = transport + else: + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=client_options.api_endpoint, + scopes=client_options.scopes, + api_mtls_endpoint=client_options.api_endpoint, + client_cert_source=client_options.client_cert_source, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + ) + + def get_group( + self, + request: error_group_service.GetGroupRequest = None, + *, + group_name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> common.ErrorGroup: + r"""Get the specified group. + + Args: + request (:class:`~.error_group_service.GetGroupRequest`): + The request object. A request to return an individual + group. + group_name (:class:`str`): + The group resource name. Written as + ``projects/{projectID}/groups/{group_name}``. Call + ```groupStats.list`` `__ + to return a list of groups belonging to this project. + + Example: ``projects/my-project-123/groups/my-group`` + This corresponds to the ``group_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.common.ErrorGroup: + Description of a group of similar + error events. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([group_name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a error_group_service.GetGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, error_group_service.GetGroupRequest): + request = error_group_service.GetGroupRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if group_name is not None: + request.group_name = group_name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_group] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("group_name", request.group_name),) + ), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def update_group( + self, + request: error_group_service.UpdateGroupRequest = None, + *, + group: common.ErrorGroup = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> common.ErrorGroup: + r"""Replace the data for the specified group. + Fails if the group does not exist. + + Args: + request (:class:`~.error_group_service.UpdateGroupRequest`): + The request object. A request to replace the existing + data for the given group. + group (:class:`~.common.ErrorGroup`): + Required. The group which replaces + the resource on the server. + This corresponds to the ``group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.common.ErrorGroup: + Description of a group of similar + error events. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([group]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a error_group_service.UpdateGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, error_group_service.UpdateGroupRequest): + request = error_group_service.UpdateGroupRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if group is not None: + request.group = group + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_group] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("group.name", request.group.name),) + ), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("ErrorGroupServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py new file mode 100644 index 000000000000..b2784eaa4285 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +from typing import Dict, Type + +from .base import ErrorGroupServiceTransport +from .grpc import ErrorGroupServiceGrpcTransport +from .grpc_asyncio import ErrorGroupServiceGrpcAsyncIOTransport + + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[ErrorGroupServiceTransport]] +_transport_registry["grpc"] = ErrorGroupServiceGrpcTransport +_transport_registry["grpc_asyncio"] = ErrorGroupServiceGrpcAsyncIOTransport + + +__all__ = ( + "ErrorGroupServiceTransport", + "ErrorGroupServiceGrpcTransport", + "ErrorGroupServiceGrpcAsyncIOTransport", +) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py new file mode 100644 index 000000000000..794cf769858e --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 abc +import typing +import pkg_resources + +from google import auth # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +class ErrorGroupServiceTransport(abc.ABC): + """Abstract transport class for ErrorGroupService.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: typing.Optional[str] = None, + scopes: typing.Optional[typing.Sequence[str]] = AUTH_SCOPES, + quota_project_id: typing.Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scope (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = auth.load_credentials_from_file( + credentials_file, scopes=scopes, quota_project_id=quota_project_id + ) + + elif credentials is None: + credentials, _ = auth.default( + scopes=scopes, quota_project_id=quota_project_id + ) + + # Save the credentials. + self._credentials = credentials + + # Lifted into its own function so it can be stubbed out during tests. + self._prep_wrapped_messages(client_info) + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.get_group: gapic_v1.method.wrap_method( + self.get_group, default_timeout=None, client_info=client_info, + ), + self.update_group: gapic_v1.method.wrap_method( + self.update_group, default_timeout=None, client_info=client_info, + ), + } + + @property + def get_group( + self, + ) -> typing.Callable[ + [error_group_service.GetGroupRequest], + typing.Union[common.ErrorGroup, typing.Awaitable[common.ErrorGroup]], + ]: + raise NotImplementedError() + + @property + def update_group( + self, + ) -> typing.Callable[ + [error_group_service.UpdateGroupRequest], + typing.Union[common.ErrorGroup, typing.Awaitable[common.ErrorGroup]], + ]: + raise NotImplementedError() + + +__all__ = ("ErrorGroupServiceTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py new file mode 100644 index 000000000000..d6091a8961e3 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -0,0 +1,269 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 typing import Callable, Dict, Optional, Sequence, Tuple + +from google.api_core import grpc_helpers # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google import auth # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + + +import grpc # type: ignore + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service + +from .base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO + + +class ErrorGroupServiceGrpcTransport(ErrorGroupServiceTransport): + """gRPC backend transport for ErrorGroupService. + + Service for retrieving and updating individual error groups. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: str = None, + scopes: Sequence[str] = None, + channel: grpc.Channel = None, + api_mtls_endpoint: str = None, + client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If + provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or applicatin default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A + callback to provide client SSL certificate bytes and private key + bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` + is None. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + if channel: + # Sanity check: Ensure that channel and credentials are not both + # provided. + credentials = False + + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + elif api_mtls_endpoint: + host = ( + api_mtls_endpoint + if ":" in api_mtls_endpoint + else api_mtls_endpoint + ":443" + ) + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + ssl_credentials = SslCredentials().ssl_credentials + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) + + self._stubs = {} # type: Dict[str, Callable] + + # Run the base constructor. + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + client_info=client_info, + ) + + @classmethod + def create_channel( + cls, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: str = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + address (Optionsl[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + scopes = scopes or cls.AUTH_SCOPES + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Sanity check: Only create a new channel if we do not already + # have one. + if not hasattr(self, "_grpc_channel"): + self._grpc_channel = self.create_channel( + self._host, credentials=self._credentials, + ) + + # Return the channel from cache. + return self._grpc_channel + + @property + def get_group( + self, + ) -> Callable[[error_group_service.GetGroupRequest], common.ErrorGroup]: + r"""Return a callable for the get group method over gRPC. + + Get the specified group. + + Returns: + Callable[[~.GetGroupRequest], + ~.ErrorGroup]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_group" not in self._stubs: + self._stubs["get_group"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", + request_serializer=error_group_service.GetGroupRequest.serialize, + response_deserializer=common.ErrorGroup.deserialize, + ) + return self._stubs["get_group"] + + @property + def update_group( + self, + ) -> Callable[[error_group_service.UpdateGroupRequest], common.ErrorGroup]: + r"""Return a callable for the update group method over gRPC. + + Replace the data for the specified group. + Fails if the group does not exist. + + Returns: + Callable[[~.UpdateGroupRequest], + ~.ErrorGroup]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_group" not in self._stubs: + self._stubs["update_group"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", + request_serializer=error_group_service.UpdateGroupRequest.serialize, + response_deserializer=common.ErrorGroup.deserialize, + ) + return self._stubs["update_group"] + + +__all__ = ("ErrorGroupServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py new file mode 100644 index 000000000000..2386dd7f3631 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -0,0 +1,264 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple + +from google.api_core import gapic_v1 # type: ignore +from google.api_core import grpc_helpers_async # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service + +from .base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO +from .grpc import ErrorGroupServiceGrpcTransport + + +class ErrorGroupServiceGrpcAsyncIOTransport(ErrorGroupServiceTransport): + """gRPC AsyncIO backend transport for ErrorGroupService. + + Service for retrieving and updating individual error groups. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + address (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + scopes = scopes or cls.AUTH_SCOPES + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: aio.Channel = None, + api_mtls_endpoint: str = None, + client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + quota_project_id=None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If + provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or applicatin default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A + callback to provide client SSL certificate bytes and private key + bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` + is None. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + if channel: + # Sanity check: Ensure that channel and credentials are not both + # provided. + credentials = False + + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + elif api_mtls_endpoint: + host = ( + api_mtls_endpoint + if ":" in api_mtls_endpoint + else api_mtls_endpoint + ":443" + ) + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + ssl_credentials = SslCredentials().ssl_credentials + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) + + # Run the base constructor. + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + client_info=client_info, + ) + + self._stubs = {} + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Sanity check: Only create a new channel if we do not already + # have one. + if not hasattr(self, "_grpc_channel"): + self._grpc_channel = self.create_channel( + self._host, credentials=self._credentials, + ) + + # Return the channel from cache. + return self._grpc_channel + + @property + def get_group( + self, + ) -> Callable[[error_group_service.GetGroupRequest], Awaitable[common.ErrorGroup]]: + r"""Return a callable for the get group method over gRPC. + + Get the specified group. + + Returns: + Callable[[~.GetGroupRequest], + Awaitable[~.ErrorGroup]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_group" not in self._stubs: + self._stubs["get_group"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", + request_serializer=error_group_service.GetGroupRequest.serialize, + response_deserializer=common.ErrorGroup.deserialize, + ) + return self._stubs["get_group"] + + @property + def update_group( + self, + ) -> Callable[ + [error_group_service.UpdateGroupRequest], Awaitable[common.ErrorGroup] + ]: + r"""Return a callable for the update group method over gRPC. + + Replace the data for the specified group. + Fails if the group does not exist. + + Returns: + Callable[[~.UpdateGroupRequest], + Awaitable[~.ErrorGroup]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_group" not in self._stubs: + self._stubs["update_group"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", + request_serializer=error_group_service.UpdateGroupRequest.serialize, + response_deserializer=common.ErrorGroup.deserialize, + ) + return self._stubs["update_group"] + + +__all__ = ("ErrorGroupServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py new file mode 100644 index 000000000000..538729711901 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 .client import ErrorStatsServiceClient +from .async_client import ErrorStatsServiceAsyncClient + +__all__ = ( + "ErrorStatsServiceClient", + "ErrorStatsServiceAsyncClient", +) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py new file mode 100644 index 000000000000..96fd687e42b2 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -0,0 +1,385 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +import functools +import re +from typing import Dict, Sequence, Tuple, Type, Union +import pkg_resources + +import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_stats_service + +from .transports.base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO +from .transports.grpc_asyncio import ErrorStatsServiceGrpcAsyncIOTransport +from .client import ErrorStatsServiceClient + + +class ErrorStatsServiceAsyncClient: + """An API for retrieving and managing error statistics as well + as data for individual events. + """ + + _client: ErrorStatsServiceClient + + DEFAULT_ENDPOINT = ErrorStatsServiceClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = ErrorStatsServiceClient.DEFAULT_MTLS_ENDPOINT + + from_service_account_file = ErrorStatsServiceClient.from_service_account_file + from_service_account_json = from_service_account_file + + get_transport_class = functools.partial( + type(ErrorStatsServiceClient).get_transport_class, type(ErrorStatsServiceClient) + ) + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, ErrorStatsServiceTransport] = "grpc_asyncio", + client_options: ClientOptions = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the error stats service 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 (Union[str, ~.ErrorStatsServiceTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint, this is the default value for + the environment variable) and "auto" (auto switch to the default + mTLS endpoint if client SSL credentials is present). However, + the ``api_endpoint`` property takes precedence if provided. + (2) The ``client_cert_source`` property is used to provide client + SSL credentials for mutual TLS transport. If not provided, the + default SSL credentials will be used if present. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + + self._client = ErrorStatsServiceClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def list_group_stats( + self, + request: error_stats_service.ListGroupStatsRequest = None, + *, + project_name: str = None, + time_range: error_stats_service.QueryTimeRange = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListGroupStatsAsyncPager: + r"""Lists the specified groups. + + Args: + request (:class:`~.error_stats_service.ListGroupStatsRequest`): + The request object. Specifies a set of `ErrorGroupStats` + to return. + project_name (:class:`str`): + Required. The resource name of the + Google Cloud Platform project. Written + as projects/ plus the Google + Cloud Platform project ID. + + Example: projects/my- + project-123. + This corresponds to the ``project_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + time_range (:class:`~.error_stats_service.QueryTimeRange`): + Optional. List data for the given time range. If not + set, a default time range is used. The field + time_range_begin in the response will specify the + beginning of this time range. Only ErrorGroupStats with + a non-zero count in the given time range are returned, + unless the request contains an explicit group_id list. + If a group_id list is given, also ErrorGroupStats with + zero occurrences are returned. + This corresponds to the ``time_range`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.pagers.ListGroupStatsAsyncPager: + Contains a set of requested error + group stats. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + if request is not None and any([project_name, time_range]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = error_stats_service.ListGroupStatsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if project_name is not None: + request.project_name = project_name + if time_range is not None: + request.time_range = time_range + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_group_stats, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("project_name", request.project_name),) + ), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListGroupStatsAsyncPager( + method=rpc, request=request, response=response, metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_events( + self, + request: error_stats_service.ListEventsRequest = None, + *, + project_name: str = None, + group_id: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListEventsAsyncPager: + r"""Lists the specified events. + + Args: + request (:class:`~.error_stats_service.ListEventsRequest`): + The request object. Specifies a set of error events to + return. + project_name (:class:`str`): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + group_id (:class:`str`): + Required. The group for which events + shall be returned. + This corresponds to the ``group_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.pagers.ListEventsAsyncPager: + Contains a set of requested error + events. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + if request is not None and any([project_name, group_id]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = error_stats_service.ListEventsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if project_name is not None: + request.project_name = project_name + if group_id is not None: + request.group_id = group_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_events, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("project_name", request.project_name),) + ), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListEventsAsyncPager( + method=rpc, request=request, response=response, metadata=metadata, + ) + + # Done; return the response. + return response + + async def delete_events( + self, + request: error_stats_service.DeleteEventsRequest = None, + *, + project_name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> error_stats_service.DeleteEventsResponse: + r"""Deletes all error events of a given project. + + Args: + request (:class:`~.error_stats_service.DeleteEventsRequest`): + The request object. Deletes all events in the project. + project_name (:class:`str`): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.error_stats_service.DeleteEventsResponse: + Response message for deleting error + events. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + if request is not None and any([project_name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = error_stats_service.DeleteEventsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if project_name is not None: + request.project_name = project_name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_events, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("project_name", request.project_name),) + ), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("ErrorStatsServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py new file mode 100644 index 000000000000..52df793a752c --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -0,0 +1,522 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +import os +import re +from typing import Callable, Dict, Sequence, Tuple, Type, Union +import pkg_resources + +import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_stats_service + +from .transports.base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO +from .transports.grpc import ErrorStatsServiceGrpcTransport +from .transports.grpc_asyncio import ErrorStatsServiceGrpcAsyncIOTransport + + +class ErrorStatsServiceClientMeta(type): + """Metaclass for the ErrorStatsService client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[ErrorStatsServiceTransport]] + _transport_registry["grpc"] = ErrorStatsServiceGrpcTransport + _transport_registry["grpc_asyncio"] = ErrorStatsServiceGrpcAsyncIOTransport + + def get_transport_class( + cls, label: str = None, + ) -> Type[ErrorStatsServiceTransport]: + """Return an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class ErrorStatsServiceClient(metaclass=ErrorStatsServiceClientMeta): + """An API for retrieving and managing error statistics as well + as data for individual events. + """ + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Convert api endpoint to mTLS endpoint. + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "clouderrorreporting.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @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: + {@api.name}: 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 + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, ErrorStatsServiceTransport] = None, + client_options: ClientOptions = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the error stats service 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 (Union[str, ~.ErrorStatsServiceTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint, this is the default value for + the environment variable) and "auto" (auto switch to the default + mTLS endpoint if client SSL credentials is present). However, + the ``api_endpoint`` property takes precedence if provided. + (2) The ``client_cert_source`` property is used to provide client + SSL credentials for mutual TLS transport. If not provided, the + default SSL credentials will be used if present. + 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. + """ + if isinstance(client_options, dict): + client_options = ClientOptions.from_dict(client_options) + if client_options is None: + client_options = ClientOptions.ClientOptions() + + if client_options.api_endpoint is None: + use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS", "never") + if use_mtls_env == "never": + client_options.api_endpoint = self.DEFAULT_ENDPOINT + elif use_mtls_env == "always": + client_options.api_endpoint = self.DEFAULT_MTLS_ENDPOINT + elif use_mtls_env == "auto": + has_client_cert_source = ( + client_options.client_cert_source is not None + or mtls.has_default_client_cert_source() + ) + client_options.api_endpoint = ( + self.DEFAULT_MTLS_ENDPOINT + if has_client_cert_source + else self.DEFAULT_ENDPOINT + ) + else: + raise MutualTLSChannelError( + "Unsupported GOOGLE_API_USE_MTLS value. Accepted values: never, auto, always" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, ErrorStatsServiceTransport): + # transport is a ErrorStatsServiceTransport instance. + if credentials or client_options.credentials_file: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, " + "provide its scopes directly." + ) + self._transport = transport + else: + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=client_options.api_endpoint, + scopes=client_options.scopes, + api_mtls_endpoint=client_options.api_endpoint, + client_cert_source=client_options.client_cert_source, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + ) + + def list_group_stats( + self, + request: error_stats_service.ListGroupStatsRequest = None, + *, + project_name: str = None, + time_range: error_stats_service.QueryTimeRange = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListGroupStatsPager: + r"""Lists the specified groups. + + Args: + request (:class:`~.error_stats_service.ListGroupStatsRequest`): + The request object. Specifies a set of `ErrorGroupStats` + to return. + project_name (:class:`str`): + Required. The resource name of the + Google Cloud Platform project. Written + as projects/ plus the Google + Cloud Platform project ID. + + Example: projects/my- + project-123. + This corresponds to the ``project_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + time_range (:class:`~.error_stats_service.QueryTimeRange`): + Optional. List data for the given time range. If not + set, a default time range is used. The field + time_range_begin in the response will specify the + beginning of this time range. Only ErrorGroupStats with + a non-zero count in the given time range are returned, + unless the request contains an explicit group_id list. + If a group_id list is given, also ErrorGroupStats with + zero occurrences are returned. + This corresponds to the ``time_range`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.pagers.ListGroupStatsPager: + Contains a set of requested error + group stats. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project_name, time_range]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a error_stats_service.ListGroupStatsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, error_stats_service.ListGroupStatsRequest): + request = error_stats_service.ListGroupStatsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if project_name is not None: + request.project_name = project_name + if time_range is not None: + request.time_range = time_range + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_group_stats] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("project_name", request.project_name),) + ), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListGroupStatsPager( + method=rpc, request=request, response=response, metadata=metadata, + ) + + # Done; return the response. + return response + + def list_events( + self, + request: error_stats_service.ListEventsRequest = None, + *, + project_name: str = None, + group_id: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListEventsPager: + r"""Lists the specified events. + + Args: + request (:class:`~.error_stats_service.ListEventsRequest`): + The request object. Specifies a set of error events to + return. + project_name (:class:`str`): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + group_id (:class:`str`): + Required. The group for which events + shall be returned. + This corresponds to the ``group_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.pagers.ListEventsPager: + Contains a set of requested error + events. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project_name, group_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a error_stats_service.ListEventsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, error_stats_service.ListEventsRequest): + request = error_stats_service.ListEventsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if project_name is not None: + request.project_name = project_name + if group_id is not None: + request.group_id = group_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_events] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("project_name", request.project_name),) + ), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListEventsPager( + method=rpc, request=request, response=response, metadata=metadata, + ) + + # Done; return the response. + return response + + def delete_events( + self, + request: error_stats_service.DeleteEventsRequest = None, + *, + project_name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> error_stats_service.DeleteEventsResponse: + r"""Deletes all error events of a given project. + + Args: + request (:class:`~.error_stats_service.DeleteEventsRequest`): + The request object. Deletes all events in the project. + project_name (:class:`str`): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.error_stats_service.DeleteEventsResponse: + Response message for deleting error + events. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project_name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a error_stats_service.DeleteEventsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, error_stats_service.DeleteEventsRequest): + request = error_stats_service.DeleteEventsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if project_name is not None: + request.project_name = project_name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_events] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("project_name", request.project_name),) + ), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("ErrorStatsServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py new file mode 100644 index 000000000000..02a4faa4c614 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -0,0 +1,277 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 typing import Any, AsyncIterable, Awaitable, Callable, Iterable, Sequence, Tuple + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_stats_service + + +class ListGroupStatsPager: + """A pager for iterating through ``list_group_stats`` requests. + + This class thinly wraps an initial + :class:`~.error_stats_service.ListGroupStatsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``error_group_stats`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListGroupStats`` requests and continue to iterate + through the ``error_group_stats`` field on the + corresponding responses. + + All the usual :class:`~.error_stats_service.ListGroupStatsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., error_stats_service.ListGroupStatsResponse], + request: error_stats_service.ListGroupStatsRequest, + response: error_stats_service.ListGroupStatsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (:class:`~.error_stats_service.ListGroupStatsRequest`): + The initial request object. + response (:class:`~.error_stats_service.ListGroupStatsResponse`): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = error_stats_service.ListGroupStatsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterable[error_stats_service.ListGroupStatsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterable[error_stats_service.ErrorGroupStats]: + for page in self.pages: + yield from page.error_group_stats + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListGroupStatsAsyncPager: + """A pager for iterating through ``list_group_stats`` requests. + + This class thinly wraps an initial + :class:`~.error_stats_service.ListGroupStatsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``error_group_stats`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListGroupStats`` requests and continue to iterate + through the ``error_group_stats`` field on the + corresponding responses. + + All the usual :class:`~.error_stats_service.ListGroupStatsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., Awaitable[error_stats_service.ListGroupStatsResponse]], + request: error_stats_service.ListGroupStatsRequest, + response: error_stats_service.ListGroupStatsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (:class:`~.error_stats_service.ListGroupStatsRequest`): + The initial request object. + response (:class:`~.error_stats_service.ListGroupStatsResponse`): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = error_stats_service.ListGroupStatsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterable[error_stats_service.ListGroupStatsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__(self) -> AsyncIterable[error_stats_service.ErrorGroupStats]: + async def async_generator(): + async for page in self.pages: + for response in page.error_group_stats: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListEventsPager: + """A pager for iterating through ``list_events`` requests. + + This class thinly wraps an initial + :class:`~.error_stats_service.ListEventsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``error_events`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListEvents`` requests and continue to iterate + through the ``error_events`` field on the + corresponding responses. + + All the usual :class:`~.error_stats_service.ListEventsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., error_stats_service.ListEventsResponse], + request: error_stats_service.ListEventsRequest, + response: error_stats_service.ListEventsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (:class:`~.error_stats_service.ListEventsRequest`): + The initial request object. + response (:class:`~.error_stats_service.ListEventsResponse`): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = error_stats_service.ListEventsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterable[error_stats_service.ListEventsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterable[common.ErrorEvent]: + for page in self.pages: + yield from page.error_events + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListEventsAsyncPager: + """A pager for iterating through ``list_events`` requests. + + This class thinly wraps an initial + :class:`~.error_stats_service.ListEventsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``error_events`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListEvents`` requests and continue to iterate + through the ``error_events`` field on the + corresponding responses. + + All the usual :class:`~.error_stats_service.ListEventsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., Awaitable[error_stats_service.ListEventsResponse]], + request: error_stats_service.ListEventsRequest, + response: error_stats_service.ListEventsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (:class:`~.error_stats_service.ListEventsRequest`): + The initial request object. + response (:class:`~.error_stats_service.ListEventsResponse`): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = error_stats_service.ListEventsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterable[error_stats_service.ListEventsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__(self) -> AsyncIterable[common.ErrorEvent]: + async def async_generator(): + async for page in self.pages: + for response in page.error_events: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py new file mode 100644 index 000000000000..5888696605df --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +from typing import Dict, Type + +from .base import ErrorStatsServiceTransport +from .grpc import ErrorStatsServiceGrpcTransport +from .grpc_asyncio import ErrorStatsServiceGrpcAsyncIOTransport + + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[ErrorStatsServiceTransport]] +_transport_registry["grpc"] = ErrorStatsServiceGrpcTransport +_transport_registry["grpc_asyncio"] = ErrorStatsServiceGrpcAsyncIOTransport + + +__all__ = ( + "ErrorStatsServiceTransport", + "ErrorStatsServiceGrpcTransport", + "ErrorStatsServiceGrpcAsyncIOTransport", +) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py new file mode 100644 index 000000000000..9ee79c3477ca --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 abc +import typing +import pkg_resources + +from google import auth # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore + +from google.cloud.errorreporting_v1beta1.types import error_stats_service + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +class ErrorStatsServiceTransport(abc.ABC): + """Abstract transport class for ErrorStatsService.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: typing.Optional[str] = None, + scopes: typing.Optional[typing.Sequence[str]] = AUTH_SCOPES, + quota_project_id: typing.Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scope (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = auth.load_credentials_from_file( + credentials_file, scopes=scopes, quota_project_id=quota_project_id + ) + + elif credentials is None: + credentials, _ = auth.default( + scopes=scopes, quota_project_id=quota_project_id + ) + + # Save the credentials. + self._credentials = credentials + + # Lifted into its own function so it can be stubbed out during tests. + self._prep_wrapped_messages(client_info) + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.list_group_stats: gapic_v1.method.wrap_method( + self.list_group_stats, default_timeout=None, client_info=client_info, + ), + self.list_events: gapic_v1.method.wrap_method( + self.list_events, default_timeout=None, client_info=client_info, + ), + self.delete_events: gapic_v1.method.wrap_method( + self.delete_events, default_timeout=None, client_info=client_info, + ), + } + + @property + def list_group_stats( + self, + ) -> typing.Callable[ + [error_stats_service.ListGroupStatsRequest], + typing.Union[ + error_stats_service.ListGroupStatsResponse, + typing.Awaitable[error_stats_service.ListGroupStatsResponse], + ], + ]: + raise NotImplementedError() + + @property + def list_events( + self, + ) -> typing.Callable[ + [error_stats_service.ListEventsRequest], + typing.Union[ + error_stats_service.ListEventsResponse, + typing.Awaitable[error_stats_service.ListEventsResponse], + ], + ]: + raise NotImplementedError() + + @property + def delete_events( + self, + ) -> typing.Callable[ + [error_stats_service.DeleteEventsRequest], + typing.Union[ + error_stats_service.DeleteEventsResponse, + typing.Awaitable[error_stats_service.DeleteEventsResponse], + ], + ]: + raise NotImplementedError() + + +__all__ = ("ErrorStatsServiceTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py new file mode 100644 index 000000000000..37bfe51c0563 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -0,0 +1,302 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 typing import Callable, Dict, Optional, Sequence, Tuple + +from google.api_core import grpc_helpers # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google import auth # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + + +import grpc # type: ignore + +from google.cloud.errorreporting_v1beta1.types import error_stats_service + +from .base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO + + +class ErrorStatsServiceGrpcTransport(ErrorStatsServiceTransport): + """gRPC backend transport for ErrorStatsService. + + An API for retrieving and managing error statistics as well + as data for individual events. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: str = None, + scopes: Sequence[str] = None, + channel: grpc.Channel = None, + api_mtls_endpoint: str = None, + client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If + provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or applicatin default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A + callback to provide client SSL certificate bytes and private key + bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` + is None. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + if channel: + # Sanity check: Ensure that channel and credentials are not both + # provided. + credentials = False + + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + elif api_mtls_endpoint: + host = ( + api_mtls_endpoint + if ":" in api_mtls_endpoint + else api_mtls_endpoint + ":443" + ) + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + ssl_credentials = SslCredentials().ssl_credentials + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) + + self._stubs = {} # type: Dict[str, Callable] + + # Run the base constructor. + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + client_info=client_info, + ) + + @classmethod + def create_channel( + cls, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: str = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + address (Optionsl[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + scopes = scopes or cls.AUTH_SCOPES + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Sanity check: Only create a new channel if we do not already + # have one. + if not hasattr(self, "_grpc_channel"): + self._grpc_channel = self.create_channel( + self._host, credentials=self._credentials, + ) + + # Return the channel from cache. + return self._grpc_channel + + @property + def list_group_stats( + self, + ) -> Callable[ + [error_stats_service.ListGroupStatsRequest], + error_stats_service.ListGroupStatsResponse, + ]: + r"""Return a callable for the list group stats method over gRPC. + + Lists the specified groups. + + Returns: + Callable[[~.ListGroupStatsRequest], + ~.ListGroupStatsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_group_stats" not in self._stubs: + self._stubs["list_group_stats"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", + request_serializer=error_stats_service.ListGroupStatsRequest.serialize, + response_deserializer=error_stats_service.ListGroupStatsResponse.deserialize, + ) + return self._stubs["list_group_stats"] + + @property + def list_events( + self, + ) -> Callable[ + [error_stats_service.ListEventsRequest], error_stats_service.ListEventsResponse + ]: + r"""Return a callable for the list events method over gRPC. + + Lists the specified events. + + Returns: + Callable[[~.ListEventsRequest], + ~.ListEventsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_events" not in self._stubs: + self._stubs["list_events"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", + request_serializer=error_stats_service.ListEventsRequest.serialize, + response_deserializer=error_stats_service.ListEventsResponse.deserialize, + ) + return self._stubs["list_events"] + + @property + def delete_events( + self, + ) -> Callable[ + [error_stats_service.DeleteEventsRequest], + error_stats_service.DeleteEventsResponse, + ]: + r"""Return a callable for the delete events method over gRPC. + + Deletes all error events of a given project. + + Returns: + Callable[[~.DeleteEventsRequest], + ~.DeleteEventsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_events" not in self._stubs: + self._stubs["delete_events"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", + request_serializer=error_stats_service.DeleteEventsRequest.serialize, + response_deserializer=error_stats_service.DeleteEventsResponse.deserialize, + ) + return self._stubs["delete_events"] + + +__all__ = ("ErrorStatsServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py new file mode 100644 index 000000000000..16ba1ba8a7a8 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -0,0 +1,296 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple + +from google.api_core import gapic_v1 # type: ignore +from google.api_core import grpc_helpers_async # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.errorreporting_v1beta1.types import error_stats_service + +from .base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO +from .grpc import ErrorStatsServiceGrpcTransport + + +class ErrorStatsServiceGrpcAsyncIOTransport(ErrorStatsServiceTransport): + """gRPC AsyncIO backend transport for ErrorStatsService. + + An API for retrieving and managing error statistics as well + as data for individual events. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + address (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + scopes = scopes or cls.AUTH_SCOPES + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: aio.Channel = None, + api_mtls_endpoint: str = None, + client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + quota_project_id=None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If + provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or applicatin default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A + callback to provide client SSL certificate bytes and private key + bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` + is None. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + if channel: + # Sanity check: Ensure that channel and credentials are not both + # provided. + credentials = False + + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + elif api_mtls_endpoint: + host = ( + api_mtls_endpoint + if ":" in api_mtls_endpoint + else api_mtls_endpoint + ":443" + ) + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + ssl_credentials = SslCredentials().ssl_credentials + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) + + # Run the base constructor. + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + client_info=client_info, + ) + + self._stubs = {} + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Sanity check: Only create a new channel if we do not already + # have one. + if not hasattr(self, "_grpc_channel"): + self._grpc_channel = self.create_channel( + self._host, credentials=self._credentials, + ) + + # Return the channel from cache. + return self._grpc_channel + + @property + def list_group_stats( + self, + ) -> Callable[ + [error_stats_service.ListGroupStatsRequest], + Awaitable[error_stats_service.ListGroupStatsResponse], + ]: + r"""Return a callable for the list group stats method over gRPC. + + Lists the specified groups. + + Returns: + Callable[[~.ListGroupStatsRequest], + Awaitable[~.ListGroupStatsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_group_stats" not in self._stubs: + self._stubs["list_group_stats"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", + request_serializer=error_stats_service.ListGroupStatsRequest.serialize, + response_deserializer=error_stats_service.ListGroupStatsResponse.deserialize, + ) + return self._stubs["list_group_stats"] + + @property + def list_events( + self, + ) -> Callable[ + [error_stats_service.ListEventsRequest], + Awaitable[error_stats_service.ListEventsResponse], + ]: + r"""Return a callable for the list events method over gRPC. + + Lists the specified events. + + Returns: + Callable[[~.ListEventsRequest], + Awaitable[~.ListEventsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_events" not in self._stubs: + self._stubs["list_events"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", + request_serializer=error_stats_service.ListEventsRequest.serialize, + response_deserializer=error_stats_service.ListEventsResponse.deserialize, + ) + return self._stubs["list_events"] + + @property + def delete_events( + self, + ) -> Callable[ + [error_stats_service.DeleteEventsRequest], + Awaitable[error_stats_service.DeleteEventsResponse], + ]: + r"""Return a callable for the delete events method over gRPC. + + Deletes all error events of a given project. + + Returns: + Callable[[~.DeleteEventsRequest], + Awaitable[~.DeleteEventsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_events" not in self._stubs: + self._stubs["delete_events"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", + request_serializer=error_stats_service.DeleteEventsRequest.serialize, + response_deserializer=error_stats_service.DeleteEventsResponse.deserialize, + ) + return self._stubs["delete_events"] + + +__all__ = ("ErrorStatsServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py new file mode 100644 index 000000000000..0a9dd71ee452 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 .client import ReportErrorsServiceClient +from .async_client import ReportErrorsServiceAsyncClient + +__all__ = ( + "ReportErrorsServiceClient", + "ReportErrorsServiceAsyncClient", +) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py new file mode 100644 index 000000000000..a1c281aca712 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -0,0 +1,203 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +import functools +import re +from typing import Dict, Sequence, Tuple, Type, Union +import pkg_resources + +import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.errorreporting_v1beta1.types import report_errors_service + +from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO +from .transports.grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport +from .client import ReportErrorsServiceClient + + +class ReportErrorsServiceAsyncClient: + """An API for reporting error events.""" + + _client: ReportErrorsServiceClient + + DEFAULT_ENDPOINT = ReportErrorsServiceClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = ReportErrorsServiceClient.DEFAULT_MTLS_ENDPOINT + + from_service_account_file = ReportErrorsServiceClient.from_service_account_file + from_service_account_json = from_service_account_file + + get_transport_class = functools.partial( + type(ReportErrorsServiceClient).get_transport_class, + type(ReportErrorsServiceClient), + ) + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, ReportErrorsServiceTransport] = "grpc_asyncio", + client_options: ClientOptions = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the report errors service 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 (Union[str, ~.ReportErrorsServiceTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint, this is the default value for + the environment variable) and "auto" (auto switch to the default + mTLS endpoint if client SSL credentials is present). However, + the ``api_endpoint`` property takes precedence if provided. + (2) The ``client_cert_source`` property is used to provide client + SSL credentials for mutual TLS transport. If not provided, the + default SSL credentials will be used if present. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + + self._client = ReportErrorsServiceClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def report_error_event( + self, + request: report_errors_service.ReportErrorEventRequest = None, + *, + project_name: str = None, + event: report_errors_service.ReportedErrorEvent = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> report_errors_service.ReportErrorEventResponse: + r"""Report an individual error event. + + This endpoint accepts **either** an OAuth token, **or** an `API + key `__ for + authentication. To use an API key, append it to the URL as the + value of a ``key`` parameter. For example: + + ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + + Args: + request (:class:`~.report_errors_service.ReportErrorEventRequest`): + The request object. A request for reporting an + individual error event. + project_name (:class:`str`): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + event (:class:`~.report_errors_service.ReportedErrorEvent`): + Required. The error event to be + reported. + This corresponds to the ``event`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.report_errors_service.ReportErrorEventResponse: + Response for reporting an individual + error event. Data may be added to this + message in the future. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + if request is not None and any([project_name, event]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = report_errors_service.ReportErrorEventRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if project_name is not None: + request.project_name = project_name + if event is not None: + request.event = event + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.report_error_event, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("project_name", request.project_name),) + ), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("ReportErrorsServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py new file mode 100644 index 000000000000..04e07ce85bf9 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -0,0 +1,335 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +import os +import re +from typing import Callable, Dict, Sequence, Tuple, Type, Union +import pkg_resources + +import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.errorreporting_v1beta1.types import report_errors_service + +from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO +from .transports.grpc import ReportErrorsServiceGrpcTransport +from .transports.grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport + + +class ReportErrorsServiceClientMeta(type): + """Metaclass for the ReportErrorsService client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[ReportErrorsServiceTransport]] + _transport_registry["grpc"] = ReportErrorsServiceGrpcTransport + _transport_registry["grpc_asyncio"] = ReportErrorsServiceGrpcAsyncIOTransport + + def get_transport_class( + cls, label: str = None, + ) -> Type[ReportErrorsServiceTransport]: + """Return an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class ReportErrorsServiceClient(metaclass=ReportErrorsServiceClientMeta): + """An API for reporting error events.""" + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Convert api endpoint to mTLS endpoint. + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "clouderrorreporting.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @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: + {@api.name}: 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 + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, ReportErrorsServiceTransport] = None, + client_options: ClientOptions = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the report errors service 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 (Union[str, ~.ReportErrorsServiceTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint, this is the default value for + the environment variable) and "auto" (auto switch to the default + mTLS endpoint if client SSL credentials is present). However, + the ``api_endpoint`` property takes precedence if provided. + (2) The ``client_cert_source`` property is used to provide client + SSL credentials for mutual TLS transport. If not provided, the + default SSL credentials will be used if present. + 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. + """ + if isinstance(client_options, dict): + client_options = ClientOptions.from_dict(client_options) + if client_options is None: + client_options = ClientOptions.ClientOptions() + + if client_options.api_endpoint is None: + use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS", "never") + if use_mtls_env == "never": + client_options.api_endpoint = self.DEFAULT_ENDPOINT + elif use_mtls_env == "always": + client_options.api_endpoint = self.DEFAULT_MTLS_ENDPOINT + elif use_mtls_env == "auto": + has_client_cert_source = ( + client_options.client_cert_source is not None + or mtls.has_default_client_cert_source() + ) + client_options.api_endpoint = ( + self.DEFAULT_MTLS_ENDPOINT + if has_client_cert_source + else self.DEFAULT_ENDPOINT + ) + else: + raise MutualTLSChannelError( + "Unsupported GOOGLE_API_USE_MTLS value. Accepted values: never, auto, always" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, ReportErrorsServiceTransport): + # transport is a ReportErrorsServiceTransport instance. + if credentials or client_options.credentials_file: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, " + "provide its scopes directly." + ) + self._transport = transport + else: + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=client_options.api_endpoint, + scopes=client_options.scopes, + api_mtls_endpoint=client_options.api_endpoint, + client_cert_source=client_options.client_cert_source, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + ) + + def report_error_event( + self, + request: report_errors_service.ReportErrorEventRequest = None, + *, + project_name: str = None, + event: report_errors_service.ReportedErrorEvent = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> report_errors_service.ReportErrorEventResponse: + r"""Report an individual error event. + + This endpoint accepts **either** an OAuth token, **or** an `API + key `__ for + authentication. To use an API key, append it to the URL as the + value of a ``key`` parameter. For example: + + ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + + Args: + request (:class:`~.report_errors_service.ReportErrorEventRequest`): + The request object. A request for reporting an + individual error event. + project_name (:class:`str`): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + event (:class:`~.report_errors_service.ReportedErrorEvent`): + Required. The error event to be + reported. + This corresponds to the ``event`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.report_errors_service.ReportErrorEventResponse: + Response for reporting an individual + error event. Data may be added to this + message in the future. + + """ + # Create or coerce a protobuf request object. + # Sanity check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project_name, event]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a report_errors_service.ReportErrorEventRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, report_errors_service.ReportErrorEventRequest): + request = report_errors_service.ReportErrorEventRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if project_name is not None: + request.project_name = project_name + if event is not None: + request.event = event + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.report_error_event] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("project_name", request.project_name),) + ), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("ReportErrorsServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py new file mode 100644 index 000000000000..8226c94872c7 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 collections import OrderedDict +from typing import Dict, Type + +from .base import ReportErrorsServiceTransport +from .grpc import ReportErrorsServiceGrpcTransport +from .grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport + + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[ReportErrorsServiceTransport]] +_transport_registry["grpc"] = ReportErrorsServiceGrpcTransport +_transport_registry["grpc_asyncio"] = ReportErrorsServiceGrpcAsyncIOTransport + + +__all__ = ( + "ReportErrorsServiceTransport", + "ReportErrorsServiceGrpcTransport", + "ReportErrorsServiceGrpcAsyncIOTransport", +) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py new file mode 100644 index 000000000000..f1a66243e706 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 abc +import typing +import pkg_resources + +from google import auth # type: ignore +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import retry as retries # type: ignore +from google.auth import credentials # type: ignore + +from google.cloud.errorreporting_v1beta1.types import report_errors_service + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-errorreporting", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +class ReportErrorsServiceTransport(abc.ABC): + """Abstract transport class for ReportErrorsService.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: typing.Optional[str] = None, + scopes: typing.Optional[typing.Sequence[str]] = AUTH_SCOPES, + quota_project_id: typing.Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scope (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = auth.load_credentials_from_file( + credentials_file, scopes=scopes, quota_project_id=quota_project_id + ) + + elif credentials is None: + credentials, _ = auth.default( + scopes=scopes, quota_project_id=quota_project_id + ) + + # Save the credentials. + self._credentials = credentials + + # Lifted into its own function so it can be stubbed out during tests. + self._prep_wrapped_messages(client_info) + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.report_error_event: gapic_v1.method.wrap_method( + self.report_error_event, default_timeout=None, client_info=client_info, + ), + } + + @property + def report_error_event( + self, + ) -> typing.Callable[ + [report_errors_service.ReportErrorEventRequest], + typing.Union[ + report_errors_service.ReportErrorEventResponse, + typing.Awaitable[report_errors_service.ReportErrorEventResponse], + ], + ]: + raise NotImplementedError() + + +__all__ = ("ReportErrorsServiceTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py new file mode 100644 index 000000000000..c542ff0b1835 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -0,0 +1,251 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 typing import Callable, Dict, Optional, Sequence, Tuple + +from google.api_core import grpc_helpers # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google import auth # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + + +import grpc # type: ignore + +from google.cloud.errorreporting_v1beta1.types import report_errors_service + +from .base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO + + +class ReportErrorsServiceGrpcTransport(ReportErrorsServiceTransport): + """gRPC backend transport for ReportErrorsService. + + An API for reporting error events. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: str = None, + scopes: Sequence[str] = None, + channel: grpc.Channel = None, + api_mtls_endpoint: str = None, + client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If + provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or applicatin default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A + callback to provide client SSL certificate bytes and private key + bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` + is None. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + if channel: + # Sanity check: Ensure that channel and credentials are not both + # provided. + credentials = False + + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + elif api_mtls_endpoint: + host = ( + api_mtls_endpoint + if ":" in api_mtls_endpoint + else api_mtls_endpoint + ":443" + ) + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + ssl_credentials = SslCredentials().ssl_credentials + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) + + self._stubs = {} # type: Dict[str, Callable] + + # Run the base constructor. + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + client_info=client_info, + ) + + @classmethod + def create_channel( + cls, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: str = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + address (Optionsl[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + scopes = scopes or cls.AUTH_SCOPES + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Sanity check: Only create a new channel if we do not already + # have one. + if not hasattr(self, "_grpc_channel"): + self._grpc_channel = self.create_channel( + self._host, credentials=self._credentials, + ) + + # Return the channel from cache. + return self._grpc_channel + + @property + def report_error_event( + self, + ) -> Callable[ + [report_errors_service.ReportErrorEventRequest], + report_errors_service.ReportErrorEventResponse, + ]: + r"""Return a callable for the report error event method over gRPC. + + Report an individual error event. + + This endpoint accepts **either** an OAuth token, **or** an `API + key `__ for + authentication. To use an API key, append it to the URL as the + value of a ``key`` parameter. For example: + + ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + + Returns: + Callable[[~.ReportErrorEventRequest], + ~.ReportErrorEventResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "report_error_event" not in self._stubs: + self._stubs["report_error_event"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", + request_serializer=report_errors_service.ReportErrorEventRequest.serialize, + response_deserializer=report_errors_service.ReportErrorEventResponse.deserialize, + ) + return self._stubs["report_error_event"] + + +__all__ = ("ReportErrorsServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py new file mode 100644 index 000000000000..b0ed1fbafd20 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -0,0 +1,244 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple + +from google.api_core import gapic_v1 # type: ignore +from google.api_core import grpc_helpers_async # type: ignore +from google.auth import credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.errorreporting_v1beta1.types import report_errors_service + +from .base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO +from .grpc import ReportErrorsServiceGrpcTransport + + +class ReportErrorsServiceGrpcAsyncIOTransport(ReportErrorsServiceTransport): + """gRPC AsyncIO backend transport for ReportErrorsService. + + An API for reporting error events. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + address (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + scopes = scopes or cls.AUTH_SCOPES + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: aio.Channel = None, + api_mtls_endpoint: str = None, + client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + quota_project_id=None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): The hostname to connect to. + 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. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If + provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or applicatin default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A + callback to provide client SSL certificate bytes and private key + bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` + is None. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + if channel: + # Sanity check: Ensure that channel and credentials are not both + # provided. + credentials = False + + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + elif api_mtls_endpoint: + host = ( + api_mtls_endpoint + if ":" in api_mtls_endpoint + else api_mtls_endpoint + ":443" + ) + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + ssl_credentials = SslCredentials().ssl_credentials + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) + + # Run the base constructor. + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + client_info=client_info, + ) + + self._stubs = {} + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Sanity check: Only create a new channel if we do not already + # have one. + if not hasattr(self, "_grpc_channel"): + self._grpc_channel = self.create_channel( + self._host, credentials=self._credentials, + ) + + # Return the channel from cache. + return self._grpc_channel + + @property + def report_error_event( + self, + ) -> Callable[ + [report_errors_service.ReportErrorEventRequest], + Awaitable[report_errors_service.ReportErrorEventResponse], + ]: + r"""Return a callable for the report error event method over gRPC. + + Report an individual error event. + + This endpoint accepts **either** an OAuth token, **or** an `API + key `__ for + authentication. To use an API key, append it to the URL as the + value of a ``key`` parameter. For example: + + ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + + Returns: + Callable[[~.ReportErrorEventRequest], + Awaitable[~.ReportErrorEventResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "report_error_event" not in self._stubs: + self._stubs["report_error_event"] = self.grpc_channel.unary_unary( + "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", + request_serializer=report_errors_service.ReportErrorEventRequest.serialize, + response_deserializer=report_errors_service.ReportErrorEventResponse.deserialize, + ) + return self._stubs["report_error_event"] + + +__all__ = ("ReportErrorsServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py deleted file mode 100644 index 388e69bbad78..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright 2018 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 -# -# https://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 __future__ import absolute_import -import sys - -from google.api import http_pb2 -from google.api import label_pb2 -from google.api import monitored_resource_pb2 -from google.protobuf import descriptor_pb2 -from google.protobuf import duration_pb2 -from google.protobuf import timestamp_pb2 - -from google.api_core.protobuf_helpers import get_messages -from google.cloud.errorreporting_v1beta1.proto import common_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 -from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 - - -_shared_modules = [ - http_pb2, - label_pb2, - monitored_resource_pb2, - report_errors_service_pb2, - descriptor_pb2, - duration_pb2, - timestamp_pb2, -] - -_local_modules = [common_pb2, error_group_service_pb2, error_stats_service_pb2] - -names = [] - -for module in _shared_modules: - for name, message in get_messages(module).items(): - setattr(sys.modules[__name__], name, message) - names.append(name) - -for module in _local_modules: - for name, message in get_messages(module).items(): - message.__module__ = "google.cloud.errorreporting_v1beta1.types" - setattr(sys.modules[__name__], name, message) - names.append(name) - -__all__ = tuple(sorted(names)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py new file mode 100644 index 000000000000..65524373a51c --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 .common import ( + ErrorGroup, + TrackingIssue, + ErrorEvent, + ServiceContext, + ErrorContext, + HttpRequestContext, + SourceLocation, +) +from .error_group_service import ( + GetGroupRequest, + UpdateGroupRequest, +) +from .error_stats_service import ( + ListGroupStatsRequest, + ListGroupStatsResponse, + ErrorGroupStats, + TimedCount, + ListEventsRequest, + ListEventsResponse, + QueryTimeRange, + ServiceContextFilter, + DeleteEventsRequest, + DeleteEventsResponse, +) +from .report_errors_service import ( + ReportErrorEventRequest, + ReportErrorEventResponse, + ReportedErrorEvent, +) + + +__all__ = ( + "ErrorGroup", + "TrackingIssue", + "ErrorEvent", + "ServiceContext", + "ErrorContext", + "HttpRequestContext", + "SourceLocation", + "GetGroupRequest", + "UpdateGroupRequest", + "ListGroupStatsRequest", + "ListGroupStatsResponse", + "ErrorGroupStats", + "TimedCount", + "ListEventsRequest", + "ListEventsResponse", + "QueryTimeRange", + "ServiceContextFilter", + "DeleteEventsRequest", + "DeleteEventsResponse", + "ReportErrorEventRequest", + "ReportErrorEventResponse", + "ReportedErrorEvent", +) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py new file mode 100644 index 000000000000..779aa45335da --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -0,0 +1,249 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 proto # type: ignore + + +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + + +__protobuf__ = proto.module( + package="google.devtools.clouderrorreporting.v1beta1", + manifest={ + "ErrorGroup", + "TrackingIssue", + "ErrorEvent", + "ServiceContext", + "ErrorContext", + "HttpRequestContext", + "SourceLocation", + }, +) + + +class ErrorGroup(proto.Message): + r"""Description of a group of similar error events. + + Attributes: + name (str): + The group resource name. + Example: projects/my- + project-123/groups/my-groupid + group_id (str): + Group IDs are unique for a given project. If + the same kind of error occurs in different + service contexts, it will receive the same group + ID. + tracking_issues (Sequence[~.common.TrackingIssue]): + Associated tracking issues. + """ + + name = proto.Field(proto.STRING, number=1) + + group_id = proto.Field(proto.STRING, number=2) + + tracking_issues = proto.RepeatedField( + proto.MESSAGE, number=3, message="TrackingIssue", + ) + + +class TrackingIssue(proto.Message): + r"""Information related to tracking the progress on resolving the + error. + + Attributes: + url (str): + A URL pointing to a related entry in an issue tracking + system. Example: + ``https://github.com/user/project/issues/4`` + """ + + url = proto.Field(proto.STRING, number=1) + + +class ErrorEvent(proto.Message): + r"""An error event which is returned by the Error Reporting + system. + + Attributes: + event_time (~.timestamp.Timestamp): + Time when the event occurred as provided in + the error report. If the report did not contain + a timestamp, the time the error was received by + the Error Reporting system is used. + service_context (~.common.ServiceContext): + The ``ServiceContext`` for which this error was reported. + message (str): + The stack trace that was reported or logged + by the service. + context (~.common.ErrorContext): + Data about the context in which the error + occurred. + """ + + event_time = proto.Field(proto.MESSAGE, number=1, message=timestamp.Timestamp,) + + service_context = proto.Field(proto.MESSAGE, number=2, message="ServiceContext",) + + message = proto.Field(proto.STRING, number=3) + + context = proto.Field(proto.MESSAGE, number=5, message="ErrorContext",) + + +class ServiceContext(proto.Message): + r"""Describes a running service that sends errors. + Its version changes over time and multiple versions can run in + parallel. + + Attributes: + service (str): + An identifier of the service, such as the name of the + executable, job, or Google App Engine service name. This + field is expected to have a low number of values that are + relatively stable over time, as opposed to ``version``, + which can be changed whenever new code is deployed. + + Contains the service name for error reports extracted from + Google App Engine logs or ``default`` if the App Engine + default service is used. + version (str): + Represents the source code version that the + developer provided, which could represent a + version label or a Git SHA-1 hash, for example. + For App Engine standard environment, the version + is set to the version of the app. + resource_type (str): + Type of the MonitoredResource. List of + possible values: + https://cloud.google.com/monitoring/api/resources + Value is set automatically for incoming errors + and must not be set when reporting errors. + """ + + service = proto.Field(proto.STRING, number=2) + + version = proto.Field(proto.STRING, number=3) + + resource_type = proto.Field(proto.STRING, number=4) + + +class ErrorContext(proto.Message): + r"""A description of the context in which an error occurred. + This data should be provided by the application when reporting + an error, unless the + error report has been generated automatically from Google App + Engine logs. + + Attributes: + http_request (~.common.HttpRequestContext): + The HTTP request which was processed when the + error was triggered. + user (str): + The user who caused or was affected by the crash. This can + be a user ID, an email address, or an arbitrary token that + uniquely identifies the user. When sending an error report, + leave this field empty if the user was not logged in. In + this case the Error Reporting system will use other data, + such as remote IP address, to distinguish affected users. + See ``affected_users_count`` in ``ErrorGroupStats``. + report_location (~.common.SourceLocation): + The location in the source code where the + decision was made to report the error, usually + the place where it was logged. For a logged + exception this would be the source line where + the exception is logged, usually close to the + place where it was caught. + """ + + http_request = proto.Field(proto.MESSAGE, number=1, message="HttpRequestContext",) + + user = proto.Field(proto.STRING, number=2) + + report_location = proto.Field(proto.MESSAGE, number=3, message="SourceLocation",) + + +class HttpRequestContext(proto.Message): + r"""HTTP request data that is related to a reported error. + This data should be provided by the application when reporting + an error, unless the + error report has been generated automatically from Google App + Engine logs. + + Attributes: + method (str): + The type of HTTP request, such as ``GET``, ``POST``, etc. + url (str): + The URL of the request. + user_agent (str): + The user agent information that is provided + with the request. + referrer (str): + The referrer information that is provided + with the request. + response_status_code (int): + The HTTP response status code for the + request. + remote_ip (str): + The IP address from which the request + originated. This can be IPv4, IPv6, or a token + which is derived from the IP address, depending + on the data that has been provided in the error + report. + """ + + method = proto.Field(proto.STRING, number=1) + + url = proto.Field(proto.STRING, number=2) + + user_agent = proto.Field(proto.STRING, number=3) + + referrer = proto.Field(proto.STRING, number=4) + + response_status_code = proto.Field(proto.INT32, number=5) + + remote_ip = proto.Field(proto.STRING, number=6) + + +class SourceLocation(proto.Message): + r"""Indicates a location in the source code of the service for which + errors are reported. ``functionName`` must be provided by the + application when reporting an error, unless the error report + contains a ``message`` with a supported exception stack trace. All + fields are optional for the later case. + + Attributes: + file_path (str): + The source code filename, which can include a + truncated relative path, or a full path from a + production machine. + line_number (int): + 1-based. 0 indicates that the line number is + unknown. + function_name (str): + Human-readable name of a function or method. The value can + include optional context like the class or package name. For + example, ``my.package.MyClass.method`` in case of Java. + """ + + file_path = proto.Field(proto.STRING, number=1) + + line_number = proto.Field(proto.INT32, number=2) + + function_name = proto.Field(proto.STRING, number=4) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py new file mode 100644 index 000000000000..70aa92a8251a --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 proto # type: ignore + + +from google.cloud.errorreporting_v1beta1.types import common + + +__protobuf__ = proto.module( + package="google.devtools.clouderrorreporting.v1beta1", + manifest={"GetGroupRequest", "UpdateGroupRequest",}, +) + + +class GetGroupRequest(proto.Message): + r"""A request to return an individual group. + + Attributes: + group_name (str): + The group resource name. Written as + ``projects/{projectID}/groups/{group_name}``. Call + ```groupStats.list`` `__ + to return a list of groups belonging to this project. + + Example: ``projects/my-project-123/groups/my-group`` + """ + + group_name = proto.Field(proto.STRING, number=1) + + +class UpdateGroupRequest(proto.Message): + r"""A request to replace the existing data for the given group. + + Attributes: + group (~.common.ErrorGroup): + Required. The group which replaces the + resource on the server. + """ + + group = proto.Field(proto.MESSAGE, number=1, message=common.ErrorGroup,) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py new file mode 100644 index 000000000000..51a14e89f6dd --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -0,0 +1,420 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 proto # type: ignore + + +from google.cloud.errorreporting_v1beta1.types import common +from google.protobuf import duration_pb2 as duration # type: ignore +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + + +__protobuf__ = proto.module( + package="google.devtools.clouderrorreporting.v1beta1", + manifest={ + "TimedCountAlignment", + "ErrorGroupOrder", + "ListGroupStatsRequest", + "ListGroupStatsResponse", + "ErrorGroupStats", + "TimedCount", + "ListEventsRequest", + "ListEventsResponse", + "QueryTimeRange", + "ServiceContextFilter", + "DeleteEventsRequest", + "DeleteEventsResponse", + }, +) + + +class TimedCountAlignment(proto.Enum): + r"""Specifies how the time periods of error group counts are + aligned. + """ + ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0 + ALIGNMENT_EQUAL_ROUNDED = 1 + ALIGNMENT_EQUAL_AT_END = 2 + + +class ErrorGroupOrder(proto.Enum): + r"""A sorting order of error groups.""" + GROUP_ORDER_UNSPECIFIED = 0 + COUNT_DESC = 1 + LAST_SEEN_DESC = 2 + CREATED_DESC = 3 + AFFECTED_USERS_DESC = 4 + + +class ListGroupStatsRequest(proto.Message): + r"""Specifies a set of ``ErrorGroupStats`` to return. + + Attributes: + project_name (str): + Required. The resource name of the Google + Cloud Platform project. Written as + projects/ plus the Google + Cloud Platform project ID. + + Example: projects/my-project-123. + group_id (Sequence[str]): + Optional. List all + ErrorGroupStats with these IDs. + service_filter (~.error_stats_service.ServiceContextFilter): + Optional. List only + ErrorGroupStats which belong to a + service context that matches the filter. Data + for all service contexts is returned if this + field is not specified. + time_range (~.error_stats_service.QueryTimeRange): + Optional. List data for the given time range. If not set, a + default time range is used. The field time_range_begin in + the response will specify the beginning of this time range. + Only ErrorGroupStats with a non-zero count in the given time + range are returned, unless the request contains an explicit + group_id list. If a group_id list is given, also + ErrorGroupStats with zero occurrences are returned. + timed_count_duration (~.duration.Duration): + Optional. The preferred duration for a single returned + ``TimedCount``. If not set, no timed counts are returned. + alignment (~.error_stats_service.TimedCountAlignment): + Optional. The alignment of the timed counts to be returned. + Default is ``ALIGNMENT_EQUAL_AT_END``. + alignment_time (~.timestamp.Timestamp): + Optional. Time where the timed counts shall + be aligned if rounded alignment is chosen. + Default is 00:00 UTC. + order (~.error_stats_service.ErrorGroupOrder): + Optional. The sort order in which the results are returned. + Default is ``COUNT_DESC``. + page_size (int): + Optional. The maximum number of results to + return per response. Default is 20. + page_token (str): + Optional. A ``next_page_token`` provided by a previous + response. To view additional results, pass this token along + with the identical query parameters as the first request. + """ + + project_name = proto.Field(proto.STRING, number=1) + + group_id = proto.RepeatedField(proto.STRING, number=2) + + service_filter = proto.Field( + proto.MESSAGE, number=3, message="ServiceContextFilter", + ) + + time_range = proto.Field(proto.MESSAGE, number=5, message="QueryTimeRange",) + + timed_count_duration = proto.Field( + proto.MESSAGE, number=6, message=duration.Duration, + ) + + alignment = proto.Field(proto.ENUM, number=7, enum="TimedCountAlignment",) + + alignment_time = proto.Field(proto.MESSAGE, number=8, message=timestamp.Timestamp,) + + order = proto.Field(proto.ENUM, number=9, enum="ErrorGroupOrder",) + + page_size = proto.Field(proto.INT32, number=11) + + page_token = proto.Field(proto.STRING, number=12) + + +class ListGroupStatsResponse(proto.Message): + r"""Contains a set of requested error group stats. + + Attributes: + error_group_stats (Sequence[~.error_stats_service.ErrorGroupStats]): + The error group stats which match the given + request. + next_page_token (str): + If non-empty, more results are available. + Pass this token, along with the same query + parameters as the first request, to view the + next page of results. + time_range_begin (~.timestamp.Timestamp): + The timestamp specifies the start time to + which the request was restricted. The start time + is set based on the requested time range. It may + be adjusted to a later time if a project has + exceeded the storage quota and older data has + been deleted. + """ + + @property + def raw_page(self): + return self + + error_group_stats = proto.RepeatedField( + proto.MESSAGE, number=1, message="ErrorGroupStats", + ) + + next_page_token = proto.Field(proto.STRING, number=2) + + time_range_begin = proto.Field( + proto.MESSAGE, number=4, message=timestamp.Timestamp, + ) + + +class ErrorGroupStats(proto.Message): + r"""Data extracted for a specific group based on certain filter + criteria, such as a given time period and/or service filter. + + Attributes: + group (~.common.ErrorGroup): + Group data that is independent of the filter + criteria. + count (int): + Approximate total number of events in the + given group that match the filter criteria. + affected_users_count (int): + Approximate number of affected users in the given group that + match the filter criteria. Users are distinguished by data + in the ``ErrorContext`` of the individual error events, such + as their login name or their remote IP address in case of + HTTP requests. The number of affected users can be zero even + if the number of errors is non-zero if no data was provided + from which the affected user could be deduced. Users are + counted based on data in the request context that was + provided in the error report. If more users are implicitly + affected, such as due to a crash of the whole service, this + is not reflected here. + timed_counts (Sequence[~.error_stats_service.TimedCount]): + Approximate number of occurrences over time. + Timed counts returned by ListGroups are + guaranteed to be: + - Inside the requested time interval + - Non-overlapping, and + - Ordered by ascending time. + first_seen_time (~.timestamp.Timestamp): + Approximate first occurrence that was ever seen for this + group and which matches the given filter criteria, ignoring + the time_range that was specified in the request. + last_seen_time (~.timestamp.Timestamp): + Approximate last occurrence that was ever seen for this + group and which matches the given filter criteria, ignoring + the time_range that was specified in the request. + affected_services (Sequence[~.common.ServiceContext]): + Service contexts with a non-zero error count for the given + filter criteria. This list can be truncated if multiple + services are affected. Refer to ``num_affected_services`` + for the total count. + num_affected_services (int): + The total number of services with a non-zero + error count for the given filter criteria. + representative (~.common.ErrorEvent): + An arbitrary event that is chosen as + representative for the whole group. The + representative event is intended to be used as a + quick preview for the whole group. Events in the + group are usually sufficiently similar to each + other such that showing an arbitrary + representative provides insight into the + characteristics of the group as a whole. + """ + + group = proto.Field(proto.MESSAGE, number=1, message=common.ErrorGroup,) + + count = proto.Field(proto.INT64, number=2) + + affected_users_count = proto.Field(proto.INT64, number=3) + + timed_counts = proto.RepeatedField(proto.MESSAGE, number=4, message="TimedCount",) + + first_seen_time = proto.Field(proto.MESSAGE, number=5, message=timestamp.Timestamp,) + + last_seen_time = proto.Field(proto.MESSAGE, number=6, message=timestamp.Timestamp,) + + affected_services = proto.RepeatedField( + proto.MESSAGE, number=7, message=common.ServiceContext, + ) + + num_affected_services = proto.Field(proto.INT32, number=8) + + representative = proto.Field(proto.MESSAGE, number=9, message=common.ErrorEvent,) + + +class TimedCount(proto.Message): + r"""The number of errors in a given time period. + All numbers are approximate since the error events are sampled + before counting them. + + Attributes: + count (int): + Approximate number of occurrences in the + given time period. + start_time (~.timestamp.Timestamp): + Start of the time period to which ``count`` refers + (included). + end_time (~.timestamp.Timestamp): + End of the time period to which ``count`` refers (excluded). + """ + + count = proto.Field(proto.INT64, number=1) + + start_time = proto.Field(proto.MESSAGE, number=2, message=timestamp.Timestamp,) + + end_time = proto.Field(proto.MESSAGE, number=3, message=timestamp.Timestamp,) + + +class ListEventsRequest(proto.Message): + r"""Specifies a set of error events to return. + + Attributes: + project_name (str): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + group_id (str): + Required. The group for which events shall be + returned. + service_filter (~.error_stats_service.ServiceContextFilter): + Optional. List only ErrorGroups which belong + to a service context that matches the filter. + Data for all service contexts is returned if + this field is not specified. + time_range (~.error_stats_service.QueryTimeRange): + Optional. List only data for the given time range. If not + set a default time range is used. The field time_range_begin + in the response will specify the beginning of this time + range. + page_size (int): + Optional. The maximum number of results to + return per response. + page_token (str): + Optional. A ``next_page_token`` provided by a previous + response. + """ + + project_name = proto.Field(proto.STRING, number=1) + + group_id = proto.Field(proto.STRING, number=2) + + service_filter = proto.Field( + proto.MESSAGE, number=3, message="ServiceContextFilter", + ) + + time_range = proto.Field(proto.MESSAGE, number=4, message="QueryTimeRange",) + + page_size = proto.Field(proto.INT32, number=6) + + page_token = proto.Field(proto.STRING, number=7) + + +class ListEventsResponse(proto.Message): + r"""Contains a set of requested error events. + + Attributes: + error_events (Sequence[~.common.ErrorEvent]): + The error events which match the given + request. + next_page_token (str): + If non-empty, more results are available. + Pass this token, along with the same query + parameters as the first request, to view the + next page of results. + time_range_begin (~.timestamp.Timestamp): + The timestamp specifies the start time to + which the request was restricted. + """ + + @property + def raw_page(self): + return self + + error_events = proto.RepeatedField( + proto.MESSAGE, number=1, message=common.ErrorEvent, + ) + + next_page_token = proto.Field(proto.STRING, number=2) + + time_range_begin = proto.Field( + proto.MESSAGE, number=4, message=timestamp.Timestamp, + ) + + +class QueryTimeRange(proto.Message): + r"""Requests might be rejected or the resulting timed count + durations might be adjusted for lower durations. + + Attributes: + period (~.error_stats_service.QueryTimeRange.Period): + Restricts the query to the specified time + range. + """ + + class Period(proto.Enum): + r"""The supported time ranges.""" + PERIOD_UNSPECIFIED = 0 + PERIOD_1_HOUR = 1 + PERIOD_6_HOURS = 2 + PERIOD_1_DAY = 3 + PERIOD_1_WEEK = 4 + PERIOD_30_DAYS = 5 + + period = proto.Field(proto.ENUM, number=1, enum=Period,) + + +class ServiceContextFilter(proto.Message): + r"""Specifies criteria for filtering a subset of service contexts. The + fields in the filter correspond to the fields in ``ServiceContext``. + Only exact, case-sensitive matches are supported. If a field is + unset or empty, it matches arbitrary values. + + Attributes: + service (str): + Optional. The exact value to match against + ```ServiceContext.service`` `__. + version (str): + Optional. The exact value to match against + ```ServiceContext.version`` `__. + resource_type (str): + Optional. The exact value to match against + ```ServiceContext.resource_type`` `__. + """ + + service = proto.Field(proto.STRING, number=2) + + version = proto.Field(proto.STRING, number=3) + + resource_type = proto.Field(proto.STRING, number=4) + + +class DeleteEventsRequest(proto.Message): + r"""Deletes all events in the project. + + Attributes: + project_name (str): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + """ + + project_name = proto.Field(proto.STRING, number=1) + + +class DeleteEventsResponse(proto.Message): + r"""Response message for deleting error events.""" + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py new file mode 100644 index 000000000000..1a66727bdf97 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 proto # type: ignore + + +from google.cloud.errorreporting_v1beta1.types import common +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + + +__protobuf__ = proto.module( + package="google.devtools.clouderrorreporting.v1beta1", + manifest={ + "ReportErrorEventRequest", + "ReportErrorEventResponse", + "ReportedErrorEvent", + }, +) + + +class ReportErrorEventRequest(proto.Message): + r"""A request for reporting an individual error event. + + Attributes: + project_name (str): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/`` plus the `Google Cloud + Platform project + ID `__. + Example: ``projects/my-project-123``. + event (~.report_errors_service.ReportedErrorEvent): + Required. The error event to be reported. + """ + + project_name = proto.Field(proto.STRING, number=1) + + event = proto.Field(proto.MESSAGE, number=2, message="ReportedErrorEvent",) + + +class ReportErrorEventResponse(proto.Message): + r"""Response for reporting an individual error event. + Data may be added to this message in the future. + """ + + +class ReportedErrorEvent(proto.Message): + r"""An error event which is reported to the Error Reporting + system. + + Attributes: + event_time (~.timestamp.Timestamp): + Optional. Time when the event occurred. + If not provided, the time when the event was + received by the Error Reporting system will be + used. + service_context (~.common.ServiceContext): + Required. The service context in which this + error has occurred. + message (str): + Required. The error message. If no + ``context.reportLocation`` is provided, the message must + contain a header (typically consisting of the exception type + name and an error message) and an exception stack trace in + one of the supported programming languages and formats. + Supported languages are Java, Python, JavaScript, Ruby, C#, + PHP, and Go. Supported stack trace formats are: + + - **Java**: Must be the return value of + ```Throwable.printStackTrace()`` `__. + - **Python**: Must be the return value of + ```traceback.format_exc()`` `__. + - **JavaScript**: Must be the value of + ```error.stack`` `__ + as returned by V8. + - **Ruby**: Must contain frames returned by + ```Exception.backtrace`` `__. + - **C#**: Must be the return value of + ```Exception.ToString()`` `__. + - **PHP**: Must start with + ``PHP (Notice|Parse error|Fatal error|Warning)`` and + contain the result of + ```(string)$exception`` `__. + - **Go**: Must be the return value of + ```runtime.Stack()`` `__. + context (~.common.ErrorContext): + Optional. A description of the context in + which the error occurred. + """ + + event_time = proto.Field(proto.MESSAGE, number=1, message=timestamp.Timestamp,) + + service_context = proto.Field( + proto.MESSAGE, number=2, message=common.ServiceContext, + ) + + message = proto.Field(proto.STRING, number=3) + + context = proto.Field(proto.MESSAGE, number=4, message=common.ErrorContext,) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/mypy.ini b/packages/google-cloud-error-reporting/mypy.ini new file mode 100644 index 000000000000..4505b485436b --- /dev/null +++ b/packages/google-cloud-error-reporting/mypy.ini @@ -0,0 +1,3 @@ +[mypy] +python_version = 3.6 +namespace_packages = True diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 1116c841654a..c8fd0a7d7863 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -27,8 +27,8 @@ BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] DEFAULT_PYTHON_VERSION = "3.8" -SYSTEM_TEST_PYTHON_VERSIONS = ["2.7", "3.8"] -UNIT_TEST_PYTHON_VERSIONS = ["2.7", "3.5", "3.6", "3.7", "3.8"] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] +UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8"] @nox.session(python=DEFAULT_PYTHON_VERSION) @@ -70,6 +70,8 @@ def lint_setup_py(session): def default(session): # Install all test dependencies, then install this package in-place. + session.install("asyncmock", "pytest-asyncio") + session.install("mock", "pytest", "pytest-cov") session.install("-e", ".") @@ -140,7 +142,7 @@ def cover(session): test runs (not system test runs), and then erases coverage data. """ session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=98") + session.run("coverage", "report", "--show-missing", "--fail-under=100") session.run("coverage", "erase") diff --git a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py new file mode 100644 index 000000000000..fcb0bab91904 --- /dev/null +++ b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py @@ -0,0 +1,183 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 argparse +import os +import libcst as cst +import pathlib +import sys +from typing import (Any, Callable, Dict, List, Sequence, Tuple) + + +def partition( + predicate: Callable[[Any], bool], + iterator: Sequence[Any] +) -> Tuple[List[Any], List[Any]]: + """A stable, out-of-place partition.""" + results = ([], []) + + for i in iterator: + results[int(predicate(i))].append(i) + + # Returns trueList, falseList + return results[1], results[0] + + +class errorreportingCallTransformer(cst.CSTTransformer): + CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') + METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { + 'delete_events': ('project_name', ), + 'get_group': ('group_name', ), + 'list_events': ('project_name', 'group_id', 'service_filter', 'time_range', 'page_size', 'page_token', ), + 'list_group_stats': ('project_name', 'group_id', 'service_filter', 'time_range', 'timed_count_duration', 'alignment', 'alignment_time', 'order', 'page_size', 'page_token', ), + 'report_error_event': ('project_name', 'event', ), + 'update_group': ('group', ), + + } + + def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: + try: + key = original.func.attr.value + kword_params = self.METHOD_TO_PARAMS[key] + except (AttributeError, KeyError): + # Either not a method from the API or too convoluted to be sure. + return updated + + # If the existing code is valid, keyword args come after positional args. + # Therefore, all positional args must map to the first parameters. + args, kwargs = partition(lambda a: not bool(a.keyword), updated.args) + if any(k.keyword.value == "request" for k in kwargs): + # We've already fixed this file, don't fix it again. + return updated + + kwargs, ctrl_kwargs = partition( + lambda a: not a.keyword.value in self.CTRL_PARAMS, + kwargs + ) + + args, ctrl_args = args[:len(kword_params)], args[len(kword_params):] + ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl)) + for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS)) + + request_arg = cst.Arg( + value=cst.Dict([ + cst.DictElement( + cst.SimpleString("'{}'".format(name)), + cst.Element(value=arg.value) + ) + # Note: the args + kwargs looks silly, but keep in mind that + # the control parameters had to be stripped out, and that + # those could have been passed positionally or by keyword. + for name, arg in zip(kword_params, args + kwargs)]), + keyword=cst.Name("request") + ) + + return updated.with_changes( + args=[request_arg] + ctrl_kwargs + ) + + +def fix_files( + in_dir: pathlib.Path, + out_dir: pathlib.Path, + *, + transformer=errorreportingCallTransformer(), +): + """Duplicate the input dir to the output dir, fixing file method calls. + + Preconditions: + * in_dir is a real directory + * out_dir is a real, empty directory + """ + pyfile_gen = ( + pathlib.Path(os.path.join(root, f)) + for root, _, files in os.walk(in_dir) + for f in files if os.path.splitext(f)[1] == ".py" + ) + + for fpath in pyfile_gen: + with open(fpath, 'r') as f: + src = f.read() + + # Parse the code and insert method call fixes. + tree = cst.parse_module(src) + updated = tree.visit(transformer) + + # Create the path and directory structure for the new file. + updated_path = out_dir.joinpath(fpath.relative_to(in_dir)) + updated_path.parent.mkdir(parents=True, exist_ok=True) + + # Generate the updated source file at the corresponding path. + with open(updated_path, 'w') as f: + f.write(updated.code) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description="""Fix up source that uses the errorreporting client library. + +The existing sources are NOT overwritten but are copied to output_dir with changes made. + +Note: This tool operates at a best-effort level at converting positional + parameters in client method calls to keyword based parameters. + Cases where it WILL FAIL include + A) * or ** expansion in a method call. + B) Calls via function or method alias (includes free function calls) + C) Indirect or dispatched calls (e.g. the method is looked up dynamically) + + These all constitute false negatives. The tool will also detect false + positives when an API method shares a name with another method. +""") + parser.add_argument( + '-d', + '--input-directory', + required=True, + dest='input_dir', + help='the input directory to walk for python files to fix up', + ) + parser.add_argument( + '-o', + '--output-directory', + required=True, + dest='output_dir', + help='the directory to output files fixed via un-flattening', + ) + args = parser.parse_args() + input_dir = pathlib.Path(args.input_dir) + output_dir = pathlib.Path(args.output_dir) + if not input_dir.is_dir(): + print( + f"input directory '{input_dir}' does not exist or is not a directory", + file=sys.stderr, + ) + sys.exit(-1) + + if not output_dir.is_dir(): + print( + f"output directory '{output_dir}' does not exist or is not a directory", + file=sys.stderr, + ) + sys.exit(-1) + + if os.listdir(output_dir): + print( + f"output directory '{output_dir}' is not empty", + file=sys.stderr, + ) + sys.exit(-1) + + fix_files(input_dir, output_dir) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 845cfc367551..a4ac946775ce 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -28,7 +28,12 @@ # 'Development Status :: 4 - Beta' # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" -dependencies = ["google-cloud-logging>=1.14.0, <2.0dev"] +dependencies = [ + "google-cloud-logging>=1.14.0, <2.0dev", + "google-api-core[grpc] >= 1.22.0, < 2.0.0dev", + "proto-plus >= 1.4.0", + "libcst >= 0.2.5", +] extras = {} @@ -43,7 +48,9 @@ # Only include packages under the 'google' namespace. Do not include tests, # benchmarks, etc. packages = [ - package for package in setuptools.find_packages() if package.startswith("google") + package + for package in setuptools.PEP420PackageFinder.find() + if package.startswith("google") ] # Determine which namespaces are needed. @@ -66,12 +73,10 @@ "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", "Operating System :: OS Independent", "Topic :: Internet", ], @@ -80,7 +85,8 @@ namespace_packages=namespaces, install_requires=dependencies, extras_require=extras, - python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", + python_requires=">=3.6", + scripts=["scripts/fixup_errorreporting_v1beta1_keywords.py"], include_package_data=True, zip_safe=False, ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 7f27343fc919..5f054cfd3e68 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,21 +4,21 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "397c0f8fb57b31a2c74f0cfc410a017e6e3ae712" + "sha": "eb586ff9fdbea553c863ba8803c213a5c001f9dc" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "5747555f7620113d9a2078a48f4c047a99d31b3e" + "sha": "cbcd64279572769b4d350bf8078bcd1f151c9684" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "5747555f7620113d9a2078a48f4c047a99d31b3e" + "sha": "cbcd64279572769b4d350bf8078bcd1f151c9684" } } ], diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index 089acd5380de..46a9fe17b575 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -29,101 +29,17 @@ bazel_target="//google/devtools/clouderrorreporting/v1beta1:devtools-clouderrorreporting-v1beta1-py", include_protos=True, ) +s.move(library, excludes=["nox.py", "setup.py", "README.rst", "docs/index.rst", "google/cloud/errorreporting/"]) -s.move(library / "google/cloud/devtools/clouderrorreporting_v1beta1/proto", - "google/cloud/errorreporting_v1beta1/proto") -s.move(library / "google/cloud/errorreporting_v1beta1/proto") -s.move(library / "google/cloud/errorreporting_v1beta1/gapic") -s.move(library / "tests/unit/gapic/v1beta1") -s.move(library / "tests/system/gapic/v1beta1") - -s.replace( - "google/cloud/**/*py", - "google-cloud-devtools-clouderrorreporting", - "google-cloud-error-reporting", -) - -# Fix up imports -s.replace( - "google/**/*.py", - r"from google.cloud.devtools.clouderrorreporting_v1beta1.proto import ", - r"from google.cloud.errorreporting_v1beta1.proto import ", -) - -# Fix up docstrings in GAPIC clients -DISCARD_AUTH_BOILERPLATE = r""" - This endpoint accepts either an OAuth token, or an API key for - authentication. To use an API key, append it to the URL as the value of - a ``key`` parameter. For example: - - \.\. raw:: html -
POST
-            .*
-""" - -targets = [ - "google/cloud/errorreporting_v1beta1/gapic/*_client.py", - "google/cloud/errorreporting_v1beta1/gapic/transports/*_transport.py", -] - -s.replace(targets, DISCARD_AUTH_BOILERPLATE, r"") - -# TODO(busunkim): Remove during microgenerator transition -s.replace( - ["google/cloud/**/*.py", "tests/**/*.py"], - "error_group_path", - "group_path" -) - -# TODO(busunkim) Remove during microgenerator transition -# Keeps the previous param order to avoid breaking existing -# code -n = s.replace( - "google/cloud/**/error_stats_service_client.py", -"""def list_group_stats\( -\s+self, -\s+project_name, -\s+group_id=None, -\s+service_filter=None, -\s+time_range=None, -\s+timed_count_duration=None, -\s+alignment=None, -\s+alignment_time=None, -\s+order=None, -\s+page_size=None, -\s+retry=google\.api_core\.gapic_v1\.method\.DEFAULT, -\s+timeout=google\.api_core\.gapic_v1\.method\.DEFAULT, -\s+metadata=None\):""", -"""def list_group_stats( - self, - project_name, - time_range=None, # DO NOT MOVE, see synth.py - group_id=None, - service_filter=None, - timed_count_duration=None, - alignment=None, - alignment_time=None, - order=None, - page_size=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): -""" -) - -if n != 1: - raise Exception("Required replacement not made.") # ---------------------------------------------------------------------------- # Add templated files # ---------------------------------------------------------------------------- templated_files = common.py_library( - samples=True, - unit_cov_level=97, - cov_level=98, + samples=True, # set to True only if there are samples + microgenerator=True, system_test_dependencies=["test_utils"] ) -s.move(templated_files) +s.move(templated_files, excludes=[".coveragerc"]) # microgenerator has a good .coveragerc file # ---------------------------------------------------------------------------- # Samples templates diff --git a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py index 6b9106bfe5f6..674a6997a257 100644 --- a/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py +++ b/packages/google-cloud-error-reporting/tests/system/gapic/v1beta1/test_system_report_errors_service_v1beta1.py @@ -18,8 +18,6 @@ import time from google.cloud import errorreporting_v1beta1 -from google.cloud.errorreporting_v1beta1.proto import common_pb2 -from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 class TestSystemReportErrorsService(object): @@ -27,7 +25,7 @@ def test_report_error_event(self): project_id = os.environ["PROJECT_ID"] client = errorreporting_v1beta1.ReportErrorsServiceClient() - project_name = client.project_path(project_id) + project_name = f"projects/{project_id}" message = "[MESSAGE]" service = "[SERVICE]" service_context = {"service": service} @@ -45,4 +43,6 @@ def test_report_error_event(self): "service_context": service_context, "context": context, } - response = client.report_error_event(project_name, event) + response = client.report_error_event( + request={"project_name": project_name, "event": event} + ) diff --git a/packages/google-cloud-error-reporting/tests/system/test_system.py b/packages/google-cloud-error-reporting/tests/system/test_system.py index cf454aecdbd1..77c0064602dd 100644 --- a/packages/google-cloud-error-reporting/tests/system/test_system.py +++ b/packages/google-cloud-error-reporting/tests/system/test_system.py @@ -17,8 +17,7 @@ import unittest from google.cloud import error_reporting -from google.cloud.errorreporting_v1beta1.gapic import error_stats_service_client -from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 +import google.cloud.errorreporting_v1beta1 from google.protobuf.duration_pb2 import Duration from test_utils.retry import RetryResult @@ -53,20 +52,26 @@ def _list_groups(client): :param client: The client containing a project and credentials. :rtype: :class:`~google.gax.ResourceIterator` - :returns: Iterable of :class:`~.error_stats_service_pb2.ErrorGroupStats`. + :returns: Iterable of :class:`~.google.cloud.errorreporting_v1beta1.ErrorGroupStats`. """ - gax_api = error_stats_service_client.ErrorStatsServiceClient( + gax_api = google.cloud.errorreporting_v1beta1.ErrorStatsServiceClient( credentials=client._credentials ) - project_name = gax_api.project_path(client.project) + project_name = f"projects/{client.project}" - time_range = error_stats_service_pb2.QueryTimeRange() - time_range.period = error_stats_service_pb2.QueryTimeRange.PERIOD_1_HOUR + time_range = google.cloud.errorreporting_v1beta1.QueryTimeRange() + time_range.period = ( + google.cloud.errorreporting_v1beta1.QueryTimeRange.Period.PERIOD_1_HOUR + ) duration = Duration(seconds=60 * 60) return gax_api.list_group_stats( - project_name, time_range, timed_count_duration=duration + request={ + "project_name": project_name, + "time_range": time_range, + "timed_count_duration": duration, + } ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py @@ -0,0 +1 @@ + diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py new file mode 100644 index 000000000000..cf93f906e718 --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -0,0 +1,1139 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 os +import mock + +import grpc +from grpc.experimental import aio +import math +import pytest +from proto.marshal.rules.dates import DurationRule, TimestampRule + +from google import auth +from google.api_core import client_options +from google.api_core import exceptions +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers +from google.api_core import grpc_helpers_async +from google.auth import credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.errorreporting_v1beta1.services.error_group_service import ( + ErrorGroupServiceAsyncClient, +) +from google.cloud.errorreporting_v1beta1.services.error_group_service import ( + ErrorGroupServiceClient, +) +from google.cloud.errorreporting_v1beta1.services.error_group_service import transports +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service +from google.oauth2 import service_account + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# 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 + ) + + +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 ErrorGroupServiceClient._get_default_mtls_endpoint(None) is None + assert ( + ErrorGroupServiceClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + ErrorGroupServiceClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + ErrorGroupServiceClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + ErrorGroupServiceClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + ErrorGroupServiceClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient] +) +def test_error_group_service_client_from_service_account_file(client_class): + creds = 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") + assert client._transport._credentials == creds + + client = client_class.from_service_account_json("dummy/file/path.json") + assert client._transport._credentials == creds + + assert client._transport._host == "clouderrorreporting.googleapis.com:443" + + +def test_error_group_service_client_get_transport_class(): + transport = ErrorGroupServiceClient.get_transport_class() + assert transport == transports.ErrorGroupServiceGrpcTransport + + transport = ErrorGroupServiceClient.get_transport_class("grpc") + assert transport == transports.ErrorGroupServiceGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (ErrorGroupServiceClient, transports.ErrorGroupServiceGrpcTransport, "grpc"), + ( + ErrorGroupServiceAsyncClient, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + ErrorGroupServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorGroupServiceClient), +) +@mock.patch.object( + ErrorGroupServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorGroupServiceAsyncClient), +) +def test_error_group_service_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(ErrorGroupServiceClient, "get_transport_class") as gtc: + transport = transport_class(credentials=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(ErrorGroupServiceClient, "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(client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + api_mtls_endpoint="squid.clam.whelk", + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", and client_cert_source is provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=client_cert_source_callback, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", and default_client_cert_source is provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", but client_cert_source and default_client_cert_source are None. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + 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() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class() + + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (ErrorGroupServiceClient, transports.ErrorGroupServiceGrpcTransport, "grpc"), + ( + ErrorGroupServiceAsyncClient, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_error_group_service_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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (ErrorGroupServiceClient, transports.ErrorGroupServiceGrpcTransport, "grpc"), + ( + ErrorGroupServiceAsyncClient, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_error_group_service_client_client_options_credentials_file( + client_class, transport_class, transport_name +): + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +def test_error_group_service_client_client_options_from_dict(): + with mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_group_service.transports.ErrorGroupServiceGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = ErrorGroupServiceClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + api_mtls_endpoint="squid.clam.whelk", + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +def test_get_group( + transport: str = "grpc", request_type=error_group_service.GetGroupRequest +): + client = ErrorGroupServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_group), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = common.ErrorGroup( + name="name_value", group_id="group_id_value", + ) + + response = client.get_group(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0] == error_group_service.GetGroupRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) + + assert response.name == "name_value" + + assert response.group_id == "group_id_value" + + +def test_get_group_from_dict(): + test_get_group(request_type=dict) + + +@pytest.mark.asyncio +async def test_get_group_async(transport: str = "grpc_asyncio"): + client = ErrorGroupServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = error_group_service.GetGroupRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_group), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + common.ErrorGroup(name="name_value", group_id="group_id_value",) + ) + + response = await client.get_group(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) + + assert response.name == "name_value" + + assert response.group_id == "group_id_value" + + +def test_get_group_field_headers(): + client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_group_service.GetGroupRequest() + request.group_name = "group_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_group), "__call__") as call: + call.return_value = common.ErrorGroup() + + client.get_group(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "group_name=group_name/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_group_field_headers_async(): + client = ErrorGroupServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_group_service.GetGroupRequest() + request.group_name = "group_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_group), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) + + await client.get_group(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "group_name=group_name/value",) in kw["metadata"] + + +def test_get_group_flattened(): + client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_group), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = common.ErrorGroup() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_group(group_name="group_name_value",) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0].group_name == "group_name_value" + + +def test_get_group_flattened_error(): + client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_group( + error_group_service.GetGroupRequest(), group_name="group_name_value", + ) + + +@pytest.mark.asyncio +async def test_get_group_flattened_async(): + client = ErrorGroupServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_group), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = common.ErrorGroup() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_group(group_name="group_name_value",) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0].group_name == "group_name_value" + + +@pytest.mark.asyncio +async def test_get_group_flattened_error_async(): + client = ErrorGroupServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_group( + error_group_service.GetGroupRequest(), group_name="group_name_value", + ) + + +def test_update_group( + transport: str = "grpc", request_type=error_group_service.UpdateGroupRequest +): + client = ErrorGroupServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.update_group), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = common.ErrorGroup( + name="name_value", group_id="group_id_value", + ) + + response = client.update_group(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0] == error_group_service.UpdateGroupRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) + + assert response.name == "name_value" + + assert response.group_id == "group_id_value" + + +def test_update_group_from_dict(): + test_update_group(request_type=dict) + + +@pytest.mark.asyncio +async def test_update_group_async(transport: str = "grpc_asyncio"): + client = ErrorGroupServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = error_group_service.UpdateGroupRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.update_group), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + common.ErrorGroup(name="name_value", group_id="group_id_value",) + ) + + response = await client.update_group(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) + + assert response.name == "name_value" + + assert response.group_id == "group_id_value" + + +def test_update_group_field_headers(): + client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_group_service.UpdateGroupRequest() + request.group.name = "group.name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.update_group), "__call__") as call: + call.return_value = common.ErrorGroup() + + client.update_group(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "group.name=group.name/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_group_field_headers_async(): + client = ErrorGroupServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_group_service.UpdateGroupRequest() + request.group.name = "group.name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.update_group), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) + + await client.update_group(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "group.name=group.name/value",) in kw["metadata"] + + +def test_update_group_flattened(): + client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.update_group), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = common.ErrorGroup() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_group(group=common.ErrorGroup(name="name_value"),) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0].group == common.ErrorGroup(name="name_value") + + +def test_update_group_flattened_error(): + client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_group( + error_group_service.UpdateGroupRequest(), + group=common.ErrorGroup(name="name_value"), + ) + + +@pytest.mark.asyncio +async def test_update_group_flattened_async(): + client = ErrorGroupServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.update_group), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = common.ErrorGroup() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_group( + group=common.ErrorGroup(name="name_value"), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0].group == common.ErrorGroup(name="name_value") + + +@pytest.mark.asyncio +async def test_update_group_flattened_error_async(): + client = ErrorGroupServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_group( + error_group_service.UpdateGroupRequest(), + group=common.ErrorGroup(name="name_value"), + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorGroupServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorGroupServiceClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorGroupServiceClient( + client_options={"scopes": ["1", "2"]}, transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + client = ErrorGroupServiceClient(transport=transport) + assert client._transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + assert isinstance(client._transport, transports.ErrorGroupServiceGrpcTransport,) + + +def test_error_group_service_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(exceptions.DuplicateCredentialArgs): + transport = transports.ErrorGroupServiceTransport( + credentials=credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_error_group_service_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_group_service.transports.ErrorGroupServiceTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.ErrorGroupServiceTransport( + credentials=credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "get_group", + "update_group", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + +def test_error_group_service_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + auth, "load_credentials_from_file" + ) as load_creds, mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_group_service.transports.ErrorGroupServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (credentials.AnonymousCredentials(), None) + transport = transports.ErrorGroupServiceTransport( + credentials_file="credentials.json", quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_error_group_service_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + ErrorGroupServiceClient() + adc.assert_called_once_with( + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +def test_error_group_service_transport_auth_adc(): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + transports.ErrorGroupServiceGrpcTransport( + host="squid.clam.whelk", quota_project_id="octopus" + ) + adc.assert_called_once_with( + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_error_group_service_host_no_port(): + client = ErrorGroupServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="clouderrorreporting.googleapis.com" + ), + ) + assert client._transport._host == "clouderrorreporting.googleapis.com:443" + + +def test_error_group_service_host_with_port(): + client = ErrorGroupServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="clouderrorreporting.googleapis.com:8000" + ), + ) + assert client._transport._host == "clouderrorreporting.googleapis.com:8000" + + +def test_error_group_service_grpc_transport_channel(): + channel = grpc.insecure_channel("http://localhost/") + + # Check that if channel is provided, mtls endpoint and client_cert_source + # won't be used. + callback = mock.MagicMock() + transport = transports.ErrorGroupServiceGrpcTransport( + host="squid.clam.whelk", + channel=channel, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=callback, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert not callback.called + + +def test_error_group_service_grpc_asyncio_transport_channel(): + channel = aio.insecure_channel("http://localhost/") + + # Check that if channel is provided, mtls endpoint and client_cert_source + # won't be used. + callback = mock.MagicMock() + transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=callback, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert not callback.called + + +@mock.patch("grpc.ssl_channel_credentials", autospec=True) +@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) +def test_error_group_service_grpc_transport_channel_mtls_with_client_cert_source( + grpc_create_channel, grpc_ssl_channel_cred +): + # Check that if channel is None, but api_mtls_endpoint and client_cert_source + # are provided, then a mTLS channel will be created. + mock_cred = mock.Mock() + + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + transport = transports.ErrorGroupServiceGrpcTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@mock.patch("grpc.ssl_channel_credentials", autospec=True) +@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) +def test_error_group_service_grpc_asyncio_transport_channel_mtls_with_client_cert_source( + grpc_create_channel, grpc_ssl_channel_cred +): + # Check that if channel is None, but api_mtls_endpoint and client_cert_source + # are provided, then a mTLS channel will be created. + mock_cred = mock.Mock() + + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@pytest.mark.parametrize( + "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] +) +@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) +def test_error_group_service_grpc_transport_channel_mtls_with_adc( + grpc_create_channel, api_mtls_endpoint +): + # Check that if channel and client_cert_source are None, but api_mtls_endpoint + # is provided, then a mTLS channel will be created with SSL ADC. + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + # Mock google.auth.transport.grpc.SslCredentials class. + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + mock_cred = mock.Mock() + transport = transports.ErrorGroupServiceGrpcTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint=api_mtls_endpoint, + client_cert_source=None, + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@pytest.mark.parametrize( + "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] +) +@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) +def test_error_group_service_grpc_asyncio_transport_channel_mtls_with_adc( + grpc_create_channel, api_mtls_endpoint +): + # Check that if channel and client_cert_source are None, but api_mtls_endpoint + # is provided, then a mTLS channel will be created with SSL ADC. + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + # Mock google.auth.transport.grpc.SslCredentials class. + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + mock_cred = mock.Mock() + transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint=api_mtls_endpoint, + client_cert_source=None, + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_error_group_path(): + project = "squid" + group = "clam" + + expected = "projects/{project}/groups/{group}".format(project=project, group=group,) + actual = ErrorGroupServiceClient.error_group_path(project, group) + assert expected == actual + + +def test_parse_error_group_path(): + expected = { + "project": "whelk", + "group": "octopus", + } + path = ErrorGroupServiceClient.error_group_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorGroupServiceClient.parse_error_group_path(path) + assert expected == actual + + +def test_client_withDEFAULT_CLIENT_INFO(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.ErrorGroupServiceTransport, "_prep_wrapped_messages" + ) as prep: + client = ErrorGroupServiceClient( + credentials=credentials.AnonymousCredentials(), client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.ErrorGroupServiceTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = ErrorGroupServiceClient.get_transport_class() + transport = transport_class( + credentials=credentials.AnonymousCredentials(), client_info=client_info, + ) + prep.assert_called_once_with(client_info) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py new file mode 100644 index 000000000000..d0f5fcf1e124 --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -0,0 +1,1693 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 os +import mock + +import grpc +from grpc.experimental import aio +import math +import pytest +from proto.marshal.rules.dates import DurationRule, TimestampRule + +from google import auth +from google.api_core import client_options +from google.api_core import exceptions +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers +from google.api_core import grpc_helpers_async +from google.auth import credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.errorreporting_v1beta1.services.error_stats_service import ( + ErrorStatsServiceAsyncClient, +) +from google.cloud.errorreporting_v1beta1.services.error_stats_service import ( + ErrorStatsServiceClient, +) +from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers +from google.cloud.errorreporting_v1beta1.services.error_stats_service import transports +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_stats_service +from google.oauth2 import service_account +from google.protobuf import duration_pb2 as duration # type: ignore +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# 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 + ) + + +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 ErrorStatsServiceClient._get_default_mtls_endpoint(None) is None + assert ( + ErrorStatsServiceClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + ErrorStatsServiceClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + ErrorStatsServiceClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + ErrorStatsServiceClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + ErrorStatsServiceClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient] +) +def test_error_stats_service_client_from_service_account_file(client_class): + creds = 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") + assert client._transport._credentials == creds + + client = client_class.from_service_account_json("dummy/file/path.json") + assert client._transport._credentials == creds + + assert client._transport._host == "clouderrorreporting.googleapis.com:443" + + +def test_error_stats_service_client_get_transport_class(): + transport = ErrorStatsServiceClient.get_transport_class() + assert transport == transports.ErrorStatsServiceGrpcTransport + + transport = ErrorStatsServiceClient.get_transport_class("grpc") + assert transport == transports.ErrorStatsServiceGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (ErrorStatsServiceClient, transports.ErrorStatsServiceGrpcTransport, "grpc"), + ( + ErrorStatsServiceAsyncClient, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + ErrorStatsServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorStatsServiceClient), +) +@mock.patch.object( + ErrorStatsServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorStatsServiceAsyncClient), +) +def test_error_stats_service_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(ErrorStatsServiceClient, "get_transport_class") as gtc: + transport = transport_class(credentials=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(ErrorStatsServiceClient, "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(client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + api_mtls_endpoint="squid.clam.whelk", + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", and client_cert_source is provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=client_cert_source_callback, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", and default_client_cert_source is provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", but client_cert_source and default_client_cert_source are None. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + 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() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class() + + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (ErrorStatsServiceClient, transports.ErrorStatsServiceGrpcTransport, "grpc"), + ( + ErrorStatsServiceAsyncClient, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_error_stats_service_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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (ErrorStatsServiceClient, transports.ErrorStatsServiceGrpcTransport, "grpc"), + ( + ErrorStatsServiceAsyncClient, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_error_stats_service_client_client_options_credentials_file( + client_class, transport_class, transport_name +): + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +def test_error_stats_service_client_client_options_from_dict(): + with mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.ErrorStatsServiceGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = ErrorStatsServiceClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + api_mtls_endpoint="squid.clam.whelk", + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +def test_list_group_stats( + transport: str = "grpc", request_type=error_stats_service.ListGroupStatsRequest +): + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.list_group_stats), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.ListGroupStatsResponse( + next_page_token="next_page_token_value", + ) + + response = client.list_group_stats(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0] == error_stats_service.ListGroupStatsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListGroupStatsPager) + + assert response.next_page_token == "next_page_token_value" + + +def test_list_group_stats_from_dict(): + test_list_group_stats(request_type=dict) + + +@pytest.mark.asyncio +async def test_list_group_stats_async(transport: str = "grpc_asyncio"): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = error_stats_service.ListGroupStatsRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_group_stats), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListGroupStatsResponse( + next_page_token="next_page_token_value", + ) + ) + + response = await client.list_group_stats(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListGroupStatsAsyncPager) + + assert response.next_page_token == "next_page_token_value" + + +def test_list_group_stats_field_headers(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_stats_service.ListGroupStatsRequest() + request.project_name = "project_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.list_group_stats), "__call__" + ) as call: + call.return_value = error_stats_service.ListGroupStatsResponse() + + client.list_group_stats(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ + "metadata" + ] + + +@pytest.mark.asyncio +async def test_list_group_stats_field_headers_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_stats_service.ListGroupStatsRequest() + request.project_name = "project_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_group_stats), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListGroupStatsResponse() + ) + + await client.list_group_stats(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ + "metadata" + ] + + +def test_list_group_stats_flattened(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.list_group_stats), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.ListGroupStatsResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_group_stats( + project_name="project_name_value", + time_range=error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0].project_name == "project_name_value" + + assert args[0].time_range == error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ) + + +def test_list_group_stats_flattened_error(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_group_stats( + error_stats_service.ListGroupStatsRequest(), + project_name="project_name_value", + time_range=error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ), + ) + + +@pytest.mark.asyncio +async def test_list_group_stats_flattened_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_group_stats), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.ListGroupStatsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListGroupStatsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_group_stats( + project_name="project_name_value", + time_range=error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0].project_name == "project_name_value" + + assert args[0].time_range == error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ) + + +@pytest.mark.asyncio +async def test_list_group_stats_flattened_error_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_group_stats( + error_stats_service.ListGroupStatsRequest(), + project_name="project_name_value", + time_range=error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ), + ) + + +def test_list_group_stats_pager(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.list_group_stats), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + next_page_token="abc", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[], next_page_token="def", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[error_stats_service.ErrorGroupStats(),], + next_page_token="ghi", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("project_name", ""),)), + ) + pager = client.list_group_stats(request={}) + + assert pager._metadata == metadata + + results = [i for i in pager] + assert len(results) == 6 + assert all(isinstance(i, error_stats_service.ErrorGroupStats) for i in results) + + +def test_list_group_stats_pages(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.list_group_stats), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + next_page_token="abc", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[], next_page_token="def", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[error_stats_service.ErrorGroupStats(),], + next_page_token="ghi", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + ), + RuntimeError, + ) + pages = list(client.list_group_stats(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_group_stats_async_pager(): + client = ErrorStatsServiceAsyncClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_group_stats), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + next_page_token="abc", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[], next_page_token="def", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[error_stats_service.ErrorGroupStats(),], + next_page_token="ghi", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_group_stats(request={},) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: + responses.append(response) + + assert len(responses) == 6 + assert all( + isinstance(i, error_stats_service.ErrorGroupStats) for i in responses + ) + + +@pytest.mark.asyncio +async def test_list_group_stats_async_pages(): + client = ErrorStatsServiceAsyncClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_group_stats), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + next_page_token="abc", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[], next_page_token="def", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[error_stats_service.ErrorGroupStats(),], + next_page_token="ghi", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_group_stats(request={})).pages: + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +def test_list_events( + transport: str = "grpc", request_type=error_stats_service.ListEventsRequest +): + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_events), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.ListEventsResponse( + next_page_token="next_page_token_value", + ) + + response = client.list_events(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0] == error_stats_service.ListEventsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListEventsPager) + + assert response.next_page_token == "next_page_token_value" + + +def test_list_events_from_dict(): + test_list_events(request_type=dict) + + +@pytest.mark.asyncio +async def test_list_events_async(transport: str = "grpc_asyncio"): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = error_stats_service.ListEventsRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_events), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListEventsResponse( + next_page_token="next_page_token_value", + ) + ) + + response = await client.list_events(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListEventsAsyncPager) + + assert response.next_page_token == "next_page_token_value" + + +def test_list_events_field_headers(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_stats_service.ListEventsRequest() + request.project_name = "project_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_events), "__call__") as call: + call.return_value = error_stats_service.ListEventsResponse() + + client.list_events(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ + "metadata" + ] + + +@pytest.mark.asyncio +async def test_list_events_field_headers_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_stats_service.ListEventsRequest() + request.project_name = "project_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_events), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListEventsResponse() + ) + + await client.list_events(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ + "metadata" + ] + + +def test_list_events_flattened(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_events), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.ListEventsResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_events( + project_name="project_name_value", group_id="group_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0].project_name == "project_name_value" + + assert args[0].group_id == "group_id_value" + + +def test_list_events_flattened_error(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_events( + error_stats_service.ListEventsRequest(), + project_name="project_name_value", + group_id="group_id_value", + ) + + +@pytest.mark.asyncio +async def test_list_events_flattened_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_events), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.ListEventsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListEventsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_events( + project_name="project_name_value", group_id="group_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0].project_name == "project_name_value" + + assert args[0].group_id == "group_id_value" + + +@pytest.mark.asyncio +async def test_list_events_flattened_error_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_events( + error_stats_service.ListEventsRequest(), + project_name="project_name_value", + group_id="group_id_value", + ) + + +def test_list_events_pager(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_events), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + error_stats_service.ListEventsResponse( + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + common.ErrorEvent(), + ], + next_page_token="abc", + ), + error_stats_service.ListEventsResponse( + error_events=[], next_page_token="def", + ), + error_stats_service.ListEventsResponse( + error_events=[common.ErrorEvent(),], next_page_token="ghi", + ), + error_stats_service.ListEventsResponse( + error_events=[common.ErrorEvent(), common.ErrorEvent(),], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("project_name", ""),)), + ) + pager = client.list_events(request={}) + + assert pager._metadata == metadata + + results = [i for i in pager] + assert len(results) == 6 + assert all(isinstance(i, common.ErrorEvent) for i in results) + + +def test_list_events_pages(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_events), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + error_stats_service.ListEventsResponse( + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + common.ErrorEvent(), + ], + next_page_token="abc", + ), + error_stats_service.ListEventsResponse( + error_events=[], next_page_token="def", + ), + error_stats_service.ListEventsResponse( + error_events=[common.ErrorEvent(),], next_page_token="ghi", + ), + error_stats_service.ListEventsResponse( + error_events=[common.ErrorEvent(), common.ErrorEvent(),], + ), + RuntimeError, + ) + pages = list(client.list_events(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_events_async_pager(): + client = ErrorStatsServiceAsyncClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_events), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + error_stats_service.ListEventsResponse( + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + common.ErrorEvent(), + ], + next_page_token="abc", + ), + error_stats_service.ListEventsResponse( + error_events=[], next_page_token="def", + ), + error_stats_service.ListEventsResponse( + error_events=[common.ErrorEvent(),], next_page_token="ghi", + ), + error_stats_service.ListEventsResponse( + error_events=[common.ErrorEvent(), common.ErrorEvent(),], + ), + RuntimeError, + ) + async_pager = await client.list_events(request={},) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, common.ErrorEvent) for i in responses) + + +@pytest.mark.asyncio +async def test_list_events_async_pages(): + client = ErrorStatsServiceAsyncClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_events), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + error_stats_service.ListEventsResponse( + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + common.ErrorEvent(), + ], + next_page_token="abc", + ), + error_stats_service.ListEventsResponse( + error_events=[], next_page_token="def", + ), + error_stats_service.ListEventsResponse( + error_events=[common.ErrorEvent(),], next_page_token="ghi", + ), + error_stats_service.ListEventsResponse( + error_events=[common.ErrorEvent(), common.ErrorEvent(),], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_events(request={})).pages: + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +def test_delete_events( + transport: str = "grpc", request_type=error_stats_service.DeleteEventsRequest +): + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_events), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.DeleteEventsResponse() + + response = client.delete_events(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0] == error_stats_service.DeleteEventsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, error_stats_service.DeleteEventsResponse) + + +def test_delete_events_from_dict(): + test_delete_events(request_type=dict) + + +@pytest.mark.asyncio +async def test_delete_events_async(transport: str = "grpc_asyncio"): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = error_stats_service.DeleteEventsRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_events), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.DeleteEventsResponse() + ) + + response = await client.delete_events(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, error_stats_service.DeleteEventsResponse) + + +def test_delete_events_field_headers(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_stats_service.DeleteEventsRequest() + request.project_name = "project_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_events), "__call__") as call: + call.return_value = error_stats_service.DeleteEventsResponse() + + client.delete_events(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ + "metadata" + ] + + +@pytest.mark.asyncio +async def test_delete_events_field_headers_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = error_stats_service.DeleteEventsRequest() + request.project_name = "project_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_events), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.DeleteEventsResponse() + ) + + await client.delete_events(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ + "metadata" + ] + + +def test_delete_events_flattened(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_events), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.DeleteEventsResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_events(project_name="project_name_value",) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0].project_name == "project_name_value" + + +def test_delete_events_flattened_error(): + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_events( + error_stats_service.DeleteEventsRequest(), + project_name="project_name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_events_flattened_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_events), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = error_stats_service.DeleteEventsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.DeleteEventsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_events(project_name="project_name_value",) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0].project_name == "project_name_value" + + +@pytest.mark.asyncio +async def test_delete_events_flattened_error_async(): + client = ErrorStatsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_events( + error_stats_service.DeleteEventsRequest(), + project_name="project_name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorStatsServiceClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorStatsServiceClient( + client_options={"scopes": ["1", "2"]}, transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + client = ErrorStatsServiceClient(transport=transport) + assert client._transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + assert isinstance(client._transport, transports.ErrorStatsServiceGrpcTransport,) + + +def test_error_stats_service_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(exceptions.DuplicateCredentialArgs): + transport = transports.ErrorStatsServiceTransport( + credentials=credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_error_stats_service_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.ErrorStatsServiceTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.ErrorStatsServiceTransport( + credentials=credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "list_group_stats", + "list_events", + "delete_events", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + +def test_error_stats_service_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + auth, "load_credentials_from_file" + ) as load_creds, mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.ErrorStatsServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (credentials.AnonymousCredentials(), None) + transport = transports.ErrorStatsServiceTransport( + credentials_file="credentials.json", quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_error_stats_service_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + ErrorStatsServiceClient() + adc.assert_called_once_with( + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +def test_error_stats_service_transport_auth_adc(): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + transports.ErrorStatsServiceGrpcTransport( + host="squid.clam.whelk", quota_project_id="octopus" + ) + adc.assert_called_once_with( + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_error_stats_service_host_no_port(): + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="clouderrorreporting.googleapis.com" + ), + ) + assert client._transport._host == "clouderrorreporting.googleapis.com:443" + + +def test_error_stats_service_host_with_port(): + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="clouderrorreporting.googleapis.com:8000" + ), + ) + assert client._transport._host == "clouderrorreporting.googleapis.com:8000" + + +def test_error_stats_service_grpc_transport_channel(): + channel = grpc.insecure_channel("http://localhost/") + + # Check that if channel is provided, mtls endpoint and client_cert_source + # won't be used. + callback = mock.MagicMock() + transport = transports.ErrorStatsServiceGrpcTransport( + host="squid.clam.whelk", + channel=channel, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=callback, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert not callback.called + + +def test_error_stats_service_grpc_asyncio_transport_channel(): + channel = aio.insecure_channel("http://localhost/") + + # Check that if channel is provided, mtls endpoint and client_cert_source + # won't be used. + callback = mock.MagicMock() + transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=callback, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert not callback.called + + +@mock.patch("grpc.ssl_channel_credentials", autospec=True) +@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) +def test_error_stats_service_grpc_transport_channel_mtls_with_client_cert_source( + grpc_create_channel, grpc_ssl_channel_cred +): + # Check that if channel is None, but api_mtls_endpoint and client_cert_source + # are provided, then a mTLS channel will be created. + mock_cred = mock.Mock() + + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + transport = transports.ErrorStatsServiceGrpcTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@mock.patch("grpc.ssl_channel_credentials", autospec=True) +@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) +def test_error_stats_service_grpc_asyncio_transport_channel_mtls_with_client_cert_source( + grpc_create_channel, grpc_ssl_channel_cred +): + # Check that if channel is None, but api_mtls_endpoint and client_cert_source + # are provided, then a mTLS channel will be created. + mock_cred = mock.Mock() + + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@pytest.mark.parametrize( + "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] +) +@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) +def test_error_stats_service_grpc_transport_channel_mtls_with_adc( + grpc_create_channel, api_mtls_endpoint +): + # Check that if channel and client_cert_source are None, but api_mtls_endpoint + # is provided, then a mTLS channel will be created with SSL ADC. + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + # Mock google.auth.transport.grpc.SslCredentials class. + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + mock_cred = mock.Mock() + transport = transports.ErrorStatsServiceGrpcTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint=api_mtls_endpoint, + client_cert_source=None, + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@pytest.mark.parametrize( + "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] +) +@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) +def test_error_stats_service_grpc_asyncio_transport_channel_mtls_with_adc( + grpc_create_channel, api_mtls_endpoint +): + # Check that if channel and client_cert_source are None, but api_mtls_endpoint + # is provided, then a mTLS channel will be created with SSL ADC. + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + # Mock google.auth.transport.grpc.SslCredentials class. + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + mock_cred = mock.Mock() + transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint=api_mtls_endpoint, + client_cert_source=None, + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_client_withDEFAULT_CLIENT_INFO(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.ErrorStatsServiceTransport, "_prep_wrapped_messages" + ) as prep: + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.ErrorStatsServiceTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = ErrorStatsServiceClient.get_transport_class() + transport = transport_class( + credentials=credentials.AnonymousCredentials(), client_info=client_info, + ) + prep.assert_called_once_with(client_info) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py new file mode 100644 index 000000000000..c3778272f933 --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -0,0 +1,959 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 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 os +import mock + +import grpc +from grpc.experimental import aio +import math +import pytest +from proto.marshal.rules.dates import DurationRule, TimestampRule + +from google import auth +from google.api_core import client_options +from google.api_core import exceptions +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers +from google.api_core import grpc_helpers_async +from google.auth import credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( + ReportErrorsServiceAsyncClient, +) +from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( + ReportErrorsServiceClient, +) +from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( + transports, +) +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import report_errors_service +from google.oauth2 import service_account +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# 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 + ) + + +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 ReportErrorsServiceClient._get_default_mtls_endpoint(None) is None + assert ( + ReportErrorsServiceClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + ReportErrorsServiceClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + ReportErrorsServiceClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + ReportErrorsServiceClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + ReportErrorsServiceClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient] +) +def test_report_errors_service_client_from_service_account_file(client_class): + creds = 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") + assert client._transport._credentials == creds + + client = client_class.from_service_account_json("dummy/file/path.json") + assert client._transport._credentials == creds + + assert client._transport._host == "clouderrorreporting.googleapis.com:443" + + +def test_report_errors_service_client_get_transport_class(): + transport = ReportErrorsServiceClient.get_transport_class() + assert transport == transports.ReportErrorsServiceGrpcTransport + + transport = ReportErrorsServiceClient.get_transport_class("grpc") + assert transport == transports.ReportErrorsServiceGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceGrpcTransport, + "grpc", + ), + ( + ReportErrorsServiceAsyncClient, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + ReportErrorsServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ReportErrorsServiceClient), +) +@mock.patch.object( + ReportErrorsServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ReportErrorsServiceAsyncClient), +) +def test_report_errors_service_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(ReportErrorsServiceClient, "get_transport_class") as gtc: + transport = transport_class(credentials=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(ReportErrorsServiceClient, "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(client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + api_mtls_endpoint="squid.clam.whelk", + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", and client_cert_source is provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=client_cert_source_callback, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", and default_client_cert_source is provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is + # "auto", but client_cert_source and default_client_cert_source are None. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + 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() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class() + + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceGrpcTransport, + "grpc", + ), + ( + ReportErrorsServiceAsyncClient, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_report_errors_service_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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceGrpcTransport, + "grpc", + ), + ( + ReportErrorsServiceAsyncClient, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_report_errors_service_client_client_options_credentials_file( + client_class, transport_class, transport_name +): + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + api_mtls_endpoint=client.DEFAULT_ENDPOINT, + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +def test_report_errors_service_client_client_options_from_dict(): + with mock.patch( + "google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.ReportErrorsServiceGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = ReportErrorsServiceClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + api_mtls_endpoint="squid.clam.whelk", + client_cert_source=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +def test_report_error_event( + transport: str = "grpc", request_type=report_errors_service.ReportErrorEventRequest +): + client = ReportErrorsServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.report_error_event), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = report_errors_service.ReportErrorEventResponse() + + response = client.report_error_event(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0] == report_errors_service.ReportErrorEventRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, report_errors_service.ReportErrorEventResponse) + + +def test_report_error_event_from_dict(): + test_report_error_event(request_type=dict) + + +@pytest.mark.asyncio +async def test_report_error_event_async(transport: str = "grpc_asyncio"): + client = ReportErrorsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = report_errors_service.ReportErrorEventRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.report_error_event), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + report_errors_service.ReportErrorEventResponse() + ) + + response = await client.report_error_event(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, report_errors_service.ReportErrorEventResponse) + + +def test_report_error_event_field_headers(): + client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = report_errors_service.ReportErrorEventRequest() + request.project_name = "project_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.report_error_event), "__call__" + ) as call: + call.return_value = report_errors_service.ReportErrorEventResponse() + + client.report_error_event(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ + "metadata" + ] + + +@pytest.mark.asyncio +async def test_report_error_event_field_headers_async(): + client = ReportErrorsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = report_errors_service.ReportErrorEventRequest() + request.project_name = "project_name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.report_error_event), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + report_errors_service.ReportErrorEventResponse() + ) + + await client.report_error_event(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ + "metadata" + ] + + +def test_report_error_event_flattened(): + client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.report_error_event), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = report_errors_service.ReportErrorEventResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.report_error_event( + project_name="project_name_value", + event=report_errors_service.ReportedErrorEvent( + event_time=timestamp.Timestamp(seconds=751) + ), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + + assert args[0].project_name == "project_name_value" + + assert args[0].event == report_errors_service.ReportedErrorEvent( + event_time=timestamp.Timestamp(seconds=751) + ) + + +def test_report_error_event_flattened_error(): + client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.report_error_event( + report_errors_service.ReportErrorEventRequest(), + project_name="project_name_value", + event=report_errors_service.ReportedErrorEvent( + event_time=timestamp.Timestamp(seconds=751) + ), + ) + + +@pytest.mark.asyncio +async def test_report_error_event_flattened_async(): + client = ReportErrorsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.report_error_event), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = report_errors_service.ReportErrorEventResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + report_errors_service.ReportErrorEventResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.report_error_event( + project_name="project_name_value", + event=report_errors_service.ReportedErrorEvent( + event_time=timestamp.Timestamp(seconds=751) + ), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + + assert args[0].project_name == "project_name_value" + + assert args[0].event == report_errors_service.ReportedErrorEvent( + event_time=timestamp.Timestamp(seconds=751) + ) + + +@pytest.mark.asyncio +async def test_report_error_event_flattened_error_async(): + client = ReportErrorsServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.report_error_event( + report_errors_service.ReportErrorEventRequest(), + project_name="project_name_value", + event=report_errors_service.ReportedErrorEvent( + event_time=timestamp.Timestamp(seconds=751) + ), + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.ReportErrorsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ReportErrorsServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.ReportErrorsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ReportErrorsServiceClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.ReportErrorsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ReportErrorsServiceClient( + client_options={"scopes": ["1", "2"]}, transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.ReportErrorsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + client = ReportErrorsServiceClient(transport=transport) + assert client._transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.ReportErrorsServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) + assert isinstance(client._transport, transports.ReportErrorsServiceGrpcTransport,) + + +def test_report_errors_service_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(exceptions.DuplicateCredentialArgs): + transport = transports.ReportErrorsServiceTransport( + credentials=credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_report_errors_service_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.ReportErrorsServiceTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.ReportErrorsServiceTransport( + credentials=credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ("report_error_event",) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + +def test_report_errors_service_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + auth, "load_credentials_from_file" + ) as load_creds, mock.patch( + "google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.ReportErrorsServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (credentials.AnonymousCredentials(), None) + transport = transports.ReportErrorsServiceTransport( + credentials_file="credentials.json", quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_report_errors_service_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + ReportErrorsServiceClient() + adc.assert_called_once_with( + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +def test_report_errors_service_transport_auth_adc(): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + transports.ReportErrorsServiceGrpcTransport( + host="squid.clam.whelk", quota_project_id="octopus" + ) + adc.assert_called_once_with( + scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_report_errors_service_host_no_port(): + client = ReportErrorsServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="clouderrorreporting.googleapis.com" + ), + ) + assert client._transport._host == "clouderrorreporting.googleapis.com:443" + + +def test_report_errors_service_host_with_port(): + client = ReportErrorsServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="clouderrorreporting.googleapis.com:8000" + ), + ) + assert client._transport._host == "clouderrorreporting.googleapis.com:8000" + + +def test_report_errors_service_grpc_transport_channel(): + channel = grpc.insecure_channel("http://localhost/") + + # Check that if channel is provided, mtls endpoint and client_cert_source + # won't be used. + callback = mock.MagicMock() + transport = transports.ReportErrorsServiceGrpcTransport( + host="squid.clam.whelk", + channel=channel, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=callback, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert not callback.called + + +def test_report_errors_service_grpc_asyncio_transport_channel(): + channel = aio.insecure_channel("http://localhost/") + + # Check that if channel is provided, mtls endpoint and client_cert_source + # won't be used. + callback = mock.MagicMock() + transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=callback, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert not callback.called + + +@mock.patch("grpc.ssl_channel_credentials", autospec=True) +@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) +def test_report_errors_service_grpc_transport_channel_mtls_with_client_cert_source( + grpc_create_channel, grpc_ssl_channel_cred +): + # Check that if channel is None, but api_mtls_endpoint and client_cert_source + # are provided, then a mTLS channel will be created. + mock_cred = mock.Mock() + + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + transport = transports.ReportErrorsServiceGrpcTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@mock.patch("grpc.ssl_channel_credentials", autospec=True) +@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) +def test_report_errors_service_grpc_asyncio_transport_channel_mtls_with_client_cert_source( + grpc_create_channel, grpc_ssl_channel_cred +): + # Check that if channel is None, but api_mtls_endpoint and client_cert_source + # are provided, then a mTLS channel will be created. + mock_cred = mock.Mock() + + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@pytest.mark.parametrize( + "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] +) +@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) +def test_report_errors_service_grpc_transport_channel_mtls_with_adc( + grpc_create_channel, api_mtls_endpoint +): + # Check that if channel and client_cert_source are None, but api_mtls_endpoint + # is provided, then a mTLS channel will be created with SSL ADC. + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + # Mock google.auth.transport.grpc.SslCredentials class. + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + mock_cred = mock.Mock() + transport = transports.ReportErrorsServiceGrpcTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint=api_mtls_endpoint, + client_cert_source=None, + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +@pytest.mark.parametrize( + "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] +) +@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) +def test_report_errors_service_grpc_asyncio_transport_channel_mtls_with_adc( + grpc_create_channel, api_mtls_endpoint +): + # Check that if channel and client_cert_source are None, but api_mtls_endpoint + # is provided, then a mTLS channel will be created with SSL ADC. + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + # Mock google.auth.transport.grpc.SslCredentials class. + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + mock_cred = mock.Mock() + transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint=api_mtls_endpoint, + client_cert_source=None, + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_client_withDEFAULT_CLIENT_INFO(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.ReportErrorsServiceTransport, "_prep_wrapped_messages" + ) as prep: + client = ReportErrorsServiceClient( + credentials=credentials.AnonymousCredentials(), client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.ReportErrorsServiceTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = ReportErrorsServiceClient.get_transport_class() + transport = transport_class( + credentials=credentials.AnonymousCredentials(), client_info=client_info, + ) + prep.assert_called_once_with(client_info) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py deleted file mode 100644 index 5feb9c2c801c..000000000000 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_group_service_client_v1beta1.py +++ /dev/null @@ -1,142 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -"""Unit tests.""" - -import mock -import pytest - -from google.cloud import errorreporting_v1beta1 -from google.cloud.errorreporting_v1beta1.proto import common_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_group_service_pb2 - - -class MultiCallableStub(object): - """Stub for the grpc.UnaryUnaryMultiCallable interface.""" - - def __init__(self, method, channel_stub): - self.method = method - self.channel_stub = channel_stub - - def __call__(self, request, timeout=None, metadata=None, credentials=None): - self.channel_stub.requests.append((self.method, request)) - - response = None - if self.channel_stub.responses: - response = self.channel_stub.responses.pop() - - if isinstance(response, Exception): - raise response - - if response: - return response - - -class ChannelStub(object): - """Stub for the grpc.Channel interface.""" - - def __init__(self, responses=[]): - self.responses = responses - self.requests = [] - - def unary_unary(self, method, request_serializer=None, response_deserializer=None): - return MultiCallableStub(method, self) - - -class CustomException(Exception): - pass - - -class TestErrorGroupServiceClient(object): - def test_update_group(self): - # Setup Expected Response - name = "name3373707" - group_id = "groupId506361563" - expected_response = {"name": name, "group_id": group_id} - expected_response = common_pb2.ErrorGroup(**expected_response) - - # Mock the API response - channel = ChannelStub(responses=[expected_response]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorGroupServiceClient() - - # Setup Request - group = {} - - response = client.update_group(group) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = error_group_service_pb2.UpdateGroupRequest(group=group) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_update_group_exception(self): - # Mock the API response - channel = ChannelStub(responses=[CustomException()]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorGroupServiceClient() - - # Setup request - group = {} - - with pytest.raises(CustomException): - client.update_group(group) - - def test_get_group(self): - # Setup Expected Response - name = "name3373707" - group_id = "groupId506361563" - expected_response = {"name": name, "group_id": group_id} - expected_response = common_pb2.ErrorGroup(**expected_response) - - # Mock the API response - channel = ChannelStub(responses=[expected_response]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorGroupServiceClient() - - # Setup Request - group_name = client.group_path("[PROJECT]", "[GROUP]") - - response = client.get_group(group_name) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = error_group_service_pb2.GetGroupRequest( - group_name=group_name - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_get_group_exception(self): - # Mock the API response - channel = ChannelStub(responses=[CustomException()]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorGroupServiceClient() - - # Setup request - group_name = client.group_path("[PROJECT]", "[GROUP]") - - with pytest.raises(CustomException): - client.get_group(group_name) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py deleted file mode 100644 index 7c15ac22baf6..000000000000 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_error_stats_service_client_v1beta1.py +++ /dev/null @@ -1,205 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -"""Unit tests.""" - -import mock -import pytest - -from google.cloud import errorreporting_v1beta1 -from google.cloud.errorreporting_v1beta1.proto import common_pb2 -from google.cloud.errorreporting_v1beta1.proto import error_stats_service_pb2 - - -class MultiCallableStub(object): - """Stub for the grpc.UnaryUnaryMultiCallable interface.""" - - def __init__(self, method, channel_stub): - self.method = method - self.channel_stub = channel_stub - - def __call__(self, request, timeout=None, metadata=None, credentials=None): - self.channel_stub.requests.append((self.method, request)) - - response = None - if self.channel_stub.responses: - response = self.channel_stub.responses.pop() - - if isinstance(response, Exception): - raise response - - if response: - return response - - -class ChannelStub(object): - """Stub for the grpc.Channel interface.""" - - def __init__(self, responses=[]): - self.responses = responses - self.requests = [] - - def unary_unary(self, method, request_serializer=None, response_deserializer=None): - return MultiCallableStub(method, self) - - -class CustomException(Exception): - pass - - -class TestErrorStatsServiceClient(object): - def test_delete_events(self): - # Setup Expected Response - expected_response = {} - expected_response = error_stats_service_pb2.DeleteEventsResponse( - **expected_response - ) - - # Mock the API response - channel = ChannelStub(responses=[expected_response]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorStatsServiceClient() - - # Setup Request - project_name = client.project_path("[PROJECT]") - - response = client.delete_events(project_name) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = error_stats_service_pb2.DeleteEventsRequest( - project_name=project_name - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_delete_events_exception(self): - # Mock the API response - channel = ChannelStub(responses=[CustomException()]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorStatsServiceClient() - - # Setup request - project_name = client.project_path("[PROJECT]") - - with pytest.raises(CustomException): - client.delete_events(project_name) - - def test_list_group_stats(self): - # Setup Expected Response - next_page_token = "" - error_group_stats_element = {} - error_group_stats = [error_group_stats_element] - expected_response = { - "next_page_token": next_page_token, - "error_group_stats": error_group_stats, - } - expected_response = error_stats_service_pb2.ListGroupStatsResponse( - **expected_response - ) - - # Mock the API response - channel = ChannelStub(responses=[expected_response]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorStatsServiceClient() - - # Setup Request - project_name = client.project_path("[PROJECT]") - - paged_list_response = client.list_group_stats(project_name) - resources = list(paged_list_response) - assert len(resources) == 1 - - assert expected_response.error_group_stats[0] == resources[0] - - assert len(channel.requests) == 1 - expected_request = error_stats_service_pb2.ListGroupStatsRequest( - project_name=project_name - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_list_group_stats_exception(self): - channel = ChannelStub(responses=[CustomException()]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorStatsServiceClient() - - # Setup request - project_name = client.project_path("[PROJECT]") - - paged_list_response = client.list_group_stats(project_name) - with pytest.raises(CustomException): - list(paged_list_response) - - def test_list_events(self): - # Setup Expected Response - next_page_token = "" - error_events_element = {} - error_events = [error_events_element] - expected_response = { - "next_page_token": next_page_token, - "error_events": error_events, - } - expected_response = error_stats_service_pb2.ListEventsResponse( - **expected_response - ) - - # Mock the API response - channel = ChannelStub(responses=[expected_response]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorStatsServiceClient() - - # Setup Request - project_name = client.project_path("[PROJECT]") - group_id = "groupId506361563" - - paged_list_response = client.list_events(project_name, group_id) - resources = list(paged_list_response) - assert len(resources) == 1 - - assert expected_response.error_events[0] == resources[0] - - assert len(channel.requests) == 1 - expected_request = error_stats_service_pb2.ListEventsRequest( - project_name=project_name, group_id=group_id - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_list_events_exception(self): - channel = ChannelStub(responses=[CustomException()]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ErrorStatsServiceClient() - - # Setup request - project_name = client.project_path("[PROJECT]") - group_id = "groupId506361563" - - paged_list_response = client.list_events(project_name, group_id) - with pytest.raises(CustomException): - list(paged_list_response) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py b/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py deleted file mode 100644 index 8806285f260d..000000000000 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/v1beta1/test_report_errors_service_client_v1beta1.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -"""Unit tests.""" - -import mock -import pytest - -from google.cloud import errorreporting_v1beta1 -from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 - - -class MultiCallableStub(object): - """Stub for the grpc.UnaryUnaryMultiCallable interface.""" - - def __init__(self, method, channel_stub): - self.method = method - self.channel_stub = channel_stub - - def __call__(self, request, timeout=None, metadata=None, credentials=None): - self.channel_stub.requests.append((self.method, request)) - - response = None - if self.channel_stub.responses: - response = self.channel_stub.responses.pop() - - if isinstance(response, Exception): - raise response - - if response: - return response - - -class ChannelStub(object): - """Stub for the grpc.Channel interface.""" - - def __init__(self, responses=[]): - self.responses = responses - self.requests = [] - - def unary_unary(self, method, request_serializer=None, response_deserializer=None): - return MultiCallableStub(method, self) - - -class CustomException(Exception): - pass - - -class TestReportErrorsServiceClient(object): - def test_report_error_event(self): - # Setup Expected Response - expected_response = {} - expected_response = report_errors_service_pb2.ReportErrorEventResponse( - **expected_response - ) - - # Mock the API response - channel = ChannelStub(responses=[expected_response]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ReportErrorsServiceClient() - - # Setup Request - project_name = client.project_path("[PROJECT]") - event = {} - - response = client.report_error_event(project_name, event) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = report_errors_service_pb2.ReportErrorEventRequest( - project_name=project_name, event=event - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_report_error_event_exception(self): - # Mock the API response - channel = ChannelStub(responses=[CustomException()]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = errorreporting_v1beta1.ReportErrorsServiceClient() - - # Setup request - project_name = client.project_path("[PROJECT]") - event = {} - - with pytest.raises(CustomException): - client.report_error_event(project_name, event) diff --git a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py index 00940f466df0..365eee27215c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py @@ -31,8 +31,7 @@ def test_make_report_error_api(self): # Call the function being tested. patch = mock.patch( - "google.cloud.errorreporting_v1beta1." - "gapic.report_errors_service_client.ReportErrorsServiceClient" + "google.cloud.errorreporting_v1beta1.ReportErrorsServiceClient" ) with patch as patched: @@ -66,17 +65,18 @@ def test_constructor(self): self.assertEqual(gapic_client_wrapper._gapic_api, gapic_api) def test_report_error_event(self): - from google.cloud.errorreporting_v1beta1.proto import report_errors_service_pb2 + import google.cloud.errorreporting_v1beta1 - gapic_api = mock.Mock(spec=["project_path", "report_error_event"]) + gapic_api = mock.Mock(spec=["report_error_event"]) gapic_client_wrapper = self._make_one(gapic_api, self.PROJECT) error_report = {"message": "The cabs are here."} gapic_client_wrapper.report_error_event(error_report) - gapic_api.project_path.assert_called_once_with(self.PROJECT) - project_name = gapic_api.project_path.return_value - error_pb = report_errors_service_pb2.ReportedErrorEvent( + project_name = f"projects/{self.PROJECT}" + error_pb = google.cloud.errorreporting_v1beta1.ReportedErrorEvent( message=error_report["message"] ) - gapic_api.report_error_event.assert_called_once_with(project_name, error_pb) + gapic_api.report_error_event.assert_called_once_with( + project_name=project_name, event=error_pb + ) From 14509d02862d158d99d310f132c225f6757fadc1 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2020 18:21:27 -0700 Subject: [PATCH 171/467] chore: release 1.0.0 (#25) * chore: updated CHANGELOG.md [ci skip] * chore: updated setup.cfg [ci skip] * chore: updated setup.py Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../google-cloud-error-reporting/CHANGELOG.md | 16 ++++++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index c587c6f8adbc..c48b34d949cc 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,22 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.0.0](https://www.github.com/googleapis/python-error-reporting/compare/v0.34.0...v1.0.0) (2020-08-28) + + +### ⚠ BREAKING CHANGES + +* migrate to use microgen (#23) + +### Features + +* migrate to use microgen ([#23](https://www.github.com/googleapis/python-error-reporting/issues/23)) ([cb41e3a](https://www.github.com/googleapis/python-error-reporting/commit/cb41e3a1003cb4ef4e32efc8b5c5b5ba7d670f7d)) + + +### Documentation + +* add multiprocessing note ([#13](https://www.github.com/googleapis/python-error-reporting/issues/13)) ([840d67c](https://www.github.com/googleapis/python-error-reporting/commit/840d67c09502ae99ce4771c66bde1cefb961a367)) + ## [0.34.0](https://www.github.com/googleapis/python-error-reporting/compare/v0.33.0...v0.34.0) (2020-05-03) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index a4ac946775ce..fe3932ed1b6d 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Stackdriver Error Reporting API client library" -version = "0.34.0" +version = "1.0.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 74d76cc7d3e34d1bb854318bf70b44bcfc3d8ec7 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 31 Aug 2020 13:52:29 -0700 Subject: [PATCH 172/467] chore: start tracking obsolete files (#27) --- .../synth.metadata | 123 +++++++++++++++++- 1 file changed, 120 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 5f054cfd3e68..95c147d1d7f1 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,21 +4,29 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "eb586ff9fdbea553c863ba8803c213a5c001f9dc" + "sha": "4666066f08e1f49f1c612cbfaac6ad5a7ec7d98b" + } + }, + { + "git": { + "name": "googleapis", + "remote": "https://github.com/googleapis/googleapis.git", + "sha": "4bc344a7c1b638ce317045c57d8009856aba81d3", + "internalRef": "329103436" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "cbcd64279572769b4d350bf8078bcd1f151c9684" + "sha": "80f46100c047bc47efe0025ee537dc8ee413ad04" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "cbcd64279572769b4d350bf8078bcd1f151c9684" + "sha": "80f46100c047bc47efe0025ee537dc8ee413ad04" } } ], @@ -32,5 +40,114 @@ "generator": "bazel" } } + ], + "generatedFiles": [ + ".flake8", + ".github/CONTRIBUTING.md", + ".github/ISSUE_TEMPLATE/bug_report.md", + ".github/ISSUE_TEMPLATE/feature_request.md", + ".github/ISSUE_TEMPLATE/support_request.md", + ".github/PULL_REQUEST_TEMPLATE.md", + ".github/release-please.yml", + ".gitignore", + ".kokoro/build.sh", + ".kokoro/continuous/common.cfg", + ".kokoro/continuous/continuous.cfg", + ".kokoro/docker/docs/Dockerfile", + ".kokoro/docker/docs/fetch_gpg_keys.sh", + ".kokoro/docs/common.cfg", + ".kokoro/docs/docs-presubmit.cfg", + ".kokoro/docs/docs.cfg", + ".kokoro/presubmit/common.cfg", + ".kokoro/presubmit/presubmit.cfg", + ".kokoro/publish-docs.sh", + ".kokoro/release.sh", + ".kokoro/release/common.cfg", + ".kokoro/release/release.cfg", + ".kokoro/samples/lint/common.cfg", + ".kokoro/samples/lint/continuous.cfg", + ".kokoro/samples/lint/periodic.cfg", + ".kokoro/samples/lint/presubmit.cfg", + ".kokoro/samples/python3.6/common.cfg", + ".kokoro/samples/python3.6/continuous.cfg", + ".kokoro/samples/python3.6/periodic.cfg", + ".kokoro/samples/python3.6/presubmit.cfg", + ".kokoro/samples/python3.7/common.cfg", + ".kokoro/samples/python3.7/continuous.cfg", + ".kokoro/samples/python3.7/periodic.cfg", + ".kokoro/samples/python3.7/presubmit.cfg", + ".kokoro/samples/python3.8/common.cfg", + ".kokoro/samples/python3.8/continuous.cfg", + ".kokoro/samples/python3.8/periodic.cfg", + ".kokoro/samples/python3.8/presubmit.cfg", + ".kokoro/test-samples.sh", + ".kokoro/trampoline.sh", + ".kokoro/trampoline_v2.sh", + ".trampolinerc", + "CODE_OF_CONDUCT.md", + "CONTRIBUTING.rst", + "LICENSE", + "MANIFEST.in", + "docs/_static/custom.css", + "docs/_templates/layout.html", + "docs/conf.py", + "docs/errorreporting_v1beta1/services.rst", + "docs/errorreporting_v1beta1/types.rst", + "docs/multiprocessing.rst", + "google/cloud/errorreporting_v1beta1/__init__.py", + "google/cloud/errorreporting_v1beta1/proto/common.proto", + "google/cloud/errorreporting_v1beta1/proto/error_group_service.proto", + "google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto", + "google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto", + "google/cloud/errorreporting_v1beta1/py.typed", + "google/cloud/errorreporting_v1beta1/services/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/client.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py", + "google/cloud/errorreporting_v1beta1/types/__init__.py", + "google/cloud/errorreporting_v1beta1/types/common.py", + "google/cloud/errorreporting_v1beta1/types/error_group_service.py", + "google/cloud/errorreporting_v1beta1/types/error_stats_service.py", + "google/cloud/errorreporting_v1beta1/types/report_errors_service.py", + "mypy.ini", + "noxfile.py", + "renovate.json", + "samples/AUTHORING_GUIDE.md", + "samples/CONTRIBUTING.md", + "samples/snippets/api/noxfile.py", + "samples/snippets/fluent_on_compute/noxfile.py", + "scripts/decrypt-secrets.sh", + "scripts/fixup_errorreporting_v1beta1_keywords.py", + "scripts/readme-gen/readme_gen.py", + "scripts/readme-gen/templates/README.tmpl.rst", + "scripts/readme-gen/templates/auth.tmpl.rst", + "scripts/readme-gen/templates/auth_api_key.tmpl.rst", + "scripts/readme-gen/templates/install_deps.tmpl.rst", + "scripts/readme-gen/templates/install_portaudio.tmpl.rst", + "setup.cfg", + "testing/.gitignore", + "tests/unit/gapic/errorreporting_v1beta1/__init__.py", + "tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py", + "tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py", + "tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py" ] } \ No newline at end of file From a2a00c766a1bb23527f1c58d2f1b0d33d7f8e3e0 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Mon, 28 Sep 2020 18:07:31 -0600 Subject: [PATCH 173/467] chore: add codeowners (#31) --- packages/google-cloud-error-reporting/.github/CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/google-cloud-error-reporting/.github/CODEOWNERS b/packages/google-cloud-error-reporting/.github/CODEOWNERS index d2cf5a107cfc..1dcff234f056 100644 --- a/packages/google-cloud-error-reporting/.github/CODEOWNERS +++ b/packages/google-cloud-error-reporting/.github/CODEOWNERS @@ -4,5 +4,8 @@ # For syntax help see: # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax +# The @googleapis/yoshi-python is the default owner for changes in this repo +* @googleapis/yoshi-python + /samples/**/*.py @googleapis/python-samples-owners \ No newline at end of file From 89387d52c2b729b19471bc2ea5557f3626395625 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 16 Oct 2020 21:55:11 +0200 Subject: [PATCH 174/467] chore(deps): update dependency google-cloud-error-reporting to v1 (#26) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 242254e84f2a..cc967eee1c77 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==0.34.0 +google-cloud-error-reporting==1.0.0 From 5b6702dd243c629ce67862d4f2f31801fe098ad5 Mon Sep 17 00:00:00 2001 From: Simon Zeltser Date: Tue, 27 Oct 2020 11:38:40 -0700 Subject: [PATCH 175/467] chore: add api-logging to codeowners (#34) --- packages/google-cloud-error-reporting/.github/CODEOWNERS | 2 +- packages/google-cloud-error-reporting/.repo-metadata.json | 5 +++-- packages/google-cloud-error-reporting/README.rst | 4 ++-- packages/google-cloud-error-reporting/docs/usage.rst | 8 ++++---- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/CODEOWNERS b/packages/google-cloud-error-reporting/.github/CODEOWNERS index 1dcff234f056..a8085b5437a5 100644 --- a/packages/google-cloud-error-reporting/.github/CODEOWNERS +++ b/packages/google-cloud-error-reporting/.github/CODEOWNERS @@ -5,7 +5,7 @@ # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax # The @googleapis/yoshi-python is the default owner for changes in this repo -* @googleapis/yoshi-python +* @googleapis/api-logging @googleapis/yoshi-python /samples/**/*.py @googleapis/python-samples-owners \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index 9b36cbe30a8e..549c632df8d8 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -1,6 +1,6 @@ { "name": "clouderrorreporting", - "name_pretty": "Stackdriver Error Reporting", + "name_pretty": "Cloud Error Reporting", "product_documentation": "https://cloud.google.com/error-reporting", "client_documentation": "https://googleapis.dev/python/clouderrorreporting/latest", "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", @@ -9,5 +9,6 @@ "repo": "googleapis/python-error-reporting", "distribution_name": "google-cloud-error-reporting", "api_id": "clouderrorreporting.googleapis.com", - "requires_billing": false + "requires_billing": false, + "codeowner_team": "@googleapis/api-logging" } \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 9af9209b2f29..88a8610bb0a7 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -1,9 +1,9 @@ -Python Client for Stackdriver Error Reporting +Python Client for Cloud Error Reporting ============================================= |beta| |pypi| |versions| -The Stackdriver `Error Reporting`_ API counts, analyzes and aggregates the +The Cloud `Error Reporting`_ API counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management interface displays the results with sorting and filtering capabilities. A dedicated view shows the error details: time chart, occurrences, affected user diff --git a/packages/google-cloud-error-reporting/docs/usage.rst b/packages/google-cloud-error-reporting/docs/usage.rst index 4e971d368f52..40d4365f7bd4 100644 --- a/packages/google-cloud-error-reporting/docs/usage.rst +++ b/packages/google-cloud-error-reporting/docs/usage.rst @@ -1,4 +1,4 @@ -Using Stackdriver Error Reporting +Using Cloud Error Reporting ================================= After configuring your environment, create a @@ -35,7 +35,7 @@ also optionally specify a version for that service, which defaults to Reporting an exception ----------------------- -Report a stacktrace to Stackdriver Error Reporting after an exception: +Report a stacktrace to Cloud Error Reporting after an exception: .. code-block:: python @@ -54,7 +54,7 @@ the client's constructor, or the default service of "python". The user and HTTP context can also be included in the exception. The HTTP context can be constructed using :class:`google.cloud.error_reporting.HTTPContext`. This will be used by -Stackdriver Error Reporting to help group exceptions. +Cloud Error Reporting to help group exceptions. .. code-block:: python @@ -88,7 +88,7 @@ object is provided. Reporting an error without an exception ----------------------------------------- -Errors can also be reported to Stackdriver Error Reporting outside the context +Errors can also be reported to Cloud Error Reporting outside the context of an exception. The library will include the file path, function name, and line number of the location where the error was reported. From 238f80bf02a7acc9e626c71bf44f6265d3744455 Mon Sep 17 00:00:00 2001 From: Nicole Zhu <69952136+nicoleczhu@users.noreply.github.com> Date: Mon, 9 Nov 2020 23:33:29 -0800 Subject: [PATCH 176/467] chore: add blunderbuss (#35) --- packages/google-cloud-error-reporting/.github/blunderbuss.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/google-cloud-error-reporting/.github/blunderbuss.yml diff --git a/packages/google-cloud-error-reporting/.github/blunderbuss.yml b/packages/google-cloud-error-reporting/.github/blunderbuss.yml new file mode 100644 index 000000000000..148ebf4e81cb --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/blunderbuss.yml @@ -0,0 +1,4 @@ +assign_issues: + - Daniel-Sanche +assign_prs: + - Daniel-Sanche From 230ca10dec5365eb4d5f8a102dc5bdaf4566677b Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 18 Nov 2020 07:56:54 -0800 Subject: [PATCH 177/467] chore: update templates (#38) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * chore(py-library): enable snippet-bot Co-authored-by: Benjamin E. Coe Source-Author: Takashi Matsuo Source-Date: Tue Sep 1 17:14:08 2020 +0000 Source-Repo: googleapis/synthtool Source-Sha: d91dd8aac77f7a9c5506c238038a26fa4f9e361e Source-Link: https://github.com/googleapis/synthtool/commit/d91dd8aac77f7a9c5506c238038a26fa4f9e361e * chore(py-library): update decrypt secrets file * chore(py-library): update decrypt secrets file From https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/scripts/decrypt-secrets.sh * docs: explain conditional Co-authored-by: Jeffrey Rennie Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Tue Sep 8 11:35:59 2020 -0600 Source-Repo: googleapis/synthtool Source-Sha: d302f93d7f47e2852e585ac35ab2d15585717ec0 Source-Link: https://github.com/googleapis/synthtool/commit/d302f93d7f47e2852e585ac35ab2d15585717ec0 * chore(python-library): use sphinx 1.5.5 for the docfx job Originally tested at: https://github.com/googleapis/python-texttospeech/pull/89 This change will fix the missing docstring in the yaml files. Source-Author: Takashi Matsuo Source-Date: Thu Sep 10 04:12:14 2020 +0000 Source-Repo: googleapis/synthtool Source-Sha: ffcee7952b74f647cbb3ef021d95422f10816fca Source-Link: https://github.com/googleapis/synthtool/commit/ffcee7952b74f647cbb3ef021d95422f10816fca * build(python): use release-publish app for notifying GitHub of releas… * build(python): use release-publish app for notifying GitHub of release status * fix: re-add pypi password Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Wed Sep 16 08:46:42 2020 -0600 Source-Repo: googleapis/synthtool Source-Sha: 257fda18168bedb76985024bd198ed1725485488 Source-Link: https://github.com/googleapis/synthtool/commit/257fda18168bedb76985024bd198ed1725485488 * build(python): add secret manager in kokoro Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Wed Sep 16 10:24:40 2020 -0600 Source-Repo: googleapis/synthtool Source-Sha: dba48bb9bc6959c232bec9150ac6313b608fe7bd Source-Link: https://github.com/googleapis/synthtool/commit/dba48bb9bc6959c232bec9150ac6313b608fe7bd * chore(python): add sphinx doctest extension Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Mon Sep 21 13:09:57 2020 -0600 Source-Repo: googleapis/synthtool Source-Sha: 27f4406999b1eee29e04b09b2423a8e4646c7e24 Source-Link: https://github.com/googleapis/synthtool/commit/27f4406999b1eee29e04b09b2423a8e4646c7e24 * chore(python): remove note about editable installs `pip install -e .` is supported and is how we install the library for tests. Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Tue Sep 22 12:06:12 2020 -0600 Source-Repo: googleapis/synthtool Source-Sha: a651c5fb763c69a921aecdd3e1d8dc51dbf20f8d Source-Link: https://github.com/googleapis/synthtool/commit/a651c5fb763c69a921aecdd3e1d8dc51dbf20f8d * chore(python): use BUILD_SPECIFIC_GCLOUD_PROJECT for samples https://github.com/googleapis/python-talent/blob/ef045e8eb348db36d7a2a611e6f26b11530d273b/samples/snippets/noxfile_config.py#L27-L32 `BUILD_SPECIFIC_GCLOUD_PROJECT` is an alternate project used for sample tests that do poorly with concurrent runs on the same project. Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Wed Sep 30 13:06:03 2020 -0600 Source-Repo: googleapis/synthtool Source-Sha: 9b0da5204ab90bcc36f8cd4e5689eff1a54cc3e4 Source-Link: https://github.com/googleapis/synthtool/commit/9b0da5204ab90bcc36f8cd4e5689eff1a54cc3e4 * chore(python): use 'setup.py' to detect repo root Closes #792 Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Fri Oct 9 15:06:33 2020 -0600 Source-Repo: googleapis/synthtool Source-Sha: e0ae456852bf22f38796deb79cff30b516fde244 Source-Link: https://github.com/googleapis/synthtool/commit/e0ae456852bf22f38796deb79cff30b516fde244 * build(python): samples tests should pass if no samples exist Source-Author: Daniel Sanche Source-Date: Wed Oct 14 08:00:06 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: 477764cc4ee6db346d3febef2bb1ea0abf27de52 Source-Link: https://github.com/googleapis/synthtool/commit/477764cc4ee6db346d3febef2bb1ea0abf27de52 * chore(python_library): change the docs bucket name Source-Author: Takashi Matsuo Source-Date: Fri Oct 16 09:58:05 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: da5c6050d13b4950c82666a81d8acd25157664ae Source-Link: https://github.com/googleapis/synthtool/commit/da5c6050d13b4950c82666a81d8acd25157664ae * chore(docs): update code of conduct of synthtool and templates Source-Author: Christopher Wilcox Source-Date: Thu Oct 22 14:22:01 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: 5f6ef0ec5501d33c4667885b37a7685a30d41a76 Source-Link: https://github.com/googleapis/synthtool/commit/5f6ef0ec5501d33c4667885b37a7685a30d41a76 * docs: add proto-plus to intersphinx mapping Source-Author: Tim Swast Source-Date: Tue Oct 27 12:01:14 2020 -0500 Source-Repo: googleapis/synthtool Source-Sha: ea52b8a0bd560f72f376efcf45197fb7c8869120 Source-Link: https://github.com/googleapis/synthtool/commit/ea52b8a0bd560f72f376efcf45197fb7c8869120 * fix(python_library): fix external unit test dependencies I recently submitted https://github.com/googleapis/synthtool/pull/811/files, allowing external dependencies for unit tests. This fixes a small missing comma bug Source-Author: Daniel Sanche Source-Date: Thu Oct 29 16:58:01 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: 6542bd723403513626f61642fc02ddca528409aa Source-Link: https://github.com/googleapis/synthtool/commit/6542bd723403513626f61642fc02ddca528409aa * chore: add type hint check Source-Author: Leah E. Cole <6719667+leahecole@users.noreply.github.com> Source-Date: Wed Nov 4 17:36:32 2020 -0800 Source-Repo: googleapis/synthtool Source-Sha: 3d3e94c4e02370f307a9a200b0c743c3d8d19f29 Source-Link: https://github.com/googleapis/synthtool/commit/3d3e94c4e02370f307a9a200b0c743c3d8d19f29 * chore: add blacken to template Source-Author: Leah E. Cole <6719667+leahecole@users.noreply.github.com> Source-Date: Thu Nov 5 15:22:03 2020 -0800 Source-Repo: googleapis/synthtool Source-Sha: 1f1148d3c7a7a52f0c98077f976bd9b3c948ee2b Source-Link: https://github.com/googleapis/synthtool/commit/1f1148d3c7a7a52f0c98077f976bd9b3c948ee2b * fix: address lint issues Source-Author: Leah E. Cole <6719667+leahecole@users.noreply.github.com> Source-Date: Thu Nov 12 11:30:49 2020 -0800 Source-Repo: googleapis/synthtool Source-Sha: e89175cf074dccc4babb4eca66ae913696e47a71 Source-Link: https://github.com/googleapis/synthtool/commit/e89175cf074dccc4babb4eca66ae913696e47a71 --- .../.github/snippet-bot.yml | 0 .../.kokoro/docs/common.cfg | 2 +- .../.kokoro/populate-secrets.sh | 43 ++++++ .../.kokoro/release/common.cfg | 50 ++----- .../.kokoro/samples/python3.6/common.cfg | 6 + .../.kokoro/samples/python3.7/common.cfg | 6 + .../.kokoro/samples/python3.8/common.cfg | 6 + .../.kokoro/test-samples.sh | 8 +- .../.kokoro/trampoline.sh | 15 ++- .../CODE_OF_CONDUCT.md | 123 +++++++++++++----- .../CONTRIBUTING.rst | 19 --- .../google-cloud-error-reporting/docs/conf.py | 4 +- .../cloud/errorreporting_v1beta1/__init__.py | 4 +- .../google-cloud-error-reporting/noxfile.py | 10 +- .../samples/snippets/api/noxfile.py | 24 +++- .../snippets/fluent_on_compute/noxfile.py | 24 +++- .../scripts/decrypt-secrets.sh | 15 ++- .../synth.metadata | 8 +- 18 files changed, 256 insertions(+), 111 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.github/snippet-bot.yml create mode 100755 packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh diff --git a/packages/google-cloud-error-reporting/.github/snippet-bot.yml b/packages/google-cloud-error-reporting/.github/snippet-bot.yml new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg index f3e7d6d1a7e0..ea0c974bcb79 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg @@ -30,7 +30,7 @@ env_vars: { env_vars: { key: "V2_STAGING_BUCKET" - value: "docs-staging-v2-staging" + value: "docs-staging-v2" } # It will upload the docker image after successful builds. diff --git a/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh b/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh new file mode 100755 index 000000000000..f52514257ef0 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Copyright 2020 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. + +set -eo pipefail + +function now { date +"%Y-%m-%d %H:%M:%S" | tr -d '\n' ;} +function msg { println "$*" >&2 ;} +function println { printf '%s\n' "$(now) $*" ;} + + +# Populates requested secrets set in SECRET_MANAGER_KEYS from service account: +# kokoro-trampoline@cloud-devrel-kokoro-resources.iam.gserviceaccount.com +SECRET_LOCATION="${KOKORO_GFILE_DIR}/secret_manager" +msg "Creating folder on disk for secrets: ${SECRET_LOCATION}" +mkdir -p ${SECRET_LOCATION} +for key in $(echo ${SECRET_MANAGER_KEYS} | sed "s/,/ /g") +do + msg "Retrieving secret ${key}" + docker run --entrypoint=gcloud \ + --volume=${KOKORO_GFILE_DIR}:${KOKORO_GFILE_DIR} \ + gcr.io/google.com/cloudsdktool/cloud-sdk \ + secrets versions access latest \ + --project cloud-devrel-kokoro-resources \ + --secret ${key} > \ + "${SECRET_LOCATION}/${key}" + if [[ $? == 0 ]]; then + msg "Secret written to ${SECRET_LOCATION}/${key}" + else + msg "Error retrieving secret ${key}" + fi +done diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg index 6d10664eed90..a0587682cee1 100644 --- a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg @@ -23,42 +23,18 @@ env_vars: { value: "github/python-error-reporting/.kokoro/release.sh" } -# Fetch the token needed for reporting release status to GitHub -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "yoshi-automation-github-key" - } - } -} - -# Fetch PyPI password -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "google_cloud_pypi_password" - } - } -} - -# Fetch magictoken to use with Magic Github Proxy -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "releasetool-magictoken" - } - } +# Fetch PyPI password +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "google_cloud_pypi_password" + } + } } -# Fetch api key to use with Magic Github Proxy -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "magic-github-proxy-api-key" - } - } -} +# Tokens needed to report release status back to GitHub +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg index cce0189eb640..0676e13f5f87 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg @@ -13,6 +13,12 @@ env_vars: { value: "py-3.6" } +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-py36" +} + env_vars: { key: "TRAMPOLINE_BUILD_FILE" value: "github/python-error-reporting/.kokoro/test-samples.sh" diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg index edcdfb90c23b..ebc1c94dfaf2 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg @@ -13,6 +13,12 @@ env_vars: { value: "py-3.7" } +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-py37" +} + env_vars: { key: "TRAMPOLINE_BUILD_FILE" value: "github/python-error-reporting/.kokoro/test-samples.sh" diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg index 7130d05ddfee..a4dc49b53a50 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg @@ -13,6 +13,12 @@ env_vars: { value: "py-3.8" } +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-py38" +} + env_vars: { key: "TRAMPOLINE_BUILD_FILE" value: "github/python-error-reporting/.kokoro/test-samples.sh" diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh index 7c2e854cd3e7..c74c2d6a7a15 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh @@ -28,6 +28,12 @@ if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then git checkout $LATEST_RELEASE fi +# Exit early if samples directory doesn't exist +if [ ! -d "./samples" ]; then + echo "No tests run. `./samples` not found" + exit 0 +fi + # Disable buffering, so that the logs stream through. export PYTHONUNBUFFERED=1 @@ -101,4 +107,4 @@ cd "$ROOT" # Workaround for Kokoro permissions issue: delete secrets rm testing/{test-env.sh,client-secrets.json,service-account.json} -exit "$RTN" \ No newline at end of file +exit "$RTN" diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh index e8c4251f3ed4..f39236e943a8 100755 --- a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh +++ b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh @@ -15,9 +15,14 @@ set -eo pipefail -python3 "${KOKORO_GFILE_DIR}/trampoline_v1.py" || ret_code=$? +# Always run the cleanup script, regardless of the success of bouncing into +# the container. +function cleanup() { + chmod +x ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh + ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh + echo "cleanup"; +} +trap cleanup EXIT -chmod +x ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh -${KOKORO_GFILE_DIR}/trampoline_cleanup.sh || true - -exit ${ret_code} +$(dirname $0)/populate-secrets.sh # Secret Manager secrets. +python3 "${KOKORO_GFILE_DIR}/trampoline_v1.py" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/CODE_OF_CONDUCT.md b/packages/google-cloud-error-reporting/CODE_OF_CONDUCT.md index b3d1f6029849..039f43681204 100644 --- a/packages/google-cloud-error-reporting/CODE_OF_CONDUCT.md +++ b/packages/google-cloud-error-reporting/CODE_OF_CONDUCT.md @@ -1,44 +1,95 @@ -# Contributor Code of Conduct +# Code of Conduct -As contributors and maintainers of this project, -and in the interest of fostering an open and welcoming community, -we pledge to respect all people who contribute through reporting issues, -posting feature requests, updating documentation, -submitting pull requests or patches, and other activities. +## Our Pledge -We are committed to making participation in this project -a harassment-free experience for everyone, -regardless of level of experience, gender, gender identity and expression, -sexual orientation, disability, personal appearance, -body size, race, ethnicity, age, religion, or nationality. +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of +experience, education, socio-economic status, nationality, personal appearance, +race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery -* Personal attacks -* Trolling or insulting/derogatory comments -* Public or private harassment -* Publishing other's private information, -such as physical or electronic -addresses, without explicit permission -* Other unethical or unprofessional conduct. +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct. -By adopting this Code of Conduct, -project maintainers commit themselves to fairly and consistently -applying these principles to every aspect of managing this project. -Project maintainers who do not follow or enforce the Code of Conduct -may be permanently removed from the project team. - -This code of conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. - -Instances of abusive, harassing, or otherwise unacceptable behavior -may be reported by opening an issue -or contacting one or more of the project maintainers. - -This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, -available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +This Code of Conduct also applies outside the project spaces when the Project +Steward has a reasonable belief that an individual's behavior may have a +negative impact on the project or its community. + +## Conflict Resolution + +We do not believe that all conflict is bad; healthy debate and disagreement +often yield positive results. However, it is never okay to be disrespectful or +to engage in behavior that violates the project’s code of conduct. + +If you see someone violating the code of conduct, you are encouraged to address +the behavior directly with those involved. Many issues can be resolved quickly +and easily, and this gives people more control over the outcome of their +dispute. If you are unable to resolve the matter for any reason, or if the +behavior is threatening or harassing, report it. We are dedicated to providing +an environment where participants feel welcome and safe. + + +Reports should be directed to *googleapis-stewards@google.com*, the +Project Steward(s) for *Google Cloud Client Libraries*. It is the Project Steward’s duty to +receive and address reported violations of the code of conduct. They will then +work with a committee consisting of representatives from the Open Source +Programs Office and the Google Open Source Strategy team. If for any reason you +are uncomfortable reaching out to the Project Steward, please email +opensource@google.com. + +We will investigate every complaint, but you may not receive a direct response. +We will use our discretion in determining when and how to follow up on reported +incidents, which may range from not taking action to permanent expulsion from +the project and project-sponsored spaces. We will notify the accused of the +report and provide them an opportunity to discuss it before any action is taken. +The identity of the reporter will be omitted from the details of the report +supplied to the accused. In potentially harmful situations, such as ongoing +harassment or threats to anyone's safety, we may take action without notice. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 1.4, +available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 49efd398981f..731025cb23e1 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -80,25 +80,6 @@ We use `nox `__ to instrument our tests. .. nox: https://pypi.org/project/nox/ -Note on Editable Installs / Develop Mode -======================================== - -- As mentioned previously, using ``setuptools`` in `develop mode`_ - or a ``pip`` `editable install`_ is not possible with this - library. This is because this library uses `namespace packages`_. - For context see `Issue #2316`_ and the relevant `PyPA issue`_. - - Since ``editable`` / ``develop`` mode can't be used, packages - need to be installed directly. Hence your changes to the source - tree don't get incorporated into the **already installed** - package. - -.. _namespace packages: https://www.python.org/dev/peps/pep-0420/ -.. _Issue #2316: https://github.com/GoogleCloudPlatform/google-cloud-python/issues/2316 -.. _PyPA issue: https://github.com/pypa/packaging-problems/issues/12 -.. _develop mode: https://setuptools.readthedocs.io/en/latest/setuptools.html#development-mode -.. _editable install: https://pip.pypa.io/en/stable/reference/pip_install/#editable-installs - ***************************************** I'm getting weird errors... Can you help? ***************************************** diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 755f4854ad16..bb2ab317b979 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -29,7 +29,7 @@ # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = "1.6.3" +needs_sphinx = "1.5.5" # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom @@ -39,6 +39,7 @@ "sphinx.ext.autosummary", "sphinx.ext.intersphinx", "sphinx.ext.coverage", + "sphinx.ext.doctest", "sphinx.ext.napoleon", "sphinx.ext.todo", "sphinx.ext.viewcode", @@ -348,6 +349,7 @@ "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None,), "grpc": ("https://grpc.io/grpc/python/", None), + "proto-plus": ("https://proto-plus-python.readthedocs.io/en/latest/", None), } diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 43fc283fab9e..b6f762a39e96 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -53,7 +53,6 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", - "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -63,6 +62,7 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", + "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ReportErrorsServiceClient", + "ErrorStatsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index c8fd0a7d7863..925757c99cfe 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -28,7 +28,7 @@ DEFAULT_PYTHON_VERSION = "3.8" SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] -UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8"] +UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] @nox.session(python=DEFAULT_PYTHON_VERSION) @@ -72,7 +72,9 @@ def default(session): # Install all test dependencies, then install this package in-place. session.install("asyncmock", "pytest-asyncio") - session.install("mock", "pytest", "pytest-cov") + session.install( + "mock", "pytest", "pytest-cov", + ) session.install("-e", ".") # Run py.test against the unit tests. @@ -174,7 +176,9 @@ def docfx(session): """Build the docfx yaml files for this library.""" session.install("-e", ".") - session.install("sphinx<3.0.0", "alabaster", "recommonmark", "sphinx-docfx-yaml") + # sphinx-docfx-yaml supports up to sphinx version 1.5.5. + # https://github.com/docascode/sphinx-docfx-yaml/issues/97 + session.install("sphinx==1.5.5", "alabaster", "recommonmark", "sphinx-docfx-yaml") shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index ba55d7ce53ca..b90eef00f2d9 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -39,6 +39,10 @@ # You can opt out from the test for specific Python versions. 'ignored_versions': ["2.7"], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + 'enforce_type_hints': False, + # An envvar key for determining the project id to use. Change it # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a # build specific Cloud project. You can also use your own string @@ -132,7 +136,10 @@ def _determine_local_import_names(start_dir): @nox.session def lint(session): - session.install("flake8", "flake8-import-order") + if not TEST_CONFIG['enforce_type_hints']: + session.install("flake8", "flake8-import-order") + else: + session.install("flake8", "flake8-import-order", "flake8-annotations") local_names = _determine_local_import_names(".") args = FLAKE8_COMMON_ARGS + [ @@ -141,8 +148,18 @@ def lint(session): "." ] session.run("flake8", *args) +# +# Black +# +@nox.session +def blacken(session): + session.install("black") + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + # # Sample Tests # @@ -201,6 +218,11 @@ def _get_repo_root(): break if Path(p / ".git").exists(): return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) p = p.parent raise Exception("Unable to detect repository root.") diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index ba55d7ce53ca..b90eef00f2d9 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -39,6 +39,10 @@ # You can opt out from the test for specific Python versions. 'ignored_versions': ["2.7"], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + 'enforce_type_hints': False, + # An envvar key for determining the project id to use. Change it # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a # build specific Cloud project. You can also use your own string @@ -132,7 +136,10 @@ def _determine_local_import_names(start_dir): @nox.session def lint(session): - session.install("flake8", "flake8-import-order") + if not TEST_CONFIG['enforce_type_hints']: + session.install("flake8", "flake8-import-order") + else: + session.install("flake8", "flake8-import-order", "flake8-annotations") local_names = _determine_local_import_names(".") args = FLAKE8_COMMON_ARGS + [ @@ -141,8 +148,18 @@ def lint(session): "." ] session.run("flake8", *args) +# +# Black +# +@nox.session +def blacken(session): + session.install("black") + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + # # Sample Tests # @@ -201,6 +218,11 @@ def _get_repo_root(): break if Path(p / ".git").exists(): return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) p = p.parent raise Exception("Unable to detect repository root.") diff --git a/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh b/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh index ff599eb2af25..21f6d2a26d90 100755 --- a/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh +++ b/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh @@ -20,14 +20,27 @@ ROOT=$( dirname "$DIR" ) # Work from the project root. cd $ROOT +# Prevent it from overriding files. +# We recommend that sample authors use their own service account files and cloud project. +# In that case, they are supposed to prepare these files by themselves. +if [[ -f "testing/test-env.sh" ]] || \ + [[ -f "testing/service-account.json" ]] || \ + [[ -f "testing/client-secrets.json" ]]; then + echo "One or more target files exist, aborting." + exit 1 +fi + # Use SECRET_MANAGER_PROJECT if set, fallback to cloud-devrel-kokoro-resources. PROJECT_ID="${SECRET_MANAGER_PROJECT:-cloud-devrel-kokoro-resources}" gcloud secrets versions access latest --secret="python-docs-samples-test-env" \ + --project="${PROJECT_ID}" \ > testing/test-env.sh gcloud secrets versions access latest \ --secret="python-docs-samples-service-account" \ + --project="${PROJECT_ID}" \ > testing/service-account.json gcloud secrets versions access latest \ --secret="python-docs-samples-client-secrets" \ - > testing/client-secrets.json \ No newline at end of file + --project="${PROJECT_ID}" \ + > testing/client-secrets.json diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 95c147d1d7f1..757a0a736d04 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "4666066f08e1f49f1c612cbfaac6ad5a7ec7d98b" + "sha": "948daf01c733950aece7057fb8809e240b4696a4" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "80f46100c047bc47efe0025ee537dc8ee413ad04" + "sha": "e89175cf074dccc4babb4eca66ae913696e47a71" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "80f46100c047bc47efe0025ee537dc8ee413ad04" + "sha": "e89175cf074dccc4babb4eca66ae913696e47a71" } } ], @@ -49,6 +49,7 @@ ".github/ISSUE_TEMPLATE/support_request.md", ".github/PULL_REQUEST_TEMPLATE.md", ".github/release-please.yml", + ".github/snippet-bot.yml", ".gitignore", ".kokoro/build.sh", ".kokoro/continuous/common.cfg", @@ -58,6 +59,7 @@ ".kokoro/docs/common.cfg", ".kokoro/docs/docs-presubmit.cfg", ".kokoro/docs/docs.cfg", + ".kokoro/populate-secrets.sh", ".kokoro/presubmit/common.cfg", ".kokoro/presubmit/presubmit.cfg", ".kokoro/publish-docs.sh", From 3a192f93a9a3f84284d90fa4bf06a8e4b5a71f98 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 20 Nov 2020 11:21:41 -0800 Subject: [PATCH 178/467] docs: removed stackdriver branding (#44) --- .../google/cloud/error_reporting/__init__.py | 2 +- .../google/cloud/error_reporting/_logging.py | 8 ++++---- .../google/cloud/error_reporting/client.py | 7 +++---- .../google/cloud/error_reporting/util.py | 6 +++--- .../samples/snippets/api/README.rst | 6 +++--- .../samples/snippets/api/README.rst.in | 4 ++-- packages/google-cloud-error-reporting/setup.py | 2 +- .../tests/system/test_system.py | 2 +- 8 files changed, 18 insertions(+), 19 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py index 9443b99e3d24..8cbe3963f519 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Client library for Stackdriver Error Reporting""" +"""Client library for Error Reporting""" from pkg_resources import get_distribution diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index 5832cc7e2d24..74369a7c5041 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Interact with Stackdriver Error Reporting via Logging API. +"""Interact with Error Reporting via Logging API. -It's possible to report Stackdriver Error Reporting errors by formatting -structured log messages in Stackdriver Logging in a given format. This +It's possible to report Error Reporting errors by formatting +structured log messages in Cloud Logging in a given format. This client provides a mechanism to report errors using that technique. """ @@ -23,7 +23,7 @@ class _ErrorReportingLoggingAPI(object): - """Report to Stackdriver Error Reporting via Logging API + """Report to Error Reporting via Logging API :type project: str :param project: the project which the client acts on behalf of. If not diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index c4cb816ead75..ce35981e11ca 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Client for interacting with the Stackdriver Error Reporting API""" +"""Client for interacting with the Error Reporting API""" import os import traceback @@ -317,7 +317,7 @@ def _send_error_report( self.report_errors_api.report_error_event(error_report) def report(self, message, http_context=None, user=None): - """ Reports a message to Stackdriver Error Reporting + """ Reports a message to Error Reporting https://cloud.google.com/error-reporting/docs/formatting-error-messages @@ -362,8 +362,7 @@ def report(self, message, http_context=None, user=None): ) def report_exception(self, http_context=None, user=None): - """ Reports the details of the latest exceptions to Stackdriver Error - Reporting. + """ Reports the details of the latest exceptions to Error Reporting. :type http_context: :class`google.cloud.error_reporting.HTTPContext` :param http_context: The HTTP request which was processed when the diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py index 151540cdb855..8f8434e9df3e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/util.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Utility functions for Stackdriver Error Reporting.""" +"""Utility functions for Error Reporting.""" from google.cloud.error_reporting.client import HTTPContext @@ -35,8 +35,8 @@ def build_flask_context(request): :param request: The Flask request object to convert. :rtype: :class:`~google.cloud.error_reporting.client.HTTPContext` - :returns: An HTTPContext object ready to be sent to the Stackdriver Error - Reporting API. + :returns: An HTTPContext object ready to be sent to the Error Reporting + API. """ return HTTPContext( url=request.url, diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst index 74bcd6397f29..fe98a482fd80 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst +++ b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst @@ -1,19 +1,19 @@ .. This file is automatically generated. Do not edit this file directly. -Stackdriver Error Reporting Python Samples +Error Reporting Python Samples =============================================================================== .. image:: https://gstatic.com/cloudssh/images/open-btn.png :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=error_reporting/api/README.rst -This directory contains samples for Stackdriver Error Reporting. `Stackdriver Error Reporting`_ aggregates and displays errors produced in +This directory contains samples for Error Reporting. `Error Reporting`_ aggregates and displays errors produced in your running cloud services. -.. _Stackdriver Error Reporting: https://cloud.google.com/error-reporting/docs/ +.. _Error Reporting: https://cloud.google.com/error-reporting/docs/ Setup ------------------------------------------------------------------------------- diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in index ac60cc80c81a..56f4080f3b70 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in +++ b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in @@ -1,11 +1,11 @@ # This file is used to generate README.rst product: - name: Stackdriver Error Reporting + name: Error Reporting short_name: Error Reporting url: https://cloud.google.com/error-reporting/docs/ description: > - `Stackdriver Error Reporting`_ aggregates and displays errors produced in + `Error Reporting`_ aggregates and displays errors produced in your running cloud services. setup: diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index fe3932ed1b6d..0c162438a5dd 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -21,7 +21,7 @@ # Package metadata. name = "google-cloud-error-reporting" -description = "Stackdriver Error Reporting API client library" +description = "Error Reporting API client library" version = "1.0.0" # Should be one of: # 'Development Status :: 3 - Alpha' diff --git a/packages/google-cloud-error-reporting/tests/system/test_system.py b/packages/google-cloud-error-reporting/tests/system/test_system.py index 77c0064602dd..28125c6a4eac 100644 --- a/packages/google-cloud-error-reporting/tests/system/test_system.py +++ b/packages/google-cloud-error-reporting/tests/system/test_system.py @@ -24,7 +24,7 @@ from test_utils.system import unique_resource_id -ERROR_MSG = "Stackdriver Error Reporting System Test" +ERROR_MSG = "Error Reporting System Test" def setUpModule(): From c69d8f43b65d68ba2d6d85d487175c3954d8a13f Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 20 Nov 2020 12:17:45 -0800 Subject: [PATCH 179/467] fix: changed import path for logging client (#43) --- .../google/cloud/error_reporting/_logging.py | 4 ++-- .../tests/unit/test__logging.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index 74369a7c5041..5e83d14894da 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -19,7 +19,7 @@ client provides a mechanism to report errors using that technique. """ -import google.cloud.logging.client +import google.cloud.logging class _ErrorReportingLoggingAPI(object): @@ -69,7 +69,7 @@ def __init__( client_info=None, client_options=None, ): - self.logging_client = google.cloud.logging.client.Client( + self.logging_client = google.cloud.logging.Client( project, credentials, _http=_http, diff --git a/packages/google-cloud-error-reporting/tests/unit/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py index 726eaabfec75..772b5229a33b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__logging.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__logging.py @@ -32,7 +32,7 @@ def _make_one(self, project, credentials, **kw): return _ErrorReportingLoggingAPI(project, credentials, **kw) - @mock.patch("google.cloud.logging.client.Client") + @mock.patch("google.cloud.logging.Client") def test_ctor_defaults(self, mocked_cls): credentials = _make_credentials() @@ -43,7 +43,7 @@ def test_ctor_defaults(self, mocked_cls): self.PROJECT, credentials, _http=None, client_info=None, client_options=None ) - @mock.patch("google.cloud.logging.client.Client") + @mock.patch("google.cloud.logging.Client") def test_ctor_explicit(self, mocked_cls): credentials = _make_credentials() http = mock.Mock() @@ -67,7 +67,7 @@ def test_ctor_explicit(self, mocked_cls): client_options=client_options, ) - @mock.patch("google.cloud.logging.client.Client") + @mock.patch("google.cloud.logging.Client") def test_report_error_event(self, mocked_cls): credentials = _make_credentials() logging_api = self._make_one(self.PROJECT, credentials) From 4466ab39cd564666a57eabc23053cd5f772b5d42 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 20 Nov 2020 22:31:47 +0100 Subject: [PATCH 180/467] chore(deps): update dependency google-cloud-logging to v2 (#39) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 0c162438a5dd..f90f5bcb6b2c 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" dependencies = [ - "google-cloud-logging>=1.14.0, <2.0dev", + "google-cloud-logging>=1.14.0, <2.1", "google-api-core[grpc] >= 1.22.0, < 2.0.0dev", "proto-plus >= 1.4.0", "libcst >= 0.2.5", From dee22f85c0948537f03f4580db7daed3c07b3daa Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Fri, 20 Nov 2020 14:24:08 -0800 Subject: [PATCH 181/467] feat: add common resource path helpers; expose client transport as property (#37) --- .../docs/errorreporting_v1beta1/types.rst | 1 + .../error_group_service/async_client.py | 66 +- .../services/error_group_service/client.py | 164 +++- .../error_group_service/transports/grpc.py | 64 +- .../transports/grpc_asyncio.py | 55 +- .../error_stats_service/async_client.py | 71 +- .../services/error_stats_service/client.py | 175 +++- .../error_stats_service/transports/grpc.py | 64 +- .../transports/grpc_asyncio.py | 55 +- .../report_errors_service/async_client.py | 60 +- .../services/report_errors_service/client.py | 164 +++- .../report_errors_service/transports/grpc.py | 64 +- .../transports/grpc_asyncio.py | 55 +- .../fixup_errorreporting_v1beta1_keywords.py | 1 + .../synth.metadata | 4 +- .../test_error_group_service.py | 676 ++++++++++------ .../test_error_stats_service.py | 757 +++++++++++------- .../test_report_errors_service.py | 631 +++++++++------ 18 files changed, 2075 insertions(+), 1052 deletions(-) diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst index 9a74e3473dcd..08851dbe7c01 100644 --- a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst @@ -3,3 +3,4 @@ Types for Google Cloud Errorreporting v1beta1 API .. automodule:: google.cloud.errorreporting_v1beta1.types :members: + :show-inheritance: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 8caf2ad71547..26c03996655d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -45,10 +45,51 @@ class ErrorGroupServiceAsyncClient: DEFAULT_MTLS_ENDPOINT = ErrorGroupServiceClient.DEFAULT_MTLS_ENDPOINT error_group_path = staticmethod(ErrorGroupServiceClient.error_group_path) + parse_error_group_path = staticmethod( + ErrorGroupServiceClient.parse_error_group_path + ) + + common_billing_account_path = staticmethod( + ErrorGroupServiceClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + ErrorGroupServiceClient.parse_common_billing_account_path + ) + + common_folder_path = staticmethod(ErrorGroupServiceClient.common_folder_path) + parse_common_folder_path = staticmethod( + ErrorGroupServiceClient.parse_common_folder_path + ) + + common_organization_path = staticmethod( + ErrorGroupServiceClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + ErrorGroupServiceClient.parse_common_organization_path + ) + + common_project_path = staticmethod(ErrorGroupServiceClient.common_project_path) + parse_common_project_path = staticmethod( + ErrorGroupServiceClient.parse_common_project_path + ) + + common_location_path = staticmethod(ErrorGroupServiceClient.common_location_path) + parse_common_location_path = staticmethod( + ErrorGroupServiceClient.parse_common_location_path + ) from_service_account_file = ErrorGroupServiceClient.from_service_account_file from_service_account_json = from_service_account_file + @property + def transport(self) -> ErrorGroupServiceTransport: + """Return the transport used by the client instance. + + Returns: + ErrorGroupServiceTransport: The transport used by the client instance. + """ + return self._client.transport + get_transport_class = functools.partial( type(ErrorGroupServiceClient).get_transport_class, type(ErrorGroupServiceClient) ) @@ -75,16 +116,19 @@ def __init__( client_options (ClientOptions): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT environment variable can also be used to override the endpoint: "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint, this is the default value for - the environment variable) and "auto" (auto switch to the default - mTLS endpoint if client SSL credentials is present). However, - the ``api_endpoint`` property takes precedence if provided. - (2) The ``client_cert_source`` property is used to provide client - SSL credentials for mutual TLS transport. If not provided, the - default SSL credentials will be used if present. + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS 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. Raises: google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport @@ -139,7 +183,8 @@ async def get_group( # Create or coerce a protobuf request object. # Sanity check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - if request is not None and any([group_name]): + has_flattened_params = any([group_name]) + if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " "the individual field arguments should be set." @@ -213,7 +258,8 @@ async def update_group( # Create or coerce a protobuf request object. # Sanity check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - if request is not None and any([group]): + has_flattened_params = any([group]) + if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " "the individual field arguments should be set." diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 3cd79780dc7b..d1656df2ef5c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -16,17 +16,19 @@ # from collections import OrderedDict +from distutils import util import os import re -from typing import Callable, Dict, Sequence, Tuple, Type, Union +from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import client_options as client_options_lib # type: ignore from google.api_core import exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials # type: ignore from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore @@ -130,6 +132,15 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): from_service_account_json = from_service_account_file + @property + def transport(self) -> ErrorGroupServiceTransport: + """Return the transport used by the client instance. + + Returns: + ErrorGroupServiceTransport: The transport used by the client instance. + """ + return self._transport + @staticmethod def error_group_path(project: str, group: str,) -> str: """Return a fully-qualified error_group string.""" @@ -141,12 +152,71 @@ def parse_error_group_path(path: str) -> Dict[str, str]: m = re.match(r"^projects/(?P.+?)/groups/(?P.+?)$", path) return m.groupdict() if m else {} + @staticmethod + def common_billing_account_path(billing_account: str,) -> str: + """Return a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path(folder: str,) -> str: + """Return a fully-qualified folder string.""" + return "folders/{folder}".format(folder=folder,) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path(organization: str,) -> str: + """Return a fully-qualified organization string.""" + return "organizations/{organization}".format(organization=organization,) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path(project: str,) -> str: + """Return a fully-qualified project string.""" + return "projects/{project}".format(project=project,) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path(project: str, location: str,) -> str: + """Return a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + def __init__( self, *, - credentials: credentials.Credentials = None, - transport: Union[str, ErrorGroupServiceTransport] = None, - client_options: ClientOptions = None, + credentials: Optional[credentials.Credentials] = None, + transport: Union[str, ErrorGroupServiceTransport, None] = None, + client_options: Optional[client_options_lib.ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiate the error group service client. @@ -160,23 +230,26 @@ def __init__( transport (Union[str, ~.ErrorGroupServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. + client_options (client_options_lib.ClientOptions): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT environment variable can also be used to override the endpoint: "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint, this is the default value for - the environment variable) and "auto" (auto switch to the default - mTLS endpoint if client SSL credentials is present). However, - the ``api_endpoint`` property takes precedence if provided. - (2) The ``client_cert_source`` property is used to provide client - SSL credentials for mutual TLS transport. If not provided, the - default SSL credentials will be used if present. - 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 + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS 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. + 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: @@ -184,29 +257,47 @@ def __init__( creation failed for any reason. """ if isinstance(client_options, dict): - client_options = ClientOptions.from_dict(client_options) + client_options = client_options_lib.from_dict(client_options) if client_options is None: - client_options = ClientOptions.ClientOptions() + client_options = client_options_lib.ClientOptions() + + # Create SSL credentials for mutual TLS if needed. + use_client_cert = bool( + util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) + ) - if client_options.api_endpoint is None: - use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS", "never") + ssl_credentials = None + is_mtls = False + if use_client_cert: + if client_options.client_cert_source: + import grpc # type: ignore + + cert, key = client_options.client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + is_mtls = True + else: + creds = SslCredentials() + is_mtls = creds.is_mtls + ssl_credentials = creds.ssl_credentials if is_mtls else None + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + else: + use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") if use_mtls_env == "never": - client_options.api_endpoint = self.DEFAULT_ENDPOINT + api_endpoint = self.DEFAULT_ENDPOINT elif use_mtls_env == "always": - client_options.api_endpoint = self.DEFAULT_MTLS_ENDPOINT + api_endpoint = self.DEFAULT_MTLS_ENDPOINT elif use_mtls_env == "auto": - has_client_cert_source = ( - client_options.client_cert_source is not None - or mtls.has_default_client_cert_source() - ) - client_options.api_endpoint = ( - self.DEFAULT_MTLS_ENDPOINT - if has_client_cert_source - else self.DEFAULT_ENDPOINT + api_endpoint = ( + self.DEFAULT_MTLS_ENDPOINT if is_mtls else self.DEFAULT_ENDPOINT ) else: raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS value. Accepted values: never, auto, always" + "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted values: never, auto, always" ) # Save or instantiate the transport. @@ -230,10 +321,9 @@ def __init__( self._transport = Transport( credentials=credentials, credentials_file=client_options.credentials_file, - host=client_options.api_endpoint, + host=api_endpoint, scopes=client_options.scopes, - api_mtls_endpoint=client_options.api_endpoint, - client_cert_source=client_options.client_cert_source, + ssl_channel_credentials=ssl_credentials, quota_project_id=client_options.quota_project_id, client_info=client_info, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index d6091a8961e3..42f0377f89d6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -15,6 +15,7 @@ # limitations under the License. # +import warnings from typing import Callable, Dict, Optional, Sequence, Tuple from google.api_core import grpc_helpers # type: ignore @@ -23,7 +24,6 @@ from google.auth import credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore - import grpc # type: ignore from google.cloud.errorreporting_v1beta1.types import common @@ -57,6 +57,7 @@ def __init__( channel: grpc.Channel = None, api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + ssl_channel_credentials: grpc.ChannelCredentials = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -77,20 +78,22 @@ def __init__( ignored if ``channel`` is provided. channel (Optional[grpc.Channel]): A ``Channel`` instance through which to make calls. - api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If - provided, it overrides the ``host`` argument and tries to create + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from ``client_cert_source`` or applicatin default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A - callback to provide client SSL certificate bytes and private key - bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` - is None. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for grpc channel. It is ignored if ``channel`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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: @@ -99,6 +102,8 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._ssl_channel_credentials = ssl_channel_credentials + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -106,7 +111,13 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel + self._ssl_channel_credentials = None elif api_mtls_endpoint: + warnings.warn( + "api_mtls_endpoint and client_cert_source are deprecated", + DeprecationWarning, + ) + host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -137,6 +148,24 @@ def __init__( scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, ) + self._ssl_channel_credentials = ssl_credentials + else: + host = host if ":" in host else host + ":443" + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_channel_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) self._stubs = {} # type: Dict[str, Callable] @@ -197,19 +226,8 @@ def create_channel( @property def grpc_channel(self) -> grpc.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. + """Return the channel designed to connect to this service. """ - # Sanity check: Only create a new channel if we do not already - # have one. - if not hasattr(self, "_grpc_channel"): - self._grpc_channel = self.create_channel( - self._host, credentials=self._credentials, - ) - - # Return the channel from cache. return self._grpc_channel @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 2386dd7f3631..c0677b8a56f1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -15,10 +15,12 @@ # limitations under the License. # +import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple from google.api_core import gapic_v1 # type: ignore from google.api_core import grpc_helpers_async # type: ignore +from google import auth # type: ignore from google.auth import credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore @@ -99,6 +101,7 @@ def __init__( channel: aio.Channel = None, api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + ssl_channel_credentials: grpc.ChannelCredentials = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -120,14 +123,16 @@ def __init__( are passed to :func:`google.auth.default`. channel (Optional[aio.Channel]): A ``Channel`` instance through which to make calls. - api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If - provided, it overrides the ``host`` argument and tries to create + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from ``client_cert_source`` or applicatin default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A - callback to provide client SSL certificate bytes and private key - bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` - is None. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for grpc channel. It is ignored if ``channel`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -142,6 +147,8 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._ssl_channel_credentials = ssl_channel_credentials + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -149,13 +156,24 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel + self._ssl_channel_credentials = None elif api_mtls_endpoint: + warnings.warn( + "api_mtls_endpoint and client_cert_source are deprecated", + DeprecationWarning, + ) + host = ( api_mtls_endpoint if ":" in api_mtls_endpoint else api_mtls_endpoint + ":443" ) + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + # Create SSL credentials with client_cert_source or application # default SSL credentials. if client_cert_source: @@ -175,6 +193,24 @@ def __init__( scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, ) + self._ssl_channel_credentials = ssl_credentials + else: + host = host if ":" in host else host + ":443" + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_channel_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) # Run the base constructor. super().__init__( @@ -195,13 +231,6 @@ def grpc_channel(self) -> aio.Channel: This property caches on the instance; repeated calls return the same channel. """ - # Sanity check: Only create a new channel if we do not already - # have one. - if not hasattr(self, "_grpc_channel"): - self._grpc_channel = self.create_channel( - self._host, credentials=self._credentials, - ) - # Return the channel from cache. return self._grpc_channel diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 96fd687e42b2..20e91256f746 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -47,9 +47,52 @@ class ErrorStatsServiceAsyncClient: DEFAULT_ENDPOINT = ErrorStatsServiceClient.DEFAULT_ENDPOINT DEFAULT_MTLS_ENDPOINT = ErrorStatsServiceClient.DEFAULT_MTLS_ENDPOINT + error_group_path = staticmethod(ErrorStatsServiceClient.error_group_path) + parse_error_group_path = staticmethod( + ErrorStatsServiceClient.parse_error_group_path + ) + + common_billing_account_path = staticmethod( + ErrorStatsServiceClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + ErrorStatsServiceClient.parse_common_billing_account_path + ) + + common_folder_path = staticmethod(ErrorStatsServiceClient.common_folder_path) + parse_common_folder_path = staticmethod( + ErrorStatsServiceClient.parse_common_folder_path + ) + + common_organization_path = staticmethod( + ErrorStatsServiceClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + ErrorStatsServiceClient.parse_common_organization_path + ) + + common_project_path = staticmethod(ErrorStatsServiceClient.common_project_path) + parse_common_project_path = staticmethod( + ErrorStatsServiceClient.parse_common_project_path + ) + + common_location_path = staticmethod(ErrorStatsServiceClient.common_location_path) + parse_common_location_path = staticmethod( + ErrorStatsServiceClient.parse_common_location_path + ) + from_service_account_file = ErrorStatsServiceClient.from_service_account_file from_service_account_json = from_service_account_file + @property + def transport(self) -> ErrorStatsServiceTransport: + """Return the transport used by the client instance. + + Returns: + ErrorStatsServiceTransport: The transport used by the client instance. + """ + return self._client.transport + get_transport_class = functools.partial( type(ErrorStatsServiceClient).get_transport_class, type(ErrorStatsServiceClient) ) @@ -76,16 +119,19 @@ def __init__( client_options (ClientOptions): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT environment variable can also be used to override the endpoint: "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint, this is the default value for - the environment variable) and "auto" (auto switch to the default - mTLS endpoint if client SSL credentials is present). However, - the ``api_endpoint`` property takes precedence if provided. - (2) The ``client_cert_source`` property is used to provide client - SSL credentials for mutual TLS transport. If not provided, the - default SSL credentials will be used if present. + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS 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. Raises: google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport @@ -158,7 +204,8 @@ async def list_group_stats( # Create or coerce a protobuf request object. # Sanity check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - if request is not None and any([project_name, time_range]): + has_flattened_params = any([project_name, time_range]) + if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " "the individual field arguments should be set." @@ -252,7 +299,8 @@ async def list_events( # Create or coerce a protobuf request object. # Sanity check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - if request is not None and any([project_name, group_id]): + has_flattened_params = any([project_name, group_id]) + if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " "the individual field arguments should be set." @@ -335,7 +383,8 @@ async def delete_events( # Create or coerce a protobuf request object. # Sanity check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - if request is not None and any([project_name]): + has_flattened_params = any([project_name]) + if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " "the individual field arguments should be set." diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 52df793a752c..f04fbfefb5a3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -16,17 +16,19 @@ # from collections import OrderedDict +from distutils import util import os import re -from typing import Callable, Dict, Sequence, Tuple, Type, Union +from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import client_options as client_options_lib # type: ignore from google.api_core import exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials # type: ignore from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore @@ -133,12 +135,91 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): from_service_account_json = from_service_account_file + @property + def transport(self) -> ErrorStatsServiceTransport: + """Return the transport used by the client instance. + + Returns: + ErrorStatsServiceTransport: The transport used by the client instance. + """ + return self._transport + + @staticmethod + def error_group_path(project: str, group: str,) -> str: + """Return a fully-qualified error_group string.""" + return "projects/{project}/groups/{group}".format(project=project, group=group,) + + @staticmethod + def parse_error_group_path(path: str) -> Dict[str, str]: + """Parse a error_group path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/groups/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path(billing_account: str,) -> str: + """Return a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path(folder: str,) -> str: + """Return a fully-qualified folder string.""" + return "folders/{folder}".format(folder=folder,) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path(organization: str,) -> str: + """Return a fully-qualified organization string.""" + return "organizations/{organization}".format(organization=organization,) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path(project: str,) -> str: + """Return a fully-qualified project string.""" + return "projects/{project}".format(project=project,) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path(project: str, location: str,) -> str: + """Return a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + def __init__( self, *, - credentials: credentials.Credentials = None, - transport: Union[str, ErrorStatsServiceTransport] = None, - client_options: ClientOptions = None, + credentials: Optional[credentials.Credentials] = None, + transport: Union[str, ErrorStatsServiceTransport, None] = None, + client_options: Optional[client_options_lib.ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiate the error stats service client. @@ -152,23 +233,26 @@ def __init__( transport (Union[str, ~.ErrorStatsServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. + client_options (client_options_lib.ClientOptions): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT environment variable can also be used to override the endpoint: "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint, this is the default value for - the environment variable) and "auto" (auto switch to the default - mTLS endpoint if client SSL credentials is present). However, - the ``api_endpoint`` property takes precedence if provided. - (2) The ``client_cert_source`` property is used to provide client - SSL credentials for mutual TLS transport. If not provided, the - default SSL credentials will be used if present. - 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 + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS 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. + 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: @@ -176,29 +260,47 @@ def __init__( creation failed for any reason. """ if isinstance(client_options, dict): - client_options = ClientOptions.from_dict(client_options) + client_options = client_options_lib.from_dict(client_options) if client_options is None: - client_options = ClientOptions.ClientOptions() + client_options = client_options_lib.ClientOptions() + + # Create SSL credentials for mutual TLS if needed. + use_client_cert = bool( + util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) + ) - if client_options.api_endpoint is None: - use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS", "never") + ssl_credentials = None + is_mtls = False + if use_client_cert: + if client_options.client_cert_source: + import grpc # type: ignore + + cert, key = client_options.client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + is_mtls = True + else: + creds = SslCredentials() + is_mtls = creds.is_mtls + ssl_credentials = creds.ssl_credentials if is_mtls else None + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + else: + use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") if use_mtls_env == "never": - client_options.api_endpoint = self.DEFAULT_ENDPOINT + api_endpoint = self.DEFAULT_ENDPOINT elif use_mtls_env == "always": - client_options.api_endpoint = self.DEFAULT_MTLS_ENDPOINT + api_endpoint = self.DEFAULT_MTLS_ENDPOINT elif use_mtls_env == "auto": - has_client_cert_source = ( - client_options.client_cert_source is not None - or mtls.has_default_client_cert_source() - ) - client_options.api_endpoint = ( - self.DEFAULT_MTLS_ENDPOINT - if has_client_cert_source - else self.DEFAULT_ENDPOINT + api_endpoint = ( + self.DEFAULT_MTLS_ENDPOINT if is_mtls else self.DEFAULT_ENDPOINT ) else: raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS value. Accepted values: never, auto, always" + "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted values: never, auto, always" ) # Save or instantiate the transport. @@ -222,10 +324,9 @@ def __init__( self._transport = Transport( credentials=credentials, credentials_file=client_options.credentials_file, - host=client_options.api_endpoint, + host=api_endpoint, scopes=client_options.scopes, - api_mtls_endpoint=client_options.api_endpoint, - client_cert_source=client_options.client_cert_source, + ssl_channel_credentials=ssl_credentials, quota_project_id=client_options.quota_project_id, client_info=client_info, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 37bfe51c0563..de3c2741bd70 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -15,6 +15,7 @@ # limitations under the License. # +import warnings from typing import Callable, Dict, Optional, Sequence, Tuple from google.api_core import grpc_helpers # type: ignore @@ -23,7 +24,6 @@ from google.auth import credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore - import grpc # type: ignore from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -57,6 +57,7 @@ def __init__( channel: grpc.Channel = None, api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + ssl_channel_credentials: grpc.ChannelCredentials = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -77,20 +78,22 @@ def __init__( ignored if ``channel`` is provided. channel (Optional[grpc.Channel]): A ``Channel`` instance through which to make calls. - api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If - provided, it overrides the ``host`` argument and tries to create + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from ``client_cert_source`` or applicatin default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A - callback to provide client SSL certificate bytes and private key - bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` - is None. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for grpc channel. It is ignored if ``channel`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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: @@ -99,6 +102,8 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._ssl_channel_credentials = ssl_channel_credentials + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -106,7 +111,13 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel + self._ssl_channel_credentials = None elif api_mtls_endpoint: + warnings.warn( + "api_mtls_endpoint and client_cert_source are deprecated", + DeprecationWarning, + ) + host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -137,6 +148,24 @@ def __init__( scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, ) + self._ssl_channel_credentials = ssl_credentials + else: + host = host if ":" in host else host + ":443" + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_channel_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) self._stubs = {} # type: Dict[str, Callable] @@ -197,19 +226,8 @@ def create_channel( @property def grpc_channel(self) -> grpc.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. + """Return the channel designed to connect to this service. """ - # Sanity check: Only create a new channel if we do not already - # have one. - if not hasattr(self, "_grpc_channel"): - self._grpc_channel = self.create_channel( - self._host, credentials=self._credentials, - ) - - # Return the channel from cache. return self._grpc_channel @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 16ba1ba8a7a8..45934770ddaa 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -15,10 +15,12 @@ # limitations under the License. # +import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple from google.api_core import gapic_v1 # type: ignore from google.api_core import grpc_helpers_async # type: ignore +from google import auth # type: ignore from google.auth import credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore @@ -99,6 +101,7 @@ def __init__( channel: aio.Channel = None, api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + ssl_channel_credentials: grpc.ChannelCredentials = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -120,14 +123,16 @@ def __init__( are passed to :func:`google.auth.default`. channel (Optional[aio.Channel]): A ``Channel`` instance through which to make calls. - api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If - provided, it overrides the ``host`` argument and tries to create + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from ``client_cert_source`` or applicatin default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A - callback to provide client SSL certificate bytes and private key - bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` - is None. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for grpc channel. It is ignored if ``channel`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -142,6 +147,8 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._ssl_channel_credentials = ssl_channel_credentials + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -149,13 +156,24 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel + self._ssl_channel_credentials = None elif api_mtls_endpoint: + warnings.warn( + "api_mtls_endpoint and client_cert_source are deprecated", + DeprecationWarning, + ) + host = ( api_mtls_endpoint if ":" in api_mtls_endpoint else api_mtls_endpoint + ":443" ) + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + # Create SSL credentials with client_cert_source or application # default SSL credentials. if client_cert_source: @@ -175,6 +193,24 @@ def __init__( scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, ) + self._ssl_channel_credentials = ssl_credentials + else: + host = host if ":" in host else host + ":443" + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_channel_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) # Run the base constructor. super().__init__( @@ -195,13 +231,6 @@ def grpc_channel(self) -> aio.Channel: This property caches on the instance; repeated calls return the same channel. """ - # Sanity check: Only create a new channel if we do not already - # have one. - if not hasattr(self, "_grpc_channel"): - self._grpc_channel = self.create_channel( - self._host, credentials=self._credentials, - ) - # Return the channel from cache. return self._grpc_channel diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index a1c281aca712..3b7c6fcf3514 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -43,9 +43,47 @@ class ReportErrorsServiceAsyncClient: DEFAULT_ENDPOINT = ReportErrorsServiceClient.DEFAULT_ENDPOINT DEFAULT_MTLS_ENDPOINT = ReportErrorsServiceClient.DEFAULT_MTLS_ENDPOINT + common_billing_account_path = staticmethod( + ReportErrorsServiceClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + ReportErrorsServiceClient.parse_common_billing_account_path + ) + + common_folder_path = staticmethod(ReportErrorsServiceClient.common_folder_path) + parse_common_folder_path = staticmethod( + ReportErrorsServiceClient.parse_common_folder_path + ) + + common_organization_path = staticmethod( + ReportErrorsServiceClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + ReportErrorsServiceClient.parse_common_organization_path + ) + + common_project_path = staticmethod(ReportErrorsServiceClient.common_project_path) + parse_common_project_path = staticmethod( + ReportErrorsServiceClient.parse_common_project_path + ) + + common_location_path = staticmethod(ReportErrorsServiceClient.common_location_path) + parse_common_location_path = staticmethod( + ReportErrorsServiceClient.parse_common_location_path + ) + from_service_account_file = ReportErrorsServiceClient.from_service_account_file from_service_account_json = from_service_account_file + @property + def transport(self) -> ReportErrorsServiceTransport: + """Return the transport used by the client instance. + + Returns: + ReportErrorsServiceTransport: The transport used by the client instance. + """ + return self._client.transport + get_transport_class = functools.partial( type(ReportErrorsServiceClient).get_transport_class, type(ReportErrorsServiceClient), @@ -73,16 +111,19 @@ def __init__( client_options (ClientOptions): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT environment variable can also be used to override the endpoint: "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint, this is the default value for - the environment variable) and "auto" (auto switch to the default - mTLS endpoint if client SSL credentials is present). However, - the ``api_endpoint`` property takes precedence if provided. - (2) The ``client_cert_source`` property is used to provide client - SSL credentials for mutual TLS transport. If not provided, the - default SSL credentials will be used if present. + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS 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. Raises: google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport @@ -151,7 +192,8 @@ async def report_error_event( # Create or coerce a protobuf request object. # Sanity check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - if request is not None and any([project_name, event]): + has_flattened_params = any([project_name, event]) + if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " "the individual field arguments should be set." diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 04e07ce85bf9..b10ecca4f68b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -16,17 +16,19 @@ # from collections import OrderedDict +from distutils import util import os import re -from typing import Callable, Dict, Sequence, Tuple, Type, Union +from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core import client_options as client_options_lib # type: ignore from google.api_core import exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials # type: ignore from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore @@ -129,12 +131,80 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): from_service_account_json = from_service_account_file + @property + def transport(self) -> ReportErrorsServiceTransport: + """Return the transport used by the client instance. + + Returns: + ReportErrorsServiceTransport: The transport used by the client instance. + """ + return self._transport + + @staticmethod + def common_billing_account_path(billing_account: str,) -> str: + """Return a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path(folder: str,) -> str: + """Return a fully-qualified folder string.""" + return "folders/{folder}".format(folder=folder,) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path(organization: str,) -> str: + """Return a fully-qualified organization string.""" + return "organizations/{organization}".format(organization=organization,) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path(project: str,) -> str: + """Return a fully-qualified project string.""" + return "projects/{project}".format(project=project,) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path(project: str, location: str,) -> str: + """Return a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + def __init__( self, *, - credentials: credentials.Credentials = None, - transport: Union[str, ReportErrorsServiceTransport] = None, - client_options: ClientOptions = None, + credentials: Optional[credentials.Credentials] = None, + transport: Union[str, ReportErrorsServiceTransport, None] = None, + client_options: Optional[client_options_lib.ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiate the report errors service client. @@ -148,23 +218,26 @@ def __init__( transport (Union[str, ~.ReportErrorsServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. + client_options (client_options_lib.ClientOptions): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT environment variable can also be used to override the endpoint: "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint, this is the default value for - the environment variable) and "auto" (auto switch to the default - mTLS endpoint if client SSL credentials is present). However, - the ``api_endpoint`` property takes precedence if provided. - (2) The ``client_cert_source`` property is used to provide client - SSL credentials for mutual TLS transport. If not provided, the - default SSL credentials will be used if present. - 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 + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS 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. + 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: @@ -172,29 +245,47 @@ def __init__( creation failed for any reason. """ if isinstance(client_options, dict): - client_options = ClientOptions.from_dict(client_options) + client_options = client_options_lib.from_dict(client_options) if client_options is None: - client_options = ClientOptions.ClientOptions() + client_options = client_options_lib.ClientOptions() - if client_options.api_endpoint is None: - use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS", "never") + # Create SSL credentials for mutual TLS if needed. + use_client_cert = bool( + util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) + ) + + ssl_credentials = None + is_mtls = False + if use_client_cert: + if client_options.client_cert_source: + import grpc # type: ignore + + cert, key = client_options.client_cert_source() + ssl_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + is_mtls = True + else: + creds = SslCredentials() + is_mtls = creds.is_mtls + ssl_credentials = creds.ssl_credentials if is_mtls else None + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + else: + use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") if use_mtls_env == "never": - client_options.api_endpoint = self.DEFAULT_ENDPOINT + api_endpoint = self.DEFAULT_ENDPOINT elif use_mtls_env == "always": - client_options.api_endpoint = self.DEFAULT_MTLS_ENDPOINT + api_endpoint = self.DEFAULT_MTLS_ENDPOINT elif use_mtls_env == "auto": - has_client_cert_source = ( - client_options.client_cert_source is not None - or mtls.has_default_client_cert_source() - ) - client_options.api_endpoint = ( - self.DEFAULT_MTLS_ENDPOINT - if has_client_cert_source - else self.DEFAULT_ENDPOINT + api_endpoint = ( + self.DEFAULT_MTLS_ENDPOINT if is_mtls else self.DEFAULT_ENDPOINT ) else: raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS value. Accepted values: never, auto, always" + "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted values: never, auto, always" ) # Save or instantiate the transport. @@ -218,10 +309,9 @@ def __init__( self._transport = Transport( credentials=credentials, credentials_file=client_options.credentials_file, - host=client_options.api_endpoint, + host=api_endpoint, scopes=client_options.scopes, - api_mtls_endpoint=client_options.api_endpoint, - client_cert_source=client_options.client_cert_source, + ssl_channel_credentials=ssl_credentials, quota_project_id=client_options.quota_project_id, client_info=client_info, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index c542ff0b1835..942b0bb0a9c5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -15,6 +15,7 @@ # limitations under the License. # +import warnings from typing import Callable, Dict, Optional, Sequence, Tuple from google.api_core import grpc_helpers # type: ignore @@ -23,7 +24,6 @@ from google.auth import credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore - import grpc # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service @@ -56,6 +56,7 @@ def __init__( channel: grpc.Channel = None, api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + ssl_channel_credentials: grpc.ChannelCredentials = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -76,20 +77,22 @@ def __init__( ignored if ``channel`` is provided. channel (Optional[grpc.Channel]): A ``Channel`` instance through which to make calls. - api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If - provided, it overrides the ``host`` argument and tries to create + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from ``client_cert_source`` or applicatin default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A - callback to provide client SSL certificate bytes and private key - bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` - is None. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for grpc channel. It is ignored if ``channel`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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: @@ -98,6 +101,8 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._ssl_channel_credentials = ssl_channel_credentials + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -105,7 +110,13 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel + self._ssl_channel_credentials = None elif api_mtls_endpoint: + warnings.warn( + "api_mtls_endpoint and client_cert_source are deprecated", + DeprecationWarning, + ) + host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -136,6 +147,24 @@ def __init__( scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, ) + self._ssl_channel_credentials = ssl_credentials + else: + host = host if ":" in host else host + ":443" + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_channel_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) self._stubs = {} # type: Dict[str, Callable] @@ -196,19 +225,8 @@ def create_channel( @property def grpc_channel(self) -> grpc.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. + """Return the channel designed to connect to this service. """ - # Sanity check: Only create a new channel if we do not already - # have one. - if not hasattr(self, "_grpc_channel"): - self._grpc_channel = self.create_channel( - self._host, credentials=self._credentials, - ) - - # Return the channel from cache. return self._grpc_channel @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index b0ed1fbafd20..6750f197bed8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -15,10 +15,12 @@ # limitations under the License. # +import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple from google.api_core import gapic_v1 # type: ignore from google.api_core import grpc_helpers_async # type: ignore +from google import auth # type: ignore from google.auth import credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore @@ -98,6 +100,7 @@ def __init__( channel: aio.Channel = None, api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, + ssl_channel_credentials: grpc.ChannelCredentials = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -119,14 +122,16 @@ def __init__( are passed to :func:`google.auth.default`. channel (Optional[aio.Channel]): A ``Channel`` instance through which to make calls. - api_mtls_endpoint (Optional[str]): The mutual TLS endpoint. If - provided, it overrides the ``host`` argument and tries to create + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from ``client_cert_source`` or applicatin default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): A - callback to provide client SSL certificate bytes and private key - bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` - is None. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for grpc channel. It is ignored if ``channel`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -141,6 +146,8 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._ssl_channel_credentials = ssl_channel_credentials + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -148,13 +155,24 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel + self._ssl_channel_credentials = None elif api_mtls_endpoint: + warnings.warn( + "api_mtls_endpoint and client_cert_source are deprecated", + DeprecationWarning, + ) + host = ( api_mtls_endpoint if ":" in api_mtls_endpoint else api_mtls_endpoint + ":443" ) + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + # Create SSL credentials with client_cert_source or application # default SSL credentials. if client_cert_source: @@ -174,6 +192,24 @@ def __init__( scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, ) + self._ssl_channel_credentials = ssl_credentials + else: + host = host if ":" in host else host + ":443" + + if credentials is None: + credentials, _ = auth.default( + scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id + ) + + # create a new channel. The provided one is ignored. + self._grpc_channel = type(self).create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + ssl_credentials=ssl_channel_credentials, + scopes=scopes or self.AUTH_SCOPES, + quota_project_id=quota_project_id, + ) # Run the base constructor. super().__init__( @@ -194,13 +230,6 @@ def grpc_channel(self) -> aio.Channel: This property caches on the instance; repeated calls return the same channel. """ - # Sanity check: Only create a new channel if we do not already - # have one. - if not hasattr(self, "_grpc_channel"): - self._grpc_channel = self.create_channel( - self._host, credentials=self._credentials, - ) - # Return the channel from cache. return self._grpc_channel diff --git a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py index fcb0bab91904..df916be1b66b 100644 --- a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py +++ b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py @@ -1,3 +1,4 @@ +#! /usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Google LLC diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 757a0a736d04..303e974def95 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -11,8 +11,8 @@ "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "4bc344a7c1b638ce317045c57d8009856aba81d3", - "internalRef": "329103436" + "sha": "24fb9e5d1f37110bfa198189c34324aa3fdb0896", + "internalRef": "339381689" } }, { diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index cf93f906e718..9fdcc41c86b2 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -99,12 +99,12 @@ def test_error_group_service_client_from_service_account_file(client_class): ) as factory: factory.return_value = creds client = client_class.from_service_account_file("dummy/file/path.json") - assert client._transport._credentials == creds + assert client.transport._credentials == creds client = client_class.from_service_account_json("dummy/file/path.json") - assert client._transport._credentials == creds + assert client.transport._credentials == creds - assert client._transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_error_group_service_client_get_transport_class(): @@ -160,15 +160,14 @@ def test_error_group_service_client_client_options( credentials_file=None, host="squid.clam.whelk", scopes=None, - api_mtls_endpoint="squid.clam.whelk", - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # 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": "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() @@ -177,15 +176,14 @@ def test_error_group_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # 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": "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() @@ -194,95 +192,185 @@ def test_error_group_service_client_client_options( credentials_file=None, host=client.DEFAULT_MTLS_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", and client_cert_source is provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + # 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): + client = client_class() + + # 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): + client = client_class() + + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + ssl_channel_credentials=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + ErrorGroupServiceClient, + transports.ErrorGroupServiceGrpcTransport, + "grpc", + "true", + ), + ( + ErrorGroupServiceAsyncClient, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + ErrorGroupServiceClient, + transports.ErrorGroupServiceGrpcTransport, + "grpc", + "false", + ), + ( + ErrorGroupServiceAsyncClient, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + ErrorGroupServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorGroupServiceClient), +) +@mock.patch.object( + ErrorGroupServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorGroupServiceAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_error_group_service_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) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=client_cert_source_callback, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) - - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", and default_client_cert_source is provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): - with mock.patch.object(transport_class, "__init__") as patched: + ssl_channel_creds = mock.Mock() with mock.patch( - "google.auth.transport.mtls.has_default_client_cert_source", - return_value=True, + "grpc.ssl_channel_credentials", return_value=ssl_channel_creds ): patched.return_value = None - client = client_class() + client = client_class(client_options=options) + + if use_client_cert_env == "false": + expected_ssl_channel_creds = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_ssl_channel_creds = ssl_channel_creds + expected_host = client.DEFAULT_MTLS_ENDPOINT + patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, + host=expected_host, scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=expected_ssl_channel_creds, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", but client_cert_source and default_client_cert_source are None. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + # 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=False, + "google.auth.transport.grpc.SslCredentials.__init__", return_value=None ): - patched.return_value = None - client = client_class() - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class() - - # 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) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + with mock.patch( + "google.auth.transport.grpc.SslCredentials.is_mtls", + new_callable=mock.PropertyMock, + ) as is_mtls_mock: + with mock.patch( + "google.auth.transport.grpc.SslCredentials.ssl_credentials", + new_callable=mock.PropertyMock, + ) as ssl_credentials_mock: + if use_client_cert_env == "false": + is_mtls_mock.return_value = False + ssl_credentials_mock.return_value = None + expected_host = client.DEFAULT_ENDPOINT + expected_ssl_channel_creds = None + else: + is_mtls_mock.return_value = True + ssl_credentials_mock.return_value = mock.Mock() + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_ssl_channel_creds = ( + ssl_credentials_mock.return_value + ) + + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + ssl_channel_credentials=expected_ssl_channel_creds, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # 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.grpc.SslCredentials.__init__", return_value=None + ): + with mock.patch( + "google.auth.transport.grpc.SslCredentials.is_mtls", + new_callable=mock.PropertyMock, + ) as is_mtls_mock: + is_mtls_mock.return_value = False + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + ssl_channel_credentials=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) @pytest.mark.parametrize( @@ -309,8 +397,7 @@ def test_error_group_service_client_client_options_scopes( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=["1", "2"], - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -340,8 +427,7 @@ def test_error_group_service_client_client_options_credentials_file( credentials_file="credentials.json", host=client.DEFAULT_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -360,8 +446,7 @@ def test_error_group_service_client_client_options_from_dict(): credentials_file=None, host="squid.clam.whelk", scopes=None, - api_mtls_endpoint="squid.clam.whelk", - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -379,7 +464,7 @@ def test_get_group( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.get_group), "__call__") as call: + with mock.patch.object(type(client.transport.get_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup( name="name_value", group_id="group_id_value", @@ -394,6 +479,7 @@ def test_get_group( assert args[0] == error_group_service.GetGroupRequest() # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) assert response.name == "name_value" @@ -406,19 +492,19 @@ def test_get_group_from_dict(): @pytest.mark.asyncio -async def test_get_group_async(transport: str = "grpc_asyncio"): +async def test_get_group_async( + transport: str = "grpc_asyncio", request_type=error_group_service.GetGroupRequest +): client = ErrorGroupServiceAsyncClient( credentials=credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, # and we are mocking out the actual API, so just send an empty request. - request = error_group_service.GetGroupRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.get_group), "__call__" - ) as call: + with mock.patch.object(type(client.transport.get_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( common.ErrorGroup(name="name_value", group_id="group_id_value",) @@ -430,7 +516,7 @@ async def test_get_group_async(transport: str = "grpc_asyncio"): assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == error_group_service.GetGroupRequest() # Establish that the response is the type that we expect. assert isinstance(response, common.ErrorGroup) @@ -440,6 +526,11 @@ async def test_get_group_async(transport: str = "grpc_asyncio"): assert response.group_id == "group_id_value" +@pytest.mark.asyncio +async def test_get_group_async_from_dict(): + await test_get_group_async(request_type=dict) + + def test_get_group_field_headers(): client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) @@ -449,7 +540,7 @@ def test_get_group_field_headers(): request.group_name = "group_name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.get_group), "__call__") as call: + with mock.patch.object(type(client.transport.get_group), "__call__") as call: call.return_value = common.ErrorGroup() client.get_group(request) @@ -476,9 +567,7 @@ async def test_get_group_field_headers_async(): request.group_name = "group_name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.get_group), "__call__" - ) as call: + with mock.patch.object(type(client.transport.get_group), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) await client.get_group(request) @@ -497,7 +586,7 @@ def test_get_group_flattened(): client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.get_group), "__call__") as call: + with mock.patch.object(type(client.transport.get_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup() @@ -531,9 +620,7 @@ async def test_get_group_flattened_async(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.get_group), "__call__" - ) as call: + with mock.patch.object(type(client.transport.get_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup() @@ -576,7 +663,7 @@ def test_update_group( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.update_group), "__call__") as call: + with mock.patch.object(type(client.transport.update_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup( name="name_value", group_id="group_id_value", @@ -591,6 +678,7 @@ def test_update_group( assert args[0] == error_group_service.UpdateGroupRequest() # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) assert response.name == "name_value" @@ -603,19 +691,19 @@ def test_update_group_from_dict(): @pytest.mark.asyncio -async def test_update_group_async(transport: str = "grpc_asyncio"): +async def test_update_group_async( + transport: str = "grpc_asyncio", request_type=error_group_service.UpdateGroupRequest +): client = ErrorGroupServiceAsyncClient( credentials=credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, # and we are mocking out the actual API, so just send an empty request. - request = error_group_service.UpdateGroupRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.update_group), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( common.ErrorGroup(name="name_value", group_id="group_id_value",) @@ -627,7 +715,7 @@ async def test_update_group_async(transport: str = "grpc_asyncio"): assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == error_group_service.UpdateGroupRequest() # Establish that the response is the type that we expect. assert isinstance(response, common.ErrorGroup) @@ -637,6 +725,11 @@ async def test_update_group_async(transport: str = "grpc_asyncio"): assert response.group_id == "group_id_value" +@pytest.mark.asyncio +async def test_update_group_async_from_dict(): + await test_update_group_async(request_type=dict) + + def test_update_group_field_headers(): client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) @@ -646,7 +739,7 @@ def test_update_group_field_headers(): request.group.name = "group.name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.update_group), "__call__") as call: + with mock.patch.object(type(client.transport.update_group), "__call__") as call: call.return_value = common.ErrorGroup() client.update_group(request) @@ -673,9 +766,7 @@ async def test_update_group_field_headers_async(): request.group.name = "group.name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.update_group), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_group), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) await client.update_group(request) @@ -694,7 +785,7 @@ def test_update_group_flattened(): client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.update_group), "__call__") as call: + with mock.patch.object(type(client.transport.update_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup() @@ -729,9 +820,7 @@ async def test_update_group_flattened_async(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.update_group), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup() @@ -801,7 +890,7 @@ def test_transport_instance(): credentials=credentials.AnonymousCredentials(), ) client = ErrorGroupServiceClient(transport=transport) - assert client._transport is transport + assert client.transport is transport def test_transport_get_channel(): @@ -819,10 +908,25 @@ def test_transport_get_channel(): assert channel +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + def test_transport_grpc_default(): # A client should use the gRPC transport by default. client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) - assert isinstance(client._transport, transports.ErrorGroupServiceGrpcTransport,) + assert isinstance(client.transport, transports.ErrorGroupServiceGrpcTransport,) def test_error_group_service_base_transport_error(): @@ -874,6 +978,17 @@ def test_error_group_service_base_transport_with_credentials_file(): ) +def test_error_group_service_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(auth, "default") as adc, mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_group_service.transports.ErrorGroupServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (credentials.AnonymousCredentials(), None) + transport = transports.ErrorGroupServiceTransport() + adc.assert_called_once() + + def test_error_group_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(auth, "default") as adc: @@ -906,7 +1021,7 @@ def test_error_group_service_host_no_port(): api_endpoint="clouderrorreporting.googleapis.com" ), ) - assert client._transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_error_group_service_host_with_port(): @@ -916,185 +1031,119 @@ def test_error_group_service_host_with_port(): api_endpoint="clouderrorreporting.googleapis.com:8000" ), ) - assert client._transport._host == "clouderrorreporting.googleapis.com:8000" + assert client.transport._host == "clouderrorreporting.googleapis.com:8000" def test_error_group_service_grpc_transport_channel(): channel = grpc.insecure_channel("http://localhost/") - # Check that if channel is provided, mtls endpoint and client_cert_source - # won't be used. - callback = mock.MagicMock() + # Check that channel is used if provided. transport = transports.ErrorGroupServiceGrpcTransport( - host="squid.clam.whelk", - channel=channel, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=callback, + host="squid.clam.whelk", channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" - assert not callback.called + assert transport._ssl_channel_credentials == None def test_error_group_service_grpc_asyncio_transport_channel(): channel = aio.insecure_channel("http://localhost/") - # Check that if channel is provided, mtls endpoint and client_cert_source - # won't be used. - callback = mock.MagicMock() + # Check that channel is used if provided. transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=callback, + host="squid.clam.whelk", channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" - assert not callback.called - - -@mock.patch("grpc.ssl_channel_credentials", autospec=True) -@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) -def test_error_group_service_grpc_transport_channel_mtls_with_client_cert_source( - grpc_create_channel, grpc_ssl_channel_cred -): - # Check that if channel is None, but api_mtls_endpoint and client_cert_source - # are provided, then a mTLS channel will be created. - mock_cred = mock.Mock() - - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred - - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - transport = transports.ErrorGroupServiceGrpcTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel - - -@mock.patch("grpc.ssl_channel_credentials", autospec=True) -@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) -def test_error_group_service_grpc_asyncio_transport_channel_mtls_with_client_cert_source( - grpc_create_channel, grpc_ssl_channel_cred -): - # Check that if channel is None, but api_mtls_endpoint and client_cert_source - # are provided, then a mTLS channel will be created. - mock_cred = mock.Mock() - - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred - - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == None @pytest.mark.parametrize( - "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] + "transport_class", + [ + transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + ], ) -@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) -def test_error_group_service_grpc_transport_channel_mtls_with_adc( - grpc_create_channel, api_mtls_endpoint +def test_error_group_service_transport_channel_mtls_with_client_cert_source( + transport_class, ): - # Check that if channel and client_cert_source are None, but api_mtls_endpoint - # is provided, then a mTLS channel will be created with SSL ADC. - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - # Mock google.auth.transport.grpc.SslCredentials class. - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - mock_cred = mock.Mock() - transport = transports.ErrorGroupServiceGrpcTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint=api_mtls_endpoint, - client_cert_source=None, - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel", autospec=True + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred @pytest.mark.parametrize( - "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] + "transport_class", + [ + transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + ], ) -@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) -def test_error_group_service_grpc_asyncio_transport_channel_mtls_with_adc( - grpc_create_channel, api_mtls_endpoint -): - # Check that if channel and client_cert_source are None, but api_mtls_endpoint - # is provided, then a mTLS channel will be created with SSL ADC. - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - # Mock google.auth.transport.grpc.SslCredentials class. +def test_error_group_service_transport_channel_mtls_with_adc(transport_class): mock_ssl_cred = mock.Mock() with mock.patch.multiple( "google.auth.transport.grpc.SslCredentials", __init__=mock.Mock(return_value=None), ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), ): - mock_cred = mock.Mock() - transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint=api_mtls_endpoint, - client_cert_source=None, - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel + with mock.patch.object( + transport_class, "create_channel", autospec=True + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel def test_error_group_path(): @@ -1118,6 +1167,107 @@ def test_parse_error_group_path(): assert expected == actual +def test_common_billing_account_path(): + billing_account = "oyster" + + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = ErrorGroupServiceClient.common_billing_account_path(billing_account) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "nudibranch", + } + path = ErrorGroupServiceClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorGroupServiceClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "cuttlefish" + + expected = "folders/{folder}".format(folder=folder,) + actual = ErrorGroupServiceClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "mussel", + } + path = ErrorGroupServiceClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorGroupServiceClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "winkle" + + expected = "organizations/{organization}".format(organization=organization,) + actual = ErrorGroupServiceClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "nautilus", + } + path = ErrorGroupServiceClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorGroupServiceClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "scallop" + + expected = "projects/{project}".format(project=project,) + actual = ErrorGroupServiceClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "abalone", + } + path = ErrorGroupServiceClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorGroupServiceClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "squid" + location = "clam" + + expected = "projects/{project}/locations/{location}".format( + project=project, location=location, + ) + actual = ErrorGroupServiceClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "whelk", + "location": "octopus", + } + path = ErrorGroupServiceClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorGroupServiceClient.parse_common_location_path(path) + assert expected == actual + + def test_client_withDEFAULT_CLIENT_INFO(): client_info = gapic_v1.client_info.ClientInfo() diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index d0f5fcf1e124..65bc5277fa51 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -102,12 +102,12 @@ def test_error_stats_service_client_from_service_account_file(client_class): ) as factory: factory.return_value = creds client = client_class.from_service_account_file("dummy/file/path.json") - assert client._transport._credentials == creds + assert client.transport._credentials == creds client = client_class.from_service_account_json("dummy/file/path.json") - assert client._transport._credentials == creds + assert client.transport._credentials == creds - assert client._transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_error_stats_service_client_get_transport_class(): @@ -163,15 +163,14 @@ def test_error_stats_service_client_client_options( credentials_file=None, host="squid.clam.whelk", scopes=None, - api_mtls_endpoint="squid.clam.whelk", - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # 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": "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() @@ -180,15 +179,14 @@ def test_error_stats_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # 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": "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() @@ -197,95 +195,185 @@ def test_error_stats_service_client_client_options( credentials_file=None, host=client.DEFAULT_MTLS_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", and client_cert_source is provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + # 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): + client = client_class() + + # 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): + client = client_class() + + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + ssl_channel_credentials=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + ErrorStatsServiceClient, + transports.ErrorStatsServiceGrpcTransport, + "grpc", + "true", + ), + ( + ErrorStatsServiceAsyncClient, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + ErrorStatsServiceClient, + transports.ErrorStatsServiceGrpcTransport, + "grpc", + "false", + ), + ( + ErrorStatsServiceAsyncClient, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + ErrorStatsServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorStatsServiceClient), +) +@mock.patch.object( + ErrorStatsServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorStatsServiceAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_error_stats_service_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) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=client_cert_source_callback, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) - - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", and default_client_cert_source is provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): - with mock.patch.object(transport_class, "__init__") as patched: + ssl_channel_creds = mock.Mock() with mock.patch( - "google.auth.transport.mtls.has_default_client_cert_source", - return_value=True, + "grpc.ssl_channel_credentials", return_value=ssl_channel_creds ): patched.return_value = None - client = client_class() + client = client_class(client_options=options) + + if use_client_cert_env == "false": + expected_ssl_channel_creds = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_ssl_channel_creds = ssl_channel_creds + expected_host = client.DEFAULT_MTLS_ENDPOINT + patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, + host=expected_host, scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=expected_ssl_channel_creds, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", but client_cert_source and default_client_cert_source are None. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + # 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=False, + "google.auth.transport.grpc.SslCredentials.__init__", return_value=None ): - patched.return_value = None - client = client_class() - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class() - - # 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) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + with mock.patch( + "google.auth.transport.grpc.SslCredentials.is_mtls", + new_callable=mock.PropertyMock, + ) as is_mtls_mock: + with mock.patch( + "google.auth.transport.grpc.SslCredentials.ssl_credentials", + new_callable=mock.PropertyMock, + ) as ssl_credentials_mock: + if use_client_cert_env == "false": + is_mtls_mock.return_value = False + ssl_credentials_mock.return_value = None + expected_host = client.DEFAULT_ENDPOINT + expected_ssl_channel_creds = None + else: + is_mtls_mock.return_value = True + ssl_credentials_mock.return_value = mock.Mock() + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_ssl_channel_creds = ( + ssl_credentials_mock.return_value + ) + + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + ssl_channel_credentials=expected_ssl_channel_creds, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # 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.grpc.SslCredentials.__init__", return_value=None + ): + with mock.patch( + "google.auth.transport.grpc.SslCredentials.is_mtls", + new_callable=mock.PropertyMock, + ) as is_mtls_mock: + is_mtls_mock.return_value = False + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + ssl_channel_credentials=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) @pytest.mark.parametrize( @@ -312,8 +400,7 @@ def test_error_stats_service_client_client_options_scopes( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=["1", "2"], - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -343,8 +430,7 @@ def test_error_stats_service_client_client_options_credentials_file( credentials_file="credentials.json", host=client.DEFAULT_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -363,8 +449,7 @@ def test_error_stats_service_client_client_options_from_dict(): credentials_file=None, host="squid.clam.whelk", scopes=None, - api_mtls_endpoint="squid.clam.whelk", - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -382,9 +467,7 @@ def test_list_group_stats( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._transport.list_group_stats), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.ListGroupStatsResponse( next_page_token="next_page_token_value", @@ -399,6 +482,7 @@ def test_list_group_stats( assert args[0] == error_stats_service.ListGroupStatsRequest() # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListGroupStatsPager) assert response.next_page_token == "next_page_token_value" @@ -409,19 +493,20 @@ def test_list_group_stats_from_dict(): @pytest.mark.asyncio -async def test_list_group_stats_async(transport: str = "grpc_asyncio"): +async def test_list_group_stats_async( + transport: str = "grpc_asyncio", + request_type=error_stats_service.ListGroupStatsRequest, +): client = ErrorStatsServiceAsyncClient( credentials=credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, # and we are mocking out the actual API, so just send an empty request. - request = error_stats_service.ListGroupStatsRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.list_group_stats), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.ListGroupStatsResponse( @@ -435,7 +520,7 @@ async def test_list_group_stats_async(transport: str = "grpc_asyncio"): assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == error_stats_service.ListGroupStatsRequest() # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListGroupStatsAsyncPager) @@ -443,6 +528,11 @@ async def test_list_group_stats_async(transport: str = "grpc_asyncio"): assert response.next_page_token == "next_page_token_value" +@pytest.mark.asyncio +async def test_list_group_stats_async_from_dict(): + await test_list_group_stats_async(request_type=dict) + + def test_list_group_stats_field_headers(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) @@ -452,9 +542,7 @@ def test_list_group_stats_field_headers(): request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._transport.list_group_stats), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: call.return_value = error_stats_service.ListGroupStatsResponse() client.list_group_stats(request) @@ -483,9 +571,7 @@ async def test_list_group_stats_field_headers_async(): request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.list_group_stats), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.ListGroupStatsResponse() ) @@ -508,9 +594,7 @@ def test_list_group_stats_flattened(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._transport.list_group_stats), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.ListGroupStatsResponse() @@ -557,9 +641,7 @@ async def test_list_group_stats_flattened_async(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.list_group_stats), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.ListGroupStatsResponse() @@ -609,9 +691,7 @@ def test_list_group_stats_pager(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._transport.list_group_stats), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( error_stats_service.ListGroupStatsResponse( @@ -655,9 +735,7 @@ def test_list_group_stats_pages(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._transport.list_group_stats), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( error_stats_service.ListGroupStatsResponse( @@ -694,9 +772,7 @@ async def test_list_group_stats_async_pager(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._client._transport.list_group_stats), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.list_group_stats), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( @@ -741,9 +817,7 @@ async def test_list_group_stats_async_pages(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._client._transport.list_group_stats), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.list_group_stats), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( @@ -789,7 +863,7 @@ def test_list_events( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.list_events), "__call__") as call: + with mock.patch.object(type(client.transport.list_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.ListEventsResponse( next_page_token="next_page_token_value", @@ -804,6 +878,7 @@ def test_list_events( assert args[0] == error_stats_service.ListEventsRequest() # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListEventsPager) assert response.next_page_token == "next_page_token_value" @@ -814,19 +889,19 @@ def test_list_events_from_dict(): @pytest.mark.asyncio -async def test_list_events_async(transport: str = "grpc_asyncio"): +async def test_list_events_async( + transport: str = "grpc_asyncio", request_type=error_stats_service.ListEventsRequest +): client = ErrorStatsServiceAsyncClient( credentials=credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, # and we are mocking out the actual API, so just send an empty request. - request = error_stats_service.ListEventsRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.list_events), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.ListEventsResponse( @@ -840,7 +915,7 @@ async def test_list_events_async(transport: str = "grpc_asyncio"): assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == error_stats_service.ListEventsRequest() # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListEventsAsyncPager) @@ -848,6 +923,11 @@ async def test_list_events_async(transport: str = "grpc_asyncio"): assert response.next_page_token == "next_page_token_value" +@pytest.mark.asyncio +async def test_list_events_async_from_dict(): + await test_list_events_async(request_type=dict) + + def test_list_events_field_headers(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) @@ -857,7 +937,7 @@ def test_list_events_field_headers(): request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.list_events), "__call__") as call: + with mock.patch.object(type(client.transport.list_events), "__call__") as call: call.return_value = error_stats_service.ListEventsResponse() client.list_events(request) @@ -886,9 +966,7 @@ async def test_list_events_field_headers_async(): request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.list_events), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_events), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.ListEventsResponse() ) @@ -911,7 +989,7 @@ def test_list_events_flattened(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.list_events), "__call__") as call: + with mock.patch.object(type(client.transport.list_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.ListEventsResponse() @@ -951,9 +1029,7 @@ async def test_list_events_flattened_async(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.list_events), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.ListEventsResponse() @@ -996,7 +1072,7 @@ def test_list_events_pager(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.list_events), "__call__") as call: + with mock.patch.object(type(client.transport.list_events), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( error_stats_service.ListEventsResponse( @@ -1036,7 +1112,7 @@ def test_list_events_pages(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.list_events), "__call__") as call: + with mock.patch.object(type(client.transport.list_events), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( error_stats_service.ListEventsResponse( @@ -1069,9 +1145,7 @@ async def test_list_events_async_pager(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._client._transport.list_events), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.list_events), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( @@ -1110,9 +1184,7 @@ async def test_list_events_async_pages(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._client._transport.list_events), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.list_events), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( @@ -1154,7 +1226,7 @@ def test_delete_events( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.delete_events), "__call__") as call: + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.DeleteEventsResponse() @@ -1167,6 +1239,7 @@ def test_delete_events( assert args[0] == error_stats_service.DeleteEventsRequest() # Establish that the response is the type that we expect. + assert isinstance(response, error_stats_service.DeleteEventsResponse) @@ -1175,19 +1248,20 @@ def test_delete_events_from_dict(): @pytest.mark.asyncio -async def test_delete_events_async(transport: str = "grpc_asyncio"): +async def test_delete_events_async( + transport: str = "grpc_asyncio", + request_type=error_stats_service.DeleteEventsRequest, +): client = ErrorStatsServiceAsyncClient( credentials=credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, # and we are mocking out the actual API, so just send an empty request. - request = error_stats_service.DeleteEventsRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.delete_events), "__call__" - ) as call: + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.DeleteEventsResponse() @@ -1199,12 +1273,17 @@ async def test_delete_events_async(transport: str = "grpc_asyncio"): assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == error_stats_service.DeleteEventsRequest() # Establish that the response is the type that we expect. assert isinstance(response, error_stats_service.DeleteEventsResponse) +@pytest.mark.asyncio +async def test_delete_events_async_from_dict(): + await test_delete_events_async(request_type=dict) + + def test_delete_events_field_headers(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) @@ -1214,7 +1293,7 @@ def test_delete_events_field_headers(): request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.delete_events), "__call__") as call: + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: call.return_value = error_stats_service.DeleteEventsResponse() client.delete_events(request) @@ -1243,9 +1322,7 @@ async def test_delete_events_field_headers_async(): request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.delete_events), "__call__" - ) as call: + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.DeleteEventsResponse() ) @@ -1268,7 +1345,7 @@ def test_delete_events_flattened(): client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client._transport.delete_events), "__call__") as call: + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.DeleteEventsResponse() @@ -1303,9 +1380,7 @@ async def test_delete_events_flattened_async(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client._client._transport.delete_events), "__call__" - ) as call: + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.DeleteEventsResponse() @@ -1375,7 +1450,7 @@ def test_transport_instance(): credentials=credentials.AnonymousCredentials(), ) client = ErrorStatsServiceClient(transport=transport) - assert client._transport is transport + assert client.transport is transport def test_transport_get_channel(): @@ -1393,10 +1468,25 @@ def test_transport_get_channel(): assert channel +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + def test_transport_grpc_default(): # A client should use the gRPC transport by default. client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) - assert isinstance(client._transport, transports.ErrorStatsServiceGrpcTransport,) + assert isinstance(client.transport, transports.ErrorStatsServiceGrpcTransport,) def test_error_stats_service_base_transport_error(): @@ -1449,6 +1539,17 @@ def test_error_stats_service_base_transport_with_credentials_file(): ) +def test_error_stats_service_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(auth, "default") as adc, mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.ErrorStatsServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (credentials.AnonymousCredentials(), None) + transport = transports.ErrorStatsServiceTransport() + adc.assert_called_once() + + def test_error_stats_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(auth, "default") as adc: @@ -1481,7 +1582,7 @@ def test_error_stats_service_host_no_port(): api_endpoint="clouderrorreporting.googleapis.com" ), ) - assert client._transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_error_stats_service_host_with_port(): @@ -1491,185 +1592,241 @@ def test_error_stats_service_host_with_port(): api_endpoint="clouderrorreporting.googleapis.com:8000" ), ) - assert client._transport._host == "clouderrorreporting.googleapis.com:8000" + assert client.transport._host == "clouderrorreporting.googleapis.com:8000" def test_error_stats_service_grpc_transport_channel(): channel = grpc.insecure_channel("http://localhost/") - # Check that if channel is provided, mtls endpoint and client_cert_source - # won't be used. - callback = mock.MagicMock() + # Check that channel is used if provided. transport = transports.ErrorStatsServiceGrpcTransport( - host="squid.clam.whelk", - channel=channel, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=callback, + host="squid.clam.whelk", channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" - assert not callback.called + assert transport._ssl_channel_credentials == None def test_error_stats_service_grpc_asyncio_transport_channel(): channel = aio.insecure_channel("http://localhost/") - # Check that if channel is provided, mtls endpoint and client_cert_source - # won't be used. - callback = mock.MagicMock() + # Check that channel is used if provided. transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=callback, + host="squid.clam.whelk", channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" - assert not callback.called + assert transport._ssl_channel_credentials == None -@mock.patch("grpc.ssl_channel_credentials", autospec=True) -@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) -def test_error_stats_service_grpc_transport_channel_mtls_with_client_cert_source( - grpc_create_channel, grpc_ssl_channel_cred +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + ], +) +def test_error_stats_service_transport_channel_mtls_with_client_cert_source( + transport_class, ): - # Check that if channel is None, but api_mtls_endpoint and client_cert_source - # are provided, then a mTLS channel will be created. - mock_cred = mock.Mock() + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel", autospec=True + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + ], +) +def test_error_stats_service_transport_channel_mtls_with_adc(transport_class): mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object( + transport_class, "create_channel", autospec=True + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - transport = transports.ErrorStatsServiceGrpcTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel +def test_error_group_path(): + project = "squid" + group = "clam" + expected = "projects/{project}/groups/{group}".format(project=project, group=group,) + actual = ErrorStatsServiceClient.error_group_path(project, group) + assert expected == actual -@mock.patch("grpc.ssl_channel_credentials", autospec=True) -@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) -def test_error_stats_service_grpc_asyncio_transport_channel_mtls_with_client_cert_source( - grpc_create_channel, grpc_ssl_channel_cred -): - # Check that if channel is None, but api_mtls_endpoint and client_cert_source - # are provided, then a mTLS channel will be created. - mock_cred = mock.Mock() - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred +def test_parse_error_group_path(): + expected = { + "project": "whelk", + "group": "octopus", + } + path = ErrorStatsServiceClient.error_group_path(**expected) - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel + # Check that the path construction is reversible. + actual = ErrorStatsServiceClient.parse_error_group_path(path) + assert expected == actual - transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, + +def test_common_billing_account_path(): + billing_account = "oyster" + + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, ) - assert transport.grpc_channel == mock_grpc_channel + actual = ErrorStatsServiceClient.common_billing_account_path(billing_account) + assert expected == actual -@pytest.mark.parametrize( - "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] -) -@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) -def test_error_stats_service_grpc_transport_channel_mtls_with_adc( - grpc_create_channel, api_mtls_endpoint -): - # Check that if channel and client_cert_source are None, but api_mtls_endpoint - # is provided, then a mTLS channel will be created with SSL ADC. - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "nudibranch", + } + path = ErrorStatsServiceClient.common_billing_account_path(**expected) - # Mock google.auth.transport.grpc.SslCredentials class. - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - mock_cred = mock.Mock() - transport = transports.ErrorStatsServiceGrpcTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint=api_mtls_endpoint, - client_cert_source=None, - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel + # Check that the path construction is reversible. + actual = ErrorStatsServiceClient.parse_common_billing_account_path(path) + assert expected == actual -@pytest.mark.parametrize( - "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] -) -@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) -def test_error_stats_service_grpc_asyncio_transport_channel_mtls_with_adc( - grpc_create_channel, api_mtls_endpoint -): - # Check that if channel and client_cert_source are None, but api_mtls_endpoint - # is provided, then a mTLS channel will be created with SSL ADC. - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel +def test_common_folder_path(): + folder = "cuttlefish" - # Mock google.auth.transport.grpc.SslCredentials class. - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - mock_cred = mock.Mock() - transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint=api_mtls_endpoint, - client_cert_source=None, - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel + expected = "folders/{folder}".format(folder=folder,) + actual = ErrorStatsServiceClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "mussel", + } + path = ErrorStatsServiceClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorStatsServiceClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "winkle" + + expected = "organizations/{organization}".format(organization=organization,) + actual = ErrorStatsServiceClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "nautilus", + } + path = ErrorStatsServiceClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorStatsServiceClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "scallop" + + expected = "projects/{project}".format(project=project,) + actual = ErrorStatsServiceClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "abalone", + } + path = ErrorStatsServiceClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorStatsServiceClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "squid" + location = "clam" + + expected = "projects/{project}/locations/{location}".format( + project=project, location=location, + ) + actual = ErrorStatsServiceClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "whelk", + "location": "octopus", + } + path = ErrorStatsServiceClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = ErrorStatsServiceClient.parse_common_location_path(path) + assert expected == actual def test_client_withDEFAULT_CLIENT_INFO(): diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index c3778272f933..a9605f5218ce 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -102,12 +102,12 @@ def test_report_errors_service_client_from_service_account_file(client_class): ) as factory: factory.return_value = creds client = client_class.from_service_account_file("dummy/file/path.json") - assert client._transport._credentials == creds + assert client.transport._credentials == creds client = client_class.from_service_account_json("dummy/file/path.json") - assert client._transport._credentials == creds + assert client.transport._credentials == creds - assert client._transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_report_errors_service_client_get_transport_class(): @@ -167,15 +167,14 @@ def test_report_errors_service_client_client_options( credentials_file=None, host="squid.clam.whelk", scopes=None, - api_mtls_endpoint="squid.clam.whelk", - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # 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": "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() @@ -184,15 +183,14 @@ def test_report_errors_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS is + # 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": "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() @@ -201,95 +199,185 @@ def test_report_errors_service_client_client_options( credentials_file=None, host=client.DEFAULT_MTLS_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", and client_cert_source is provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + # 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): + client = client_class() + + # 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): + client = client_class() + + # 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) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + ssl_channel_credentials=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceGrpcTransport, + "grpc", + "true", + ), + ( + ReportErrorsServiceAsyncClient, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceGrpcTransport, + "grpc", + "false", + ), + ( + ReportErrorsServiceAsyncClient, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + ReportErrorsServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ReportErrorsServiceClient), +) +@mock.patch.object( + ReportErrorsServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ReportErrorsServiceAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_report_errors_service_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) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=client_cert_source_callback, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) - - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", and default_client_cert_source is provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): - with mock.patch.object(transport_class, "__init__") as patched: + ssl_channel_creds = mock.Mock() with mock.patch( - "google.auth.transport.mtls.has_default_client_cert_source", - return_value=True, + "grpc.ssl_channel_credentials", return_value=ssl_channel_creds ): patched.return_value = None - client = client_class() + client = client_class(client_options=options) + + if use_client_cert_env == "false": + expected_ssl_channel_creds = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_ssl_channel_creds = ssl_channel_creds + expected_host = client.DEFAULT_MTLS_ENDPOINT + patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, + host=expected_host, scopes=None, - api_mtls_endpoint=client.DEFAULT_MTLS_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=expected_ssl_channel_creds, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) - # Check the case api_endpoint is not provided, GOOGLE_API_USE_MTLS is - # "auto", but client_cert_source and default_client_cert_source are None. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "auto"}): + # 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=False, + "google.auth.transport.grpc.SslCredentials.__init__", return_value=None ): - patched.return_value = None - client = client_class() - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class() - - # 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) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + with mock.patch( + "google.auth.transport.grpc.SslCredentials.is_mtls", + new_callable=mock.PropertyMock, + ) as is_mtls_mock: + with mock.patch( + "google.auth.transport.grpc.SslCredentials.ssl_credentials", + new_callable=mock.PropertyMock, + ) as ssl_credentials_mock: + if use_client_cert_env == "false": + is_mtls_mock.return_value = False + ssl_credentials_mock.return_value = None + expected_host = client.DEFAULT_ENDPOINT + expected_ssl_channel_creds = None + else: + is_mtls_mock.return_value = True + ssl_credentials_mock.return_value = mock.Mock() + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_ssl_channel_creds = ( + ssl_credentials_mock.return_value + ) + + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + ssl_channel_credentials=expected_ssl_channel_creds, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + + # 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.grpc.SslCredentials.__init__", return_value=None + ): + with mock.patch( + "google.auth.transport.grpc.SslCredentials.is_mtls", + new_callable=mock.PropertyMock, + ) as is_mtls_mock: + is_mtls_mock.return_value = False + patched.return_value = None + client = client_class() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + ssl_channel_credentials=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) @pytest.mark.parametrize( @@ -320,8 +408,7 @@ def test_report_errors_service_client_client_options_scopes( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=["1", "2"], - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -355,8 +442,7 @@ def test_report_errors_service_client_client_options_credentials_file( credentials_file="credentials.json", host=client.DEFAULT_ENDPOINT, scopes=None, - api_mtls_endpoint=client.DEFAULT_ENDPOINT, - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -375,8 +461,7 @@ def test_report_errors_service_client_client_options_from_dict(): credentials_file=None, host="squid.clam.whelk", scopes=None, - api_mtls_endpoint="squid.clam.whelk", - client_cert_source=None, + ssl_channel_credentials=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -395,7 +480,7 @@ def test_report_error_event( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._transport.report_error_event), "__call__" + type(client.transport.report_error_event), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = report_errors_service.ReportErrorEventResponse() @@ -409,6 +494,7 @@ def test_report_error_event( assert args[0] == report_errors_service.ReportErrorEventRequest() # Establish that the response is the type that we expect. + assert isinstance(response, report_errors_service.ReportErrorEventResponse) @@ -417,18 +503,21 @@ def test_report_error_event_from_dict(): @pytest.mark.asyncio -async def test_report_error_event_async(transport: str = "grpc_asyncio"): +async def test_report_error_event_async( + transport: str = "grpc_asyncio", + request_type=report_errors_service.ReportErrorEventRequest, +): client = ReportErrorsServiceAsyncClient( credentials=credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, # and we are mocking out the actual API, so just send an empty request. - request = report_errors_service.ReportErrorEventRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._client._transport.report_error_event), "__call__" + type(client.transport.report_error_event), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( @@ -441,12 +530,17 @@ async def test_report_error_event_async(transport: str = "grpc_asyncio"): assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == report_errors_service.ReportErrorEventRequest() # Establish that the response is the type that we expect. assert isinstance(response, report_errors_service.ReportErrorEventResponse) +@pytest.mark.asyncio +async def test_report_error_event_async_from_dict(): + await test_report_error_event_async(request_type=dict) + + def test_report_error_event_field_headers(): client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) @@ -457,7 +551,7 @@ def test_report_error_event_field_headers(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._transport.report_error_event), "__call__" + type(client.transport.report_error_event), "__call__" ) as call: call.return_value = report_errors_service.ReportErrorEventResponse() @@ -488,7 +582,7 @@ async def test_report_error_event_field_headers_async(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._client._transport.report_error_event), "__call__" + type(client.transport.report_error_event), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( report_errors_service.ReportErrorEventResponse() @@ -513,7 +607,7 @@ def test_report_error_event_flattened(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._transport.report_error_event), "__call__" + type(client.transport.report_error_event), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = report_errors_service.ReportErrorEventResponse() @@ -562,7 +656,7 @@ async def test_report_error_event_flattened_async(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client._client._transport.report_error_event), "__call__" + type(client.transport.report_error_event), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = report_errors_service.ReportErrorEventResponse() @@ -645,7 +739,7 @@ def test_transport_instance(): credentials=credentials.AnonymousCredentials(), ) client = ReportErrorsServiceClient(transport=transport) - assert client._transport is transport + assert client.transport is transport def test_transport_get_channel(): @@ -663,10 +757,25 @@ def test_transport_get_channel(): assert channel +@pytest.mark.parametrize( + "transport_class", + [ + transports.ReportErrorsServiceGrpcTransport, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(auth, "default") as adc: + adc.return_value = (credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + def test_transport_grpc_default(): # A client should use the gRPC transport by default. client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) - assert isinstance(client._transport, transports.ReportErrorsServiceGrpcTransport,) + assert isinstance(client.transport, transports.ReportErrorsServiceGrpcTransport,) def test_report_errors_service_base_transport_error(): @@ -715,6 +824,17 @@ def test_report_errors_service_base_transport_with_credentials_file(): ) +def test_report_errors_service_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(auth, "default") as adc, mock.patch( + "google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.ReportErrorsServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (credentials.AnonymousCredentials(), None) + transport = transports.ReportErrorsServiceTransport() + adc.assert_called_once() + + def test_report_errors_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(auth, "default") as adc: @@ -747,7 +867,7 @@ def test_report_errors_service_host_no_port(): api_endpoint="clouderrorreporting.googleapis.com" ), ) - assert client._transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_report_errors_service_host_with_port(): @@ -757,185 +877,220 @@ def test_report_errors_service_host_with_port(): api_endpoint="clouderrorreporting.googleapis.com:8000" ), ) - assert client._transport._host == "clouderrorreporting.googleapis.com:8000" + assert client.transport._host == "clouderrorreporting.googleapis.com:8000" def test_report_errors_service_grpc_transport_channel(): channel = grpc.insecure_channel("http://localhost/") - # Check that if channel is provided, mtls endpoint and client_cert_source - # won't be used. - callback = mock.MagicMock() + # Check that channel is used if provided. transport = transports.ReportErrorsServiceGrpcTransport( - host="squid.clam.whelk", - channel=channel, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=callback, + host="squid.clam.whelk", channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" - assert not callback.called + assert transport._ssl_channel_credentials == None def test_report_errors_service_grpc_asyncio_transport_channel(): channel = aio.insecure_channel("http://localhost/") - # Check that if channel is provided, mtls endpoint and client_cert_source - # won't be used. - callback = mock.MagicMock() + # Check that channel is used if provided. transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=callback, + host="squid.clam.whelk", channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" - assert not callback.called + assert transport._ssl_channel_credentials == None -@mock.patch("grpc.ssl_channel_credentials", autospec=True) -@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) -def test_report_errors_service_grpc_transport_channel_mtls_with_client_cert_source( - grpc_create_channel, grpc_ssl_channel_cred +@pytest.mark.parametrize( + "transport_class", + [ + transports.ReportErrorsServiceGrpcTransport, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + ], +) +def test_report_errors_service_transport_channel_mtls_with_client_cert_source( + transport_class, ): - # Check that if channel is None, but api_mtls_endpoint and client_cert_source - # are provided, then a mTLS channel will be created. - mock_cred = mock.Mock() + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel", autospec=True + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + +@pytest.mark.parametrize( + "transport_class", + [ + transports.ReportErrorsServiceGrpcTransport, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + ], +) +def test_report_errors_service_transport_channel_mtls_with_adc(transport_class): mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object( + transport_class, "create_channel", autospec=True + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel - transport = transports.ReportErrorsServiceGrpcTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, + +def test_common_billing_account_path(): + billing_account = "squid" + + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, ) - assert transport.grpc_channel == mock_grpc_channel + actual = ReportErrorsServiceClient.common_billing_account_path(billing_account) + assert expected == actual -@mock.patch("grpc.ssl_channel_credentials", autospec=True) -@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) -def test_report_errors_service_grpc_asyncio_transport_channel_mtls_with_client_cert_source( - grpc_create_channel, grpc_ssl_channel_cred -): - # Check that if channel is None, but api_mtls_endpoint and client_cert_source - # are provided, then a mTLS channel will be created. - mock_cred = mock.Mock() +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "clam", + } + path = ReportErrorsServiceClient.common_billing_account_path(**expected) - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred + # Check that the path construction is reversible. + actual = ReportErrorsServiceClient.parse_common_billing_account_path(path) + assert expected == actual - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel +def test_common_folder_path(): + folder = "whelk" + expected = "folders/{folder}".format(folder=folder,) + actual = ReportErrorsServiceClient.common_folder_path(folder) + assert expected == actual -@pytest.mark.parametrize( - "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] -) -@mock.patch("google.api_core.grpc_helpers.create_channel", autospec=True) -def test_report_errors_service_grpc_transport_channel_mtls_with_adc( - grpc_create_channel, api_mtls_endpoint -): - # Check that if channel and client_cert_source are None, but api_mtls_endpoint - # is provided, then a mTLS channel will be created with SSL ADC. - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - # Mock google.auth.transport.grpc.SslCredentials class. - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - mock_cred = mock.Mock() - transport = transports.ReportErrorsServiceGrpcTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint=api_mtls_endpoint, - client_cert_source=None, - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel +def test_parse_common_folder_path(): + expected = { + "folder": "octopus", + } + path = ReportErrorsServiceClient.common_folder_path(**expected) + # Check that the path construction is reversible. + actual = ReportErrorsServiceClient.parse_common_folder_path(path) + assert expected == actual -@pytest.mark.parametrize( - "api_mtls_endpoint", ["mtls.squid.clam.whelk", "mtls.squid.clam.whelk:443"] -) -@mock.patch("google.api_core.grpc_helpers_async.create_channel", autospec=True) -def test_report_errors_service_grpc_asyncio_transport_channel_mtls_with_adc( - grpc_create_channel, api_mtls_endpoint -): - # Check that if channel and client_cert_source are None, but api_mtls_endpoint - # is provided, then a mTLS channel will be created with SSL ADC. - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - # Mock google.auth.transport.grpc.SslCredentials class. - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - mock_cred = mock.Mock() - transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint=api_mtls_endpoint, - client_cert_source=None, - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - ) - assert transport.grpc_channel == mock_grpc_channel +def test_common_organization_path(): + organization = "oyster" + + expected = "organizations/{organization}".format(organization=organization,) + actual = ReportErrorsServiceClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "nudibranch", + } + path = ReportErrorsServiceClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = ReportErrorsServiceClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "cuttlefish" + + expected = "projects/{project}".format(project=project,) + actual = ReportErrorsServiceClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "mussel", + } + path = ReportErrorsServiceClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = ReportErrorsServiceClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "winkle" + location = "nautilus" + + expected = "projects/{project}/locations/{location}".format( + project=project, location=location, + ) + actual = ReportErrorsServiceClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "scallop", + "location": "abalone", + } + path = ReportErrorsServiceClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = ReportErrorsServiceClient.parse_common_location_path(path) + assert expected == actual def test_client_withDEFAULT_CLIENT_INFO(): From e5f5cfbf516c2a9f030a0d8dc47f69609a14e9e0 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Tue, 1 Dec 2020 08:07:41 -0800 Subject: [PATCH 182/467] chore: update intersphinx links (#41) * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * docs(python): update intersphinx for grpc and auth * docs(python): update intersphinx for grpc and auth * use https for python intersphinx Co-authored-by: Tim Swast Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Wed Nov 18 14:37:25 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: 9a7d9fbb7045c34c9d3d22c1ff766eeae51f04c9 Source-Link: https://github.com/googleapis/synthtool/commit/9a7d9fbb7045c34c9d3d22c1ff766eeae51f04c9 * docs(python): fix intersphinx link for google-auth Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Thu Nov 19 10:16:05 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: a073c873f3928c561bdf87fdfbf1d081d1998984 Source-Link: https://github.com/googleapis/synthtool/commit/a073c873f3928c561bdf87fdfbf1d081d1998984 --- packages/google-cloud-error-reporting/docs/conf.py | 6 +++--- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index bb2ab317b979..6163e5d9b419 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -345,10 +345,10 @@ # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { - "python": ("http://python.readthedocs.org/en/latest/", None), - "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), + "python": ("https://python.readthedocs.org/en/latest/", None), + "google-auth": ("https://googleapis.dev/python/google-auth/latest/", None), "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None,), - "grpc": ("https://grpc.io/grpc/python/", None), + "grpc": ("https://grpc.github.io/grpc/python/", None), "proto-plus": ("https://proto-plus-python.readthedocs.io/en/latest/", None), } diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index b6f762a39e96..8db40bd7c8de 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -51,8 +51,8 @@ "ErrorEvent", "ErrorGroup", "ErrorGroupOrder", - "ErrorGroupServiceClient", "ErrorGroupStats", + "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorStatsServiceClient", + "ErrorGroupServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 303e974def95..21e30c071c82 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "948daf01c733950aece7057fb8809e240b4696a4" + "sha": "bc92bc2cfa549200bf8fa87cf2f6d81ded77486c" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "e89175cf074dccc4babb4eca66ae913696e47a71" + "sha": "a073c873f3928c561bdf87fdfbf1d081d1998984" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "e89175cf074dccc4babb4eca66ae913696e47a71" + "sha": "a073c873f3928c561bdf87fdfbf1d081d1998984" } } ], From 8d7c0764983e341f16163a09f62061c83f721d00 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 1 Dec 2020 15:39:50 -0800 Subject: [PATCH 183/467] chore: release 1.1.0 (#46) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../google-cloud-error-reporting/CHANGELOG.md | 17 +++++++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index c48b34d949cc..37fc2ed35a47 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,23 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.1.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.0.0...v1.1.0) (2020-12-01) + + +### Features + +* add common resource path helpers; expose client transport as property ([#37](https://www.github.com/googleapis/python-error-reporting/issues/37)) ([bc92bc2](https://www.github.com/googleapis/python-error-reporting/commit/bc92bc2cfa549200bf8fa87cf2f6d81ded77486c)) + + +### Bug Fixes + +* changed import path for logging client ([#43](https://www.github.com/googleapis/python-error-reporting/issues/43)) ([a09449d](https://www.github.com/googleapis/python-error-reporting/commit/a09449def35077beb85782c34a61c8f172c2f018)) + + +### Documentation + +* removed stackdriver branding ([#44](https://www.github.com/googleapis/python-error-reporting/issues/44)) ([5eea8c4](https://www.github.com/googleapis/python-error-reporting/commit/5eea8c4f533a32d2b81b1b69e48d3bb47f1bc5b4)) + ## [1.0.0](https://www.github.com/googleapis/python-error-reporting/compare/v0.34.0...v1.0.0) (2020-08-28) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index f90f5bcb6b2c..98e742bce5b2 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.0.0" +version = "1.1.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 1806a4fd43b8a7d55085ce7f2bd7178bf169a820 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Tue, 1 Dec 2020 17:11:01 -0700 Subject: [PATCH 184/467] chore: require samples checks (#47) --- .../.github/sync-repo-settings.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml diff --git a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml new file mode 100644 index 000000000000..af59935321a9 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml @@ -0,0 +1,13 @@ +# https://github.com/googleapis/repo-automation-bots/tree/master/packages/sync-repo-settings +# Rules for master branch protection +branchProtectionRules: +# Identifies the protection rule pattern. Name of the branch to be protected. +# Defaults to `master` +- pattern: master + requiredStatusCheckContexts: + - 'Kokoro' + - 'cla/google' + - 'Samples - Lint' + - 'Samples - Python 3.6' + - 'Samples - Python 3.7' + - 'Samples - Python 3.8' From 4bb5150f815570435f8762742ae8b86fea4b5574 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 2 Dec 2020 23:13:11 +0100 Subject: [PATCH 185/467] chore(deps): update dependency google-cloud-error-reporting to v1.1.0 (#52) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index cc967eee1c77..1d08c2fb5a84 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.0.0 +google-cloud-error-reporting==1.1.0 From dd855976caae54851f371a4ec0e119e1784e3ded Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 7 Dec 2020 10:33:26 -0800 Subject: [PATCH 186/467] chore: changes without context (#53) --- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 8db40bd7c8de..43fc283fab9e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -51,6 +51,7 @@ "ErrorEvent", "ErrorGroup", "ErrorGroupOrder", + "ErrorGroupServiceClient", "ErrorGroupStats", "ErrorStatsServiceClient", "GetGroupRequest", @@ -62,7 +63,6 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", - "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorGroupServiceClient", + "ReportErrorsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 21e30c071c82..6e865aa47157 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "bc92bc2cfa549200bf8fa87cf2f6d81ded77486c" + "sha": "cca69aea574fd760eb2fda2d726b6067b9a40da2" } }, { From 4952a4b6ad27e28cd0e79ecb1ef59226a8e26587 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 9 Dec 2020 07:51:14 -0800 Subject: [PATCH 187/467] chore: re-order imports in `__init__.py`(#55) --- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 43fc283fab9e..b6f762a39e96 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -53,7 +53,6 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", - "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -63,6 +62,7 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", + "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ReportErrorsServiceClient", + "ErrorStatsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 6e865aa47157..6bc5d9c74c7f 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "cca69aea574fd760eb2fda2d726b6067b9a40da2" + "sha": "38b2d2c088abd70e7dcc051fa403136fcc5f9c65" } }, { From 25474da9089783cf83d542ca53f4f117656703d9 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 28 Dec 2020 09:54:29 -0800 Subject: [PATCH 188/467] chore: add config / docs for 'pre-commit' support (#50) --- .../.pre-commit-config.yaml | 17 +++++++++++++++++ .../CONTRIBUTING.rst | 10 ++++++++++ .../google-cloud-error-reporting/noxfile.py | 5 ++--- .../samples/snippets/api/noxfile.py | 17 +++++++++-------- .../snippets/fluent_on_compute/noxfile.py | 17 +++++++++-------- .../google-cloud-error-reporting/synth.metadata | 5 +++-- 6 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.pre-commit-config.yaml diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml new file mode 100644 index 000000000000..6ad83346e261 --- /dev/null +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -0,0 +1,17 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.3.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml +- repo: https://github.com/psf/black + rev: 19.10b0 + hooks: + - id: black +- repo: https://gitlab.com/pycqa/flake8 + rev: 3.8.4 + hooks: + - id: flake8 diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 731025cb23e1..edf8fa58f45a 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -111,6 +111,16 @@ Coding Style should point to the official ``googleapis`` checkout and the the branch should be the main branch on that remote (``master``). +- This repository contains configuration for the + `pre-commit `__ tool, which automates checking + our linters during a commit. If you have it installed on your ``$PATH``, + you can enable enforcing those checks via: + +.. code-block:: bash + + $ pre-commit install + pre-commit installed at .git/hooks/pre-commit + Exceptions to PEP8: - Many unit tests use a helper method, ``_call_fut`` ("FUT" is short for diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 925757c99cfe..041ef8cc1b79 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -81,9 +81,8 @@ def default(session): session.run( "py.test", "--quiet", - "--cov=google.cloud.clouderrorreporting", - "--cov=google.cloud", - "--cov=tests.unit", + "--cov=google/cloud", + "--cov=tests/unit", "--cov-append", "--cov-config=.coveragerc", "--cov-report=", diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index b90eef00f2d9..bca0522ec4d9 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -17,6 +17,7 @@ import os from pathlib import Path import sys +from typing import Callable, Dict, List, Optional import nox @@ -68,7 +69,7 @@ TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) -def get_pytest_env_vars(): +def get_pytest_env_vars() -> Dict[str, str]: """Returns a dict for pytest invocation.""" ret = {} @@ -97,7 +98,7 @@ def get_pytest_env_vars(): # -def _determine_local_import_names(start_dir): +def _determine_local_import_names(start_dir: str) -> List[str]: """Determines all import names that should be considered "local". This is used when running the linter to insure that import order is @@ -135,7 +136,7 @@ def _determine_local_import_names(start_dir): @nox.session -def lint(session): +def lint(session: nox.sessions.Session) -> None: if not TEST_CONFIG['enforce_type_hints']: session.install("flake8", "flake8-import-order") else: @@ -154,7 +155,7 @@ def lint(session): @nox.session -def blacken(session): +def blacken(session: nox.sessions.Session) -> None: session.install("black") python_files = [path for path in os.listdir(".") if path.endswith(".py")] @@ -168,7 +169,7 @@ def blacken(session): PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] -def _session_tests(session, post_install=None): +def _session_tests(session: nox.sessions.Session, post_install: Callable = None) -> None: """Runs py.test for a particular project.""" if os.path.exists("requirements.txt"): session.install("-r", "requirements.txt") @@ -194,7 +195,7 @@ def _session_tests(session, post_install=None): @nox.session(python=ALL_VERSIONS) -def py(session): +def py(session: nox.sessions.Session) -> None: """Runs py.test for a sample using the specified version of Python.""" if session.python in TESTED_VERSIONS: _session_tests(session) @@ -209,7 +210,7 @@ def py(session): # -def _get_repo_root(): +def _get_repo_root() -> Optional[str]: """ Returns the root folder of the project. """ # Get root of this repository. Assume we don't have directories nested deeper than 10 items. p = Path(os.getcwd()) @@ -232,7 +233,7 @@ def _get_repo_root(): @nox.session @nox.parametrize("path", GENERATED_READMES) -def readmegen(session, path): +def readmegen(session: nox.sessions.Session, path: str) -> None: """(Re-)generates the readme for a sample.""" session.install("jinja2", "pyyaml") dir_ = os.path.dirname(path) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index b90eef00f2d9..bca0522ec4d9 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -17,6 +17,7 @@ import os from pathlib import Path import sys +from typing import Callable, Dict, List, Optional import nox @@ -68,7 +69,7 @@ TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) -def get_pytest_env_vars(): +def get_pytest_env_vars() -> Dict[str, str]: """Returns a dict for pytest invocation.""" ret = {} @@ -97,7 +98,7 @@ def get_pytest_env_vars(): # -def _determine_local_import_names(start_dir): +def _determine_local_import_names(start_dir: str) -> List[str]: """Determines all import names that should be considered "local". This is used when running the linter to insure that import order is @@ -135,7 +136,7 @@ def _determine_local_import_names(start_dir): @nox.session -def lint(session): +def lint(session: nox.sessions.Session) -> None: if not TEST_CONFIG['enforce_type_hints']: session.install("flake8", "flake8-import-order") else: @@ -154,7 +155,7 @@ def lint(session): @nox.session -def blacken(session): +def blacken(session: nox.sessions.Session) -> None: session.install("black") python_files = [path for path in os.listdir(".") if path.endswith(".py")] @@ -168,7 +169,7 @@ def blacken(session): PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] -def _session_tests(session, post_install=None): +def _session_tests(session: nox.sessions.Session, post_install: Callable = None) -> None: """Runs py.test for a particular project.""" if os.path.exists("requirements.txt"): session.install("-r", "requirements.txt") @@ -194,7 +195,7 @@ def _session_tests(session, post_install=None): @nox.session(python=ALL_VERSIONS) -def py(session): +def py(session: nox.sessions.Session) -> None: """Runs py.test for a sample using the specified version of Python.""" if session.python in TESTED_VERSIONS: _session_tests(session) @@ -209,7 +210,7 @@ def py(session): # -def _get_repo_root(): +def _get_repo_root() -> Optional[str]: """ Returns the root folder of the project. """ # Get root of this repository. Assume we don't have directories nested deeper than 10 items. p = Path(os.getcwd()) @@ -232,7 +233,7 @@ def _get_repo_root(): @nox.session @nox.parametrize("path", GENERATED_READMES) -def readmegen(session, path): +def readmegen(session: nox.sessions.Session, path: str) -> None: """(Re-)generates the readme for a sample.""" session.install("jinja2", "pyyaml") dir_ = os.path.dirname(path) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 6bc5d9c74c7f..b07a346311ed 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "a073c873f3928c561bdf87fdfbf1d081d1998984" + "sha": "18c5dbdb4ac8cf75d4d8174e7b4558f48e76f8a1" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "a073c873f3928c561bdf87fdfbf1d081d1998984" + "sha": "18c5dbdb4ac8cf75d4d8174e7b4558f48e76f8a1" } } ], @@ -85,6 +85,7 @@ ".kokoro/test-samples.sh", ".kokoro/trampoline.sh", ".kokoro/trampoline_v2.sh", + ".pre-commit-config.yaml", ".trampolinerc", "CODE_OF_CONDUCT.md", "CONTRIBUTING.rst", From c3ec5f5fbd1c6ec25000393b16bb85c10449a265 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 28 Dec 2020 09:55:09 -0800 Subject: [PATCH 189/467] chore: reorder classes (#56) --- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index b6f762a39e96..43fc283fab9e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -53,6 +53,7 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", + "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -62,7 +63,6 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", - "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorStatsServiceClient", + "ReportErrorsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index b07a346311ed..c9dbf832dfae 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "38b2d2c088abd70e7dcc051fa403136fcc5f9c65" + "sha": "4522e85cb194efb06c7dacf85aecdf5450d4f14a" } }, { From 8f55358f9d8d201784927d5128cbb494e95252af Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 28 Dec 2020 09:55:53 -0800 Subject: [PATCH 190/467] fix: remove gRPC send/recv limit; add enums to `types/__init__.py` (#57) * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * feat: allowed custom to specify webhook headers through query parameters docs: suggested to always use version for production traffic when calling DetectIntent PiperOrigin-RevId: 346434847 Source-Author: Google APIs Source-Date: Tue Dec 8 16:24:31 2020 -0800 Source-Repo: googleapis/googleapis Source-Sha: e4d01555afeb93d2f3b467056ea884b092567d1b Source-Link: https://github.com/googleapis/googleapis/commit/e4d01555afeb93d2f3b467056ea884b092567d1b * feat: Add the `UNORDERED_LIST` enum value for `google.api.field_behavior`. Also includes minor documentation changes that seem to have been made in the interim and never published. PiperOrigin-RevId: 346664095 Source-Author: Google APIs Source-Date: Wed Dec 9 16:35:05 2020 -0800 Source-Repo: googleapis/googleapis Source-Sha: 468a94a87b9f80d22d1f5e3076d5bab73a5c996f Source-Link: https://github.com/googleapis/googleapis/commit/468a94a87b9f80d22d1f5e3076d5bab73a5c996f * fix: remove client recv msg limit fix: add enums to `types/__init__.py` PiperOrigin-RevId: 347055288 Source-Author: Google APIs Source-Date: Fri Dec 11 12:44:37 2020 -0800 Source-Repo: googleapis/googleapis Source-Sha: dd372aa22ded7a8ba6f0e03a80e06358a3fa0907 Source-Link: https://github.com/googleapis/googleapis/commit/dd372aa22ded7a8ba6f0e03a80e06358a3fa0907 --- .../error_group_service/transports/__init__.py | 1 - .../services/error_group_service/transports/grpc.py | 10 +++++++++- .../error_group_service/transports/grpc_asyncio.py | 8 ++++++++ .../error_stats_service/transports/__init__.py | 1 - .../services/error_stats_service/transports/grpc.py | 10 +++++++++- .../error_stats_service/transports/grpc_asyncio.py | 8 ++++++++ .../report_errors_service/transports/__init__.py | 1 - .../services/report_errors_service/transports/grpc.py | 10 +++++++++- .../report_errors_service/transports/grpc_asyncio.py | 8 ++++++++ .../cloud/errorreporting_v1beta1/types/__init__.py | 5 ++++- packages/google-cloud-error-reporting/synth.metadata | 4 ++-- .../errorreporting_v1beta1/test_error_group_service.py | 8 ++++++++ .../errorreporting_v1beta1/test_error_stats_service.py | 8 ++++++++ .../test_report_errors_service.py | 8 ++++++++ 14 files changed, 81 insertions(+), 9 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py index b2784eaa4285..cbf9008abfe1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py @@ -28,7 +28,6 @@ _transport_registry["grpc"] = ErrorGroupServiceGrpcTransport _transport_registry["grpc_asyncio"] = ErrorGroupServiceGrpcAsyncIOTransport - __all__ = ( "ErrorGroupServiceTransport", "ErrorGroupServiceGrpcTransport", diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 42f0377f89d6..102cdd39797b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -147,6 +147,10 @@ def __init__( ssl_credentials=ssl_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._ssl_channel_credentials = ssl_credentials else: @@ -165,6 +169,10 @@ def __init__( ssl_credentials=ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._stubs = {} # type: Dict[str, Callable] @@ -191,7 +199,7 @@ def create_channel( ) -> grpc.Channel: """Create and return a gRPC channel object. Args: - address (Optionsl[str]): The host for the channel to use. + address (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index c0677b8a56f1..f6ed3855b712 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -192,6 +192,10 @@ def __init__( ssl_credentials=ssl_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._ssl_channel_credentials = ssl_credentials else: @@ -210,6 +214,10 @@ def __init__( ssl_credentials=ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) # Run the base constructor. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py index 5888696605df..9d9ed28003b3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py @@ -28,7 +28,6 @@ _transport_registry["grpc"] = ErrorStatsServiceGrpcTransport _transport_registry["grpc_asyncio"] = ErrorStatsServiceGrpcAsyncIOTransport - __all__ = ( "ErrorStatsServiceTransport", "ErrorStatsServiceGrpcTransport", diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index de3c2741bd70..f9595d231cda 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -147,6 +147,10 @@ def __init__( ssl_credentials=ssl_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._ssl_channel_credentials = ssl_credentials else: @@ -165,6 +169,10 @@ def __init__( ssl_credentials=ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._stubs = {} # type: Dict[str, Callable] @@ -191,7 +199,7 @@ def create_channel( ) -> grpc.Channel: """Create and return a gRPC channel object. Args: - address (Optionsl[str]): The host for the channel to use. + address (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 45934770ddaa..4c687c1105f5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -192,6 +192,10 @@ def __init__( ssl_credentials=ssl_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._ssl_channel_credentials = ssl_credentials else: @@ -210,6 +214,10 @@ def __init__( ssl_credentials=ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) # Run the base constructor. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py index 8226c94872c7..194962a3871c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py @@ -30,7 +30,6 @@ _transport_registry["grpc"] = ReportErrorsServiceGrpcTransport _transport_registry["grpc_asyncio"] = ReportErrorsServiceGrpcAsyncIOTransport - __all__ = ( "ReportErrorsServiceTransport", "ReportErrorsServiceGrpcTransport", diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 942b0bb0a9c5..f2c84d9237fd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -146,6 +146,10 @@ def __init__( ssl_credentials=ssl_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._ssl_channel_credentials = ssl_credentials else: @@ -164,6 +168,10 @@ def __init__( ssl_credentials=ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._stubs = {} # type: Dict[str, Callable] @@ -190,7 +198,7 @@ def create_channel( ) -> grpc.Channel: """Create and return a gRPC channel object. Args: - address (Optionsl[str]): The host for the channel to use. + address (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 6750f197bed8..39465e572b55 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -191,6 +191,10 @@ def __init__( ssl_credentials=ssl_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) self._ssl_channel_credentials = ssl_credentials else: @@ -209,6 +213,10 @@ def __init__( ssl_credentials=ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) # Run the base constructor. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py index 65524373a51c..fc7243befc5a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -39,6 +39,8 @@ ServiceContextFilter, DeleteEventsRequest, DeleteEventsResponse, + TimedCountAlignment, + ErrorGroupOrder, ) from .report_errors_service import ( ReportErrorEventRequest, @@ -46,7 +48,6 @@ ReportedErrorEvent, ) - __all__ = ( "ErrorGroup", "TrackingIssue", @@ -67,6 +68,8 @@ "ServiceContextFilter", "DeleteEventsRequest", "DeleteEventsResponse", + "TimedCountAlignment", + "ErrorGroupOrder", "ReportErrorEventRequest", "ReportErrorEventResponse", "ReportedErrorEvent", diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index c9dbf832dfae..91d1e61cc332 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -11,8 +11,8 @@ "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "24fb9e5d1f37110bfa198189c34324aa3fdb0896", - "internalRef": "339381689" + "sha": "dd372aa22ded7a8ba6f0e03a80e06358a3fa0907", + "internalRef": "347055288" } }, { diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 9fdcc41c86b2..da93c3df41e4 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1101,6 +1101,10 @@ def test_error_group_service_transport_channel_mtls_with_client_cert_source( scopes=("https://www.googleapis.com/auth/cloud-platform",), ssl_credentials=mock_ssl_cred, quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) assert transport.grpc_channel == mock_grpc_channel assert transport._ssl_channel_credentials == mock_ssl_cred @@ -1142,6 +1146,10 @@ def test_error_group_service_transport_channel_mtls_with_adc(transport_class): scopes=("https://www.googleapis.com/auth/cloud-platform",), ssl_credentials=mock_ssl_cred, quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) assert transport.grpc_channel == mock_grpc_channel diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 65bc5277fa51..2ea6942063fc 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1662,6 +1662,10 @@ def test_error_stats_service_transport_channel_mtls_with_client_cert_source( scopes=("https://www.googleapis.com/auth/cloud-platform",), ssl_credentials=mock_ssl_cred, quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) assert transport.grpc_channel == mock_grpc_channel assert transport._ssl_channel_credentials == mock_ssl_cred @@ -1703,6 +1707,10 @@ def test_error_stats_service_transport_channel_mtls_with_adc(transport_class): scopes=("https://www.googleapis.com/auth/cloud-platform",), ssl_credentials=mock_ssl_cred, quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) assert transport.grpc_channel == mock_grpc_channel diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index a9605f5218ce..f84d267fedb0 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -947,6 +947,10 @@ def test_report_errors_service_transport_channel_mtls_with_client_cert_source( scopes=("https://www.googleapis.com/auth/cloud-platform",), ssl_credentials=mock_ssl_cred, quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) assert transport.grpc_channel == mock_grpc_channel assert transport._ssl_channel_credentials == mock_ssl_cred @@ -988,6 +992,10 @@ def test_report_errors_service_transport_channel_mtls_with_adc(transport_class): scopes=("https://www.googleapis.com/auth/cloud-platform",), ssl_credentials=mock_ssl_cred, quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], ) assert transport.grpc_channel == mock_grpc_channel From feafd4751d7a7f19978b648834b3f4e7d5a27987 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Tue, 29 Dec 2020 08:15:35 -0800 Subject: [PATCH 191/467] chore: update templates (#60) * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * chore(deps): update precommit hook pre-commit/pre-commit-hooks to v3.4.0 Co-authored-by: Tres Seaver Source-Author: WhiteSource Renovate Source-Date: Wed Dec 16 18:13:24 2020 +0100 Source-Repo: googleapis/synthtool Source-Sha: aa255b15d52b6d8950cca48cfdf58f7d27a60c8a Source-Link: https://github.com/googleapis/synthtool/commit/aa255b15d52b6d8950cca48cfdf58f7d27a60c8a * docs(python): document adding Python 3.9 support, dropping 3.5 support Closes #787 Source-Author: Tres Seaver Source-Date: Thu Dec 17 16:08:02 2020 -0500 Source-Repo: googleapis/synthtool Source-Sha: b670a77a454f415d247907908e8ee7943e06d718 Source-Link: https://github.com/googleapis/synthtool/commit/b670a77a454f415d247907908e8ee7943e06d718 * chore: exclude `.nox` directories from linting The samples tests create `.nox` directories with all dependencies installed. These directories should be excluded from linting. I've tested this change locally, and it significantly speeds up linting on my machine. Source-Author: Tim Swast Source-Date: Tue Dec 22 13:04:04 2020 -0600 Source-Repo: googleapis/synthtool Source-Sha: 373861061648b5fe5e0ac4f8a38b32d639ee93e4 Source-Link: https://github.com/googleapis/synthtool/commit/373861061648b5fe5e0ac4f8a38b32d639ee93e4 --- packages/google-cloud-error-reporting/.flake8 | 1 + .../.pre-commit-config.yaml | 2 +- .../google-cloud-error-reporting/CONTRIBUTING.rst | 11 +++++------ .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index ed9316381c9c..29227d4cf419 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -26,6 +26,7 @@ exclude = *_pb2.py # Standard linting exemptions. + **/.nox/** __pycache__, .git, *.pyc, diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 6ad83346e261..a9024b15d725 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -2,7 +2,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v3.3.0 + rev: v3.4.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index edf8fa58f45a..c7763dad6d99 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -21,8 +21,8 @@ In order to add a feature: - The feature must be documented in both the API and narrative documentation. -- The feature must work fully on the following CPython versions: 2.7, - 3.5, 3.6, 3.7 and 3.8 on both UNIX and Windows. +- The feature must work fully on the following CPython versions: + 3.6, 3.7, 3.8 and 3.9 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -202,25 +202,24 @@ Supported Python Versions We support: -- `Python 3.5`_ - `Python 3.6`_ - `Python 3.7`_ - `Python 3.8`_ +- `Python 3.9`_ -.. _Python 3.5: https://docs.python.org/3.5/ .. _Python 3.6: https://docs.python.org/3.6/ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ +.. _Python 3.9: https://docs.python.org/3.9/ Supported versions can be found in our ``noxfile.py`` `config`_. .. _config: https://github.com/googleapis/python-error-reporting/blob/master/noxfile.py -Python 2.7 support is deprecated. All code changes should maintain Python 2.7 compatibility until January 1, 2020. We also explicitly decided to support Python 3 beginning with version -3.5. Reasons for this include: +3.6. Reasons for this include: - Encouraging use of newest versions of Python 3 - Taking the lead of `prominent`_ open-source `projects`_ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 43fc283fab9e..b6f762a39e96 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -53,7 +53,6 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", - "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -63,6 +62,7 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", + "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ReportErrorsServiceClient", + "ErrorStatsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 91d1e61cc332..b5429532f2ca 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "4522e85cb194efb06c7dacf85aecdf5450d4f14a" + "sha": "e23e5ba7eba4482735d5f4897210a1ebb81bfb8a" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "18c5dbdb4ac8cf75d4d8174e7b4558f48e76f8a1" + "sha": "373861061648b5fe5e0ac4f8a38b32d639ee93e4" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "18c5dbdb4ac8cf75d4d8174e7b4558f48e76f8a1" + "sha": "373861061648b5fe5e0ac4f8a38b32d639ee93e4" } } ], From 1cb942fa7aa216b806afc15385eb93c14065ee1e Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 30 Dec 2020 07:59:31 -0800 Subject: [PATCH 192/467] chore: reorder classes (#61) --- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index b6f762a39e96..43fc283fab9e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -53,6 +53,7 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", + "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -62,7 +63,6 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", - "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorStatsServiceClient", + "ReportErrorsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index b5429532f2ca..c2e2485698e7 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "e23e5ba7eba4482735d5f4897210a1ebb81bfb8a" + "sha": "1d6813936605f78d3ba0fd2634540cd83a50a336" } }, { From a37aac939f2b2ae4a17779f85db06b03cfa54dab Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Wed, 6 Jan 2021 17:01:38 -0700 Subject: [PATCH 193/467] chore: add constraints file (#62) --- .../testing/constraints-3.10.txt | 0 .../testing/constraints-3.11.txt | 0 .../testing/constraints-3.6.txt | 11 +++++++++++ .../testing/constraints-3.7.txt | 0 .../testing/constraints-3.8.txt | 0 .../testing/constraints-3.9.txt | 0 6 files changed, 11 insertions(+) create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.10.txt create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.11.txt create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.6.txt create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.7.txt create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.8.txt create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.9.txt diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.10.txt b/packages/google-cloud-error-reporting/testing/constraints-3.10.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.11.txt b/packages/google-cloud-error-reporting/testing/constraints-3.11.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt new file mode 100644 index 000000000000..e88377ad6456 --- /dev/null +++ b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt @@ -0,0 +1,11 @@ +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List *all* library dependencies and extras in this file. +# Pin the version to the lower bound. +# +# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", +# Then this file should have foo==1.14.0 +google-cloud-logging==1.14.0 +google-api-core==1.22.0 +proto-plus==1.4.0 +libcst==0.2.5 \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.8.txt b/packages/google-cloud-error-reporting/testing/constraints-3.8.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.9.txt b/packages/google-cloud-error-reporting/testing/constraints-3.9.txt new file mode 100644 index 000000000000..e69de29bb2d1 From d315a8c9b343c5918a4a6a37add0e9b0bfe2b6a6 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 6 Jan 2021 16:02:37 -0800 Subject: [PATCH 194/467] chore: Re-generated to pick up changes from self (#63) autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. --- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 43fc283fab9e..b6f762a39e96 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -53,7 +53,6 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", - "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -63,6 +62,7 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", + "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ReportErrorsServiceClient", + "ErrorStatsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index c2e2485698e7..613474ee6cac 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "1d6813936605f78d3ba0fd2634540cd83a50a336" + "sha": "95c6528e3f4fc688868ccd2d0db18be103db11fa" } }, { From e0112b7c7e0cb6bc2f3086a299e2c2fe019ede76 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 7 Jan 2021 08:01:58 -0800 Subject: [PATCH 195/467] chore: alphabetize classes (#65) --- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index b6f762a39e96..43fc283fab9e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -53,6 +53,7 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", + "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -62,7 +63,6 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", - "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorStatsServiceClient", + "ReportErrorsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 613474ee6cac..399629d1996a 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "95c6528e3f4fc688868ccd2d0db18be103db11fa" + "sha": "97444485ce9472df695ac999e04a3d3dca64ed61" } }, { From a147fb837b4a3c59c444877c1cf327785f9b3622 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 27 Jan 2021 19:23:42 +0100 Subject: [PATCH 196/467] chore(deps): update dependency google-cloud-logging to >=1.14.0, <2.2 (#70) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 98e742bce5b2..5345f2a4014d 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" dependencies = [ - "google-cloud-logging>=1.14.0, <2.1", + "google-cloud-logging>=1.14.0, <2.2", "google-api-core[grpc] >= 1.22.0, < 2.0.0dev", "proto-plus >= 1.4.0", "libcst >= 0.2.5", From abf9058a54434016957f49e1972a4efd0c0dcc82 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 27 Jan 2021 10:24:31 -0800 Subject: [PATCH 197/467] chore: Re-generated to pick up changes from synthtool. (#68) * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * chore(python): fix column sizing issue in docs Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Thu Jan 7 11:58:32 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: f15b57ccfd71106c2299e9b89835fe6e55015662 Source-Link: https://github.com/googleapis/synthtool/commit/f15b57ccfd71106c2299e9b89835fe6e55015662 * chore(python): use 'http' in LICENSE Co-authored-by: Tim Swast Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Thu Jan 7 13:05:12 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: 41a4e56982620d3edcf110d76f4fcdfdec471ac8 Source-Link: https://github.com/googleapis/synthtool/commit/41a4e56982620d3edcf110d76f4fcdfdec471ac8 --- packages/google-cloud-error-reporting/LICENSE | 7 ++++--- .../google-cloud-error-reporting/docs/_static/custom.css | 7 ++++++- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 6 +++--- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/google-cloud-error-reporting/LICENSE b/packages/google-cloud-error-reporting/LICENSE index a8ee855de2aa..d64569567334 100644 --- a/packages/google-cloud-error-reporting/LICENSE +++ b/packages/google-cloud-error-reporting/LICENSE @@ -1,6 +1,7 @@ - Apache License + + Apache License Version 2.0, January 2004 - https://www.apache.org/licenses/ + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +193,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 + 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, diff --git a/packages/google-cloud-error-reporting/docs/_static/custom.css b/packages/google-cloud-error-reporting/docs/_static/custom.css index 0abaf229fce3..bcd37bbd3c4a 100644 --- a/packages/google-cloud-error-reporting/docs/_static/custom.css +++ b/packages/google-cloud-error-reporting/docs/_static/custom.css @@ -1,4 +1,9 @@ div#python2-eol { border-color: red; border-width: medium; -} \ No newline at end of file +} + +/* Ensure minimum width for 'Parameters' / 'Returns' column */ +dl.field-list > dt { + min-width: 100px +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 43fc283fab9e..b6f762a39e96 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -53,7 +53,6 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", - "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -63,6 +62,7 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", + "ReportErrorsServiceClient", "ReportedErrorEvent", "ServiceContext", "ServiceContextFilter", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ReportErrorsServiceClient", + "ErrorStatsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 399629d1996a..090f59399795 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "97444485ce9472df695ac999e04a3d3dca64ed61" + "sha": "33f28b6eb1ec823c24023d316255ff9b06e415d0" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "373861061648b5fe5e0ac4f8a38b32d639ee93e4" + "sha": "41a4e56982620d3edcf110d76f4fcdfdec471ac8" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "373861061648b5fe5e0ac4f8a38b32d639ee93e4" + "sha": "41a4e56982620d3edcf110d76f4fcdfdec471ac8" } } ], From eb26a15060fcdd5c20e110c0409782664e991754 Mon Sep 17 00:00:00 2001 From: Justin Beckwith Date: Fri, 29 Jan 2021 08:13:37 -0800 Subject: [PATCH 198/467] build: migrate to flakybot (#75) --- .../google-cloud-error-reporting/.kokoro/test-samples.sh | 8 ++++---- .../google-cloud-error-reporting/.kokoro/trampoline_v2.sh | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh index c74c2d6a7a15..dfbbc8dec82a 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh @@ -87,11 +87,11 @@ for file in samples/**/requirements.txt; do python3.6 -m nox -s "$RUN_TESTS_SESSION" EXIT=$? - # If this is a periodic build, send the test log to the Build Cop Bot. - # See https://github.com/googleapis/repo-automation-bots/tree/master/packages/buildcop. + # If this is a periodic build, send the test log to the FlakyBot. + # See https://github.com/googleapis/repo-automation-bots/tree/master/packages/flakybot. if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then - chmod +x $KOKORO_GFILE_DIR/linux_amd64/buildcop - $KOKORO_GFILE_DIR/linux_amd64/buildcop + chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot + $KOKORO_GFILE_DIR/linux_amd64/flakybot fi if [[ $EXIT -ne 0 ]]; then diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh index 719bcd5ba84d..4af6cdc26dbc 100755 --- a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh +++ b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh @@ -159,7 +159,7 @@ if [[ -n "${KOKORO_BUILD_ID:-}" ]]; then "KOKORO_GITHUB_COMMIT" "KOKORO_GITHUB_PULL_REQUEST_NUMBER" "KOKORO_GITHUB_PULL_REQUEST_COMMIT" - # For Build Cop Bot + # For FlakyBot "KOKORO_GITHUB_COMMIT_URL" "KOKORO_GITHUB_PULL_REQUEST_URL" ) From a69661a22653863168fcf86d5d7bffdb62b8f52b Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Fri, 29 Jan 2021 10:45:53 -0800 Subject: [PATCH 199/467] chore: Adding header-checker-lint and updating environment (#73) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * chore(python): skip docfx in main presubmit * chore(python): skip docfx in main presubmit * fix: properly template the repo name Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Fri Jan 8 10:32:13 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: fb53b6fb373b7c3edf4e55f3e8036bc6d73fa483 Source-Link: https://github.com/googleapis/synthtool/commit/fb53b6fb373b7c3edf4e55f3e8036bc6d73fa483 * chore: add missing quotation mark Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Mon Jan 11 09:43:06 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: 16ec872dd898d7de6e1822badfac32484b5d9031 Source-Link: https://github.com/googleapis/synthtool/commit/16ec872dd898d7de6e1822badfac32484b5d9031 * chore: add 3.9 to noxfile template Since the python-docs-samples noxfile-template doesn't sync with this, I wanted to make sure the noxfile template matched the most recent change [here](https://github.com/GoogleCloudPlatform/python-docs-samples/pull/4968/files) cc @tmatsuo Source-Author: Leah E. Cole <6719667+leahecole@users.noreply.github.com> Source-Date: Fri Jan 15 17:24:05 2021 -0800 Source-Repo: googleapis/synthtool Source-Sha: 56ddc68f36b32341e9f22c2c59b4ce6aa3ba635f Source-Link: https://github.com/googleapis/synthtool/commit/56ddc68f36b32341e9f22c2c59b4ce6aa3ba635f * build(python): make `NOX_SESSION` optional I added this accidentally in #889. `NOX_SESSION` should be passed down if it is set but not marked required. Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Tue Jan 19 09:38:04 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: ba960d730416fe05c50547e975ce79fcee52c671 Source-Link: https://github.com/googleapis/synthtool/commit/ba960d730416fe05c50547e975ce79fcee52c671 * chore: Add header checker config to python library synth Now that we have it working in [python-docs-samples](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/.github/header-checker-lint.yml) we should consider adding it to the 🐍 libraries :) Source-Author: Leah E. Cole <6719667+leahecole@users.noreply.github.com> Source-Date: Mon Jan 25 13:24:08 2021 -0800 Source-Repo: googleapis/synthtool Source-Sha: 573f7655311b553a937f9123bee17bf78497db95 Source-Link: https://github.com/googleapis/synthtool/commit/573f7655311b553a937f9123bee17bf78497db95 * chore: add noxfile parameters for extra dependencies Also, add tests for some noxfile parameters for assurance that the template generates valid Python. Co-authored-by: Jeffrey Rennie Source-Author: Tim Swast Source-Date: Tue Jan 26 12:26:57 2021 -0600 Source-Repo: googleapis/synthtool Source-Sha: 778d8beae28d6d87eb01fdc839a4b4d966ed2ebe Source-Link: https://github.com/googleapis/synthtool/commit/778d8beae28d6d87eb01fdc839a4b4d966ed2ebe --- .../.github/header-checker-lint.yml | 15 +++++++++++++++ .../.kokoro/build.sh | 16 ++++++++++------ .../.kokoro/docs/docs-presubmit.cfg | 11 +++++++++++ .../google-cloud-error-reporting/.trampolinerc | 1 + .../cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/noxfile.py | 13 +++++++++++++ .../samples/snippets/api/noxfile.py | 2 +- .../snippets/fluent_on_compute/noxfile.py | 2 +- .../google-cloud-error-reporting/synth.metadata | 7 ++++--- 9 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.github/header-checker-lint.yml diff --git a/packages/google-cloud-error-reporting/.github/header-checker-lint.yml b/packages/google-cloud-error-reporting/.github/header-checker-lint.yml new file mode 100644 index 000000000000..fc281c05bd55 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/header-checker-lint.yml @@ -0,0 +1,15 @@ +{"allowedCopyrightHolders": ["Google LLC"], + "allowedLicenses": ["Apache-2.0", "MIT", "BSD-3"], + "ignoreFiles": ["**/requirements.txt", "**/requirements-test.txt"], + "sourceFileExtensions": [ + "ts", + "js", + "java", + "sh", + "Dockerfile", + "yaml", + "py", + "html", + "txt" + ] +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh index 8e64a1c98a47..2a8a504459df 100755 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -15,7 +15,11 @@ set -eo pipefail -cd github/python-error-reporting +if [[ -z "${PROJECT_ROOT:-}" ]]; then + PROJECT_ROOT="github/python-error-reporting" +fi + +cd "${PROJECT_ROOT}" # Disable buffering, so that the logs stream through. export PYTHONUNBUFFERED=1 @@ -30,16 +34,16 @@ export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/service-account.json export PROJECT_ID=$(cat "${KOKORO_GFILE_DIR}/project-id.json") # Remove old nox -python3.6 -m pip uninstall --yes --quiet nox-automation +python3 -m pip uninstall --yes --quiet nox-automation # Install nox -python3.6 -m pip install --upgrade --quiet nox -python3.6 -m nox --version +python3 -m pip install --upgrade --quiet nox +python3 -m nox --version # If NOX_SESSION is set, it only runs the specified session, # otherwise run all the sessions. if [[ -n "${NOX_SESSION:-}" ]]; then - python3.6 -m nox -s "${NOX_SESSION:-}" + python3 -m nox -s ${NOX_SESSION:-} else - python3.6 -m nox + python3 -m nox fi diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg index 1118107829b7..6d7b518629af 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg @@ -15,3 +15,14 @@ env_vars: { key: "TRAMPOLINE_IMAGE_UPLOAD" value: "false" } + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/build.sh" +} + +# Only run this nox session. +env_vars: { + key: "NOX_SESSION" + value: "docs docfx" +} diff --git a/packages/google-cloud-error-reporting/.trampolinerc b/packages/google-cloud-error-reporting/.trampolinerc index 995ee29111e1..383b6ec89fbc 100644 --- a/packages/google-cloud-error-reporting/.trampolinerc +++ b/packages/google-cloud-error-reporting/.trampolinerc @@ -24,6 +24,7 @@ required_envvars+=( pass_down_envvars+=( "STAGING_BUCKET" "V2_STAGING_BUCKET" + "NOX_SESSION" ) # Prevent unintentional override on the default image. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index b6f762a39e96..8db40bd7c8de 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -51,8 +51,8 @@ "ErrorEvent", "ErrorGroup", "ErrorGroupOrder", - "ErrorGroupServiceClient", "ErrorGroupStats", + "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorStatsServiceClient", + "ErrorGroupServiceClient", ) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 041ef8cc1b79..544b90d73b2a 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -30,6 +30,17 @@ SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] +# 'docfx' is excluded since it only needs to run in 'docs-presubmit' +nox.options.sessions = [ + "unit", + "system", + "cover", + "lint", + "lint_setup_py", + "blacken", + "docs", +] + @nox.session(python=DEFAULT_PYTHON_VERSION) def lint(session): @@ -75,6 +86,7 @@ def default(session): session.install( "mock", "pytest", "pytest-cov", ) + session.install("-e", ".") # Run py.test against the unit tests. @@ -126,6 +138,7 @@ def system(session): "mock", "pytest", "google-cloud-testutils", ) session.install("-e", "test_utils") + session.install("-e", ".") # Run py.test against the system tests. diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index bca0522ec4d9..97bf7da80e39 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -85,7 +85,7 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. # All versions used to tested samples. -ALL_VERSIONS = ["2.7", "3.6", "3.7", "3.8"] +ALL_VERSIONS = ["2.7", "3.6", "3.7", "3.8", "3.9"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG['ignored_versions'] diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index bca0522ec4d9..97bf7da80e39 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -85,7 +85,7 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. # All versions used to tested samples. -ALL_VERSIONS = ["2.7", "3.6", "3.7", "3.8"] +ALL_VERSIONS = ["2.7", "3.6", "3.7", "3.8", "3.9"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG['ignored_versions'] diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 090f59399795..90d70a3c89fa 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "33f28b6eb1ec823c24023d316255ff9b06e415d0" + "sha": "511be86d97804b6ae4bee0718dde5fde21bddb49" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "41a4e56982620d3edcf110d76f4fcdfdec471ac8" + "sha": "778d8beae28d6d87eb01fdc839a4b4d966ed2ebe" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "41a4e56982620d3edcf110d76f4fcdfdec471ac8" + "sha": "778d8beae28d6d87eb01fdc839a4b4d966ed2ebe" } } ], @@ -48,6 +48,7 @@ ".github/ISSUE_TEMPLATE/feature_request.md", ".github/ISSUE_TEMPLATE/support_request.md", ".github/PULL_REQUEST_TEMPLATE.md", + ".github/header-checker-lint.yml", ".github/release-please.yml", ".github/snippet-bot.yml", ".gitignore", From 54154f27f11ecdabf4c11d18962c900c63c9d68b Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 8 Feb 2021 09:18:15 -0800 Subject: [PATCH 200/467] chore: include py.typed files in release (#76) * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * build: migrate to flakybot Source-Author: Justin Beckwith Source-Date: Thu Jan 28 22:22:38 2021 -0800 Source-Repo: googleapis/synthtool Source-Sha: d1bb9173100f62c0cfc8f3138b62241e7f47ca6a Source-Link: https://github.com/googleapis/synthtool/commit/d1bb9173100f62c0cfc8f3138b62241e7f47ca6a * chore(python): include py.typed files in release A py.typed file must be included in the released package for it to be considered typed by type checkers. https://www.python.org/dev/peps/pep-0561/#packaging-type-information. See https://github.com/googleapis/python-secret-manager/issues/79 Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Fri Feb 5 17:32:06 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: 33366574ffb9e11737b3547eb6f020ecae0536e8 Source-Link: https://github.com/googleapis/synthtool/commit/33366574ffb9e11737b3547eb6f020ecae0536e8 --- packages/google-cloud-error-reporting/MANIFEST.in | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index e9e29d12033d..e783f4c6209b 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -16,10 +16,10 @@ # Generated by synthtool. DO NOT EDIT! include README.rst LICENSE -recursive-include google *.json *.proto +recursive-include google *.json *.proto py.typed recursive-include tests * global-exclude *.py[co] global-exclude __pycache__ # Exclude scripts for samples readmegen -prune scripts/readme-gen \ No newline at end of file +prune scripts/readme-gen diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 90d70a3c89fa..330ea88ccc12 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "511be86d97804b6ae4bee0718dde5fde21bddb49" + "sha": "b6887650c28d9fce253ed5894bb2d64a4fedae19" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "778d8beae28d6d87eb01fdc839a4b4d966ed2ebe" + "sha": "33366574ffb9e11737b3547eb6f020ecae0536e8" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "778d8beae28d6d87eb01fdc839a4b4d966ed2ebe" + "sha": "33366574ffb9e11737b3547eb6f020ecae0536e8" } } ], From 6f0d868a05d3fe67b4416afd5e023d18dd57b52b Mon Sep 17 00:00:00 2001 From: Daz Wilkin Date: Thu, 25 Feb 2021 09:30:04 -0800 Subject: [PATCH 201/467] r/Datastore/"Error Reporting" (#82) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-error-reporting/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [ ] Ensure the tests and linter pass - [ ] Code coverage does not decrease (if any source code was changed) - [X] Appropriate docs were updated (if necessary) Fixes # 🦕 --- packages/google-cloud-error-reporting/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 88a8610bb0a7..5df20bb6adb6 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -89,7 +89,7 @@ Windows Next Steps ~~~~~~~~~~ -- Read the `Client Library Documentation`_ for Google Cloud Datastore +- Read the `Client Library Documentation`_ for Google Cloud Error Reporting API to see other available methods on the client. - Read the `Product documentation`_ to learn more about the product and see How-to Guides. From f679fc5f3e05379105f1240718090ffb0fe15bc1 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 1 Mar 2021 09:49:38 -0700 Subject: [PATCH 202/467] chore: release 1.1.1 (#58) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 37fc2ed35a47..6cb91480714d 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +### [1.1.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.0...v1.1.1) (2021-02-25) + + +### Bug Fixes + +* remove gRPC send/recv limit; add enums to `types/__init__.py` ([#57](https://www.github.com/googleapis/python-error-reporting/issues/57)) ([e23e5ba](https://www.github.com/googleapis/python-error-reporting/commit/e23e5ba7eba4482735d5f4897210a1ebb81bfb8a)) + ## [1.1.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.0.0...v1.1.0) (2020-12-01) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 5345f2a4014d..1a3a27922f32 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.1.0" +version = "1.1.1" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 2d7ec93bc171ca25a5eaddb581ee07e7823e4a57 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 5 Mar 2021 03:43:27 +0100 Subject: [PATCH 203/467] chore(deps): update dependency google-cloud-error-reporting to v1.1.1 (#86) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 1d08c2fb5a84..47f476da8b37 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.1.0 +google-cloud-error-reporting==1.1.1 From 3b37b5cc91f333695fbbe7e63df6e791cd018d5d Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 5 Mar 2021 16:52:03 +0100 Subject: [PATCH 204/467] chore(deps): update dependency google-cloud-logging to >=1.14.0, <2.3 (#84) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [google-cloud-logging](https://togithub.com/googleapis/python-logging) | `>=1.14.0, <2.2` -> `>=1.14.0, <2.3` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-logging/2.2.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-logging/2.2.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-logging/2.2.0/compatibility-slim/2.1.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-logging/2.2.0/confidence-slim/2.1.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/python-logging ### [`v2.2.0`](https://togithub.com/googleapis/python-logging/blob/master/CHANGELOG.md#​220-httpswwwgithubcomgoogleapispython-loggingcomparev211v220-2021-01-27) [Compare Source](https://togithub.com/googleapis/python-logging/compare/v2.1.1...v2.2.0) ##### Features - add 'from_service_account_info' factory to clients ([a9ff2b7](https://www.github.com/googleapis/python-logging/commit/a9ff2b7984a54542963fc8d52864365ef1562f57)) ##### Bug Fixes - django content length extraction bug ([#​160](https://www.github.com/googleapis/python-logging/issues/160)) ([93eeaef](https://www.github.com/googleapis/python-logging/commit/93eeaef1cce286aa8aa830d2369212b912d184b6)) - fix sphinx identifiers ([a9ff2b7](https://www.github.com/googleapis/python-logging/commit/a9ff2b7984a54542963fc8d52864365ef1562f57)) ##### [2.1.1](https://www.github.com/googleapis/python-logging/compare/v2.1.0...v2.1.1) (2021-01-14) ##### Bug Fixes - use dict for http request ([#​156](https://www.github.com/googleapis/python-logging/issues/156)) ([dc26668](https://www.github.com/googleapis/python-logging/commit/dc266688b1e465112de0e3fe2e8d98003f6e7033))
--- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-error-reporting). --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 1a3a27922f32..623d12352e84 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" dependencies = [ - "google-cloud-logging>=1.14.0, <2.2", + "google-cloud-logging>=1.14.0, <2.3", "google-api-core[grpc] >= 1.22.0, < 2.0.0dev", "proto-plus >= 1.4.0", "libcst >= 0.2.5", From 83a618feee728ed9cb97ee84147c02ce36bbe131 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 11 Mar 2021 22:35:27 +0100 Subject: [PATCH 205/467] chore(deps): update dependency fluent-logger to v0.10.0 (#88) --- .../samples/snippets/fluent_on_compute/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt index d1c2863f99a0..693841f66b8e 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt @@ -1 +1 @@ -fluent-logger==0.9.6 +fluent-logger==0.10.0 From 6ce1554d70397255e995a4e6c0b16f3ae9a09e56 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 11 Mar 2021 15:57:24 -0800 Subject: [PATCH 206/467] chore: Re-generated to pick up changes from synthtool. (#77) * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * docs: update python contributing guide Adds details about blacken, updates version for system tests, and shows how to pass through pytest arguments. Source-Author: Chris Cotter Source-Date: Mon Feb 8 17:13:36 2021 -0500 Source-Repo: googleapis/synthtool Source-Sha: 4679e7e415221f03ff2a71e3ffad75b9ec41d87e Source-Link: https://github.com/googleapis/synthtool/commit/4679e7e415221f03ff2a71e3ffad75b9ec41d87e --- .../CONTRIBUTING.rst | 22 +++++++++++++++---- .../cloud/errorreporting_v1beta1/__init__.py | 4 ++-- .../synth.metadata | 6 ++--- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index c7763dad6d99..e3dee436a6a7 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -70,9 +70,14 @@ We use `nox `__ to instrument our tests. - To test your changes, run unit tests with ``nox``:: $ nox -s unit-2.7 - $ nox -s unit-3.7 + $ nox -s unit-3.8 $ ... +- Args to pytest can be passed through the nox command separated by a `--`. For + example, to run a single test:: + + $ nox -s unit-3.8 -- -k + .. note:: The unit tests and system tests are described in the @@ -93,8 +98,12 @@ On Debian/Ubuntu:: ************ Coding Style ************ +- We use the automatic code formatter ``black``. You can run it using + the nox session ``blacken``. This will eliminate many lint errors. Run via:: + + $ nox -s blacken -- PEP8 compliance, with exceptions defined in the linter configuration. +- PEP8 compliance is required, with exceptions defined in the linter configuration. If you have ``nox`` installed, you can test that you have not introduced any non-compliant code via:: @@ -133,13 +142,18 @@ Running System Tests - To run system tests, you can execute:: - $ nox -s system-3.7 + # Run all system tests + $ nox -s system-3.8 $ nox -s system-2.7 + # Run a single system test + $ nox -s system-3.8 -- -k + + .. note:: System tests are only configured to run under Python 2.7 and - Python 3.7. For expediency, we do not run them in older versions + Python 3.8. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 8db40bd7c8de..b6f762a39e96 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -51,8 +51,8 @@ "ErrorEvent", "ErrorGroup", "ErrorGroupOrder", + "ErrorGroupServiceClient", "ErrorGroupStats", - "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorGroupServiceClient", + "ErrorStatsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 330ea88ccc12..2c79049a3407 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "b6887650c28d9fce253ed5894bb2d64a4fedae19" + "sha": "e078a158b68d10b119ec226c02a17944b59ddccb" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "33366574ffb9e11737b3547eb6f020ecae0536e8" + "sha": "4679e7e415221f03ff2a71e3ffad75b9ec41d87e" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "33366574ffb9e11737b3547eb6f020ecae0536e8" + "sha": "4679e7e415221f03ff2a71e3ffad75b9ec41d87e" } } ], From 9919d6ac92547d6376aff1de9de50c702f677b91 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 25 Mar 2021 00:38:04 +0100 Subject: [PATCH 207/467] chore(deps): update precommit hook pycqa/flake8 to v3.9.0 (#90) --- packages/google-cloud-error-reporting/.pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index a9024b15d725..32302e4883a1 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -12,6 +12,6 @@ repos: hooks: - id: black - repo: https://gitlab.com/pycqa/flake8 - rev: 3.8.4 + rev: 3.9.0 hooks: - id: flake8 From 09a4845913a904f5e54d1a460907e0848952dd41 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 24 Mar 2021 16:38:36 -0700 Subject: [PATCH 208/467] chore: Re-generated to pick up changes from synthtool. (#89) --- .../google-cloud-error-reporting/.gitignore | 4 +++- .../.kokoro/build.sh | 10 ++++++++++ .../cloud/errorreporting_v1beta1/__init__.py | 4 ++-- .../google-cloud-error-reporting/noxfile.py | 20 +++++++++++++++++-- .../synth.metadata | 6 +++--- 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/.gitignore b/packages/google-cloud-error-reporting/.gitignore index b9daa52f118d..b4243ced74e4 100644 --- a/packages/google-cloud-error-reporting/.gitignore +++ b/packages/google-cloud-error-reporting/.gitignore @@ -50,8 +50,10 @@ docs.metadata # Virtual environment env/ + +# Test logs coverage.xml -sponge_log.xml +*sponge_log.xml # System test environment variables. system_tests/local_test_setup diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh index 2a8a504459df..4f96711f7685 100755 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -40,6 +40,16 @@ python3 -m pip uninstall --yes --quiet nox-automation python3 -m pip install --upgrade --quiet nox python3 -m nox --version +# If this is a continuous build, send the test log to the FlakyBot. +# See https://github.com/googleapis/repo-automation-bots/tree/master/packages/flakybot. +if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"continuous"* ]]; then + cleanup() { + chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot + $KOKORO_GFILE_DIR/linux_amd64/flakybot + } + trap cleanup EXIT HUP +fi + # If NOX_SESSION is set, it only runs the specified session, # otherwise run all the sessions. if [[ -n "${NOX_SESSION:-}" ]]; then diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index b6f762a39e96..8db40bd7c8de 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -51,8 +51,8 @@ "ErrorEvent", "ErrorGroup", "ErrorGroupOrder", - "ErrorGroupServiceClient", "ErrorGroupStats", + "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -71,5 +71,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorStatsServiceClient", + "ErrorGroupServiceClient", ) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 544b90d73b2a..4e86e3af49f8 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -93,6 +93,7 @@ def default(session): session.run( "py.test", "--quiet", + f"--junitxml=unit_{session.python}_sponge_log.xml", "--cov=google/cloud", "--cov=tests/unit", "--cov-append", @@ -122,6 +123,9 @@ def system(session): # Sanity check: Only run tests if the environment variable is set. if not os.environ.get("GOOGLE_APPLICATION_CREDENTIALS", ""): session.skip("Credentials must be set via environment variable") + # Install pyopenssl for mTLS testing. + if os.environ.get("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true": + session.install("pyopenssl") system_test_exists = os.path.exists(system_test_path) system_test_folder_exists = os.path.exists(system_test_folder_path) @@ -143,9 +147,21 @@ def system(session): # Run py.test against the system tests. if system_test_exists: - session.run("py.test", "--quiet", system_test_path, *session.posargs) + session.run( + "py.test", + "--quiet", + f"--junitxml=system_{session.python}_sponge_log.xml", + system_test_path, + *session.posargs, + ) if system_test_folder_exists: - session.run("py.test", "--quiet", system_test_folder_path, *session.posargs) + session.run( + "py.test", + "--quiet", + f"--junitxml=system_{session.python}_sponge_log.xml", + system_test_folder_path, + *session.posargs, + ) @nox.session(python=DEFAULT_PYTHON_VERSION) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 2c79049a3407..f49b243b42a3 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "e078a158b68d10b119ec226c02a17944b59ddccb" + "sha": "eaf4a5aebe9f3cee0af211defec7ff10d5bae4a4" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "4679e7e415221f03ff2a71e3ffad75b9ec41d87e" + "sha": "0780323da96d5a53925fe0547757181fe76e8f1e" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "4679e7e415221f03ff2a71e3ffad75b9ec41d87e" + "sha": "0780323da96d5a53925fe0547757181fe76e8f1e" } } ], From c7355642097f6c532336245055062040f3b960cc Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 31 Mar 2021 23:25:19 +0200 Subject: [PATCH 209/467] chore(deps): update dependency google-cloud-logging to >=1.14.0, <2.4 (#95) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 623d12352e84..d40cc0d7e4a1 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" dependencies = [ - "google-cloud-logging>=1.14.0, <2.3", + "google-cloud-logging>=1.14.0, <2.4", "google-api-core[grpc] >= 1.22.0, < 2.0.0dev", "proto-plus >= 1.4.0", "libcst >= 0.2.5", From fb53a08fa4fd1a0e3364a4b1db4a36f1babf146f Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 31 Mar 2021 14:27:50 -0700 Subject: [PATCH 210/467] chore: Re-generated to pick up changes from googleapis. (#87) * fix: remove client recv msg limit fix: add enums to `types/__init__.py` PiperOrigin-RevId: 347055288 Source-Author: Google APIs Source-Date: Fri Dec 11 12:44:37 2020 -0800 Source-Repo: googleapis/googleapis Source-Sha: dd372aa22ded7a8ba6f0e03a80e06358a3fa0907 Source-Link: https://github.com/googleapis/googleapis/commit/dd372aa22ded7a8ba6f0e03a80e06358a3fa0907 * docs: put FPS table in code block PiperOrigin-RevId: 348857882 Source-Author: Google APIs Source-Date: Wed Dec 23 15:47:05 2020 -0800 Source-Repo: googleapis/googleapis Source-Sha: 2ccf8f460800e98884d1aa4ba61e344ad4cd5d04 Source-Link: https://github.com/googleapis/googleapis/commit/2ccf8f460800e98884d1aa4ba61e344ad4cd5d04 * chore: upgrade gapic-generator-python to 0.39.1 feat: add 'from_service_account_info' factory to clients fix: fix sphinx identifiers PiperOrigin-RevId: 350246057 Source-Author: Google APIs Source-Date: Tue Jan 5 16:44:11 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 520682435235d9c503983a360a2090025aa47cd1 Source-Link: https://github.com/googleapis/googleapis/commit/520682435235d9c503983a360a2090025aa47cd1 * chore: Update C# namespace This is a breaking change, but *only* for C#. Google has not yet published a package for this API, so it would only break users who have generated the code themselves. PiperOrigin-RevId: 350388717 Source-Author: Google APIs Source-Date: Wed Jan 6 11:04:54 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: dd1d2325b189d3bb69c4a6a802185cefbd8e592e Source-Link: https://github.com/googleapis/googleapis/commit/dd1d2325b189d3bb69c4a6a802185cefbd8e592e * chore: put markdown table in a codeblock PiperOrigin-RevId: 350414815 Source-Author: Google APIs Source-Date: Wed Jan 6 13:18:46 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 700afd1f0bafc2155bc5e891504c53d4ac9166f5 Source-Link: https://github.com/googleapis/googleapis/commit/700afd1f0bafc2155bc5e891504c53d4ac9166f5 * chore: use name google.cloud.bigquery_storage namespace to avoid conflicts with google.cloud.bigquery PiperOrigin-RevId: 351218127 Source-Author: Google APIs Source-Date: Mon Jan 11 13:04:39 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: c8bfd324b41ad1f6f65fed124572f92fe116517b Source-Link: https://github.com/googleapis/googleapis/commit/c8bfd324b41ad1f6f65fed124572f92fe116517b * feat: add C++ targets for DialogFlow PiperOrigin-RevId: 351615861 Source-Author: Google APIs Source-Date: Wed Jan 13 10:31:46 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: a515fa4183cb95089af55020ab547081714c5a7b Source-Link: https://github.com/googleapis/googleapis/commit/a515fa4183cb95089af55020ab547081714c5a7b * feat: added client library for Workflows Executions V1 API PiperOrigin-RevId: 351618705 Source-Author: Google APIs Source-Date: Wed Jan 13 10:45:45 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 98911d3e77f3d541eaa841252a44905ea4a430ab Source-Link: https://github.com/googleapis/googleapis/commit/98911d3e77f3d541eaa841252a44905ea4a430ab * chore: migrate texttospeech v1beta1 to python microgenerator PiperOrigin-RevId: 352645446 Source-Author: Google APIs Source-Date: Tue Jan 19 13:45:56 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 4d19fc01775b142dd392f4bd82bdf8810202d061 Source-Link: https://github.com/googleapis/googleapis/commit/4d19fc01775b142dd392f4bd82bdf8810202d061 * chore: update Go generator, rules_go, and protobuf PiperOrigin-RevId: 352816749 Source-Author: Google APIs Source-Date: Wed Jan 20 10:06:23 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: ceaaf31b3d13badab7cf9d3b570f5639db5593d9 Source-Link: https://github.com/googleapis/googleapis/commit/ceaaf31b3d13badab7cf9d3b570f5639db5593d9 * chore: upgrade gapic-generator-python to 0.40.5 PiperOrigin-RevId: 354996675 Source-Author: Google APIs Source-Date: Mon Feb 1 12:11:49 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 20712b8fe95001b312f62c6c5f33e3e3ec92cfaf Source-Link: https://github.com/googleapis/googleapis/commit/20712b8fe95001b312f62c6c5f33e3e3ec92cfaf * feat: Add Pub/Sub endpoints for Cloud Channel API. PiperOrigin-RevId: 355059873 Source-Author: Google APIs Source-Date: Mon Feb 1 17:13:22 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 6ef9eaea379fc1cc0355e06a5a20b594543ee693 Source-Link: https://github.com/googleapis/googleapis/commit/6ef9eaea379fc1cc0355e06a5a20b594543ee693 * fix: add proto opts & bazel targets to metadata PiperOrigin-RevId: 355748843 Source-Author: Google APIs Source-Date: Thu Feb 4 17:39:02 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: dccd3ea36ba19b88b978c521f5088eddd087c414 Source-Link: https://github.com/googleapis/googleapis/commit/dccd3ea36ba19b88b978c521f5088eddd087c414 * build: change package name to correct name PiperOrigin-RevId: 355768365 Source-Author: Google APIs Source-Date: Thu Feb 4 20:11:22 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: bb17e41ec1e9f1197520560bc13cc5da24e04e6f Source-Link: https://github.com/googleapis/googleapis/commit/bb17e41ec1e9f1197520560bc13cc5da24e04e6f * fix: Update bazel builds for ER client libraries. PiperOrigin-RevId: 355832930 Source-Author: Google APIs Source-Date: Fri Feb 5 05:42:21 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 408590478542a058f2f1a706a402beb44844f66b Source-Link: https://github.com/googleapis/googleapis/commit/408590478542a058f2f1a706a402beb44844f66b * fix: Fix constraint resource pattern annotation PiperOrigin-RevId: 355915985 Source-Author: Google APIs Source-Date: Fri Feb 5 13:27:16 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 35ce99fec72979f6f9b2a5adae835a49648a3231 Source-Link: https://github.com/googleapis/googleapis/commit/35ce99fec72979f6f9b2a5adae835a49648a3231 * chore: update gapic-generator-python PiperOrigin-RevId: 355923884 Source-Author: Google APIs Source-Date: Fri Feb 5 14:04:52 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 5e3dacee19405529b841b53797df799c2383536c Source-Link: https://github.com/googleapis/googleapis/commit/5e3dacee19405529b841b53797df799c2383536c * chore(python): include py.typed files in release A py.typed file must be included in the released package for it to be considered typed by type checkers. https://www.python.org/dev/peps/pep-0561/#packaging-type-information. See https://github.com/googleapis/python-secret-manager/issues/79 Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Fri Feb 5 17:32:06 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: 33366574ffb9e11737b3547eb6f020ecae0536e8 Source-Link: https://github.com/googleapis/synthtool/commit/33366574ffb9e11737b3547eb6f020ecae0536e8 * feat: Make resolution status field available for error groups. Now callers can set the status of an error group by passing this to UpdateGroup. When not specified, it's treated like OPEN. feat: Make source location available for error groups created from GAE. PiperOrigin-RevId: 356330876 Source-Author: Google APIs Source-Date: Mon Feb 8 12:48:44 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: c1e59709c1d28795fe9b70eb479579556056bfad Source-Link: https://github.com/googleapis/googleapis/commit/c1e59709c1d28795fe9b70eb479579556056bfad * fix: Remove dependency on AppEngine's proto definitions. This also removes the source_references field. PiperOrigin-RevId: 356540804 Source-Author: Google APIs Source-Date: Tue Feb 9 10:53:59 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 4f60776fe99f1fd8261b6a0493a5f5f4d7e8d969 Source-Link: https://github.com/googleapis/googleapis/commit/4f60776fe99f1fd8261b6a0493a5f5f4d7e8d969 * docs: Update rules for currency_code in budget_amount. PiperOrigin-RevId: 357051517 Source-Author: Google APIs Source-Date: Thu Feb 11 13:54:03 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: f3a60f63c13fb434745ea59b990a82d6ffc803b5 Source-Link: https://github.com/googleapis/googleapis/commit/f3a60f63c13fb434745ea59b990a82d6ffc803b5 * feat: Update documentai/v1beta3 protos: add support for boolean normalized value PiperOrigin-RevId: 359109762 Source-Author: Google APIs Source-Date: Tue Feb 23 12:45:26 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 8c058c505afc717966bc815075bdd11ff76618e5 Source-Link: https://github.com/googleapis/googleapis/commit/8c058c505afc717966bc815075bdd11ff76618e5 * chore: update gapic-generator-python to 0.40.11 PiperOrigin-RevId: 359562873 Source-Author: Google APIs Source-Date: Thu Feb 25 10:52:32 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: 07932bb995e7dc91b43620ea8402c6668c7d102c Source-Link: https://github.com/googleapis/googleapis/commit/07932bb995e7dc91b43620ea8402c6668c7d102c * chore: clean up unused gapic.legacy.yaml files Committer: @miraleung PiperOrigin-RevId: 359580699 Source-Author: Google APIs Source-Date: Thu Feb 25 12:03:52 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: d9b32e92fa57c37e5af0dc03badfe741170c5849 Source-Link: https://github.com/googleapis/googleapis/commit/d9b32e92fa57c37e5af0dc03badfe741170c5849 * chore: update protobuf v3.15.3 This release makes --experimental_allow_proto3_optional no longer necessary. PiperOrigin-RevId: 359781040 Source-Author: Google APIs Source-Date: Fri Feb 26 09:59:49 2021 -0800 Source-Repo: googleapis/googleapis Source-Sha: f6dd7e47620566925a4b3f1ce029e74e1b2f2516 Source-Link: https://github.com/googleapis/googleapis/commit/f6dd7e47620566925a4b3f1ce029e74e1b2f2516 Co-authored-by: Daniel Sanche --- .../google-cloud-error-reporting/.coveragerc | 22 +- .../error_group_service.rst | 6 + .../error_stats_service.rst | 11 + .../report_errors_service.rst | 6 + .../docs/errorreporting_v1beta1/services.rst | 14 +- .../docs/errorreporting_v1beta1/types.rst | 1 + .../cloud/errorreporting_v1beta1/__init__.py | 6 +- .../errorreporting_v1beta1/proto/common.proto | 31 +- .../proto/error_group_service.proto | 5 +- .../proto/error_stats_service.proto | 17 +- .../proto/report_errors_service.proto | 22 +- .../error_group_service/async_client.py | 45 ++- .../services/error_group_service/client.py | 56 ++-- .../error_group_service/transports/grpc.py | 23 +- .../transports/grpc_asyncio.py | 23 +- .../error_stats_service/async_client.py | 76 +++-- .../services/error_stats_service/client.py | 93 +++--- .../services/error_stats_service/pagers.py | 43 +-- .../error_stats_service/transports/grpc.py | 23 +- .../transports/grpc_asyncio.py | 23 +- .../report_errors_service/async_client.py | 58 +++- .../services/report_errors_service/client.py | 69 +++-- .../report_errors_service/transports/grpc.py | 35 ++- .../transports/grpc_asyncio.py | 35 ++- .../errorreporting_v1beta1/types/__init__.py | 2 + .../errorreporting_v1beta1/types/common.py | 30 +- .../types/error_group_service.py | 4 +- .../types/error_stats_service.py | 64 ++-- .../types/report_errors_service.py | 15 +- .../synth.metadata | 10 +- .../gapic/errorreporting_v1beta1/__init__.py | 15 + .../test_error_group_service.py | 278 ++++++++++++------ .../test_error_stats_service.py | 266 ++++++++++++----- .../test_report_errors_service.py | 236 ++++++++++----- 34 files changed, 1141 insertions(+), 522 deletions(-) create mode 100644 packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_group_service.rst create mode 100644 packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_stats_service.rst create mode 100644 packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/report_errors_service.rst diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc index 10cb72e8ddfc..9a9b9f3e44cb 100644 --- a/packages/google-cloud-error-reporting/.coveragerc +++ b/packages/google-cloud-error-reporting/.coveragerc @@ -1,27 +1,11 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -# Generated by synthtool. DO NOT EDIT! [run] branch = True [report] fail_under = 100 show_missing = True -omit = google/cloud/errorreporting/__init__.py, .nox/* +omit = + google/cloud/errorreporting/__init__.py exclude_lines = # Re-enable the standard pragma pragma: NO COVER @@ -31,4 +15,4 @@ exclude_lines = # This is added at the module level as a safeguard for if someone # generates the code and tries to run it without pip installing. This # makes it virtually impossible to test properly. - except pkg_resources.DistributionNotFound \ No newline at end of file + except pkg_resources.DistributionNotFound diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_group_service.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_group_service.rst new file mode 100644 index 000000000000..dd2135250c67 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_group_service.rst @@ -0,0 +1,6 @@ +ErrorGroupService +----------------------------------- + +.. automodule:: google.cloud.errorreporting_v1beta1.services.error_group_service + :members: + :inherited-members: diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_stats_service.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_stats_service.rst new file mode 100644 index 000000000000..30d29e696d69 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_stats_service.rst @@ -0,0 +1,11 @@ +ErrorStatsService +----------------------------------- + +.. automodule:: google.cloud.errorreporting_v1beta1.services.error_stats_service + :members: + :inherited-members: + + +.. automodule:: google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers + :members: + :inherited-members: diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/report_errors_service.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/report_errors_service.rst new file mode 100644 index 000000000000..ccddb8b0af63 --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/report_errors_service.rst @@ -0,0 +1,6 @@ +ReportErrorsService +------------------------------------- + +.. automodule:: google.cloud.errorreporting_v1beta1.services.report_errors_service + :members: + :inherited-members: diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst index a5ec3b928f68..e888027f0061 100644 --- a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst @@ -1,12 +1,8 @@ Services for Google Cloud Errorreporting v1beta1 API ==================================================== +.. toctree:: + :maxdepth: 2 -.. automodule:: google.cloud.errorreporting_v1beta1.services.error_group_service - :members: - :inherited-members: -.. automodule:: google.cloud.errorreporting_v1beta1.services.error_stats_service - :members: - :inherited-members: -.. automodule:: google.cloud.errorreporting_v1beta1.services.report_errors_service - :members: - :inherited-members: + error_group_service + error_stats_service + report_errors_service diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst index 08851dbe7c01..179256c73ac9 100644 --- a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst @@ -3,4 +3,5 @@ Types for Google Cloud Errorreporting v1beta1 API .. automodule:: google.cloud.errorreporting_v1beta1.types :members: + :undoc-members: :show-inheritance: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 8db40bd7c8de..8ced2656dce0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -22,6 +22,7 @@ from .types.common import ErrorEvent from .types.common import ErrorGroup from .types.common import HttpRequestContext +from .types.common import ResolutionStatus from .types.common import ServiceContext from .types.common import SourceLocation from .types.common import TrackingIssue @@ -51,6 +52,7 @@ "ErrorEvent", "ErrorGroup", "ErrorGroupOrder", + "ErrorGroupServiceClient", "ErrorGroupStats", "ErrorStatsServiceClient", "GetGroupRequest", @@ -62,8 +64,8 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", - "ReportErrorsServiceClient", "ReportedErrorEvent", + "ResolutionStatus", "ServiceContext", "ServiceContextFilter", "SourceLocation", @@ -71,5 +73,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorGroupServiceClient", + "ReportErrorsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto index 7a1d200370da..e9bb321e400f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC. +// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,9 +16,9 @@ syntax = "proto3"; package google.devtools.clouderrorreporting.v1beta1; -import "google/api/annotations.proto"; import "google/api/resource.proto"; import "google/protobuf/timestamp.proto"; +import "google/api/annotations.proto"; option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; @@ -37,7 +37,7 @@ message ErrorGroup { }; // The group resource name. - // Example: projects/my-project-123/groups/my-groupid + // Example: projects/my-project-123/groups/CNSgkpnppqKCUw string name = 1; // Group IDs are unique for a given project. If the same kind of error @@ -46,6 +46,10 @@ message ErrorGroup { // Associated tracking issues. repeated TrackingIssue tracking_issues = 3; + + // Error group's resolution status. + // An unspecified resolution status will be interpreted as OPEN + ResolutionStatus resolution_status = 5; } // Information related to tracking the progress on resolving the error. @@ -169,3 +173,24 @@ message SourceLocation { // For example, `my.package.MyClass.method` in case of Java. string function_name = 4; } + +// Resolution status of an error group. +enum ResolutionStatus { + // Status is unknown. When left unspecified in requests, it is treated like + // OPEN. + RESOLUTION_STATUS_UNSPECIFIED = 0; + + // The error group is not being addressed. This is the default for + // new groups. It is also used for errors re-occurring after marked RESOLVED. + OPEN = 1; + + // Error Group manually acknowledged, it can have an issue link attached. + ACKNOWLEDGED = 2; + + // Error Group manually resolved, more events for this group are not expected + // to occur. + RESOLVED = 3; + + // The error group is muted and excluded by default on group stats requests. + MUTED = 4; +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto index 18182729efd6..0104b62d3cca 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC. +// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,7 +11,6 @@ // 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. -// syntax = "proto3"; @@ -58,7 +57,7 @@ service ErrorGroupService { // A request to return an individual group. message GetGroupRequest { - // The group resource name. Written as + // Required. The group resource name. Written as // `projects/{projectID}/groups/{group_name}`. Call // [`groupStats.list`](https://cloud.google.com/error-reporting/reference/rest/v1beta1/projects.groupStats/list) // to return a list of groups belonging to this project. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto index 0773f488d1cb..6c62edd9eee1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC. +// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,7 +11,6 @@ // 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. -// syntax = "proto3"; @@ -68,11 +67,11 @@ service ErrorStatsService { // Specifies a set of `ErrorGroupStats` to return. message ListGroupStatsRequest { // Required. The resource name of the Google Cloud Platform project. Written - // as projects/ plus the - // Google Cloud - // Platform project ID. + // as `projects/{projectID}` or `projects/{projectNumber}`, where `{projectID}` + // and `{projectNumber}` can be found in the + // [Google Cloud Console](https://support.google.com/cloud/answer/6158840). // - // Example: projects/my-project-123. + // Examples: `projects/my-project-123`, `projects/5551234`. string project_name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -258,9 +257,10 @@ enum ErrorGroupOrder { // Specifies a set of error events to return. message ListEventsRequest { // Required. The resource name of the Google Cloud Platform project. Written - // as `projects/` plus the + // as `projects/{projectID}`, where `{projectID}` is the // [Google Cloud Platform project // ID](https://support.google.com/cloud/answer/6158840). + // // Example: `projects/my-project-123`. string project_name = 1 [ (google.api.field_behavior) = REQUIRED, @@ -357,9 +357,10 @@ message ServiceContextFilter { // Deletes all events in the project. message DeleteEventsRequest { // Required. The resource name of the Google Cloud Platform project. Written - // as `projects/` plus the + // as `projects/{projectID}`, where `{projectID}` is the // [Google Cloud Platform project // ID](https://support.google.com/cloud/answer/6158840). + // // Example: `projects/my-project-123`. string project_name = 1 [ (google.api.field_behavior) = REQUIRED, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto index f46f546d85b7..cd1e5100b3c2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC. +// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,7 +11,6 @@ // 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. -// syntax = "proto3"; @@ -38,7 +37,7 @@ service ReportErrorsService { option (google.api.default_host) = "clouderrorreporting.googleapis.com"; option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; - // Report an individual error event. + // Report an individual error event and record the event to a log. // // This endpoint accepts **either** an OAuth token, // **or** an [API key](https://support.google.com/cloud/answer/6158862) @@ -46,7 +45,15 @@ service ReportErrorsService { // a `key` parameter. For example: // // `POST - // https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456` + // https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456` + // + // **Note:** [Error Reporting](/error-reporting) is a global service built + // on Cloud Logging and doesn't analyze logs stored + // in regional log buckets or logs routed to other Google Cloud projects. + // + // For more information, see + // [Using Error Reporting with regionalized + // logs](/error-reporting/docs/regionalization). rpc ReportErrorEvent(ReportErrorEventRequest) returns (ReportErrorEventResponse) { option (google.api.http) = { post: "/v1beta1/{project_name=projects/*}/events:report" @@ -59,10 +66,11 @@ service ReportErrorsService { // A request for reporting an individual error event. message ReportErrorEventRequest { // Required. The resource name of the Google Cloud Platform project. Written - // as `projects/` plus the + // as `projects/{projectId}`, where `{projectId}` is the // [Google Cloud Platform project - // ID](https://support.google.com/cloud/answer/6158840). Example: - // `projects/my-project-123`. + // ID](https://support.google.com/cloud/answer/6158840). + // + // Example: // `projects/my-project-123`. string project_name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 26c03996655d..e2af4bb271aa 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -78,7 +78,36 @@ class ErrorGroupServiceAsyncClient: ErrorGroupServiceClient.parse_common_location_path ) - from_service_account_file = ErrorGroupServiceClient.from_service_account_file + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ErrorGroupServiceAsyncClient: The constructed client. + """ + return ErrorGroupServiceClient.from_service_account_info.__func__(ErrorGroupServiceAsyncClient, info, *args, **kwargs) # type: ignore + + @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: + ErrorGroupServiceAsyncClient: The constructed client. + """ + return ErrorGroupServiceClient.from_service_account_file.__func__(ErrorGroupServiceAsyncClient, filename, *args, **kwargs) # type: ignore + from_service_account_json = from_service_account_file @property @@ -154,16 +183,17 @@ async def get_group( r"""Get the specified group. Args: - request (:class:`~.error_group_service.GetGroupRequest`): + request (:class:`google.cloud.errorreporting_v1beta1.types.GetGroupRequest`): The request object. A request to return an individual group. group_name (:class:`str`): - The group resource name. Written as + Required. The group resource name. Written as ``projects/{projectID}/groups/{group_name}``. Call ```groupStats.list`` `__ to return a list of groups belonging to this project. Example: ``projects/my-project-123/groups/my-group`` + This corresponds to the ``group_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -175,7 +205,7 @@ async def get_group( sent along with the request as metadata. Returns: - ~.common.ErrorGroup: + google.cloud.errorreporting_v1beta1.types.ErrorGroup: Description of a group of similar error events. @@ -233,12 +263,13 @@ async def update_group( Fails if the group does not exist. Args: - request (:class:`~.error_group_service.UpdateGroupRequest`): + request (:class:`google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest`): The request object. A request to replace the existing data for the given group. - group (:class:`~.common.ErrorGroup`): + group (:class:`google.cloud.errorreporting_v1beta1.types.ErrorGroup`): Required. The group which replaces the resource on the server. + This corresponds to the ``group`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -250,7 +281,7 @@ async def update_group( sent along with the request as metadata. Returns: - ~.common.ErrorGroup: + google.cloud.errorreporting_v1beta1.types.ErrorGroup: Description of a group of similar error events. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index d1656df2ef5c..db374a934c91 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -112,6 +112,22 @@ def _get_default_mtls_endpoint(api_endpoint): DEFAULT_ENDPOINT ) + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ErrorGroupServiceClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials @@ -124,7 +140,7 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): kwargs: Additional arguments to pass to the constructor. Returns: - {@api.name}: The constructed client. + ErrorGroupServiceClient: The constructed client. """ credentials = service_account.Credentials.from_service_account_file(filename) kwargs["credentials"] = credentials @@ -227,10 +243,10 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ~.ErrorGroupServiceTransport]): The + transport (Union[str, ErrorGroupServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (client_options_lib.ClientOptions): Custom options for the + client_options (google.api_core.client_options.ClientOptions): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -266,21 +282,17 @@ def __init__( util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) ) - ssl_credentials = None + client_cert_source_func = None is_mtls = False if use_client_cert: if client_options.client_cert_source: - import grpc # type: ignore - - cert, key = client_options.client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) is_mtls = True + client_cert_source_func = client_options.client_cert_source else: - creds = SslCredentials() - is_mtls = creds.is_mtls - ssl_credentials = creds.ssl_credentials if is_mtls else None + is_mtls = mtls.has_default_client_cert_source() + client_cert_source_func = ( + mtls.default_client_cert_source() if is_mtls else None + ) # Figure out which api endpoint to use. if client_options.api_endpoint is not None: @@ -323,7 +335,7 @@ def __init__( credentials_file=client_options.credentials_file, host=api_endpoint, scopes=client_options.scopes, - ssl_channel_credentials=ssl_credentials, + client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, ) @@ -340,16 +352,17 @@ def get_group( r"""Get the specified group. Args: - request (:class:`~.error_group_service.GetGroupRequest`): + request (google.cloud.errorreporting_v1beta1.types.GetGroupRequest): The request object. A request to return an individual group. - group_name (:class:`str`): - The group resource name. Written as + group_name (str): + Required. The group resource name. Written as ``projects/{projectID}/groups/{group_name}``. Call ```groupStats.list`` `__ to return a list of groups belonging to this project. Example: ``projects/my-project-123/groups/my-group`` + This corresponds to the ``group_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -361,7 +374,7 @@ def get_group( sent along with the request as metadata. Returns: - ~.common.ErrorGroup: + google.cloud.errorreporting_v1beta1.types.ErrorGroup: Description of a group of similar error events. @@ -420,12 +433,13 @@ def update_group( Fails if the group does not exist. Args: - request (:class:`~.error_group_service.UpdateGroupRequest`): + request (google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest): The request object. A request to replace the existing data for the given group. - group (:class:`~.common.ErrorGroup`): + group (google.cloud.errorreporting_v1beta1.types.ErrorGroup): Required. The group which replaces the resource on the server. + This corresponds to the ``group`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -437,7 +451,7 @@ def update_group( sent along with the request as metadata. Returns: - ~.common.ErrorGroup: + google.cloud.errorreporting_v1beta1.types.ErrorGroup: Description of a group of similar error events. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 102cdd39797b..b6a71e1fbdd1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -58,6 +58,7 @@ def __init__( api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, ssl_channel_credentials: grpc.ChannelCredentials = None, + client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -88,6 +89,10 @@ def __init__( ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials for grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -104,6 +109,11 @@ def __init__( """ self._ssl_channel_credentials = ssl_channel_credentials + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -113,11 +123,6 @@ def __init__( self._grpc_channel = channel self._ssl_channel_credentials = None elif api_mtls_endpoint: - warnings.warn( - "api_mtls_endpoint and client_cert_source are deprecated", - DeprecationWarning, - ) - host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -161,12 +166,18 @@ def __init__( scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id ) + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + # create a new channel. The provided one is ignored. self._grpc_channel = type(self).create_channel( host, credentials=credentials, credentials_file=credentials_file, - ssl_credentials=ssl_channel_credentials, + ssl_credentials=self._ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index f6ed3855b712..6fd7366313bb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -102,6 +102,7 @@ def __init__( api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, ssl_channel_credentials: grpc.ChannelCredentials = None, + client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -133,6 +134,10 @@ def __init__( ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials for grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -149,6 +154,11 @@ def __init__( """ self._ssl_channel_credentials = ssl_channel_credentials + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -158,11 +168,6 @@ def __init__( self._grpc_channel = channel self._ssl_channel_credentials = None elif api_mtls_endpoint: - warnings.warn( - "api_mtls_endpoint and client_cert_source are deprecated", - DeprecationWarning, - ) - host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -206,12 +211,18 @@ def __init__( scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id ) + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + # create a new channel. The provided one is ignored. self._grpc_channel = type(self).create_channel( host, credentials=credentials, credentials_file=credentials_file, - ssl_credentials=ssl_channel_credentials, + ssl_credentials=self._ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 20e91256f746..ca11614136eb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -81,7 +81,36 @@ class ErrorStatsServiceAsyncClient: ErrorStatsServiceClient.parse_common_location_path ) - from_service_account_file = ErrorStatsServiceClient.from_service_account_file + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ErrorStatsServiceAsyncClient: The constructed client. + """ + return ErrorStatsServiceClient.from_service_account_info.__func__(ErrorStatsServiceAsyncClient, info, *args, **kwargs) # type: ignore + + @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: + ErrorStatsServiceAsyncClient: The constructed client. + """ + return ErrorStatsServiceClient.from_service_account_file.__func__(ErrorStatsServiceAsyncClient, filename, *args, **kwargs) # type: ignore + from_service_account_json = from_service_account_file @property @@ -158,22 +187,23 @@ async def list_group_stats( r"""Lists the specified groups. Args: - request (:class:`~.error_stats_service.ListGroupStatsRequest`): + request (:class:`google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest`): The request object. Specifies a set of `ErrorGroupStats` to return. project_name (:class:`str`): - Required. The resource name of the - Google Cloud Platform project. Written - as projects/ plus the Google - Cloud Platform project ID. - - Example: projects/my- - project-123. + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/{projectID}`` or + ``projects/{projectNumber}``, where ``{projectID}`` and + ``{projectNumber}`` can be found in the `Google Cloud + Console `__. + + Examples: ``projects/my-project-123``, + ``projects/5551234``. + This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - time_range (:class:`~.error_stats_service.QueryTimeRange`): + time_range (:class:`google.cloud.errorreporting_v1beta1.types.QueryTimeRange`): Optional. List data for the given time range. If not set, a default time range is used. The field time_range_begin in the response will specify the @@ -182,6 +212,7 @@ async def list_group_stats( unless the request contains an explicit group_id list. If a group_id list is given, also ErrorGroupStats with zero occurrences are returned. + This corresponds to the ``time_range`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -193,7 +224,7 @@ async def list_group_stats( sent along with the request as metadata. Returns: - ~.pagers.ListGroupStatsAsyncPager: + google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListGroupStatsAsyncPager: Contains a set of requested error group stats. Iterating over this object will yield @@ -262,21 +293,24 @@ async def list_events( r"""Lists the specified events. Args: - request (:class:`~.error_stats_service.ListEventsRequest`): + request (:class:`google.cloud.errorreporting_v1beta1.types.ListEventsRequest`): The request object. Specifies a set of error events to return. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectID}``, where + ``{projectID}`` is the `Google Cloud Platform project ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. group_id (:class:`str`): Required. The group for which events shall be returned. + This corresponds to the ``group_id`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -288,7 +322,7 @@ async def list_events( sent along with the request as metadata. Returns: - ~.pagers.ListEventsAsyncPager: + google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListEventsAsyncPager: Contains a set of requested error events. Iterating over this object will yield @@ -356,14 +390,16 @@ async def delete_events( r"""Deletes all error events of a given project. Args: - request (:class:`~.error_stats_service.DeleteEventsRequest`): + request (:class:`google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest`): The request object. Deletes all events in the project. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectID}``, where + ``{projectID}`` is the `Google Cloud Platform project ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -375,7 +411,7 @@ async def delete_events( sent along with the request as metadata. Returns: - ~.error_stats_service.DeleteEventsResponse: + google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse: Response message for deleting error events. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index f04fbfefb5a3..7178412c44e1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -115,6 +115,22 @@ def _get_default_mtls_endpoint(api_endpoint): DEFAULT_ENDPOINT ) + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ErrorStatsServiceClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials @@ -127,7 +143,7 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): kwargs: Additional arguments to pass to the constructor. Returns: - {@api.name}: The constructed client. + ErrorStatsServiceClient: The constructed client. """ credentials = service_account.Credentials.from_service_account_file(filename) kwargs["credentials"] = credentials @@ -230,10 +246,10 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ~.ErrorStatsServiceTransport]): The + transport (Union[str, ErrorStatsServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (client_options_lib.ClientOptions): Custom options for the + client_options (google.api_core.client_options.ClientOptions): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -269,21 +285,17 @@ def __init__( util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) ) - ssl_credentials = None + client_cert_source_func = None is_mtls = False if use_client_cert: if client_options.client_cert_source: - import grpc # type: ignore - - cert, key = client_options.client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) is_mtls = True + client_cert_source_func = client_options.client_cert_source else: - creds = SslCredentials() - is_mtls = creds.is_mtls - ssl_credentials = creds.ssl_credentials if is_mtls else None + is_mtls = mtls.has_default_client_cert_source() + client_cert_source_func = ( + mtls.default_client_cert_source() if is_mtls else None + ) # Figure out which api endpoint to use. if client_options.api_endpoint is not None: @@ -326,7 +338,7 @@ def __init__( credentials_file=client_options.credentials_file, host=api_endpoint, scopes=client_options.scopes, - ssl_channel_credentials=ssl_credentials, + client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, ) @@ -344,22 +356,23 @@ def list_group_stats( r"""Lists the specified groups. Args: - request (:class:`~.error_stats_service.ListGroupStatsRequest`): + request (google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest): The request object. Specifies a set of `ErrorGroupStats` to return. - project_name (:class:`str`): - Required. The resource name of the - Google Cloud Platform project. Written - as projects/ plus the Google - Cloud Platform project ID. - - Example: projects/my- - project-123. + project_name (str): + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/{projectID}`` or + ``projects/{projectNumber}``, where ``{projectID}`` and + ``{projectNumber}`` can be found in the `Google Cloud + Console `__. + + Examples: ``projects/my-project-123``, + ``projects/5551234``. + This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - time_range (:class:`~.error_stats_service.QueryTimeRange`): + time_range (google.cloud.errorreporting_v1beta1.types.QueryTimeRange): Optional. List data for the given time range. If not set, a default time range is used. The field time_range_begin in the response will specify the @@ -368,6 +381,7 @@ def list_group_stats( unless the request contains an explicit group_id list. If a group_id list is given, also ErrorGroupStats with zero occurrences are returned. + This corresponds to the ``time_range`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -379,7 +393,7 @@ def list_group_stats( sent along with the request as metadata. Returns: - ~.pagers.ListGroupStatsPager: + google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListGroupStatsPager: Contains a set of requested error group stats. Iterating over this object will yield @@ -449,21 +463,24 @@ def list_events( r"""Lists the specified events. Args: - request (:class:`~.error_stats_service.ListEventsRequest`): + request (google.cloud.errorreporting_v1beta1.types.ListEventsRequest): The request object. Specifies a set of error events to return. - project_name (:class:`str`): + project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectID}``, where + ``{projectID}`` is the `Google Cloud Platform project ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - group_id (:class:`str`): + group_id (str): Required. The group for which events shall be returned. + This corresponds to the ``group_id`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -475,7 +492,7 @@ def list_events( sent along with the request as metadata. Returns: - ~.pagers.ListEventsPager: + google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListEventsPager: Contains a set of requested error events. Iterating over this object will yield @@ -544,14 +561,16 @@ def delete_events( r"""Deletes all error events of a given project. Args: - request (:class:`~.error_stats_service.DeleteEventsRequest`): + request (google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest): The request object. Deletes all events in the project. - project_name (:class:`str`): + project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectID}``, where + ``{projectID}`` is the `Google Cloud Platform project ID `__. + Example: ``projects/my-project-123``. + This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -563,7 +582,7 @@ def delete_events( sent along with the request as metadata. Returns: - ~.error_stats_service.DeleteEventsResponse: + google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse: Response message for deleting error events. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index 02a4faa4c614..a5d6c02f5cc2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -15,7 +15,16 @@ # limitations under the License. # -from typing import Any, AsyncIterable, Awaitable, Callable, Iterable, Sequence, Tuple +from typing import ( + Any, + AsyncIterable, + Awaitable, + Callable, + Iterable, + Sequence, + Tuple, + Optional, +) from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -25,7 +34,7 @@ class ListGroupStatsPager: """A pager for iterating through ``list_group_stats`` requests. This class thinly wraps an initial - :class:`~.error_stats_service.ListGroupStatsResponse` object, and + :class:`google.cloud.errorreporting_v1beta1.types.ListGroupStatsResponse` object, and provides an ``__iter__`` method to iterate through its ``error_group_stats`` field. @@ -34,7 +43,7 @@ class ListGroupStatsPager: through the ``error_group_stats`` field on the corresponding responses. - All the usual :class:`~.error_stats_service.ListGroupStatsResponse` + All the usual :class:`google.cloud.errorreporting_v1beta1.types.ListGroupStatsResponse` attributes are available on the pager. If multiple requests are made, only the most recent response is retained, and thus used for attribute lookup. """ @@ -52,9 +61,9 @@ def __init__( Args: method (Callable): The method that was originally called, and which instantiated this pager. - request (:class:`~.error_stats_service.ListGroupStatsRequest`): + request (google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest): The initial request object. - response (:class:`~.error_stats_service.ListGroupStatsResponse`): + response (google.cloud.errorreporting_v1beta1.types.ListGroupStatsResponse): The initial response object. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. @@ -87,7 +96,7 @@ class ListGroupStatsAsyncPager: """A pager for iterating through ``list_group_stats`` requests. This class thinly wraps an initial - :class:`~.error_stats_service.ListGroupStatsResponse` object, and + :class:`google.cloud.errorreporting_v1beta1.types.ListGroupStatsResponse` object, and provides an ``__aiter__`` method to iterate through its ``error_group_stats`` field. @@ -96,7 +105,7 @@ class ListGroupStatsAsyncPager: through the ``error_group_stats`` field on the corresponding responses. - All the usual :class:`~.error_stats_service.ListGroupStatsResponse` + All the usual :class:`google.cloud.errorreporting_v1beta1.types.ListGroupStatsResponse` attributes are available on the pager. If multiple requests are made, only the most recent response is retained, and thus used for attribute lookup. """ @@ -114,9 +123,9 @@ def __init__( Args: method (Callable): The method that was originally called, and which instantiated this pager. - request (:class:`~.error_stats_service.ListGroupStatsRequest`): + request (google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest): The initial request object. - response (:class:`~.error_stats_service.ListGroupStatsResponse`): + response (google.cloud.errorreporting_v1beta1.types.ListGroupStatsResponse): The initial response object. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. @@ -153,7 +162,7 @@ class ListEventsPager: """A pager for iterating through ``list_events`` requests. This class thinly wraps an initial - :class:`~.error_stats_service.ListEventsResponse` object, and + :class:`google.cloud.errorreporting_v1beta1.types.ListEventsResponse` object, and provides an ``__iter__`` method to iterate through its ``error_events`` field. @@ -162,7 +171,7 @@ class ListEventsPager: through the ``error_events`` field on the corresponding responses. - All the usual :class:`~.error_stats_service.ListEventsResponse` + All the usual :class:`google.cloud.errorreporting_v1beta1.types.ListEventsResponse` attributes are available on the pager. If multiple requests are made, only the most recent response is retained, and thus used for attribute lookup. """ @@ -180,9 +189,9 @@ def __init__( Args: method (Callable): The method that was originally called, and which instantiated this pager. - request (:class:`~.error_stats_service.ListEventsRequest`): + request (google.cloud.errorreporting_v1beta1.types.ListEventsRequest): The initial request object. - response (:class:`~.error_stats_service.ListEventsResponse`): + response (google.cloud.errorreporting_v1beta1.types.ListEventsResponse): The initial response object. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. @@ -215,7 +224,7 @@ class ListEventsAsyncPager: """A pager for iterating through ``list_events`` requests. This class thinly wraps an initial - :class:`~.error_stats_service.ListEventsResponse` object, and + :class:`google.cloud.errorreporting_v1beta1.types.ListEventsResponse` object, and provides an ``__aiter__`` method to iterate through its ``error_events`` field. @@ -224,7 +233,7 @@ class ListEventsAsyncPager: through the ``error_events`` field on the corresponding responses. - All the usual :class:`~.error_stats_service.ListEventsResponse` + All the usual :class:`google.cloud.errorreporting_v1beta1.types.ListEventsResponse` attributes are available on the pager. If multiple requests are made, only the most recent response is retained, and thus used for attribute lookup. """ @@ -242,9 +251,9 @@ def __init__( Args: method (Callable): The method that was originally called, and which instantiated this pager. - request (:class:`~.error_stats_service.ListEventsRequest`): + request (google.cloud.errorreporting_v1beta1.types.ListEventsRequest): The initial request object. - response (:class:`~.error_stats_service.ListEventsResponse`): + response (google.cloud.errorreporting_v1beta1.types.ListEventsResponse): The initial response object. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index f9595d231cda..6a5328c5cc76 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -58,6 +58,7 @@ def __init__( api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, ssl_channel_credentials: grpc.ChannelCredentials = None, + client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -88,6 +89,10 @@ def __init__( ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials for grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -104,6 +109,11 @@ def __init__( """ self._ssl_channel_credentials = ssl_channel_credentials + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -113,11 +123,6 @@ def __init__( self._grpc_channel = channel self._ssl_channel_credentials = None elif api_mtls_endpoint: - warnings.warn( - "api_mtls_endpoint and client_cert_source are deprecated", - DeprecationWarning, - ) - host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -161,12 +166,18 @@ def __init__( scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id ) + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + # create a new channel. The provided one is ignored. self._grpc_channel = type(self).create_channel( host, credentials=credentials, credentials_file=credentials_file, - ssl_credentials=ssl_channel_credentials, + ssl_credentials=self._ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 4c687c1105f5..336e180aac9d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -102,6 +102,7 @@ def __init__( api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, ssl_channel_credentials: grpc.ChannelCredentials = None, + client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -133,6 +134,10 @@ def __init__( ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials for grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -149,6 +154,11 @@ def __init__( """ self._ssl_channel_credentials = ssl_channel_credentials + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -158,11 +168,6 @@ def __init__( self._grpc_channel = channel self._ssl_channel_credentials = None elif api_mtls_endpoint: - warnings.warn( - "api_mtls_endpoint and client_cert_source are deprecated", - DeprecationWarning, - ) - host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -206,12 +211,18 @@ def __init__( scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id ) + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + # create a new channel. The provided one is ignored. self._grpc_channel = type(self).create_channel( host, credentials=credentials, credentials_file=credentials_file, - ssl_credentials=ssl_channel_credentials, + ssl_credentials=self._ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 3b7c6fcf3514..61f223b6b2b0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -72,7 +72,36 @@ class ReportErrorsServiceAsyncClient: ReportErrorsServiceClient.parse_common_location_path ) - from_service_account_file = ReportErrorsServiceClient.from_service_account_file + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ReportErrorsServiceAsyncClient: The constructed client. + """ + return ReportErrorsServiceClient.from_service_account_info.__func__(ReportErrorsServiceAsyncClient, info, *args, **kwargs) # type: ignore + + @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: + ReportErrorsServiceAsyncClient: The constructed client. + """ + return ReportErrorsServiceClient.from_service_account_file.__func__(ReportErrorsServiceAsyncClient, filename, *args, **kwargs) # type: ignore + from_service_account_json = from_service_account_file @property @@ -147,31 +176,42 @@ async def report_error_event( timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> report_errors_service.ReportErrorEventResponse: - r"""Report an individual error event. + r"""Report an individual error event and record the event to a log. This endpoint accepts **either** an OAuth token, **or** an `API key `__ for authentication. To use an API key, append it to the URL as the value of a ``key`` parameter. For example: - ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + ``POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`` + + **Note:** `Error Reporting `__ is a global + service built on Cloud Logging and doesn't analyze logs stored + in regional log buckets or logs routed to other Google Cloud + projects. + + For more information, see `Using Error Reporting with + regionalized logs `__. Args: - request (:class:`~.report_errors_service.ReportErrorEventRequest`): + request (:class:`google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest`): The request object. A request for reporting an individual error event. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectId}``, where + ``{projectId}`` is the `Google Cloud Platform project ID `__. - Example: ``projects/my-project-123``. + + Example: // ``projects/my-project-123``. + This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - event (:class:`~.report_errors_service.ReportedErrorEvent`): + event (:class:`google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent`): Required. The error event to be reported. + This corresponds to the ``event`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -183,7 +223,7 @@ async def report_error_event( sent along with the request as metadata. Returns: - ~.report_errors_service.ReportErrorEventResponse: + google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse: Response for reporting an individual error event. Data may be added to this message in the future. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index b10ecca4f68b..840e449fd1fc 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -111,6 +111,22 @@ def _get_default_mtls_endpoint(api_endpoint): DEFAULT_ENDPOINT ) + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ReportErrorsServiceClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials @@ -123,7 +139,7 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): kwargs: Additional arguments to pass to the constructor. Returns: - {@api.name}: The constructed client. + ReportErrorsServiceClient: The constructed client. """ credentials = service_account.Credentials.from_service_account_file(filename) kwargs["credentials"] = credentials @@ -215,10 +231,10 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ~.ReportErrorsServiceTransport]): The + transport (Union[str, ReportErrorsServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (client_options_lib.ClientOptions): Custom options for the + client_options (google.api_core.client_options.ClientOptions): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -254,21 +270,17 @@ def __init__( util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) ) - ssl_credentials = None + client_cert_source_func = None is_mtls = False if use_client_cert: if client_options.client_cert_source: - import grpc # type: ignore - - cert, key = client_options.client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) is_mtls = True + client_cert_source_func = client_options.client_cert_source else: - creds = SslCredentials() - is_mtls = creds.is_mtls - ssl_credentials = creds.ssl_credentials if is_mtls else None + is_mtls = mtls.has_default_client_cert_source() + client_cert_source_func = ( + mtls.default_client_cert_source() if is_mtls else None + ) # Figure out which api endpoint to use. if client_options.api_endpoint is not None: @@ -311,7 +323,7 @@ def __init__( credentials_file=client_options.credentials_file, host=api_endpoint, scopes=client_options.scopes, - ssl_channel_credentials=ssl_credentials, + client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, ) @@ -326,31 +338,42 @@ def report_error_event( timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> report_errors_service.ReportErrorEventResponse: - r"""Report an individual error event. + r"""Report an individual error event and record the event to a log. This endpoint accepts **either** an OAuth token, **or** an `API key `__ for authentication. To use an API key, append it to the URL as the value of a ``key`` parameter. For example: - ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + ``POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`` + + **Note:** `Error Reporting `__ is a global + service built on Cloud Logging and doesn't analyze logs stored + in regional log buckets or logs routed to other Google Cloud + projects. + + For more information, see `Using Error Reporting with + regionalized logs `__. Args: - request (:class:`~.report_errors_service.ReportErrorEventRequest`): + request (google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest): The request object. A request for reporting an individual error event. - project_name (:class:`str`): + project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectId}``, where + ``{projectId}`` is the `Google Cloud Platform project ID `__. - Example: ``projects/my-project-123``. + + Example: // ``projects/my-project-123``. + This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - event (:class:`~.report_errors_service.ReportedErrorEvent`): + event (google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent): Required. The error event to be reported. + This corresponds to the ``event`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -362,7 +385,7 @@ def report_error_event( sent along with the request as metadata. Returns: - ~.report_errors_service.ReportErrorEventResponse: + google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse: Response for reporting an individual error event. Data may be added to this message in the future. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index f2c84d9237fd..f7eea1716a42 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -57,6 +57,7 @@ def __init__( api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, ssl_channel_credentials: grpc.ChannelCredentials = None, + client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -87,6 +88,10 @@ def __init__( ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials for grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -103,6 +108,11 @@ def __init__( """ self._ssl_channel_credentials = ssl_channel_credentials + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -112,11 +122,6 @@ def __init__( self._grpc_channel = channel self._ssl_channel_credentials = None elif api_mtls_endpoint: - warnings.warn( - "api_mtls_endpoint and client_cert_source are deprecated", - DeprecationWarning, - ) - host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -160,12 +165,18 @@ def __init__( scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id ) + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + # create a new channel. The provided one is ignored. self._grpc_channel = type(self).create_channel( host, credentials=credentials, credentials_file=credentials_file, - ssl_credentials=ssl_channel_credentials, + ssl_credentials=self._ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ @@ -246,14 +257,22 @@ def report_error_event( ]: r"""Return a callable for the report error event method over gRPC. - Report an individual error event. + Report an individual error event and record the event to a log. This endpoint accepts **either** an OAuth token, **or** an `API key `__ for authentication. To use an API key, append it to the URL as the value of a ``key`` parameter. For example: - ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + ``POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`` + + **Note:** `Error Reporting `__ is a global + service built on Cloud Logging and doesn't analyze logs stored + in regional log buckets or logs routed to other Google Cloud + projects. + + For more information, see `Using Error Reporting with + regionalized logs `__. Returns: Callable[[~.ReportErrorEventRequest], diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 39465e572b55..80327fd807b7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -101,6 +101,7 @@ def __init__( api_mtls_endpoint: str = None, client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, ssl_channel_credentials: grpc.ChannelCredentials = None, + client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -132,6 +133,10 @@ def __init__( ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials for grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -148,6 +153,11 @@ def __init__( """ self._ssl_channel_credentials = ssl_channel_credentials + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + if channel: # Sanity check: Ensure that channel and credentials are not both # provided. @@ -157,11 +167,6 @@ def __init__( self._grpc_channel = channel self._ssl_channel_credentials = None elif api_mtls_endpoint: - warnings.warn( - "api_mtls_endpoint and client_cert_source are deprecated", - DeprecationWarning, - ) - host = ( api_mtls_endpoint if ":" in api_mtls_endpoint @@ -205,12 +210,18 @@ def __init__( scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id ) + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + # create a new channel. The provided one is ignored. self._grpc_channel = type(self).create_channel( host, credentials=credentials, credentials_file=credentials_file, - ssl_credentials=ssl_channel_credentials, + ssl_credentials=self._ssl_channel_credentials, scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ @@ -250,14 +261,22 @@ def report_error_event( ]: r"""Return a callable for the report error event method over gRPC. - Report an individual error event. + Report an individual error event and record the event to a log. This endpoint accepts **either** an OAuth token, **or** an `API key `__ for authentication. To use an API key, append it to the URL as the value of a ``key`` parameter. For example: - ``POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456`` + ``POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`` + + **Note:** `Error Reporting `__ is a global + service built on Cloud Logging and doesn't analyze logs stored + in regional log buckets or logs routed to other Google Cloud + projects. + + For more information, see `Using Error Reporting with + regionalized logs `__. Returns: Callable[[~.ReportErrorEventRequest], diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py index fc7243befc5a..8819a78f7f83 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -23,6 +23,7 @@ ErrorContext, HttpRequestContext, SourceLocation, + ResolutionStatus, ) from .error_group_service import ( GetGroupRequest, @@ -56,6 +57,7 @@ "ErrorContext", "HttpRequestContext", "SourceLocation", + "ResolutionStatus", "GetGroupRequest", "UpdateGroupRequest", "ListGroupStatsRequest", diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 779aa45335da..e0d1a7ebafda 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -24,6 +24,7 @@ __protobuf__ = proto.module( package="google.devtools.clouderrorreporting.v1beta1", manifest={ + "ResolutionStatus", "ErrorGroup", "TrackingIssue", "ErrorEvent", @@ -35,6 +36,15 @@ ) +class ResolutionStatus(proto.Enum): + r"""Resolution status of an error group.""" + RESOLUTION_STATUS_UNSPECIFIED = 0 + OPEN = 1 + ACKNOWLEDGED = 2 + RESOLVED = 3 + MUTED = 4 + + class ErrorGroup(proto.Message): r"""Description of a group of similar error events. @@ -42,14 +52,18 @@ class ErrorGroup(proto.Message): name (str): The group resource name. Example: projects/my- - project-123/groups/my-groupid + project-123/groups/CNSgkpnppqKCUw group_id (str): Group IDs are unique for a given project. If the same kind of error occurs in different service contexts, it will receive the same group ID. - tracking_issues (Sequence[~.common.TrackingIssue]): + tracking_issues (Sequence[google.cloud.errorreporting_v1beta1.types.TrackingIssue]): Associated tracking issues. + resolution_status (google.cloud.errorreporting_v1beta1.types.ResolutionStatus): + Error group's resolution status. + An unspecified resolution status will be + interpreted as OPEN """ name = proto.Field(proto.STRING, number=1) @@ -60,6 +74,8 @@ class ErrorGroup(proto.Message): proto.MESSAGE, number=3, message="TrackingIssue", ) + resolution_status = proto.Field(proto.ENUM, number=5, enum="ResolutionStatus",) + class TrackingIssue(proto.Message): r"""Information related to tracking the progress on resolving the @@ -80,17 +96,17 @@ class ErrorEvent(proto.Message): system. Attributes: - event_time (~.timestamp.Timestamp): + event_time (google.protobuf.timestamp_pb2.Timestamp): Time when the event occurred as provided in the error report. If the report did not contain a timestamp, the time the error was received by the Error Reporting system is used. - service_context (~.common.ServiceContext): + service_context (google.cloud.errorreporting_v1beta1.types.ServiceContext): The ``ServiceContext`` for which this error was reported. message (str): The stack trace that was reported or logged by the service. - context (~.common.ErrorContext): + context (google.cloud.errorreporting_v1beta1.types.ErrorContext): Data about the context in which the error occurred. """ @@ -149,7 +165,7 @@ class ErrorContext(proto.Message): Engine logs. Attributes: - http_request (~.common.HttpRequestContext): + http_request (google.cloud.errorreporting_v1beta1.types.HttpRequestContext): The HTTP request which was processed when the error was triggered. user (str): @@ -160,7 +176,7 @@ class ErrorContext(proto.Message): this case the Error Reporting system will use other data, such as remote IP address, to distinguish affected users. See ``affected_users_count`` in ``ErrorGroupStats``. - report_location (~.common.SourceLocation): + report_location (google.cloud.errorreporting_v1beta1.types.SourceLocation): The location in the source code where the decision was made to report the error, usually the place where it was logged. For a logged diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index 70aa92a8251a..e36854b6a532 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -32,7 +32,7 @@ class GetGroupRequest(proto.Message): Attributes: group_name (str): - The group resource name. Written as + Required. The group resource name. Written as ``projects/{projectID}/groups/{group_name}``. Call ```groupStats.list`` `__ to return a list of groups belonging to this project. @@ -47,7 +47,7 @@ class UpdateGroupRequest(proto.Message): r"""A request to replace the existing data for the given group. Attributes: - group (~.common.ErrorGroup): + group (google.cloud.errorreporting_v1beta1.types.ErrorGroup): Required. The group which replaces the resource on the server. """ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index 51a14e89f6dd..3973ca04281f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -65,23 +65,23 @@ class ListGroupStatsRequest(proto.Message): Attributes: project_name (str): - Required. The resource name of the Google - Cloud Platform project. Written as - projects/ plus the Google - Cloud Platform project ID. + Required. The resource name of the Google Cloud Platform + project. Written as ``projects/{projectID}`` or + ``projects/{projectNumber}``, where ``{projectID}`` and + ``{projectNumber}`` can be found in the `Google Cloud + Console `__. - Example: projects/my-project-123. + Examples: ``projects/my-project-123``, ``projects/5551234``. group_id (Sequence[str]): Optional. List all ErrorGroupStats with these IDs. - service_filter (~.error_stats_service.ServiceContextFilter): + service_filter (google.cloud.errorreporting_v1beta1.types.ServiceContextFilter): Optional. List only ErrorGroupStats which belong to a service context that matches the filter. Data for all service contexts is returned if this field is not specified. - time_range (~.error_stats_service.QueryTimeRange): + time_range (google.cloud.errorreporting_v1beta1.types.QueryTimeRange): Optional. List data for the given time range. If not set, a default time range is used. The field time_range_begin in the response will specify the beginning of this time range. @@ -89,17 +89,17 @@ class ListGroupStatsRequest(proto.Message): range are returned, unless the request contains an explicit group_id list. If a group_id list is given, also ErrorGroupStats with zero occurrences are returned. - timed_count_duration (~.duration.Duration): + timed_count_duration (google.protobuf.duration_pb2.Duration): Optional. The preferred duration for a single returned ``TimedCount``. If not set, no timed counts are returned. - alignment (~.error_stats_service.TimedCountAlignment): + alignment (google.cloud.errorreporting_v1beta1.types.TimedCountAlignment): Optional. The alignment of the timed counts to be returned. Default is ``ALIGNMENT_EQUAL_AT_END``. - alignment_time (~.timestamp.Timestamp): + alignment_time (google.protobuf.timestamp_pb2.Timestamp): Optional. Time where the timed counts shall be aligned if rounded alignment is chosen. Default is 00:00 UTC. - order (~.error_stats_service.ErrorGroupOrder): + order (google.cloud.errorreporting_v1beta1.types.ErrorGroupOrder): Optional. The sort order in which the results are returned. Default is ``COUNT_DESC``. page_size (int): @@ -140,7 +140,7 @@ class ListGroupStatsResponse(proto.Message): r"""Contains a set of requested error group stats. Attributes: - error_group_stats (Sequence[~.error_stats_service.ErrorGroupStats]): + error_group_stats (Sequence[google.cloud.errorreporting_v1beta1.types.ErrorGroupStats]): The error group stats which match the given request. next_page_token (str): @@ -148,7 +148,7 @@ class ListGroupStatsResponse(proto.Message): Pass this token, along with the same query parameters as the first request, to view the next page of results. - time_range_begin (~.timestamp.Timestamp): + time_range_begin (google.protobuf.timestamp_pb2.Timestamp): The timestamp specifies the start time to which the request was restricted. The start time is set based on the requested time range. It may @@ -177,7 +177,7 @@ class ErrorGroupStats(proto.Message): criteria, such as a given time period and/or service filter. Attributes: - group (~.common.ErrorGroup): + group (google.cloud.errorreporting_v1beta1.types.ErrorGroup): Group data that is independent of the filter criteria. count (int): @@ -195,22 +195,22 @@ class ErrorGroupStats(proto.Message): provided in the error report. If more users are implicitly affected, such as due to a crash of the whole service, this is not reflected here. - timed_counts (Sequence[~.error_stats_service.TimedCount]): + timed_counts (Sequence[google.cloud.errorreporting_v1beta1.types.TimedCount]): Approximate number of occurrences over time. Timed counts returned by ListGroups are guaranteed to be: - Inside the requested time interval - Non-overlapping, and - Ordered by ascending time. - first_seen_time (~.timestamp.Timestamp): + first_seen_time (google.protobuf.timestamp_pb2.Timestamp): Approximate first occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the time_range that was specified in the request. - last_seen_time (~.timestamp.Timestamp): + last_seen_time (google.protobuf.timestamp_pb2.Timestamp): Approximate last occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the time_range that was specified in the request. - affected_services (Sequence[~.common.ServiceContext]): + affected_services (Sequence[google.cloud.errorreporting_v1beta1.types.ServiceContext]): Service contexts with a non-zero error count for the given filter criteria. This list can be truncated if multiple services are affected. Refer to ``num_affected_services`` @@ -218,7 +218,7 @@ class ErrorGroupStats(proto.Message): num_affected_services (int): The total number of services with a non-zero error count for the given filter criteria. - representative (~.common.ErrorEvent): + representative (google.cloud.errorreporting_v1beta1.types.ErrorEvent): An arbitrary event that is chosen as representative for the whole group. The representative event is intended to be used as a @@ -259,10 +259,10 @@ class TimedCount(proto.Message): count (int): Approximate number of occurrences in the given time period. - start_time (~.timestamp.Timestamp): + start_time (google.protobuf.timestamp_pb2.Timestamp): Start of the time period to which ``count`` refers (included). - end_time (~.timestamp.Timestamp): + end_time (google.protobuf.timestamp_pb2.Timestamp): End of the time period to which ``count`` refers (excluded). """ @@ -279,19 +279,20 @@ class ListEventsRequest(proto.Message): Attributes: project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectID}``, where + ``{projectID}`` is the `Google Cloud Platform project ID `__. + Example: ``projects/my-project-123``. group_id (str): Required. The group for which events shall be returned. - service_filter (~.error_stats_service.ServiceContextFilter): + service_filter (google.cloud.errorreporting_v1beta1.types.ServiceContextFilter): Optional. List only ErrorGroups which belong to a service context that matches the filter. Data for all service contexts is returned if this field is not specified. - time_range (~.error_stats_service.QueryTimeRange): + time_range (google.cloud.errorreporting_v1beta1.types.QueryTimeRange): Optional. List only data for the given time range. If not set a default time range is used. The field time_range_begin in the response will specify the beginning of this time @@ -323,7 +324,7 @@ class ListEventsResponse(proto.Message): r"""Contains a set of requested error events. Attributes: - error_events (Sequence[~.common.ErrorEvent]): + error_events (Sequence[google.cloud.errorreporting_v1beta1.types.ErrorEvent]): The error events which match the given request. next_page_token (str): @@ -331,7 +332,7 @@ class ListEventsResponse(proto.Message): Pass this token, along with the same query parameters as the first request, to view the next page of results. - time_range_begin (~.timestamp.Timestamp): + time_range_begin (google.protobuf.timestamp_pb2.Timestamp): The timestamp specifies the start time to which the request was restricted. """ @@ -356,7 +357,7 @@ class QueryTimeRange(proto.Message): durations might be adjusted for lower durations. Attributes: - period (~.error_stats_service.QueryTimeRange.Period): + period (google.cloud.errorreporting_v1beta1.types.QueryTimeRange.Period): Restricts the query to the specified time range. """ @@ -404,9 +405,10 @@ class DeleteEventsRequest(proto.Message): Attributes: project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectID}``, where + ``{projectID}`` is the `Google Cloud Platform project ID `__. + Example: ``projects/my-project-123``. """ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index 1a66727bdf97..bdba6ee83aa7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -38,11 +38,12 @@ class ReportErrorEventRequest(proto.Message): Attributes: project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/`` plus the `Google Cloud - Platform project + project. Written as ``projects/{projectId}``, where + ``{projectId}`` is the `Google Cloud Platform project ID `__. - Example: ``projects/my-project-123``. - event (~.report_errors_service.ReportedErrorEvent): + + Example: // ``projects/my-project-123``. + event (google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent): Required. The error event to be reported. """ @@ -62,12 +63,12 @@ class ReportedErrorEvent(proto.Message): system. Attributes: - event_time (~.timestamp.Timestamp): + event_time (google.protobuf.timestamp_pb2.Timestamp): Optional. Time when the event occurred. If not provided, the time when the event was received by the Error Reporting system will be used. - service_context (~.common.ServiceContext): + service_context (google.cloud.errorreporting_v1beta1.types.ServiceContext): Required. The service context in which this error has occurred. message (str): @@ -96,7 +97,7 @@ class ReportedErrorEvent(proto.Message): ```(string)$exception`` `__. - **Go**: Must be the return value of ```runtime.Stack()`` `__. - context (~.common.ErrorContext): + context (google.cloud.errorreporting_v1beta1.types.ErrorContext): Optional. A description of the context in which the error occurred. """ diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index f49b243b42a3..377f5974d703 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,15 +4,15 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "eaf4a5aebe9f3cee0af211defec7ff10d5bae4a4" + "sha": "c4b168d1f4e045d72487abba88e118a15b1c99ef" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "dd372aa22ded7a8ba6f0e03a80e06358a3fa0907", - "internalRef": "347055288" + "sha": "f6dd7e47620566925a4b3f1ce029e74e1b2f2516", + "internalRef": "359781040" } }, { @@ -42,6 +42,7 @@ } ], "generatedFiles": [ + ".coveragerc", ".flake8", ".github/CONTRIBUTING.md", ".github/ISSUE_TEMPLATE/bug_report.md", @@ -95,6 +96,9 @@ "docs/_static/custom.css", "docs/_templates/layout.html", "docs/conf.py", + "docs/errorreporting_v1beta1/error_group_service.rst", + "docs/errorreporting_v1beta1/error_stats_service.rst", + "docs/errorreporting_v1beta1/report_errors_service.rst", "docs/errorreporting_v1beta1/services.rst", "docs/errorreporting_v1beta1/types.rst", "docs/multiprocessing.rst", diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py index 8b137891791f..42ffdf2bc43d 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py @@ -1 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index da93c3df41e4..814cefe8749c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -90,7 +90,24 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient] + "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] +) +def test_error_group_service_client_from_service_account_info(client_class): + creds = 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) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == "clouderrorreporting.googleapis.com:443" + + +@pytest.mark.parametrize( + "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] ) def test_error_group_service_client_from_service_account_file(client_class): creds = credentials.AnonymousCredentials() @@ -100,16 +117,21 @@ def test_error_group_service_client_from_service_account_file(client_class): factory.return_value = creds client = client_class.from_service_account_file("dummy/file/path.json") assert client.transport._credentials == creds + assert isinstance(client, client_class) client = client_class.from_service_account_json("dummy/file/path.json") assert client.transport._credentials == creds + assert isinstance(client, client_class) assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_error_group_service_client_get_transport_class(): transport = ErrorGroupServiceClient.get_transport_class() - assert transport == transports.ErrorGroupServiceGrpcTransport + available_transports = [ + transports.ErrorGroupServiceGrpcTransport, + ] + assert transport in available_transports transport = ErrorGroupServiceClient.get_transport_class("grpc") assert transport == transports.ErrorGroupServiceGrpcTransport @@ -160,7 +182,7 @@ def test_error_group_service_client_client_options( credentials_file=None, host="squid.clam.whelk", scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -176,7 +198,7 @@ def test_error_group_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -192,7 +214,7 @@ def test_error_group_service_client_client_options( credentials_file=None, host=client.DEFAULT_MTLS_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -220,7 +242,7 @@ def test_error_group_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id="octopus", client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -281,29 +303,25 @@ def test_error_group_service_client_mtls_env_auto( client_cert_source=client_cert_source_callback ) with mock.patch.object(transport_class, "__init__") as patched: - ssl_channel_creds = mock.Mock() - with mock.patch( - "grpc.ssl_channel_credentials", return_value=ssl_channel_creds - ): - patched.return_value = None - client = client_class(client_options=options) + patched.return_value = None + client = client_class(client_options=options) - if use_client_cert_env == "false": - expected_ssl_channel_creds = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_ssl_channel_creds = ssl_channel_creds - expected_host = client.DEFAULT_MTLS_ENDPOINT + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + 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, - ssl_channel_credentials=expected_ssl_channel_creds, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + 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, + ) # Check the case ADC client cert is provided. Whether client cert is used depends on # GOOGLE_API_USE_CLIENT_CERTIFICATE value. @@ -312,66 +330,53 @@ def test_error_group_service_client_mtls_env_auto( ): with mock.patch.object(transport_class, "__init__") as patched: with mock.patch( - "google.auth.transport.grpc.SslCredentials.__init__", return_value=None + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, ): with mock.patch( - "google.auth.transport.grpc.SslCredentials.is_mtls", - new_callable=mock.PropertyMock, - ) as is_mtls_mock: - with mock.patch( - "google.auth.transport.grpc.SslCredentials.ssl_credentials", - new_callable=mock.PropertyMock, - ) as ssl_credentials_mock: - if use_client_cert_env == "false": - is_mtls_mock.return_value = False - ssl_credentials_mock.return_value = None - expected_host = client.DEFAULT_ENDPOINT - expected_ssl_channel_creds = None - else: - is_mtls_mock.return_value = True - ssl_credentials_mock.return_value = mock.Mock() - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_ssl_channel_creds = ( - ssl_credentials_mock.return_value - ) - - patched.return_value = None - client = client_class() - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - ssl_channel_credentials=expected_ssl_channel_creds, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + "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 + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback - # 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.grpc.SslCredentials.__init__", return_value=None - ): - with mock.patch( - "google.auth.transport.grpc.SslCredentials.is_mtls", - new_callable=mock.PropertyMock, - ) as is_mtls_mock: - is_mtls_mock.return_value = False patched.return_value = None client = client_class() patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=expected_host, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=expected_client_cert_source, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) + # 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() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + @pytest.mark.parametrize( "client_class,transport_class,transport_name", @@ -397,7 +402,7 @@ def test_error_group_service_client_client_options_scopes( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=["1", "2"], - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -427,7 +432,7 @@ def test_error_group_service_client_client_options_credentials_file( credentials_file="credentials.json", host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -446,7 +451,7 @@ def test_error_group_service_client_client_options_from_dict(): credentials_file=None, host="squid.clam.whelk", scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -467,7 +472,9 @@ def test_get_group( with mock.patch.object(type(client.transport.get_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup( - name="name_value", group_id="group_id_value", + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, ) response = client.get_group(request) @@ -486,11 +493,29 @@ def test_get_group( assert response.group_id == "group_id_value" + assert response.resolution_status == common.ResolutionStatus.OPEN + def test_get_group_from_dict(): test_get_group(request_type=dict) +def test_get_group_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorGroupServiceClient( + credentials=credentials.AnonymousCredentials(), transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_group), "__call__") as call: + client.get_group() + call.assert_called() + _, args, _ = call.mock_calls[0] + + assert args[0] == error_group_service.GetGroupRequest() + + @pytest.mark.asyncio async def test_get_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.GetGroupRequest @@ -507,7 +532,11 @@ async def test_get_group_async( with mock.patch.object(type(client.transport.get_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - common.ErrorGroup(name="name_value", group_id="group_id_value",) + common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) ) response = await client.get_group(request) @@ -525,6 +554,8 @@ async def test_get_group_async( assert response.group_id == "group_id_value" + assert response.resolution_status == common.ResolutionStatus.OPEN + @pytest.mark.asyncio async def test_get_group_async_from_dict(): @@ -666,7 +697,9 @@ def test_update_group( with mock.patch.object(type(client.transport.update_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup( - name="name_value", group_id="group_id_value", + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, ) response = client.update_group(request) @@ -685,11 +718,29 @@ def test_update_group( assert response.group_id == "group_id_value" + assert response.resolution_status == common.ResolutionStatus.OPEN + def test_update_group_from_dict(): test_update_group(request_type=dict) +def test_update_group_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorGroupServiceClient( + credentials=credentials.AnonymousCredentials(), transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.update_group), "__call__") as call: + client.update_group() + call.assert_called() + _, args, _ = call.mock_calls[0] + + assert args[0] == error_group_service.UpdateGroupRequest() + + @pytest.mark.asyncio async def test_update_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.UpdateGroupRequest @@ -706,7 +757,11 @@ async def test_update_group_async( with mock.patch.object(type(client.transport.update_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - common.ErrorGroup(name="name_value", group_id="group_id_value",) + common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) ) response = await client.update_group(request) @@ -724,6 +779,8 @@ async def test_update_group_async( assert response.group_id == "group_id_value" + assert response.resolution_status == common.ResolutionStatus.OPEN + @pytest.mark.asyncio async def test_update_group_async_from_dict(): @@ -1014,6 +1071,53 @@ def test_error_group_service_transport_auth_adc(): ) +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + ], +) +def test_error_group_service_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + def test_error_group_service_host_no_port(): client = ErrorGroupServiceClient( credentials=credentials.AnonymousCredentials(), @@ -1035,7 +1139,7 @@ def test_error_group_service_host_with_port(): def test_error_group_service_grpc_transport_channel(): - channel = grpc.insecure_channel("http://localhost/") + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) # Check that channel is used if provided. transport = transports.ErrorGroupServiceGrpcTransport( @@ -1047,7 +1151,7 @@ def test_error_group_service_grpc_transport_channel(): def test_error_group_service_grpc_asyncio_transport_channel(): - channel = aio.insecure_channel("http://localhost/") + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) # Check that channel is used if provided. transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( @@ -1058,6 +1162,8 @@ def test_error_group_service_grpc_asyncio_transport_channel(): assert transport._ssl_channel_credentials == None +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. @pytest.mark.parametrize( "transport_class", [ @@ -1072,7 +1178,7 @@ def test_error_group_service_transport_channel_mtls_with_client_cert_source( "grpc.ssl_channel_credentials", autospec=True ) as grpc_ssl_channel_cred: with mock.patch.object( - transport_class, "create_channel", autospec=True + transport_class, "create_channel" ) as grpc_create_channel: mock_ssl_cred = mock.Mock() grpc_ssl_channel_cred.return_value = mock_ssl_cred @@ -1110,6 +1216,8 @@ def test_error_group_service_transport_channel_mtls_with_client_cert_source( assert transport._ssl_channel_credentials == mock_ssl_cred +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. @pytest.mark.parametrize( "transport_class", [ @@ -1125,7 +1233,7 @@ def test_error_group_service_transport_channel_mtls_with_adc(transport_class): ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), ): with mock.patch.object( - transport_class, "create_channel", autospec=True + transport_class, "create_channel" ) as grpc_create_channel: mock_grpc_channel = mock.Mock() grpc_create_channel.return_value = mock_grpc_channel diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 2ea6942063fc..1966becb949a 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -93,7 +93,24 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient] + "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] +) +def test_error_stats_service_client_from_service_account_info(client_class): + creds = 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) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == "clouderrorreporting.googleapis.com:443" + + +@pytest.mark.parametrize( + "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] ) def test_error_stats_service_client_from_service_account_file(client_class): creds = credentials.AnonymousCredentials() @@ -103,16 +120,21 @@ def test_error_stats_service_client_from_service_account_file(client_class): factory.return_value = creds client = client_class.from_service_account_file("dummy/file/path.json") assert client.transport._credentials == creds + assert isinstance(client, client_class) client = client_class.from_service_account_json("dummy/file/path.json") assert client.transport._credentials == creds + assert isinstance(client, client_class) assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_error_stats_service_client_get_transport_class(): transport = ErrorStatsServiceClient.get_transport_class() - assert transport == transports.ErrorStatsServiceGrpcTransport + available_transports = [ + transports.ErrorStatsServiceGrpcTransport, + ] + assert transport in available_transports transport = ErrorStatsServiceClient.get_transport_class("grpc") assert transport == transports.ErrorStatsServiceGrpcTransport @@ -163,7 +185,7 @@ def test_error_stats_service_client_client_options( credentials_file=None, host="squid.clam.whelk", scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -179,7 +201,7 @@ def test_error_stats_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -195,7 +217,7 @@ def test_error_stats_service_client_client_options( credentials_file=None, host=client.DEFAULT_MTLS_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -223,7 +245,7 @@ def test_error_stats_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id="octopus", client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -284,29 +306,25 @@ def test_error_stats_service_client_mtls_env_auto( client_cert_source=client_cert_source_callback ) with mock.patch.object(transport_class, "__init__") as patched: - ssl_channel_creds = mock.Mock() - with mock.patch( - "grpc.ssl_channel_credentials", return_value=ssl_channel_creds - ): - patched.return_value = None - client = client_class(client_options=options) + patched.return_value = None + client = client_class(client_options=options) - if use_client_cert_env == "false": - expected_ssl_channel_creds = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_ssl_channel_creds = ssl_channel_creds - expected_host = client.DEFAULT_MTLS_ENDPOINT + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + 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, - ssl_channel_credentials=expected_ssl_channel_creds, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + 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, + ) # Check the case ADC client cert is provided. Whether client cert is used depends on # GOOGLE_API_USE_CLIENT_CERTIFICATE value. @@ -315,66 +333,53 @@ def test_error_stats_service_client_mtls_env_auto( ): with mock.patch.object(transport_class, "__init__") as patched: with mock.patch( - "google.auth.transport.grpc.SslCredentials.__init__", return_value=None + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, ): with mock.patch( - "google.auth.transport.grpc.SslCredentials.is_mtls", - new_callable=mock.PropertyMock, - ) as is_mtls_mock: - with mock.patch( - "google.auth.transport.grpc.SslCredentials.ssl_credentials", - new_callable=mock.PropertyMock, - ) as ssl_credentials_mock: - if use_client_cert_env == "false": - is_mtls_mock.return_value = False - ssl_credentials_mock.return_value = None - expected_host = client.DEFAULT_ENDPOINT - expected_ssl_channel_creds = None - else: - is_mtls_mock.return_value = True - ssl_credentials_mock.return_value = mock.Mock() - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_ssl_channel_creds = ( - ssl_credentials_mock.return_value - ) - - patched.return_value = None - client = client_class() - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - ssl_channel_credentials=expected_ssl_channel_creds, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + "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 + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback - # 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.grpc.SslCredentials.__init__", return_value=None - ): - with mock.patch( - "google.auth.transport.grpc.SslCredentials.is_mtls", - new_callable=mock.PropertyMock, - ) as is_mtls_mock: - is_mtls_mock.return_value = False patched.return_value = None client = client_class() patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=expected_host, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=expected_client_cert_source, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) + # 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() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + @pytest.mark.parametrize( "client_class,transport_class,transport_name", @@ -400,7 +405,7 @@ def test_error_stats_service_client_client_options_scopes( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=["1", "2"], - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -430,7 +435,7 @@ def test_error_stats_service_client_client_options_credentials_file( credentials_file="credentials.json", host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -449,7 +454,7 @@ def test_error_stats_service_client_client_options_from_dict(): credentials_file=None, host="squid.clam.whelk", scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -492,6 +497,22 @@ def test_list_group_stats_from_dict(): test_list_group_stats(request_type=dict) +def test_list_group_stats_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: + client.list_group_stats() + call.assert_called() + _, args, _ = call.mock_calls[0] + + assert args[0] == error_stats_service.ListGroupStatsRequest() + + @pytest.mark.asyncio async def test_list_group_stats_async( transport: str = "grpc_asyncio", @@ -888,6 +909,22 @@ def test_list_events_from_dict(): test_list_events(request_type=dict) +def test_list_events_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_events), "__call__") as call: + client.list_events() + call.assert_called() + _, args, _ = call.mock_calls[0] + + assert args[0] == error_stats_service.ListEventsRequest() + + @pytest.mark.asyncio async def test_list_events_async( transport: str = "grpc_asyncio", request_type=error_stats_service.ListEventsRequest @@ -1247,6 +1284,22 @@ def test_delete_events_from_dict(): test_delete_events(request_type=dict) +def test_delete_events_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorStatsServiceClient( + credentials=credentials.AnonymousCredentials(), transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: + client.delete_events() + call.assert_called() + _, args, _ = call.mock_calls[0] + + assert args[0] == error_stats_service.DeleteEventsRequest() + + @pytest.mark.asyncio async def test_delete_events_async( transport: str = "grpc_asyncio", @@ -1575,6 +1628,53 @@ def test_error_stats_service_transport_auth_adc(): ) +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + ], +) +def test_error_stats_service_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + def test_error_stats_service_host_no_port(): client = ErrorStatsServiceClient( credentials=credentials.AnonymousCredentials(), @@ -1596,7 +1696,7 @@ def test_error_stats_service_host_with_port(): def test_error_stats_service_grpc_transport_channel(): - channel = grpc.insecure_channel("http://localhost/") + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) # Check that channel is used if provided. transport = transports.ErrorStatsServiceGrpcTransport( @@ -1608,7 +1708,7 @@ def test_error_stats_service_grpc_transport_channel(): def test_error_stats_service_grpc_asyncio_transport_channel(): - channel = aio.insecure_channel("http://localhost/") + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) # Check that channel is used if provided. transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( @@ -1619,6 +1719,8 @@ def test_error_stats_service_grpc_asyncio_transport_channel(): assert transport._ssl_channel_credentials == None +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. @pytest.mark.parametrize( "transport_class", [ @@ -1633,7 +1735,7 @@ def test_error_stats_service_transport_channel_mtls_with_client_cert_source( "grpc.ssl_channel_credentials", autospec=True ) as grpc_ssl_channel_cred: with mock.patch.object( - transport_class, "create_channel", autospec=True + transport_class, "create_channel" ) as grpc_create_channel: mock_ssl_cred = mock.Mock() grpc_ssl_channel_cred.return_value = mock_ssl_cred @@ -1671,6 +1773,8 @@ def test_error_stats_service_transport_channel_mtls_with_client_cert_source( assert transport._ssl_channel_credentials == mock_ssl_cred +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. @pytest.mark.parametrize( "transport_class", [ @@ -1686,7 +1790,7 @@ def test_error_stats_service_transport_channel_mtls_with_adc(transport_class): ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), ): with mock.patch.object( - transport_class, "create_channel", autospec=True + transport_class, "create_channel" ) as grpc_create_channel: mock_grpc_channel = mock.Mock() grpc_create_channel.return_value = mock_grpc_channel diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index f84d267fedb0..98a839478119 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -93,7 +93,24 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient] + "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] +) +def test_report_errors_service_client_from_service_account_info(client_class): + creds = 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) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == "clouderrorreporting.googleapis.com:443" + + +@pytest.mark.parametrize( + "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] ) def test_report_errors_service_client_from_service_account_file(client_class): creds = credentials.AnonymousCredentials() @@ -103,16 +120,21 @@ def test_report_errors_service_client_from_service_account_file(client_class): factory.return_value = creds client = client_class.from_service_account_file("dummy/file/path.json") assert client.transport._credentials == creds + assert isinstance(client, client_class) client = client_class.from_service_account_json("dummy/file/path.json") assert client.transport._credentials == creds + assert isinstance(client, client_class) assert client.transport._host == "clouderrorreporting.googleapis.com:443" def test_report_errors_service_client_get_transport_class(): transport = ReportErrorsServiceClient.get_transport_class() - assert transport == transports.ReportErrorsServiceGrpcTransport + available_transports = [ + transports.ReportErrorsServiceGrpcTransport, + ] + assert transport in available_transports transport = ReportErrorsServiceClient.get_transport_class("grpc") assert transport == transports.ReportErrorsServiceGrpcTransport @@ -167,7 +189,7 @@ def test_report_errors_service_client_client_options( credentials_file=None, host="squid.clam.whelk", scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -183,7 +205,7 @@ def test_report_errors_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -199,7 +221,7 @@ def test_report_errors_service_client_client_options( credentials_file=None, host=client.DEFAULT_MTLS_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -227,7 +249,7 @@ def test_report_errors_service_client_client_options( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id="octopus", client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -288,29 +310,25 @@ def test_report_errors_service_client_mtls_env_auto( client_cert_source=client_cert_source_callback ) with mock.patch.object(transport_class, "__init__") as patched: - ssl_channel_creds = mock.Mock() - with mock.patch( - "grpc.ssl_channel_credentials", return_value=ssl_channel_creds - ): - patched.return_value = None - client = client_class(client_options=options) + patched.return_value = None + client = client_class(client_options=options) - if use_client_cert_env == "false": - expected_ssl_channel_creds = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_ssl_channel_creds = ssl_channel_creds - expected_host = client.DEFAULT_MTLS_ENDPOINT + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + 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, - ssl_channel_credentials=expected_ssl_channel_creds, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + 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, + ) # Check the case ADC client cert is provided. Whether client cert is used depends on # GOOGLE_API_USE_CLIENT_CERTIFICATE value. @@ -319,66 +337,53 @@ def test_report_errors_service_client_mtls_env_auto( ): with mock.patch.object(transport_class, "__init__") as patched: with mock.patch( - "google.auth.transport.grpc.SslCredentials.__init__", return_value=None + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, ): with mock.patch( - "google.auth.transport.grpc.SslCredentials.is_mtls", - new_callable=mock.PropertyMock, - ) as is_mtls_mock: - with mock.patch( - "google.auth.transport.grpc.SslCredentials.ssl_credentials", - new_callable=mock.PropertyMock, - ) as ssl_credentials_mock: - if use_client_cert_env == "false": - is_mtls_mock.return_value = False - ssl_credentials_mock.return_value = None - expected_host = client.DEFAULT_ENDPOINT - expected_ssl_channel_creds = None - else: - is_mtls_mock.return_value = True - ssl_credentials_mock.return_value = mock.Mock() - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_ssl_channel_creds = ( - ssl_credentials_mock.return_value - ) - - patched.return_value = None - client = client_class() - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - ssl_channel_credentials=expected_ssl_channel_creds, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - ) + "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 + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback - # 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.grpc.SslCredentials.__init__", return_value=None - ): - with mock.patch( - "google.auth.transport.grpc.SslCredentials.is_mtls", - new_callable=mock.PropertyMock, - ) as is_mtls_mock: - is_mtls_mock.return_value = False patched.return_value = None client = client_class() patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=expected_host, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=expected_client_cert_source, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) + # 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() + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + ) + @pytest.mark.parametrize( "client_class,transport_class,transport_name", @@ -408,7 +413,7 @@ def test_report_errors_service_client_client_options_scopes( credentials_file=None, host=client.DEFAULT_ENDPOINT, scopes=["1", "2"], - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -442,7 +447,7 @@ def test_report_errors_service_client_client_options_credentials_file( credentials_file="credentials.json", host=client.DEFAULT_ENDPOINT, scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -461,7 +466,7 @@ def test_report_errors_service_client_client_options_from_dict(): credentials_file=None, host="squid.clam.whelk", scopes=None, - ssl_channel_credentials=None, + client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, ) @@ -502,6 +507,24 @@ def test_report_error_event_from_dict(): test_report_error_event(request_type=dict) +def test_report_error_event_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ReportErrorsServiceClient( + credentials=credentials.AnonymousCredentials(), transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.report_error_event), "__call__" + ) as call: + client.report_error_event() + call.assert_called() + _, args, _ = call.mock_calls[0] + + assert args[0] == report_errors_service.ReportErrorEventRequest() + + @pytest.mark.asyncio async def test_report_error_event_async( transport: str = "grpc_asyncio", @@ -860,6 +883,53 @@ def test_report_errors_service_transport_auth_adc(): ) +@pytest.mark.parametrize( + "transport_class", + [ + transports.ReportErrorsServiceGrpcTransport, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + ], +) +def test_report_errors_service_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + def test_report_errors_service_host_no_port(): client = ReportErrorsServiceClient( credentials=credentials.AnonymousCredentials(), @@ -881,7 +951,7 @@ def test_report_errors_service_host_with_port(): def test_report_errors_service_grpc_transport_channel(): - channel = grpc.insecure_channel("http://localhost/") + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) # Check that channel is used if provided. transport = transports.ReportErrorsServiceGrpcTransport( @@ -893,7 +963,7 @@ def test_report_errors_service_grpc_transport_channel(): def test_report_errors_service_grpc_asyncio_transport_channel(): - channel = aio.insecure_channel("http://localhost/") + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) # Check that channel is used if provided. transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( @@ -904,6 +974,8 @@ def test_report_errors_service_grpc_asyncio_transport_channel(): assert transport._ssl_channel_credentials == None +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. @pytest.mark.parametrize( "transport_class", [ @@ -918,7 +990,7 @@ def test_report_errors_service_transport_channel_mtls_with_client_cert_source( "grpc.ssl_channel_credentials", autospec=True ) as grpc_ssl_channel_cred: with mock.patch.object( - transport_class, "create_channel", autospec=True + transport_class, "create_channel" ) as grpc_create_channel: mock_ssl_cred = mock.Mock() grpc_ssl_channel_cred.return_value = mock_ssl_cred @@ -956,6 +1028,8 @@ def test_report_errors_service_transport_channel_mtls_with_client_cert_source( assert transport._ssl_channel_credentials == mock_ssl_cred +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. @pytest.mark.parametrize( "transport_class", [ @@ -971,7 +1045,7 @@ def test_report_errors_service_transport_channel_mtls_with_adc(transport_class): ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), ): with mock.patch.object( - transport_class, "create_channel", autospec=True + transport_class, "create_channel" ) as grpc_create_channel: mock_grpc_channel = mock.Mock() grpc_create_channel.return_value = mock_grpc_channel From c56ba8195158c34520779d5d2bfa869378fe0e62 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 31 Mar 2021 15:14:50 -0700 Subject: [PATCH 211/467] chore: Re-generated to pick up changes from self (#72) --- packages/google-cloud-error-reporting/synth.metadata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 377f5974d703..adab2bdaf348 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "c4b168d1f4e045d72487abba88e118a15b1c99ef" + "sha": "511be86d97804b6ae4bee0718dde5fde21bddb49" } }, { From b4b9ea31c630c78075bc2acf7ebf552802b02ac5 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 1 Apr 2021 14:19:09 -0700 Subject: [PATCH 212/467] test: use constraints files to test lower bounds (#97) --- .../samples/python3.6/periodic-head.cfg | 11 ++ .../samples/python3.7/periodic-head.cfg | 11 ++ .../samples/python3.8/periodic-head.cfg | 11 ++ .../.kokoro/test-samples-against-head.sh | 28 ++++ .../.kokoro/test-samples-impl.sh | 102 ++++++++++++++ .../.kokoro/test-samples.sh | 96 +++---------- .../error_group_service/transports/base.py | 18 +-- .../error_group_service/transports/grpc.py | 101 +++++--------- .../transports/grpc_asyncio.py | 109 ++++++--------- .../error_stats_service/transports/base.py | 18 +-- .../error_stats_service/transports/grpc.py | 101 +++++--------- .../transports/grpc_asyncio.py | 109 ++++++--------- .../report_errors_service/transports/base.py | 18 +-- .../report_errors_service/transports/grpc.py | 101 +++++--------- .../transports/grpc_asyncio.py | 109 ++++++--------- .../errorreporting_v1beta1/types/__init__.py | 44 +++--- .../google-cloud-error-reporting/noxfile.py | 35 +++-- .../renovate.json | 3 +- .../google-cloud-error-reporting/setup.py | 3 +- .../synth.metadata | 129 +----------------- .../google-cloud-error-reporting/synth.py | 6 +- .../testing/constraints-3.6.txt | 3 +- 22 files changed, 496 insertions(+), 670 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg create mode 100755 packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh create mode 100755 packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg new file mode 100644 index 000000000000..f9cfcd33e058 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg new file mode 100644 index 000000000000..f9cfcd33e058 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg new file mode 100644 index 000000000000..f9cfcd33e058 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh new file mode 100755 index 000000000000..320a91291381 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright 2020 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 +# +# https://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. + +# A customized test runner for samples. +# +# For periodic builds, you can specify this file for testing against head. + +# `-e` enables the script to automatically fail when a command fails +# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero +set -eo pipefail +# Enables `**` to include files nested inside sub-folders +shopt -s globstar + +cd github/python-error-reporting + +exec .kokoro/test-samples-impl.sh diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh new file mode 100755 index 000000000000..cf5de74c17a5 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh @@ -0,0 +1,102 @@ +#!/bin/bash +# Copyright 2021 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 +# +# https://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. + + +# `-e` enables the script to automatically fail when a command fails +# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero +set -eo pipefail +# Enables `**` to include files nested inside sub-folders +shopt -s globstar + +# Exit early if samples directory doesn't exist +if [ ! -d "./samples" ]; then + echo "No tests run. `./samples` not found" + exit 0 +fi + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +# Debug: show build environment +env | grep KOKORO + +# Install nox +python3.6 -m pip install --upgrade --quiet nox + +# Use secrets acessor service account to get secrets +if [[ -f "${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" ]]; then + gcloud auth activate-service-account \ + --key-file="${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" \ + --project="cloud-devrel-kokoro-resources" +fi + +# This script will create 3 files: +# - testing/test-env.sh +# - testing/service-account.json +# - testing/client-secrets.json +./scripts/decrypt-secrets.sh + +source ./testing/test-env.sh +export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/testing/service-account.json + +# For cloud-run session, we activate the service account for gcloud sdk. +gcloud auth activate-service-account \ + --key-file "${GOOGLE_APPLICATION_CREDENTIALS}" + +export GOOGLE_CLIENT_SECRETS=$(pwd)/testing/client-secrets.json + +echo -e "\n******************** TESTING PROJECTS ********************" + +# Switch to 'fail at end' to allow all tests to complete before exiting. +set +e +# Use RTN to return a non-zero value if the test fails. +RTN=0 +ROOT=$(pwd) +# Find all requirements.txt in the samples directory (may break on whitespace). +for file in samples/**/requirements.txt; do + cd "$ROOT" + # Navigate to the project folder. + file=$(dirname "$file") + cd "$file" + + echo "------------------------------------------------------------" + echo "- testing $file" + echo "------------------------------------------------------------" + + # Use nox to execute the tests for the project. + python3.6 -m nox -s "$RUN_TESTS_SESSION" + EXIT=$? + + # If this is a periodic build, send the test log to the FlakyBot. + # See https://github.com/googleapis/repo-automation-bots/tree/master/packages/flakybot. + if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then + chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot + $KOKORO_GFILE_DIR/linux_amd64/flakybot + fi + + if [[ $EXIT -ne 0 ]]; then + RTN=1 + echo -e "\n Testing failed: Nox returned a non-zero exit code. \n" + else + echo -e "\n Testing completed.\n" + fi + +done +cd "$ROOT" + +# Workaround for Kokoro permissions issue: delete secrets +rm testing/{test-env.sh,client-secrets.json,service-account.json} + +exit "$RTN" diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh index dfbbc8dec82a..fefd09c59fd7 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh @@ -13,6 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# The default test runner for samples. +# +# For periodic builds, we rewinds the repo to the latest release, and +# run test-samples-impl.sh. # `-e` enables the script to automatically fail when a command fails # `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero @@ -24,87 +28,19 @@ cd github/python-error-reporting # Run periodic samples tests at latest release if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then + # preserving the test runner implementation. + cp .kokoro/test-samples-impl.sh "${TMPDIR}/test-samples-impl.sh" + echo "--- IMPORTANT IMPORTANT IMPORTANT ---" + echo "Now we rewind the repo back to the latest release..." LATEST_RELEASE=$(git describe --abbrev=0 --tags) git checkout $LATEST_RELEASE -fi - -# Exit early if samples directory doesn't exist -if [ ! -d "./samples" ]; then - echo "No tests run. `./samples` not found" - exit 0 -fi - -# Disable buffering, so that the logs stream through. -export PYTHONUNBUFFERED=1 - -# Debug: show build environment -env | grep KOKORO - -# Install nox -python3.6 -m pip install --upgrade --quiet nox - -# Use secrets acessor service account to get secrets -if [[ -f "${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" ]]; then - gcloud auth activate-service-account \ - --key-file="${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" \ - --project="cloud-devrel-kokoro-resources" -fi - -# This script will create 3 files: -# - testing/test-env.sh -# - testing/service-account.json -# - testing/client-secrets.json -./scripts/decrypt-secrets.sh - -source ./testing/test-env.sh -export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/testing/service-account.json - -# For cloud-run session, we activate the service account for gcloud sdk. -gcloud auth activate-service-account \ - --key-file "${GOOGLE_APPLICATION_CREDENTIALS}" - -export GOOGLE_CLIENT_SECRETS=$(pwd)/testing/client-secrets.json - -echo -e "\n******************** TESTING PROJECTS ********************" - -# Switch to 'fail at end' to allow all tests to complete before exiting. -set +e -# Use RTN to return a non-zero value if the test fails. -RTN=0 -ROOT=$(pwd) -# Find all requirements.txt in the samples directory (may break on whitespace). -for file in samples/**/requirements.txt; do - cd "$ROOT" - # Navigate to the project folder. - file=$(dirname "$file") - cd "$file" - - echo "------------------------------------------------------------" - echo "- testing $file" - echo "------------------------------------------------------------" - - # Use nox to execute the tests for the project. - python3.6 -m nox -s "$RUN_TESTS_SESSION" - EXIT=$? - - # If this is a periodic build, send the test log to the FlakyBot. - # See https://github.com/googleapis/repo-automation-bots/tree/master/packages/flakybot. - if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then - chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot - $KOKORO_GFILE_DIR/linux_amd64/flakybot + echo "The current head is: " + echo $(git rev-parse --verify HEAD) + echo "--- IMPORTANT IMPORTANT IMPORTANT ---" + # move back the test runner implementation if there's no file. + if [ ! -f .kokoro/test-samples-impl.sh ]; then + cp "${TMPDIR}/test-samples-impl.sh" .kokoro/test-samples-impl.sh fi +fi - if [[ $EXIT -ne 0 ]]; then - RTN=1 - echo -e "\n Testing failed: Nox returned a non-zero exit code. \n" - else - echo -e "\n Testing completed.\n" - fi - -done -cd "$ROOT" - -# Workaround for Kokoro permissions issue: delete secrets -rm testing/{test-env.sh,client-secrets.json,service-account.json} - -exit "$RTN" +exec .kokoro/test-samples-impl.sh diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 794cf769858e..45260605e9a0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -70,10 +70,10 @@ def __init__( scope (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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. """ # Save the hostname. Default to port 443 (HTTPS) if none is specified. @@ -81,6 +81,9 @@ def __init__( host += ":443" self._host = host + # Save the scopes. + self._scopes = scopes or self.AUTH_SCOPES + # If no credentials are provided, then determine the appropriate # defaults. if credentials and credentials_file: @@ -90,20 +93,17 @@ def __init__( if credentials_file is not None: credentials, _ = auth.load_credentials_from_file( - credentials_file, scopes=scopes, quota_project_id=quota_project_id + credentials_file, scopes=self._scopes, quota_project_id=quota_project_id ) elif credentials is None: credentials, _ = auth.default( - scopes=scopes, quota_project_id=quota_project_id + scopes=self._scopes, quota_project_id=quota_project_id ) # Save the credentials. self._credentials = credentials - # Lifted into its own function so it can be stubbed out during tests. - self._prep_wrapped_messages(client_info) - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index b6a71e1fbdd1..8514d3d76f5b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -107,7 +107,9 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._grpc_channel = None self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} if api_mtls_endpoint: warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) @@ -115,70 +117,50 @@ def __init__( warnings.warn("client_cert_source is deprecated", DeprecationWarning) if channel: - # Sanity check: Ensure that channel and credentials are not both - # provided. + # Ignore credentials if a channel was passed. credentials = False - # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - elif api_mtls_endpoint: - host = ( - api_mtls_endpoint - if ":" in api_mtls_endpoint - else api_mtls_endpoint + ":443" - ) - - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - ssl_credentials = SslCredentials().ssl_credentials - # create a new channel. The provided one is ignored. - self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - ssl_credentials=ssl_credentials, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - self._ssl_channel_credentials = ssl_credentials else: - host = host if ":" in host else host + ":443" + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + ) - # create a new channel. The provided one is ignored. + if not self._grpc_channel: self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, + self._host, + credentials=self._credentials, credentials_file=credentials_file, + scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, - scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ ("grpc.max_send_message_length", -1), @@ -186,17 +168,8 @@ def __init__( ], ) - self._stubs = {} # type: Dict[str, Callable] - - # Run the base constructor. - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - client_info=client_info, - ) + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) @classmethod def create_channel( @@ -210,7 +183,7 @@ def create_channel( ) -> grpc.Channel: """Create and return a gRPC channel object. Args: - address (Optional[str]): The host for the channel to use. + host (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 6fd7366313bb..d09a346bc91b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -62,7 +62,7 @@ def create_channel( ) -> aio.Channel: """Create and return a gRPC AsyncIO channel object. Args: - address (Optional[str]): The host for the channel to use. + host (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If @@ -140,10 +140,10 @@ def __init__( ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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: @@ -152,7 +152,9 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._grpc_channel = None self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} if api_mtls_endpoint: warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) @@ -160,70 +162,50 @@ def __init__( warnings.warn("client_cert_source is deprecated", DeprecationWarning) if channel: - # Sanity check: Ensure that channel and credentials are not both - # provided. + # Ignore credentials if a channel was passed. credentials = False - # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - elif api_mtls_endpoint: - host = ( - api_mtls_endpoint - if ":" in api_mtls_endpoint - else api_mtls_endpoint + ":443" - ) - - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - ssl_credentials = SslCredentials().ssl_credentials - # create a new channel. The provided one is ignored. - self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - ssl_credentials=ssl_credentials, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - self._ssl_channel_credentials = ssl_credentials else: - host = host if ":" in host else host + ":443" + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + ) - # create a new channel. The provided one is ignored. + if not self._grpc_channel: self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, + self._host, + credentials=self._credentials, credentials_file=credentials_file, + scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, - scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ ("grpc.max_send_message_length", -1), @@ -231,17 +213,8 @@ def __init__( ], ) - # Run the base constructor. - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - client_info=client_info, - ) - - self._stubs = {} + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) @property def grpc_channel(self) -> aio.Channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 9ee79c3477ca..18470b15360e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -69,10 +69,10 @@ def __init__( scope (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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. """ # Save the hostname. Default to port 443 (HTTPS) if none is specified. @@ -80,6 +80,9 @@ def __init__( host += ":443" self._host = host + # Save the scopes. + self._scopes = scopes or self.AUTH_SCOPES + # If no credentials are provided, then determine the appropriate # defaults. if credentials and credentials_file: @@ -89,20 +92,17 @@ def __init__( if credentials_file is not None: credentials, _ = auth.load_credentials_from_file( - credentials_file, scopes=scopes, quota_project_id=quota_project_id + credentials_file, scopes=self._scopes, quota_project_id=quota_project_id ) elif credentials is None: credentials, _ = auth.default( - scopes=scopes, quota_project_id=quota_project_id + scopes=self._scopes, quota_project_id=quota_project_id ) # Save the credentials. self._credentials = credentials - # Lifted into its own function so it can be stubbed out during tests. - self._prep_wrapped_messages(client_info) - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 6a5328c5cc76..1e033169cf7e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -107,7 +107,9 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._grpc_channel = None self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} if api_mtls_endpoint: warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) @@ -115,70 +117,50 @@ def __init__( warnings.warn("client_cert_source is deprecated", DeprecationWarning) if channel: - # Sanity check: Ensure that channel and credentials are not both - # provided. + # Ignore credentials if a channel was passed. credentials = False - # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - elif api_mtls_endpoint: - host = ( - api_mtls_endpoint - if ":" in api_mtls_endpoint - else api_mtls_endpoint + ":443" - ) - - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - ssl_credentials = SslCredentials().ssl_credentials - # create a new channel. The provided one is ignored. - self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - ssl_credentials=ssl_credentials, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - self._ssl_channel_credentials = ssl_credentials else: - host = host if ":" in host else host + ":443" + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + ) - # create a new channel. The provided one is ignored. + if not self._grpc_channel: self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, + self._host, + credentials=self._credentials, credentials_file=credentials_file, + scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, - scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ ("grpc.max_send_message_length", -1), @@ -186,17 +168,8 @@ def __init__( ], ) - self._stubs = {} # type: Dict[str, Callable] - - # Run the base constructor. - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - client_info=client_info, - ) + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) @classmethod def create_channel( @@ -210,7 +183,7 @@ def create_channel( ) -> grpc.Channel: """Create and return a gRPC channel object. Args: - address (Optional[str]): The host for the channel to use. + host (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 336e180aac9d..402abb49daaf 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -62,7 +62,7 @@ def create_channel( ) -> aio.Channel: """Create and return a gRPC AsyncIO channel object. Args: - address (Optional[str]): The host for the channel to use. + host (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If @@ -140,10 +140,10 @@ def __init__( ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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: @@ -152,7 +152,9 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._grpc_channel = None self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} if api_mtls_endpoint: warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) @@ -160,70 +162,50 @@ def __init__( warnings.warn("client_cert_source is deprecated", DeprecationWarning) if channel: - # Sanity check: Ensure that channel and credentials are not both - # provided. + # Ignore credentials if a channel was passed. credentials = False - # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - elif api_mtls_endpoint: - host = ( - api_mtls_endpoint - if ":" in api_mtls_endpoint - else api_mtls_endpoint + ":443" - ) - - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - ssl_credentials = SslCredentials().ssl_credentials - # create a new channel. The provided one is ignored. - self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - ssl_credentials=ssl_credentials, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - self._ssl_channel_credentials = ssl_credentials else: - host = host if ":" in host else host + ":443" + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + ) - # create a new channel. The provided one is ignored. + if not self._grpc_channel: self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, + self._host, + credentials=self._credentials, credentials_file=credentials_file, + scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, - scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ ("grpc.max_send_message_length", -1), @@ -231,17 +213,8 @@ def __init__( ], ) - # Run the base constructor. - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - client_info=client_info, - ) - - self._stubs = {} + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) @property def grpc_channel(self) -> aio.Channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index f1a66243e706..4adbb0d1123b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -69,10 +69,10 @@ def __init__( scope (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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. """ # Save the hostname. Default to port 443 (HTTPS) if none is specified. @@ -80,6 +80,9 @@ def __init__( host += ":443" self._host = host + # Save the scopes. + self._scopes = scopes or self.AUTH_SCOPES + # If no credentials are provided, then determine the appropriate # defaults. if credentials and credentials_file: @@ -89,20 +92,17 @@ def __init__( if credentials_file is not None: credentials, _ = auth.load_credentials_from_file( - credentials_file, scopes=scopes, quota_project_id=quota_project_id + credentials_file, scopes=self._scopes, quota_project_id=quota_project_id ) elif credentials is None: credentials, _ = auth.default( - scopes=scopes, quota_project_id=quota_project_id + scopes=self._scopes, quota_project_id=quota_project_id ) # Save the credentials. self._credentials = credentials - # Lifted into its own function so it can be stubbed out during tests. - self._prep_wrapped_messages(client_info) - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index f7eea1716a42..8ae306d9f94b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -106,7 +106,9 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._grpc_channel = None self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} if api_mtls_endpoint: warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) @@ -114,70 +116,50 @@ def __init__( warnings.warn("client_cert_source is deprecated", DeprecationWarning) if channel: - # Sanity check: Ensure that channel and credentials are not both - # provided. + # Ignore credentials if a channel was passed. credentials = False - # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - elif api_mtls_endpoint: - host = ( - api_mtls_endpoint - if ":" in api_mtls_endpoint - else api_mtls_endpoint + ":443" - ) - - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - ssl_credentials = SslCredentials().ssl_credentials - # create a new channel. The provided one is ignored. - self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - ssl_credentials=ssl_credentials, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - self._ssl_channel_credentials = ssl_credentials else: - host = host if ":" in host else host + ":443" + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + ) - # create a new channel. The provided one is ignored. + if not self._grpc_channel: self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, + self._host, + credentials=self._credentials, credentials_file=credentials_file, + scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, - scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ ("grpc.max_send_message_length", -1), @@ -185,17 +167,8 @@ def __init__( ], ) - self._stubs = {} # type: Dict[str, Callable] - - # Run the base constructor. - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - client_info=client_info, - ) + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) @classmethod def create_channel( @@ -209,7 +182,7 @@ def create_channel( ) -> grpc.Channel: """Create and return a gRPC channel object. Args: - address (Optional[str]): The host for the channel to use. + host (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 80327fd807b7..115e24461bbd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -61,7 +61,7 @@ def create_channel( ) -> aio.Channel: """Create and return a gRPC AsyncIO channel object. Args: - address (Optional[str]): The host for the channel to use. + host (Optional[str]): The host for the channel to use. credentials (Optional[~.Credentials]): The authorization credentials to attach to requests. These credentials identify this application to the service. If @@ -139,10 +139,10 @@ def __init__( ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. - 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 + 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: @@ -151,7 +151,9 @@ def __init__( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ + self._grpc_channel = None self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} if api_mtls_endpoint: warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) @@ -159,70 +161,50 @@ def __init__( warnings.warn("client_cert_source is deprecated", DeprecationWarning) if channel: - # Sanity check: Ensure that channel and credentials are not both - # provided. + # Ignore credentials if a channel was passed. credentials = False - # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - elif api_mtls_endpoint: - host = ( - api_mtls_endpoint - if ":" in api_mtls_endpoint - else api_mtls_endpoint + ":443" - ) - - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - ssl_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - ssl_credentials = SslCredentials().ssl_credentials - # create a new channel. The provided one is ignored. - self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - ssl_credentials=ssl_credentials, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - self._ssl_channel_credentials = ssl_credentials else: - host = host if ":" in host else host + ":443" + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials - if credentials is None: - credentials, _ = auth.default( - scopes=self.AUTH_SCOPES, quota_project_id=quota_project_id - ) + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + ) - # create a new channel. The provided one is ignored. + if not self._grpc_channel: self._grpc_channel = type(self).create_channel( - host, - credentials=credentials, + self._host, + credentials=self._credentials, credentials_file=credentials_file, + scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, - scopes=scopes or self.AUTH_SCOPES, quota_project_id=quota_project_id, options=[ ("grpc.max_send_message_length", -1), @@ -230,17 +212,8 @@ def __init__( ], ) - # Run the base constructor. - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes or self.AUTH_SCOPES, - quota_project_id=quota_project_id, - client_info=client_info, - ) - - self._stubs = {} + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) @property def grpc_channel(self) -> aio.Channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py index 8819a78f7f83..9cf5a2559703 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -16,13 +16,13 @@ # from .common import ( - ErrorGroup, - TrackingIssue, - ErrorEvent, - ServiceContext, ErrorContext, + ErrorEvent, + ErrorGroup, HttpRequestContext, + ServiceContext, SourceLocation, + TrackingIssue, ResolutionStatus, ) from .error_group_service import ( @@ -30,49 +30,49 @@ UpdateGroupRequest, ) from .error_stats_service import ( - ListGroupStatsRequest, - ListGroupStatsResponse, + DeleteEventsRequest, + DeleteEventsResponse, ErrorGroupStats, - TimedCount, ListEventsRequest, ListEventsResponse, + ListGroupStatsRequest, + ListGroupStatsResponse, QueryTimeRange, ServiceContextFilter, - DeleteEventsRequest, - DeleteEventsResponse, - TimedCountAlignment, + TimedCount, ErrorGroupOrder, + TimedCountAlignment, ) from .report_errors_service import ( + ReportedErrorEvent, ReportErrorEventRequest, ReportErrorEventResponse, - ReportedErrorEvent, ) __all__ = ( - "ErrorGroup", - "TrackingIssue", - "ErrorEvent", - "ServiceContext", "ErrorContext", + "ErrorEvent", + "ErrorGroup", "HttpRequestContext", + "ServiceContext", "SourceLocation", + "TrackingIssue", "ResolutionStatus", "GetGroupRequest", "UpdateGroupRequest", - "ListGroupStatsRequest", - "ListGroupStatsResponse", + "DeleteEventsRequest", + "DeleteEventsResponse", "ErrorGroupStats", - "TimedCount", "ListEventsRequest", "ListEventsResponse", + "ListGroupStatsRequest", + "ListGroupStatsResponse", "QueryTimeRange", "ServiceContextFilter", - "DeleteEventsRequest", - "DeleteEventsResponse", - "TimedCountAlignment", + "TimedCount", "ErrorGroupOrder", + "TimedCountAlignment", + "ReportedErrorEvent", "ReportErrorEventRequest", "ReportErrorEventResponse", - "ReportedErrorEvent", ) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 4e86e3af49f8..b3e7d21e6455 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -18,6 +18,7 @@ from __future__ import absolute_import import os +import pathlib import shutil import nox @@ -30,6 +31,8 @@ SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] +CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() + # 'docfx' is excluded since it only needs to run in 'docs-presubmit' nox.options.sessions = [ "unit", @@ -41,6 +44,9 @@ "docs", ] +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + @nox.session(python=DEFAULT_PYTHON_VERSION) def lint(session): @@ -81,13 +87,15 @@ def lint_setup_py(session): def default(session): # Install all test dependencies, then install this package in-place. - session.install("asyncmock", "pytest-asyncio") - session.install( - "mock", "pytest", "pytest-cov", + constraints_path = str( + CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" ) + session.install("asyncmock", "pytest-asyncio", "-c", constraints_path) - session.install("-e", ".") + session.install("mock", "pytest", "pytest-cov", "-c", constraints_path) + + session.install("-e", ".", "-c", constraints_path) # Run py.test against the unit tests. session.run( @@ -114,6 +122,9 @@ def unit(session): @nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS) def system(session): """Run the system test suite.""" + constraints_path = str( + CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" + ) system_test_path = os.path.join("tests", "system.py") system_test_folder_path = os.path.join("tests", "system") @@ -138,12 +149,10 @@ def system(session): # Install all test dependencies, then install this package into the # virtualenv's dist-packages. - session.install( - "mock", "pytest", "google-cloud-testutils", - ) - session.install("-e", "test_utils") + session.install("mock", "pytest", "google-cloud-testutils", "-c", constraints_path) + session.install("-e", "test_utils", "-c", constraints_path) - session.install("-e", ".") + session.install("-e", ".", "-c", constraints_path) # Run py.test against the system tests. if system_test_exists: @@ -172,7 +181,7 @@ def cover(session): test runs (not system test runs), and then erases coverage data. """ session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") + session.run("coverage", "report", "--show-missing", "--fail-under=98") session.run("coverage", "erase") @@ -204,9 +213,9 @@ def docfx(session): """Build the docfx yaml files for this library.""" session.install("-e", ".") - # sphinx-docfx-yaml supports up to sphinx version 1.5.5. - # https://github.com/docascode/sphinx-docfx-yaml/issues/97 - session.install("sphinx==1.5.5", "alabaster", "recommonmark", "sphinx-docfx-yaml") + session.install( + "sphinx<3.0.0", "alabaster", "recommonmark", "gcp-sphinx-docfx-yaml" + ) shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( diff --git a/packages/google-cloud-error-reporting/renovate.json b/packages/google-cloud-error-reporting/renovate.json index 4fa949311b20..f08bc22c9a55 100644 --- a/packages/google-cloud-error-reporting/renovate.json +++ b/packages/google-cloud-error-reporting/renovate.json @@ -1,5 +1,6 @@ { "extends": [ "config:base", ":preserveSemverRanges" - ] + ], + "ignorePaths": [".pre-commit-config.yaml"] } diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index d40cc0d7e4a1..e466c8f85cd5 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -30,9 +30,8 @@ release_status = "Development Status :: 4 - Beta" dependencies = [ "google-cloud-logging>=1.14.0, <2.4", - "google-api-core[grpc] >= 1.22.0, < 2.0.0dev", + "google-api-core[grpc] >= 1.22.2, < 2.0.0dev", "proto-plus >= 1.4.0", - "libcst >= 0.2.5", ] extras = {} diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index adab2bdaf348..d79c2e55fbca 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -3,30 +3,30 @@ { "git": { "name": ".", - "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "511be86d97804b6ae4bee0718dde5fde21bddb49" + "remote": "git@github.com:googleapis/python-error-reporting.git", + "sha": "4a5e0546148797dd7e576d21a61fd5a051488dbf" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "f6dd7e47620566925a4b3f1ce029e74e1b2f2516", - "internalRef": "359781040" + "sha": "915925089600094e72e4bfa8cf586c170e6b7109", + "internalRef": "366152684" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "0780323da96d5a53925fe0547757181fe76e8f1e" + "sha": "6d76df2138f8f841e5a5b9ac427f81def520c15f" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "0780323da96d5a53925fe0547757181fe76e8f1e" + "sha": "6d76df2138f8f841e5a5b9ac427f81def520c15f" } } ], @@ -40,122 +40,5 @@ "generator": "bazel" } } - ], - "generatedFiles": [ - ".coveragerc", - ".flake8", - ".github/CONTRIBUTING.md", - ".github/ISSUE_TEMPLATE/bug_report.md", - ".github/ISSUE_TEMPLATE/feature_request.md", - ".github/ISSUE_TEMPLATE/support_request.md", - ".github/PULL_REQUEST_TEMPLATE.md", - ".github/header-checker-lint.yml", - ".github/release-please.yml", - ".github/snippet-bot.yml", - ".gitignore", - ".kokoro/build.sh", - ".kokoro/continuous/common.cfg", - ".kokoro/continuous/continuous.cfg", - ".kokoro/docker/docs/Dockerfile", - ".kokoro/docker/docs/fetch_gpg_keys.sh", - ".kokoro/docs/common.cfg", - ".kokoro/docs/docs-presubmit.cfg", - ".kokoro/docs/docs.cfg", - ".kokoro/populate-secrets.sh", - ".kokoro/presubmit/common.cfg", - ".kokoro/presubmit/presubmit.cfg", - ".kokoro/publish-docs.sh", - ".kokoro/release.sh", - ".kokoro/release/common.cfg", - ".kokoro/release/release.cfg", - ".kokoro/samples/lint/common.cfg", - ".kokoro/samples/lint/continuous.cfg", - ".kokoro/samples/lint/periodic.cfg", - ".kokoro/samples/lint/presubmit.cfg", - ".kokoro/samples/python3.6/common.cfg", - ".kokoro/samples/python3.6/continuous.cfg", - ".kokoro/samples/python3.6/periodic.cfg", - ".kokoro/samples/python3.6/presubmit.cfg", - ".kokoro/samples/python3.7/common.cfg", - ".kokoro/samples/python3.7/continuous.cfg", - ".kokoro/samples/python3.7/periodic.cfg", - ".kokoro/samples/python3.7/presubmit.cfg", - ".kokoro/samples/python3.8/common.cfg", - ".kokoro/samples/python3.8/continuous.cfg", - ".kokoro/samples/python3.8/periodic.cfg", - ".kokoro/samples/python3.8/presubmit.cfg", - ".kokoro/test-samples.sh", - ".kokoro/trampoline.sh", - ".kokoro/trampoline_v2.sh", - ".pre-commit-config.yaml", - ".trampolinerc", - "CODE_OF_CONDUCT.md", - "CONTRIBUTING.rst", - "LICENSE", - "MANIFEST.in", - "docs/_static/custom.css", - "docs/_templates/layout.html", - "docs/conf.py", - "docs/errorreporting_v1beta1/error_group_service.rst", - "docs/errorreporting_v1beta1/error_stats_service.rst", - "docs/errorreporting_v1beta1/report_errors_service.rst", - "docs/errorreporting_v1beta1/services.rst", - "docs/errorreporting_v1beta1/types.rst", - "docs/multiprocessing.rst", - "google/cloud/errorreporting_v1beta1/__init__.py", - "google/cloud/errorreporting_v1beta1/proto/common.proto", - "google/cloud/errorreporting_v1beta1/proto/error_group_service.proto", - "google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto", - "google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto", - "google/cloud/errorreporting_v1beta1/py.typed", - "google/cloud/errorreporting_v1beta1/services/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/client.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py", - "google/cloud/errorreporting_v1beta1/types/__init__.py", - "google/cloud/errorreporting_v1beta1/types/common.py", - "google/cloud/errorreporting_v1beta1/types/error_group_service.py", - "google/cloud/errorreporting_v1beta1/types/error_stats_service.py", - "google/cloud/errorreporting_v1beta1/types/report_errors_service.py", - "mypy.ini", - "noxfile.py", - "renovate.json", - "samples/AUTHORING_GUIDE.md", - "samples/CONTRIBUTING.md", - "samples/snippets/api/noxfile.py", - "samples/snippets/fluent_on_compute/noxfile.py", - "scripts/decrypt-secrets.sh", - "scripts/fixup_errorreporting_v1beta1_keywords.py", - "scripts/readme-gen/readme_gen.py", - "scripts/readme-gen/templates/README.tmpl.rst", - "scripts/readme-gen/templates/auth.tmpl.rst", - "scripts/readme-gen/templates/auth_api_key.tmpl.rst", - "scripts/readme-gen/templates/install_deps.tmpl.rst", - "scripts/readme-gen/templates/install_portaudio.tmpl.rst", - "setup.cfg", - "testing/.gitignore", - "tests/unit/gapic/errorreporting_v1beta1/__init__.py", - "tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py", - "tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py", - "tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py" ] } \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/synth.py index 46a9fe17b575..5fb57f34fe84 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/synth.py @@ -37,7 +37,8 @@ templated_files = common.py_library( samples=True, # set to True only if there are samples microgenerator=True, - system_test_dependencies=["test_utils"] + system_test_dependencies=["test_utils"], + cov_level=98, ) s.move(templated_files, excludes=[".coveragerc"]) # microgenerator has a good .coveragerc file @@ -46,8 +47,5 @@ # ---------------------------------------------------------------------------- python.py_samples(skip_readmes=True) -# TODO(busunkim): Use latest sphinx after microgenerator transition -s.replace("noxfile.py", """['"]sphinx['"]""", '"sphinx<3.0.0"') - s.shell.run(["nox", "-s", "blacken"], hide_output=False) diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt index e88377ad6456..cf04f5fae717 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt @@ -6,6 +6,5 @@ # e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", # Then this file should have foo==1.14.0 google-cloud-logging==1.14.0 -google-api-core==1.22.0 +google-api-core==1.22.2 proto-plus==1.4.0 -libcst==0.2.5 \ No newline at end of file From c1abe07c1a4ebfefb19f656ec270af11c66a8ff7 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 5 Apr 2021 10:50:40 -0700 Subject: [PATCH 213/467] deps: upgrade sphinx (#99) --- .../cloud/errorreporting_v1beta1/__init__.py | 4 +- .../google-cloud-error-reporting/noxfile.py | 6 +- .../synth.metadata | 126 +++++++++++++++++- 3 files changed, 128 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 8ced2656dce0..56f82962c14c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -52,7 +52,6 @@ "ErrorEvent", "ErrorGroup", "ErrorGroupOrder", - "ErrorGroupServiceClient", "ErrorGroupStats", "ErrorStatsServiceClient", "GetGroupRequest", @@ -64,6 +63,7 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", + "ReportErrorsServiceClient", "ReportedErrorEvent", "ResolutionStatus", "ServiceContext", @@ -73,5 +73,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ReportErrorsServiceClient", + "ErrorGroupServiceClient", ) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index b3e7d21e6455..3f66499f816d 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -191,7 +191,7 @@ def docs(session): """Build the docs for this library.""" session.install("-e", ".") - session.install("sphinx<3.0.0", "alabaster", "recommonmark") + session.install("sphinx", "alabaster", "recommonmark") shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( @@ -213,9 +213,7 @@ def docfx(session): """Build the docfx yaml files for this library.""" session.install("-e", ".") - session.install( - "sphinx<3.0.0", "alabaster", "recommonmark", "gcp-sphinx-docfx-yaml" - ) + session.install("sphinx", "alabaster", "recommonmark", "gcp-sphinx-docfx-yaml") shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index d79c2e55fbca..bba4a1eb122b 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -3,8 +3,8 @@ { "git": { "name": ".", - "remote": "git@github.com:googleapis/python-error-reporting.git", - "sha": "4a5e0546148797dd7e576d21a61fd5a051488dbf" + "remote": "https://github.com/googleapis/python-error-reporting.git", + "sha": "86c5c543d2b278c5b93ea26d42ab3e57281dd4f0" } }, { @@ -40,5 +40,127 @@ "generator": "bazel" } } + ], + "generatedFiles": [ + ".coveragerc", + ".flake8", + ".github/CONTRIBUTING.md", + ".github/ISSUE_TEMPLATE/bug_report.md", + ".github/ISSUE_TEMPLATE/feature_request.md", + ".github/ISSUE_TEMPLATE/support_request.md", + ".github/PULL_REQUEST_TEMPLATE.md", + ".github/header-checker-lint.yml", + ".github/release-please.yml", + ".github/snippet-bot.yml", + ".gitignore", + ".kokoro/build.sh", + ".kokoro/continuous/common.cfg", + ".kokoro/continuous/continuous.cfg", + ".kokoro/docker/docs/Dockerfile", + ".kokoro/docker/docs/fetch_gpg_keys.sh", + ".kokoro/docs/common.cfg", + ".kokoro/docs/docs-presubmit.cfg", + ".kokoro/docs/docs.cfg", + ".kokoro/populate-secrets.sh", + ".kokoro/presubmit/common.cfg", + ".kokoro/presubmit/presubmit.cfg", + ".kokoro/publish-docs.sh", + ".kokoro/release.sh", + ".kokoro/release/common.cfg", + ".kokoro/release/release.cfg", + ".kokoro/samples/lint/common.cfg", + ".kokoro/samples/lint/continuous.cfg", + ".kokoro/samples/lint/periodic.cfg", + ".kokoro/samples/lint/presubmit.cfg", + ".kokoro/samples/python3.6/common.cfg", + ".kokoro/samples/python3.6/continuous.cfg", + ".kokoro/samples/python3.6/periodic-head.cfg", + ".kokoro/samples/python3.6/periodic.cfg", + ".kokoro/samples/python3.6/presubmit.cfg", + ".kokoro/samples/python3.7/common.cfg", + ".kokoro/samples/python3.7/continuous.cfg", + ".kokoro/samples/python3.7/periodic-head.cfg", + ".kokoro/samples/python3.7/periodic.cfg", + ".kokoro/samples/python3.7/presubmit.cfg", + ".kokoro/samples/python3.8/common.cfg", + ".kokoro/samples/python3.8/continuous.cfg", + ".kokoro/samples/python3.8/periodic-head.cfg", + ".kokoro/samples/python3.8/periodic.cfg", + ".kokoro/samples/python3.8/presubmit.cfg", + ".kokoro/test-samples-against-head.sh", + ".kokoro/test-samples-impl.sh", + ".kokoro/test-samples.sh", + ".kokoro/trampoline.sh", + ".kokoro/trampoline_v2.sh", + ".pre-commit-config.yaml", + ".trampolinerc", + "CODE_OF_CONDUCT.md", + "CONTRIBUTING.rst", + "LICENSE", + "MANIFEST.in", + "docs/_static/custom.css", + "docs/_templates/layout.html", + "docs/conf.py", + "docs/errorreporting_v1beta1/error_group_service.rst", + "docs/errorreporting_v1beta1/error_stats_service.rst", + "docs/errorreporting_v1beta1/report_errors_service.rst", + "docs/errorreporting_v1beta1/services.rst", + "docs/errorreporting_v1beta1/types.rst", + "docs/multiprocessing.rst", + "google/cloud/errorreporting_v1beta1/__init__.py", + "google/cloud/errorreporting_v1beta1/proto/common.proto", + "google/cloud/errorreporting_v1beta1/proto/error_group_service.proto", + "google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto", + "google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto", + "google/cloud/errorreporting_v1beta1/py.typed", + "google/cloud/errorreporting_v1beta1/services/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/client.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py", + "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py", + "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py", + "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py", + "google/cloud/errorreporting_v1beta1/types/__init__.py", + "google/cloud/errorreporting_v1beta1/types/common.py", + "google/cloud/errorreporting_v1beta1/types/error_group_service.py", + "google/cloud/errorreporting_v1beta1/types/error_stats_service.py", + "google/cloud/errorreporting_v1beta1/types/report_errors_service.py", + "mypy.ini", + "noxfile.py", + "renovate.json", + "samples/AUTHORING_GUIDE.md", + "samples/CONTRIBUTING.md", + "samples/snippets/api/noxfile.py", + "samples/snippets/fluent_on_compute/noxfile.py", + "scripts/decrypt-secrets.sh", + "scripts/fixup_errorreporting_v1beta1_keywords.py", + "scripts/readme-gen/readme_gen.py", + "scripts/readme-gen/templates/README.tmpl.rst", + "scripts/readme-gen/templates/auth.tmpl.rst", + "scripts/readme-gen/templates/auth_api_key.tmpl.rst", + "scripts/readme-gen/templates/install_deps.tmpl.rst", + "scripts/readme-gen/templates/install_portaudio.tmpl.rst", + "setup.cfg", + "testing/.gitignore", + "tests/unit/gapic/errorreporting_v1beta1/__init__.py", + "tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py", + "tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py", + "tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py" ] } \ No newline at end of file From 988254ffa52bedc10d50d0b22e54a503d569c050 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:57:48 -0700 Subject: [PATCH 214/467] chore: release 1.1.2 (#100) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 6cb91480714d..3e874fd337f1 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +### [1.1.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.1...v1.1.2) (2021-04-05) + + +### Dependencies + +* upgrade sphinx ([#99](https://www.github.com/googleapis/python-error-reporting/issues/99)) ([a118123](https://www.github.com/googleapis/python-error-reporting/commit/a118123cbfe8b5dd2a7ba260631b248c351cb116)) + ### [1.1.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.0...v1.1.1) (2021-02-25) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index e466c8f85cd5..859ef21df384 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.1.1" +version = "1.1.2" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 92679a2726314d26a8aa2a489ed1b320a920f3cf Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 7 Apr 2021 12:58:24 -0700 Subject: [PATCH 215/467] chore: add license headers (#104) * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * chore: migrate devtools/build to the PHP microgenerator Committer: @miraleung PiperOrigin-RevId: 366152684 Source-Author: Google APIs Source-Date: Wed Mar 31 17:36:01 2021 -0700 Source-Repo: googleapis/googleapis Source-Sha: 915925089600094e72e4bfa8cf586c170e6b7109 Source-Link: https://github.com/googleapis/googleapis/commit/915925089600094e72e4bfa8cf586c170e6b7109 * chore: Add license headers for python config files Source-Author: Anthonios Partheniou Source-Date: Tue Apr 6 11:32:03 2021 -0400 Source-Repo: googleapis/synthtool Source-Sha: 5b5bf6d519b2d658d9f2e483d9f6f3d0ba8ee6bc Source-Link: https://github.com/googleapis/synthtool/commit/5b5bf6d519b2d658d9f2e483d9f6f3d0ba8ee6bc --- .../.pre-commit-config.yaml | 14 ++++++++++++++ packages/google-cloud-error-reporting/docs/conf.py | 13 +++++++++++++ .../cloud/errorreporting_v1beta1/__init__.py | 4 ++-- .../google-cloud-error-reporting/synth.metadata | 6 +++--- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 32302e4883a1..8912e9b5d7d7 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -1,3 +1,17 @@ +# Copyright 2021 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. +# # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 6163e5d9b419..6a23a55d2005 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -1,4 +1,17 @@ # -*- coding: utf-8 -*- +# Copyright 2021 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. # # google-cloud-error-reporting documentation build configuration file # diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 56f82962c14c..8ced2656dce0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -52,6 +52,7 @@ "ErrorEvent", "ErrorGroup", "ErrorGroupOrder", + "ErrorGroupServiceClient", "ErrorGroupStats", "ErrorStatsServiceClient", "GetGroupRequest", @@ -63,7 +64,6 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", - "ReportErrorsServiceClient", "ReportedErrorEvent", "ResolutionStatus", "ServiceContext", @@ -73,5 +73,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorGroupServiceClient", + "ReportErrorsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index bba4a1eb122b..2c800b5a7ae5 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "86c5c543d2b278c5b93ea26d42ab3e57281dd4f0" + "sha": "0e13cca302a6ccd80e36ab0a79869301a51a75f6" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "6d76df2138f8f841e5a5b9ac427f81def520c15f" + "sha": "5b5bf6d519b2d658d9f2e483d9f6f3d0ba8ee6bc" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "6d76df2138f8f841e5a5b9ac427f81def520c15f" + "sha": "5b5bf6d519b2d658d9f2e483d9f6f3d0ba8ee6bc" } } ], From 6c68f3f1abb778b80cc094ab2f72707ed0074fa0 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 8 Apr 2021 20:32:38 +0200 Subject: [PATCH 216/467] chore(deps): update dependency google-cloud-error-reporting to v1.1.2 (#101) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 47f476da8b37..562e76058776 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.1.1 +google-cloud-error-reporting==1.1.2 From acfb97f933cffeb9d5dd17f9c51d61187591c2a8 Mon Sep 17 00:00:00 2001 From: Dan Lee <71398022+dandhlee@users.noreply.github.com> Date: Fri, 16 Apr 2021 17:32:46 -0400 Subject: [PATCH 217/467] chore: prevent normalization of semver versioning (#108) * chore: prevent normalization of semver versioning * chore: update workaround to make sic work --- packages/google-cloud-error-reporting/setup.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 859ef21df384..3535a1f2ab57 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -17,6 +17,20 @@ import setuptools +# Disable version normalization performed by setuptools.setup() +try: + # Try the approach of using sic(), added in setuptools 46.1.0 + from setuptools import sic +except ImportError: + # Try the approach of replacing packaging.version.Version + sic = lambda v: v + try: + # setuptools >=39.0.0 uses packaging from setuptools.extern + from setuptools.extern import packaging + except ImportError: + # setuptools <39.0.0 uses packaging from pkg_resources.extern + from pkg_resources.extern import packaging + packaging.version.Version = packaging.version.LegacyVersion # Package metadata. @@ -60,7 +74,7 @@ setuptools.setup( name=name, - version=version, + version=sic(version), description=description, long_description=readme, author="Google LLC", From 6fb045f06ade7f2c09b8d888fdaac79e4078f116 Mon Sep 17 00:00:00 2001 From: Dan Lee <71398022+dandhlee@users.noreply.github.com> Date: Mon, 26 Apr 2021 13:16:48 -0400 Subject: [PATCH 218/467] chore(revert): revert preventing normalization (#110) --- packages/google-cloud-error-reporting/setup.py | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 3535a1f2ab57..859ef21df384 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -17,20 +17,6 @@ import setuptools -# Disable version normalization performed by setuptools.setup() -try: - # Try the approach of using sic(), added in setuptools 46.1.0 - from setuptools import sic -except ImportError: - # Try the approach of replacing packaging.version.Version - sic = lambda v: v - try: - # setuptools >=39.0.0 uses packaging from setuptools.extern - from setuptools.extern import packaging - except ImportError: - # setuptools <39.0.0 uses packaging from pkg_resources.extern - from pkg_resources.extern import packaging - packaging.version.Version = packaging.version.LegacyVersion # Package metadata. @@ -74,7 +60,7 @@ setuptools.setup( name=name, - version=sic(version), + version=version, description=description, long_description=readme, author="Google LLC", From 18bd65d0afa4f9c0fec9942f6fd2868ebd6d53a9 Mon Sep 17 00:00:00 2001 From: "google-cloud-policy-bot[bot]" <80869356+google-cloud-policy-bot[bot]@users.noreply.github.com> Date: Thu, 6 May 2021 10:31:28 -0700 Subject: [PATCH 219/467] chore: add SECURITY.md (#115) Co-authored-by: google-cloud-policy-bot[bot] <80869356+google-cloud-policy-bot[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/SECURITY.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 packages/google-cloud-error-reporting/SECURITY.md diff --git a/packages/google-cloud-error-reporting/SECURITY.md b/packages/google-cloud-error-reporting/SECURITY.md new file mode 100644 index 000000000000..8b58ae9c01ae --- /dev/null +++ b/packages/google-cloud-error-reporting/SECURITY.md @@ -0,0 +1,7 @@ +# Security Policy + +To report a security issue, please use [g.co/vulnz](https://g.co/vulnz). + +The Google Security Team will respond within 5 working days of your report on g.co/vulnz. + +We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue. From e569011f5d7a056e1f8f5af0842b7b2c96411fe6 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 6 May 2021 10:32:23 -0700 Subject: [PATCH 220/467] chore: Re-generated to pick up changes from self. (#111) autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. --- .../google/cloud/errorreporting_v1beta1/__init__.py | 4 ++-- packages/google-cloud-error-reporting/synth.metadata | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 8ced2656dce0..ec7448cd5b11 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -54,7 +54,6 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", - "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -64,6 +63,7 @@ "QueryTimeRange", "ReportErrorEventRequest", "ReportErrorEventResponse", + "ReportErrorsServiceClient", "ReportedErrorEvent", "ResolutionStatus", "ServiceContext", @@ -73,5 +73,5 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ReportErrorsServiceClient", + "ErrorStatsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index 2c800b5a7ae5..f28827662dfd 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "0e13cca302a6ccd80e36ab0a79869301a51a75f6" + "sha": "df50c08a9b3a7cfeba166eeba3cb677b4b5123c6" } }, { From e75e1f45f650511e2367c194f558d32ca22d8a17 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 6 May 2021 10:43:40 -0700 Subject: [PATCH 221/467] chore: Re-generated to pick up changes from synthtool. (#113) --- .../.github/header-checker-lint.yml | 2 +- .../.kokoro/release.sh | 4 ++-- .../.kokoro/release/common.cfg | 14 ++------------ .../docs/_static/custom.css | 13 ++++++++++++- .../cloud/errorreporting_v1beta1/__init__.py | 2 +- .../google-cloud-error-reporting/renovate.json | 5 ++++- .../samples/snippets/api/noxfile.py | 10 ++++++++-- .../samples/snippets/fluent_on_compute/noxfile.py | 10 ++++++++-- .../google-cloud-error-reporting/synth.metadata | 4 ++-- 9 files changed, 40 insertions(+), 24 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/header-checker-lint.yml b/packages/google-cloud-error-reporting/.github/header-checker-lint.yml index fc281c05bd55..6fe78aa7987a 100644 --- a/packages/google-cloud-error-reporting/.github/header-checker-lint.yml +++ b/packages/google-cloud-error-reporting/.github/header-checker-lint.yml @@ -1,6 +1,6 @@ {"allowedCopyrightHolders": ["Google LLC"], "allowedLicenses": ["Apache-2.0", "MIT", "BSD-3"], - "ignoreFiles": ["**/requirements.txt", "**/requirements-test.txt"], + "ignoreFiles": ["**/requirements.txt", "**/requirements-test.txt", "**/__init__.py", "samples/**/constraints.txt", "samples/**/constraints-test.txt"], "sourceFileExtensions": [ "ts", "js", diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh index 3a61da134e98..8a6d27b13d89 100755 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -26,7 +26,7 @@ python3 -m pip install --upgrade twine wheel setuptools export PYTHONUNBUFFERED=1 # Move into the package, build the distribution and upload. -TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google_cloud_pypi_password") +TWINE_PASSWORD=$(cat "${KOKORO_GFILE_DIR}/secret_manager/google-cloud-pypi-token") cd github/python-error-reporting python3 setup.py sdist bdist_wheel -twine upload --username gcloudpypi --password "${TWINE_PASSWORD}" dist/* +twine upload --username __token__ --password "${TWINE_PASSWORD}" dist/* diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg index a0587682cee1..beb4fc55224a 100644 --- a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg @@ -23,18 +23,8 @@ env_vars: { value: "github/python-error-reporting/.kokoro/release.sh" } -# Fetch PyPI password -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "google_cloud_pypi_password" - } - } -} - # Tokens needed to report release status back to GitHub env_vars: { key: "SECRET_MANAGER_KEYS" - value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" -} \ No newline at end of file + value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem,google-cloud-pypi-token" +} diff --git a/packages/google-cloud-error-reporting/docs/_static/custom.css b/packages/google-cloud-error-reporting/docs/_static/custom.css index bcd37bbd3c4a..b0a295464b23 100644 --- a/packages/google-cloud-error-reporting/docs/_static/custom.css +++ b/packages/google-cloud-error-reporting/docs/_static/custom.css @@ -1,9 +1,20 @@ div#python2-eol { border-color: red; border-width: medium; -} +} /* Ensure minimum width for 'Parameters' / 'Returns' column */ dl.field-list > dt { min-width: 100px } + +/* Insert space between methods for readability */ +dl.method { + padding-top: 10px; + padding-bottom: 10px +} + +/* Insert empty space between classes */ +dl.class { + padding-bottom: 50px +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index ec7448cd5b11..3ce501e8758d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -54,6 +54,7 @@ "ErrorGroupOrder", "ErrorGroupServiceClient", "ErrorGroupStats", + "ErrorStatsServiceClient", "GetGroupRequest", "HttpRequestContext", "ListEventsRequest", @@ -73,5 +74,4 @@ "TimedCountAlignment", "TrackingIssue", "UpdateGroupRequest", - "ErrorStatsServiceClient", ) diff --git a/packages/google-cloud-error-reporting/renovate.json b/packages/google-cloud-error-reporting/renovate.json index f08bc22c9a55..c04895563e69 100644 --- a/packages/google-cloud-error-reporting/renovate.json +++ b/packages/google-cloud-error-reporting/renovate.json @@ -2,5 +2,8 @@ "extends": [ "config:base", ":preserveSemverRanges" ], - "ignorePaths": [".pre-commit-config.yaml"] + "ignorePaths": [".pre-commit-config.yaml"], + "pip_requirements": { + "fileMatch": ["requirements-test.txt", "samples/[\\S/]*constraints.txt", "samples/[\\S/]*constraints-test.txt"] + } } diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 97bf7da80e39..956cdf4f9250 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -172,10 +172,16 @@ def blacken(session: nox.sessions.Session) -> None: def _session_tests(session: nox.sessions.Session, post_install: Callable = None) -> None: """Runs py.test for a particular project.""" if os.path.exists("requirements.txt"): - session.install("-r", "requirements.txt") + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") if os.path.exists("requirements-test.txt"): - session.install("-r", "requirements-test.txt") + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") if INSTALL_LIBRARY_FROM_SOURCE: session.install("-e", _get_repo_root()) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 97bf7da80e39..956cdf4f9250 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -172,10 +172,16 @@ def blacken(session: nox.sessions.Session) -> None: def _session_tests(session: nox.sessions.Session, post_install: Callable = None) -> None: """Runs py.test for a particular project.""" if os.path.exists("requirements.txt"): - session.install("-r", "requirements.txt") + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") if os.path.exists("requirements-test.txt"): - session.install("-r", "requirements-test.txt") + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") if INSTALL_LIBRARY_FROM_SOURCE: session.install("-e", _get_repo_root()) diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata index f28827662dfd..01eecfb30d58 100644 --- a/packages/google-cloud-error-reporting/synth.metadata +++ b/packages/google-cloud-error-reporting/synth.metadata @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "5b5bf6d519b2d658d9f2e483d9f6f3d0ba8ee6bc" + "sha": "043cc620d6a6111816d9e09f2a97208565fde958" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "5b5bf6d519b2d658d9f2e483d9f6f3d0ba8ee6bc" + "sha": "043cc620d6a6111816d9e09f2a97208565fde958" } } ], From 0a978f98fa0d9c78c9d8d608dd75cb52ec7f2bb4 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Thu, 6 May 2021 13:51:35 -0400 Subject: [PATCH 222/467] chore: migrate to owl bot (#109) --- .../.github/.OwlBot.lock.yaml | 4 + .../.github/.OwlBot.yaml | 26 +++ .../{synth.py => owlbot.py} | 17 +- .../synth.metadata | 166 ------------------ 4 files changed, 36 insertions(+), 177 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml create mode 100644 packages/google-cloud-error-reporting/.github/.OwlBot.yaml rename packages/google-cloud-error-reporting/{synth.py => owlbot.py} (73%) delete mode 100644 packages/google-cloud-error-reporting/synth.metadata diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml new file mode 100644 index 000000000000..29084e8a33af --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -0,0 +1,4 @@ +docker: + digest: sha256:cfc0e802701262c211703c468874d767f65dabe6a1a71d0e07bfc8a3d5175f32 + image: gcr.io/repo-automation-bots/owlbot-python:latest + diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.yaml new file mode 100644 index 000000000000..051658f1a674 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.yaml @@ -0,0 +1,26 @@ +# Copyright 2021 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. + +docker: + image: gcr.io/repo-automation-bots/owlbot-python:latest + +deep-remove-regex: + - /owl-bot-staging + +deep-copy-regex: + - source: /google/devtools/clouderrorreporting/(v.*)/.*-py/(.*) + dest: /owl-bot-staging/$1/$2 + +begin-after-commit-hash: b06c9034cfcbce180ba732d03be6526e5c8ea1bc + diff --git a/packages/google-cloud-error-reporting/synth.py b/packages/google-cloud-error-reporting/owlbot.py similarity index 73% rename from packages/google-cloud-error-reporting/synth.py rename to packages/google-cloud-error-reporting/owlbot.py index 5fb57f34fe84..8fd0def0b1d3 100644 --- a/packages/google-cloud-error-reporting/synth.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -17,19 +17,14 @@ from synthtool import gcp from synthtool.languages import python -gapic = gcp.GAPICBazel() common = gcp.CommonTemplates() -# ---------------------------------------------------------------------------- -# Generate error_reporting GAPIC layer -# ---------------------------------------------------------------------------- -library = gapic.py_library( - service="errorreporting", - version="v1beta1", - bazel_target="//google/devtools/clouderrorreporting/v1beta1:devtools-clouderrorreporting-v1beta1-py", - include_protos=True, -) -s.move(library, excludes=["nox.py", "setup.py", "README.rst", "docs/index.rst", "google/cloud/errorreporting/"]) +default_version = "v1beta1" + +for library in s.get_staging_dirs(default_version): + s.move(library, excludes=["nox.py", "setup.py", "README.rst", "docs/index.rst", "google/cloud/errorreporting/"]) + +s.remove_staging_dirs() # ---------------------------------------------------------------------------- # Add templated files diff --git a/packages/google-cloud-error-reporting/synth.metadata b/packages/google-cloud-error-reporting/synth.metadata deleted file mode 100644 index 01eecfb30d58..000000000000 --- a/packages/google-cloud-error-reporting/synth.metadata +++ /dev/null @@ -1,166 +0,0 @@ -{ - "sources": [ - { - "git": { - "name": ".", - "remote": "https://github.com/googleapis/python-error-reporting.git", - "sha": "df50c08a9b3a7cfeba166eeba3cb677b4b5123c6" - } - }, - { - "git": { - "name": "googleapis", - "remote": "https://github.com/googleapis/googleapis.git", - "sha": "915925089600094e72e4bfa8cf586c170e6b7109", - "internalRef": "366152684" - } - }, - { - "git": { - "name": "synthtool", - "remote": "https://github.com/googleapis/synthtool.git", - "sha": "043cc620d6a6111816d9e09f2a97208565fde958" - } - }, - { - "git": { - "name": "synthtool", - "remote": "https://github.com/googleapis/synthtool.git", - "sha": "043cc620d6a6111816d9e09f2a97208565fde958" - } - } - ], - "destinations": [ - { - "client": { - "source": "googleapis", - "apiName": "errorreporting", - "apiVersion": "v1beta1", - "language": "python", - "generator": "bazel" - } - } - ], - "generatedFiles": [ - ".coveragerc", - ".flake8", - ".github/CONTRIBUTING.md", - ".github/ISSUE_TEMPLATE/bug_report.md", - ".github/ISSUE_TEMPLATE/feature_request.md", - ".github/ISSUE_TEMPLATE/support_request.md", - ".github/PULL_REQUEST_TEMPLATE.md", - ".github/header-checker-lint.yml", - ".github/release-please.yml", - ".github/snippet-bot.yml", - ".gitignore", - ".kokoro/build.sh", - ".kokoro/continuous/common.cfg", - ".kokoro/continuous/continuous.cfg", - ".kokoro/docker/docs/Dockerfile", - ".kokoro/docker/docs/fetch_gpg_keys.sh", - ".kokoro/docs/common.cfg", - ".kokoro/docs/docs-presubmit.cfg", - ".kokoro/docs/docs.cfg", - ".kokoro/populate-secrets.sh", - ".kokoro/presubmit/common.cfg", - ".kokoro/presubmit/presubmit.cfg", - ".kokoro/publish-docs.sh", - ".kokoro/release.sh", - ".kokoro/release/common.cfg", - ".kokoro/release/release.cfg", - ".kokoro/samples/lint/common.cfg", - ".kokoro/samples/lint/continuous.cfg", - ".kokoro/samples/lint/periodic.cfg", - ".kokoro/samples/lint/presubmit.cfg", - ".kokoro/samples/python3.6/common.cfg", - ".kokoro/samples/python3.6/continuous.cfg", - ".kokoro/samples/python3.6/periodic-head.cfg", - ".kokoro/samples/python3.6/periodic.cfg", - ".kokoro/samples/python3.6/presubmit.cfg", - ".kokoro/samples/python3.7/common.cfg", - ".kokoro/samples/python3.7/continuous.cfg", - ".kokoro/samples/python3.7/periodic-head.cfg", - ".kokoro/samples/python3.7/periodic.cfg", - ".kokoro/samples/python3.7/presubmit.cfg", - ".kokoro/samples/python3.8/common.cfg", - ".kokoro/samples/python3.8/continuous.cfg", - ".kokoro/samples/python3.8/periodic-head.cfg", - ".kokoro/samples/python3.8/periodic.cfg", - ".kokoro/samples/python3.8/presubmit.cfg", - ".kokoro/test-samples-against-head.sh", - ".kokoro/test-samples-impl.sh", - ".kokoro/test-samples.sh", - ".kokoro/trampoline.sh", - ".kokoro/trampoline_v2.sh", - ".pre-commit-config.yaml", - ".trampolinerc", - "CODE_OF_CONDUCT.md", - "CONTRIBUTING.rst", - "LICENSE", - "MANIFEST.in", - "docs/_static/custom.css", - "docs/_templates/layout.html", - "docs/conf.py", - "docs/errorreporting_v1beta1/error_group_service.rst", - "docs/errorreporting_v1beta1/error_stats_service.rst", - "docs/errorreporting_v1beta1/report_errors_service.rst", - "docs/errorreporting_v1beta1/services.rst", - "docs/errorreporting_v1beta1/types.rst", - "docs/multiprocessing.rst", - "google/cloud/errorreporting_v1beta1/__init__.py", - "google/cloud/errorreporting_v1beta1/proto/common.proto", - "google/cloud/errorreporting_v1beta1/proto/error_group_service.proto", - "google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto", - "google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto", - "google/cloud/errorreporting_v1beta1/py.typed", - "google/cloud/errorreporting_v1beta1/services/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/client.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py", - "google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py", - "google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py", - "google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py", - "google/cloud/errorreporting_v1beta1/types/__init__.py", - "google/cloud/errorreporting_v1beta1/types/common.py", - "google/cloud/errorreporting_v1beta1/types/error_group_service.py", - "google/cloud/errorreporting_v1beta1/types/error_stats_service.py", - "google/cloud/errorreporting_v1beta1/types/report_errors_service.py", - "mypy.ini", - "noxfile.py", - "renovate.json", - "samples/AUTHORING_GUIDE.md", - "samples/CONTRIBUTING.md", - "samples/snippets/api/noxfile.py", - "samples/snippets/fluent_on_compute/noxfile.py", - "scripts/decrypt-secrets.sh", - "scripts/fixup_errorreporting_v1beta1_keywords.py", - "scripts/readme-gen/readme_gen.py", - "scripts/readme-gen/templates/README.tmpl.rst", - "scripts/readme-gen/templates/auth.tmpl.rst", - "scripts/readme-gen/templates/auth_api_key.tmpl.rst", - "scripts/readme-gen/templates/install_deps.tmpl.rst", - "scripts/readme-gen/templates/install_portaudio.tmpl.rst", - "setup.cfg", - "testing/.gitignore", - "tests/unit/gapic/errorreporting_v1beta1/__init__.py", - "tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py", - "tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py", - "tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py" - ] -} \ No newline at end of file From ab3607f4cd84d01cdf2bdae3d5d23a8cef63c315 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 6 May 2021 19:51:45 +0200 Subject: [PATCH 223/467] chore(deps): update dependency mock to v4.0.3 (#116) --- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index 2466e25087c6..06b1d4e9fb22 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ pytest==6.0.1 -mock==4.0.2 +mock==4.0.3 From 135c4ecec1f1bea534b29caf396ffd7ab24f289b Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 6 May 2021 20:00:34 +0200 Subject: [PATCH 224/467] chore(deps): update dependency pytest to v6.2.4 (#117) --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index 7e460c8c866e..95ea1e6a02b0 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==6.0.1 +pytest==6.2.4 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index 06b1d4e9fb22..b0cf76724270 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==6.0.1 +pytest==6.2.4 mock==4.0.3 From 9b6688ec9278b8bcd8d72a91482c465266b8e525 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Wed, 12 May 2021 12:21:05 -0400 Subject: [PATCH 225/467] chore: add library type to .repo-metadata.json (#118) --- packages/google-cloud-error-reporting/.repo-metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index 549c632df8d8..994505e15a83 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -6,6 +6,7 @@ "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", "release_level": "beta", "language": "python", + "library_type": "GAPIC_COMBO", "repo": "googleapis/python-error-reporting", "distribution_name": "google-cloud-error-reporting", "api_id": "clouderrorreporting.googleapis.com", From fb0a0a5a1aa2654586f2dfa5a59a76858029165d Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 14:23:40 -0700 Subject: [PATCH 226/467] chore: new owl bot post processor docker image (#119) gcr.io/repo-automation-bots/owlbot-python:latest@sha256:1f18bfeb1629a6fd4c9301d4174c672cae5ac7ba611a5c8d204d6010e61f6f0d Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 5 ++--- .../.pre-commit-config.yaml | 2 +- .../CONTRIBUTING.rst | 16 +--------------- packages/google-cloud-error-reporting/noxfile.py | 14 ++------------ 4 files changed, 6 insertions(+), 31 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 29084e8a33af..bab398e15351 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,4 +1,3 @@ docker: - digest: sha256:cfc0e802701262c211703c468874d767f65dabe6a1a71d0e07bfc8a3d5175f32 - image: gcr.io/repo-automation-bots/owlbot-python:latest - + image: gcr.io/repo-automation-bots/owlbot-python:latest + digest: sha256:1f18bfeb1629a6fd4c9301d4174c672cae5ac7ba611a5c8d204d6010e61f6f0d diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 8912e9b5d7d7..1bbd787833ec 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -26,6 +26,6 @@ repos: hooks: - id: black - repo: https://gitlab.com/pycqa/flake8 - rev: 3.9.0 + rev: 3.9.1 hooks: - id: flake8 diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index e3dee436a6a7..854e602d3e8a 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -160,21 +160,7 @@ Running System Tests auth settings and change some configuration in your project to run all the tests. -- System tests will be run against an actual project and - so you'll need to provide some environment variables to facilitate - authentication to your project: - - - ``GOOGLE_APPLICATION_CREDENTIALS``: The path to a JSON key file; - Such a file can be downloaded directly from the developer's console by clicking - "Generate new JSON key". See private key - `docs `__ - for more details. - -- Once you have downloaded your json keys, set the environment variable - ``GOOGLE_APPLICATION_CREDENTIALS`` to the absolute path of the json file:: - - $ export GOOGLE_APPLICATION_CREDENTIALS="/Users//path/to/app_credentials.json" - +- System tests will be run against an actual project. You should use local credentials from gcloud when possible. See `Best practices for application authentication `__. Some tests require a service account. For those tests see `Authenticating as a service account `__. ************* Test Coverage diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 3f66499f816d..54c6690d168b 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -62,16 +62,9 @@ def lint(session): session.run("flake8", "google", "tests") -@nox.session(python="3.6") +@nox.session(python=DEFAULT_PYTHON_VERSION) def blacken(session): - """Run black. - - Format code to uniform standard. - - This currently uses Python 3.6 due to the automated Kokoro run of synthtool. - That run uses an image that doesn't have 3.6 installed. Before updating this - check the state of the `gcp_ubuntu_config` we use for that Kokoro run. - """ + """Run black. Format code to uniform standard.""" session.install(BLACK_VERSION) session.run( "black", *BLACK_PATHS, @@ -131,9 +124,6 @@ def system(session): # Check the value of `RUN_SYSTEM_TESTS` env var. It defaults to true. if os.environ.get("RUN_SYSTEM_TESTS", "true") == "false": session.skip("RUN_SYSTEM_TESTS is set to false, skipping") - # Sanity check: Only run tests if the environment variable is set. - if not os.environ.get("GOOGLE_APPLICATION_CREDENTIALS", ""): - session.skip("Credentials must be set via environment variable") # Install pyopenssl for mTLS testing. if os.environ.get("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true": session.install("pyopenssl") From 4c73784cc21ae35e9d1ba473e063b349ea328dd5 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 14 May 2021 12:54:10 +0000 Subject: [PATCH 227/467] chore: upgrade gapic-generator-python to 0.46.3 (#123) PiperOrigin-RevId: 373649163 Source-Link: https://github.com/googleapis/googleapis/commit/7e1b14e6c7a9ab96d2db7e4a131981f162446d34 Source-Link: https://github.com/googleapis/googleapis-gen/commit/0a3c7d272d697796db75857bac73905c68e498c3 --- .../error_stats_service.rst | 1 - .../cloud/errorreporting_v1beta1/__init__.py | 15 +- .../gapic_metadata.json | 111 +++++ .../services/__init__.py | 1 - .../services/error_group_service/__init__.py | 2 - .../error_group_service/async_client.py | 28 +- .../services/error_group_service/client.py | 67 ++- .../transports/__init__.py | 2 - .../error_group_service/transports/base.py | 106 ++++- .../error_group_service/transports/grpc.py | 22 +- .../transports/grpc_asyncio.py | 23 +- .../services/error_stats_service/__init__.py | 2 - .../error_stats_service/async_client.py | 30 +- .../services/error_stats_service/client.py | 70 ++- .../services/error_stats_service/pagers.py | 6 +- .../transports/__init__.py | 2 - .../error_stats_service/transports/base.py | 116 +++-- .../error_stats_service/transports/grpc.py | 22 +- .../transports/grpc_asyncio.py | 23 +- .../report_errors_service/__init__.py | 2 - .../report_errors_service/async_client.py | 25 +- .../services/report_errors_service/client.py | 60 +-- .../transports/__init__.py | 2 - .../report_errors_service/transports/base.py | 104 ++++- .../report_errors_service/transports/grpc.py | 22 +- .../transports/grpc_asyncio.py | 23 +- .../errorreporting_v1beta1/types/__init__.py | 2 - .../errorreporting_v1beta1/types/common.py | 59 +-- .../types/error_group_service.py | 7 +- .../types/error_stats_service.py | 102 ++--- .../types/report_errors_service.py | 18 +- .../fixup_errorreporting_v1beta1_keywords.py | 17 +- .../tests/__init__.py | 15 + .../tests/unit/__init__.py | 4 +- .../tests/unit/gapic/__init__.py | 15 + .../gapic/errorreporting_v1beta1/__init__.py | 1 - .../test_error_group_service.py | 359 +++++++++++---- .../test_error_stats_service.py | 414 ++++++++++++------ .../test_report_errors_service.py | 339 +++++++++++--- 39 files changed, 1479 insertions(+), 760 deletions(-) create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_metadata.json create mode 100644 packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_stats_service.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_stats_service.rst index 30d29e696d69..b798b28d9b3c 100644 --- a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_stats_service.rst +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/error_stats_service.rst @@ -5,7 +5,6 @@ ErrorStatsService :members: :inherited-members: - .. automodule:: google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers :members: :inherited-members: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 3ce501e8758d..47c1a698b064 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,21 +15,24 @@ # from .services.error_group_service import ErrorGroupServiceClient +from .services.error_group_service import ErrorGroupServiceAsyncClient from .services.error_stats_service import ErrorStatsServiceClient +from .services.error_stats_service import ErrorStatsServiceAsyncClient from .services.report_errors_service import ReportErrorsServiceClient +from .services.report_errors_service import ReportErrorsServiceAsyncClient + from .types.common import ErrorContext from .types.common import ErrorEvent from .types.common import ErrorGroup from .types.common import HttpRequestContext -from .types.common import ResolutionStatus from .types.common import ServiceContext from .types.common import SourceLocation from .types.common import TrackingIssue +from .types.common import ResolutionStatus from .types.error_group_service import GetGroupRequest from .types.error_group_service import UpdateGroupRequest from .types.error_stats_service import DeleteEventsRequest from .types.error_stats_service import DeleteEventsResponse -from .types.error_stats_service import ErrorGroupOrder from .types.error_stats_service import ErrorGroupStats from .types.error_stats_service import ListEventsRequest from .types.error_stats_service import ListEventsResponse @@ -39,13 +41,16 @@ from .types.error_stats_service import QueryTimeRange from .types.error_stats_service import ServiceContextFilter from .types.error_stats_service import TimedCount +from .types.error_stats_service import ErrorGroupOrder from .types.error_stats_service import TimedCountAlignment +from .types.report_errors_service import ReportedErrorEvent from .types.report_errors_service import ReportErrorEventRequest from .types.report_errors_service import ReportErrorEventResponse -from .types.report_errors_service import ReportedErrorEvent - __all__ = ( + "ErrorGroupServiceAsyncClient", + "ErrorStatsServiceAsyncClient", + "ReportErrorsServiceAsyncClient", "DeleteEventsRequest", "DeleteEventsResponse", "ErrorContext", diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_metadata.json b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_metadata.json new file mode 100644 index 000000000000..1b6fc5e2eda0 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_metadata.json @@ -0,0 +1,111 @@ + { + "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", + "language": "python", + "libraryPackage": "google.cloud.errorreporting_v1beta1", + "protoPackage": "google.devtools.clouderrorreporting.v1beta1", + "schema": "1.0", + "services": { + "ErrorGroupService": { + "clients": { + "grpc": { + "libraryClient": "ErrorGroupServiceClient", + "rpcs": { + "GetGroup": { + "methods": [ + "get_group" + ] + }, + "UpdateGroup": { + "methods": [ + "update_group" + ] + } + } + }, + "grpc-async": { + "libraryClient": "ErrorGroupServiceAsyncClient", + "rpcs": { + "GetGroup": { + "methods": [ + "get_group" + ] + }, + "UpdateGroup": { + "methods": [ + "update_group" + ] + } + } + } + } + }, + "ErrorStatsService": { + "clients": { + "grpc": { + "libraryClient": "ErrorStatsServiceClient", + "rpcs": { + "DeleteEvents": { + "methods": [ + "delete_events" + ] + }, + "ListEvents": { + "methods": [ + "list_events" + ] + }, + "ListGroupStats": { + "methods": [ + "list_group_stats" + ] + } + } + }, + "grpc-async": { + "libraryClient": "ErrorStatsServiceAsyncClient", + "rpcs": { + "DeleteEvents": { + "methods": [ + "delete_events" + ] + }, + "ListEvents": { + "methods": [ + "list_events" + ] + }, + "ListGroupStats": { + "methods": [ + "list_group_stats" + ] + } + } + } + } + }, + "ReportErrorsService": { + "clients": { + "grpc": { + "libraryClient": "ReportErrorsServiceClient", + "rpcs": { + "ReportErrorEvent": { + "methods": [ + "report_error_event" + ] + } + } + }, + "grpc-async": { + "libraryClient": "ReportErrorsServiceAsyncClient", + "rpcs": { + "ReportErrorEvent": { + "methods": [ + "report_error_event" + ] + } + } + } + } + } + } +} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py index 42ffdf2bc43d..4de65971c238 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py index aff59ad19a91..87f6a56f5d80 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from .client import ErrorGroupServiceClient from .async_client import ErrorGroupServiceAsyncClient diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index e2af4bb271aa..21e479519547 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict import functools import re @@ -22,15 +20,14 @@ import pkg_resources import google.api_core.client_options as ClientOptions # type: ignore -from google.api_core import exceptions # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service - from .transports.base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc_asyncio import ErrorGroupServiceGrpcAsyncIOTransport from .client import ErrorGroupServiceClient @@ -48,31 +45,26 @@ class ErrorGroupServiceAsyncClient: parse_error_group_path = staticmethod( ErrorGroupServiceClient.parse_error_group_path ) - common_billing_account_path = staticmethod( ErrorGroupServiceClient.common_billing_account_path ) parse_common_billing_account_path = staticmethod( ErrorGroupServiceClient.parse_common_billing_account_path ) - common_folder_path = staticmethod(ErrorGroupServiceClient.common_folder_path) parse_common_folder_path = staticmethod( ErrorGroupServiceClient.parse_common_folder_path ) - common_organization_path = staticmethod( ErrorGroupServiceClient.common_organization_path ) parse_common_organization_path = staticmethod( ErrorGroupServiceClient.parse_common_organization_path ) - common_project_path = staticmethod(ErrorGroupServiceClient.common_project_path) parse_common_project_path = staticmethod( ErrorGroupServiceClient.parse_common_project_path ) - common_location_path = staticmethod(ErrorGroupServiceClient.common_location_path) parse_common_location_path = staticmethod( ErrorGroupServiceClient.parse_common_location_path @@ -80,7 +72,8 @@ class ErrorGroupServiceAsyncClient: @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials info. + """Creates an instance of this client using the provided credentials + info. Args: info (dict): The service account private key info. @@ -95,7 +88,7 @@ def from_service_account_info(cls, info: dict, *args, **kwargs): @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials - file. + file. Args: filename (str): The path to the service account private key json @@ -112,7 +105,7 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): @property def transport(self) -> ErrorGroupServiceTransport: - """Return the transport used by the client instance. + """Returns the transport used by the client instance. Returns: ErrorGroupServiceTransport: The transport used by the client instance. @@ -126,12 +119,12 @@ def transport(self) -> ErrorGroupServiceTransport: def __init__( self, *, - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, transport: Union[str, ErrorGroupServiceTransport] = "grpc_asyncio", client_options: ClientOptions = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiate the error group service client. + """Instantiates the error group service client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -163,7 +156,6 @@ def __init__( google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport creation failed for any reason. """ - self._client = ErrorGroupServiceClient( credentials=credentials, transport=transport, @@ -197,7 +189,6 @@ async def get_group( This corresponds to the ``group_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -224,7 +215,6 @@ async def get_group( # If we have keyword arguments corresponding to fields on the # request, apply these. - if group_name is not None: request.group_name = group_name @@ -273,7 +263,6 @@ async def update_group( This corresponds to the ``group`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -300,7 +289,6 @@ async def update_group( # If we have keyword arguments corresponding to fields on the # request, apply these. - if group is not None: request.group = group diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index db374a934c91..969077fde2a3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict from distutils import util import os @@ -23,10 +21,10 @@ import pkg_resources from google.api_core import client_options as client_options_lib # type: ignore -from google.api_core import exceptions # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore @@ -34,7 +32,6 @@ from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service - from .transports.base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc import ErrorGroupServiceGrpcTransport from .transports.grpc_asyncio import ErrorGroupServiceGrpcAsyncIOTransport @@ -57,7 +54,7 @@ class ErrorGroupServiceClientMeta(type): def get_transport_class( cls, label: str = None, ) -> Type[ErrorGroupServiceTransport]: - """Return an appropriate transport class. + """Returns an appropriate transport class. Args: label: The name of the desired transport. If none is @@ -80,7 +77,8 @@ class ErrorGroupServiceClient(metaclass=ErrorGroupServiceClientMeta): @staticmethod def _get_default_mtls_endpoint(api_endpoint): - """Convert api endpoint to mTLS endpoint. + """Converts api endpoint to mTLS endpoint. + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. Args: @@ -114,7 +112,8 @@ def _get_default_mtls_endpoint(api_endpoint): @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials info. + """Creates an instance of this client using the provided credentials + info. Args: info (dict): The service account private key info. @@ -131,7 +130,7 @@ def from_service_account_info(cls, info: dict, *args, **kwargs): @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials - file. + file. Args: filename (str): The path to the service account private key json @@ -150,27 +149,28 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): @property def transport(self) -> ErrorGroupServiceTransport: - """Return the transport used by the client instance. + """Returns the transport used by the client instance. Returns: - ErrorGroupServiceTransport: The transport used by the client instance. + ErrorGroupServiceTransport: The transport used by the client + instance. """ return self._transport @staticmethod def error_group_path(project: str, group: str,) -> str: - """Return a fully-qualified error_group string.""" + """Returns a fully-qualified error_group string.""" return "projects/{project}/groups/{group}".format(project=project, group=group,) @staticmethod def parse_error_group_path(path: str) -> Dict[str, str]: - """Parse a error_group path into its component segments.""" + """Parses a error_group path into its component segments.""" m = re.match(r"^projects/(?P.+?)/groups/(?P.+?)$", path) return m.groupdict() if m else {} @staticmethod def common_billing_account_path(billing_account: str,) -> str: - """Return a fully-qualified billing_account string.""" + """Returns a fully-qualified billing_account string.""" return "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -183,7 +183,7 @@ def parse_common_billing_account_path(path: str) -> Dict[str, str]: @staticmethod def common_folder_path(folder: str,) -> str: - """Return a fully-qualified folder string.""" + """Returns a fully-qualified folder string.""" return "folders/{folder}".format(folder=folder,) @staticmethod @@ -194,7 +194,7 @@ def parse_common_folder_path(path: str) -> Dict[str, str]: @staticmethod def common_organization_path(organization: str,) -> str: - """Return a fully-qualified organization string.""" + """Returns a fully-qualified organization string.""" return "organizations/{organization}".format(organization=organization,) @staticmethod @@ -205,7 +205,7 @@ def parse_common_organization_path(path: str) -> Dict[str, str]: @staticmethod def common_project_path(project: str,) -> str: - """Return a fully-qualified project string.""" + """Returns a fully-qualified project string.""" return "projects/{project}".format(project=project,) @staticmethod @@ -216,7 +216,7 @@ def parse_common_project_path(path: str) -> Dict[str, str]: @staticmethod def common_location_path(project: str, location: str,) -> str: - """Return a fully-qualified location string.""" + """Returns a fully-qualified location string.""" return "projects/{project}/locations/{location}".format( project=project, location=location, ) @@ -230,12 +230,12 @@ def parse_common_location_path(path: str) -> Dict[str, str]: def __init__( self, *, - credentials: Optional[credentials.Credentials] = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, ErrorGroupServiceTransport, None] = None, client_options: Optional[client_options_lib.ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiate the error group service client. + """Instantiates the error group service client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -290,9 +290,10 @@ def __init__( client_cert_source_func = client_options.client_cert_source else: is_mtls = mtls.has_default_client_cert_source() - client_cert_source_func = ( - mtls.default_client_cert_source() if is_mtls else None - ) + if is_mtls: + client_cert_source_func = mtls.default_client_cert_source() + else: + client_cert_source_func = None # Figure out which api endpoint to use. if client_options.api_endpoint is not None: @@ -304,12 +305,14 @@ def __init__( elif use_mtls_env == "always": api_endpoint = self.DEFAULT_MTLS_ENDPOINT elif use_mtls_env == "auto": - api_endpoint = ( - self.DEFAULT_MTLS_ENDPOINT if is_mtls else self.DEFAULT_ENDPOINT - ) + if is_mtls: + api_endpoint = self.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = self.DEFAULT_ENDPOINT else: raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted values: never, auto, always" + "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted " + "values: never, auto, always" ) # Save or instantiate the transport. @@ -324,8 +327,8 @@ def __init__( ) if client_options.scopes: raise ValueError( - "When providing a transport instance, " - "provide its scopes directly." + "When providing a transport instance, provide its scopes " + "directly." ) self._transport = transport else: @@ -366,7 +369,6 @@ def get_group( This corresponds to the ``group_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -395,10 +397,8 @@ def get_group( # there are no flattened fields. if not isinstance(request, error_group_service.GetGroupRequest): request = error_group_service.GetGroupRequest(request) - # If we have keyword arguments corresponding to fields on the # request, apply these. - if group_name is not None: request.group_name = group_name @@ -443,7 +443,6 @@ def update_group( This corresponds to the ``group`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -472,10 +471,8 @@ def update_group( # there are no flattened fields. if not isinstance(request, error_group_service.UpdateGroupRequest): request = error_group_service.UpdateGroupRequest(request) - # If we have keyword arguments corresponding to fields on the # request, apply these. - if group is not None: request.group = group diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py index cbf9008abfe1..6e4ee23e9281 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict from typing import Dict, Type diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 45260605e9a0..4265e49d4d31 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,21 +13,21 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import abc -import typing +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union +import packaging.version import pkg_resources -from google import auth # type: ignore -from google.api_core import exceptions # type: ignore +import google.auth # type: ignore +import google.api_core # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service - try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( @@ -38,27 +37,41 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +try: + # google.auth.__version__ was added in 1.26.0 + _GOOGLE_AUTH_VERSION = google.auth.__version__ +except AttributeError: + try: # try pkg_resources if it is available + _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version + except pkg_resources.DistributionNotFound: # pragma: NO COVER + _GOOGLE_AUTH_VERSION = None + +_API_CORE_VERSION = google.api_core.__version__ + class ErrorGroupServiceTransport(abc.ABC): """Abstract transport class for ErrorGroupService.""" AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + DEFAULT_HOST: str = "clouderrorreporting.googleapis.com" + def __init__( self, *, - host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, - credentials_file: typing.Optional[str] = None, - scopes: typing.Optional[typing.Sequence[str]] = AUTH_SCOPES, - quota_project_id: typing.Optional[str] = None, + host: str = DEFAULT_HOST, + credentials: ga_credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, **kwargs, ) -> None: """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -67,7 +80,7 @@ def __init__( credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is mutually exclusive with credentials. - scope (Optional[Sequence[str]]): A list of scopes. + scopes (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -81,29 +94,76 @@ def __init__( host += ":443" self._host = host + scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + # Save the scopes. self._scopes = scopes or self.AUTH_SCOPES # If no credentials are provided, then determine the appropriate # defaults. if credentials and credentials_file: - raise exceptions.DuplicateCredentialArgs( + raise core_exceptions.DuplicateCredentialArgs( "'credentials_file' and 'credentials' are mutually exclusive" ) if credentials_file is not None: - credentials, _ = auth.load_credentials_from_file( - credentials_file, scopes=self._scopes, quota_project_id=quota_project_id + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) elif credentials is None: - credentials, _ = auth.default( - scopes=self._scopes, quota_project_id=quota_project_id + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id ) # Save the credentials. self._credentials = credentials + # TODO(busunkim): These two class methods are in the base transport + # to avoid duplicating code across the transport classes. These functions + # should be deleted once the minimum required versions of google-api-core + # and google-auth are increased. + + # TODO: Remove this function once google-auth >= 1.25.0 is required + @classmethod + def _get_scopes_kwargs( + cls, host: str, scopes: Optional[Sequence[str]] + ) -> Dict[str, Optional[Sequence[str]]]: + """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" + + scopes_kwargs = {} + + if _GOOGLE_AUTH_VERSION and ( + packaging.version.parse(_GOOGLE_AUTH_VERSION) + >= packaging.version.parse("1.25.0") + ): + scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} + else: + scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} + + return scopes_kwargs + + # TODO: Remove this function once google-api-core >= 1.26.0 is required + @classmethod + def _get_self_signed_jwt_kwargs( + cls, host: str, scopes: Optional[Sequence[str]] + ) -> Dict[str, Union[Optional[Sequence[str]], str]]: + """Returns kwargs to pass to grpc_helpers.create_channel depending on the google-api-core version""" + + self_signed_jwt_kwargs: Dict[str, Union[Optional[Sequence[str]], str]] = {} + + if _API_CORE_VERSION and ( + packaging.version.parse(_API_CORE_VERSION) + >= packaging.version.parse("1.26.0") + ): + self_signed_jwt_kwargs["default_scopes"] = cls.AUTH_SCOPES + self_signed_jwt_kwargs["scopes"] = scopes + self_signed_jwt_kwargs["default_host"] = cls.DEFAULT_HOST + else: + self_signed_jwt_kwargs["scopes"] = scopes or cls.AUTH_SCOPES + + return self_signed_jwt_kwargs + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { @@ -118,18 +178,18 @@ def _prep_wrapped_messages(self, client_info): @property def get_group( self, - ) -> typing.Callable[ + ) -> Callable[ [error_group_service.GetGroupRequest], - typing.Union[common.ErrorGroup, typing.Awaitable[common.ErrorGroup]], + Union[common.ErrorGroup, Awaitable[common.ErrorGroup]], ]: raise NotImplementedError() @property def update_group( self, - ) -> typing.Callable[ + ) -> Callable[ [error_group_service.UpdateGroupRequest], - typing.Union[common.ErrorGroup, typing.Awaitable[common.ErrorGroup]], + Union[common.ErrorGroup, Awaitable[common.ErrorGroup]], ]: raise NotImplementedError() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 8514d3d76f5b..345cbf36eb06 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,21 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import warnings -from typing import Callable, Dict, Optional, Sequence, Tuple +from typing import Callable, Dict, Optional, Sequence, Tuple, Union from google.api_core import grpc_helpers # type: ignore from google.api_core import gapic_v1 # type: ignore -from google import auth # type: ignore -from google.auth import credentials # type: ignore +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore import grpc # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service - from .base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO @@ -51,7 +48,7 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: str = None, scopes: Sequence[str] = None, channel: grpc.Channel = None, @@ -65,7 +62,8 @@ def __init__( """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -175,7 +173,7 @@ def __init__( def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: str = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -206,13 +204,15 @@ def create_channel( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ - scopes = scopes or cls.AUTH_SCOPES + + self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) + return grpc_helpers.create_channel( host, credentials=credentials, credentials_file=credentials_file, - scopes=scopes, quota_project_id=quota_project_id, + **self_signed_jwt_kwargs, **kwargs, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index d09a346bc91b..e2e46cdeca4e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,22 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union from google.api_core import gapic_v1 # type: ignore from google.api_core import grpc_helpers_async # type: ignore -from google import auth # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service - from .base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO from .grpc import ErrorGroupServiceGrpcTransport @@ -54,7 +51,7 @@ class ErrorGroupServiceGrpcAsyncIOTransport(ErrorGroupServiceTransport): def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -81,13 +78,15 @@ def create_channel( Returns: aio.Channel: A gRPC AsyncIO channel object. """ - scopes = scopes or cls.AUTH_SCOPES + + self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) + return grpc_helpers_async.create_channel( host, credentials=credentials, credentials_file=credentials_file, - scopes=scopes, quota_project_id=quota_project_id, + **self_signed_jwt_kwargs, **kwargs, ) @@ -95,7 +94,7 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, channel: aio.Channel = None, @@ -109,7 +108,8 @@ def __init__( """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -167,7 +167,6 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - else: if api_mtls_endpoint: host = api_mtls_endpoint diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py index 538729711901..24c6107676fa 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from .client import ErrorStatsServiceClient from .async_client import ErrorStatsServiceAsyncClient diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index ca11614136eb..b13a76d469ea 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict import functools import re @@ -22,16 +20,15 @@ import pkg_resources import google.api_core.client_options as ClientOptions # type: ignore -from google.api_core import exceptions # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service - from .transports.base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc_asyncio import ErrorStatsServiceGrpcAsyncIOTransport from .client import ErrorStatsServiceClient @@ -51,31 +48,26 @@ class ErrorStatsServiceAsyncClient: parse_error_group_path = staticmethod( ErrorStatsServiceClient.parse_error_group_path ) - common_billing_account_path = staticmethod( ErrorStatsServiceClient.common_billing_account_path ) parse_common_billing_account_path = staticmethod( ErrorStatsServiceClient.parse_common_billing_account_path ) - common_folder_path = staticmethod(ErrorStatsServiceClient.common_folder_path) parse_common_folder_path = staticmethod( ErrorStatsServiceClient.parse_common_folder_path ) - common_organization_path = staticmethod( ErrorStatsServiceClient.common_organization_path ) parse_common_organization_path = staticmethod( ErrorStatsServiceClient.parse_common_organization_path ) - common_project_path = staticmethod(ErrorStatsServiceClient.common_project_path) parse_common_project_path = staticmethod( ErrorStatsServiceClient.parse_common_project_path ) - common_location_path = staticmethod(ErrorStatsServiceClient.common_location_path) parse_common_location_path = staticmethod( ErrorStatsServiceClient.parse_common_location_path @@ -83,7 +75,8 @@ class ErrorStatsServiceAsyncClient: @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials info. + """Creates an instance of this client using the provided credentials + info. Args: info (dict): The service account private key info. @@ -98,7 +91,7 @@ def from_service_account_info(cls, info: dict, *args, **kwargs): @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials - file. + file. Args: filename (str): The path to the service account private key json @@ -115,7 +108,7 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): @property def transport(self) -> ErrorStatsServiceTransport: - """Return the transport used by the client instance. + """Returns the transport used by the client instance. Returns: ErrorStatsServiceTransport: The transport used by the client instance. @@ -129,12 +122,12 @@ def transport(self) -> ErrorStatsServiceTransport: def __init__( self, *, - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, transport: Union[str, ErrorStatsServiceTransport] = "grpc_asyncio", client_options: ClientOptions = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiate the error stats service client. + """Instantiates the error stats service client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -166,7 +159,6 @@ def __init__( google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport creation failed for any reason. """ - self._client = ErrorStatsServiceClient( credentials=credentials, transport=transport, @@ -216,7 +208,6 @@ async def list_group_stats( This corresponds to the ``time_range`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -246,7 +237,6 @@ async def list_group_stats( # If we have keyword arguments corresponding to fields on the # request, apply these. - if project_name is not None: request.project_name = project_name if time_range is not None: @@ -314,7 +304,6 @@ async def list_events( This corresponds to the ``group_id`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -344,7 +333,6 @@ async def list_events( # If we have keyword arguments corresponding to fields on the # request, apply these. - if project_name is not None: request.project_name = project_name if group_id is not None: @@ -403,7 +391,6 @@ async def delete_events( This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -430,7 +417,6 @@ async def delete_events( # If we have keyword arguments corresponding to fields on the # request, apply these. - if project_name is not None: request.project_name = project_name diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 7178412c44e1..60414659d9a9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict from distutils import util import os @@ -23,10 +21,10 @@ import pkg_resources from google.api_core import client_options as client_options_lib # type: ignore -from google.api_core import exceptions # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore @@ -35,7 +33,6 @@ from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service - from .transports.base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc import ErrorStatsServiceGrpcTransport from .transports.grpc_asyncio import ErrorStatsServiceGrpcAsyncIOTransport @@ -58,7 +55,7 @@ class ErrorStatsServiceClientMeta(type): def get_transport_class( cls, label: str = None, ) -> Type[ErrorStatsServiceTransport]: - """Return an appropriate transport class. + """Returns an appropriate transport class. Args: label: The name of the desired transport. If none is @@ -83,7 +80,8 @@ class ErrorStatsServiceClient(metaclass=ErrorStatsServiceClientMeta): @staticmethod def _get_default_mtls_endpoint(api_endpoint): - """Convert api endpoint to mTLS endpoint. + """Converts api endpoint to mTLS endpoint. + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. Args: @@ -117,7 +115,8 @@ def _get_default_mtls_endpoint(api_endpoint): @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials info. + """Creates an instance of this client using the provided credentials + info. Args: info (dict): The service account private key info. @@ -134,7 +133,7 @@ def from_service_account_info(cls, info: dict, *args, **kwargs): @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials - file. + file. Args: filename (str): The path to the service account private key json @@ -153,27 +152,28 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): @property def transport(self) -> ErrorStatsServiceTransport: - """Return the transport used by the client instance. + """Returns the transport used by the client instance. Returns: - ErrorStatsServiceTransport: The transport used by the client instance. + ErrorStatsServiceTransport: The transport used by the client + instance. """ return self._transport @staticmethod def error_group_path(project: str, group: str,) -> str: - """Return a fully-qualified error_group string.""" + """Returns a fully-qualified error_group string.""" return "projects/{project}/groups/{group}".format(project=project, group=group,) @staticmethod def parse_error_group_path(path: str) -> Dict[str, str]: - """Parse a error_group path into its component segments.""" + """Parses a error_group path into its component segments.""" m = re.match(r"^projects/(?P.+?)/groups/(?P.+?)$", path) return m.groupdict() if m else {} @staticmethod def common_billing_account_path(billing_account: str,) -> str: - """Return a fully-qualified billing_account string.""" + """Returns a fully-qualified billing_account string.""" return "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -186,7 +186,7 @@ def parse_common_billing_account_path(path: str) -> Dict[str, str]: @staticmethod def common_folder_path(folder: str,) -> str: - """Return a fully-qualified folder string.""" + """Returns a fully-qualified folder string.""" return "folders/{folder}".format(folder=folder,) @staticmethod @@ -197,7 +197,7 @@ def parse_common_folder_path(path: str) -> Dict[str, str]: @staticmethod def common_organization_path(organization: str,) -> str: - """Return a fully-qualified organization string.""" + """Returns a fully-qualified organization string.""" return "organizations/{organization}".format(organization=organization,) @staticmethod @@ -208,7 +208,7 @@ def parse_common_organization_path(path: str) -> Dict[str, str]: @staticmethod def common_project_path(project: str,) -> str: - """Return a fully-qualified project string.""" + """Returns a fully-qualified project string.""" return "projects/{project}".format(project=project,) @staticmethod @@ -219,7 +219,7 @@ def parse_common_project_path(path: str) -> Dict[str, str]: @staticmethod def common_location_path(project: str, location: str,) -> str: - """Return a fully-qualified location string.""" + """Returns a fully-qualified location string.""" return "projects/{project}/locations/{location}".format( project=project, location=location, ) @@ -233,12 +233,12 @@ def parse_common_location_path(path: str) -> Dict[str, str]: def __init__( self, *, - credentials: Optional[credentials.Credentials] = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, ErrorStatsServiceTransport, None] = None, client_options: Optional[client_options_lib.ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiate the error stats service client. + """Instantiates the error stats service client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -293,9 +293,10 @@ def __init__( client_cert_source_func = client_options.client_cert_source else: is_mtls = mtls.has_default_client_cert_source() - client_cert_source_func = ( - mtls.default_client_cert_source() if is_mtls else None - ) + if is_mtls: + client_cert_source_func = mtls.default_client_cert_source() + else: + client_cert_source_func = None # Figure out which api endpoint to use. if client_options.api_endpoint is not None: @@ -307,12 +308,14 @@ def __init__( elif use_mtls_env == "always": api_endpoint = self.DEFAULT_MTLS_ENDPOINT elif use_mtls_env == "auto": - api_endpoint = ( - self.DEFAULT_MTLS_ENDPOINT if is_mtls else self.DEFAULT_ENDPOINT - ) + if is_mtls: + api_endpoint = self.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = self.DEFAULT_ENDPOINT else: raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted values: never, auto, always" + "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted " + "values: never, auto, always" ) # Save or instantiate the transport. @@ -327,8 +330,8 @@ def __init__( ) if client_options.scopes: raise ValueError( - "When providing a transport instance, " - "provide its scopes directly." + "When providing a transport instance, provide its scopes " + "directly." ) self._transport = transport else: @@ -385,7 +388,6 @@ def list_group_stats( This corresponds to the ``time_range`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -417,10 +419,8 @@ def list_group_stats( # there are no flattened fields. if not isinstance(request, error_stats_service.ListGroupStatsRequest): request = error_stats_service.ListGroupStatsRequest(request) - # If we have keyword arguments corresponding to fields on the # request, apply these. - if project_name is not None: request.project_name = project_name if time_range is not None: @@ -484,7 +484,6 @@ def list_events( This corresponds to the ``group_id`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -516,10 +515,8 @@ def list_events( # there are no flattened fields. if not isinstance(request, error_stats_service.ListEventsRequest): request = error_stats_service.ListEventsRequest(request) - # If we have keyword arguments corresponding to fields on the # request, apply these. - if project_name is not None: request.project_name = project_name if group_id is not None: @@ -574,7 +571,6 @@ def delete_events( This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -603,10 +599,8 @@ def delete_events( # there are no flattened fields. if not isinstance(request, error_stats_service.DeleteEventsRequest): request = error_stats_service.DeleteEventsRequest(request) - # If we have keyword arguments corresponding to fields on the # request, apply these. - if project_name is not None: request.project_name = project_name diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index a5d6c02f5cc2..02be9c537d0e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from typing import ( Any, AsyncIterable, @@ -118,7 +116,7 @@ def __init__( *, metadata: Sequence[Tuple[str, str]] = () ): - """Instantiate the pager. + """Instantiates the pager. Args: method (Callable): The method that was originally called, and @@ -246,7 +244,7 @@ def __init__( *, metadata: Sequence[Tuple[str, str]] = () ): - """Instantiate the pager. + """Instantiates the pager. Args: method (Callable): The method that was originally called, and diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py index 9d9ed28003b3..8a9987b999db 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict from typing import Dict, Type diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 18470b15360e..19a980780e01 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,20 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import abc -import typing +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union +import packaging.version import pkg_resources -from google import auth # type: ignore -from google.api_core import exceptions # type: ignore +import google.auth # type: ignore +import google.api_core # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.cloud.errorreporting_v1beta1.types import error_stats_service - try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( @@ -37,27 +36,41 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +try: + # google.auth.__version__ was added in 1.26.0 + _GOOGLE_AUTH_VERSION = google.auth.__version__ +except AttributeError: + try: # try pkg_resources if it is available + _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version + except pkg_resources.DistributionNotFound: # pragma: NO COVER + _GOOGLE_AUTH_VERSION = None + +_API_CORE_VERSION = google.api_core.__version__ + class ErrorStatsServiceTransport(abc.ABC): """Abstract transport class for ErrorStatsService.""" AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + DEFAULT_HOST: str = "clouderrorreporting.googleapis.com" + def __init__( self, *, - host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, - credentials_file: typing.Optional[str] = None, - scopes: typing.Optional[typing.Sequence[str]] = AUTH_SCOPES, - quota_project_id: typing.Optional[str] = None, + host: str = DEFAULT_HOST, + credentials: ga_credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, **kwargs, ) -> None: """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -66,7 +79,7 @@ def __init__( credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is mutually exclusive with credentials. - scope (Optional[Sequence[str]]): A list of scopes. + scopes (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -80,29 +93,76 @@ def __init__( host += ":443" self._host = host + scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + # Save the scopes. self._scopes = scopes or self.AUTH_SCOPES # If no credentials are provided, then determine the appropriate # defaults. if credentials and credentials_file: - raise exceptions.DuplicateCredentialArgs( + raise core_exceptions.DuplicateCredentialArgs( "'credentials_file' and 'credentials' are mutually exclusive" ) if credentials_file is not None: - credentials, _ = auth.load_credentials_from_file( - credentials_file, scopes=self._scopes, quota_project_id=quota_project_id + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) elif credentials is None: - credentials, _ = auth.default( - scopes=self._scopes, quota_project_id=quota_project_id + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id ) # Save the credentials. self._credentials = credentials + # TODO(busunkim): These two class methods are in the base transport + # to avoid duplicating code across the transport classes. These functions + # should be deleted once the minimum required versions of google-api-core + # and google-auth are increased. + + # TODO: Remove this function once google-auth >= 1.25.0 is required + @classmethod + def _get_scopes_kwargs( + cls, host: str, scopes: Optional[Sequence[str]] + ) -> Dict[str, Optional[Sequence[str]]]: + """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" + + scopes_kwargs = {} + + if _GOOGLE_AUTH_VERSION and ( + packaging.version.parse(_GOOGLE_AUTH_VERSION) + >= packaging.version.parse("1.25.0") + ): + scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} + else: + scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} + + return scopes_kwargs + + # TODO: Remove this function once google-api-core >= 1.26.0 is required + @classmethod + def _get_self_signed_jwt_kwargs( + cls, host: str, scopes: Optional[Sequence[str]] + ) -> Dict[str, Union[Optional[Sequence[str]], str]]: + """Returns kwargs to pass to grpc_helpers.create_channel depending on the google-api-core version""" + + self_signed_jwt_kwargs: Dict[str, Union[Optional[Sequence[str]], str]] = {} + + if _API_CORE_VERSION and ( + packaging.version.parse(_API_CORE_VERSION) + >= packaging.version.parse("1.26.0") + ): + self_signed_jwt_kwargs["default_scopes"] = cls.AUTH_SCOPES + self_signed_jwt_kwargs["scopes"] = scopes + self_signed_jwt_kwargs["default_host"] = cls.DEFAULT_HOST + else: + self_signed_jwt_kwargs["scopes"] = scopes or cls.AUTH_SCOPES + + return self_signed_jwt_kwargs + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { @@ -120,11 +180,11 @@ def _prep_wrapped_messages(self, client_info): @property def list_group_stats( self, - ) -> typing.Callable[ + ) -> Callable[ [error_stats_service.ListGroupStatsRequest], - typing.Union[ + Union[ error_stats_service.ListGroupStatsResponse, - typing.Awaitable[error_stats_service.ListGroupStatsResponse], + Awaitable[error_stats_service.ListGroupStatsResponse], ], ]: raise NotImplementedError() @@ -132,11 +192,11 @@ def list_group_stats( @property def list_events( self, - ) -> typing.Callable[ + ) -> Callable[ [error_stats_service.ListEventsRequest], - typing.Union[ + Union[ error_stats_service.ListEventsResponse, - typing.Awaitable[error_stats_service.ListEventsResponse], + Awaitable[error_stats_service.ListEventsResponse], ], ]: raise NotImplementedError() @@ -144,11 +204,11 @@ def list_events( @property def delete_events( self, - ) -> typing.Callable[ + ) -> Callable[ [error_stats_service.DeleteEventsRequest], - typing.Union[ + Union[ error_stats_service.DeleteEventsResponse, - typing.Awaitable[error_stats_service.DeleteEventsResponse], + Awaitable[error_stats_service.DeleteEventsResponse], ], ]: raise NotImplementedError() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 1e033169cf7e..166a3cc6fdc0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,20 +13,18 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import warnings -from typing import Callable, Dict, Optional, Sequence, Tuple +from typing import Callable, Dict, Optional, Sequence, Tuple, Union from google.api_core import grpc_helpers # type: ignore from google.api_core import gapic_v1 # type: ignore -from google import auth # type: ignore -from google.auth import credentials # type: ignore +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore import grpc # type: ignore from google.cloud.errorreporting_v1beta1.types import error_stats_service - from .base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO @@ -51,7 +48,7 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: str = None, scopes: Sequence[str] = None, channel: grpc.Channel = None, @@ -65,7 +62,8 @@ def __init__( """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -175,7 +173,7 @@ def __init__( def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: str = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -206,13 +204,15 @@ def create_channel( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ - scopes = scopes or cls.AUTH_SCOPES + + self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) + return grpc_helpers.create_channel( host, credentials=credentials, credentials_file=credentials_file, - scopes=scopes, quota_project_id=quota_project_id, + **self_signed_jwt_kwargs, **kwargs, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 402abb49daaf..acb625d48aa9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,21 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union from google.api_core import gapic_v1 # type: ignore from google.api_core import grpc_helpers_async # type: ignore -from google import auth # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore from google.cloud.errorreporting_v1beta1.types import error_stats_service - from .base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO from .grpc import ErrorStatsServiceGrpcTransport @@ -54,7 +51,7 @@ class ErrorStatsServiceGrpcAsyncIOTransport(ErrorStatsServiceTransport): def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -81,13 +78,15 @@ def create_channel( Returns: aio.Channel: A gRPC AsyncIO channel object. """ - scopes = scopes or cls.AUTH_SCOPES + + self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) + return grpc_helpers_async.create_channel( host, credentials=credentials, credentials_file=credentials_file, - scopes=scopes, quota_project_id=quota_project_id, + **self_signed_jwt_kwargs, **kwargs, ) @@ -95,7 +94,7 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, channel: aio.Channel = None, @@ -109,7 +108,8 @@ def __init__( """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -167,7 +167,6 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - else: if api_mtls_endpoint: host = api_mtls_endpoint diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py index 0a9dd71ee452..dc391175ea5e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from .client import ReportErrorsServiceClient from .async_client import ReportErrorsServiceAsyncClient diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 61f223b6b2b0..7528086cf8c0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict import functools import re @@ -22,14 +20,13 @@ import pkg_resources import google.api_core.client_options as ClientOptions # type: ignore -from google.api_core import exceptions # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service - from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport from .client import ReportErrorsServiceClient @@ -49,24 +46,20 @@ class ReportErrorsServiceAsyncClient: parse_common_billing_account_path = staticmethod( ReportErrorsServiceClient.parse_common_billing_account_path ) - common_folder_path = staticmethod(ReportErrorsServiceClient.common_folder_path) parse_common_folder_path = staticmethod( ReportErrorsServiceClient.parse_common_folder_path ) - common_organization_path = staticmethod( ReportErrorsServiceClient.common_organization_path ) parse_common_organization_path = staticmethod( ReportErrorsServiceClient.parse_common_organization_path ) - common_project_path = staticmethod(ReportErrorsServiceClient.common_project_path) parse_common_project_path = staticmethod( ReportErrorsServiceClient.parse_common_project_path ) - common_location_path = staticmethod(ReportErrorsServiceClient.common_location_path) parse_common_location_path = staticmethod( ReportErrorsServiceClient.parse_common_location_path @@ -74,7 +67,8 @@ class ReportErrorsServiceAsyncClient: @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials info. + """Creates an instance of this client using the provided credentials + info. Args: info (dict): The service account private key info. @@ -89,7 +83,7 @@ def from_service_account_info(cls, info: dict, *args, **kwargs): @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials - file. + file. Args: filename (str): The path to the service account private key json @@ -106,7 +100,7 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): @property def transport(self) -> ReportErrorsServiceTransport: - """Return the transport used by the client instance. + """Returns the transport used by the client instance. Returns: ReportErrorsServiceTransport: The transport used by the client instance. @@ -121,12 +115,12 @@ def transport(self) -> ReportErrorsServiceTransport: def __init__( self, *, - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, transport: Union[str, ReportErrorsServiceTransport] = "grpc_asyncio", client_options: ClientOptions = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiate the report errors service client. + """Instantiates the report errors service client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -158,7 +152,6 @@ def __init__( google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport creation failed for any reason. """ - self._client = ReportErrorsServiceClient( credentials=credentials, transport=transport, @@ -215,7 +208,6 @@ async def report_error_event( This corresponds to the ``event`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -243,7 +235,6 @@ async def report_error_event( # If we have keyword arguments corresponding to fields on the # request, apply these. - if project_name is not None: request.project_name = project_name if event is not None: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 840e449fd1fc..4ed19dd1d8b3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict from distutils import util import os @@ -23,17 +21,16 @@ import pkg_resources from google.api_core import client_options as client_options_lib # type: ignore -from google.api_core import exceptions # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service - from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc import ReportErrorsServiceGrpcTransport from .transports.grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport @@ -56,7 +53,7 @@ class ReportErrorsServiceClientMeta(type): def get_transport_class( cls, label: str = None, ) -> Type[ReportErrorsServiceTransport]: - """Return an appropriate transport class. + """Returns an appropriate transport class. Args: label: The name of the desired transport. If none is @@ -79,7 +76,8 @@ class ReportErrorsServiceClient(metaclass=ReportErrorsServiceClientMeta): @staticmethod def _get_default_mtls_endpoint(api_endpoint): - """Convert api endpoint to mTLS endpoint. + """Converts api endpoint to mTLS endpoint. + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. Args: @@ -113,7 +111,8 @@ def _get_default_mtls_endpoint(api_endpoint): @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials info. + """Creates an instance of this client using the provided credentials + info. Args: info (dict): The service account private key info. @@ -130,7 +129,7 @@ def from_service_account_info(cls, info: dict, *args, **kwargs): @classmethod def from_service_account_file(cls, filename: str, *args, **kwargs): """Creates an instance of this client using the provided credentials - file. + file. Args: filename (str): The path to the service account private key json @@ -149,16 +148,17 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): @property def transport(self) -> ReportErrorsServiceTransport: - """Return the transport used by the client instance. + """Returns the transport used by the client instance. Returns: - ReportErrorsServiceTransport: The transport used by the client instance. + ReportErrorsServiceTransport: The transport used by the client + instance. """ return self._transport @staticmethod def common_billing_account_path(billing_account: str,) -> str: - """Return a fully-qualified billing_account string.""" + """Returns a fully-qualified billing_account string.""" return "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -171,7 +171,7 @@ def parse_common_billing_account_path(path: str) -> Dict[str, str]: @staticmethod def common_folder_path(folder: str,) -> str: - """Return a fully-qualified folder string.""" + """Returns a fully-qualified folder string.""" return "folders/{folder}".format(folder=folder,) @staticmethod @@ -182,7 +182,7 @@ def parse_common_folder_path(path: str) -> Dict[str, str]: @staticmethod def common_organization_path(organization: str,) -> str: - """Return a fully-qualified organization string.""" + """Returns a fully-qualified organization string.""" return "organizations/{organization}".format(organization=organization,) @staticmethod @@ -193,7 +193,7 @@ def parse_common_organization_path(path: str) -> Dict[str, str]: @staticmethod def common_project_path(project: str,) -> str: - """Return a fully-qualified project string.""" + """Returns a fully-qualified project string.""" return "projects/{project}".format(project=project,) @staticmethod @@ -204,7 +204,7 @@ def parse_common_project_path(path: str) -> Dict[str, str]: @staticmethod def common_location_path(project: str, location: str,) -> str: - """Return a fully-qualified location string.""" + """Returns a fully-qualified location string.""" return "projects/{project}/locations/{location}".format( project=project, location=location, ) @@ -218,12 +218,12 @@ def parse_common_location_path(path: str) -> Dict[str, str]: def __init__( self, *, - credentials: Optional[credentials.Credentials] = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, ReportErrorsServiceTransport, None] = None, client_options: Optional[client_options_lib.ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiate the report errors service client. + """Instantiates the report errors service client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -278,9 +278,10 @@ def __init__( client_cert_source_func = client_options.client_cert_source else: is_mtls = mtls.has_default_client_cert_source() - client_cert_source_func = ( - mtls.default_client_cert_source() if is_mtls else None - ) + if is_mtls: + client_cert_source_func = mtls.default_client_cert_source() + else: + client_cert_source_func = None # Figure out which api endpoint to use. if client_options.api_endpoint is not None: @@ -292,12 +293,14 @@ def __init__( elif use_mtls_env == "always": api_endpoint = self.DEFAULT_MTLS_ENDPOINT elif use_mtls_env == "auto": - api_endpoint = ( - self.DEFAULT_MTLS_ENDPOINT if is_mtls else self.DEFAULT_ENDPOINT - ) + if is_mtls: + api_endpoint = self.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = self.DEFAULT_ENDPOINT else: raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted values: never, auto, always" + "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted " + "values: never, auto, always" ) # Save or instantiate the transport. @@ -312,8 +315,8 @@ def __init__( ) if client_options.scopes: raise ValueError( - "When providing a transport instance, " - "provide its scopes directly." + "When providing a transport instance, provide its scopes " + "directly." ) self._transport = transport else: @@ -377,7 +380,6 @@ def report_error_event( This corresponds to the ``event`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -407,10 +409,8 @@ def report_error_event( # there are no flattened fields. if not isinstance(request, report_errors_service.ReportErrorEventRequest): request = report_errors_service.ReportErrorEventRequest(request) - # If we have keyword arguments corresponding to fields on the # request, apply these. - if project_name is not None: request.project_name = project_name if event is not None: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py index 194962a3871c..9c967744b89c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from collections import OrderedDict from typing import Dict, Type diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 4adbb0d1123b..efda0c8b6def 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,20 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import abc -import typing +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union +import packaging.version import pkg_resources -from google import auth # type: ignore -from google.api_core import exceptions # type: ignore +import google.auth # type: ignore +import google.api_core # type: ignore +from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service - try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( @@ -37,27 +36,41 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +try: + # google.auth.__version__ was added in 1.26.0 + _GOOGLE_AUTH_VERSION = google.auth.__version__ +except AttributeError: + try: # try pkg_resources if it is available + _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version + except pkg_resources.DistributionNotFound: # pragma: NO COVER + _GOOGLE_AUTH_VERSION = None + +_API_CORE_VERSION = google.api_core.__version__ + class ReportErrorsServiceTransport(abc.ABC): """Abstract transport class for ReportErrorsService.""" AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + DEFAULT_HOST: str = "clouderrorreporting.googleapis.com" + def __init__( self, *, - host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, - credentials_file: typing.Optional[str] = None, - scopes: typing.Optional[typing.Sequence[str]] = AUTH_SCOPES, - quota_project_id: typing.Optional[str] = None, + host: str = DEFAULT_HOST, + credentials: ga_credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, **kwargs, ) -> None: """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -66,7 +79,7 @@ def __init__( credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is mutually exclusive with credentials. - scope (Optional[Sequence[str]]): A list of scopes. + scopes (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -80,29 +93,76 @@ def __init__( host += ":443" self._host = host + scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + # Save the scopes. self._scopes = scopes or self.AUTH_SCOPES # If no credentials are provided, then determine the appropriate # defaults. if credentials and credentials_file: - raise exceptions.DuplicateCredentialArgs( + raise core_exceptions.DuplicateCredentialArgs( "'credentials_file' and 'credentials' are mutually exclusive" ) if credentials_file is not None: - credentials, _ = auth.load_credentials_from_file( - credentials_file, scopes=self._scopes, quota_project_id=quota_project_id + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) elif credentials is None: - credentials, _ = auth.default( - scopes=self._scopes, quota_project_id=quota_project_id + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id ) # Save the credentials. self._credentials = credentials + # TODO(busunkim): These two class methods are in the base transport + # to avoid duplicating code across the transport classes. These functions + # should be deleted once the minimum required versions of google-api-core + # and google-auth are increased. + + # TODO: Remove this function once google-auth >= 1.25.0 is required + @classmethod + def _get_scopes_kwargs( + cls, host: str, scopes: Optional[Sequence[str]] + ) -> Dict[str, Optional[Sequence[str]]]: + """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" + + scopes_kwargs = {} + + if _GOOGLE_AUTH_VERSION and ( + packaging.version.parse(_GOOGLE_AUTH_VERSION) + >= packaging.version.parse("1.25.0") + ): + scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} + else: + scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} + + return scopes_kwargs + + # TODO: Remove this function once google-api-core >= 1.26.0 is required + @classmethod + def _get_self_signed_jwt_kwargs( + cls, host: str, scopes: Optional[Sequence[str]] + ) -> Dict[str, Union[Optional[Sequence[str]], str]]: + """Returns kwargs to pass to grpc_helpers.create_channel depending on the google-api-core version""" + + self_signed_jwt_kwargs: Dict[str, Union[Optional[Sequence[str]], str]] = {} + + if _API_CORE_VERSION and ( + packaging.version.parse(_API_CORE_VERSION) + >= packaging.version.parse("1.26.0") + ): + self_signed_jwt_kwargs["default_scopes"] = cls.AUTH_SCOPES + self_signed_jwt_kwargs["scopes"] = scopes + self_signed_jwt_kwargs["default_host"] = cls.DEFAULT_HOST + else: + self_signed_jwt_kwargs["scopes"] = scopes or cls.AUTH_SCOPES + + return self_signed_jwt_kwargs + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { @@ -114,11 +174,11 @@ def _prep_wrapped_messages(self, client_info): @property def report_error_event( self, - ) -> typing.Callable[ + ) -> Callable[ [report_errors_service.ReportErrorEventRequest], - typing.Union[ + Union[ report_errors_service.ReportErrorEventResponse, - typing.Awaitable[report_errors_service.ReportErrorEventResponse], + Awaitable[report_errors_service.ReportErrorEventResponse], ], ]: raise NotImplementedError() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 8ae306d9f94b..93a43e9839bd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,20 +13,18 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import warnings -from typing import Callable, Dict, Optional, Sequence, Tuple +from typing import Callable, Dict, Optional, Sequence, Tuple, Union from google.api_core import grpc_helpers # type: ignore from google.api_core import gapic_v1 # type: ignore -from google import auth # type: ignore -from google.auth import credentials # type: ignore +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore import grpc # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service - from .base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO @@ -50,7 +47,7 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: str = None, scopes: Sequence[str] = None, channel: grpc.Channel = None, @@ -64,7 +61,8 @@ def __init__( """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -174,7 +172,7 @@ def __init__( def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: str = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -205,13 +203,15 @@ def create_channel( google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` and ``credentials_file`` are passed. """ - scopes = scopes or cls.AUTH_SCOPES + + self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) + return grpc_helpers.create_channel( host, credentials=credentials, credentials_file=credentials_file, - scopes=scopes, quota_project_id=quota_project_id, + **self_signed_jwt_kwargs, **kwargs, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 115e24461bbd..3ad1e8688ff3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,21 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union from google.api_core import gapic_v1 # type: ignore from google.api_core import grpc_helpers_async # type: ignore -from google import auth # type: ignore -from google.auth import credentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service - from .base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO from .grpc import ReportErrorsServiceGrpcTransport @@ -53,7 +50,7 @@ class ReportErrorsServiceGrpcAsyncIOTransport(ReportErrorsServiceTransport): def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -80,13 +77,15 @@ def create_channel( Returns: aio.Channel: A gRPC AsyncIO channel object. """ - scopes = scopes or cls.AUTH_SCOPES + + self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) + return grpc_helpers_async.create_channel( host, credentials=credentials, credentials_file=credentials_file, - scopes=scopes, quota_project_id=quota_project_id, + **self_signed_jwt_kwargs, **kwargs, ) @@ -94,7 +93,7 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: credentials.Credentials = None, + credentials: ga_credentials.Credentials = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, channel: aio.Channel = None, @@ -108,7 +107,8 @@ def __init__( """Instantiate the transport. Args: - host (Optional[str]): The hostname to connect to. + host (Optional[str]): + The hostname to connect to. credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -166,7 +166,6 @@ def __init__( # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None - else: if api_mtls_endpoint: host = api_mtls_endpoint diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py index 9cf5a2559703..cca266b672b5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from .common import ( ErrorContext, ErrorEvent, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index e0d1a7ebafda..5facb35220c3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,11 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import proto # type: ignore - -from google.protobuf import timestamp_pb2 as timestamp # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore __protobuf__ = proto.module( @@ -47,7 +44,6 @@ class ResolutionStatus(proto.Enum): class ErrorGroup(proto.Message): r"""Description of a group of similar error events. - Attributes: name (str): The group resource name. @@ -66,14 +62,11 @@ class ErrorGroup(proto.Message): interpreted as OPEN """ - name = proto.Field(proto.STRING, number=1) - - group_id = proto.Field(proto.STRING, number=2) - + name = proto.Field(proto.STRING, number=1,) + group_id = proto.Field(proto.STRING, number=2,) tracking_issues = proto.RepeatedField( proto.MESSAGE, number=3, message="TrackingIssue", ) - resolution_status = proto.Field(proto.ENUM, number=5, enum="ResolutionStatus",) @@ -88,7 +81,7 @@ class TrackingIssue(proto.Message): ``https://github.com/user/project/issues/4`` """ - url = proto.Field(proto.STRING, number=1) + url = proto.Field(proto.STRING, number=1,) class ErrorEvent(proto.Message): @@ -111,12 +104,9 @@ class ErrorEvent(proto.Message): occurred. """ - event_time = proto.Field(proto.MESSAGE, number=1, message=timestamp.Timestamp,) - + event_time = proto.Field(proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp,) service_context = proto.Field(proto.MESSAGE, number=2, message="ServiceContext",) - - message = proto.Field(proto.STRING, number=3) - + message = proto.Field(proto.STRING, number=3,) context = proto.Field(proto.MESSAGE, number=5, message="ErrorContext",) @@ -150,11 +140,9 @@ class ServiceContext(proto.Message): and must not be set when reporting errors. """ - service = proto.Field(proto.STRING, number=2) - - version = proto.Field(proto.STRING, number=3) - - resource_type = proto.Field(proto.STRING, number=4) + service = proto.Field(proto.STRING, number=2,) + version = proto.Field(proto.STRING, number=3,) + resource_type = proto.Field(proto.STRING, number=4,) class ErrorContext(proto.Message): @@ -186,9 +174,7 @@ class ErrorContext(proto.Message): """ http_request = proto.Field(proto.MESSAGE, number=1, message="HttpRequestContext",) - - user = proto.Field(proto.STRING, number=2) - + user = proto.Field(proto.STRING, number=2,) report_location = proto.Field(proto.MESSAGE, number=3, message="SourceLocation",) @@ -221,17 +207,12 @@ class HttpRequestContext(proto.Message): report. """ - method = proto.Field(proto.STRING, number=1) - - url = proto.Field(proto.STRING, number=2) - - user_agent = proto.Field(proto.STRING, number=3) - - referrer = proto.Field(proto.STRING, number=4) - - response_status_code = proto.Field(proto.INT32, number=5) - - remote_ip = proto.Field(proto.STRING, number=6) + method = proto.Field(proto.STRING, number=1,) + url = proto.Field(proto.STRING, number=2,) + user_agent = proto.Field(proto.STRING, number=3,) + referrer = proto.Field(proto.STRING, number=4,) + response_status_code = proto.Field(proto.INT32, number=5,) + remote_ip = proto.Field(proto.STRING, number=6,) class SourceLocation(proto.Message): @@ -255,11 +236,9 @@ class SourceLocation(proto.Message): example, ``my.package.MyClass.method`` in case of Java. """ - file_path = proto.Field(proto.STRING, number=1) - - line_number = proto.Field(proto.INT32, number=2) - - function_name = proto.Field(proto.STRING, number=4) + file_path = proto.Field(proto.STRING, number=1,) + line_number = proto.Field(proto.INT32, number=2,) + function_name = proto.Field(proto.STRING, number=4,) __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index e36854b6a532..4865d99c64b8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,10 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import proto # type: ignore - from google.cloud.errorreporting_v1beta1.types import common @@ -29,7 +26,6 @@ class GetGroupRequest(proto.Message): r"""A request to return an individual group. - Attributes: group_name (str): Required. The group resource name. Written as @@ -40,12 +36,11 @@ class GetGroupRequest(proto.Message): Example: ``projects/my-project-123/groups/my-group`` """ - group_name = proto.Field(proto.STRING, number=1) + group_name = proto.Field(proto.STRING, number=1,) class UpdateGroupRequest(proto.Message): r"""A request to replace the existing data for the given group. - Attributes: group (google.cloud.errorreporting_v1beta1.types.ErrorGroup): Required. The group which replaces the diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index 3973ca04281f..08b5aba9d5f0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,13 +13,11 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import proto # type: ignore - from google.cloud.errorreporting_v1beta1.types import common -from google.protobuf import duration_pb2 as duration # type: ignore -from google.protobuf import timestamp_pb2 as timestamp # type: ignore +from google.protobuf import duration_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore __protobuf__ = proto.module( @@ -62,7 +59,6 @@ class ErrorGroupOrder(proto.Enum): class ListGroupStatsRequest(proto.Message): r"""Specifies a set of ``ErrorGroupStats`` to return. - Attributes: project_name (str): Required. The resource name of the Google Cloud Platform @@ -111,34 +107,26 @@ class ListGroupStatsRequest(proto.Message): with the identical query parameters as the first request. """ - project_name = proto.Field(proto.STRING, number=1) - - group_id = proto.RepeatedField(proto.STRING, number=2) - + project_name = proto.Field(proto.STRING, number=1,) + group_id = proto.RepeatedField(proto.STRING, number=2,) service_filter = proto.Field( proto.MESSAGE, number=3, message="ServiceContextFilter", ) - time_range = proto.Field(proto.MESSAGE, number=5, message="QueryTimeRange",) - timed_count_duration = proto.Field( - proto.MESSAGE, number=6, message=duration.Duration, + proto.MESSAGE, number=6, message=duration_pb2.Duration, ) - alignment = proto.Field(proto.ENUM, number=7, enum="TimedCountAlignment",) - - alignment_time = proto.Field(proto.MESSAGE, number=8, message=timestamp.Timestamp,) - + alignment_time = proto.Field( + proto.MESSAGE, number=8, message=timestamp_pb2.Timestamp, + ) order = proto.Field(proto.ENUM, number=9, enum="ErrorGroupOrder",) - - page_size = proto.Field(proto.INT32, number=11) - - page_token = proto.Field(proto.STRING, number=12) + page_size = proto.Field(proto.INT32, number=11,) + page_token = proto.Field(proto.STRING, number=12,) class ListGroupStatsResponse(proto.Message): r"""Contains a set of requested error group stats. - Attributes: error_group_stats (Sequence[google.cloud.errorreporting_v1beta1.types.ErrorGroupStats]): The error group stats which match the given @@ -164,11 +152,9 @@ def raw_page(self): error_group_stats = proto.RepeatedField( proto.MESSAGE, number=1, message="ErrorGroupStats", ) - - next_page_token = proto.Field(proto.STRING, number=2) - + next_page_token = proto.Field(proto.STRING, number=2,) time_range_begin = proto.Field( - proto.MESSAGE, number=4, message=timestamp.Timestamp, + proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) @@ -230,23 +216,19 @@ class ErrorGroupStats(proto.Message): """ group = proto.Field(proto.MESSAGE, number=1, message=common.ErrorGroup,) - - count = proto.Field(proto.INT64, number=2) - - affected_users_count = proto.Field(proto.INT64, number=3) - + count = proto.Field(proto.INT64, number=2,) + affected_users_count = proto.Field(proto.INT64, number=3,) timed_counts = proto.RepeatedField(proto.MESSAGE, number=4, message="TimedCount",) - - first_seen_time = proto.Field(proto.MESSAGE, number=5, message=timestamp.Timestamp,) - - last_seen_time = proto.Field(proto.MESSAGE, number=6, message=timestamp.Timestamp,) - + first_seen_time = proto.Field( + proto.MESSAGE, number=5, message=timestamp_pb2.Timestamp, + ) + last_seen_time = proto.Field( + proto.MESSAGE, number=6, message=timestamp_pb2.Timestamp, + ) affected_services = proto.RepeatedField( proto.MESSAGE, number=7, message=common.ServiceContext, ) - - num_affected_services = proto.Field(proto.INT32, number=8) - + num_affected_services = proto.Field(proto.INT32, number=8,) representative = proto.Field(proto.MESSAGE, number=9, message=common.ErrorEvent,) @@ -266,16 +248,13 @@ class TimedCount(proto.Message): End of the time period to which ``count`` refers (excluded). """ - count = proto.Field(proto.INT64, number=1) - - start_time = proto.Field(proto.MESSAGE, number=2, message=timestamp.Timestamp,) - - end_time = proto.Field(proto.MESSAGE, number=3, message=timestamp.Timestamp,) + count = proto.Field(proto.INT64, number=1,) + start_time = proto.Field(proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp,) + end_time = proto.Field(proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp,) class ListEventsRequest(proto.Message): r"""Specifies a set of error events to return. - Attributes: project_name (str): Required. The resource name of the Google Cloud Platform @@ -305,24 +284,18 @@ class ListEventsRequest(proto.Message): response. """ - project_name = proto.Field(proto.STRING, number=1) - - group_id = proto.Field(proto.STRING, number=2) - + project_name = proto.Field(proto.STRING, number=1,) + group_id = proto.Field(proto.STRING, number=2,) service_filter = proto.Field( proto.MESSAGE, number=3, message="ServiceContextFilter", ) - time_range = proto.Field(proto.MESSAGE, number=4, message="QueryTimeRange",) - - page_size = proto.Field(proto.INT32, number=6) - - page_token = proto.Field(proto.STRING, number=7) + page_size = proto.Field(proto.INT32, number=6,) + page_token = proto.Field(proto.STRING, number=7,) class ListEventsResponse(proto.Message): r"""Contains a set of requested error events. - Attributes: error_events (Sequence[google.cloud.errorreporting_v1beta1.types.ErrorEvent]): The error events which match the given @@ -344,11 +317,9 @@ def raw_page(self): error_events = proto.RepeatedField( proto.MESSAGE, number=1, message=common.ErrorEvent, ) - - next_page_token = proto.Field(proto.STRING, number=2) - + next_page_token = proto.Field(proto.STRING, number=2,) time_range_begin = proto.Field( - proto.MESSAGE, number=4, message=timestamp.Timestamp, + proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) @@ -392,16 +363,13 @@ class ServiceContextFilter(proto.Message): ```ServiceContext.resource_type`` `__. """ - service = proto.Field(proto.STRING, number=2) - - version = proto.Field(proto.STRING, number=3) - - resource_type = proto.Field(proto.STRING, number=4) + service = proto.Field(proto.STRING, number=2,) + version = proto.Field(proto.STRING, number=3,) + resource_type = proto.Field(proto.STRING, number=4,) class DeleteEventsRequest(proto.Message): r"""Deletes all events in the project. - Attributes: project_name (str): Required. The resource name of the Google Cloud Platform @@ -412,11 +380,11 @@ class DeleteEventsRequest(proto.Message): Example: ``projects/my-project-123``. """ - project_name = proto.Field(proto.STRING, number=1) + project_name = proto.Field(proto.STRING, number=1,) class DeleteEventsResponse(proto.Message): - r"""Response message for deleting error events.""" + r"""Response message for deleting error events. """ __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index bdba6ee83aa7..82840f60c00c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,12 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import proto # type: ignore - from google.cloud.errorreporting_v1beta1.types import common -from google.protobuf import timestamp_pb2 as timestamp # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore __protobuf__ = proto.module( @@ -34,7 +31,6 @@ class ReportErrorEventRequest(proto.Message): r"""A request for reporting an individual error event. - Attributes: project_name (str): Required. The resource name of the Google Cloud Platform @@ -47,15 +43,14 @@ class ReportErrorEventRequest(proto.Message): Required. The error event to be reported. """ - project_name = proto.Field(proto.STRING, number=1) - + project_name = proto.Field(proto.STRING, number=1,) event = proto.Field(proto.MESSAGE, number=2, message="ReportedErrorEvent",) class ReportErrorEventResponse(proto.Message): r"""Response for reporting an individual error event. Data may be added to this message in the future. - """ + """ class ReportedErrorEvent(proto.Message): @@ -102,14 +97,11 @@ class ReportedErrorEvent(proto.Message): which the error occurred. """ - event_time = proto.Field(proto.MESSAGE, number=1, message=timestamp.Timestamp,) - + event_time = proto.Field(proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp,) service_context = proto.Field( proto.MESSAGE, number=2, message=common.ServiceContext, ) - - message = proto.Field(proto.STRING, number=3) - + message = proto.Field(proto.STRING, number=3,) context = proto.Field(proto.MESSAGE, number=4, message=common.ErrorContext,) diff --git a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py index df916be1b66b..7d1e7d7d5424 100644 --- a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py +++ b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py @@ -1,6 +1,5 @@ #! /usr/bin/env python3 # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,7 +14,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import argparse import os import libcst as cst @@ -41,13 +39,12 @@ def partition( class errorreportingCallTransformer(cst.CSTTransformer): CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'delete_events': ('project_name', ), - 'get_group': ('group_name', ), - 'list_events': ('project_name', 'group_id', 'service_filter', 'time_range', 'page_size', 'page_token', ), - 'list_group_stats': ('project_name', 'group_id', 'service_filter', 'time_range', 'timed_count_duration', 'alignment', 'alignment_time', 'order', 'page_size', 'page_token', ), - 'report_error_event': ('project_name', 'event', ), - 'update_group': ('group', ), - + 'delete_events': ('project_name', ), + 'get_group': ('group_name', ), + 'list_events': ('project_name', 'group_id', 'service_filter', 'time_range', 'page_size', 'page_token', ), + 'list_group_stats': ('project_name', 'group_id', 'service_filter', 'time_range', 'timed_count_duration', 'alignment', 'alignment_time', 'order', 'page_size', 'page_token', ), + 'report_error_event': ('project_name', 'event', ), + 'update_group': ('group', ), } def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: @@ -78,7 +75,7 @@ def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: value=cst.Dict([ cst.DictElement( cst.SimpleString("'{}'".format(name)), - cst.Element(value=arg.value) +cst.Element(value=arg.value) ) # Note: the args + kwargs looks silly, but keep in mind that # the control parameters had to be stripped out, and that diff --git a/packages/google-cloud-error-reporting/tests/__init__.py b/packages/google-cloud-error-reporting/tests/__init__.py index e69de29bb2d1..4de65971c238 100644 --- a/packages/google-cloud-error-reporting/tests/__init__.py +++ b/packages/google-cloud-error-reporting/tests/__init__.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# diff --git a/packages/google-cloud-error-reporting/tests/unit/__init__.py b/packages/google-cloud-error-reporting/tests/unit/__init__.py index df379f1e9d88..4de65971c238 100644 --- a/packages/google-cloud-error-reporting/tests/unit/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/__init__.py @@ -1,4 +1,5 @@ -# Copyright 2016 Google LLC +# -*- coding: utf-8 -*- +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,3 +12,4 @@ # 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. +# diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py new file mode 100644 index 000000000000..4de65971c238 --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py index 42ffdf2bc43d..4de65971c238 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 814cefe8749c..dc478547abe1 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,9 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import os import mock +import packaging.version import grpc from grpc.experimental import aio @@ -24,13 +23,13 @@ import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule -from google import auth + from google.api_core import client_options -from google.api_core import exceptions +from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async -from google.auth import credentials +from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.error_group_service import ( ErrorGroupServiceAsyncClient, @@ -39,9 +38,39 @@ ErrorGroupServiceClient, ) from google.cloud.errorreporting_v1beta1.services.error_group_service import transports +from google.cloud.errorreporting_v1beta1.services.error_group_service.transports.base import ( + _API_CORE_VERSION, +) +from google.cloud.errorreporting_v1beta1.services.error_group_service.transports.base import ( + _GOOGLE_AUTH_VERSION, +) from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service from google.oauth2 import service_account +import google.auth + + +# TODO(busunkim): Once google-api-core >= 1.26.0 is required: +# - Delete all the api-core and auth "less than" test cases +# - Delete these pytest markers (Make the "greater than or equal to" tests the default). +requires_google_auth_lt_1_25_0 = pytest.mark.skipif( + packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), + reason="This test requires google-auth < 1.25.0", +) +requires_google_auth_gte_1_25_0 = pytest.mark.skipif( + packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), + reason="This test requires google-auth >= 1.25.0", +) + +requires_api_core_lt_1_26_0 = pytest.mark.skipif( + packaging.version.parse(_API_CORE_VERSION) >= packaging.version.parse("1.26.0"), + reason="This test requires google-api-core < 1.26.0", +) + +requires_api_core_gte_1_26_0 = pytest.mark.skipif( + packaging.version.parse(_API_CORE_VERSION) < packaging.version.parse("1.26.0"), + reason="This test requires google-api-core >= 1.26.0", +) def client_cert_source_callback(): @@ -93,7 +122,7 @@ def test__get_default_mtls_endpoint(): "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] ) def test_error_group_service_client_from_service_account_info(client_class): - creds = credentials.AnonymousCredentials() + creds = ga_credentials.AnonymousCredentials() with mock.patch.object( service_account.Credentials, "from_service_account_info" ) as factory: @@ -110,7 +139,7 @@ def test_error_group_service_client_from_service_account_info(client_class): "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] ) def test_error_group_service_client_from_service_account_file(client_class): - creds = credentials.AnonymousCredentials() + creds = ga_credentials.AnonymousCredentials() with mock.patch.object( service_account.Credentials, "from_service_account_file" ) as factory: @@ -163,7 +192,7 @@ def test_error_group_service_client_client_options( ): # Check that if channel is provided we won't create a new one. with mock.patch.object(ErrorGroupServiceClient, "get_transport_class") as gtc: - transport = transport_class(credentials=credentials.AnonymousCredentials()) + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) client = client_class(transport=transport) gtc.assert_not_called() @@ -461,7 +490,7 @@ def test_get_group( transport: str = "grpc", request_type=error_group_service.GetGroupRequest ): client = ErrorGroupServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -476,23 +505,17 @@ def test_get_group( group_id="group_id_value", resolution_status=common.ResolutionStatus.OPEN, ) - response = client.get_group(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.GetGroupRequest() # Establish that the response is the type that we expect. - assert isinstance(response, common.ErrorGroup) - assert response.name == "name_value" - assert response.group_id == "group_id_value" - assert response.resolution_status == common.ResolutionStatus.OPEN @@ -504,7 +527,7 @@ def test_get_group_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorGroupServiceClient( - credentials=credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -512,7 +535,6 @@ def test_get_group_empty_call(): client.get_group() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.GetGroupRequest() @@ -521,7 +543,7 @@ async def test_get_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.GetGroupRequest ): client = ErrorGroupServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -538,22 +560,17 @@ async def test_get_group_async( resolution_status=common.ResolutionStatus.OPEN, ) ) - response = await client.get_group(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.GetGroupRequest() # Establish that the response is the type that we expect. assert isinstance(response, common.ErrorGroup) - assert response.name == "name_value" - assert response.group_id == "group_id_value" - assert response.resolution_status == common.ResolutionStatus.OPEN @@ -563,17 +580,17 @@ async def test_get_group_async_from_dict(): def test_get_group_field_headers(): - client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_group_service.GetGroupRequest() + request.group_name = "group_name/value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.get_group), "__call__") as call: call.return_value = common.ErrorGroup() - client.get_group(request) # Establish that the underlying gRPC stub method was called. @@ -589,18 +606,18 @@ def test_get_group_field_headers(): @pytest.mark.asyncio async def test_get_group_field_headers_async(): client = ErrorGroupServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_group_service.GetGroupRequest() + request.group_name = "group_name/value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.get_group), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) - await client.get_group(request) # Establish that the underlying gRPC stub method was called. @@ -614,13 +631,12 @@ async def test_get_group_field_headers_async(): def test_get_group_flattened(): - client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.get_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup() - # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. client.get_group(group_name="group_name_value",) @@ -629,12 +645,11 @@ def test_get_group_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].group_name == "group_name_value" def test_get_group_flattened_error(): - client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -647,7 +662,7 @@ def test_get_group_flattened_error(): @pytest.mark.asyncio async def test_get_group_flattened_async(): client = ErrorGroupServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -664,14 +679,13 @@ async def test_get_group_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].group_name == "group_name_value" @pytest.mark.asyncio async def test_get_group_flattened_error_async(): client = ErrorGroupServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Attempting to call a method with both a request object and flattened @@ -686,7 +700,7 @@ def test_update_group( transport: str = "grpc", request_type=error_group_service.UpdateGroupRequest ): client = ErrorGroupServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -701,23 +715,17 @@ def test_update_group( group_id="group_id_value", resolution_status=common.ResolutionStatus.OPEN, ) - response = client.update_group(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.UpdateGroupRequest() # Establish that the response is the type that we expect. - assert isinstance(response, common.ErrorGroup) - assert response.name == "name_value" - assert response.group_id == "group_id_value" - assert response.resolution_status == common.ResolutionStatus.OPEN @@ -729,7 +737,7 @@ def test_update_group_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorGroupServiceClient( - credentials=credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -737,7 +745,6 @@ def test_update_group_empty_call(): client.update_group() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.UpdateGroupRequest() @@ -746,7 +753,7 @@ async def test_update_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.UpdateGroupRequest ): client = ErrorGroupServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -763,22 +770,17 @@ async def test_update_group_async( resolution_status=common.ResolutionStatus.OPEN, ) ) - response = await client.update_group(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.UpdateGroupRequest() # Establish that the response is the type that we expect. assert isinstance(response, common.ErrorGroup) - assert response.name == "name_value" - assert response.group_id == "group_id_value" - assert response.resolution_status == common.ResolutionStatus.OPEN @@ -788,17 +790,17 @@ async def test_update_group_async_from_dict(): def test_update_group_field_headers(): - client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_group_service.UpdateGroupRequest() + request.group.name = "group.name/value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.update_group), "__call__") as call: call.return_value = common.ErrorGroup() - client.update_group(request) # Establish that the underlying gRPC stub method was called. @@ -814,18 +816,18 @@ def test_update_group_field_headers(): @pytest.mark.asyncio async def test_update_group_field_headers_async(): client = ErrorGroupServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_group_service.UpdateGroupRequest() + request.group.name = "group.name/value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.update_group), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) - await client.update_group(request) # Establish that the underlying gRPC stub method was called. @@ -839,13 +841,12 @@ async def test_update_group_field_headers_async(): def test_update_group_flattened(): - client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.update_group), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = common.ErrorGroup() - # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. client.update_group(group=common.ErrorGroup(name="name_value"),) @@ -854,12 +855,11 @@ def test_update_group_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].group == common.ErrorGroup(name="name_value") def test_update_group_flattened_error(): - client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -873,7 +873,7 @@ def test_update_group_flattened_error(): @pytest.mark.asyncio async def test_update_group_flattened_async(): client = ErrorGroupServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -892,14 +892,13 @@ async def test_update_group_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].group == common.ErrorGroup(name="name_value") @pytest.mark.asyncio async def test_update_group_flattened_error_async(): client = ErrorGroupServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Attempting to call a method with both a request object and flattened @@ -914,16 +913,16 @@ async def test_update_group_flattened_error_async(): def test_credentials_transport_error(): # It is an error to provide credentials and a transport instance. transport = transports.ErrorGroupServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ErrorGroupServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # It is an error to provide a credentials file and a transport instance. transport = transports.ErrorGroupServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ErrorGroupServiceClient( @@ -933,7 +932,7 @@ def test_credentials_transport_error(): # It is an error to provide scopes and a transport instance. transport = transports.ErrorGroupServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ErrorGroupServiceClient( @@ -944,7 +943,7 @@ def test_credentials_transport_error(): def test_transport_instance(): # A client may be instantiated with a custom transport instance. transport = transports.ErrorGroupServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) client = ErrorGroupServiceClient(transport=transport) assert client.transport is transport @@ -953,13 +952,13 @@ def test_transport_instance(): def test_transport_get_channel(): # A client may be instantiated with a custom transport instance. transport = transports.ErrorGroupServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) channel = transport.grpc_channel assert channel transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) channel = transport.grpc_channel assert channel @@ -974,23 +973,23 @@ def test_transport_get_channel(): ) def test_transport_adc(transport_class): # Test default credentials are used if not provided. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) transport_class() adc.assert_called_once() def test_transport_grpc_default(): # A client should use the gRPC transport by default. - client = ErrorGroupServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) assert isinstance(client.transport, transports.ErrorGroupServiceGrpcTransport,) def test_error_group_service_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(exceptions.DuplicateCredentialArgs): + with pytest.raises(core_exceptions.DuplicateCredentialArgs): transport = transports.ErrorGroupServiceTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), credentials_file="credentials.json", ) @@ -1002,7 +1001,7 @@ def test_error_group_service_base_transport(): ) as Transport: Transport.return_value = None transport = transports.ErrorGroupServiceTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Every method on the transport should just blindly @@ -1016,15 +1015,37 @@ def test_error_group_service_base_transport(): getattr(transport, method)(request=object()) +@requires_google_auth_gte_1_25_0 def test_error_group_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( - auth, "load_credentials_from_file" + google.auth, "load_credentials_from_file", autospec=True ) as load_creds, mock.patch( "google.cloud.errorreporting_v1beta1.services.error_group_service.transports.ErrorGroupServiceTransport._prep_wrapped_messages" ) as Transport: Transport.return_value = None - load_creds.return_value = (credentials.AnonymousCredentials(), None) + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.ErrorGroupServiceTransport( + credentials_file="credentials.json", quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@requires_google_auth_lt_1_25_0 +def test_error_group_service_base_transport_with_credentials_file_old_google_auth(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_group_service.transports.ErrorGroupServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ErrorGroupServiceTransport( credentials_file="credentials.json", quota_project_id="octopus", ) @@ -1037,19 +1058,33 @@ def test_error_group_service_base_transport_with_credentials_file(): def test_error_group_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(auth, "default") as adc, mock.patch( + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( "google.cloud.errorreporting_v1beta1.services.error_group_service.transports.ErrorGroupServiceTransport._prep_wrapped_messages" ) as Transport: Transport.return_value = None - adc.return_value = (credentials.AnonymousCredentials(), None) + adc.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ErrorGroupServiceTransport() adc.assert_called_once() +@requires_google_auth_gte_1_25_0 def test_error_group_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + ErrorGroupServiceClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@requires_google_auth_lt_1_25_0 +def test_error_group_service_auth_adc_old_google_auth(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) ErrorGroupServiceClient() adc.assert_called_once_with( scopes=("https://www.googleapis.com/auth/cloud-platform",), @@ -1057,20 +1092,156 @@ def test_error_group_service_auth_adc(): ) -def test_error_group_service_transport_auth_adc(): +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + ], +) +@requires_google_auth_gte_1_25_0 +def test_error_group_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) - transports.ErrorGroupServiceGrpcTransport( - host="squid.clam.whelk", quota_project_id="octopus" + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + ], +) +@requires_google_auth_lt_1_25_0 +def test_error_group_service_transport_auth_adc_old_google_auth(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus") adc.assert_called_once_with( scopes=("https://www.googleapis.com/auth/cloud-platform",), quota_project_id="octopus", ) +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ErrorGroupServiceGrpcTransport, grpc_helpers), + (transports.ErrorGroupServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_gte_1_26_0 +def test_error_group_service_transport_create_channel(transport_class, grpc_helpers): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="clouderrorreporting.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ErrorGroupServiceGrpcTransport, grpc_helpers), + (transports.ErrorGroupServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_lt_1_26_0 +def test_error_group_service_transport_create_channel_old_api_core( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus") + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ErrorGroupServiceGrpcTransport, grpc_helpers), + (transports.ErrorGroupServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_lt_1_26_0 +def test_error_group_service_transport_create_channel_user_scopes( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + scopes=["1", "2"], + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + @pytest.mark.parametrize( "transport_class", [ @@ -1081,7 +1252,7 @@ def test_error_group_service_transport_auth_adc(): def test_error_group_service_grpc_transport_client_cert_source_for_mtls( transport_class, ): - cred = credentials.AnonymousCredentials() + cred = ga_credentials.AnonymousCredentials() # Check ssl_channel_credentials is used if provided. with mock.patch.object(transport_class, "create_channel") as mock_create_channel: @@ -1120,7 +1291,7 @@ def test_error_group_service_grpc_transport_client_cert_source_for_mtls( def test_error_group_service_host_no_port(): client = ErrorGroupServiceClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com" ), @@ -1130,7 +1301,7 @@ def test_error_group_service_host_no_port(): def test_error_group_service_host_with_port(): client = ErrorGroupServiceClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com:8000" ), @@ -1186,9 +1357,9 @@ def test_error_group_service_transport_channel_mtls_with_client_cert_source( mock_grpc_channel = mock.Mock() grpc_create_channel.return_value = mock_grpc_channel - cred = credentials.AnonymousCredentials() + cred = ga_credentials.AnonymousCredentials() with pytest.warns(DeprecationWarning): - with mock.patch.object(auth, "default") as adc: + with mock.patch.object(google.auth, "default") as adc: adc.return_value = (cred, None) transport = transport_class( host="squid.clam.whelk", @@ -1265,7 +1436,6 @@ def test_error_group_service_transport_channel_mtls_with_adc(transport_class): def test_error_group_path(): project = "squid" group = "clam" - expected = "projects/{project}/groups/{group}".format(project=project, group=group,) actual = ErrorGroupServiceClient.error_group_path(project, group) assert expected == actual @@ -1285,7 +1455,6 @@ def test_parse_error_group_path(): def test_common_billing_account_path(): billing_account = "oyster" - expected = "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -1306,7 +1475,6 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): folder = "cuttlefish" - expected = "folders/{folder}".format(folder=folder,) actual = ErrorGroupServiceClient.common_folder_path(folder) assert expected == actual @@ -1325,7 +1493,6 @@ def test_parse_common_folder_path(): def test_common_organization_path(): organization = "winkle" - expected = "organizations/{organization}".format(organization=organization,) actual = ErrorGroupServiceClient.common_organization_path(organization) assert expected == actual @@ -1344,7 +1511,6 @@ def test_parse_common_organization_path(): def test_common_project_path(): project = "scallop" - expected = "projects/{project}".format(project=project,) actual = ErrorGroupServiceClient.common_project_path(project) assert expected == actual @@ -1364,7 +1530,6 @@ def test_parse_common_project_path(): def test_common_location_path(): project = "squid" location = "clam" - expected = "projects/{project}/locations/{location}".format( project=project, location=location, ) @@ -1391,7 +1556,7 @@ def test_client_withDEFAULT_CLIENT_INFO(): transports.ErrorGroupServiceTransport, "_prep_wrapped_messages" ) as prep: client = ErrorGroupServiceClient( - credentials=credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -1400,6 +1565,6 @@ def test_client_withDEFAULT_CLIENT_INFO(): ) as prep: transport_class = ErrorGroupServiceClient.get_transport_class() transport = transport_class( - credentials=credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 1966becb949a..cca786a8db67 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,9 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import os import mock +import packaging.version import grpc from grpc.experimental import aio @@ -24,13 +23,13 @@ import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule -from google import auth + from google.api_core import client_options -from google.api_core import exceptions +from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async -from google.auth import credentials +from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.error_stats_service import ( ErrorStatsServiceAsyncClient, @@ -40,11 +39,41 @@ ) from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.services.error_stats_service import transports +from google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.base import ( + _API_CORE_VERSION, +) +from google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.base import ( + _GOOGLE_AUTH_VERSION, +) from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service from google.oauth2 import service_account -from google.protobuf import duration_pb2 as duration # type: ignore -from google.protobuf import timestamp_pb2 as timestamp # type: ignore +from google.protobuf import duration_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +import google.auth + + +# TODO(busunkim): Once google-api-core >= 1.26.0 is required: +# - Delete all the api-core and auth "less than" test cases +# - Delete these pytest markers (Make the "greater than or equal to" tests the default). +requires_google_auth_lt_1_25_0 = pytest.mark.skipif( + packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), + reason="This test requires google-auth < 1.25.0", +) +requires_google_auth_gte_1_25_0 = pytest.mark.skipif( + packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), + reason="This test requires google-auth >= 1.25.0", +) + +requires_api_core_lt_1_26_0 = pytest.mark.skipif( + packaging.version.parse(_API_CORE_VERSION) >= packaging.version.parse("1.26.0"), + reason="This test requires google-api-core < 1.26.0", +) + +requires_api_core_gte_1_26_0 = pytest.mark.skipif( + packaging.version.parse(_API_CORE_VERSION) < packaging.version.parse("1.26.0"), + reason="This test requires google-api-core >= 1.26.0", +) def client_cert_source_callback(): @@ -96,7 +125,7 @@ def test__get_default_mtls_endpoint(): "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] ) def test_error_stats_service_client_from_service_account_info(client_class): - creds = credentials.AnonymousCredentials() + creds = ga_credentials.AnonymousCredentials() with mock.patch.object( service_account.Credentials, "from_service_account_info" ) as factory: @@ -113,7 +142,7 @@ def test_error_stats_service_client_from_service_account_info(client_class): "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] ) def test_error_stats_service_client_from_service_account_file(client_class): - creds = credentials.AnonymousCredentials() + creds = ga_credentials.AnonymousCredentials() with mock.patch.object( service_account.Credentials, "from_service_account_file" ) as factory: @@ -166,7 +195,7 @@ def test_error_stats_service_client_client_options( ): # Check that if channel is provided we won't create a new one. with mock.patch.object(ErrorStatsServiceClient, "get_transport_class") as gtc: - transport = transport_class(credentials=credentials.AnonymousCredentials()) + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) client = client_class(transport=transport) gtc.assert_not_called() @@ -464,7 +493,7 @@ def test_list_group_stats( transport: str = "grpc", request_type=error_stats_service.ListGroupStatsRequest ): client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -477,19 +506,15 @@ def test_list_group_stats( call.return_value = error_stats_service.ListGroupStatsResponse( next_page_token="next_page_token_value", ) - response = client.list_group_stats(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListGroupStatsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListGroupStatsPager) - assert response.next_page_token == "next_page_token_value" @@ -501,7 +526,7 @@ def test_list_group_stats_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -509,7 +534,6 @@ def test_list_group_stats_empty_call(): client.list_group_stats() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListGroupStatsRequest() @@ -519,7 +543,7 @@ async def test_list_group_stats_async( request_type=error_stats_service.ListGroupStatsRequest, ): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -534,18 +558,15 @@ async def test_list_group_stats_async( next_page_token="next_page_token_value", ) ) - response = await client.list_group_stats(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListGroupStatsRequest() # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListGroupStatsAsyncPager) - assert response.next_page_token == "next_page_token_value" @@ -555,17 +576,17 @@ async def test_list_group_stats_async_from_dict(): def test_list_group_stats_field_headers(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_stats_service.ListGroupStatsRequest() + request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: call.return_value = error_stats_service.ListGroupStatsResponse() - client.list_group_stats(request) # Establish that the underlying gRPC stub method was called. @@ -583,12 +604,13 @@ def test_list_group_stats_field_headers(): @pytest.mark.asyncio async def test_list_group_stats_field_headers_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_stats_service.ListGroupStatsRequest() + request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. @@ -596,7 +618,6 @@ async def test_list_group_stats_field_headers_async(): call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.ListGroupStatsResponse() ) - await client.list_group_stats(request) # Establish that the underlying gRPC stub method was called. @@ -612,13 +633,12 @@ async def test_list_group_stats_field_headers_async(): def test_list_group_stats_flattened(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.ListGroupStatsResponse() - # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. client.list_group_stats( @@ -632,16 +652,14 @@ def test_list_group_stats_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].time_range == error_stats_service.QueryTimeRange( period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR ) def test_list_group_stats_flattened_error(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -658,7 +676,7 @@ def test_list_group_stats_flattened_error(): @pytest.mark.asyncio async def test_list_group_stats_flattened_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -682,9 +700,7 @@ async def test_list_group_stats_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].time_range == error_stats_service.QueryTimeRange( period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR ) @@ -693,7 +709,7 @@ async def test_list_group_stats_flattened_async(): @pytest.mark.asyncio async def test_list_group_stats_flattened_error_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Attempting to call a method with both a request object and flattened @@ -709,7 +725,7 @@ async def test_list_group_stats_flattened_error_async(): def test_list_group_stats_pager(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials,) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: @@ -753,7 +769,7 @@ def test_list_group_stats_pager(): def test_list_group_stats_pages(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials,) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: @@ -789,7 +805,9 @@ def test_list_group_stats_pages(): @pytest.mark.asyncio async def test_list_group_stats_async_pager(): - client = ErrorStatsServiceAsyncClient(credentials=credentials.AnonymousCredentials,) + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -834,7 +852,9 @@ async def test_list_group_stats_async_pager(): @pytest.mark.asyncio async def test_list_group_stats_async_pages(): - client = ErrorStatsServiceAsyncClient(credentials=credentials.AnonymousCredentials,) + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -876,7 +896,7 @@ def test_list_events( transport: str = "grpc", request_type=error_stats_service.ListEventsRequest ): client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -889,19 +909,15 @@ def test_list_events( call.return_value = error_stats_service.ListEventsResponse( next_page_token="next_page_token_value", ) - response = client.list_events(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListEventsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListEventsPager) - assert response.next_page_token == "next_page_token_value" @@ -913,7 +929,7 @@ def test_list_events_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -921,7 +937,6 @@ def test_list_events_empty_call(): client.list_events() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListEventsRequest() @@ -930,7 +945,7 @@ async def test_list_events_async( transport: str = "grpc_asyncio", request_type=error_stats_service.ListEventsRequest ): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -945,18 +960,15 @@ async def test_list_events_async( next_page_token="next_page_token_value", ) ) - response = await client.list_events(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListEventsRequest() # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListEventsAsyncPager) - assert response.next_page_token == "next_page_token_value" @@ -966,17 +978,17 @@ async def test_list_events_async_from_dict(): def test_list_events_field_headers(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_stats_service.ListEventsRequest() + request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: call.return_value = error_stats_service.ListEventsResponse() - client.list_events(request) # Establish that the underlying gRPC stub method was called. @@ -994,12 +1006,13 @@ def test_list_events_field_headers(): @pytest.mark.asyncio async def test_list_events_field_headers_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_stats_service.ListEventsRequest() + request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. @@ -1007,7 +1020,6 @@ async def test_list_events_field_headers_async(): call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.ListEventsResponse() ) - await client.list_events(request) # Establish that the underlying gRPC stub method was called. @@ -1023,13 +1035,12 @@ async def test_list_events_field_headers_async(): def test_list_events_flattened(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.ListEventsResponse() - # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. client.list_events( @@ -1040,14 +1051,12 @@ def test_list_events_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].group_id == "group_id_value" def test_list_events_flattened_error(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -1062,7 +1071,7 @@ def test_list_events_flattened_error(): @pytest.mark.asyncio async def test_list_events_flattened_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1083,16 +1092,14 @@ async def test_list_events_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].group_id == "group_id_value" @pytest.mark.asyncio async def test_list_events_flattened_error_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Attempting to call a method with both a request object and flattened @@ -1106,7 +1113,7 @@ async def test_list_events_flattened_error_async(): def test_list_events_pager(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials,) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: @@ -1146,7 +1153,7 @@ def test_list_events_pager(): def test_list_events_pages(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials,) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials,) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: @@ -1178,7 +1185,9 @@ def test_list_events_pages(): @pytest.mark.asyncio async def test_list_events_async_pager(): - client = ErrorStatsServiceAsyncClient(credentials=credentials.AnonymousCredentials,) + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -1217,7 +1226,9 @@ async def test_list_events_async_pager(): @pytest.mark.asyncio async def test_list_events_async_pages(): - client = ErrorStatsServiceAsyncClient(credentials=credentials.AnonymousCredentials,) + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -1255,7 +1266,7 @@ def test_delete_events( transport: str = "grpc", request_type=error_stats_service.DeleteEventsRequest ): client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -1266,17 +1277,14 @@ def test_delete_events( with mock.patch.object(type(client.transport.delete_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.DeleteEventsResponse() - response = client.delete_events(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.DeleteEventsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, error_stats_service.DeleteEventsResponse) @@ -1288,7 +1296,7 @@ def test_delete_events_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1296,7 +1304,6 @@ def test_delete_events_empty_call(): client.delete_events() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.DeleteEventsRequest() @@ -1306,7 +1313,7 @@ async def test_delete_events_async( request_type=error_stats_service.DeleteEventsRequest, ): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -1319,13 +1326,11 @@ async def test_delete_events_async( call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.DeleteEventsResponse() ) - response = await client.delete_events(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.DeleteEventsRequest() # Establish that the response is the type that we expect. @@ -1338,17 +1343,17 @@ async def test_delete_events_async_from_dict(): def test_delete_events_field_headers(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_stats_service.DeleteEventsRequest() + request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.delete_events), "__call__") as call: call.return_value = error_stats_service.DeleteEventsResponse() - client.delete_events(request) # Establish that the underlying gRPC stub method was called. @@ -1366,12 +1371,13 @@ def test_delete_events_field_headers(): @pytest.mark.asyncio async def test_delete_events_field_headers_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = error_stats_service.DeleteEventsRequest() + request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. @@ -1379,7 +1385,6 @@ async def test_delete_events_field_headers_async(): call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( error_stats_service.DeleteEventsResponse() ) - await client.delete_events(request) # Establish that the underlying gRPC stub method was called. @@ -1395,13 +1400,12 @@ async def test_delete_events_field_headers_async(): def test_delete_events_flattened(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.delete_events), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = error_stats_service.DeleteEventsResponse() - # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. client.delete_events(project_name="project_name_value",) @@ -1410,12 +1414,11 @@ def test_delete_events_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" def test_delete_events_flattened_error(): - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -1429,7 +1432,7 @@ def test_delete_events_flattened_error(): @pytest.mark.asyncio async def test_delete_events_flattened_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1448,14 +1451,13 @@ async def test_delete_events_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" @pytest.mark.asyncio async def test_delete_events_flattened_error_async(): client = ErrorStatsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Attempting to call a method with both a request object and flattened @@ -1470,16 +1472,16 @@ async def test_delete_events_flattened_error_async(): def test_credentials_transport_error(): # It is an error to provide credentials and a transport instance. transport = transports.ErrorStatsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # It is an error to provide a credentials file and a transport instance. transport = transports.ErrorStatsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ErrorStatsServiceClient( @@ -1489,7 +1491,7 @@ def test_credentials_transport_error(): # It is an error to provide scopes and a transport instance. transport = transports.ErrorStatsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ErrorStatsServiceClient( @@ -1500,7 +1502,7 @@ def test_credentials_transport_error(): def test_transport_instance(): # A client may be instantiated with a custom transport instance. transport = transports.ErrorStatsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) client = ErrorStatsServiceClient(transport=transport) assert client.transport is transport @@ -1509,13 +1511,13 @@ def test_transport_instance(): def test_transport_get_channel(): # A client may be instantiated with a custom transport instance. transport = transports.ErrorStatsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) channel = transport.grpc_channel assert channel transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) channel = transport.grpc_channel assert channel @@ -1530,23 +1532,23 @@ def test_transport_get_channel(): ) def test_transport_adc(transport_class): # Test default credentials are used if not provided. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) transport_class() adc.assert_called_once() def test_transport_grpc_default(): # A client should use the gRPC transport by default. - client = ErrorStatsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) assert isinstance(client.transport, transports.ErrorStatsServiceGrpcTransport,) def test_error_stats_service_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(exceptions.DuplicateCredentialArgs): + with pytest.raises(core_exceptions.DuplicateCredentialArgs): transport = transports.ErrorStatsServiceTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), credentials_file="credentials.json", ) @@ -1558,7 +1560,7 @@ def test_error_stats_service_base_transport(): ) as Transport: Transport.return_value = None transport = transports.ErrorStatsServiceTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Every method on the transport should just blindly @@ -1573,15 +1575,37 @@ def test_error_stats_service_base_transport(): getattr(transport, method)(request=object()) +@requires_google_auth_gte_1_25_0 def test_error_stats_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( - auth, "load_credentials_from_file" + google.auth, "load_credentials_from_file", autospec=True ) as load_creds, mock.patch( "google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.ErrorStatsServiceTransport._prep_wrapped_messages" ) as Transport: Transport.return_value = None - load_creds.return_value = (credentials.AnonymousCredentials(), None) + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.ErrorStatsServiceTransport( + credentials_file="credentials.json", quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@requires_google_auth_lt_1_25_0 +def test_error_stats_service_base_transport_with_credentials_file_old_google_auth(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.ErrorStatsServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ErrorStatsServiceTransport( credentials_file="credentials.json", quota_project_id="octopus", ) @@ -1594,19 +1618,33 @@ def test_error_stats_service_base_transport_with_credentials_file(): def test_error_stats_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(auth, "default") as adc, mock.patch( + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( "google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.ErrorStatsServiceTransport._prep_wrapped_messages" ) as Transport: Transport.return_value = None - adc.return_value = (credentials.AnonymousCredentials(), None) + adc.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ErrorStatsServiceTransport() adc.assert_called_once() +@requires_google_auth_gte_1_25_0 def test_error_stats_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + ErrorStatsServiceClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@requires_google_auth_lt_1_25_0 +def test_error_stats_service_auth_adc_old_google_auth(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) ErrorStatsServiceClient() adc.assert_called_once_with( scopes=("https://www.googleapis.com/auth/cloud-platform",), @@ -1614,20 +1652,156 @@ def test_error_stats_service_auth_adc(): ) -def test_error_stats_service_transport_auth_adc(): +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + ], +) +@requires_google_auth_gte_1_25_0 +def test_error_stats_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) - transports.ErrorStatsServiceGrpcTransport( - host="squid.clam.whelk", quota_project_id="octopus" + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + ], +) +@requires_google_auth_lt_1_25_0 +def test_error_stats_service_transport_auth_adc_old_google_auth(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus") adc.assert_called_once_with( scopes=("https://www.googleapis.com/auth/cloud-platform",), quota_project_id="octopus", ) +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ErrorStatsServiceGrpcTransport, grpc_helpers), + (transports.ErrorStatsServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_gte_1_26_0 +def test_error_stats_service_transport_create_channel(transport_class, grpc_helpers): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="clouderrorreporting.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ErrorStatsServiceGrpcTransport, grpc_helpers), + (transports.ErrorStatsServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_lt_1_26_0 +def test_error_stats_service_transport_create_channel_old_api_core( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus") + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ErrorStatsServiceGrpcTransport, grpc_helpers), + (transports.ErrorStatsServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_lt_1_26_0 +def test_error_stats_service_transport_create_channel_user_scopes( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + scopes=["1", "2"], + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + @pytest.mark.parametrize( "transport_class", [ @@ -1638,7 +1812,7 @@ def test_error_stats_service_transport_auth_adc(): def test_error_stats_service_grpc_transport_client_cert_source_for_mtls( transport_class, ): - cred = credentials.AnonymousCredentials() + cred = ga_credentials.AnonymousCredentials() # Check ssl_channel_credentials is used if provided. with mock.patch.object(transport_class, "create_channel") as mock_create_channel: @@ -1677,7 +1851,7 @@ def test_error_stats_service_grpc_transport_client_cert_source_for_mtls( def test_error_stats_service_host_no_port(): client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com" ), @@ -1687,7 +1861,7 @@ def test_error_stats_service_host_no_port(): def test_error_stats_service_host_with_port(): client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com:8000" ), @@ -1743,9 +1917,9 @@ def test_error_stats_service_transport_channel_mtls_with_client_cert_source( mock_grpc_channel = mock.Mock() grpc_create_channel.return_value = mock_grpc_channel - cred = credentials.AnonymousCredentials() + cred = ga_credentials.AnonymousCredentials() with pytest.warns(DeprecationWarning): - with mock.patch.object(auth, "default") as adc: + with mock.patch.object(google.auth, "default") as adc: adc.return_value = (cred, None) transport = transport_class( host="squid.clam.whelk", @@ -1822,7 +1996,6 @@ def test_error_stats_service_transport_channel_mtls_with_adc(transport_class): def test_error_group_path(): project = "squid" group = "clam" - expected = "projects/{project}/groups/{group}".format(project=project, group=group,) actual = ErrorStatsServiceClient.error_group_path(project, group) assert expected == actual @@ -1842,7 +2015,6 @@ def test_parse_error_group_path(): def test_common_billing_account_path(): billing_account = "oyster" - expected = "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -1863,7 +2035,6 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): folder = "cuttlefish" - expected = "folders/{folder}".format(folder=folder,) actual = ErrorStatsServiceClient.common_folder_path(folder) assert expected == actual @@ -1882,7 +2053,6 @@ def test_parse_common_folder_path(): def test_common_organization_path(): organization = "winkle" - expected = "organizations/{organization}".format(organization=organization,) actual = ErrorStatsServiceClient.common_organization_path(organization) assert expected == actual @@ -1901,7 +2071,6 @@ def test_parse_common_organization_path(): def test_common_project_path(): project = "scallop" - expected = "projects/{project}".format(project=project,) actual = ErrorStatsServiceClient.common_project_path(project) assert expected == actual @@ -1921,7 +2090,6 @@ def test_parse_common_project_path(): def test_common_location_path(): project = "squid" location = "clam" - expected = "projects/{project}/locations/{location}".format( project=project, location=location, ) @@ -1948,7 +2116,7 @@ def test_client_withDEFAULT_CLIENT_INFO(): transports.ErrorStatsServiceTransport, "_prep_wrapped_messages" ) as prep: client = ErrorStatsServiceClient( - credentials=credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -1957,6 +2125,6 @@ def test_client_withDEFAULT_CLIENT_INFO(): ) as prep: transport_class = ErrorStatsServiceClient.get_transport_class() transport = transport_class( - credentials=credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 98a839478119..894909a8ebec 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,9 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import os import mock +import packaging.version import grpc from grpc.experimental import aio @@ -24,13 +23,13 @@ import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule -from google import auth + from google.api_core import client_options -from google.api_core import exceptions +from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async -from google.auth import credentials +from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( ReportErrorsServiceAsyncClient, @@ -41,10 +40,40 @@ from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( transports, ) +from google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.base import ( + _API_CORE_VERSION, +) +from google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.base import ( + _GOOGLE_AUTH_VERSION, +) from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import report_errors_service from google.oauth2 import service_account -from google.protobuf import timestamp_pb2 as timestamp # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +import google.auth + + +# TODO(busunkim): Once google-api-core >= 1.26.0 is required: +# - Delete all the api-core and auth "less than" test cases +# - Delete these pytest markers (Make the "greater than or equal to" tests the default). +requires_google_auth_lt_1_25_0 = pytest.mark.skipif( + packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), + reason="This test requires google-auth < 1.25.0", +) +requires_google_auth_gte_1_25_0 = pytest.mark.skipif( + packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), + reason="This test requires google-auth >= 1.25.0", +) + +requires_api_core_lt_1_26_0 = pytest.mark.skipif( + packaging.version.parse(_API_CORE_VERSION) >= packaging.version.parse("1.26.0"), + reason="This test requires google-api-core < 1.26.0", +) + +requires_api_core_gte_1_26_0 = pytest.mark.skipif( + packaging.version.parse(_API_CORE_VERSION) < packaging.version.parse("1.26.0"), + reason="This test requires google-api-core >= 1.26.0", +) def client_cert_source_callback(): @@ -96,7 +125,7 @@ def test__get_default_mtls_endpoint(): "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] ) def test_report_errors_service_client_from_service_account_info(client_class): - creds = credentials.AnonymousCredentials() + creds = ga_credentials.AnonymousCredentials() with mock.patch.object( service_account.Credentials, "from_service_account_info" ) as factory: @@ -113,7 +142,7 @@ def test_report_errors_service_client_from_service_account_info(client_class): "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] ) def test_report_errors_service_client_from_service_account_file(client_class): - creds = credentials.AnonymousCredentials() + creds = ga_credentials.AnonymousCredentials() with mock.patch.object( service_account.Credentials, "from_service_account_file" ) as factory: @@ -170,7 +199,7 @@ def test_report_errors_service_client_client_options( ): # Check that if channel is provided we won't create a new one. with mock.patch.object(ReportErrorsServiceClient, "get_transport_class") as gtc: - transport = transport_class(credentials=credentials.AnonymousCredentials()) + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) client = client_class(transport=transport) gtc.assert_not_called() @@ -476,7 +505,7 @@ def test_report_error_event( transport: str = "grpc", request_type=report_errors_service.ReportErrorEventRequest ): client = ReportErrorsServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -489,17 +518,14 @@ def test_report_error_event( ) as call: # Designate an appropriate return value for the call. call.return_value = report_errors_service.ReportErrorEventResponse() - response = client.report_error_event(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == report_errors_service.ReportErrorEventRequest() # Establish that the response is the type that we expect. - assert isinstance(response, report_errors_service.ReportErrorEventResponse) @@ -511,7 +537,7 @@ def test_report_error_event_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ReportErrorsServiceClient( - credentials=credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -521,7 +547,6 @@ def test_report_error_event_empty_call(): client.report_error_event() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == report_errors_service.ReportErrorEventRequest() @@ -531,7 +556,7 @@ async def test_report_error_event_async( request_type=report_errors_service.ReportErrorEventRequest, ): client = ReportErrorsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -546,13 +571,11 @@ async def test_report_error_event_async( call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( report_errors_service.ReportErrorEventResponse() ) - response = await client.report_error_event(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == report_errors_service.ReportErrorEventRequest() # Establish that the response is the type that we expect. @@ -565,11 +588,14 @@ async def test_report_error_event_async_from_dict(): def test_report_error_event_field_headers(): - client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = report_errors_service.ReportErrorEventRequest() + request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. @@ -577,7 +603,6 @@ def test_report_error_event_field_headers(): type(client.transport.report_error_event), "__call__" ) as call: call.return_value = report_errors_service.ReportErrorEventResponse() - client.report_error_event(request) # Establish that the underlying gRPC stub method was called. @@ -595,12 +620,13 @@ def test_report_error_event_field_headers(): @pytest.mark.asyncio async def test_report_error_event_field_headers_async(): client = ReportErrorsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. request = report_errors_service.ReportErrorEventRequest() + request.project_name = "project_name/value" # Mock the actual call within the gRPC stub, and fake the request. @@ -610,7 +636,6 @@ async def test_report_error_event_field_headers_async(): call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( report_errors_service.ReportErrorEventResponse() ) - await client.report_error_event(request) # Establish that the underlying gRPC stub method was called. @@ -626,7 +651,9 @@ async def test_report_error_event_field_headers_async(): def test_report_error_event_flattened(): - client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -634,13 +661,12 @@ def test_report_error_event_flattened(): ) as call: # Designate an appropriate return value for the call. call.return_value = report_errors_service.ReportErrorEventResponse() - # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. client.report_error_event( project_name="project_name_value", event=report_errors_service.ReportedErrorEvent( - event_time=timestamp.Timestamp(seconds=751) + event_time=timestamp_pb2.Timestamp(seconds=751) ), ) @@ -648,16 +674,16 @@ def test_report_error_event_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].event == report_errors_service.ReportedErrorEvent( - event_time=timestamp.Timestamp(seconds=751) + event_time=timestamp_pb2.Timestamp(seconds=751) ) def test_report_error_event_flattened_error(): - client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -666,7 +692,7 @@ def test_report_error_event_flattened_error(): report_errors_service.ReportErrorEventRequest(), project_name="project_name_value", event=report_errors_service.ReportedErrorEvent( - event_time=timestamp.Timestamp(seconds=751) + event_time=timestamp_pb2.Timestamp(seconds=751) ), ) @@ -674,7 +700,7 @@ def test_report_error_event_flattened_error(): @pytest.mark.asyncio async def test_report_error_event_flattened_async(): client = ReportErrorsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -692,7 +718,7 @@ async def test_report_error_event_flattened_async(): response = await client.report_error_event( project_name="project_name_value", event=report_errors_service.ReportedErrorEvent( - event_time=timestamp.Timestamp(seconds=751) + event_time=timestamp_pb2.Timestamp(seconds=751) ), ) @@ -700,18 +726,16 @@ async def test_report_error_event_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].event == report_errors_service.ReportedErrorEvent( - event_time=timestamp.Timestamp(seconds=751) + event_time=timestamp_pb2.Timestamp(seconds=751) ) @pytest.mark.asyncio async def test_report_error_event_flattened_error_async(): client = ReportErrorsServiceAsyncClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Attempting to call a method with both a request object and flattened @@ -721,7 +745,7 @@ async def test_report_error_event_flattened_error_async(): report_errors_service.ReportErrorEventRequest(), project_name="project_name_value", event=report_errors_service.ReportedErrorEvent( - event_time=timestamp.Timestamp(seconds=751) + event_time=timestamp_pb2.Timestamp(seconds=751) ), ) @@ -729,16 +753,16 @@ async def test_report_error_event_flattened_error_async(): def test_credentials_transport_error(): # It is an error to provide credentials and a transport instance. transport = transports.ReportErrorsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ReportErrorsServiceClient( - credentials=credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # It is an error to provide a credentials file and a transport instance. transport = transports.ReportErrorsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ReportErrorsServiceClient( @@ -748,7 +772,7 @@ def test_credentials_transport_error(): # It is an error to provide scopes and a transport instance. transport = transports.ReportErrorsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) with pytest.raises(ValueError): client = ReportErrorsServiceClient( @@ -759,7 +783,7 @@ def test_credentials_transport_error(): def test_transport_instance(): # A client may be instantiated with a custom transport instance. transport = transports.ReportErrorsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) client = ReportErrorsServiceClient(transport=transport) assert client.transport is transport @@ -768,13 +792,13 @@ def test_transport_instance(): def test_transport_get_channel(): # A client may be instantiated with a custom transport instance. transport = transports.ReportErrorsServiceGrpcTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) channel = transport.grpc_channel assert channel transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) channel = transport.grpc_channel assert channel @@ -789,23 +813,25 @@ def test_transport_get_channel(): ) def test_transport_adc(transport_class): # Test default credentials are used if not provided. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) transport_class() adc.assert_called_once() def test_transport_grpc_default(): # A client should use the gRPC transport by default. - client = ReportErrorsServiceClient(credentials=credentials.AnonymousCredentials(),) + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) assert isinstance(client.transport, transports.ReportErrorsServiceGrpcTransport,) def test_report_errors_service_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(exceptions.DuplicateCredentialArgs): + with pytest.raises(core_exceptions.DuplicateCredentialArgs): transport = transports.ReportErrorsServiceTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), credentials_file="credentials.json", ) @@ -817,7 +843,7 @@ def test_report_errors_service_base_transport(): ) as Transport: Transport.return_value = None transport = transports.ReportErrorsServiceTransport( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), ) # Every method on the transport should just blindly @@ -828,15 +854,37 @@ def test_report_errors_service_base_transport(): getattr(transport, method)(request=object()) +@requires_google_auth_gte_1_25_0 def test_report_errors_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( - auth, "load_credentials_from_file" + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.ReportErrorsServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.ReportErrorsServiceTransport( + credentials_file="credentials.json", quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@requires_google_auth_lt_1_25_0 +def test_report_errors_service_base_transport_with_credentials_file_old_google_auth(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True ) as load_creds, mock.patch( "google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.ReportErrorsServiceTransport._prep_wrapped_messages" ) as Transport: Transport.return_value = None - load_creds.return_value = (credentials.AnonymousCredentials(), None) + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ReportErrorsServiceTransport( credentials_file="credentials.json", quota_project_id="octopus", ) @@ -849,19 +897,33 @@ def test_report_errors_service_base_transport_with_credentials_file(): def test_report_errors_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(auth, "default") as adc, mock.patch( + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( "google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.ReportErrorsServiceTransport._prep_wrapped_messages" ) as Transport: Transport.return_value = None - adc.return_value = (credentials.AnonymousCredentials(), None) + adc.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ReportErrorsServiceTransport() adc.assert_called_once() +@requires_google_auth_gte_1_25_0 def test_report_errors_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + ReportErrorsServiceClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@requires_google_auth_lt_1_25_0 +def test_report_errors_service_auth_adc_old_google_auth(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) ReportErrorsServiceClient() adc.assert_called_once_with( scopes=("https://www.googleapis.com/auth/cloud-platform",), @@ -869,20 +931,156 @@ def test_report_errors_service_auth_adc(): ) -def test_report_errors_service_transport_auth_adc(): +@pytest.mark.parametrize( + "transport_class", + [ + transports.ReportErrorsServiceGrpcTransport, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + ], +) +@requires_google_auth_gte_1_25_0 +def test_report_errors_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. - with mock.patch.object(auth, "default") as adc: - adc.return_value = (credentials.AnonymousCredentials(), None) - transports.ReportErrorsServiceGrpcTransport( - host="squid.clam.whelk", quota_project_id="octopus" + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.ReportErrorsServiceGrpcTransport, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + ], +) +@requires_google_auth_lt_1_25_0 +def test_report_errors_service_transport_auth_adc_old_google_auth(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus") adc.assert_called_once_with( scopes=("https://www.googleapis.com/auth/cloud-platform",), quota_project_id="octopus", ) +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ReportErrorsServiceGrpcTransport, grpc_helpers), + (transports.ReportErrorsServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_gte_1_26_0 +def test_report_errors_service_transport_create_channel(transport_class, grpc_helpers): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="clouderrorreporting.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ReportErrorsServiceGrpcTransport, grpc_helpers), + (transports.ReportErrorsServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_lt_1_26_0 +def test_report_errors_service_transport_create_channel_old_api_core( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus") + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + scopes=("https://www.googleapis.com/auth/cloud-platform",), + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.ReportErrorsServiceGrpcTransport, grpc_helpers), + (transports.ReportErrorsServiceGrpcAsyncIOTransport, grpc_helpers_async), + ], +) +@requires_api_core_lt_1_26_0 +def test_report_errors_service_transport_create_channel_user_scopes( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "clouderrorreporting.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + scopes=["1", "2"], + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + @pytest.mark.parametrize( "transport_class", [ @@ -893,7 +1091,7 @@ def test_report_errors_service_transport_auth_adc(): def test_report_errors_service_grpc_transport_client_cert_source_for_mtls( transport_class, ): - cred = credentials.AnonymousCredentials() + cred = ga_credentials.AnonymousCredentials() # Check ssl_channel_credentials is used if provided. with mock.patch.object(transport_class, "create_channel") as mock_create_channel: @@ -932,7 +1130,7 @@ def test_report_errors_service_grpc_transport_client_cert_source_for_mtls( def test_report_errors_service_host_no_port(): client = ReportErrorsServiceClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com" ), @@ -942,7 +1140,7 @@ def test_report_errors_service_host_no_port(): def test_report_errors_service_host_with_port(): client = ReportErrorsServiceClient( - credentials=credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com:8000" ), @@ -998,9 +1196,9 @@ def test_report_errors_service_transport_channel_mtls_with_client_cert_source( mock_grpc_channel = mock.Mock() grpc_create_channel.return_value = mock_grpc_channel - cred = credentials.AnonymousCredentials() + cred = ga_credentials.AnonymousCredentials() with pytest.warns(DeprecationWarning): - with mock.patch.object(auth, "default") as adc: + with mock.patch.object(google.auth, "default") as adc: adc.return_value = (cred, None) transport = transport_class( host="squid.clam.whelk", @@ -1076,7 +1274,6 @@ def test_report_errors_service_transport_channel_mtls_with_adc(transport_class): def test_common_billing_account_path(): billing_account = "squid" - expected = "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -1097,7 +1294,6 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): folder = "whelk" - expected = "folders/{folder}".format(folder=folder,) actual = ReportErrorsServiceClient.common_folder_path(folder) assert expected == actual @@ -1116,7 +1312,6 @@ def test_parse_common_folder_path(): def test_common_organization_path(): organization = "oyster" - expected = "organizations/{organization}".format(organization=organization,) actual = ReportErrorsServiceClient.common_organization_path(organization) assert expected == actual @@ -1135,7 +1330,6 @@ def test_parse_common_organization_path(): def test_common_project_path(): project = "cuttlefish" - expected = "projects/{project}".format(project=project,) actual = ReportErrorsServiceClient.common_project_path(project) assert expected == actual @@ -1155,7 +1349,6 @@ def test_parse_common_project_path(): def test_common_location_path(): project = "winkle" location = "nautilus" - expected = "projects/{project}/locations/{location}".format( project=project, location=location, ) @@ -1182,7 +1375,7 @@ def test_client_withDEFAULT_CLIENT_INFO(): transports.ReportErrorsServiceTransport, "_prep_wrapped_messages" ) as prep: client = ReportErrorsServiceClient( - credentials=credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -1191,6 +1384,6 @@ def test_client_withDEFAULT_CLIENT_INFO(): ) as prep: transport_class = ReportErrorsServiceClient.get_transport_class() transport = transport_class( - credentials=credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) From c74d9db5a6842f41f69a884109162c2629852cdf Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Fri, 14 May 2021 19:04:04 -0600 Subject: [PATCH 228/467] fix(deps): add packaging requirement (#124) Add packaging requirement. packaging.version is used for a version comparison in transports/base.py and is needed after the upgrade to gapic-generator-python 0.46.3 --- packages/google-cloud-error-reporting/setup.py | 1 + .../google-cloud-error-reporting/testing/constraints-3.6.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 859ef21df384..164f228fac80 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -32,6 +32,7 @@ "google-cloud-logging>=1.14.0, <2.4", "google-api-core[grpc] >= 1.22.2, < 2.0.0dev", "proto-plus >= 1.4.0", + "packaging >= 14.3", ] extras = {} diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt index cf04f5fae717..39a8e993bc1a 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt @@ -8,3 +8,4 @@ google-cloud-logging==1.14.0 google-api-core==1.22.2 proto-plus==1.4.0 +packaging==14.3 From d5dbb9146a222775bdcc8440714cc0db14f938a5 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sun, 16 May 2021 11:26:02 +0000 Subject: [PATCH 229/467] chore: new owl bot post processor docker image (#127) gcr.io/repo-automation-bots/owlbot-python:latest@sha256:4c981a6b6f2b8914a448d7b3a01688365be03e3ed26dfee399a6aa77fb112eaa --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/.pre-commit-config.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index bab398e15351..864c17653f80 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:1f18bfeb1629a6fd4c9301d4174c672cae5ac7ba611a5c8d204d6010e61f6f0d + digest: sha256:4c981a6b6f2b8914a448d7b3a01688365be03e3ed26dfee399a6aa77fb112eaa diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 1bbd787833ec..4f00c7cffcfd 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -26,6 +26,6 @@ repos: hooks: - id: black - repo: https://gitlab.com/pycqa/flake8 - rev: 3.9.1 + rev: 3.9.2 hooks: - id: flake8 From 1de1174ac5bc50b4de2b4a57347387c6e3922bc1 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Sun, 16 May 2021 16:06:03 +0200 Subject: [PATCH 230/467] chore(deps): update dependency google-cloud-logging to >=1.14.0, <2.5 (#126) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [google-cloud-logging](https://togithub.com/googleapis/python-logging) | `>=1.14.0, <2.4` -> `>=1.14.0, <2.5` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-logging/2.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-logging/2.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-logging/2.4.0/compatibility-slim/2.3.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-logging/2.4.0/confidence-slim/2.3.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/python-logging ### [`v2.4.0`](https://togithub.com/googleapis/python-logging/blob/master/CHANGELOG.md#​240-httpswwwgithubcomgoogleapispython-loggingcomparev231v240-2021-05-12) [Compare Source](https://togithub.com/googleapis/python-logging/compare/v2.3.1...v2.4.0) ##### Features - allow custom labels with standard library logging ([#​264](https://www.github.com/googleapis/python-logging/issues/264)) ([fe4de39](https://www.github.com/googleapis/python-logging/commit/fe4de39a87581a9e9f2cee62462ae2f26176194f)) - Improve source location overrides ([#​258](https://www.github.com/googleapis/python-logging/issues/258)) ([6b10b74](https://www.github.com/googleapis/python-logging/commit/6b10b74e2bf65ea406b10585a4c24078348483d2)) - record source locations ([#​254](https://www.github.com/googleapis/python-logging/issues/254)) ([a5c2f8e](https://www.github.com/googleapis/python-logging/commit/a5c2f8e948bb116cbce313f063643aec02d06a84)) - support span inference ([#​267](https://www.github.com/googleapis/python-logging/issues/267)) ([fcd26eb](https://www.github.com/googleapis/python-logging/commit/fcd26eb0ff4f97c097ca33b2d212d8f83e56686e)) - use standard output logs on serverless environments ([#​228](https://www.github.com/googleapis/python-logging/issues/228)) ([a78f577](https://www.github.com/googleapis/python-logging/commit/a78f577bda17d758551237be84182035ed7b9cce)) ##### Bug Fixes - changed region format on serverless ([#​291](https://www.github.com/googleapis/python-logging/issues/291)) ([8872d6f](https://www.github.com/googleapis/python-logging/commit/8872d6f6b2bb979adffad0b054fa40306b68cfc0)) - changed region format on serverless ([#​291](https://www.github.com/googleapis/python-logging/issues/291)) ([360d3d2](https://www.github.com/googleapis/python-logging/commit/360d3d23db7709b7c3946c092ef373f888f47c3d)) - **deps:** fix minimum required version of google-api-core ([#​244](https://www.github.com/googleapis/python-logging/issues/244)) ([874fdfa](https://www.github.com/googleapis/python-logging/commit/874fdfa809063c2bfb33e59aded553e098601876)) - **deps:** fix minimum required version of google-api-core ([#​244](https://www.github.com/googleapis/python-logging/issues/244)) ([37d33fc](https://www.github.com/googleapis/python-logging/commit/37d33fcd8402b973377486a572c04ba6d4029b58)) - improve API compatibility for next release ([#​292](https://www.github.com/googleapis/python-logging/issues/292)) ([1f9517d](https://www.github.com/googleapis/python-logging/commit/1f9517da7302e19198e598d452df58238d4e6306)) - remove noisy logs ([#​290](https://www.github.com/googleapis/python-logging/issues/290)) ([bdf8273](https://www.github.com/googleapis/python-logging/commit/bdf827358de5935f736ecd73ab10b2d861daf690)) ##### [2.3.1](https://www.github.com/googleapis/python-logging/compare/v2.3.0...v2.3.1) (2021-03-24) ##### Bug Fixes - detect project from environment instead of from logger ([#​238](https://www.github.com/googleapis/python-logging/issues/238)) ([813b97c](https://www.github.com/googleapis/python-logging/commit/813b97cb936fa5acc2a4de567e2c84d746527e98)) - revert default resource behavior to avoid breaking changes ([#​237](https://www.github.com/googleapis/python-logging/issues/237)) ([24a0a5e](https://www.github.com/googleapis/python-logging/commit/24a0a5e674430e97a3a2e3b54477d8f95fa08ec6))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-error-reporting). --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 164f228fac80..ccbaaddfbb83 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" dependencies = [ - "google-cloud-logging>=1.14.0, <2.4", + "google-cloud-logging>=1.14.0, <2.5", "google-api-core[grpc] >= 1.22.2, < 2.0.0dev", "proto-plus >= 1.4.0", "packaging >= 14.3", From bd9d8d9fcc0ac28adac541556299e53a1e5d9db4 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 22 May 2021 09:18:08 +0000 Subject: [PATCH 231/467] chore: new owl bot post processor docker image (#129) gcr.io/repo-automation-bots/owlbot-python:latest@sha256:3c3a445b3ddc99ccd5d31edc4b4519729635d20693900db32c4f587ed51f7479 --- .../.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/noxfile.py | 6 ++++-- .../samples/snippets/api/noxfile.py | 8 +++++++- .../samples/snippets/fluent_on_compute/noxfile.py | 8 +++++++- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 864c17653f80..46e3f021cc72 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:4c981a6b6f2b8914a448d7b3a01688365be03e3ed26dfee399a6aa77fb112eaa + digest: sha256:3c3a445b3ddc99ccd5d31edc4b4519729635d20693900db32c4f587ed51f7479 diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 54c6690d168b..fa33394fb68d 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -181,7 +181,7 @@ def docs(session): """Build the docs for this library.""" session.install("-e", ".") - session.install("sphinx", "alabaster", "recommonmark") + session.install("sphinx==4.0.1", "alabaster", "recommonmark") shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( @@ -203,7 +203,9 @@ def docfx(session): """Build the docfx yaml files for this library.""" session.install("-e", ".") - session.install("sphinx", "alabaster", "recommonmark", "gcp-sphinx-docfx-yaml") + session.install( + "sphinx==4.0.1", "alabaster", "recommonmark", "gcp-sphinx-docfx-yaml" + ) shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 956cdf4f9250..5ff9e1db5808 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -50,7 +50,10 @@ # to use your own Cloud project. 'gcloud_project_env': 'GOOGLE_CLOUD_PROJECT', # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, # A dictionary you want to inject into your test. Don't put any # secrets here. These values will override predefined values. 'envs': {}, @@ -170,6 +173,9 @@ def blacken(session: nox.sessions.Session) -> None: def _session_tests(session: nox.sessions.Session, post_install: Callable = None) -> None: + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") """Runs py.test for a particular project.""" if os.path.exists("requirements.txt"): if os.path.exists("constraints.txt"): diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 956cdf4f9250..5ff9e1db5808 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -50,7 +50,10 @@ # to use your own Cloud project. 'gcloud_project_env': 'GOOGLE_CLOUD_PROJECT', # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, # A dictionary you want to inject into your test. Don't put any # secrets here. These values will override predefined values. 'envs': {}, @@ -170,6 +173,9 @@ def blacken(session: nox.sessions.Session) -> None: def _session_tests(session: nox.sessions.Session, post_install: Callable = None) -> None: + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") """Runs py.test for a particular project.""" if os.path.exists("requirements.txt"): if os.path.exists("constraints.txt"): From b96075cf8e09490ff29b543c7c1e8513e284e2f3 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 28 May 2021 16:00:09 +0000 Subject: [PATCH 232/467] chore: new owl bot post processor docker image (#130) gcr.io/repo-automation-bots/owlbot-python:latest@sha256:0856ca711da1fd5ec9d6d7da6c50aa0bbf550fb94acb47b55159a640791987bf --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/docs/multiprocessing.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 46e3f021cc72..127c2cdf9503 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:3c3a445b3ddc99ccd5d31edc4b4519729635d20693900db32c4f587ed51f7479 + digest: sha256:0856ca711da1fd5ec9d6d7da6c50aa0bbf550fb94acb47b55159a640791987bf diff --git a/packages/google-cloud-error-reporting/docs/multiprocessing.rst b/packages/google-cloud-error-reporting/docs/multiprocessing.rst index 1cb29d4ca967..536d17b2ea65 100644 --- a/packages/google-cloud-error-reporting/docs/multiprocessing.rst +++ b/packages/google-cloud-error-reporting/docs/multiprocessing.rst @@ -1,7 +1,7 @@ .. note:: - Because this client uses :mod:`grpcio` library, it is safe to + Because this client uses :mod:`grpc` library, it is safe to share instances across threads. In multiprocessing scenarios, the best practice is to create client instances *after* the invocation of - :func:`os.fork` by :class:`multiprocessing.Pool` or + :func:`os.fork` by :class:`multiprocessing.pool.Pool` or :class:`multiprocessing.Process`. From 4c920cf95829792a416c992a519a9b36d5a308c7 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 28 May 2021 17:08:09 +0000 Subject: [PATCH 233/467] chore: new owl bot post processor docker image (#131) Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:c66ba3c8d7bc8566f47df841f98cd0097b28fff0b1864c86f5817f4c8c3e8600 --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/docs/conf.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 127c2cdf9503..da616c91a3b6 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:0856ca711da1fd5ec9d6d7da6c50aa0bbf550fb94acb47b55159a640791987bf + digest: sha256:c66ba3c8d7bc8566f47df841f98cd0097b28fff0b1864c86f5817f4c8c3e8600 diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 6a23a55d2005..30ece8f00422 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -363,6 +363,7 @@ "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None,), "grpc": ("https://grpc.github.io/grpc/python/", None), "proto-plus": ("https://proto-plus-python.readthedocs.io/en/latest/", None), + "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), } From baa9890c4671db9b2d2ee1f8e3467a2042789b1d Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Wed, 2 Jun 2021 05:31:01 -0400 Subject: [PATCH 234/467] chore: delete unused protos (#128) --- .../errorreporting_v1beta1/proto/common.proto | 196 --------- .../proto/error_group_service.proto | 78 ---- .../proto/error_stats_service.proto | 376 ------------------ .../proto/report_errors_service.proto | 129 ------ 4 files changed, 779 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto delete mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto deleted file mode 100644 index e9bb321e400f..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/common.proto +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2021 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. - -syntax = "proto3"; - -package google.devtools.clouderrorreporting.v1beta1; - -import "google/api/resource.proto"; -import "google/protobuf/timestamp.proto"; -import "google/api/annotations.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; -option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; -option java_multiple_files = true; -option java_outer_classname = "CommonProto"; -option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; -option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; -option ruby_package = "Google::Cloud::ErrorReporting::V1beta1"; - -// Description of a group of similar error events. -message ErrorGroup { - option (google.api.resource) = { - type: "clouderrorreporting.googleapis.com/ErrorGroup" - pattern: "projects/{project}/groups/{group}" - }; - - // The group resource name. - // Example: projects/my-project-123/groups/CNSgkpnppqKCUw - string name = 1; - - // Group IDs are unique for a given project. If the same kind of error - // occurs in different service contexts, it will receive the same group ID. - string group_id = 2; - - // Associated tracking issues. - repeated TrackingIssue tracking_issues = 3; - - // Error group's resolution status. - // An unspecified resolution status will be interpreted as OPEN - ResolutionStatus resolution_status = 5; -} - -// Information related to tracking the progress on resolving the error. -message TrackingIssue { - // A URL pointing to a related entry in an issue tracking system. - // Example: `https://github.com/user/project/issues/4` - string url = 1; -} - -// An error event which is returned by the Error Reporting system. -message ErrorEvent { - // Time when the event occurred as provided in the error report. - // If the report did not contain a timestamp, the time the error was received - // by the Error Reporting system is used. - google.protobuf.Timestamp event_time = 1; - - // The `ServiceContext` for which this error was reported. - ServiceContext service_context = 2; - - // The stack trace that was reported or logged by the service. - string message = 3; - - // Data about the context in which the error occurred. - ErrorContext context = 5; -} - -// Describes a running service that sends errors. -// Its version changes over time and multiple versions can run in parallel. -message ServiceContext { - // An identifier of the service, such as the name of the - // executable, job, or Google App Engine service name. This field is expected - // to have a low number of values that are relatively stable over time, as - // opposed to `version`, which can be changed whenever new code is deployed. - // - // Contains the service name for error reports extracted from Google - // App Engine logs or `default` if the App Engine default service is used. - string service = 2; - - // Represents the source code version that the developer provided, - // which could represent a version label or a Git SHA-1 hash, for example. - // For App Engine standard environment, the version is set to the version of - // the app. - string version = 3; - - // Type of the MonitoredResource. List of possible values: - // https://cloud.google.com/monitoring/api/resources - // - // Value is set automatically for incoming errors and must not be set when - // reporting errors. - string resource_type = 4; -} - -// A description of the context in which an error occurred. -// This data should be provided by the application when reporting an error, -// unless the -// error report has been generated automatically from Google App Engine logs. -message ErrorContext { - // The HTTP request which was processed when the error was - // triggered. - HttpRequestContext http_request = 1; - - // The user who caused or was affected by the crash. - // This can be a user ID, an email address, or an arbitrary token that - // uniquely identifies the user. - // When sending an error report, leave this field empty if the user was not - // logged in. In this case the - // Error Reporting system will use other data, such as remote IP address, to - // distinguish affected users. See `affected_users_count` in - // `ErrorGroupStats`. - string user = 2; - - // The location in the source code where the decision was made to - // report the error, usually the place where it was logged. - // For a logged exception this would be the source line where the - // exception is logged, usually close to the place where it was - // caught. - SourceLocation report_location = 3; -} - -// HTTP request data that is related to a reported error. -// This data should be provided by the application when reporting an error, -// unless the -// error report has been generated automatically from Google App Engine logs. -message HttpRequestContext { - // The type of HTTP request, such as `GET`, `POST`, etc. - string method = 1; - - // The URL of the request. - string url = 2; - - // The user agent information that is provided with the request. - string user_agent = 3; - - // The referrer information that is provided with the request. - string referrer = 4; - - // The HTTP response status code for the request. - int32 response_status_code = 5; - - // The IP address from which the request originated. - // This can be IPv4, IPv6, or a token which is derived from the - // IP address, depending on the data that has been provided - // in the error report. - string remote_ip = 6; -} - -// Indicates a location in the source code of the service for which errors are -// reported. `functionName` must be provided by the application when reporting -// an error, unless the error report contains a `message` with a supported -// exception stack trace. All fields are optional for the later case. -message SourceLocation { - // The source code filename, which can include a truncated relative - // path, or a full path from a production machine. - string file_path = 1; - - // 1-based. 0 indicates that the line number is unknown. - int32 line_number = 2; - - // Human-readable name of a function or method. - // The value can include optional context like the class or package name. - // For example, `my.package.MyClass.method` in case of Java. - string function_name = 4; -} - -// Resolution status of an error group. -enum ResolutionStatus { - // Status is unknown. When left unspecified in requests, it is treated like - // OPEN. - RESOLUTION_STATUS_UNSPECIFIED = 0; - - // The error group is not being addressed. This is the default for - // new groups. It is also used for errors re-occurring after marked RESOLVED. - OPEN = 1; - - // Error Group manually acknowledged, it can have an issue link attached. - ACKNOWLEDGED = 2; - - // Error Group manually resolved, more events for this group are not expected - // to occur. - RESOLVED = 3; - - // The error group is muted and excluded by default on group stats requests. - MUTED = 4; -} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto deleted file mode 100644 index 0104b62d3cca..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service.proto +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2021 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. - -syntax = "proto3"; - -package google.devtools.clouderrorreporting.v1beta1; - -import "google/api/annotations.proto"; -import "google/api/client.proto"; -import "google/api/field_behavior.proto"; -import "google/api/resource.proto"; -import "google/devtools/clouderrorreporting/v1beta1/common.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; -option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; -option java_multiple_files = true; -option java_outer_classname = "ErrorGroupServiceProto"; -option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; -option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; -option ruby_package = "Google::Cloud::ErrorReporting::V1beta1"; - -// Service for retrieving and updating individual error groups. -service ErrorGroupService { - option (google.api.default_host) = "clouderrorreporting.googleapis.com"; - option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; - - // Get the specified group. - rpc GetGroup(GetGroupRequest) returns (ErrorGroup) { - option (google.api.http) = { - get: "/v1beta1/{group_name=projects/*/groups/*}" - }; - option (google.api.method_signature) = "group_name"; - } - - // Replace the data for the specified group. - // Fails if the group does not exist. - rpc UpdateGroup(UpdateGroupRequest) returns (ErrorGroup) { - option (google.api.http) = { - put: "/v1beta1/{group.name=projects/*/groups/*}" - body: "group" - }; - option (google.api.method_signature) = "group"; - } -} - -// A request to return an individual group. -message GetGroupRequest { - // Required. The group resource name. Written as - // `projects/{projectID}/groups/{group_name}`. Call - // [`groupStats.list`](https://cloud.google.com/error-reporting/reference/rest/v1beta1/projects.groupStats/list) - // to return a list of groups belonging to this project. - // - // Example: `projects/my-project-123/groups/my-group` - string group_name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "clouderrorreporting.googleapis.com/ErrorGroup" - } - ]; -} - -// A request to replace the existing data for the given group. -message UpdateGroupRequest { - // Required. The group which replaces the resource on the server. - ErrorGroup group = 1 [(google.api.field_behavior) = REQUIRED]; -} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto deleted file mode 100644 index 6c62edd9eee1..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service.proto +++ /dev/null @@ -1,376 +0,0 @@ -// Copyright 2021 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. - -syntax = "proto3"; - -package google.devtools.clouderrorreporting.v1beta1; - -import "google/api/annotations.proto"; -import "google/api/client.proto"; -import "google/api/field_behavior.proto"; -import "google/api/resource.proto"; -import "google/devtools/clouderrorreporting/v1beta1/common.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/timestamp.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; -option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; -option java_multiple_files = true; -option java_outer_classname = "ErrorStatsServiceProto"; -option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; -option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; -option ruby_package = "Google::Cloud::ErrorReporting::V1beta1"; - -// An API for retrieving and managing error statistics as well as data for -// individual events. -service ErrorStatsService { - option (google.api.default_host) = "clouderrorreporting.googleapis.com"; - option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; - - // Lists the specified groups. - rpc ListGroupStats(ListGroupStatsRequest) returns (ListGroupStatsResponse) { - option (google.api.http) = { - get: "/v1beta1/{project_name=projects/*}/groupStats" - }; - option (google.api.method_signature) = "project_name,time_range"; - } - - // Lists the specified events. - rpc ListEvents(ListEventsRequest) returns (ListEventsResponse) { - option (google.api.http) = { - get: "/v1beta1/{project_name=projects/*}/events" - }; - option (google.api.method_signature) = "project_name,group_id"; - } - - // Deletes all error events of a given project. - rpc DeleteEvents(DeleteEventsRequest) returns (DeleteEventsResponse) { - option (google.api.http) = { - delete: "/v1beta1/{project_name=projects/*}/events" - }; - option (google.api.method_signature) = "project_name"; - } -} - -// Specifies a set of `ErrorGroupStats` to return. -message ListGroupStatsRequest { - // Required. The resource name of the Google Cloud Platform project. Written - // as `projects/{projectID}` or `projects/{projectNumber}`, where `{projectID}` - // and `{projectNumber}` can be found in the - // [Google Cloud Console](https://support.google.com/cloud/answer/6158840). - // - // Examples: `projects/my-project-123`, `projects/5551234`. - string project_name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "cloudresourcemanager.googleapis.com/Project" - } - ]; - - // Optional. List all ErrorGroupStats with these IDs. - repeated string group_id = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. List only ErrorGroupStats which belong to a service - // context that matches the filter. - // Data for all service contexts is returned if this field is not specified. - ServiceContextFilter service_filter = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. List data for the given time range. - // If not set, a default time range is used. The field - // time_range_begin in the response will specify the beginning - // of this time range. - // Only ErrorGroupStats with a non-zero count in the given time - // range are returned, unless the request contains an explicit - // group_id list. If a group_id list is given, also - // ErrorGroupStats with zero occurrences are returned. - QueryTimeRange time_range = 5 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The preferred duration for a single returned `TimedCount`. - // If not set, no timed counts are returned. - google.protobuf.Duration timed_count_duration = 6 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The alignment of the timed counts to be returned. - // Default is `ALIGNMENT_EQUAL_AT_END`. - TimedCountAlignment alignment = 7 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Time where the timed counts shall be aligned if rounded - // alignment is chosen. Default is 00:00 UTC. - google.protobuf.Timestamp alignment_time = 8 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The sort order in which the results are returned. - // Default is `COUNT_DESC`. - ErrorGroupOrder order = 9 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The maximum number of results to return per response. - // Default is 20. - int32 page_size = 11 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A `next_page_token` provided by a previous response. To view - // additional results, pass this token along with the identical query - // parameters as the first request. - string page_token = 12 [(google.api.field_behavior) = OPTIONAL]; -} - -// Contains a set of requested error group stats. -message ListGroupStatsResponse { - // The error group stats which match the given request. - repeated ErrorGroupStats error_group_stats = 1; - - // If non-empty, more results are available. - // Pass this token, along with the same query parameters as the first - // request, to view the next page of results. - string next_page_token = 2; - - // The timestamp specifies the start time to which the request was restricted. - // The start time is set based on the requested time range. It may be adjusted - // to a later time if a project has exceeded the storage quota and older data - // has been deleted. - google.protobuf.Timestamp time_range_begin = 4; -} - -// Data extracted for a specific group based on certain filter criteria, -// such as a given time period and/or service filter. -message ErrorGroupStats { - // Group data that is independent of the filter criteria. - ErrorGroup group = 1; - - // Approximate total number of events in the given group that match - // the filter criteria. - int64 count = 2; - - // Approximate number of affected users in the given group that - // match the filter criteria. - // Users are distinguished by data in the `ErrorContext` of the - // individual error events, such as their login name or their remote - // IP address in case of HTTP requests. - // The number of affected users can be zero even if the number of - // errors is non-zero if no data was provided from which the - // affected user could be deduced. - // Users are counted based on data in the request - // context that was provided in the error report. If more users are - // implicitly affected, such as due to a crash of the whole service, - // this is not reflected here. - int64 affected_users_count = 3; - - // Approximate number of occurrences over time. - // Timed counts returned by ListGroups are guaranteed to be: - // - // - Inside the requested time interval - // - Non-overlapping, and - // - Ordered by ascending time. - repeated TimedCount timed_counts = 4; - - // Approximate first occurrence that was ever seen for this group - // and which matches the given filter criteria, ignoring the - // time_range that was specified in the request. - google.protobuf.Timestamp first_seen_time = 5; - - // Approximate last occurrence that was ever seen for this group and - // which matches the given filter criteria, ignoring the time_range - // that was specified in the request. - google.protobuf.Timestamp last_seen_time = 6; - - // Service contexts with a non-zero error count for the given filter - // criteria. This list can be truncated if multiple services are affected. - // Refer to `num_affected_services` for the total count. - repeated ServiceContext affected_services = 7; - - // The total number of services with a non-zero error count for the given - // filter criteria. - int32 num_affected_services = 8; - - // An arbitrary event that is chosen as representative for the whole group. - // The representative event is intended to be used as a quick preview for - // the whole group. Events in the group are usually sufficiently similar - // to each other such that showing an arbitrary representative provides - // insight into the characteristics of the group as a whole. - ErrorEvent representative = 9; -} - -// The number of errors in a given time period. -// All numbers are approximate since the error events are sampled -// before counting them. -message TimedCount { - // Approximate number of occurrences in the given time period. - int64 count = 1; - - // Start of the time period to which `count` refers (included). - google.protobuf.Timestamp start_time = 2; - - // End of the time period to which `count` refers (excluded). - google.protobuf.Timestamp end_time = 3; -} - -// Specifies how the time periods of error group counts are aligned. -enum TimedCountAlignment { - // No alignment specified. - ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0; - - // The time periods shall be consecutive, have width equal to the - // requested duration, and be aligned at the `alignment_time` provided in - // the request. - // The `alignment_time` does not have to be inside the query period but - // even if it is outside, only time periods are returned which overlap - // with the query period. - // A rounded alignment will typically result in a - // different size of the first or the last time period. - ALIGNMENT_EQUAL_ROUNDED = 1; - - // The time periods shall be consecutive, have width equal to the - // requested duration, and be aligned at the end of the requested time - // period. This can result in a different size of the - // first time period. - ALIGNMENT_EQUAL_AT_END = 2; -} - -// A sorting order of error groups. -enum ErrorGroupOrder { - // No group order specified. - GROUP_ORDER_UNSPECIFIED = 0; - - // Total count of errors in the given time window in descending order. - COUNT_DESC = 1; - - // Timestamp when the group was last seen in the given time window - // in descending order. - LAST_SEEN_DESC = 2; - - // Timestamp when the group was created in descending order. - CREATED_DESC = 3; - - // Number of affected users in the given time window in descending order. - AFFECTED_USERS_DESC = 4; -} - -// Specifies a set of error events to return. -message ListEventsRequest { - // Required. The resource name of the Google Cloud Platform project. Written - // as `projects/{projectID}`, where `{projectID}` is the - // [Google Cloud Platform project - // ID](https://support.google.com/cloud/answer/6158840). - // - // Example: `projects/my-project-123`. - string project_name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "cloudresourcemanager.googleapis.com/Project" - } - ]; - - // Required. The group for which events shall be returned. - string group_id = 2 [(google.api.field_behavior) = REQUIRED]; - - // Optional. List only ErrorGroups which belong to a service context that - // matches the filter. - // Data for all service contexts is returned if this field is not specified. - ServiceContextFilter service_filter = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. List only data for the given time range. - // If not set a default time range is used. The field time_range_begin - // in the response will specify the beginning of this time range. - QueryTimeRange time_range = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The maximum number of results to return per response. - int32 page_size = 6 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A `next_page_token` provided by a previous response. - string page_token = 7 [(google.api.field_behavior) = OPTIONAL]; -} - -// Contains a set of requested error events. -message ListEventsResponse { - // The error events which match the given request. - repeated ErrorEvent error_events = 1; - - // If non-empty, more results are available. - // Pass this token, along with the same query parameters as the first - // request, to view the next page of results. - string next_page_token = 2; - - // The timestamp specifies the start time to which the request was restricted. - google.protobuf.Timestamp time_range_begin = 4; -} - -// Requests might be rejected or the resulting timed count durations might be -// adjusted for lower durations. -message QueryTimeRange { - // The supported time ranges. - enum Period { - // Do not use. - PERIOD_UNSPECIFIED = 0; - - // Retrieve data for the last hour. - // Recommended minimum timed count duration: 1 min. - PERIOD_1_HOUR = 1; - - // Retrieve data for the last 6 hours. - // Recommended minimum timed count duration: 10 min. - PERIOD_6_HOURS = 2; - - // Retrieve data for the last day. - // Recommended minimum timed count duration: 1 hour. - PERIOD_1_DAY = 3; - - // Retrieve data for the last week. - // Recommended minimum timed count duration: 6 hours. - PERIOD_1_WEEK = 4; - - // Retrieve data for the last 30 days. - // Recommended minimum timed count duration: 1 day. - PERIOD_30_DAYS = 5; - } - - // Restricts the query to the specified time range. - Period period = 1; -} - -// Specifies criteria for filtering a subset of service contexts. -// The fields in the filter correspond to the fields in `ServiceContext`. -// Only exact, case-sensitive matches are supported. -// If a field is unset or empty, it matches arbitrary values. -message ServiceContextFilter { - // Optional. The exact value to match against - // [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service). - string service = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The exact value to match against - // [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version). - string version = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The exact value to match against - // [`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type). - string resource_type = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -// Deletes all events in the project. -message DeleteEventsRequest { - // Required. The resource name of the Google Cloud Platform project. Written - // as `projects/{projectID}`, where `{projectID}` is the - // [Google Cloud Platform project - // ID](https://support.google.com/cloud/answer/6158840). - // - // Example: `projects/my-project-123`. - string project_name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "cloudresourcemanager.googleapis.com/Project" - } - ]; -} - -// Response message for deleting error events. -message DeleteEventsResponse { - -} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto deleted file mode 100644 index cd1e5100b3c2..000000000000 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/proto/report_errors_service.proto +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2021 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. - -syntax = "proto3"; - -package google.devtools.clouderrorreporting.v1beta1; - -import "google/api/annotations.proto"; -import "google/api/client.proto"; -import "google/api/field_behavior.proto"; -import "google/api/resource.proto"; -import "google/devtools/clouderrorreporting/v1beta1/common.proto"; -import "google/protobuf/timestamp.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.Cloud.ErrorReporting.V1Beta1"; -option go_package = "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1;clouderrorreporting"; -option java_multiple_files = true; -option java_outer_classname = "ReportErrorsServiceProto"; -option java_package = "com.google.devtools.clouderrorreporting.v1beta1"; -option php_namespace = "Google\\Cloud\\ErrorReporting\\V1beta1"; -option ruby_package = "Google::Cloud::ErrorReporting::V1beta1"; - -// An API for reporting error events. -service ReportErrorsService { - option (google.api.default_host) = "clouderrorreporting.googleapis.com"; - option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; - - // Report an individual error event and record the event to a log. - // - // This endpoint accepts **either** an OAuth token, - // **or** an [API key](https://support.google.com/cloud/answer/6158862) - // for authentication. To use an API key, append it to the URL as the value of - // a `key` parameter. For example: - // - // `POST - // https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456` - // - // **Note:** [Error Reporting](/error-reporting) is a global service built - // on Cloud Logging and doesn't analyze logs stored - // in regional log buckets or logs routed to other Google Cloud projects. - // - // For more information, see - // [Using Error Reporting with regionalized - // logs](/error-reporting/docs/regionalization). - rpc ReportErrorEvent(ReportErrorEventRequest) returns (ReportErrorEventResponse) { - option (google.api.http) = { - post: "/v1beta1/{project_name=projects/*}/events:report" - body: "event" - }; - option (google.api.method_signature) = "project_name,event"; - } -} - -// A request for reporting an individual error event. -message ReportErrorEventRequest { - // Required. The resource name of the Google Cloud Platform project. Written - // as `projects/{projectId}`, where `{projectId}` is the - // [Google Cloud Platform project - // ID](https://support.google.com/cloud/answer/6158840). - // - // Example: // `projects/my-project-123`. - string project_name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "cloudresourcemanager.googleapis.com/Project" - } - ]; - - // Required. The error event to be reported. - ReportedErrorEvent event = 2 [(google.api.field_behavior) = REQUIRED]; -} - -// Response for reporting an individual error event. -// Data may be added to this message in the future. -message ReportErrorEventResponse { - -} - -// An error event which is reported to the Error Reporting system. -message ReportedErrorEvent { - // Optional. Time when the event occurred. - // If not provided, the time when the event was received by the - // Error Reporting system will be used. - google.protobuf.Timestamp event_time = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Required. The service context in which this error has occurred. - ServiceContext service_context = 2 [(google.api.field_behavior) = REQUIRED]; - - // Required. The error message. - // If no `context.reportLocation` is provided, the message must contain a - // header (typically consisting of the exception type name and an error - // message) and an exception stack trace in one of the supported programming - // languages and formats. - // Supported languages are Java, Python, JavaScript, Ruby, C#, PHP, and Go. - // Supported stack trace formats are: - // - // * **Java**: Must be the return value of - // [`Throwable.printStackTrace()`](https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#printStackTrace%28%29). - // * **Python**: Must be the return value of - // [`traceback.format_exc()`](https://docs.python.org/2/library/traceback.html#traceback.format_exc). - // * **JavaScript**: Must be the value of - // [`error.stack`](https://github.com/v8/v8/wiki/Stack-Trace-API) as returned - // by V8. - // * **Ruby**: Must contain frames returned by - // [`Exception.backtrace`](https://ruby-doc.org/core-2.2.0/Exception.html#method-i-backtrace). - // * **C#**: Must be the return value of - // [`Exception.ToString()`](https://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx). - // * **PHP**: Must start with `PHP (Notice|Parse error|Fatal error|Warning)` - // and contain the result of - // [`(string)$exception`](http://php.net/manual/en/exception.tostring.php). - // * **Go**: Must be the return value of - // [`runtime.Stack()`](https://golang.org/pkg/runtime/debug/#Stack). - string message = 3 [(google.api.field_behavior) = REQUIRED]; - - // Optional. A description of the context in which the error occurred. - ErrorContext context = 4 [(google.api.field_behavior) = OPTIONAL]; -} From 758a84e2e0aab73a22dda6dc37bcd0e9ef264f05 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Wed, 16 Jun 2021 10:20:02 -0600 Subject: [PATCH 235/467] fix(deps): widen version range on google-cloud-logging (#133) In response to https://github.com/GoogleCloudPlatform/getting-started-python/pull/361 and https://github.com/GoogleCloudPlatform/getting-started-python/issues/357. Given the libraries adhere to semantic versioning it should be fine to use `google-cloud-logging<3.0.0dev`. --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index ccbaaddfbb83..c13dff4962c1 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" dependencies = [ - "google-cloud-logging>=1.14.0, <2.5", + "google-cloud-logging>=1.14.0, <3.0.0dev", "google-api-core[grpc] >= 1.22.2, < 2.0.0dev", "proto-plus >= 1.4.0", "packaging >= 14.3", From 979507eb0978215cf0b505d558943a9c2854235c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 17 Jun 2021 10:52:13 +0000 Subject: [PATCH 236/467] chore: new owl bot post processor docker image (#136) Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:58c7342b0bccf85028100adaa3d856cb4a871c22ca9c01960d996e66c40548ce --- .../.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/docs/conf.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index da616c91a3b6..ea06d395ea2b 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:c66ba3c8d7bc8566f47df841f98cd0097b28fff0b1864c86f5817f4c8c3e8600 + digest: sha256:58c7342b0bccf85028100adaa3d856cb4a871c22ca9c01960d996e66c40548ce diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 30ece8f00422..f16aa8187079 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -80,9 +80,9 @@ master_doc = "index" # General information about the project. -project = u"google-cloud-error-reporting" -copyright = u"2019, Google" -author = u"Google APIs" +project = "google-cloud-error-reporting" +copyright = "2019, Google" +author = "Google APIs" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -281,7 +281,7 @@ ( master_doc, "google-cloud-error-reporting.tex", - u"google-cloud-error-reporting Documentation", + "google-cloud-error-reporting Documentation", author, "manual", ) @@ -316,7 +316,7 @@ ( master_doc, "google-cloud-error-reporting", - u"google-cloud-error-reporting Documentation", + "google-cloud-error-reporting Documentation", [author], 1, ) @@ -335,7 +335,7 @@ ( master_doc, "google-cloud-error-reporting", - u"google-cloud-error-reporting Documentation", + "google-cloud-error-reporting Documentation", author, "google-cloud-error-reporting", "google-cloud-error-reporting Library", From 568049458a7239831364d2eb43b75614b111b818 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 19 Jun 2021 02:00:08 +0000 Subject: [PATCH 237/467] docs: omit mention of Python 2.7 in 'CONTRIBUTING.rst' (#1127) (#137) Source-Link: https://github.com/googleapis/synthtool/commit/b91f129527853d5b756146a0b5044481fb4e09a8 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:b6169fc6a5207b11800a7c002d0c5c2bc6d82697185ca12e666f44031468cfcd --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/CONTRIBUTING.rst | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index ea06d395ea2b..cc49c6a3dfac 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:58c7342b0bccf85028100adaa3d856cb4a871c22ca9c01960d996e66c40548ce + digest: sha256:b6169fc6a5207b11800a7c002d0c5c2bc6d82697185ca12e666f44031468cfcd diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 854e602d3e8a..3c5dc48ab75e 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -69,7 +69,6 @@ We use `nox `__ to instrument our tests. - To test your changes, run unit tests with ``nox``:: - $ nox -s unit-2.7 $ nox -s unit-3.8 $ ... @@ -144,7 +143,6 @@ Running System Tests # Run all system tests $ nox -s system-3.8 - $ nox -s system-2.7 # Run a single system test $ nox -s system-3.8 -- -k @@ -152,9 +150,8 @@ Running System Tests .. note:: - System tests are only configured to run under Python 2.7 and - Python 3.8. For expediency, we do not run them in older versions - of Python 3. + System tests are only configured to run under Python 3.8. + For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local auth settings and change some configuration in your project to From 0c6c18be16d0be504f46f9b9261e702378360fd3 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sun, 20 Jun 2021 01:00:09 +0000 Subject: [PATCH 238/467] chore: update precommit hook pre-commit/pre-commit-hooks to v4 (#1083) (#138) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [pre-commit/pre-commit-hooks](https://togithub.com/pre-commit/pre-commit-hooks) | repository | major | `v3.4.0` -> `v4.0.1` | --- ### Release Notes
pre-commit/pre-commit-hooks ### [`v4.0.1`](https://togithub.com/pre-commit/pre-commit-hooks/releases/v4.0.1) [Compare Source](https://togithub.com/pre-commit/pre-commit-hooks/compare/v4.0.0...v4.0.1) ##### Fixes - `check-shebang-scripts-are-executable` fix entry point. - [#​602](https://togithub.com/pre-commit/pre-commit-hooks/issues/602) issue by [@​Person-93](https://togithub.com/Person-93). - [#​603](https://togithub.com/pre-commit/pre-commit-hooks/issues/603) PR by [@​scop](https://togithub.com/scop). ### [`v4.0.0`](https://togithub.com/pre-commit/pre-commit-hooks/releases/v4.0.0) [Compare Source](https://togithub.com/pre-commit/pre-commit-hooks/compare/v3.4.0...v4.0.0) ##### Features - `check-json`: report duplicate keys. - [#​558](https://togithub.com/pre-commit/pre-commit-hooks/issues/558) PR by [@​AdityaKhursale](https://togithub.com/AdityaKhursale). - [#​554](https://togithub.com/pre-commit/pre-commit-hooks/issues/554) issue by [@​adamchainz](https://togithub.com/adamchainz). - `no-commit-to-branch`: add `main` to default blocked branches. - [#​565](https://togithub.com/pre-commit/pre-commit-hooks/issues/565) PR by [@​ndevenish](https://togithub.com/ndevenish). - `check-case-conflict`: check conflicts in directory names as well. - [#​575](https://togithub.com/pre-commit/pre-commit-hooks/issues/575) PR by [@​slsyy](https://togithub.com/slsyy). - [#​70](https://togithub.com/pre-commit/pre-commit-hooks/issues/70) issue by [@​andyjack](https://togithub.com/andyjack). - `check-vcs-permalinks`: forbid other branch names. - [#​582](https://togithub.com/pre-commit/pre-commit-hooks/issues/582) PR by [@​jack1142](https://togithub.com/jack1142). - [#​581](https://togithub.com/pre-commit/pre-commit-hooks/issues/581) issue by [@​jack1142](https://togithub.com/jack1142). - `check-shebang-scripts-are-executable`: new hook which ensures shebang'd scripts are executable. - [#​545](https://togithub.com/pre-commit/pre-commit-hooks/issues/545) PR by [@​scop](https://togithub.com/scop). ##### Fixes - `check-executables-have-shebangs`: Short circuit shebang lookup on windows. - [#​544](https://togithub.com/pre-commit/pre-commit-hooks/issues/544) PR by [@​scop](https://togithub.com/scop). - `requirements-txt-fixer`: Fix comments which have indentation - [#​549](https://togithub.com/pre-commit/pre-commit-hooks/issues/549) PR by [@​greshilov](https://togithub.com/greshilov). - [#​548](https://togithub.com/pre-commit/pre-commit-hooks/issues/548) issue by [@​greshilov](https://togithub.com/greshilov). - `pretty-format-json`: write to stdout using UTF-8 encoding. - [#​571](https://togithub.com/pre-commit/pre-commit-hooks/issues/571) PR by [@​jack1142](https://togithub.com/jack1142). - [#​570](https://togithub.com/pre-commit/pre-commit-hooks/issues/570) issue by [@​jack1142](https://togithub.com/jack1142). - Use more inclusive language. - [#​599](https://togithub.com/pre-commit/pre-commit-hooks/issues/599) PR by [@​asottile](https://togithub.com/asottile). ##### Breaking changes - Remove deprecated hooks: `flake8`, `pyflakes`, `autopep8-wrapper`. - [#​597](https://togithub.com/pre-commit/pre-commit-hooks/issues/597) PR by [@​asottile](https://togithub.com/asottile).
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/synthtool). Source-Link: https://github.com/googleapis/synthtool/commit/333fd90856f1454380514bc59fc0936cdaf1c202 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:b8c131c558606d3cea6e18f8e87befbd448c1482319b0db3c5d5388fa6ea72e3 --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/.pre-commit-config.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index cc49c6a3dfac..9602d540595e 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:b6169fc6a5207b11800a7c002d0c5c2bc6d82697185ca12e666f44031468cfcd + digest: sha256:b8c131c558606d3cea6e18f8e87befbd448c1482319b0db3c5d5388fa6ea72e3 diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 4f00c7cffcfd..62eb5a77d9a3 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -16,7 +16,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v3.4.0 + rev: v4.0.1 hooks: - id: trailing-whitespace - id: end-of-file-fixer From 81c18380dd56e8e1cf8f889d5e7b196ecb777235 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 22 Jun 2021 18:30:17 +0000 Subject: [PATCH 239/467] chore: add kokoro 3.9 config templates (#139) Source-Link: https://github.com/googleapis/synthtool/commit/b0eb8a8b30b46a3c98d23c23107acb748c6601a1 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:df50e8d462f86d6bcb42f27ecad55bb12c404f1c65de9c6fe4c4d25120080bd6 --- .../.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/samples/python3.9/common.cfg | 40 +++++++++++++++++++ .../.kokoro/samples/python3.9/continuous.cfg | 6 +++ .../samples/python3.9/periodic-head.cfg | 11 +++++ .../.kokoro/samples/python3.9/periodic.cfg | 6 +++ .../.kokoro/samples/python3.9/presubmit.cfg | 6 +++ 6 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/presubmit.cfg diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 9602d540595e..0954585f2833 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:b8c131c558606d3cea6e18f8e87befbd448c1482319b0db3c5d5388fa6ea72e3 + digest: sha256:df50e8d462f86d6bcb42f27ecad55bb12c404f1c65de9c6fe4c4d25120080bd6 diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg new file mode 100644 index 000000000000..4b7faa7ca6e3 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg @@ -0,0 +1,40 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.9" +} + +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-py39" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg new file mode 100644 index 000000000000..f9cfcd33e058 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg new file mode 100644 index 000000000000..50fec9649732 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file From 07bd3dd48a45159be401f6995d7942f316f35490 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 23 Jun 2021 20:24:36 +0000 Subject: [PATCH 240/467] feat: add always_use_jwt_access (#140) ... chore: update gapic-generator-ruby to the latest commit chore: release gapic-generator-typescript 1.5.0 Committer: @miraleung PiperOrigin-RevId: 380641501 Source-Link: https://github.com/googleapis/googleapis/commit/076f7e9f0b258bdb54338895d7251b202e8f0de3 Source-Link: https://github.com/googleapis/googleapis-gen/commit/27e4c88b4048e5f56508d4e1aa417d60a3380892 --- .../google-cloud-error-reporting/.coveragerc | 1 - .../error_group_service/transports/base.py | 40 +++---- .../error_group_service/transports/grpc.py | 7 +- .../transports/grpc_asyncio.py | 7 +- .../error_stats_service/transports/base.py | 40 +++---- .../error_stats_service/transports/grpc.py | 7 +- .../transports/grpc_asyncio.py | 7 +- .../report_errors_service/transports/base.py | 40 +++---- .../report_errors_service/transports/grpc.py | 7 +- .../transports/grpc_asyncio.py | 7 +- .../google-cloud-error-reporting/setup.py | 2 +- .../testing/constraints-3.6.txt | 2 +- .../test_error_group_service.py | 104 +++--------------- .../test_error_stats_service.py | 104 +++--------------- .../test_report_errors_service.py | 104 +++--------------- 15 files changed, 113 insertions(+), 366 deletions(-) diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc index 9a9b9f3e44cb..f72fce1e0742 100644 --- a/packages/google-cloud-error-reporting/.coveragerc +++ b/packages/google-cloud-error-reporting/.coveragerc @@ -2,7 +2,6 @@ branch = True [report] -fail_under = 100 show_missing = True omit = google/cloud/errorreporting/__init__.py diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 4265e49d4d31..b49bdd7fbdb0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -24,6 +24,7 @@ from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service @@ -46,8 +47,6 @@ except pkg_resources.DistributionNotFound: # pragma: NO COVER _GOOGLE_AUTH_VERSION = None -_API_CORE_VERSION = google.api_core.__version__ - class ErrorGroupServiceTransport(abc.ABC): """Abstract transport class for ErrorGroupService.""" @@ -65,6 +64,7 @@ def __init__( scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, **kwargs, ) -> None: """Instantiate the transport. @@ -88,6 +88,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. """ # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: @@ -116,13 +118,20 @@ def __init__( **scopes_kwargs, quota_project_id=quota_project_id ) + # If the credentials is service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + # Save the credentials. self._credentials = credentials - # TODO(busunkim): These two class methods are in the base transport + # TODO(busunkim): This method is in the base transport # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-api-core - # and google-auth are increased. + # should be deleted once the minimum required versions of google-auth is increased. # TODO: Remove this function once google-auth >= 1.25.0 is required @classmethod @@ -143,27 +152,6 @@ def _get_scopes_kwargs( return scopes_kwargs - # TODO: Remove this function once google-api-core >= 1.26.0 is required - @classmethod - def _get_self_signed_jwt_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Union[Optional[Sequence[str]], str]]: - """Returns kwargs to pass to grpc_helpers.create_channel depending on the google-api-core version""" - - self_signed_jwt_kwargs: Dict[str, Union[Optional[Sequence[str]], str]] = {} - - if _API_CORE_VERSION and ( - packaging.version.parse(_API_CORE_VERSION) - >= packaging.version.parse("1.26.0") - ): - self_signed_jwt_kwargs["default_scopes"] = cls.AUTH_SCOPES - self_signed_jwt_kwargs["scopes"] = scopes - self_signed_jwt_kwargs["default_host"] = cls.DEFAULT_HOST - else: - self_signed_jwt_kwargs["scopes"] = scopes or cls.AUTH_SCOPES - - return self_signed_jwt_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 345cbf36eb06..94037f6d5074 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -150,6 +150,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, + always_use_jwt_access=True, ) if not self._grpc_channel: @@ -205,14 +206,14 @@ def create_channel( and ``credentials_file`` are passed. """ - self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) - return grpc_helpers.create_channel( host, credentials=credentials, credentials_file=credentials_file, quota_project_id=quota_project_id, - **self_signed_jwt_kwargs, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, **kwargs, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index e2e46cdeca4e..afb1e769802e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -79,14 +79,14 @@ def create_channel( aio.Channel: A gRPC AsyncIO channel object. """ - self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) - return grpc_helpers_async.create_channel( host, credentials=credentials, credentials_file=credentials_file, quota_project_id=quota_project_id, - **self_signed_jwt_kwargs, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, **kwargs, ) @@ -196,6 +196,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, + always_use_jwt_access=True, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 19a980780e01..6400a8523214 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -24,6 +24,7 @@ from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -45,8 +46,6 @@ except pkg_resources.DistributionNotFound: # pragma: NO COVER _GOOGLE_AUTH_VERSION = None -_API_CORE_VERSION = google.api_core.__version__ - class ErrorStatsServiceTransport(abc.ABC): """Abstract transport class for ErrorStatsService.""" @@ -64,6 +63,7 @@ def __init__( scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, **kwargs, ) -> None: """Instantiate the transport. @@ -87,6 +87,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. """ # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: @@ -115,13 +117,20 @@ def __init__( **scopes_kwargs, quota_project_id=quota_project_id ) + # If the credentials is service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + # Save the credentials. self._credentials = credentials - # TODO(busunkim): These two class methods are in the base transport + # TODO(busunkim): This method is in the base transport # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-api-core - # and google-auth are increased. + # should be deleted once the minimum required versions of google-auth is increased. # TODO: Remove this function once google-auth >= 1.25.0 is required @classmethod @@ -142,27 +151,6 @@ def _get_scopes_kwargs( return scopes_kwargs - # TODO: Remove this function once google-api-core >= 1.26.0 is required - @classmethod - def _get_self_signed_jwt_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Union[Optional[Sequence[str]], str]]: - """Returns kwargs to pass to grpc_helpers.create_channel depending on the google-api-core version""" - - self_signed_jwt_kwargs: Dict[str, Union[Optional[Sequence[str]], str]] = {} - - if _API_CORE_VERSION and ( - packaging.version.parse(_API_CORE_VERSION) - >= packaging.version.parse("1.26.0") - ): - self_signed_jwt_kwargs["default_scopes"] = cls.AUTH_SCOPES - self_signed_jwt_kwargs["scopes"] = scopes - self_signed_jwt_kwargs["default_host"] = cls.DEFAULT_HOST - else: - self_signed_jwt_kwargs["scopes"] = scopes or cls.AUTH_SCOPES - - return self_signed_jwt_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 166a3cc6fdc0..e4d1a6f15a3f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -150,6 +150,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, + always_use_jwt_access=True, ) if not self._grpc_channel: @@ -205,14 +206,14 @@ def create_channel( and ``credentials_file`` are passed. """ - self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) - return grpc_helpers.create_channel( host, credentials=credentials, credentials_file=credentials_file, quota_project_id=quota_project_id, - **self_signed_jwt_kwargs, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, **kwargs, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index acb625d48aa9..6f775deff5a2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -79,14 +79,14 @@ def create_channel( aio.Channel: A gRPC AsyncIO channel object. """ - self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) - return grpc_helpers_async.create_channel( host, credentials=credentials, credentials_file=credentials_file, quota_project_id=quota_project_id, - **self_signed_jwt_kwargs, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, **kwargs, ) @@ -196,6 +196,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, + always_use_jwt_access=True, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index efda0c8b6def..6a6ba55cc24a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -24,6 +24,7 @@ from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service @@ -45,8 +46,6 @@ except pkg_resources.DistributionNotFound: # pragma: NO COVER _GOOGLE_AUTH_VERSION = None -_API_CORE_VERSION = google.api_core.__version__ - class ReportErrorsServiceTransport(abc.ABC): """Abstract transport class for ReportErrorsService.""" @@ -64,6 +63,7 @@ def __init__( scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, **kwargs, ) -> None: """Instantiate the transport. @@ -87,6 +87,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. """ # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: @@ -115,13 +117,20 @@ def __init__( **scopes_kwargs, quota_project_id=quota_project_id ) + # If the credentials is service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + # Save the credentials. self._credentials = credentials - # TODO(busunkim): These two class methods are in the base transport + # TODO(busunkim): This method is in the base transport # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-api-core - # and google-auth are increased. + # should be deleted once the minimum required versions of google-auth is increased. # TODO: Remove this function once google-auth >= 1.25.0 is required @classmethod @@ -142,27 +151,6 @@ def _get_scopes_kwargs( return scopes_kwargs - # TODO: Remove this function once google-api-core >= 1.26.0 is required - @classmethod - def _get_self_signed_jwt_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Union[Optional[Sequence[str]], str]]: - """Returns kwargs to pass to grpc_helpers.create_channel depending on the google-api-core version""" - - self_signed_jwt_kwargs: Dict[str, Union[Optional[Sequence[str]], str]] = {} - - if _API_CORE_VERSION and ( - packaging.version.parse(_API_CORE_VERSION) - >= packaging.version.parse("1.26.0") - ): - self_signed_jwt_kwargs["default_scopes"] = cls.AUTH_SCOPES - self_signed_jwt_kwargs["scopes"] = scopes - self_signed_jwt_kwargs["default_host"] = cls.DEFAULT_HOST - else: - self_signed_jwt_kwargs["scopes"] = scopes or cls.AUTH_SCOPES - - return self_signed_jwt_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 93a43e9839bd..8f4024da0af2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -149,6 +149,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, + always_use_jwt_access=True, ) if not self._grpc_channel: @@ -204,14 +205,14 @@ def create_channel( and ``credentials_file`` are passed. """ - self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) - return grpc_helpers.create_channel( host, credentials=credentials, credentials_file=credentials_file, quota_project_id=quota_project_id, - **self_signed_jwt_kwargs, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, **kwargs, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 3ad1e8688ff3..acbe98be6039 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -78,14 +78,14 @@ def create_channel( aio.Channel: A gRPC AsyncIO channel object. """ - self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes) - return grpc_helpers_async.create_channel( host, credentials=credentials, credentials_file=credentials_file, quota_project_id=quota_project_id, - **self_signed_jwt_kwargs, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, **kwargs, ) @@ -195,6 +195,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, + always_use_jwt_access=True, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index c13dff4962c1..7583b55e6b02 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -30,7 +30,7 @@ release_status = "Development Status :: 4 - Beta" dependencies = [ "google-cloud-logging>=1.14.0, <3.0.0dev", - "google-api-core[grpc] >= 1.22.2, < 2.0.0dev", + "google-api-core[grpc] >= 1.26.0, <2.0.0dev", "proto-plus >= 1.4.0", "packaging >= 14.3", ] diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt index 39a8e993bc1a..9e25b6db4d9e 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt @@ -6,6 +6,6 @@ # e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", # Then this file should have foo==1.14.0 google-cloud-logging==1.14.0 -google-api-core==1.22.2 +google-api-core==1.26.0 proto-plus==1.4.0 packaging==14.3 diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index dc478547abe1..1c27a1bef7a9 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -38,9 +38,6 @@ ErrorGroupServiceClient, ) from google.cloud.errorreporting_v1beta1.services.error_group_service import transports -from google.cloud.errorreporting_v1beta1.services.error_group_service.transports.base import ( - _API_CORE_VERSION, -) from google.cloud.errorreporting_v1beta1.services.error_group_service.transports.base import ( _GOOGLE_AUTH_VERSION, ) @@ -50,8 +47,9 @@ import google.auth -# TODO(busunkim): Once google-api-core >= 1.26.0 is required: -# - Delete all the api-core and auth "less than" test cases +# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively +# through google-api-core: +# - Delete the auth "less than" test cases # - Delete these pytest markers (Make the "greater than or equal to" tests the default). requires_google_auth_lt_1_25_0 = pytest.mark.skipif( packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), @@ -62,16 +60,6 @@ reason="This test requires google-auth >= 1.25.0", ) -requires_api_core_lt_1_26_0 = pytest.mark.skipif( - packaging.version.parse(_API_CORE_VERSION) >= packaging.version.parse("1.26.0"), - reason="This test requires google-api-core < 1.26.0", -) - -requires_api_core_gte_1_26_0 = pytest.mark.skipif( - packaging.version.parse(_API_CORE_VERSION) < packaging.version.parse("1.26.0"), - reason="This test requires google-api-core >= 1.26.0", -) - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -135,6 +123,18 @@ def test_error_group_service_client_from_service_account_info(client_class): assert client.transport._host == "clouderrorreporting.googleapis.com:443" +@pytest.mark.parametrize( + "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] +) +def test_error_group_service_client_service_account_always_use_jwt(client_class): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + client = client_class(credentials=creds) + use_jwt.assert_called_with(True) + + @pytest.mark.parametrize( "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] ) @@ -1140,7 +1140,6 @@ def test_error_group_service_transport_auth_adc_old_google_auth(transport_class) (transports.ErrorGroupServiceGrpcAsyncIOTransport, grpc_helpers_async), ], ) -@requires_api_core_gte_1_26_0 def test_error_group_service_transport_create_channel(transport_class, grpc_helpers): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -1169,79 +1168,6 @@ def test_error_group_service_transport_create_channel(transport_class, grpc_help ) -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.ErrorGroupServiceGrpcTransport, grpc_helpers), - (transports.ErrorGroupServiceGrpcAsyncIOTransport, grpc_helpers_async), - ], -) -@requires_api_core_lt_1_26_0 -def test_error_group_service_transport_create_channel_old_api_core( - transport_class, grpc_helpers -): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class(quota_project_id="octopus") - - create_channel.assert_called_with( - "clouderrorreporting.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.ErrorGroupServiceGrpcTransport, grpc_helpers), - (transports.ErrorGroupServiceGrpcAsyncIOTransport, grpc_helpers_async), - ], -) -@requires_api_core_lt_1_26_0 -def test_error_group_service_transport_create_channel_user_scopes( - transport_class, grpc_helpers -): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - - create_channel.assert_called_with( - "clouderrorreporting.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - scopes=["1", "2"], - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - @pytest.mark.parametrize( "transport_class", [ diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index cca786a8db67..dd106d194bf0 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -39,9 +39,6 @@ ) from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.services.error_stats_service import transports -from google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.base import ( - _API_CORE_VERSION, -) from google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.base import ( _GOOGLE_AUTH_VERSION, ) @@ -53,8 +50,9 @@ import google.auth -# TODO(busunkim): Once google-api-core >= 1.26.0 is required: -# - Delete all the api-core and auth "less than" test cases +# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively +# through google-api-core: +# - Delete the auth "less than" test cases # - Delete these pytest markers (Make the "greater than or equal to" tests the default). requires_google_auth_lt_1_25_0 = pytest.mark.skipif( packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), @@ -65,16 +63,6 @@ reason="This test requires google-auth >= 1.25.0", ) -requires_api_core_lt_1_26_0 = pytest.mark.skipif( - packaging.version.parse(_API_CORE_VERSION) >= packaging.version.parse("1.26.0"), - reason="This test requires google-api-core < 1.26.0", -) - -requires_api_core_gte_1_26_0 = pytest.mark.skipif( - packaging.version.parse(_API_CORE_VERSION) < packaging.version.parse("1.26.0"), - reason="This test requires google-api-core >= 1.26.0", -) - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -138,6 +126,18 @@ def test_error_stats_service_client_from_service_account_info(client_class): assert client.transport._host == "clouderrorreporting.googleapis.com:443" +@pytest.mark.parametrize( + "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] +) +def test_error_stats_service_client_service_account_always_use_jwt(client_class): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + client = client_class(credentials=creds) + use_jwt.assert_called_with(True) + + @pytest.mark.parametrize( "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] ) @@ -1700,7 +1700,6 @@ def test_error_stats_service_transport_auth_adc_old_google_auth(transport_class) (transports.ErrorStatsServiceGrpcAsyncIOTransport, grpc_helpers_async), ], ) -@requires_api_core_gte_1_26_0 def test_error_stats_service_transport_create_channel(transport_class, grpc_helpers): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -1729,79 +1728,6 @@ def test_error_stats_service_transport_create_channel(transport_class, grpc_help ) -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.ErrorStatsServiceGrpcTransport, grpc_helpers), - (transports.ErrorStatsServiceGrpcAsyncIOTransport, grpc_helpers_async), - ], -) -@requires_api_core_lt_1_26_0 -def test_error_stats_service_transport_create_channel_old_api_core( - transport_class, grpc_helpers -): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class(quota_project_id="octopus") - - create_channel.assert_called_with( - "clouderrorreporting.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.ErrorStatsServiceGrpcTransport, grpc_helpers), - (transports.ErrorStatsServiceGrpcAsyncIOTransport, grpc_helpers_async), - ], -) -@requires_api_core_lt_1_26_0 -def test_error_stats_service_transport_create_channel_user_scopes( - transport_class, grpc_helpers -): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - - create_channel.assert_called_with( - "clouderrorreporting.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - scopes=["1", "2"], - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - @pytest.mark.parametrize( "transport_class", [ diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 894909a8ebec..8e683ce1c82e 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -40,9 +40,6 @@ from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( transports, ) -from google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.base import ( - _API_CORE_VERSION, -) from google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.base import ( _GOOGLE_AUTH_VERSION, ) @@ -53,8 +50,9 @@ import google.auth -# TODO(busunkim): Once google-api-core >= 1.26.0 is required: -# - Delete all the api-core and auth "less than" test cases +# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively +# through google-api-core: +# - Delete the auth "less than" test cases # - Delete these pytest markers (Make the "greater than or equal to" tests the default). requires_google_auth_lt_1_25_0 = pytest.mark.skipif( packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), @@ -65,16 +63,6 @@ reason="This test requires google-auth >= 1.25.0", ) -requires_api_core_lt_1_26_0 = pytest.mark.skipif( - packaging.version.parse(_API_CORE_VERSION) >= packaging.version.parse("1.26.0"), - reason="This test requires google-api-core < 1.26.0", -) - -requires_api_core_gte_1_26_0 = pytest.mark.skipif( - packaging.version.parse(_API_CORE_VERSION) < packaging.version.parse("1.26.0"), - reason="This test requires google-api-core >= 1.26.0", -) - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -138,6 +126,18 @@ def test_report_errors_service_client_from_service_account_info(client_class): assert client.transport._host == "clouderrorreporting.googleapis.com:443" +@pytest.mark.parametrize( + "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] +) +def test_report_errors_service_client_service_account_always_use_jwt(client_class): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + client = client_class(credentials=creds) + use_jwt.assert_called_with(True) + + @pytest.mark.parametrize( "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] ) @@ -979,7 +979,6 @@ def test_report_errors_service_transport_auth_adc_old_google_auth(transport_clas (transports.ReportErrorsServiceGrpcAsyncIOTransport, grpc_helpers_async), ], ) -@requires_api_core_gte_1_26_0 def test_report_errors_service_transport_create_channel(transport_class, grpc_helpers): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -1008,79 +1007,6 @@ def test_report_errors_service_transport_create_channel(transport_class, grpc_he ) -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.ReportErrorsServiceGrpcTransport, grpc_helpers), - (transports.ReportErrorsServiceGrpcAsyncIOTransport, grpc_helpers_async), - ], -) -@requires_api_core_lt_1_26_0 -def test_report_errors_service_transport_create_channel_old_api_core( - transport_class, grpc_helpers -): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class(quota_project_id="octopus") - - create_channel.assert_called_with( - "clouderrorreporting.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.ReportErrorsServiceGrpcTransport, grpc_helpers), - (transports.ReportErrorsServiceGrpcAsyncIOTransport, grpc_helpers_async), - ], -) -@requires_api_core_lt_1_26_0 -def test_report_errors_service_transport_create_channel_user_scopes( - transport_class, grpc_helpers -): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - - create_channel.assert_called_with( - "clouderrorreporting.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - scopes=["1", "2"], - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - @pytest.mark.parametrize( "transport_class", [ From 43c5df43e35fef4a70627a1ba45ed80a1b021759 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 26 Jun 2021 11:32:21 +0000 Subject: [PATCH 241/467] chore(python): simplify nox steps in CONTRIBUTING.rst (#142) Source-Link: https://github.com/googleapis/synthtool/commit/26558bae8976a985d73c2d98c31d8612273f907d Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:99d90d097e4a4710cc8658ee0b5b963f4426d0e424819787c3ac1405c9a26719 --- .../.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/CONTRIBUTING.rst | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 0954585f2833..e2b39f946040 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:df50e8d462f86d6bcb42f27ecad55bb12c404f1c65de9c6fe4c4d25120080bd6 + digest: sha256:99d90d097e4a4710cc8658ee0b5b963f4426d0e424819787c3ac1405c9a26719 diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 3c5dc48ab75e..38c4688e3d47 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -68,14 +68,12 @@ Using ``nox`` We use `nox `__ to instrument our tests. - To test your changes, run unit tests with ``nox``:: + $ nox -s unit - $ nox -s unit-3.8 - $ ... +- To run a single unit test:: -- Args to pytest can be passed through the nox command separated by a `--`. For - example, to run a single test:: + $ nox -s unit-3.9 -- -k - $ nox -s unit-3.8 -- -k .. note:: @@ -142,7 +140,7 @@ Running System Tests - To run system tests, you can execute:: # Run all system tests - $ nox -s system-3.8 + $ nox -s system # Run a single system test $ nox -s system-3.8 -- -k @@ -215,8 +213,8 @@ Supported versions can be found in our ``noxfile.py`` `config`_. .. _config: https://github.com/googleapis/python-error-reporting/blob/master/noxfile.py -We also explicitly decided to support Python 3 beginning with version -3.6. Reasons for this include: +We also explicitly decided to support Python 3 beginning with version 3.6. +Reasons for this include: - Encouraging use of newest versions of Python 3 - Taking the lead of `prominent`_ open-source `projects`_ From 791741c11081e7830bf8f687d9c38a643fa20d78 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 1 Jul 2021 02:18:09 +0000 Subject: [PATCH 242/467] fix: disable always_use_jwt_access (#144) fix: disable always_use_jwt_access Committer: @busunkim96 PiperOrigin-RevId: 382142900 Source-Link: https://github.com/googleapis/googleapis/commit/513440fda515f3c799c22a30e3906dcda325004e Source-Link: https://github.com/googleapis/googleapis-gen/commit/7b1e2c31233f79a704ec21ca410bf661d6bc68d0 --- .../error_group_service/transports/base.py | 2 +- .../error_group_service/transports/grpc.py | 5 +++- .../transports/grpc_asyncio.py | 5 +++- .../error_stats_service/transports/base.py | 2 +- .../error_stats_service/transports/grpc.py | 5 +++- .../transports/grpc_asyncio.py | 5 +++- .../report_errors_service/transports/base.py | 2 +- .../report_errors_service/transports/grpc.py | 5 +++- .../transports/grpc_asyncio.py | 5 +++- .../test_error_group_service.py | 26 ++++++++++++++++--- .../test_error_stats_service.py | 26 ++++++++++++++++--- .../test_report_errors_service.py | 26 ++++++++++++++++--- 12 files changed, 93 insertions(+), 21 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index b49bdd7fbdb0..54ecd8e8bf04 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -99,7 +99,7 @@ def __init__( scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) # Save the scopes. - self._scopes = scopes or self.AUTH_SCOPES + self._scopes = scopes # If no credentials are provided, then determine the appropriate # defaults. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 94037f6d5074..e5f620d195db 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -58,6 +58,7 @@ def __init__( client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, ) -> None: """Instantiate the transport. @@ -98,6 +99,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. Raises: google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport @@ -150,7 +153,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, - always_use_jwt_access=True, + always_use_jwt_access=always_use_jwt_access, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index afb1e769802e..7ea9c77abe66 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -104,6 +104,7 @@ def __init__( client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, ) -> None: """Instantiate the transport. @@ -145,6 +146,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. Raises: google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport @@ -196,7 +199,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, - always_use_jwt_access=True, + always_use_jwt_access=always_use_jwt_access, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 6400a8523214..2081bb5d7a0a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -98,7 +98,7 @@ def __init__( scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) # Save the scopes. - self._scopes = scopes or self.AUTH_SCOPES + self._scopes = scopes # If no credentials are provided, then determine the appropriate # defaults. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index e4d1a6f15a3f..be6d42a4a2e9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -58,6 +58,7 @@ def __init__( client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, ) -> None: """Instantiate the transport. @@ -98,6 +99,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. Raises: google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport @@ -150,7 +153,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, - always_use_jwt_access=True, + always_use_jwt_access=always_use_jwt_access, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 6f775deff5a2..65b32b0f7220 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -104,6 +104,7 @@ def __init__( client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, ) -> None: """Instantiate the transport. @@ -145,6 +146,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. Raises: google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport @@ -196,7 +199,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, - always_use_jwt_access=True, + always_use_jwt_access=always_use_jwt_access, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 6a6ba55cc24a..645915d15210 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -98,7 +98,7 @@ def __init__( scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) # Save the scopes. - self._scopes = scopes or self.AUTH_SCOPES + self._scopes = scopes # If no credentials are provided, then determine the appropriate # defaults. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 8f4024da0af2..452d2b3ddc96 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -57,6 +57,7 @@ def __init__( client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, ) -> None: """Instantiate the transport. @@ -97,6 +98,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. Raises: google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport @@ -149,7 +152,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, - always_use_jwt_access=True, + always_use_jwt_access=always_use_jwt_access, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index acbe98be6039..8b0da7a24e1f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -103,6 +103,7 @@ def __init__( client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, ) -> None: """Instantiate the transport. @@ -144,6 +145,8 @@ def __init__( 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. Raises: google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport @@ -195,7 +198,7 @@ def __init__( scopes=scopes, quota_project_id=quota_project_id, client_info=client_info, - always_use_jwt_access=True, + always_use_jwt_access=always_use_jwt_access, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 1c27a1bef7a9..2ed701f95228 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -132,7 +132,25 @@ def test_error_group_service_client_service_account_always_use_jwt(client_class) ) as use_jwt: creds = service_account.Credentials(None, None, None) client = client_class(credentials=creds) - use_jwt.assert_called_with(True) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.ErrorGroupServiceGrpcTransport, "grpc"), + (transports.ErrorGroupServiceGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_error_group_service_client_service_account_always_use_jwt_true( + 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) @pytest.mark.parametrize( @@ -1192,7 +1210,7 @@ def test_error_group_service_grpc_transport_client_cert_source_for_mtls( "squid.clam.whelk:443", credentials=cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_channel_creds, quota_project_id=None, options=[ @@ -1301,7 +1319,7 @@ def test_error_group_service_transport_channel_mtls_with_client_cert_source( "mtls.squid.clam.whelk:443", credentials=cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_cred, quota_project_id=None, options=[ @@ -1348,7 +1366,7 @@ def test_error_group_service_transport_channel_mtls_with_adc(transport_class): "mtls.squid.clam.whelk:443", credentials=mock_cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_cred, quota_project_id=None, options=[ diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index dd106d194bf0..96acc5ba6390 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -135,7 +135,25 @@ def test_error_stats_service_client_service_account_always_use_jwt(client_class) ) as use_jwt: creds = service_account.Credentials(None, None, None) client = client_class(credentials=creds) - use_jwt.assert_called_with(True) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.ErrorStatsServiceGrpcTransport, "grpc"), + (transports.ErrorStatsServiceGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_error_stats_service_client_service_account_always_use_jwt_true( + 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) @pytest.mark.parametrize( @@ -1752,7 +1770,7 @@ def test_error_stats_service_grpc_transport_client_cert_source_for_mtls( "squid.clam.whelk:443", credentials=cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_channel_creds, quota_project_id=None, options=[ @@ -1861,7 +1879,7 @@ def test_error_stats_service_transport_channel_mtls_with_client_cert_source( "mtls.squid.clam.whelk:443", credentials=cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_cred, quota_project_id=None, options=[ @@ -1908,7 +1926,7 @@ def test_error_stats_service_transport_channel_mtls_with_adc(transport_class): "mtls.squid.clam.whelk:443", credentials=mock_cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_cred, quota_project_id=None, options=[ diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 8e683ce1c82e..c9fbd13abb50 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -135,7 +135,25 @@ def test_report_errors_service_client_service_account_always_use_jwt(client_clas ) as use_jwt: creds = service_account.Credentials(None, None, None) client = client_class(credentials=creds) - use_jwt.assert_called_with(True) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.ReportErrorsServiceGrpcTransport, "grpc"), + (transports.ReportErrorsServiceGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_report_errors_service_client_service_account_always_use_jwt_true( + 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) @pytest.mark.parametrize( @@ -1031,7 +1049,7 @@ def test_report_errors_service_grpc_transport_client_cert_source_for_mtls( "squid.clam.whelk:443", credentials=cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_channel_creds, quota_project_id=None, options=[ @@ -1140,7 +1158,7 @@ def test_report_errors_service_transport_channel_mtls_with_client_cert_source( "mtls.squid.clam.whelk:443", credentials=cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_cred, quota_project_id=None, options=[ @@ -1187,7 +1205,7 @@ def test_report_errors_service_transport_channel_mtls_with_adc(transport_class): "mtls.squid.clam.whelk:443", credentials=mock_cred, credentials_file=None, - scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, ssl_credentials=mock_ssl_cred, quota_project_id=None, options=[ From c92c40d892952c37a8e07828bff1982d2d8d25c7 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 12 Jul 2021 19:54:24 +0000 Subject: [PATCH 243/467] chore: release 1.2.0 (#141) :robot: I have created a release \*beep\* \*boop\* --- ## [1.2.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.2...v1.2.0) (2021-07-01) ### Features * add always_use_jwt_access ([#140](https://www.github.com/googleapis/python-error-reporting/issues/140)) ([2f8f790](https://www.github.com/googleapis/python-error-reporting/commit/2f8f790dd70646848afd5e5209a147b01c6f388b)) ### Bug Fixes * **deps:** add packaging requirement ([#124](https://www.github.com/googleapis/python-error-reporting/issues/124)) ([ed36389](https://www.github.com/googleapis/python-error-reporting/commit/ed3638946f8829c4d2b379785e38cc2a2228c688)) * **deps:** widen version range on google-cloud-logging ([#133](https://www.github.com/googleapis/python-error-reporting/issues/133)) ([c5e87bb](https://www.github.com/googleapis/python-error-reporting/commit/c5e87bb8c177688833ca9524daa4e6229875627d)) * disable always_use_jwt_access ([8aff323](https://www.github.com/googleapis/python-error-reporting/commit/8aff32330ebf544cc043bec0003140d61df7e7a1)) * disable always_use_jwt_access ([#144](https://www.github.com/googleapis/python-error-reporting/issues/144)) ([8aff323](https://www.github.com/googleapis/python-error-reporting/commit/8aff32330ebf544cc043bec0003140d61df7e7a1)) ### Documentation * omit mention of Python 2.7 in 'CONTRIBUTING.rst' ([#1127](https://www.github.com/googleapis/python-error-reporting/issues/1127)) ([#137](https://www.github.com/googleapis/python-error-reporting/issues/137)) ([0ca7d43](https://www.github.com/googleapis/python-error-reporting/commit/0ca7d4385de86e7ff462322807a717345774c017)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- .../google-cloud-error-reporting/CHANGELOG.md | 20 +++++++++++++++++++ .../google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 3e874fd337f1..a9d149e21105 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,26 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.2.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.2...v1.2.0) (2021-07-01) + + +### Features + +* add always_use_jwt_access ([#140](https://www.github.com/googleapis/python-error-reporting/issues/140)) ([2f8f790](https://www.github.com/googleapis/python-error-reporting/commit/2f8f790dd70646848afd5e5209a147b01c6f388b)) + + +### Bug Fixes + +* **deps:** add packaging requirement ([#124](https://www.github.com/googleapis/python-error-reporting/issues/124)) ([ed36389](https://www.github.com/googleapis/python-error-reporting/commit/ed3638946f8829c4d2b379785e38cc2a2228c688)) +* **deps:** widen version range on google-cloud-logging ([#133](https://www.github.com/googleapis/python-error-reporting/issues/133)) ([c5e87bb](https://www.github.com/googleapis/python-error-reporting/commit/c5e87bb8c177688833ca9524daa4e6229875627d)) +* disable always_use_jwt_access ([8aff323](https://www.github.com/googleapis/python-error-reporting/commit/8aff32330ebf544cc043bec0003140d61df7e7a1)) +* disable always_use_jwt_access ([#144](https://www.github.com/googleapis/python-error-reporting/issues/144)) ([8aff323](https://www.github.com/googleapis/python-error-reporting/commit/8aff32330ebf544cc043bec0003140d61df7e7a1)) + + +### Documentation + +* omit mention of Python 2.7 in 'CONTRIBUTING.rst' ([#1127](https://www.github.com/googleapis/python-error-reporting/issues/1127)) ([#137](https://www.github.com/googleapis/python-error-reporting/issues/137)) ([0ca7d43](https://www.github.com/googleapis/python-error-reporting/commit/0ca7d4385de86e7ff462322807a717345774c017)) + ### [1.1.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.1...v1.1.2) (2021-04-05) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 7583b55e6b02..90e25a4de3ca 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.1.2" +version = "1.2.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 7397749f228428eb4961369f363058b26585617e Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Mon, 12 Jul 2021 16:00:17 -0400 Subject: [PATCH 244/467] chore: replace local 'test_utils' w/ PyPI version (#146) Closes #145 --- .../google-cloud-error-reporting/noxfile.py | 2 - .../google-cloud-error-reporting/owlbot.py | 1 - .../test_utils/credentials.json.enc | 49 ---- .../scripts/circleci/get_tagged_package.py | 64 ----- .../scripts/circleci/twine_upload.sh | 36 --- .../test_utils/scripts/get_target_packages.py | 268 ------------------ .../scripts/get_target_packages_kokoro.py | 98 ------- .../test_utils/scripts/run_emulator.py | 199 ------------- .../test_utils/scripts/update_docs.sh | 93 ------ .../test_utils/setup.py | 64 ----- .../test_utils/test_utils/__init__.py | 0 .../test_utils/test_utils/imports.py | 38 --- .../test_utils/test_utils/retry.py | 207 -------------- .../test_utils/test_utils/system.py | 81 ------ .../test_utils/test_utils/vpcsc_config.py | 118 -------- 15 files changed, 1318 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/test_utils/credentials.json.enc delete mode 100644 packages/google-cloud-error-reporting/test_utils/scripts/circleci/get_tagged_package.py delete mode 100755 packages/google-cloud-error-reporting/test_utils/scripts/circleci/twine_upload.sh delete mode 100644 packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages.py delete mode 100644 packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages_kokoro.py delete mode 100644 packages/google-cloud-error-reporting/test_utils/scripts/run_emulator.py delete mode 100755 packages/google-cloud-error-reporting/test_utils/scripts/update_docs.sh delete mode 100644 packages/google-cloud-error-reporting/test_utils/setup.py delete mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/__init__.py delete mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/imports.py delete mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/retry.py delete mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/system.py delete mode 100644 packages/google-cloud-error-reporting/test_utils/test_utils/vpcsc_config.py diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index fa33394fb68d..03aa2f589fb7 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -140,8 +140,6 @@ def system(session): # Install all test dependencies, then install this package into the # virtualenv's dist-packages. session.install("mock", "pytest", "google-cloud-testutils", "-c", constraints_path) - session.install("-e", "test_utils", "-c", constraints_path) - session.install("-e", ".", "-c", constraints_path) # Run py.test against the system tests. diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 8fd0def0b1d3..3507d031cd75 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -32,7 +32,6 @@ templated_files = common.py_library( samples=True, # set to True only if there are samples microgenerator=True, - system_test_dependencies=["test_utils"], cov_level=98, ) s.move(templated_files, excludes=[".coveragerc"]) # microgenerator has a good .coveragerc file diff --git a/packages/google-cloud-error-reporting/test_utils/credentials.json.enc b/packages/google-cloud-error-reporting/test_utils/credentials.json.enc deleted file mode 100644 index f073c7e4f774..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/credentials.json.enc +++ /dev/null @@ -1,49 +0,0 @@ -U2FsdGVkX1/vVm/dOEg1DCACYbdOcL+ey6+64A+DZGZVgF8Z/3skK6rpPocu6GOA -UZAqASsBH9QifDf8cKVXQXVYpYq6HSv2O0w7vOmVorZO9GYPo98s9/8XO+4ty/AU -aB6TD68frBAYv4cT/l5m7aYdzfzMTy0EOXoleZT09JYP3B5FV3KCO114FzMXGwrj -HXsR6E5SyUUlUnWPC3eD3aqmovay0gxOKYO3ZwjFK1nlbN/8q6/8nwBCf/Bg6SHV -V93pNxdolRlJev9kgKz4RN1z4jGCy5PAndhSLE82NFIs9LoAiEOU5YeMlN+Ulqus -J92nh+ptUe9a4pJGbAuveUWO7zdS1QyXvTMUcmmSfXCNm/eIQjNuu5+rHtIjWKh8 -Ilwj2w1aTfSptQEhk/kwRgFz/d11vfwJzvwTmCxO6zyOeL0VUWLqdCBGgG5As9He -/RenF8PZ1O0WbTt7fns5oTlTk/MUo+0xJ1xqvu/y45LaqqcBAnEdrWKmtM3dJHWv -ufQku+kD+83F/VwBnQdvgMHu6KZEs6LRrNo58r4QuK6fS7VCACdzxID1RM2cL7kT -6BFRlyGj1aigmjne9g9M9Jx4R+mZDpPU1WDzzG71J4qCUwaX8Dfwutuv4uiFvzwq -NUF0wLJJPtKWmtW+hnZ/fhHQGCRsOpZzFnqp6Zv7J7k6esqxMgIjfal7Djk5Acy8 -j3iVvm6CYmKMVqzL62JHYS9Ye83tzBCaR8hpnJQKgH3FSOFY8HSwrtQSIsl/hSeF -41sgnz0Y+/gkzNeU18qFk+eCZmvljyu+JK0nPYUgpOCJYVBNQpNHz5PUyiAEKhtM -IOSdjPRW1Y+Xf4RroJnLPoF24Ijwrow5LCm9hBRY6TPPMMmnIXCd23xcLJ1rMj6g -x4ZikElans+cwuc9wtbb7w01DcpTwQ1+eIV1qV+KIgpnLjRGLhZD4etobBsrwYu/ -vnIwy2QHCKENPb8sbdgp7x2mF7VSX0/7tf+9+i70EBiMzpOKBkiZhtLzm6hOBkEy -ODaWrx4lTTwbSw8Rmtf58APhPFMsjHoNsjiUoK249Y8Y2Ff4fMfqYsXu6VC1n/At -CuWYHc3EfBwFcLJS+RQB9kFk/4FygFBWq4Kj0MqoRruLbKmoGeJKH9q35W0f0NCD -j+iHt3014kMGiuyJe1UDQ6fvEihFFdHuDivFpPAXDt4PTY/WtpDhaGMx23kb54pK -jkAuxpznAB1lK3u9bGRXDasGeHIrNtIlPvgkrWHXvoBVqM7zry8TGtoxp3E3I42Z -cUfDWfB9GqVdrOwvrTzyZsl2uShRkAJaZFZj5aMyYxiptp4gM8CwWiNtOd2EwtRO -LxZX4M02PQFIqXV3FSDA0q6EwglUrTZdAlYeOEkopaKCtG31dEPOSQG3NGJAEYso -Cxm99H7970dp0OAgpNSgRbcWDbhVbQXnRzvFGqLeH6a9dQ/a8uD3s8Qm9Du/kB6d -XxTRe2OGxzcD0AgI8GClE4rIZHCLbcwuJRp0EYcN+pgY80O4U98fZ5RYpU6OYbU/ -MEiaBYFKtZtGkV6AQD568V7hHJWqc5DDfVHUQ/aeQwnKi2vnU66u+nnV2rZxXxLP -+dqeLRpul+wKa5b/Z5SfQ14Ff8s7aVyxaogGpyggyPL1vyq4KWZ6Or/wEE5hgNO4 -kBh6ht0QT1Hti8XY2JK1M+Jgbjgcg4jkHBGVqegrG1Rvcc2A4TYKwx+QMSBhyxrU -5qhROjS4lTcC42hQslMUkUwc4U/Y91XdFbOOnaAkwzI36NRYL0pmgZnYxGJZeRvr -E5foOhnOEVSFGdOkLfFh+FkWZQf56Lmn8Gg2wHE3dZTxLHibiUYfkgOr1uEosq29 -D1NstvlJURPQ0Q+8QQNWcl9nEZHMAjOmnL1hbx+QfuC6seucp+sXGzdZByMLZbvT -tG8KNL293CmyQowgf9MXToWYnwRkcvqfTaKyor2Ggze3JtoFW4t0j4DI1XPciZFX -XmfApHrzdB/bZadzxyaZ2NE0CuH9zDelwI6rz38xsN5liYnp5qmNKVCZVOHccXa6 -J8x365m5/VaaA2RrtdPqKxn8VaKy7+T690QgMXVGM4PbzQzQxHuSleklocqlP+sB -jSMXCZY+ng/i4UmRO9noiyW3UThYh0hIdMYs12EmmI9cnF/OuYZpl30fmqwV+VNM -td5B2fYvAvvsjiX60SFCn3DATP1GrPMBlZSmhhP3GYS+xrWt3Xxta9qIX2BEF1Gg -twnZZRjoULSRFUYPfJPEOfEH2UQwm84wxx/GezVE+S/RpBlatPOgCiLnNNaLfdTC -mTG9qY9elJv3GGQO8Lqgf4i8blExs05lSPk1BDhzTB6H9TLz+Ge0/l1QxKf3gPXU -aImK1azieXMXHECkdKxrzmehwu1dZ/oYOLc/OFQCETwSRoLPFOFpYUpizwmVVHR6 -uLSfRptte4ZOU3zHfpd/0+J4tkwHwEkGzsmMdqudlm7qME6upuIplyVBH8JiXzUK -n1RIH/OPmVEluAnexWRLZNdk7MrakIO4XACVbICENiYQgAIErP568An6twWEGDbZ -bEN64E3cVDTDRPRAunIhhsEaapcxpFEPWlHorxv36nMUt0R0h0bJlCu5QdzckfcX -ZrRuu1kl76ZfbSE8T0G4/rBb9gsU4Gn3WyvLIO3MgFBuxR68ZwcR8LpEUd8qp38H -NG4cxPmN1nGKo663Z+xI2Gt5up4gpl+fOt4mXqxY386rB7yHaOfElMG5TUYdrS9w -1xbbCVgeJ6zxX+NFlndG33cSAPprhw+C18eUu6ZU63WZcYFo3GfK6rs3lvYtofvE -8DxztdTidQedNVNE+63YCjhxd/cZUI5n/UpgYkr9owp7hNGJiR3tdoNLR2gcoGqL -qWhH928k2aSgF2j97LZ2OqoPCp0tUB7ho4jD2u4Ik3GLVNlCc3dCvWRvpHtDTQDv -tujESMfHUc9I2r4S/PD3bku/ABGwa977Yp1PjzJGr9RajA5is5n6GVpyynwjtKG4 -iyyITpdwpCgr8pueTBLwZnas3slmiMOog/E4PmPgctHzvC+vhQijhUtw5zSsmv0l -bZlw/mVhp5Ta7dTcLBKR8DA3m3vTbaEGkz0xpfQr7GfiSMRbJyvIw88pDK0gyTMD diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/circleci/get_tagged_package.py b/packages/google-cloud-error-reporting/test_utils/scripts/circleci/get_tagged_package.py deleted file mode 100644 index c148b9dc2370..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/scripts/circleci/get_tagged_package.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright 2016 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. - -"""Helper to determine package from tag. -Get the current package directory corresponding to the Circle Tag. -""" - -from __future__ import print_function - -import os -import re -import sys - - -TAG_RE = re.compile(r""" - ^ - (?P - (([a-z]+)[_-])*) # pkg-name-with-hyphens-or-underscores (empty allowed) - ([0-9]+)\.([0-9]+)\.([0-9]+) # Version x.y.z (x, y, z all ints) - $ -""", re.VERBOSE) -TAG_ENV = 'CIRCLE_TAG' -ERROR_MSG = '%s env. var. not set' % (TAG_ENV,) -BAD_TAG_MSG = 'Invalid tag name: %s. Expected pkg-name-x.y.z' -CIRCLE_CI_SCRIPTS_DIR = os.path.dirname(__file__) -ROOT_DIR = os.path.realpath( - os.path.join(CIRCLE_CI_SCRIPTS_DIR, '..', '..', '..')) - - -def main(): - """Get the current package directory. - Prints the package directory out so callers can consume it. - """ - if TAG_ENV not in os.environ: - print(ERROR_MSG, file=sys.stderr) - sys.exit(1) - - tag_name = os.environ[TAG_ENV] - match = TAG_RE.match(tag_name) - if match is None: - print(BAD_TAG_MSG % (tag_name,), file=sys.stderr) - sys.exit(1) - - pkg_name = match.group('pkg') - if pkg_name is None: - print(ROOT_DIR) - else: - pkg_dir = pkg_name.rstrip('-').replace('-', '_') - print(os.path.join(ROOT_DIR, pkg_dir)) - - -if __name__ == '__main__': - main() diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/circleci/twine_upload.sh b/packages/google-cloud-error-reporting/test_utils/scripts/circleci/twine_upload.sh deleted file mode 100755 index 23a4738e90b9..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/scripts/circleci/twine_upload.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -# Copyright 2016 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. - -set -ev - -# If this is not a CircleCI tag, no-op. -if [[ -z "$CIRCLE_TAG" ]]; then - echo "This is not a release tag. Doing nothing." - exit 0 -fi - -# H/T: http://stackoverflow.com/a/246128/1068170 -SCRIPT="$(dirname "${BASH_SOURCE[0]}")/get_tagged_package.py" -# Determine the package directory being deploying on this tag. -PKG_DIR="$(python ${SCRIPT})" - -# Ensure that we have the latest versions of Twine, Wheel, and Setuptools. -python3 -m pip install --upgrade twine wheel setuptools - -# Move into the package, build the distribution and upload. -cd ${PKG_DIR} -python3 setup.py sdist bdist_wheel -twine upload dist/* diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages.py b/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages.py deleted file mode 100644 index 1d51830cc23a..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages.py +++ /dev/null @@ -1,268 +0,0 @@ -# Copyright 2017 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. - -"""Print a list of packages which require testing.""" - -import os -import re -import subprocess -import warnings - - -CURRENT_DIR = os.path.realpath(os.path.dirname(__file__)) -BASE_DIR = os.path.realpath(os.path.join(CURRENT_DIR, '..', '..')) -GITHUB_REPO = os.environ.get('GITHUB_REPO', 'google-cloud-python') -CI = os.environ.get('CI', '') -CI_BRANCH = os.environ.get('CIRCLE_BRANCH') -CI_PR = os.environ.get('CIRCLE_PR_NUMBER') -CIRCLE_TAG = os.environ.get('CIRCLE_TAG') -head_hash, head_name = subprocess.check_output(['git', 'show-ref', 'HEAD'] -).strip().decode('ascii').split() -rev_parse = subprocess.check_output( - ['git', 'rev-parse', '--abbrev-ref', 'HEAD'] -).strip().decode('ascii') -MAJOR_DIV = '#' * 78 -MINOR_DIV = '#' + '-' * 77 - -# NOTE: This reg-ex is copied from ``get_tagged_packages``. -TAG_RE = re.compile(r""" - ^ - (?P - (([a-z]+)-)*) # pkg-name-with-hyphens- (empty allowed) - ([0-9]+)\.([0-9]+)\.([0-9]+) # Version x.y.z (x, y, z all ints) - $ -""", re.VERBOSE) - -# This is the current set of dependencies by package. -# As of this writing, the only "real" dependency is that of error_reporting -# (on logging), the rest are just system test dependencies. -PKG_DEPENDENCIES = { - 'logging': {'pubsub'}, -} - - -def get_baseline(): - """Return the baseline commit. - - On a pull request, or on a branch, return the common parent revision - with the master branch. - - Locally, return a value pulled from environment variables, or None if - the environment variables are not set. - - On a push to master, return None. This will effectively cause everything - to be considered to be affected. - """ - - # If this is a pull request or branch, return the tip for master. - # We will test only packages which have changed since that point. - ci_non_master = (CI == 'true') and any([CI_BRANCH != 'master', CI_PR]) - - if ci_non_master: - - repo_url = 'git@github.com:GoogleCloudPlatform/{}'.format(GITHUB_REPO) - subprocess.run(['git', 'remote', 'add', 'baseline', repo_url], - stderr=subprocess.DEVNULL) - subprocess.run(['git', 'pull', 'baseline'], stderr=subprocess.DEVNULL) - - if CI_PR is None and CI_BRANCH is not None: - output = subprocess.check_output([ - 'git', 'merge-base', '--fork-point', - 'baseline/master', CI_BRANCH]) - return output.strip().decode('ascii') - - return 'baseline/master' - - # If environment variables are set identifying what the master tip is, - # use that. - if os.environ.get('GOOGLE_CLOUD_TESTING_REMOTE', ''): - remote = os.environ['GOOGLE_CLOUD_TESTING_REMOTE'] - branch = os.environ.get('GOOGLE_CLOUD_TESTING_BRANCH', 'master') - return '%s/%s' % (remote, branch) - - # If we are not in CI and we got this far, issue a warning. - if not CI: - warnings.warn('No baseline could be determined; this means tests ' - 'will run for every package. If this is local ' - 'development, set the $GOOGLE_CLOUD_TESTING_REMOTE ' - 'environment variable.') - - # That is all we can do; return None. - return None - - -def get_changed_files(): - """Return a list of files that have been changed since the baseline. - - If there is no base, return None. - """ - # Get the baseline, and fail quickly if there is no baseline. - baseline = get_baseline() - print('# Baseline commit: {}'.format(baseline)) - if not baseline: - return None - - # Return a list of altered files. - try: - return subprocess.check_output([ - 'git', 'diff', '--name-only', '{}..HEAD'.format(baseline), - ], stderr=subprocess.DEVNULL).decode('utf8').strip().split('\n') - except subprocess.CalledProcessError: - warnings.warn('Unable to perform git diff; falling back to assuming ' - 'all packages have changed.') - return None - - -def reverse_map(dict_of_sets): - """Reverse a map of one-to-many. - - So the map:: - - { - 'A': {'B', 'C'}, - 'B': {'C'}, - } - - becomes - - { - 'B': {'A'}, - 'C': {'A', 'B'}, - } - - Args: - dict_of_sets (dict[set]): A dictionary of sets, mapping - one value to many. - - Returns: - dict[set]: The reversed map. - """ - result = {} - for key, values in dict_of_sets.items(): - for value in values: - result.setdefault(value, set()).add(key) - - return result - -def get_changed_packages(file_list): - """Return a list of changed packages based on the provided file list. - - If the file list is None, then all packages should be considered to be - altered. - """ - # Determine a complete list of packages. - all_packages = set() - for file_ in os.listdir(BASE_DIR): - abs_file = os.path.realpath(os.path.join(BASE_DIR, file_)) - nox_file = os.path.join(abs_file, 'nox.py') - if os.path.isdir(abs_file) and os.path.isfile(nox_file): - all_packages.add(file_) - - # If ther is no file list, send down the full package set. - if file_list is None: - return all_packages - - # Create a set based on the list of changed files. - answer = set() - reverse_deps = reverse_map(PKG_DEPENDENCIES) - for file_ in file_list: - # Ignore root directory changes (setup.py, .gitignore, etc.). - if os.path.sep not in file_: - continue - - # Ignore changes that are not in a package (usually this will be docs). - package = file_.split(os.path.sep, 1)[0] - if package not in all_packages: - continue - - # If there is a change in core, short-circuit now and return - # everything. - if package in ('core',): - return all_packages - - # Add the package, as well as any dependencies this package has. - # NOTE: For now, dependencies only go down one level. - answer.add(package) - answer = answer.union(reverse_deps.get(package, set())) - - # We got this far without being short-circuited; return the final answer. - return answer - - -def get_tagged_package(): - """Return the package corresponding to the current tag. - - If there is not tag, will return :data:`None`. - """ - if CIRCLE_TAG is None: - return - - match = TAG_RE.match(CIRCLE_TAG) - if match is None: - return - - pkg_name = match.group('pkg') - if pkg_name == '': - # NOTE: This corresponds to the "umbrella" tag. - return - - return pkg_name.rstrip('-').replace('-', '_') - - -def get_target_packages(): - """Return a list of target packages to be run in the current build. - - If in a tag build, will run only the package(s) that are tagged, otherwise - will run the packages that have file changes in them (or packages that - depend on those). - """ - tagged_package = get_tagged_package() - if tagged_package is None: - file_list = get_changed_files() - print(MAJOR_DIV) - print('# Changed files:') - print(MINOR_DIV) - for file_ in file_list or (): - print('# {}'.format(file_)) - for package in sorted(get_changed_packages(file_list)): - yield package - else: - yield tagged_package - - -def main(): - print(MAJOR_DIV) - print('# Environment') - print(MINOR_DIV) - print('# CircleCI: {}'.format(CI)) - print('# CircleCI branch: {}'.format(CI_BRANCH)) - print('# CircleCI pr: {}'.format(CI_PR)) - print('# CircleCI tag: {}'.format(CIRCLE_TAG)) - print('# HEAD ref: {}'.format(head_hash)) - print('# {}'.format(head_name)) - print('# Git branch: {}'.format(rev_parse)) - print(MAJOR_DIV) - - packages = list(get_target_packages()) - - print(MAJOR_DIV) - print('# Target packages:') - print(MINOR_DIV) - for package in packages: - print(package) - print(MAJOR_DIV) - - -if __name__ == '__main__': - main() diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages_kokoro.py b/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages_kokoro.py deleted file mode 100644 index 27d3a0c940ea..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/scripts/get_target_packages_kokoro.py +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright 2017 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. - -"""Print a list of packages which require testing.""" - -import pathlib -import subprocess - -import ci_diff_helper -import requests - - -def print_environment(environment): - print("-> CI environment:") - print('Branch', environment.branch) - print('PR', environment.pr) - print('In PR', environment.in_pr) - print('Repo URL', environment.repo_url) - if environment.in_pr: - print('PR Base', environment.base) - - -def get_base(environment): - if environment.in_pr: - return environment.base - else: - # If we're not in a PR, just calculate the changes between this commit - # and its parent. - return 'HEAD~1' - - -def get_changed_files_from_base(base): - return subprocess.check_output([ - 'git', 'diff', '--name-only', f'{base}..HEAD', - ], stderr=subprocess.DEVNULL).decode('utf8').strip().split('\n') - - -_URL_TEMPLATE = ( - 'https://api.github.com/repos/googleapis/google-cloud-python/pulls/' - '{}/files' -) - - -def get_changed_files_from_pr(pr): - url = _URL_TEMPLATE.format(pr) - while url is not None: - response = requests.get(url) - for info in response.json(): - yield info['filename'] - url = response.links.get('next', {}).get('url') - - -def determine_changed_packages(changed_files): - packages = [ - path.parent for path in pathlib.Path('.').glob('*/noxfile.py') - ] - - changed_packages = set() - for file in changed_files: - file = pathlib.Path(file) - for package in packages: - if package in file.parents: - changed_packages.add(package) - - return changed_packages - - -def main(): - environment = ci_diff_helper.get_config() - print_environment(environment) - base = get_base(environment) - - if environment.in_pr: - changed_files = list(get_changed_files_from_pr(environment.pr)) - else: - changed_files = get_changed_files_from_base(base) - - packages = determine_changed_packages(changed_files) - - print(f"Comparing against {base}.") - print("-> Changed packages:") - - for package in packages: - print(package) - - -main() diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/run_emulator.py b/packages/google-cloud-error-reporting/test_utils/scripts/run_emulator.py deleted file mode 100644 index 287b08640691..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/scripts/run_emulator.py +++ /dev/null @@ -1,199 +0,0 @@ -# Copyright 2016 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. - -"""Run system tests locally with the emulator. - -First makes system calls to spawn the emulator and get the local environment -variable needed for it. Then calls the system tests. -""" - - -import argparse -import os -import subprocess - -import psutil - -from google.cloud.environment_vars import BIGTABLE_EMULATOR -from google.cloud.environment_vars import GCD_DATASET -from google.cloud.environment_vars import GCD_HOST -from google.cloud.environment_vars import PUBSUB_EMULATOR -from run_system_test import run_module_tests - - -BIGTABLE = 'bigtable' -DATASTORE = 'datastore' -PUBSUB = 'pubsub' -PACKAGE_INFO = { - BIGTABLE: (BIGTABLE_EMULATOR,), - DATASTORE: (GCD_DATASET, GCD_HOST), - PUBSUB: (PUBSUB_EMULATOR,), -} -EXTRA = { - DATASTORE: ('--no-legacy',), -} -_DS_READY_LINE = '[datastore] Dev App Server is now running.\n' -_PS_READY_LINE_PREFIX = '[pubsub] INFO: Server started, listening on ' -_BT_READY_LINE_PREFIX = '[bigtable] Cloud Bigtable emulator running on ' - - -def get_parser(): - """Get simple ``argparse`` parser to determine package. - - :rtype: :class:`argparse.ArgumentParser` - :returns: The parser for this script. - """ - parser = argparse.ArgumentParser( - description='Run google-cloud system tests against local emulator.') - parser.add_argument('--package', dest='package', - choices=sorted(PACKAGE_INFO.keys()), - default=DATASTORE, help='Package to be tested.') - return parser - - -def get_start_command(package): - """Get command line arguments for starting emulator. - - :type package: str - :param package: The package to start an emulator for. - - :rtype: tuple - :returns: The arguments to be used, in a tuple. - """ - result = ('gcloud', 'beta', 'emulators', package, 'start') - extra = EXTRA.get(package, ()) - return result + extra - - -def get_env_init_command(package): - """Get command line arguments for getting emulator env. info. - - :type package: str - :param package: The package to get environment info for. - - :rtype: tuple - :returns: The arguments to be used, in a tuple. - """ - result = ('gcloud', 'beta', 'emulators', package, 'env-init') - extra = EXTRA.get(package, ()) - return result + extra - - -def datastore_wait_ready(popen): - """Wait until the datastore emulator is ready to use. - - :type popen: :class:`subprocess.Popen` - :param popen: An open subprocess to interact with. - """ - emulator_ready = False - while not emulator_ready: - emulator_ready = popen.stderr.readline() == _DS_READY_LINE - - -def wait_ready_prefix(popen, prefix): - """Wait until the a process encounters a line with matching prefix. - - :type popen: :class:`subprocess.Popen` - :param popen: An open subprocess to interact with. - - :type prefix: str - :param prefix: The prefix to match - """ - emulator_ready = False - while not emulator_ready: - emulator_ready = popen.stderr.readline().startswith(prefix) - - -def wait_ready(package, popen): - """Wait until the emulator is ready to use. - - :type package: str - :param package: The package to check if ready. - - :type popen: :class:`subprocess.Popen` - :param popen: An open subprocess to interact with. - - :raises: :class:`KeyError` if the ``package`` is not among - ``datastore``, ``pubsub`` or ``bigtable``. - """ - if package == DATASTORE: - datastore_wait_ready(popen) - elif package == PUBSUB: - wait_ready_prefix(popen, _PS_READY_LINE_PREFIX) - elif package == BIGTABLE: - wait_ready_prefix(popen, _BT_READY_LINE_PREFIX) - else: - raise KeyError('Package not supported', package) - - -def cleanup(pid): - """Cleanup a process (including all of its children). - - :type pid: int - :param pid: Process ID. - """ - proc = psutil.Process(pid) - for child_proc in proc.children(recursive=True): - try: - child_proc.kill() - child_proc.terminate() - except psutil.NoSuchProcess: - pass - proc.terminate() - proc.kill() - - -def run_tests_in_emulator(package): - """Spawn an emulator instance and run the system tests. - - :type package: str - :param package: The package to run system tests against. - """ - # Make sure this package has environment vars to replace. - env_vars = PACKAGE_INFO[package] - - start_command = get_start_command(package) - # Ignore stdin and stdout, don't pollute the user's output with them. - proc_start = subprocess.Popen(start_command, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - try: - wait_ready(package, proc_start) - env_init_command = get_env_init_command(package) - proc_env = subprocess.Popen(env_init_command, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - env_status = proc_env.wait() - if env_status != 0: - raise RuntimeError(env_status, proc_env.stderr.read()) - env_lines = proc_env.stdout.read().strip().split('\n') - # Set environment variables before running the system tests. - for env_var in env_vars: - line_prefix = 'export ' + env_var + '=' - value, = [line.split(line_prefix, 1)[1] for line in env_lines - if line.startswith(line_prefix)] - os.environ[env_var] = value - run_module_tests(package, - ignore_requirements=True) - finally: - cleanup(proc_start.pid) - - -def main(): - """Main method to run this script.""" - parser = get_parser() - args = parser.parse_args() - run_tests_in_emulator(args.package) - - -if __name__ == '__main__': - main() diff --git a/packages/google-cloud-error-reporting/test_utils/scripts/update_docs.sh b/packages/google-cloud-error-reporting/test_utils/scripts/update_docs.sh deleted file mode 100755 index 8cbab9f0dad0..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/scripts/update_docs.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/bash - -# Copyright 2016 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. - -set -ev - -GH_OWNER='GoogleCloudPlatform' -GH_PROJECT_NAME='google-cloud-python' - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# Function to build the docs. -function build_docs { - rm -rf docs/_build/ - rm -f docs/bigquery/generated/*.rst - # -W -> warnings as errors - # -T -> show full traceback on exception - # -N -> no color - sphinx-build \ - -W -T -N \ - -b html \ - -d docs/_build/doctrees \ - docs/ \ - docs/_build/html/ - return $? -} - -# Only update docs if we are on CircleCI. -if [[ "${CIRCLE_BRANCH}" == "master" ]] && [[ -z "${CIRCLE_PR_NUMBER}" ]]; then - echo "Building new docs on a merged commit." -elif [[ "$1" == "kokoro" ]]; then - echo "Building and publishing docs on Kokoro." -elif [[ -n "${CIRCLE_TAG}" ]]; then - echo "Building new docs on a tag (but will not deploy)." - build_docs - exit $? -else - echo "Not on master nor a release tag." - echo "Building new docs for testing purposes, but not deploying." - build_docs - exit $? -fi - -# Adding GitHub pages branch. `git submodule add` checks it -# out at HEAD. -GH_PAGES_DIR='ghpages' -git submodule add -q -b gh-pages \ - "git@github.com:${GH_OWNER}/${GH_PROJECT_NAME}" ${GH_PAGES_DIR} - -# Determine if we are building a new tag or are building docs -# for master. Then build new docs in docs/_build from master. -if [[ -n "${CIRCLE_TAG}" ]]; then - # Sphinx will use the package version by default. - build_docs -else - SPHINX_RELEASE=$(git log -1 --pretty=%h) build_docs -fi - -# Update gh-pages with the created docs. -cd ${GH_PAGES_DIR} -git rm -fr latest/ -cp -R ../docs/_build/html/ latest/ - -# Update the files push to gh-pages. -git add . -git status - -# If there are no changes, just exit cleanly. -if [[ -z "$(git status --porcelain)" ]]; then - echo "Nothing to commit. Exiting without pushing changes." - exit -fi - -# Commit to gh-pages branch to apply changes. -git config --global user.email "dpebot@google.com" -git config --global user.name "dpebot" -git commit -m "Update docs after merge to master." - -# NOTE: This may fail if two docs updates (on merges to master) -# happen in close proximity. -git push -q origin HEAD:gh-pages diff --git a/packages/google-cloud-error-reporting/test_utils/setup.py b/packages/google-cloud-error-reporting/test_utils/setup.py deleted file mode 100644 index 8e9222a7f862..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/setup.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright 2017 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 os - -from setuptools import find_packages -from setuptools import setup - - -PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__)) - - -# NOTE: This is duplicated throughout and we should try to -# consolidate. -SETUP_BASE = { - 'author': 'Google Cloud Platform', - 'author_email': 'googleapis-publisher@google.com', - 'scripts': [], - 'url': 'https://github.com/GoogleCloudPlatform/google-cloud-python', - 'license': 'Apache 2.0', - 'platforms': 'Posix; MacOS X; Windows', - 'include_package_data': True, - 'zip_safe': False, - 'classifiers': [ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: Apache Software License', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Topic :: Internet', - ], -} - - -REQUIREMENTS = [ - 'google-auth >= 0.4.0', - 'six', -] - -setup( - name='google-cloud-testutils', - version='0.24.0', - description='System test utilities for google-cloud-python', - packages=find_packages(), - install_requires=REQUIREMENTS, - python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*', - **SETUP_BASE -) diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/__init__.py b/packages/google-cloud-error-reporting/test_utils/test_utils/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/imports.py b/packages/google-cloud-error-reporting/test_utils/test_utils/imports.py deleted file mode 100644 index 5991af7fc465..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/test_utils/imports.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2019 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 mock -import six - - -def maybe_fail_import(predicate): - """Create and return a patcher that conditionally makes an import fail. - - Args: - predicate (Callable[[...], bool]): A callable that, if it returns `True`, - triggers an `ImportError`. It must accept the same arguments as the - built-in `__import__` function. - https://docs.python.org/3/library/functions.html#__import__ - - Returns: - A mock patcher object that can be used to enable patched import behavior. - """ - orig_import = six.moves.builtins.__import__ - - def custom_import(name, globals=None, locals=None, fromlist=(), level=0): - if predicate(name, globals, locals, fromlist, level): - raise ImportError - return orig_import(name, globals, locals, fromlist, level) - - return mock.patch.object(six.moves.builtins, "__import__", new=custom_import) diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/retry.py b/packages/google-cloud-error-reporting/test_utils/test_utils/retry.py deleted file mode 100644 index e61c001a03e1..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/test_utils/retry.py +++ /dev/null @@ -1,207 +0,0 @@ -# Copyright 2016 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 time -from functools import wraps - -import six - -MAX_TRIES = 4 -DELAY = 1 -BACKOFF = 2 - - -def _retry_all(_): - """Retry all caught exceptions.""" - return True - - -class BackoffFailed(Exception): - """Retry w/ backoffs did not complete successfully.""" - - -class RetryBase(object): - """Base for retrying calling a decorated function w/ exponential backoff. - - :type max_tries: int - :param max_tries: Number of times to try (not retry) before giving up. - - :type delay: int - :param delay: Initial delay between retries in seconds. - - :type backoff: int - :param backoff: Backoff multiplier e.g. value of 2 will double the - delay each retry. - - :type logger: logging.Logger instance - :param logger: Logger to use. If None, print. - """ - def __init__(self, max_tries=MAX_TRIES, delay=DELAY, backoff=BACKOFF, - logger=None): - self.max_tries = max_tries - self.delay = delay - self.backoff = backoff - self.logger = logger.warning if logger else six.print_ - - -class RetryErrors(RetryBase): - """Decorator for retrying given exceptions in testing. - - :type exception: Exception or tuple of Exceptions - :param exception: The exception to check or may be a tuple of - exceptions to check. - - :type error_predicate: function, takes caught exception, returns bool - :param error_predicate: Predicate evaluating whether to retry after a - caught exception. - - :type max_tries: int - :param max_tries: Number of times to try (not retry) before giving up. - - :type delay: int - :param delay: Initial delay between retries in seconds. - - :type backoff: int - :param backoff: Backoff multiplier e.g. value of 2 will double the - delay each retry. - - :type logger: logging.Logger instance - :param logger: Logger to use. If None, print. - """ - def __init__(self, exception, error_predicate=_retry_all, - max_tries=MAX_TRIES, delay=DELAY, backoff=BACKOFF, - logger=None): - super(RetryErrors, self).__init__(max_tries, delay, backoff, logger) - self.exception = exception - self.error_predicate = error_predicate - - def __call__(self, to_wrap): - @wraps(to_wrap) - def wrapped_function(*args, **kwargs): - tries = 0 - while tries < self.max_tries: - try: - return to_wrap(*args, **kwargs) - except self.exception as caught_exception: - - if not self.error_predicate(caught_exception): - raise - - delay = self.delay * self.backoff**tries - msg = ("%s, Trying again in %d seconds..." % - (caught_exception, delay)) - self.logger(msg) - - time.sleep(delay) - tries += 1 - return to_wrap(*args, **kwargs) - - return wrapped_function - - -class RetryResult(RetryBase): - """Decorator for retrying based on non-error result. - - :type result_predicate: function, takes result, returns bool - :param result_predicate: Predicate evaluating whether to retry after a - result is returned. - - :type max_tries: int - :param max_tries: Number of times to try (not retry) before giving up. - - :type delay: int - :param delay: Initial delay between retries in seconds. - - :type backoff: int - :param backoff: Backoff multiplier e.g. value of 2 will double the - delay each retry. - - :type logger: logging.Logger instance - :param logger: Logger to use. If None, print. - """ - def __init__(self, result_predicate, - max_tries=MAX_TRIES, delay=DELAY, backoff=BACKOFF, - logger=None): - super(RetryResult, self).__init__(max_tries, delay, backoff, logger) - self.result_predicate = result_predicate - - def __call__(self, to_wrap): - @wraps(to_wrap) - def wrapped_function(*args, **kwargs): - tries = 0 - while tries < self.max_tries: - result = to_wrap(*args, **kwargs) - if self.result_predicate(result): - return result - - delay = self.delay * self.backoff**tries - msg = "%s. Trying again in %d seconds..." % ( - self.result_predicate.__name__, delay,) - self.logger(msg) - - time.sleep(delay) - tries += 1 - raise BackoffFailed() - - return wrapped_function - - -class RetryInstanceState(RetryBase): - """Decorator for retrying based on instance state. - - :type instance_predicate: function, takes instance, returns bool - :param instance_predicate: Predicate evaluating whether to retry after an - API-invoking method is called. - - :type max_tries: int - :param max_tries: Number of times to try (not retry) before giving up. - - :type delay: int - :param delay: Initial delay between retries in seconds. - - :type backoff: int - :param backoff: Backoff multiplier e.g. value of 2 will double the - delay each retry. - - :type logger: logging.Logger instance - :param logger: Logger to use. If None, print. - """ - def __init__(self, instance_predicate, - max_tries=MAX_TRIES, delay=DELAY, backoff=BACKOFF, - logger=None): - super(RetryInstanceState, self).__init__( - max_tries, delay, backoff, logger) - self.instance_predicate = instance_predicate - - def __call__(self, to_wrap): - instance = to_wrap.__self__ # only instance methods allowed - - @wraps(to_wrap) - def wrapped_function(*args, **kwargs): - tries = 0 - while tries < self.max_tries: - result = to_wrap(*args, **kwargs) - if self.instance_predicate(instance): - return result - - delay = self.delay * self.backoff**tries - msg = "%s. Trying again in %d seconds..." % ( - self.instance_predicate.__name__, delay,) - self.logger(msg) - - time.sleep(delay) - tries += 1 - raise BackoffFailed() - - return wrapped_function diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/system.py b/packages/google-cloud-error-reporting/test_utils/test_utils/system.py deleted file mode 100644 index 590dc62a06e6..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/test_utils/system.py +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright 2014 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 __future__ import print_function -import os -import sys -import time - -import google.auth.credentials -from google.auth.environment_vars import CREDENTIALS as TEST_CREDENTIALS - - -# From shell environ. May be None. -CREDENTIALS = os.getenv(TEST_CREDENTIALS) - -ENVIRON_ERROR_MSG = """\ -To run the system tests, you need to set some environment variables. -Please check the CONTRIBUTING guide for instructions. -""" - - -class EmulatorCreds(google.auth.credentials.Credentials): - """A mock credential object. - - Used to avoid unnecessary token refreshing or reliance on the network - while an emulator is running. - """ - - def __init__(self): # pylint: disable=super-init-not-called - self.token = b'seekrit' - self.expiry = None - - @property - def valid(self): - """Would-be validity check of the credentials. - - Always is :data:`True`. - """ - return True - - def refresh(self, unused_request): # pylint: disable=unused-argument - """Off-limits implementation for abstract method.""" - raise RuntimeError('Should never be refreshed.') - - -def check_environ(): - err_msg = None - if CREDENTIALS is None: - err_msg = '\nMissing variables: ' + TEST_CREDENTIALS - elif not os.path.isfile(CREDENTIALS): - err_msg = '\nThe %s path %r is not a file.' % (TEST_CREDENTIALS, - CREDENTIALS) - - if err_msg is not None: - msg = ENVIRON_ERROR_MSG + err_msg - print(msg, file=sys.stderr) - sys.exit(1) - - -def unique_resource_id(delimiter='_'): - """A unique identifier for a resource. - - Intended to help locate resources created in particular - testing environments and at particular times. - """ - build_id = os.getenv('CIRCLE_BUILD_NUM', '') - if build_id == '': - return '%s%d' % (delimiter, 1000 * time.time()) - else: - return '%s%s%s%d' % (delimiter, build_id, delimiter, time.time()) diff --git a/packages/google-cloud-error-reporting/test_utils/test_utils/vpcsc_config.py b/packages/google-cloud-error-reporting/test_utils/test_utils/vpcsc_config.py deleted file mode 100644 index 36b15d6be991..000000000000 --- a/packages/google-cloud-error-reporting/test_utils/test_utils/vpcsc_config.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2019 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 -# -# https://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 os - -import pytest - - -INSIDE_VPCSC_ENVVAR = "GOOGLE_CLOUD_TESTS_IN_VPCSC" -PROJECT_INSIDE_ENVVAR = "PROJECT_ID" -PROJECT_OUTSIDE_ENVVAR = "GOOGLE_CLOUD_TESTS_VPCSC_OUTSIDE_PERIMETER_PROJECT" -BUCKET_OUTSIDE_ENVVAR = "GOOGLE_CLOUD_TESTS_VPCSC_OUTSIDE_PERIMETER_BUCKET" - - -class VPCSCTestConfig(object): - """System test utility for VPCSC detection. - - See: https://cloud.google.com/vpc-service-controls/docs/ - """ - - @property - def inside_vpcsc(self): - """Test whether the test environment is configured to run inside VPCSC. - - Returns: - bool: - true if the environment is configured to run inside VPCSC, - else false. - """ - return INSIDE_VPCSC_ENVVAR in os.environ - - @property - def project_inside(self): - """Project ID for testing outside access. - - Returns: - str: project ID used for testing outside access; None if undefined. - """ - return os.environ.get(PROJECT_INSIDE_ENVVAR, None) - - @property - def project_outside(self): - """Project ID for testing inside access. - - Returns: - str: project ID used for testing inside access; None if undefined. - """ - return os.environ.get(PROJECT_OUTSIDE_ENVVAR, None) - - @property - def bucket_outside(self): - """GCS bucket for testing inside access. - - Returns: - str: bucket ID used for testing inside access; None if undefined. - """ - return os.environ.get(BUCKET_OUTSIDE_ENVVAR, None) - - def skip_if_inside_vpcsc(self, testcase): - """Test decorator: skip if running inside VPCSC.""" - reason = ( - "Running inside VPCSC. " - "Unset the {} environment variable to enable this test." - ).format(INSIDE_VPCSC_ENVVAR) - skip = pytest.mark.skipif(self.inside_vpcsc, reason=reason) - return skip(testcase) - - def skip_unless_inside_vpcsc(self, testcase): - """Test decorator: skip if running outside VPCSC.""" - reason = ( - "Running outside VPCSC. " - "Set the {} environment variable to enable this test." - ).format(INSIDE_VPCSC_ENVVAR) - skip = pytest.mark.skipif(not self.inside_vpcsc, reason=reason) - return skip(testcase) - - def skip_unless_inside_project(self, testcase): - """Test decorator: skip if inside project env var not set.""" - reason = ( - "Project ID for running inside VPCSC not set. " - "Set the {} environment variable to enable this test." - ).format(PROJECT_INSIDE_ENVVAR) - skip = pytest.mark.skipif(self.project_inside is None, reason=reason) - return skip(testcase) - - def skip_unless_outside_project(self, testcase): - """Test decorator: skip if outside project env var not set.""" - reason = ( - "Project ID for running outside VPCSC not set. " - "Set the {} environment variable to enable this test." - ).format(PROJECT_OUTSIDE_ENVVAR) - skip = pytest.mark.skipif(self.project_outside is None, reason=reason) - return skip(testcase) - - def skip_unless_outside_bucket(self, testcase): - """Test decorator: skip if outside bucket env var not set.""" - reason = ( - "Bucket ID for running outside VPCSC not set. " - "Set the {} environment variable to enable this test." - ).format(BUCKET_OUTSIDE_ENVVAR) - skip = pytest.mark.skipif(self.bucket_outside is None, reason=reason) - return skip(testcase) - - -vpcsc_config = VPCSCTestConfig() From 7a381e0262443740dcfd04744922ba14ed92de7c Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 13 Jul 2021 15:56:22 +0200 Subject: [PATCH 245/467] chore(deps): update dependency google-cloud-error-reporting to v1.2.0 (#147) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [google-cloud-error-reporting](https://togithub.com/googleapis/python-error-reporting) | `==1.1.2` -> `==1.2.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-error-reporting/1.2.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-error-reporting/1.2.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-error-reporting/1.2.0/compatibility-slim/1.1.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-error-reporting/1.2.0/confidence-slim/1.1.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/python-error-reporting ### [`v1.2.0`](https://togithub.com/googleapis/python-error-reporting/blob/master/CHANGELOG.md#​120-httpswwwgithubcomgoogleapispython-error-reportingcomparev112v120-2021-07-01) [Compare Source](https://togithub.com/googleapis/python-error-reporting/compare/v1.1.2...v1.2.0) ##### Features - add always_use_jwt_access ([#​140](https://www.github.com/googleapis/python-error-reporting/issues/140)) ([2f8f790](https://www.github.com/googleapis/python-error-reporting/commit/2f8f790dd70646848afd5e5209a147b01c6f388b)) ##### Bug Fixes - **deps:** add packaging requirement ([#​124](https://www.github.com/googleapis/python-error-reporting/issues/124)) ([ed36389](https://www.github.com/googleapis/python-error-reporting/commit/ed3638946f8829c4d2b379785e38cc2a2228c688)) - **deps:** widen version range on google-cloud-logging ([#​133](https://www.github.com/googleapis/python-error-reporting/issues/133)) ([c5e87bb](https://www.github.com/googleapis/python-error-reporting/commit/c5e87bb8c177688833ca9524daa4e6229875627d)) - disable always_use_jwt_access ([8aff323](https://www.github.com/googleapis/python-error-reporting/commit/8aff32330ebf544cc043bec0003140d61df7e7a1)) - disable always_use_jwt_access ([#​144](https://www.github.com/googleapis/python-error-reporting/issues/144)) ([8aff323](https://www.github.com/googleapis/python-error-reporting/commit/8aff32330ebf544cc043bec0003140d61df7e7a1)) ##### Documentation - omit mention of Python 2.7 in 'CONTRIBUTING.rst' ([#​1127](https://www.github.com/googleapis/python-error-reporting/issues/1127)) ([#​137](https://www.github.com/googleapis/python-error-reporting/issues/137)) ([0ca7d43](https://www.github.com/googleapis/python-error-reporting/commit/0ca7d4385de86e7ff462322807a717345774c017)) ##### [1.1.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.1...v1.1.2) (2021-04-05) ##### Dependencies - upgrade sphinx ([#​99](https://www.github.com/googleapis/python-error-reporting/issues/99)) ([a118123](https://www.github.com/googleapis/python-error-reporting/commit/a118123cbfe8b5dd2a7ba260631b248c351cb116)) ##### [1.1.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.0...v1.1.1) (2021-02-25) ##### Bug Fixes - remove gRPC send/recv limit; add enums to `types/__init__.py` ([#​57](https://www.github.com/googleapis/python-error-reporting/issues/57)) ([e23e5ba](https://www.github.com/googleapis/python-error-reporting/commit/e23e5ba7eba4482735d5f4897210a1ebb81bfb8a))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-error-reporting). --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 562e76058776..da110b50f6be 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.1.2 +google-cloud-error-reporting==1.2.0 From 27b65bcab23b6d135e0573fa23704a10a5c3a5a2 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 14 Jul 2021 15:24:37 +0000 Subject: [PATCH 246/467] build(python): exit with success status if no samples found (#148) Source-Link: https://github.com/googleapis/synthtool/commit/53ea3896a52f87c758e79b5a19fa338c83925a98 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:e1793a23ae0ee9aafb2e3a53b564a351f74790dbe3c2d75f8fc3b8c43e5c036c --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/test-samples-impl.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index e2b39f946040..a5d3697f2167 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:99d90d097e4a4710cc8658ee0b5b963f4426d0e424819787c3ac1405c9a26719 + digest: sha256:e1793a23ae0ee9aafb2e3a53b564a351f74790dbe3c2d75f8fc3b8c43e5c036c diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh index cf5de74c17a5..311a8d54b9f1 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh @@ -20,9 +20,9 @@ set -eo pipefail # Enables `**` to include files nested inside sub-folders shopt -s globstar -# Exit early if samples directory doesn't exist -if [ ! -d "./samples" ]; then - echo "No tests run. `./samples` not found" +# Exit early if samples don't exist +if ! find samples -name 'requirements.txt' | grep -q .; then + echo "No tests run. './samples/**/requirements.txt' not found" exit 0 fi From 403dc6cefb3d3bb4b0e2cb074f62fe3334f33689 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 14 Jul 2021 19:50:23 +0000 Subject: [PATCH 247/467] build(python): remove python 3.7 from kokoro Dockerfile (#149) Source-Link: https://github.com/googleapis/synthtool/commit/e44dc0c742b1230887a73552357e0c18dcc30b92 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:5ff7446edeaede81c3ed58b23a4e76a5403fba1350ce28478045657303b6479d --- .../.github/.OwlBot.lock.yaml | 3 +- .../.kokoro/docker/docs/Dockerfile | 35 +-------------- .../.kokoro/docker/docs/fetch_gpg_keys.sh | 45 ------------------- 3 files changed, 4 insertions(+), 79 deletions(-) delete mode 100755 packages/google-cloud-error-reporting/.kokoro/docker/docs/fetch_gpg_keys.sh diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index a5d3697f2167..fb0f61e82485 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,4 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:e1793a23ae0ee9aafb2e3a53b564a351f74790dbe3c2d75f8fc3b8c43e5c036c + digest: sha256:5ff7446edeaede81c3ed58b23a4e76a5403fba1350ce28478045657303b6479d + diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile index 412b0b56a921..4e1b1fb8b5a5 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -40,6 +40,7 @@ RUN apt-get update \ libssl-dev \ libsqlite3-dev \ portaudio19-dev \ + python3-distutils \ redis-server \ software-properties-common \ ssh \ @@ -59,40 +60,8 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* \ && rm -f /var/cache/apt/archives/*.deb - -COPY fetch_gpg_keys.sh /tmp -# Install the desired versions of Python. -RUN set -ex \ - && export GNUPGHOME="$(mktemp -d)" \ - && echo "disable-ipv6" >> "${GNUPGHOME}/dirmngr.conf" \ - && /tmp/fetch_gpg_keys.sh \ - && for PYTHON_VERSION in 3.7.8 3.8.5; do \ - wget --no-check-certificate -O python-${PYTHON_VERSION}.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \ - && wget --no-check-certificate -O python-${PYTHON_VERSION}.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \ - && gpg --batch --verify python-${PYTHON_VERSION}.tar.xz.asc python-${PYTHON_VERSION}.tar.xz \ - && rm -r python-${PYTHON_VERSION}.tar.xz.asc \ - && mkdir -p /usr/src/python-${PYTHON_VERSION} \ - && tar -xJC /usr/src/python-${PYTHON_VERSION} --strip-components=1 -f python-${PYTHON_VERSION}.tar.xz \ - && rm python-${PYTHON_VERSION}.tar.xz \ - && cd /usr/src/python-${PYTHON_VERSION} \ - && ./configure \ - --enable-shared \ - # This works only on Python 2.7 and throws a warning on every other - # version, but seems otherwise harmless. - --enable-unicode=ucs4 \ - --with-system-ffi \ - --without-ensurepip \ - && make -j$(nproc) \ - && make install \ - && ldconfig \ - ; done \ - && rm -rf "${GNUPGHOME}" \ - && rm -rf /usr/src/python* \ - && rm -rf ~/.cache/ - RUN wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ - && python3.7 /tmp/get-pip.py \ && python3.8 /tmp/get-pip.py \ && rm /tmp/get-pip.py -CMD ["python3.7"] +CMD ["python3.8"] diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/fetch_gpg_keys.sh b/packages/google-cloud-error-reporting/.kokoro/docker/docs/fetch_gpg_keys.sh deleted file mode 100755 index d653dd868e4b..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/fetch_gpg_keys.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -# Copyright 2020 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. - -# A script to fetch gpg keys with retry. -# Avoid jinja parsing the file. -# - -function retry { - if [[ "${#}" -le 1 ]]; then - echo "Usage: ${0} retry_count commands.." - exit 1 - fi - local retries=${1} - local command="${@:2}" - until [[ "${retries}" -le 0 ]]; do - $command && return 0 - if [[ $? -ne 0 ]]; then - echo "command failed, retrying" - ((retries--)) - fi - done - return 1 -} - -# 3.6.9, 3.7.5 (Ned Deily) -retry 3 gpg --keyserver ha.pool.sks-keyservers.net --recv-keys \ - 0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D - -# 3.8.0 (Łukasz Langa) -retry 3 gpg --keyserver ha.pool.sks-keyservers.net --recv-keys \ - E3FF2839C048B25C084DEBE9B26995E310250568 - -# From 37792290d79879cc3f6de43b7623e18db956dffe Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Tue, 20 Jul 2021 03:44:12 -0600 Subject: [PATCH 248/467] fix(deps): pin 'google-{api,cloud}-core', 'google-auth' to allow 2.x versions (#150) Expand pins on library dependencies in preparation for these dependencies taking a new major version. See https://github.com/googleapis/google-cloud-python/issues/10566. --- packages/google-cloud-error-reporting/setup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 90e25a4de3ca..383e8005c60b 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -30,7 +30,10 @@ release_status = "Development Status :: 4 - Beta" dependencies = [ "google-cloud-logging>=1.14.0, <3.0.0dev", - "google-api-core[grpc] >= 1.26.0, <2.0.0dev", + # NOTE: Maintainers, please do not require google-api-core>=2.x.x + # Until this issue is closed + # https://github.com/googleapis/google-cloud-python/issues/10566 + "google-api-core[grpc] >= 1.26.0, <3.0.0dev", "proto-plus >= 1.4.0", "packaging >= 14.3", ] From f56cbca5dca88a4153b9aa05bd9e622740e4a240 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Wed, 21 Jul 2021 23:10:08 +0000 Subject: [PATCH 249/467] chore: release 1.2.1 (#152) :robot: I have created a release \*beep\* \*boop\* --- ### [1.2.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.0...v1.2.1) (2021-07-20) ### Bug Fixes * **deps:** pin 'google-{api,cloud}-core', 'google-auth' to allow 2.x versions ([#150](https://www.github.com/googleapis/python-error-reporting/issues/150)) ([1c87673](https://www.github.com/googleapis/python-error-reporting/commit/1c876738b0bdca1b2bd65d78fa541846b0474cfa)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index a9d149e21105..e2a0ee512aaf 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +### [1.2.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.0...v1.2.1) (2021-07-20) + + +### Bug Fixes + +* **deps:** pin 'google-{api,cloud}-core', 'google-auth' to allow 2.x versions ([#150](https://www.github.com/googleapis/python-error-reporting/issues/150)) ([1c87673](https://www.github.com/googleapis/python-error-reporting/commit/1c876738b0bdca1b2bd65d78fa541846b0474cfa)) + ## [1.2.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.2...v1.2.0) (2021-07-01) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 383e8005c60b..79f35d5f192e 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.2.0" +version = "1.2.1" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From c29db5240e80ea4951c07043ef47d5d7720e1571 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 22 Jul 2021 13:48:41 +0000 Subject: [PATCH 250/467] feat: add Samples section to CONTRIBUTING.rst (#151) Source-Link: https://github.com/googleapis/synthtool/commit/52e4e46eff2a0b70e3ff5506a02929d089d077d4 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:6186535cbdbf6b9fe61f00294929221d060634dae4a0795c1cefdbc995b2d605 --- .../.github/.OwlBot.lock.yaml | 3 +-- .../CONTRIBUTING.rst | 24 +++++++++++++++++++ .../samples/snippets/api/noxfile.py | 5 ++-- .../snippets/fluent_on_compute/noxfile.py | 5 ++-- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index fb0f61e82485..d57f74204625 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,4 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:5ff7446edeaede81c3ed58b23a4e76a5403fba1350ce28478045657303b6479d - + digest: sha256:6186535cbdbf6b9fe61f00294929221d060634dae4a0795c1cefdbc995b2d605 diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 38c4688e3d47..3f4006ca5c11 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -177,6 +177,30 @@ Build the docs via: $ nox -s docs +************************* +Samples and code snippets +************************* + +Code samples and snippets live in the `samples/` catalogue. Feel free to +provide more examples, but make sure to write tests for those examples. +Each folder containing example code requires its own `noxfile.py` script +which automates testing. If you decide to create a new folder, you can +base it on the `samples/snippets` folder (providing `noxfile.py` and +the requirements files). + +The tests will run against a real Google Cloud Project, so you should +configure them just like the System Tests. + +- To run sample tests, you can execute:: + + # Run all tests in a folder + $ cd samples/snippets + $ nox -s py-3.8 + + # Run a single sample test + $ cd samples/snippets + $ nox -s py-3.8 -- -k + ******************************************** Note About ``README`` as it pertains to PyPI ******************************************** diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 5ff9e1db5808..6a8ccdae22c9 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -28,8 +28,9 @@ # WARNING - WARNING - WARNING - WARNING - WARNING # WARNING - WARNING - WARNING - WARNING - WARNING -# Copy `noxfile_config.py` to your directory and modify it instead. +BLACK_VERSION = "black==19.10b0" +# Copy `noxfile_config.py` to your directory and modify it instead. # `TEST_CONFIG` dict is a configuration hook that allows users to # modify the test configurations. The values here should be in sync @@ -159,7 +160,7 @@ def lint(session: nox.sessions.Session) -> None: @nox.session def blacken(session: nox.sessions.Session) -> None: - session.install("black") + session.install(BLACK_VERSION) python_files = [path for path in os.listdir(".") if path.endswith(".py")] session.run("black", *python_files) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 5ff9e1db5808..6a8ccdae22c9 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -28,8 +28,9 @@ # WARNING - WARNING - WARNING - WARNING - WARNING # WARNING - WARNING - WARNING - WARNING - WARNING -# Copy `noxfile_config.py` to your directory and modify it instead. +BLACK_VERSION = "black==19.10b0" +# Copy `noxfile_config.py` to your directory and modify it instead. # `TEST_CONFIG` dict is a configuration hook that allows users to # modify the test configurations. The values here should be in sync @@ -159,7 +160,7 @@ def lint(session: nox.sessions.Session) -> None: @nox.session def blacken(session: nox.sessions.Session) -> None: - session.install("black") + session.install(BLACK_VERSION) python_files = [path for path in os.listdir(".") if path.endswith(".py")] session.run("black", *python_files) From 716a37cfab13e268819a1176723370591402edcc Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 22 Jul 2021 16:22:12 +0200 Subject: [PATCH 251/467] chore(deps): update dependency google-cloud-error-reporting to v1.2.1 (#153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [google-cloud-error-reporting](https://togithub.com/googleapis/python-error-reporting) | `==1.2.0` -> `==1.2.1` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-error-reporting/1.2.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-error-reporting/1.2.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-error-reporting/1.2.1/compatibility-slim/1.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-error-reporting/1.2.1/confidence-slim/1.2.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/python-error-reporting ### [`v1.2.1`](https://togithub.com/googleapis/python-error-reporting/blob/master/CHANGELOG.md#​121-httpswwwgithubcomgoogleapispython-error-reportingcomparev120v121-2021-07-20) [Compare Source](https://togithub.com/googleapis/python-error-reporting/compare/v1.2.0...v1.2.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-error-reporting). --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index da110b50f6be..df958732e9cd 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.2.0 +google-cloud-error-reporting==1.2.1 From 9ae6dc2edec3e5b29835b2e793f727490c0ecd0e Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 23 Jul 2021 15:33:12 +0000 Subject: [PATCH 252/467] chore: fix kokoro config for samples (#155) Source-Link: https://github.com/googleapis/synthtool/commit/dd05f9d12f134871c9e45282349c9856fbebecdd Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:aea14a583128771ae8aefa364e1652f3c56070168ef31beb203534222d842b8b --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/samples/python3.6/periodic-head.cfg | 2 +- .../.kokoro/samples/python3.7/periodic-head.cfg | 2 +- .../.kokoro/samples/python3.8/periodic-head.cfg | 2 +- .../.kokoro/samples/python3.9/periodic-head.cfg | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index d57f74204625..9ee60f7e4850 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:6186535cbdbf6b9fe61f00294929221d060634dae4a0795c1cefdbc995b2d605 + digest: sha256:aea14a583128771ae8aefa364e1652f3c56070168ef31beb203534222d842b8b diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg index f9cfcd33e058..0ab001caaf12 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg @@ -7,5 +7,5 @@ env_vars: { env_vars: { key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" } diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg index f9cfcd33e058..0ab001caaf12 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg @@ -7,5 +7,5 @@ env_vars: { env_vars: { key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" } diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg index f9cfcd33e058..0ab001caaf12 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg @@ -7,5 +7,5 @@ env_vars: { env_vars: { key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" } diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg index f9cfcd33e058..0ab001caaf12 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg @@ -7,5 +7,5 @@ env_vars: { env_vars: { key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" } From b5bcf0bd36d0751eb057c580e9e420b69c3075b6 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 24 Jul 2021 10:16:19 +0000 Subject: [PATCH 253/467] fix: enable self signed jwt for grpc (#156) PiperOrigin-RevId: 386504689 Source-Link: https://github.com/googleapis/googleapis/commit/762094a99ac6e03a17516b13dfbef37927267a70 Source-Link: https://github.com/googleapis/googleapis-gen/commit/6bfc480e1a161d5de121c2bcc3745885d33b265a --- .../services/error_group_service/client.py | 4 +++ .../services/error_stats_service/client.py | 4 +++ .../services/report_errors_service/client.py | 4 +++ .../test_error_group_service.py | 31 +++++++++++-------- .../test_error_stats_service.py | 31 +++++++++++-------- .../test_report_errors_service.py | 31 +++++++++++-------- 6 files changed, 66 insertions(+), 39 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 969077fde2a3..1591223e5bb9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -341,6 +341,10 @@ def __init__( client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, + always_use_jwt_access=( + Transport == type(self).get_transport_class("grpc") + or Transport == type(self).get_transport_class("grpc_asyncio") + ), ) def get_group( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 60414659d9a9..2e9352c624b2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -344,6 +344,10 @@ def __init__( client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, + always_use_jwt_access=( + Transport == type(self).get_transport_class("grpc") + or Transport == type(self).get_transport_class("grpc_asyncio") + ), ) def list_group_stats( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 4ed19dd1d8b3..46e3d26d0003 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -329,6 +329,10 @@ def __init__( client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, + always_use_jwt_access=( + Transport == type(self).get_transport_class("grpc") + or Transport == type(self).get_transport_class("grpc_asyncio") + ), ) def report_error_event( diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 2ed701f95228..88547a599373 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -123,18 +123,6 @@ def test_error_group_service_client_from_service_account_info(client_class): assert client.transport._host == "clouderrorreporting.googleapis.com:443" -@pytest.mark.parametrize( - "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] -) -def test_error_group_service_client_service_account_always_use_jwt(client_class): - with mock.patch.object( - service_account.Credentials, "with_always_use_jwt_access", create=True - ) as use_jwt: - creds = service_account.Credentials(None, None, None) - client = client_class(credentials=creds) - use_jwt.assert_not_called() - - @pytest.mark.parametrize( "transport_class,transport_name", [ @@ -142,7 +130,7 @@ def test_error_group_service_client_service_account_always_use_jwt(client_class) (transports.ErrorGroupServiceGrpcAsyncIOTransport, "grpc_asyncio"), ], ) -def test_error_group_service_client_service_account_always_use_jwt_true( +def test_error_group_service_client_service_account_always_use_jwt( transport_class, transport_name ): with mock.patch.object( @@ -152,6 +140,13 @@ def test_error_group_service_client_service_account_always_use_jwt_true( 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", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] @@ -232,6 +227,7 @@ def test_error_group_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -248,6 +244,7 @@ def test_error_group_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -264,6 +261,7 @@ def test_error_group_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has @@ -292,6 +290,7 @@ def test_error_group_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id="octopus", client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -368,6 +367,7 @@ def test_error_group_service_client_mtls_env_auto( 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, ) # Check the case ADC client cert is provided. Whether client cert is used depends on @@ -401,6 +401,7 @@ def test_error_group_service_client_mtls_env_auto( 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, ) # Check the case client_cert_source and ADC client cert are not provided. @@ -422,6 +423,7 @@ def test_error_group_service_client_mtls_env_auto( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -452,6 +454,7 @@ def test_error_group_service_client_client_options_scopes( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -482,6 +485,7 @@ def test_error_group_service_client_client_options_credentials_file( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -501,6 +505,7 @@ def test_error_group_service_client_client_options_from_dict(): client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 96acc5ba6390..b890b123d1d5 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -126,18 +126,6 @@ def test_error_stats_service_client_from_service_account_info(client_class): assert client.transport._host == "clouderrorreporting.googleapis.com:443" -@pytest.mark.parametrize( - "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] -) -def test_error_stats_service_client_service_account_always_use_jwt(client_class): - with mock.patch.object( - service_account.Credentials, "with_always_use_jwt_access", create=True - ) as use_jwt: - creds = service_account.Credentials(None, None, None) - client = client_class(credentials=creds) - use_jwt.assert_not_called() - - @pytest.mark.parametrize( "transport_class,transport_name", [ @@ -145,7 +133,7 @@ def test_error_stats_service_client_service_account_always_use_jwt(client_class) (transports.ErrorStatsServiceGrpcAsyncIOTransport, "grpc_asyncio"), ], ) -def test_error_stats_service_client_service_account_always_use_jwt_true( +def test_error_stats_service_client_service_account_always_use_jwt( transport_class, transport_name ): with mock.patch.object( @@ -155,6 +143,13 @@ def test_error_stats_service_client_service_account_always_use_jwt_true( 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", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] @@ -235,6 +230,7 @@ def test_error_stats_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -251,6 +247,7 @@ def test_error_stats_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -267,6 +264,7 @@ def test_error_stats_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has @@ -295,6 +293,7 @@ def test_error_stats_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id="octopus", client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -371,6 +370,7 @@ def test_error_stats_service_client_mtls_env_auto( 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, ) # Check the case ADC client cert is provided. Whether client cert is used depends on @@ -404,6 +404,7 @@ def test_error_stats_service_client_mtls_env_auto( 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, ) # Check the case client_cert_source and ADC client cert are not provided. @@ -425,6 +426,7 @@ def test_error_stats_service_client_mtls_env_auto( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -455,6 +457,7 @@ def test_error_stats_service_client_client_options_scopes( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -485,6 +488,7 @@ def test_error_stats_service_client_client_options_credentials_file( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -504,6 +508,7 @@ def test_error_stats_service_client_client_options_from_dict(): client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index c9fbd13abb50..b1249fb2fa1e 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -126,18 +126,6 @@ def test_report_errors_service_client_from_service_account_info(client_class): assert client.transport._host == "clouderrorreporting.googleapis.com:443" -@pytest.mark.parametrize( - "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] -) -def test_report_errors_service_client_service_account_always_use_jwt(client_class): - with mock.patch.object( - service_account.Credentials, "with_always_use_jwt_access", create=True - ) as use_jwt: - creds = service_account.Credentials(None, None, None) - client = client_class(credentials=creds) - use_jwt.assert_not_called() - - @pytest.mark.parametrize( "transport_class,transport_name", [ @@ -145,7 +133,7 @@ def test_report_errors_service_client_service_account_always_use_jwt(client_clas (transports.ReportErrorsServiceGrpcAsyncIOTransport, "grpc_asyncio"), ], ) -def test_report_errors_service_client_service_account_always_use_jwt_true( +def test_report_errors_service_client_service_account_always_use_jwt( transport_class, transport_name ): with mock.patch.object( @@ -155,6 +143,13 @@ def test_report_errors_service_client_service_account_always_use_jwt_true( 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", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] @@ -239,6 +234,7 @@ def test_report_errors_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -255,6 +251,7 @@ def test_report_errors_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -271,6 +268,7 @@ def test_report_errors_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has @@ -299,6 +297,7 @@ def test_report_errors_service_client_client_options( client_cert_source_for_mtls=None, quota_project_id="octopus", client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -375,6 +374,7 @@ def test_report_errors_service_client_mtls_env_auto( 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, ) # Check the case ADC client cert is provided. Whether client cert is used depends on @@ -408,6 +408,7 @@ def test_report_errors_service_client_mtls_env_auto( 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, ) # Check the case client_cert_source and ADC client cert are not provided. @@ -429,6 +430,7 @@ def test_report_errors_service_client_mtls_env_auto( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -463,6 +465,7 @@ def test_report_errors_service_client_client_options_scopes( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -497,6 +500,7 @@ def test_report_errors_service_client_client_options_credentials_file( client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) @@ -516,6 +520,7 @@ def test_report_errors_service_client_client_options_from_dict(): client_cert_source_for_mtls=None, quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, ) From 41efc48fc98ef4a06c546fc6badc744ca40363e4 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Wed, 28 Jul 2021 10:58:23 +0000 Subject: [PATCH 254/467] chore: release 1.2.2 (#158) :robot: I have created a release \*beep\* \*boop\* --- ### [1.2.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.1...v1.2.2) (2021-07-28) ### Bug Fixes * enable self signed jwt for grpc ([#156](https://www.github.com/googleapis/python-error-reporting/issues/156)) ([f9656c8](https://www.github.com/googleapis/python-error-reporting/commit/f9656c81db2f29ba4ac9ba4a5304004cd725ca5c)) ### Documentation * add Samples section to CONTRIBUTING.rst ([#151](https://www.github.com/googleapis/python-error-reporting/issues/151)) ([8f11190](https://www.github.com/googleapis/python-error-reporting/commit/8f11190661e62165bd1c4a30b40797ef31abed33)) ### Miscellaneous Chores * release as 1.2.2 ([#157](https://www.github.com/googleapis/python-error-reporting/issues/157)) ([ea26377](https://www.github.com/googleapis/python-error-reporting/commit/ea2637721efac36b122edc499da08c12ae894d28)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- .../google-cloud-error-reporting/CHANGELOG.md | 17 +++++++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index e2a0ee512aaf..ac6570e44ca1 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,23 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +### [1.2.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.1...v1.2.2) (2021-07-28) + + +### Bug Fixes + +* enable self signed jwt for grpc ([#156](https://www.github.com/googleapis/python-error-reporting/issues/156)) ([f9656c8](https://www.github.com/googleapis/python-error-reporting/commit/f9656c81db2f29ba4ac9ba4a5304004cd725ca5c)) + + +### Documentation + +* add Samples section to CONTRIBUTING.rst ([#151](https://www.github.com/googleapis/python-error-reporting/issues/151)) ([8f11190](https://www.github.com/googleapis/python-error-reporting/commit/8f11190661e62165bd1c4a30b40797ef31abed33)) + + +### Miscellaneous Chores + +* release as 1.2.2 ([#157](https://www.github.com/googleapis/python-error-reporting/issues/157)) ([ea26377](https://www.github.com/googleapis/python-error-reporting/commit/ea2637721efac36b122edc499da08c12ae894d28)) + ### [1.2.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.0...v1.2.1) (2021-07-20) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 79f35d5f192e..b0c9a42586ce 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.2.1" +version = "1.2.2" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 8b71ae6d3f94aa5914ccbe481cea042021c378cc Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 28 Jul 2021 16:51:57 +0200 Subject: [PATCH 255/467] chore(deps): update dependency google-cloud-error-reporting to v1.2.2 (#159) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index df958732e9cd..1264b37fd9ee 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.2.1 +google-cloud-error-reporting==1.2.2 From 0897d1d433167c4b7cf0969ecf3215ec3a573a47 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Mon, 2 Aug 2021 16:42:37 -0600 Subject: [PATCH 256/467] chore: require CODEOWNER review and up to date branches (#160) These two lines bring the rules on this repo in line with the defaults: https://github.com/googleapis/repo-automation-bots/blob/63c858e539e1f4d9bb8ea66e12f9c0a0de5fef55/packages/sync-repo-settings/src/required-checks.json#L40-L50 --- .../.github/sync-repo-settings.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml index af59935321a9..0ddb512dbab7 100644 --- a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml +++ b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml @@ -4,6 +4,8 @@ branchProtectionRules: # Identifies the protection rule pattern. Name of the branch to be protected. # Defaults to `master` - pattern: master + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: true requiredStatusCheckContexts: - 'Kokoro' - 'cla/google' From 8aae73c960d48dded842fa6c46658666ba3f738c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 16:32:39 +0000 Subject: [PATCH 257/467] chore: fix INSTALL_LIBRARY_FROM_SOURCE in noxfile.py (#161) Source-Link: https://github.com/googleapis/synthtool/commit/6252f2cd074c38f37b44abe5e96d128733eb1b61 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:50e35228649c47b6ca82aa0be3ff9eb2afce51c82b66c4a03fe4afeb5ff6c0fc --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../samples/snippets/api/noxfile.py | 2 +- .../samples/snippets/fluent_on_compute/noxfile.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 9ee60f7e4850..649877dc494c 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:aea14a583128771ae8aefa364e1652f3c56070168ef31beb203534222d842b8b + digest: sha256:50e35228649c47b6ca82aa0be3ff9eb2afce51c82b66c4a03fe4afeb5ff6c0fc diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 6a8ccdae22c9..125bb619cc49 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -96,7 +96,7 @@ def get_pytest_env_vars() -> Dict[str, str]: TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) -INSTALL_LIBRARY_FROM_SOURCE = bool(os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False)) +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ("True", "true") # # Style Checks # diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 6a8ccdae22c9..125bb619cc49 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -96,7 +96,7 @@ def get_pytest_env_vars() -> Dict[str, str]: TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) -INSTALL_LIBRARY_FROM_SOURCE = bool(os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False)) +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ("True", "true") # # Style Checks # From a612dff46b3870a1435c99407aa83daf3e91f51f Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 15:54:54 +0000 Subject: [PATCH 258/467] chore(python): avoid `.nox` directories when building docs (#162) Source-Link: https://github.com/googleapis/synthtool/commit/7e1f6da50524b5d98eb67adbf6dd0805df54233d Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:a1a891041baa4ffbe1a809ac1b8b9b4a71887293c9101c88e8e255943c5aec2d --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/docs/conf.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 649877dc494c..b771c37caef8 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:50e35228649c47b6ca82aa0be3ff9eb2afce51c82b66c4a03fe4afeb5ff6c0fc + digest: sha256:a1a891041baa4ffbe1a809ac1b8b9b4a71887293c9101c88e8e255943c5aec2d diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index f16aa8187079..49562ef6e421 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -110,6 +110,7 @@ # directories to ignore when looking for source files. exclude_patterns = [ "_build", + "**/.nox/**/*", "samples/AUTHORING_GUIDE.md", "samples/CONTRIBUTING.md", "samples/snippets/README.rst", From dbd9f3728f460847ca7a1057b8df06990a8926fc Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 13 Aug 2021 11:59:24 -0400 Subject: [PATCH 259/467] chore: drop mention of Python 2.7 from templates (#163) Source-Link: https://github.com/googleapis/synthtool/commit/facee4cc1ea096cd8bcc008bb85929daa7c414c0 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:9743664022bd63a8084be67f144898314c7ca12f0a03e422ac17c733c129d803 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/noxfile.py | 12 +++++++++--- .../samples/snippets/api/noxfile.py | 6 +++--- .../samples/snippets/fluent_on_compute/noxfile.py | 6 +++--- .../readme-gen/templates/install_deps.tmpl.rst | 2 +- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index b771c37caef8..a9fcd07cc43b 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:a1a891041baa4ffbe1a809ac1b8b9b4a71887293c9101c88e8e255943c5aec2d + digest: sha256:9743664022bd63a8084be67f144898314c7ca12f0a03e422ac17c733c129d803 diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 03aa2f589fb7..2bf3ffd7d29d 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -84,9 +84,15 @@ def default(session): constraints_path = str( CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" ) - session.install("asyncmock", "pytest-asyncio", "-c", constraints_path) - - session.install("mock", "pytest", "pytest-cov", "-c", constraints_path) + session.install( + "mock", + "asyncmock", + "pytest", + "pytest-cov", + "pytest-asyncio", + "-c", + constraints_path, + ) session.install("-e", ".", "-c", constraints_path) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 125bb619cc49..e73436a15626 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -39,7 +39,7 @@ TEST_CONFIG = { # You can opt out from the test for specific Python versions. - 'ignored_versions': ["2.7"], + 'ignored_versions': [], # Old samples are opted out of enforcing Python type hints # All new samples should feature them @@ -88,8 +88,8 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. -# All versions used to tested samples. -ALL_VERSIONS = ["2.7", "3.6", "3.7", "3.8", "3.9"] +# All versions used to test samples. +ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG['ignored_versions'] diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 125bb619cc49..e73436a15626 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -39,7 +39,7 @@ TEST_CONFIG = { # You can opt out from the test for specific Python versions. - 'ignored_versions': ["2.7"], + 'ignored_versions': [], # Old samples are opted out of enforcing Python type hints # All new samples should feature them @@ -88,8 +88,8 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. -# All versions used to tested samples. -ALL_VERSIONS = ["2.7", "3.6", "3.7", "3.8", "3.9"] +# All versions used to test samples. +ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG['ignored_versions'] diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst index a0406dba8c84..275d649890d7 100644 --- a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst @@ -12,7 +12,7 @@ Install Dependencies .. _Python Development Environment Setup Guide: https://cloud.google.com/python/setup -#. Create a virtualenv. Samples are compatible with Python 2.7 and 3.4+. +#. Create a virtualenv. Samples are compatible with Python 3.6+. .. code-block:: bash From 8d17657f40c73ad510657e5b216f489a1fb24e6f Mon Sep 17 00:00:00 2001 From: Dan Lee <71398022+dandhlee@users.noreply.github.com> Date: Wed, 25 Aug 2021 12:59:42 -0400 Subject: [PATCH 260/467] chore: migrate to main branch (#165) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: migrate to main branch * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: update owlbot * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../.github/sync-repo-settings.yaml | 8 ++-- .../.kokoro/build.sh | 2 +- .../.kokoro/test-samples-impl.sh | 2 +- .../CONTRIBUTING.rst | 12 +++--- .../google-cloud-error-reporting/docs/conf.py | 10 ++--- .../google-cloud-error-reporting/owlbot.py | 41 +++++++++++++++++++ 6 files changed, 58 insertions(+), 17 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml index 0ddb512dbab7..3e98ae70f964 100644 --- a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml +++ b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml @@ -1,9 +1,9 @@ -# https://github.com/googleapis/repo-automation-bots/tree/master/packages/sync-repo-settings -# Rules for master branch protection +# https://github.com/googleapis/repo-automation-bots/tree/main/packages/sync-repo-settings +# Rules for main branch protection branchProtectionRules: # Identifies the protection rule pattern. Name of the branch to be protected. -# Defaults to `master` -- pattern: master +# Defaults to `main` +- pattern: main requiresCodeOwnerReviews: true requiresStrictStatusChecks: true requiredStatusCheckContexts: diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh index 4f96711f7685..165d0e0884ca 100755 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -41,7 +41,7 @@ python3 -m pip install --upgrade --quiet nox python3 -m nox --version # If this is a continuous build, send the test log to the FlakyBot. -# See https://github.com/googleapis/repo-automation-bots/tree/master/packages/flakybot. +# See https://github.com/googleapis/repo-automation-bots/tree/main/packages/flakybot. if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"continuous"* ]]; then cleanup() { chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh index 311a8d54b9f1..8a324c9c7bc6 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh @@ -80,7 +80,7 @@ for file in samples/**/requirements.txt; do EXIT=$? # If this is a periodic build, send the test log to the FlakyBot. - # See https://github.com/googleapis/repo-automation-bots/tree/master/packages/flakybot. + # See https://github.com/googleapis/repo-automation-bots/tree/main/packages/flakybot. if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot $KOKORO_GFILE_DIR/linux_amd64/flakybot diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 3f4006ca5c11..ff8fc0809509 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -50,9 +50,9 @@ You'll have to create a development environment using a Git checkout: # Configure remotes such that you can pull changes from the googleapis/python-error-reporting # repository into your local repository. $ git remote add upstream git@github.com:googleapis/python-error-reporting.git - # fetch and merge changes from upstream into master + # fetch and merge changes from upstream into main $ git fetch upstream - $ git merge upstream/master + $ git merge upstream/main Now your local repo is set up such that you will push changes to your GitHub repo, from which you can submit a pull request. @@ -110,12 +110,12 @@ Coding Style variables:: export GOOGLE_CLOUD_TESTING_REMOTE="upstream" - export GOOGLE_CLOUD_TESTING_BRANCH="master" + export GOOGLE_CLOUD_TESTING_BRANCH="main" By doing this, you are specifying the location of the most up-to-date version of ``python-error-reporting``. The the suggested remote name ``upstream`` should point to the official ``googleapis`` checkout and the - the branch should be the main branch on that remote (``master``). + the branch should be the main branch on that remote (``main``). - This repository contains configuration for the `pre-commit `__ tool, which automates checking @@ -209,7 +209,7 @@ The `description on PyPI`_ for the project comes directly from the ``README``. Due to the reStructuredText (``rst``) parser used by PyPI, relative links which will work on GitHub (e.g. ``CONTRIBUTING.rst`` instead of -``https://github.com/googleapis/python-error-reporting/blob/master/CONTRIBUTING.rst``) +``https://github.com/googleapis/python-error-reporting/blob/main/CONTRIBUTING.rst``) may cause problems creating links or rendering the description. .. _description on PyPI: https://pypi.org/project/google-cloud-error-reporting @@ -234,7 +234,7 @@ We support: Supported versions can be found in our ``noxfile.py`` `config`_. -.. _config: https://github.com/googleapis/python-error-reporting/blob/master/noxfile.py +.. _config: https://github.com/googleapis/python-error-reporting/blob/main/noxfile.py We also explicitly decided to support Python 3 beginning with version 3.6. diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 49562ef6e421..25ecfe5ebe31 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -76,8 +76,8 @@ # The encoding of source files. # source_encoding = 'utf-8-sig' -# The master toctree document. -master_doc = "index" +# The main toctree document. +root_doc = "index" # General information about the project. project = "google-cloud-error-reporting" @@ -280,7 +280,7 @@ # author, documentclass [howto, manual, or own class]). latex_documents = [ ( - master_doc, + root_doc, "google-cloud-error-reporting.tex", "google-cloud-error-reporting Documentation", author, @@ -315,7 +315,7 @@ # (source start file, name, description, authors, manual section). man_pages = [ ( - master_doc, + root_doc, "google-cloud-error-reporting", "google-cloud-error-reporting Documentation", [author], @@ -334,7 +334,7 @@ # dir menu entry, description, category) texinfo_documents = [ ( - master_doc, + root_doc, "google-cloud-error-reporting", "google-cloud-error-reporting Documentation", author, diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 3507d031cd75..1a1bd565dd62 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -43,3 +43,44 @@ s.shell.run(["nox", "-s", "blacken"], hide_output=False) + +# ---------------------------------------------------------------------------- +# Main Branch migration +# ---------------------------------------------------------------------------- + +s.replace( + "*.rst", + "master", + "main" +) + +s.replace( + "README.rst", + "google-cloud-python/blob/main/README.rst", + "google-cloud-python/blob/master/README.rst" +) + +s.replace( + "CONTRIBUTING.rst", + "kubernetes/community/blob/main", + "kubernetes/community/blob/master" +) + +s.replace( + "docs/conf.py", + "master", + "main" +) + +s.replace( + "docs/conf.py", + "main_doc", + "root_doc" +) + +s.replace( + ".kokoro/*", + "master", + "main" +) + From 0c351d1f53cdaeb6ec051a7dca85560cdf50c140 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 30 Aug 2021 15:32:27 +0000 Subject: [PATCH 261/467] chore(python): disable dependency dashboard (#167) --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/renovate.json | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index a9fcd07cc43b..b75186cf1ba4 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:9743664022bd63a8084be67f144898314c7ca12f0a03e422ac17c733c129d803 + digest: sha256:d6761eec279244e57fe9d21f8343381a01d3632c034811a72f68b83119e58c69 diff --git a/packages/google-cloud-error-reporting/renovate.json b/packages/google-cloud-error-reporting/renovate.json index c04895563e69..9fa8816fe873 100644 --- a/packages/google-cloud-error-reporting/renovate.json +++ b/packages/google-cloud-error-reporting/renovate.json @@ -1,6 +1,8 @@ { "extends": [ - "config:base", ":preserveSemverRanges" + "config:base", + ":preserveSemverRanges", + ":disableDependencyDashboard" ], "ignorePaths": [".pre-commit-config.yaml"], "pip_requirements": { From e3dfc23104e7ad4efeea8d53c5acaacaf0299bf5 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 31 Aug 2021 17:02:58 +0200 Subject: [PATCH 262/467] chore(deps): update dependency pytest to v6.2.5 (#168) --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index 95ea1e6a02b0..927094516e65 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==6.2.4 +pytest==6.2.5 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index b0cf76724270..5d836a5c5184 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==6.2.4 +pytest==6.2.5 mock==4.0.3 From c35872b56888df8c2e5bba04d93764d27b0b9a8d Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 1 Sep 2021 15:44:31 +0000 Subject: [PATCH 263/467] chore(python): group renovate prs (#169) --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/renovate.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index b75186cf1ba4..ef3cb34f66fd 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:d6761eec279244e57fe9d21f8343381a01d3632c034811a72f68b83119e58c69 + digest: sha256:1456ea2b3b523ccff5e13030acef56d1de28f21249c62aa0f196265880338fa7 diff --git a/packages/google-cloud-error-reporting/renovate.json b/packages/google-cloud-error-reporting/renovate.json index 9fa8816fe873..c21036d385e5 100644 --- a/packages/google-cloud-error-reporting/renovate.json +++ b/packages/google-cloud-error-reporting/renovate.json @@ -1,6 +1,7 @@ { "extends": [ "config:base", + "group:all", ":preserveSemverRanges", ":disableDependencyDashboard" ], From 46e97f7be3cabf6bf6eb8e40bd2268d69afe1c14 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 2 Sep 2021 17:07:46 -0600 Subject: [PATCH 264/467] chore(python): rename default branch to main (#170) Source-Link: https://github.com/googleapis/synthtool/commit/5c0fa62eea9c33ebe61e582424b659eb264e1ba4 Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:0ffe3bdd6c7159692df5f7744da74e5ef19966288a6bf76023e8e04e0c424d7d Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/CONTRIBUTING.rst | 6 +++--- packages/google-cloud-error-reporting/docs/conf.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index ef3cb34f66fd..c07f148f0b0b 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:1456ea2b3b523ccff5e13030acef56d1de28f21249c62aa0f196265880338fa7 + digest: sha256:0ffe3bdd6c7159692df5f7744da74e5ef19966288a6bf76023e8e04e0c424d7d diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index ff8fc0809509..7c437100ff9e 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -113,9 +113,9 @@ Coding Style export GOOGLE_CLOUD_TESTING_BRANCH="main" By doing this, you are specifying the location of the most up-to-date - version of ``python-error-reporting``. The the suggested remote name ``upstream`` - should point to the official ``googleapis`` checkout and the - the branch should be the main branch on that remote (``main``). + version of ``python-error-reporting``. The + remote name ``upstream`` should point to the official ``googleapis`` + checkout and the branch should be the default branch on that remote (``main``). - This repository contains configuration for the `pre-commit `__ tool, which automates checking diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 25ecfe5ebe31..e56d4c58254b 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -76,7 +76,7 @@ # The encoding of source files. # source_encoding = 'utf-8-sig' -# The main toctree document. +# The root toctree document. root_doc = "index" # General information about the project. From 10d28b7cc54a66e6bb52e6ca2287108c6b1bc527 Mon Sep 17 00:00:00 2001 From: Dan Lee <71398022+dandhlee@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:01:35 -0400 Subject: [PATCH 265/467] chore: revert owlbot main branch templates (#171) --- .../google-cloud-error-reporting/owlbot.py | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 1a1bd565dd62..2f22cc62c9ce 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -44,43 +44,3 @@ s.shell.run(["nox", "-s", "blacken"], hide_output=False) -# ---------------------------------------------------------------------------- -# Main Branch migration -# ---------------------------------------------------------------------------- - -s.replace( - "*.rst", - "master", - "main" -) - -s.replace( - "README.rst", - "google-cloud-python/blob/main/README.rst", - "google-cloud-python/blob/master/README.rst" -) - -s.replace( - "CONTRIBUTING.rst", - "kubernetes/community/blob/main", - "kubernetes/community/blob/master" -) - -s.replace( - "docs/conf.py", - "master", - "main" -) - -s.replace( - "docs/conf.py", - "main_doc", - "root_doc" -) - -s.replace( - ".kokoro/*", - "master", - "main" -) - From fd5c6fad5065c900c39baf6bf4fe2d157383dc0f Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:14:00 -0600 Subject: [PATCH 266/467] chore: reference main branch of google-cloud-python (#172) --- packages/google-cloud-error-reporting/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 5df20bb6adb6..2c24a9d70c88 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -17,7 +17,7 @@ to receive email and mobile alerts on new errors. .. _Client Library Documentation: https://googleapis.dev/python/clouderrorreporting/latest .. _Product Documentation: https://cloud.google.com/error-reporting/reference/ .. |beta| image:: https://img.shields.io/badge/support-beta-orange.svg - :target: https://github.com/googleapis/google-cloud-python/blob/master/README.rst#beta-support + :target: https://github.com/googleapis/google-cloud-python/blob/main/README.rst#beta-support .. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg From 0296894877387936edacc1aaf60458740cb578e5 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 17 Sep 2021 15:36:48 +0000 Subject: [PATCH 267/467] chore: blacken samples noxfile template (#173) --- .../.github/.OwlBot.lock.yaml | 2 +- .../samples/snippets/api/noxfile.py | 44 +++++++++++-------- .../snippets/fluent_on_compute/noxfile.py | 44 +++++++++++-------- 3 files changed, 51 insertions(+), 39 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index c07f148f0b0b..e2c23777477e 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:0ffe3bdd6c7159692df5f7744da74e5ef19966288a6bf76023e8e04e0c424d7d + digest: sha256:0ccd9f4d714d36e311f60f407199dd460e43a99a125b5ca64b1d75f6e5f8581b diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index e73436a15626..b008613f03ff 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -39,17 +39,15 @@ TEST_CONFIG = { # You can opt out from the test for specific Python versions. - 'ignored_versions': [], - + "ignored_versions": [], # Old samples are opted out of enforcing Python type hints # All new samples should feature them - 'enforce_type_hints': False, - + "enforce_type_hints": False, # An envvar key for determining the project id to use. Change it # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a # build specific Cloud project. You can also use your own string # to use your own Cloud project. - 'gcloud_project_env': 'GOOGLE_CLOUD_PROJECT', + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', # If you need to use a specific version of pip, # change pip_version_override to the string representation @@ -57,13 +55,13 @@ "pip_version_override": None, # A dictionary you want to inject into your test. Don't put any # secrets here. These values will override predefined values. - 'envs': {}, + "envs": {}, } try: # Ensure we can import noxfile_config in the project's directory. - sys.path.append('.') + sys.path.append(".") from noxfile_config import TEST_CONFIG_OVERRIDE except ImportError as e: print("No user noxfile_config found: detail: {}".format(e)) @@ -78,12 +76,12 @@ def get_pytest_env_vars() -> Dict[str, str]: ret = {} # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG['gcloud_project_env'] + env_key = TEST_CONFIG["gcloud_project_env"] # This should error out if not set. - ret['GOOGLE_CLOUD_PROJECT'] = os.environ[env_key] + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] # Apply user supplied envs. - ret.update(TEST_CONFIG['envs']) + ret.update(TEST_CONFIG["envs"]) return ret @@ -92,11 +90,14 @@ def get_pytest_env_vars() -> Dict[str, str]: ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] # Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG['ignored_versions'] +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ("True", "true") +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) # # Style Checks # @@ -141,7 +142,7 @@ def _determine_local_import_names(start_dir: str) -> List[str]: @nox.session def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG['enforce_type_hints']: + if not TEST_CONFIG["enforce_type_hints"]: session.install("flake8", "flake8-import-order") else: session.install("flake8", "flake8-import-order", "flake8-annotations") @@ -150,9 +151,11 @@ def lint(session: nox.sessions.Session) -> None: args = FLAKE8_COMMON_ARGS + [ "--application-import-names", ",".join(local_names), - "." + ".", ] session.run("flake8", *args) + + # # Black # @@ -165,6 +168,7 @@ def blacken(session: nox.sessions.Session) -> None: session.run("black", *python_files) + # # Sample Tests # @@ -173,7 +177,9 @@ def blacken(session: nox.sessions.Session) -> None: PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] -def _session_tests(session: nox.sessions.Session, post_install: Callable = None) -> None: +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: if TEST_CONFIG["pip_version_override"]: pip_version = TEST_CONFIG["pip_version_override"] session.install(f"pip=={pip_version}") @@ -203,7 +209,7 @@ def _session_tests(session: nox.sessions.Session, post_install: Callable = None) # on travis where slow and flaky tests are excluded. # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html success_codes=[0, 5], - env=get_pytest_env_vars() + env=get_pytest_env_vars(), ) @@ -213,9 +219,9 @@ def py(session: nox.sessions.Session) -> None: if session.python in TESTED_VERSIONS: _session_tests(session) else: - session.skip("SKIPPED: {} tests are disabled for this sample.".format( - session.python - )) + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) # diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index e73436a15626..b008613f03ff 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -39,17 +39,15 @@ TEST_CONFIG = { # You can opt out from the test for specific Python versions. - 'ignored_versions': [], - + "ignored_versions": [], # Old samples are opted out of enforcing Python type hints # All new samples should feature them - 'enforce_type_hints': False, - + "enforce_type_hints": False, # An envvar key for determining the project id to use. Change it # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a # build specific Cloud project. You can also use your own string # to use your own Cloud project. - 'gcloud_project_env': 'GOOGLE_CLOUD_PROJECT', + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', # If you need to use a specific version of pip, # change pip_version_override to the string representation @@ -57,13 +55,13 @@ "pip_version_override": None, # A dictionary you want to inject into your test. Don't put any # secrets here. These values will override predefined values. - 'envs': {}, + "envs": {}, } try: # Ensure we can import noxfile_config in the project's directory. - sys.path.append('.') + sys.path.append(".") from noxfile_config import TEST_CONFIG_OVERRIDE except ImportError as e: print("No user noxfile_config found: detail: {}".format(e)) @@ -78,12 +76,12 @@ def get_pytest_env_vars() -> Dict[str, str]: ret = {} # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG['gcloud_project_env'] + env_key = TEST_CONFIG["gcloud_project_env"] # This should error out if not set. - ret['GOOGLE_CLOUD_PROJECT'] = os.environ[env_key] + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] # Apply user supplied envs. - ret.update(TEST_CONFIG['envs']) + ret.update(TEST_CONFIG["envs"]) return ret @@ -92,11 +90,14 @@ def get_pytest_env_vars() -> Dict[str, str]: ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] # Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG['ignored_versions'] +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ("True", "true") +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) # # Style Checks # @@ -141,7 +142,7 @@ def _determine_local_import_names(start_dir: str) -> List[str]: @nox.session def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG['enforce_type_hints']: + if not TEST_CONFIG["enforce_type_hints"]: session.install("flake8", "flake8-import-order") else: session.install("flake8", "flake8-import-order", "flake8-annotations") @@ -150,9 +151,11 @@ def lint(session: nox.sessions.Session) -> None: args = FLAKE8_COMMON_ARGS + [ "--application-import-names", ",".join(local_names), - "." + ".", ] session.run("flake8", *args) + + # # Black # @@ -165,6 +168,7 @@ def blacken(session: nox.sessions.Session) -> None: session.run("black", *python_files) + # # Sample Tests # @@ -173,7 +177,9 @@ def blacken(session: nox.sessions.Session) -> None: PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] -def _session_tests(session: nox.sessions.Session, post_install: Callable = None) -> None: +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: if TEST_CONFIG["pip_version_override"]: pip_version = TEST_CONFIG["pip_version_override"] session.install(f"pip=={pip_version}") @@ -203,7 +209,7 @@ def _session_tests(session: nox.sessions.Session, post_install: Callable = None) # on travis where slow and flaky tests are excluded. # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html success_codes=[0, 5], - env=get_pytest_env_vars() + env=get_pytest_env_vars(), ) @@ -213,9 +219,9 @@ def py(session: nox.sessions.Session) -> None: if session.python in TESTED_VERSIONS: _session_tests(session) else: - session.skip("SKIPPED: {} tests are disabled for this sample.".format( - session.python - )) + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) # From 524de57b498763cfabd3aed0bcbf4184be2a8b01 Mon Sep 17 00:00:00 2001 From: Jeffrey Rennie Date: Tue, 21 Sep 2021 12:38:17 -0700 Subject: [PATCH 268/467] chore: relocate owl bot post processor (#175) chore: relocate owl bot post processor --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- packages/google-cloud-error-reporting/.github/.OwlBot.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index e2c23777477e..2567653c000d 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: - image: gcr.io/repo-automation-bots/owlbot-python:latest - digest: sha256:0ccd9f4d714d36e311f60f407199dd460e43a99a125b5ca64b1d75f6e5f8581b + image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest + digest: sha256:87eee22d276554e4e52863ec9b1cb6a7245815dfae20439712bf644348215a5a diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.yaml index 051658f1a674..18f04683c7b3 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.yaml @@ -13,7 +13,7 @@ # limitations under the License. docker: - image: gcr.io/repo-automation-bots/owlbot-python:latest + image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest deep-remove-regex: - /owl-bot-staging From 5805b184220cd00ea03ac0c243e39bf0bc191b75 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Tue, 21 Sep 2021 17:06:36 -0400 Subject: [PATCH 269/467] chore: drop six (#176) --- .../google/cloud/error_reporting/client.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index ce35981e11ca..e44c5c92f88b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -17,8 +17,6 @@ import os import traceback -import six - try: from google.cloud.error_reporting._gapic import make_report_error_api except ImportError: # pragma: NO COVER @@ -268,7 +266,7 @@ def _build_error_report( # strip out None values payload["context"]["httpRequest"] = { key: value - for key, value in six.iteritems(http_context_dict) + for key, value in http_context_dict.items() if value is not None } if user: From 1dfa1e9561f947bb7d29bef14d43bea17dc819a6 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 24 Sep 2021 15:10:58 +0000 Subject: [PATCH 270/467] chore: use gapic-generator-python 0.51.2 (#177) - [ ] Regenerate this pull request now. fix: add 'dict' annotation type to 'request' Committer: @busunkim96 PiperOrigin-RevId: 398509016 Source-Link: https://github.com/googleapis/googleapis/commit/b224dfa52642a733ea64849d4e06d15c274bc08f Source-Link: https://github.com/googleapis/googleapis-gen/commit/63a1db7a38d74b9639592f521ed1daaf7299ad9a Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNjNhMWRiN2EzOGQ3NGI5NjM5NTkyZjUyMWVkMWRhYWY3Mjk5YWQ5YSJ9 --- .../services/error_group_service/client.py | 10 +++++----- .../error_group_service/transports/base.py | 2 +- .../error_group_service/transports/grpc.py | 6 +++--- .../error_group_service/transports/grpc_asyncio.py | 6 +++--- .../services/error_stats_service/client.py | 14 +++++++------- .../error_stats_service/transports/base.py | 2 +- .../error_stats_service/transports/grpc.py | 6 +++--- .../error_stats_service/transports/grpc_asyncio.py | 6 +++--- .../services/report_errors_service/client.py | 6 +++--- .../report_errors_service/transports/base.py | 2 +- .../report_errors_service/transports/grpc.py | 6 +++--- .../transports/grpc_asyncio.py | 6 +++--- .../fixup_errorreporting_v1beta1_keywords.py | 14 +++++++------- 13 files changed, 43 insertions(+), 43 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 1591223e5bb9..38772e26b710 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -17,7 +17,7 @@ from distutils import util import os import re -from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib # type: ignore @@ -349,7 +349,7 @@ def __init__( def get_group( self, - request: error_group_service.GetGroupRequest = None, + request: Union[error_group_service.GetGroupRequest, dict] = None, *, group_name: str = None, retry: retries.Retry = gapic_v1.method.DEFAULT, @@ -359,7 +359,7 @@ def get_group( r"""Get the specified group. Args: - request (google.cloud.errorreporting_v1beta1.types.GetGroupRequest): + request (Union[google.cloud.errorreporting_v1beta1.types.GetGroupRequest, dict]): The request object. A request to return an individual group. group_name (str): @@ -426,7 +426,7 @@ def get_group( def update_group( self, - request: error_group_service.UpdateGroupRequest = None, + request: Union[error_group_service.UpdateGroupRequest, dict] = None, *, group: common.ErrorGroup = None, retry: retries.Retry = gapic_v1.method.DEFAULT, @@ -437,7 +437,7 @@ def update_group( Fails if the group does not exist. Args: - request (google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest): + request (Union[google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest, dict]): The request object. A request to replace the existing data for the given group. group (google.cloud.errorreporting_v1beta1.types.ErrorGroup): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 54ecd8e8bf04..9115e9a45c0d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -118,7 +118,7 @@ def __init__( **scopes_kwargs, quota_project_id=quota_project_id ) - # If the credentials is service account credentials, then always try to use self signed JWT. + # If the credentials are service account credentials, then always try to use self signed JWT. if ( always_use_jwt_access and isinstance(credentials, service_account.Credentials) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index e5f620d195db..c235d942e867 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -81,16 +81,16 @@ def __init__( api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or applicatin default SSL credentials. + ``client_cert_source`` or application default SSL credentials. client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): Deprecated. A callback to provide client SSL certificate bytes and private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if ``channel`` is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure mutual TLS channel. It is + both in PEM format. It is used to configure a mutual TLS channel. It is ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 7ea9c77abe66..848526a702a1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -128,16 +128,16 @@ def __init__( api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or applicatin default SSL credentials. + ``client_cert_source`` or application default SSL credentials. client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): Deprecated. A callback to provide client SSL certificate bytes and private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if ``channel`` is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure mutual TLS channel. It is + both in PEM format. It is used to configure a mutual TLS channel. It is ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 2e9352c624b2..eda785c4ebfd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -17,7 +17,7 @@ from distutils import util import os import re -from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib # type: ignore @@ -352,7 +352,7 @@ def __init__( def list_group_stats( self, - request: error_stats_service.ListGroupStatsRequest = None, + request: Union[error_stats_service.ListGroupStatsRequest, dict] = None, *, project_name: str = None, time_range: error_stats_service.QueryTimeRange = None, @@ -363,7 +363,7 @@ def list_group_stats( r"""Lists the specified groups. Args: - request (google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest): + request (Union[google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest, dict]): The request object. Specifies a set of `ErrorGroupStats` to return. project_name (str): @@ -456,7 +456,7 @@ def list_group_stats( def list_events( self, - request: error_stats_service.ListEventsRequest = None, + request: Union[error_stats_service.ListEventsRequest, dict] = None, *, project_name: str = None, group_id: str = None, @@ -467,7 +467,7 @@ def list_events( r"""Lists the specified events. Args: - request (google.cloud.errorreporting_v1beta1.types.ListEventsRequest): + request (Union[google.cloud.errorreporting_v1beta1.types.ListEventsRequest, dict]): The request object. Specifies a set of error events to return. project_name (str): @@ -552,7 +552,7 @@ def list_events( def delete_events( self, - request: error_stats_service.DeleteEventsRequest = None, + request: Union[error_stats_service.DeleteEventsRequest, dict] = None, *, project_name: str = None, retry: retries.Retry = gapic_v1.method.DEFAULT, @@ -562,7 +562,7 @@ def delete_events( r"""Deletes all error events of a given project. Args: - request (google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest): + request (Union[google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest, dict]): The request object. Deletes all events in the project. project_name (str): Required. The resource name of the Google Cloud Platform diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 2081bb5d7a0a..679d6925be24 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -117,7 +117,7 @@ def __init__( **scopes_kwargs, quota_project_id=quota_project_id ) - # If the credentials is service account credentials, then always try to use self signed JWT. + # If the credentials are service account credentials, then always try to use self signed JWT. if ( always_use_jwt_access and isinstance(credentials, service_account.Credentials) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index be6d42a4a2e9..43954a568825 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -81,16 +81,16 @@ def __init__( api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or applicatin default SSL credentials. + ``client_cert_source`` or application default SSL credentials. client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): Deprecated. A callback to provide client SSL certificate bytes and private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if ``channel`` is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure mutual TLS channel. It is + both in PEM format. It is used to configure a mutual TLS channel. It is ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 65b32b0f7220..3ba6a09723a7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -128,16 +128,16 @@ def __init__( api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or applicatin default SSL credentials. + ``client_cert_source`` or application default SSL credentials. client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): Deprecated. A callback to provide client SSL certificate bytes and private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if ``channel`` is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure mutual TLS channel. It is + both in PEM format. It is used to configure a mutual TLS channel. It is ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 46e3d26d0003..dffc124c7498 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -17,7 +17,7 @@ from distutils import util import os import re -from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib # type: ignore @@ -337,7 +337,7 @@ def __init__( def report_error_event( self, - request: report_errors_service.ReportErrorEventRequest = None, + request: Union[report_errors_service.ReportErrorEventRequest, dict] = None, *, project_name: str = None, event: report_errors_service.ReportedErrorEvent = None, @@ -363,7 +363,7 @@ def report_error_event( regionalized logs `__. Args: - request (google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest): + request (Union[google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest, dict]): The request object. A request for reporting an individual error event. project_name (str): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 645915d15210..00babfdd3366 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -117,7 +117,7 @@ def __init__( **scopes_kwargs, quota_project_id=quota_project_id ) - # If the credentials is service account credentials, then always try to use self signed JWT. + # If the credentials are service account credentials, then always try to use self signed JWT. if ( always_use_jwt_access and isinstance(credentials, service_account.Credentials) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 452d2b3ddc96..277b71d1b282 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -80,16 +80,16 @@ def __init__( api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or applicatin default SSL credentials. + ``client_cert_source`` or application default SSL credentials. client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): Deprecated. A callback to provide client SSL certificate bytes and private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if ``channel`` is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure mutual TLS channel. It is + both in PEM format. It is used to configure a mutual TLS channel. It is ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 8b0da7a24e1f..fb4670516771 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -127,16 +127,16 @@ def __init__( api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or applicatin default SSL credentials. + ``client_cert_source`` or application default SSL credentials. client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): Deprecated. A callback to provide client SSL certificate bytes and private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if ``channel`` is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure mutual TLS channel. It is + both in PEM format. It is used to configure a mutual TLS channel. It is ignored if ``channel`` or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py index 7d1e7d7d5424..765a093f84fe 100644 --- a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py +++ b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py @@ -39,12 +39,12 @@ def partition( class errorreportingCallTransformer(cst.CSTTransformer): CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'delete_events': ('project_name', ), - 'get_group': ('group_name', ), - 'list_events': ('project_name', 'group_id', 'service_filter', 'time_range', 'page_size', 'page_token', ), - 'list_group_stats': ('project_name', 'group_id', 'service_filter', 'time_range', 'timed_count_duration', 'alignment', 'alignment_time', 'order', 'page_size', 'page_token', ), - 'report_error_event': ('project_name', 'event', ), - 'update_group': ('group', ), + 'delete_events': ('project_name', ), + 'get_group': ('group_name', ), + 'list_events': ('project_name', 'group_id', 'service_filter', 'time_range', 'page_size', 'page_token', ), + 'list_group_stats': ('project_name', 'group_id', 'service_filter', 'time_range', 'timed_count_duration', 'alignment', 'alignment_time', 'order', 'page_size', 'page_token', ), + 'report_error_event': ('project_name', 'event', ), + 'update_group': ('group', ), } def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: @@ -63,7 +63,7 @@ def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: return updated kwargs, ctrl_kwargs = partition( - lambda a: not a.keyword.value in self.CTRL_PARAMS, + lambda a: a.keyword.value not in self.CTRL_PARAMS, kwargs ) From 6c30f634afdedaba6e900ff1b1a0aa497393abff Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 27 Sep 2021 17:58:19 +0000 Subject: [PATCH 271/467] chore: release 1.2.3 (#178) :robot: I have created a release \*beep\* \*boop\* --- ### [1.2.3](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.2...v1.2.3) (2021-09-24) ### Bug Fixes * add 'dict' annotation type to 'request' ([253a66f](https://www.github.com/googleapis/python-error-reporting/commit/253a66f5f606f722bf5401cdd678989b9d2baa98)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index ac6570e44ca1..efa6a8065147 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +### [1.2.3](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.2...v1.2.3) (2021-09-24) + + +### Bug Fixes + +* add 'dict' annotation type to 'request' ([253a66f](https://www.github.com/googleapis/python-error-reporting/commit/253a66f5f606f722bf5401cdd678989b9d2baa98)) + ### [1.2.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.1...v1.2.2) (2021-07-28) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index b0c9a42586ce..c3a17a6e4568 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.2.2" +version = "1.2.3" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 53d18e28d27b804c4170c2a41d23ca2bb238a8f4 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 28 Sep 2021 16:43:12 +0200 Subject: [PATCH 272/467] chore(deps): update dependency google-cloud-error-reporting to v1.2.3 (#180) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 1264b37fd9ee..01cd07d16cf9 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.2.2 +google-cloud-error-reporting==1.2.3 From 3a139ea942e50a56aff2f107ce351e6a5f6c1115 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:18:13 +0000 Subject: [PATCH 273/467] chore: use gapic-generator-python 0.52.0 (#181) - [ ] Regenerate this pull request now. fix: improper types in pagers generation PiperOrigin-RevId: 399773015 Source-Link: https://github.com/googleapis/googleapis/commit/410c184536a22fadaf00aec3cab04102e34d2322 Source-Link: https://github.com/googleapis/googleapis-gen/commit/290e883545e3ac9ff2bd00cd0dacb28f1b8ca945 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMjkwZTg4MzU0NWUzYWM5ZmYyYmQwMGNkMGRhY2IyOGYxYjhjYTk0NSJ9 --- .../services/error_stats_service/pagers.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index 02be9c537d0e..a54601fb728a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -15,13 +15,13 @@ # from typing import ( Any, - AsyncIterable, + AsyncIterator, Awaitable, Callable, - Iterable, Sequence, Tuple, Optional, + Iterator, ) from google.cloud.errorreporting_v1beta1.types import common @@ -75,14 +75,14 @@ def __getattr__(self, name: str) -> Any: return getattr(self._response, name) @property - def pages(self) -> Iterable[error_stats_service.ListGroupStatsResponse]: + def pages(self) -> Iterator[error_stats_service.ListGroupStatsResponse]: yield self._response while self._response.next_page_token: self._request.page_token = self._response.next_page_token self._response = self._method(self._request, metadata=self._metadata) yield self._response - def __iter__(self) -> Iterable[error_stats_service.ErrorGroupStats]: + def __iter__(self) -> Iterator[error_stats_service.ErrorGroupStats]: for page in self.pages: yield from page.error_group_stats @@ -137,14 +137,14 @@ def __getattr__(self, name: str) -> Any: return getattr(self._response, name) @property - async def pages(self) -> AsyncIterable[error_stats_service.ListGroupStatsResponse]: + async def pages(self) -> AsyncIterator[error_stats_service.ListGroupStatsResponse]: yield self._response while self._response.next_page_token: self._request.page_token = self._response.next_page_token self._response = await self._method(self._request, metadata=self._metadata) yield self._response - def __aiter__(self) -> AsyncIterable[error_stats_service.ErrorGroupStats]: + def __aiter__(self) -> AsyncIterator[error_stats_service.ErrorGroupStats]: async def async_generator(): async for page in self.pages: for response in page.error_group_stats: @@ -203,14 +203,14 @@ def __getattr__(self, name: str) -> Any: return getattr(self._response, name) @property - def pages(self) -> Iterable[error_stats_service.ListEventsResponse]: + def pages(self) -> Iterator[error_stats_service.ListEventsResponse]: yield self._response while self._response.next_page_token: self._request.page_token = self._response.next_page_token self._response = self._method(self._request, metadata=self._metadata) yield self._response - def __iter__(self) -> Iterable[common.ErrorEvent]: + def __iter__(self) -> Iterator[common.ErrorEvent]: for page in self.pages: yield from page.error_events @@ -265,14 +265,14 @@ def __getattr__(self, name: str) -> Any: return getattr(self._response, name) @property - async def pages(self) -> AsyncIterable[error_stats_service.ListEventsResponse]: + async def pages(self) -> AsyncIterator[error_stats_service.ListEventsResponse]: yield self._response while self._response.next_page_token: self._request.page_token = self._response.next_page_token self._response = await self._method(self._request, metadata=self._metadata) yield self._response - def __aiter__(self) -> AsyncIterable[common.ErrorEvent]: + def __aiter__(self) -> AsyncIterator[common.ErrorEvent]: async def async_generator(): async for page in self.pages: for response in page.error_events: From 83dab47e350b0921396412dc212f29e529171d01 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:44:33 +0000 Subject: [PATCH 274/467] chore: fail samples nox session if python version is missing (#183) --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../samples/snippets/api/noxfile.py | 4 ++++ .../samples/snippets/fluent_on_compute/noxfile.py | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 2567653c000d..ae6c57fad807 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:87eee22d276554e4e52863ec9b1cb6a7245815dfae20439712bf644348215a5a + digest: sha256:82b12321da4446a73cb11bcb6812fbec8c105abda3946d46e6394e5fbfb64c0f diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index b008613f03ff..1fd8956fbf01 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -98,6 +98,10 @@ def get_pytest_env_vars() -> Dict[str, str]: "True", "true", ) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + # # Style Checks # diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index b008613f03ff..1fd8956fbf01 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -98,6 +98,10 @@ def get_pytest_env_vars() -> Dict[str, str]: "True", "true", ) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + # # Style Checks # From d05ec7d3006f73c28faf4054408c5b07fe711f72 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Tue, 5 Oct 2021 11:29:07 -0400 Subject: [PATCH 275/467] chore: add default_version to .repo-metadata.json (#184) * chore: add default_version and codeowner_team to .repo-metadata.json * update default_version --- .../.repo-metadata.json | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index 994505e15a83..f7d88d7ae2af 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -1,15 +1,16 @@ { - "name": "clouderrorreporting", - "name_pretty": "Cloud Error Reporting", - "product_documentation": "https://cloud.google.com/error-reporting", - "client_documentation": "https://googleapis.dev/python/clouderrorreporting/latest", - "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", - "release_level": "beta", - "language": "python", - "library_type": "GAPIC_COMBO", - "repo": "googleapis/python-error-reporting", - "distribution_name": "google-cloud-error-reporting", - "api_id": "clouderrorreporting.googleapis.com", - "requires_billing": false, - "codeowner_team": "@googleapis/api-logging" -} \ No newline at end of file + "name": "clouderrorreporting", + "name_pretty": "Cloud Error Reporting", + "product_documentation": "https://cloud.google.com/error-reporting", + "client_documentation": "https://googleapis.dev/python/clouderrorreporting/latest", + "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", + "release_level": "beta", + "language": "python", + "library_type": "GAPIC_COMBO", + "repo": "googleapis/python-error-reporting", + "distribution_name": "google-cloud-error-reporting", + "api_id": "clouderrorreporting.googleapis.com", + "requires_billing": false, + "codeowner_team": "@googleapis/api-logging", + "default_version": "v1beta1" +} From 347713b71b7979d74ae0071f719971967a7dbd9c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:16:14 -0600 Subject: [PATCH 276/467] build: use trampoline_v2 for python samples and allow custom dockerfile (#185) Source-Link: https://github.com/googleapis/synthtool/commit/a7ed11ec0863c422ba2e73aafa75eab22c32b33d Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:6e7328583be8edd3ba8f35311c76a1ecbc823010279ccb6ab46b7a76e25eafcc Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/samples/lint/common.cfg | 2 +- .../.kokoro/samples/python3.6/common.cfg | 2 +- .../.kokoro/samples/python3.6/periodic.cfg | 2 +- .../.kokoro/samples/python3.7/common.cfg | 2 +- .../.kokoro/samples/python3.7/periodic.cfg | 2 +- .../.kokoro/samples/python3.8/common.cfg | 2 +- .../.kokoro/samples/python3.8/periodic.cfg | 2 +- .../.kokoro/samples/python3.9/common.cfg | 2 +- .../.kokoro/samples/python3.9/periodic.cfg | 2 +- .../.kokoro/test-samples-against-head.sh | 2 -- .../.kokoro/test-samples.sh | 2 -- .../google-cloud-error-reporting/.trampolinerc | 17 ++++++++++++++--- 13 files changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index ae6c57fad807..ee94722ab57b 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:82b12321da4446a73cb11bcb6812fbec8c105abda3946d46e6394e5fbfb64c0f + digest: sha256:6e7328583be8edd3ba8f35311c76a1ecbc823010279ccb6ab46b7a76e25eafcc diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg index 8b918a78c03b..a38013a4dda6 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg @@ -31,4 +31,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg index 0676e13f5f87..695d94cc0f41 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg @@ -37,4 +37,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg index 50fec9649732..71cd1e597e38 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg @@ -3,4 +3,4 @@ env_vars: { key: "INSTALL_LIBRARY_FROM_SOURCE" value: "False" -} \ No newline at end of file +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg index ebc1c94dfaf2..161c018b0dc8 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg @@ -37,4 +37,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg index 50fec9649732..71cd1e597e38 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg @@ -3,4 +3,4 @@ env_vars: { key: "INSTALL_LIBRARY_FROM_SOURCE" value: "False" -} \ No newline at end of file +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg index a4dc49b53a50..abd2a5bb7587 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg @@ -37,4 +37,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg index 50fec9649732..71cd1e597e38 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg @@ -3,4 +3,4 @@ env_vars: { key: "INSTALL_LIBRARY_FROM_SOURCE" value: "False" -} \ No newline at end of file +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg index 4b7faa7ca6e3..4889669b5ad9 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg @@ -37,4 +37,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg index 50fec9649732..71cd1e597e38 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg @@ -3,4 +3,4 @@ env_vars: { key: "INSTALL_LIBRARY_FROM_SOURCE" value: "False" -} \ No newline at end of file +} diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh index 320a91291381..ba3a707b040c 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh @@ -23,6 +23,4 @@ set -eo pipefail # Enables `**` to include files nested inside sub-folders shopt -s globstar -cd github/python-error-reporting - exec .kokoro/test-samples-impl.sh diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh index fefd09c59fd7..11c042d342d7 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh @@ -24,8 +24,6 @@ set -eo pipefail # Enables `**` to include files nested inside sub-folders shopt -s globstar -cd github/python-error-reporting - # Run periodic samples tests at latest release if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then # preserving the test runner implementation. diff --git a/packages/google-cloud-error-reporting/.trampolinerc b/packages/google-cloud-error-reporting/.trampolinerc index 383b6ec89fbc..0eee72ab62aa 100644 --- a/packages/google-cloud-error-reporting/.trampolinerc +++ b/packages/google-cloud-error-reporting/.trampolinerc @@ -16,15 +16,26 @@ # Add required env vars here. required_envvars+=( - "STAGING_BUCKET" - "V2_STAGING_BUCKET" ) # Add env vars which are passed down into the container here. pass_down_envvars+=( + "NOX_SESSION" + ############### + # Docs builds + ############### "STAGING_BUCKET" "V2_STAGING_BUCKET" - "NOX_SESSION" + ################## + # Samples builds + ################## + "INSTALL_LIBRARY_FROM_SOURCE" + "RUN_TESTS_SESSION" + "BUILD_SPECIFIC_GCLOUD_PROJECT" + # Target directories. + "RUN_TESTS_DIRS" + # The nox session to run. + "RUN_TESTS_SESSION" ) # Prevent unintentional override on the default image. From e614ae7333cb7078ac18247db18ec6cf17f1aed1 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 7 Oct 2021 18:16:51 +0000 Subject: [PATCH 277/467] chore(python): fix formatting issue in noxfile.py.j2 (#186) --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/CONTRIBUTING.rst | 6 ++++-- packages/google-cloud-error-reporting/noxfile.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index ee94722ab57b..76d0baa0a49d 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:6e7328583be8edd3ba8f35311c76a1ecbc823010279ccb6ab46b7a76e25eafcc + digest: sha256:4370ced27a324687ede5da07132dcdc5381993502a5e8a3e31e16dc631d026f0 diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 7c437100ff9e..7235162dcf16 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.6, 3.7, 3.8 and 3.9 on both UNIX and Windows. + 3.6, 3.7, 3.8, 3.9 and 3.10 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -72,7 +72,7 @@ We use `nox `__ to instrument our tests. - To run a single unit test:: - $ nox -s unit-3.9 -- -k + $ nox -s unit-3.10 -- -k .. note:: @@ -225,11 +225,13 @@ We support: - `Python 3.7`_ - `Python 3.8`_ - `Python 3.9`_ +- `Python 3.10`_ .. _Python 3.6: https://docs.python.org/3.6/ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ .. _Python 3.9: https://docs.python.org/3.9/ +.. _Python 3.10: https://docs.python.org/3.10/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 2bf3ffd7d29d..672b28d61f3e 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -29,7 +29,7 @@ DEFAULT_PYTHON_VERSION = "3.8" SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] -UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] +UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"] CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() From 080e770b6e490283954b849d8817272ed3001983 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 8 Oct 2021 14:14:41 +0000 Subject: [PATCH 278/467] feat: add context manager support in client (#187) - [ ] Regenerate this pull request now. chore: fix docstring for first attribute of protos committer: @busunkim96 PiperOrigin-RevId: 401271153 Source-Link: https://github.com/googleapis/googleapis/commit/787f8c9a731f44e74a90b9847d48659ca9462d10 Source-Link: https://github.com/googleapis/googleapis-gen/commit/81decffe9fc72396a8153e756d1d67a6eecfd620 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiODFkZWNmZmU5ZmM3MjM5NmE4MTUzZTc1NmQxZDY3YTZlZWNmZDYyMCJ9 --- .../error_group_service/async_client.py | 6 +++ .../services/error_group_service/client.py | 18 +++++-- .../error_group_service/transports/base.py | 9 ++++ .../error_group_service/transports/grpc.py | 3 ++ .../transports/grpc_asyncio.py | 3 ++ .../error_stats_service/async_client.py | 6 +++ .../services/error_stats_service/client.py | 18 +++++-- .../error_stats_service/transports/base.py | 9 ++++ .../error_stats_service/transports/grpc.py | 3 ++ .../transports/grpc_asyncio.py | 3 ++ .../report_errors_service/async_client.py | 6 +++ .../services/report_errors_service/client.py | 18 +++++-- .../report_errors_service/transports/base.py | 9 ++++ .../report_errors_service/transports/grpc.py | 3 ++ .../transports/grpc_asyncio.py | 3 ++ .../errorreporting_v1beta1/types/common.py | 1 + .../types/error_group_service.py | 2 + .../types/error_stats_service.py | 8 ++- .../types/report_errors_service.py | 4 +- .../test_error_group_service.py | 50 +++++++++++++++++++ .../test_error_stats_service.py | 50 +++++++++++++++++++ .../test_report_errors_service.py | 50 +++++++++++++++++++ 22 files changed, 268 insertions(+), 14 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 21e479519547..eaff5b920357 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -314,6 +314,12 @@ async def update_group( # Done; return the response. return response + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 38772e26b710..f8959ec6ab54 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -341,10 +341,7 @@ def __init__( client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, - always_use_jwt_access=( - Transport == type(self).get_transport_class("grpc") - or Transport == type(self).get_transport_class("grpc_asyncio") - ), + always_use_jwt_access=True, ) def get_group( @@ -498,6 +495,19 @@ def update_group( # Done; return the response. return response + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 9115e9a45c0d..8b51df23c8a3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -163,6 +163,15 @@ def _prep_wrapped_messages(self, client_info): ), } + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + @property def get_group( self, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index c235d942e867..c9c1123763dd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -279,5 +279,8 @@ def update_group( ) return self._stubs["update_group"] + def close(self): + self.grpc_channel.close() + __all__ = ("ErrorGroupServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 848526a702a1..24355c26608b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -284,5 +284,8 @@ def update_group( ) return self._stubs["update_group"] + def close(self): + return self.grpc_channel.close() + __all__ = ("ErrorGroupServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index b13a76d469ea..ef874835f5bb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -442,6 +442,12 @@ async def delete_events( # Done; return the response. return response + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index eda785c4ebfd..392f4194e47e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -344,10 +344,7 @@ def __init__( client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, - always_use_jwt_access=( - Transport == type(self).get_transport_class("grpc") - or Transport == type(self).get_transport_class("grpc_asyncio") - ), + always_use_jwt_access=True, ) def list_group_stats( @@ -626,6 +623,19 @@ def delete_events( # Done; return the response. return response + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 679d6925be24..dd8c15a86ea6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -165,6 +165,15 @@ def _prep_wrapped_messages(self, client_info): ), } + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + @property def list_group_stats( self, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 43954a568825..ec69e07afe60 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -312,5 +312,8 @@ def delete_events( ) return self._stubs["delete_events"] + def close(self): + self.grpc_channel.close() + __all__ = ("ErrorStatsServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 3ba6a09723a7..4b206a726d99 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -316,5 +316,8 @@ def delete_events( ) return self._stubs["delete_events"] + def close(self): + return self.grpc_channel.close() + __all__ = ("ErrorStatsServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 7528086cf8c0..23f336537fef 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -262,6 +262,12 @@ async def report_error_event( # Done; return the response. return response + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index dffc124c7498..bc70bd17782f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -329,10 +329,7 @@ def __init__( client_cert_source_for_mtls=client_cert_source_func, quota_project_id=client_options.quota_project_id, client_info=client_info, - always_use_jwt_access=( - Transport == type(self).get_transport_class("grpc") - or Transport == type(self).get_transport_class("grpc_asyncio") - ), + always_use_jwt_access=True, ) def report_error_event( @@ -438,6 +435,19 @@ def report_error_event( # Done; return the response. return response + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 00babfdd3366..7d7fd65984fd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -159,6 +159,15 @@ def _prep_wrapped_messages(self, client_info): ), } + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + @property def report_error_event( self, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 277b71d1b282..184b0f706f33 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -269,5 +269,8 @@ def report_error_event( ) return self._stubs["report_error_event"] + def close(self): + self.grpc_channel.close() + __all__ = ("ReportErrorsServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index fb4670516771..c547fe14a563 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -272,5 +272,8 @@ def report_error_event( ) return self._stubs["report_error_event"] + def close(self): + return self.grpc_channel.close() + __all__ = ("ReportErrorsServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 5facb35220c3..40bf0c2bb365 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -44,6 +44,7 @@ class ResolutionStatus(proto.Enum): class ErrorGroup(proto.Message): r"""Description of a group of similar error events. + Attributes: name (str): The group resource name. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index 4865d99c64b8..5fdcf7664577 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -26,6 +26,7 @@ class GetGroupRequest(proto.Message): r"""A request to return an individual group. + Attributes: group_name (str): Required. The group resource name. Written as @@ -41,6 +42,7 @@ class GetGroupRequest(proto.Message): class UpdateGroupRequest(proto.Message): r"""A request to replace the existing data for the given group. + Attributes: group (google.cloud.errorreporting_v1beta1.types.ErrorGroup): Required. The group which replaces the diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index 08b5aba9d5f0..fa09546c11f7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -59,6 +59,7 @@ class ErrorGroupOrder(proto.Enum): class ListGroupStatsRequest(proto.Message): r"""Specifies a set of ``ErrorGroupStats`` to return. + Attributes: project_name (str): Required. The resource name of the Google Cloud Platform @@ -127,6 +128,7 @@ class ListGroupStatsRequest(proto.Message): class ListGroupStatsResponse(proto.Message): r"""Contains a set of requested error group stats. + Attributes: error_group_stats (Sequence[google.cloud.errorreporting_v1beta1.types.ErrorGroupStats]): The error group stats which match the given @@ -255,6 +257,7 @@ class TimedCount(proto.Message): class ListEventsRequest(proto.Message): r"""Specifies a set of error events to return. + Attributes: project_name (str): Required. The resource name of the Google Cloud Platform @@ -296,6 +299,7 @@ class ListEventsRequest(proto.Message): class ListEventsResponse(proto.Message): r"""Contains a set of requested error events. + Attributes: error_events (Sequence[google.cloud.errorreporting_v1beta1.types.ErrorEvent]): The error events which match the given @@ -370,6 +374,7 @@ class ServiceContextFilter(proto.Message): class DeleteEventsRequest(proto.Message): r"""Deletes all events in the project. + Attributes: project_name (str): Required. The resource name of the Google Cloud Platform @@ -384,7 +389,8 @@ class DeleteEventsRequest(proto.Message): class DeleteEventsResponse(proto.Message): - r"""Response message for deleting error events. """ + r"""Response message for deleting error events. + """ __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index 82840f60c00c..44276bdfa44b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -31,6 +31,7 @@ class ReportErrorEventRequest(proto.Message): r"""A request for reporting an individual error event. + Attributes: project_name (str): Required. The resource name of the Google Cloud Platform @@ -50,7 +51,8 @@ class ReportErrorEventRequest(proto.Message): class ReportErrorEventResponse(proto.Message): r"""Response for reporting an individual error event. Data may be added to this message in the future. - """ + + """ class ReportedErrorEvent(proto.Message): diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 88547a599373..37a775ed27b1 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -29,6 +29,7 @@ from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async +from google.api_core import path_template from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.error_group_service import ( @@ -1037,6 +1038,9 @@ def test_error_group_service_base_transport(): with pytest.raises(NotImplementedError): getattr(transport, method)(request=object()) + with pytest.raises(NotImplementedError): + transport.close() + @requires_google_auth_gte_1_25_0 def test_error_group_service_base_transport_with_credentials_file(): @@ -1517,3 +1521,49 @@ def test_client_withDEFAULT_CLIENT_INFO(): credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = ErrorGroupServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index b890b123d1d5..ef50a96f4a54 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -29,6 +29,7 @@ from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async +from google.api_core import path_template from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.error_stats_service import ( @@ -1597,6 +1598,9 @@ def test_error_stats_service_base_transport(): with pytest.raises(NotImplementedError): getattr(transport, method)(request=object()) + with pytest.raises(NotImplementedError): + transport.close() + @requires_google_auth_gte_1_25_0 def test_error_stats_service_base_transport_with_credentials_file(): @@ -2077,3 +2081,49 @@ def test_client_withDEFAULT_CLIENT_INFO(): credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index b1249fb2fa1e..9c187df0be77 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -29,6 +29,7 @@ from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async +from google.api_core import path_template from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( @@ -876,6 +877,9 @@ def test_report_errors_service_base_transport(): with pytest.raises(NotImplementedError): getattr(transport, method)(request=object()) + with pytest.raises(NotImplementedError): + transport.close() + @requires_google_auth_gte_1_25_0 def test_report_errors_service_base_transport_with_credentials_file(): @@ -1336,3 +1340,49 @@ def test_client_withDEFAULT_CLIENT_INFO(): credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, ) prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = ReportErrorsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() From 7cd7868ecd9354061b4f29de211c27f95f918e53 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 8 Oct 2021 18:18:26 +0000 Subject: [PATCH 279/467] chore(python): Add kokoro configs for python 3.10 samples testing (#189) --- .../.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/samples/python3.10/common.cfg | 40 +++++++++++++++++++ .../.kokoro/samples/python3.10/continuous.cfg | 6 +++ .../samples/python3.10/periodic-head.cfg | 11 +++++ .../.kokoro/samples/python3.10/periodic.cfg | 6 +++ .../.kokoro/samples/python3.10/presubmit.cfg | 6 +++ .../samples/snippets/api/noxfile.py | 2 +- .../snippets/fluent_on_compute/noxfile.py | 2 +- 8 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic-head.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/presubmit.cfg diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 76d0baa0a49d..7d98291cc35f 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:4370ced27a324687ede5da07132dcdc5381993502a5e8a3e31e16dc631d026f0 + digest: sha256:58f73ba196b5414782605236dd0712a73541b44ff2ff4d3a36ec41092dd6fa5b diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg new file mode 100644 index 000000000000..2ed420e5bb76 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg @@ -0,0 +1,40 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.10" +} + +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-310" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic-head.cfg new file mode 100644 index 000000000000..0ab001caaf12 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic.cfg new file mode 100644 index 000000000000..71cd1e597e38 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 1fd8956fbf01..93a9122cc457 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -87,7 +87,7 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. # All versions used to test samples. -ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] +ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 1fd8956fbf01..93a9122cc457 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -87,7 +87,7 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. # All versions used to test samples. -ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] +ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] From c292ad25c71d6cce3d0cde822ba4848507a60587 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Mon, 11 Oct 2021 10:41:40 -0700 Subject: [PATCH 280/467] fix: exception thrown when grpc is disabled (#190) --- .../google/cloud/error_reporting/_logging.py | 4 ++-- .../tests/system/test_system.py | 7 +++++++ .../tests/unit/test__logging.py | 10 +++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py index 5e83d14894da..c7d1d90909ec 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_logging.py @@ -70,8 +70,8 @@ def __init__( client_options=None, ): self.logging_client = google.cloud.logging.Client( - project, - credentials, + project=project, + credentials=credentials, _http=_http, client_info=client_info, client_options=client_options, diff --git a/packages/google-cloud-error-reporting/tests/system/test_system.py b/packages/google-cloud-error-reporting/tests/system/test_system.py index 28125c6a4eac..4565a3581f51 100644 --- a/packages/google-cloud-error-reporting/tests/system/test_system.py +++ b/packages/google-cloud-error-reporting/tests/system/test_system.py @@ -15,6 +15,7 @@ import functools import operator import unittest +import mock from google.cloud import error_reporting import google.cloud.errorreporting_v1beta1 @@ -127,3 +128,9 @@ def test_report_exception(self): error_count = wrapped_get_count(class_name, Config.CLIENT) self.assertEqual(error_count, 1) + + def test_report_exception_no_grpc(self): + with mock.patch.dict( + "os.environ", {"GOOGLE_CLOUD_DISABLE_GRPC": "true"}, clear=True + ): + self.test_report_exception() diff --git a/packages/google-cloud-error-reporting/tests/unit/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py index 772b5229a33b..c5b1cc32c810 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__logging.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__logging.py @@ -40,7 +40,11 @@ def test_ctor_defaults(self, mocked_cls): self.assertIs(logging_api.logging_client, mocked_cls.return_value) mocked_cls.assert_called_once_with( - self.PROJECT, credentials, _http=None, client_info=None, client_options=None + project=self.PROJECT, + credentials=credentials, + _http=None, + client_info=None, + client_options=None, ) @mock.patch("google.cloud.logging.Client") @@ -60,8 +64,8 @@ def test_ctor_explicit(self, mocked_cls): self.assertIs(logging_api.logging_client, mocked_cls.return_value) mocked_cls.assert_called_once_with( - self.PROJECT, - credentials, + project=self.PROJECT, + credentials=credentials, _http=http, client_info=client_info, client_options=client_options, From 21d42974dc07aabdbc39e2fc3c696b54dc74102a Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 11 Oct 2021 10:49:10 -0700 Subject: [PATCH 281/467] chore: release 1.3.0 (#188) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 13 +++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index efa6a8065147..971e13d80906 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,19 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.3.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.3...v1.3.0) (2021-10-11) + + +### Features + +* add context manager support in client ([#187](https://www.github.com/googleapis/python-error-reporting/issues/187)) ([a4e2cd4](https://www.github.com/googleapis/python-error-reporting/commit/a4e2cd4654ae6b3f785727e279ce362798368598)) + + +### Bug Fixes + +* exception thrown when grpc is disabled ([#190](https://www.github.com/googleapis/python-error-reporting/issues/190)) ([929e293](https://www.github.com/googleapis/python-error-reporting/commit/929e293a479dea3059bfca152b93d7740348fc39)) +* improper types in pagers generation ([18c93a9](https://www.github.com/googleapis/python-error-reporting/commit/18c93a99a967b6d86e7409f4e26ff56f1c9788de)) + ### [1.2.3](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.2...v1.2.3) (2021-09-24) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index c3a17a6e4568..b2e7f4cb2136 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.2.3" +version = "1.3.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From d8488597d8a84407c56949a02508bb0463699d6d Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 11 Oct 2021 21:33:47 +0200 Subject: [PATCH 282/467] chore(deps): update dependency google-cloud-error-reporting to v1.3.0 (#191) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 01cd07d16cf9..9a0a82ec93cd 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.2.3 +google-cloud-error-reporting==1.3.0 From efb16769afd4ba83b0b9b5c034762dc512231cda Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Thu, 14 Oct 2021 19:18:34 -0400 Subject: [PATCH 283/467] feat: add support for python 3.10 (#192) --- packages/google-cloud-error-reporting/setup.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index b2e7f4cb2136..bc1bdd0933d1 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -80,6 +80,8 @@ "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Operating System :: OS Independent", "Topic :: Internet", ], From 170477c22368c2b0d18b458740ef6a8c1038ad53 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 21 Oct 2021 14:24:31 +0000 Subject: [PATCH 284/467] chore: release 1.4.0 (#193) :robot: I have created a release \*beep\* \*boop\* --- ## [1.4.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.3.0...v1.4.0) (2021-10-14) ### Features * add support for python 3.10 ([#192](https://www.github.com/googleapis/python-error-reporting/issues/192)) ([76cc041](https://www.github.com/googleapis/python-error-reporting/commit/76cc041c367d05a361c2fce355340e01bae116ed)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 971e13d80906..44c18f8ce3ce 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.4.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.3.0...v1.4.0) (2021-10-14) + + +### Features + +* add support for python 3.10 ([#192](https://www.github.com/googleapis/python-error-reporting/issues/192)) ([76cc041](https://www.github.com/googleapis/python-error-reporting/commit/76cc041c367d05a361c2fce355340e01bae116ed)) + ## [1.3.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.3...v1.3.0) (2021-10-11) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index bc1bdd0933d1..6e33f890a778 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.3.0" +version = "1.4.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 87213ffde66302bb8fd0c8a7851a899fc1803a73 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 21 Oct 2021 19:24:07 +0200 Subject: [PATCH 285/467] chore(deps): update dependency google-cloud-error-reporting to v1.4.0 (#195) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 9a0a82ec93cd..21872c05d125 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.3.0 +google-cloud-error-reporting==1.4.0 From 06e5219815c9b51aa75acec20e506a5c42020e1b Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 25 Oct 2021 17:17:59 -0400 Subject: [PATCH 286/467] chore(python): push cloud library docs to staging bucket for Cloud RAD (#196) Source-Link: https://github.com/googleapis/synthtool/commit/7fd61f8efae782a7cfcecc599faf52f9737fe584 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:4ee57a76a176ede9087c14330c625a71553cf9c72828b2c0ca12f5338171ba60 Co-authored-by: Owl Bot --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/.kokoro/docs/common.cfg | 1 + packages/google-cloud-error-reporting/noxfile.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 7d98291cc35f..108063d4dee4 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:58f73ba196b5414782605236dd0712a73541b44ff2ff4d3a36ec41092dd6fa5b + digest: sha256:4ee57a76a176ede9087c14330c625a71553cf9c72828b2c0ca12f5338171ba60 diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg index ea0c974bcb79..2603e22d4f83 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg @@ -30,6 +30,7 @@ env_vars: { env_vars: { key: "V2_STAGING_BUCKET" + # Push google cloud library docs to the Cloud RAD bucket `docs-staging-v2` value: "docs-staging-v2" } diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 672b28d61f3e..f041f1f5a4ae 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -101,7 +101,7 @@ def default(session): "py.test", "--quiet", f"--junitxml=unit_{session.python}_sponge_log.xml", - "--cov=google/cloud", + "--cov=google", "--cov=tests/unit", "--cov-append", "--cov-config=.coveragerc", From cabb13f7257b3142c353b852cf80fe71ec57c18a Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 14:40:12 +0000 Subject: [PATCH 287/467] chore: use gapic-generator-python 0.53.4 (#197) - [ ] Regenerate this pull request now. docs: list oneofs in docstring fix(deps): require google-api-core >= 1.28.0 fix(deps): drop packaging dependency committer: busunkim96@ PiperOrigin-RevId: 406468269 Source-Link: https://github.com/googleapis/googleapis/commit/83d81b0c8fc22291a13398d6d77f02dc97a5b6f4 Source-Link: https://github.com/googleapis/googleapis-gen/commit/2ff001fbacb9e77e71d734de5f955c05fdae8526 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMmZmMDAxZmJhY2I5ZTc3ZTcxZDczNGRlNWY5NTVjMDVmZGFlODUyNiJ9 --- .../error_group_service/async_client.py | 16 ++-- .../services/error_group_service/client.py | 6 +- .../error_group_service/transports/base.py | 35 +------ .../transports/grpc_asyncio.py | 1 - .../error_stats_service/async_client.py | 22 +++-- .../services/error_stats_service/client.py | 8 +- .../error_stats_service/transports/base.py | 35 +------ .../transports/grpc_asyncio.py | 1 - .../report_errors_service/async_client.py | 10 +- .../services/report_errors_service/client.py | 4 +- .../report_errors_service/transports/base.py | 35 +------ .../transports/grpc_asyncio.py | 1 - .../google-cloud-error-reporting/setup.py | 3 +- .../testing/constraints-3.6.txt | 3 +- .../test_error_group_service.py | 91 ++----------------- .../test_error_stats_service.py | 91 ++----------------- .../test_report_errors_service.py | 91 ++----------------- 17 files changed, 71 insertions(+), 382 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index eaff5b920357..5b4a58788381 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -19,13 +19,15 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core.client_options import ClientOptions # type: ignore from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service from .transports.base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO @@ -165,17 +167,17 @@ def __init__( async def get_group( self, - request: error_group_service.GetGroupRequest = None, + request: Union[error_group_service.GetGroupRequest, dict] = None, *, group_name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> common.ErrorGroup: r"""Get the specified group. Args: - request (:class:`google.cloud.errorreporting_v1beta1.types.GetGroupRequest`): + request (Union[google.cloud.errorreporting_v1beta1.types.GetGroupRequest, dict]): The request object. A request to return an individual group. group_name (:class:`str`): @@ -242,10 +244,10 @@ async def get_group( async def update_group( self, - request: error_group_service.UpdateGroupRequest = None, + request: Union[error_group_service.UpdateGroupRequest, dict] = None, *, group: common.ErrorGroup = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> common.ErrorGroup: @@ -253,7 +255,7 @@ async def update_group( Fails if the group does not exist. Args: - request (:class:`google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest`): + request (Union[google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest, dict]): The request object. A request to replace the existing data for the given group. group (:class:`google.cloud.errorreporting_v1beta1.types.ErrorGroup`): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index f8959ec6ab54..8e089a01cef3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -30,6 +30,8 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service from .transports.base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO @@ -349,7 +351,7 @@ def get_group( request: Union[error_group_service.GetGroupRequest, dict] = None, *, group_name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> common.ErrorGroup: @@ -426,7 +428,7 @@ def update_group( request: Union[error_group_service.UpdateGroupRequest, dict] = None, *, group: common.ErrorGroup = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> common.ErrorGroup: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 8b51df23c8a3..5263e632bbec 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -15,7 +15,6 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import packaging.version import pkg_resources import google.auth # type: ignore @@ -38,15 +37,6 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() -try: - # google.auth.__version__ was added in 1.26.0 - _GOOGLE_AUTH_VERSION = google.auth.__version__ -except AttributeError: - try: # try pkg_resources if it is available - _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version - except pkg_resources.DistributionNotFound: # pragma: NO COVER - _GOOGLE_AUTH_VERSION = None - class ErrorGroupServiceTransport(abc.ABC): """Abstract transport class for ErrorGroupService.""" @@ -96,7 +86,7 @@ def __init__( host += ":443" self._host = host - scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. self._scopes = scopes @@ -129,29 +119,6 @@ def __init__( # Save the credentials. self._credentials = credentials - # TODO(busunkim): This method is in the base transport - # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-auth is increased. - - # TODO: Remove this function once google-auth >= 1.25.0 is required - @classmethod - def _get_scopes_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Optional[Sequence[str]]]: - """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" - - scopes_kwargs = {} - - if _GOOGLE_AUTH_VERSION and ( - packaging.version.parse(_GOOGLE_AUTH_VERSION) - >= packaging.version.parse("1.25.0") - ): - scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} - else: - scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} - - return scopes_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 24355c26608b..2b1135851b31 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -20,7 +20,6 @@ from google.api_core import grpc_helpers_async # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index ef874835f5bb..90f9fdf876a1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -19,13 +19,15 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core.client_options import ClientOptions # type: ignore from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -168,18 +170,18 @@ def __init__( async def list_group_stats( self, - request: error_stats_service.ListGroupStatsRequest = None, + request: Union[error_stats_service.ListGroupStatsRequest, dict] = None, *, project_name: str = None, time_range: error_stats_service.QueryTimeRange = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListGroupStatsAsyncPager: r"""Lists the specified groups. Args: - request (:class:`google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest`): + request (Union[google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest, dict]): The request object. Specifies a set of `ErrorGroupStats` to return. project_name (:class:`str`): @@ -272,18 +274,18 @@ async def list_group_stats( async def list_events( self, - request: error_stats_service.ListEventsRequest = None, + request: Union[error_stats_service.ListEventsRequest, dict] = None, *, project_name: str = None, group_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEventsAsyncPager: r"""Lists the specified events. Args: - request (:class:`google.cloud.errorreporting_v1beta1.types.ListEventsRequest`): + request (Union[google.cloud.errorreporting_v1beta1.types.ListEventsRequest, dict]): The request object. Specifies a set of error events to return. project_name (:class:`str`): @@ -368,17 +370,17 @@ async def list_events( async def delete_events( self, - request: error_stats_service.DeleteEventsRequest = None, + request: Union[error_stats_service.DeleteEventsRequest, dict] = None, *, project_name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. Args: - request (:class:`google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest`): + request (Union[google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest, dict]): The request object. Deletes all events in the project. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 392f4194e47e..c5a308e48470 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -30,6 +30,8 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -353,7 +355,7 @@ def list_group_stats( *, project_name: str = None, time_range: error_stats_service.QueryTimeRange = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListGroupStatsPager: @@ -457,7 +459,7 @@ def list_events( *, project_name: str = None, group_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEventsPager: @@ -552,7 +554,7 @@ def delete_events( request: Union[error_stats_service.DeleteEventsRequest, dict] = None, *, project_name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> error_stats_service.DeleteEventsResponse: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index dd8c15a86ea6..0cd4e9a994b9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -15,7 +15,6 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import packaging.version import pkg_resources import google.auth # type: ignore @@ -37,15 +36,6 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() -try: - # google.auth.__version__ was added in 1.26.0 - _GOOGLE_AUTH_VERSION = google.auth.__version__ -except AttributeError: - try: # try pkg_resources if it is available - _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version - except pkg_resources.DistributionNotFound: # pragma: NO COVER - _GOOGLE_AUTH_VERSION = None - class ErrorStatsServiceTransport(abc.ABC): """Abstract transport class for ErrorStatsService.""" @@ -95,7 +85,7 @@ def __init__( host += ":443" self._host = host - scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. self._scopes = scopes @@ -128,29 +118,6 @@ def __init__( # Save the credentials. self._credentials = credentials - # TODO(busunkim): This method is in the base transport - # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-auth is increased. - - # TODO: Remove this function once google-auth >= 1.25.0 is required - @classmethod - def _get_scopes_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Optional[Sequence[str]]]: - """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" - - scopes_kwargs = {} - - if _GOOGLE_AUTH_VERSION and ( - packaging.version.parse(_GOOGLE_AUTH_VERSION) - >= packaging.version.parse("1.25.0") - ): - scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} - else: - scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} - - return scopes_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 4b206a726d99..6d1d28c64890 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -20,7 +20,6 @@ from google.api_core import grpc_helpers_async # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 23f336537fef..a74397bb330f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -19,13 +19,15 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core.client_options import ClientOptions # type: ignore from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.errorreporting_v1beta1.types import report_errors_service from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport @@ -161,11 +163,11 @@ def __init__( async def report_error_event( self, - request: report_errors_service.ReportErrorEventRequest = None, + request: Union[report_errors_service.ReportErrorEventRequest, dict] = None, *, project_name: str = None, event: report_errors_service.ReportedErrorEvent = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> report_errors_service.ReportErrorEventResponse: @@ -187,7 +189,7 @@ async def report_error_event( regionalized logs `__. Args: - request (:class:`google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest`): + request (Union[google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest, dict]): The request object. A request for reporting an individual error event. project_name (:class:`str`): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index bc70bd17782f..17aed7a00086 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -30,6 +30,8 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.errorreporting_v1beta1.types import report_errors_service from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc import ReportErrorsServiceGrpcTransport @@ -338,7 +340,7 @@ def report_error_event( *, project_name: str = None, event: report_errors_service.ReportedErrorEvent = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> report_errors_service.ReportErrorEventResponse: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 7d7fd65984fd..47b690a448cd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -15,7 +15,6 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import packaging.version import pkg_resources import google.auth # type: ignore @@ -37,15 +36,6 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() -try: - # google.auth.__version__ was added in 1.26.0 - _GOOGLE_AUTH_VERSION = google.auth.__version__ -except AttributeError: - try: # try pkg_resources if it is available - _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version - except pkg_resources.DistributionNotFound: # pragma: NO COVER - _GOOGLE_AUTH_VERSION = None - class ReportErrorsServiceTransport(abc.ABC): """Abstract transport class for ReportErrorsService.""" @@ -95,7 +85,7 @@ def __init__( host += ":443" self._host = host - scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. self._scopes = scopes @@ -128,29 +118,6 @@ def __init__( # Save the credentials. self._credentials = credentials - # TODO(busunkim): This method is in the base transport - # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-auth is increased. - - # TODO: Remove this function once google-auth >= 1.25.0 is required - @classmethod - def _get_scopes_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Optional[Sequence[str]]]: - """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" - - scopes_kwargs = {} - - if _GOOGLE_AUTH_VERSION and ( - packaging.version.parse(_GOOGLE_AUTH_VERSION) - >= packaging.version.parse("1.25.0") - ): - scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} - else: - scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} - - return scopes_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index c547fe14a563..5e1191882a64 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -20,7 +20,6 @@ from google.api_core import grpc_helpers_async # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 6e33f890a778..da02fc205ccb 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -33,9 +33,8 @@ # NOTE: Maintainers, please do not require google-api-core>=2.x.x # Until this issue is closed # https://github.com/googleapis/google-cloud-python/issues/10566 - "google-api-core[grpc] >= 1.26.0, <3.0.0dev", + "google-api-core[grpc] >= 1.28.0, <3.0.0dev", "proto-plus >= 1.4.0", - "packaging >= 14.3", ] extras = {} diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt index 9e25b6db4d9e..e35753aee341 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt @@ -6,6 +6,5 @@ # e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", # Then this file should have foo==1.14.0 google-cloud-logging==1.14.0 -google-api-core==1.26.0 +google-api-core==1.28.0 proto-plus==1.4.0 -packaging==14.3 diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 37a775ed27b1..1c968e7ef860 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -15,7 +15,6 @@ # import os import mock -import packaging.version import grpc from grpc.experimental import aio @@ -39,29 +38,12 @@ ErrorGroupServiceClient, ) from google.cloud.errorreporting_v1beta1.services.error_group_service import transports -from google.cloud.errorreporting_v1beta1.services.error_group_service.transports.base import ( - _GOOGLE_AUTH_VERSION, -) from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service from google.oauth2 import service_account import google.auth -# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively -# through google-api-core: -# - Delete the auth "less than" test cases -# - Delete these pytest markers (Make the "greater than or equal to" tests the default). -requires_google_auth_lt_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), - reason="This test requires google-auth < 1.25.0", -) -requires_google_auth_gte_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), - reason="This test requires google-auth >= 1.25.0", -) - - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -219,7 +201,7 @@ def test_error_group_service_client_client_options( 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(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -236,7 +218,7 @@ def test_error_group_service_client_client_options( 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() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -253,7 +235,7 @@ def test_error_group_service_client_client_options( 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() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -282,7 +264,7 @@ def test_error_group_service_client_client_options( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -351,7 +333,7 @@ def test_error_group_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) if use_client_cert_env == "false": expected_client_cert_source = None @@ -393,7 +375,7 @@ def test_error_group_service_client_mtls_env_auto( expected_client_cert_source = client_cert_source_callback patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -415,7 +397,7 @@ def test_error_group_service_client_mtls_env_auto( return_value=False, ): patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -446,7 +428,7 @@ def test_error_group_service_client_client_options_scopes( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -477,7 +459,7 @@ def test_error_group_service_client_client_options_credentials_file( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -1042,7 +1024,6 @@ def test_error_group_service_base_transport(): transport.close() -@requires_google_auth_gte_1_25_0 def test_error_group_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( @@ -1063,26 +1044,6 @@ def test_error_group_service_base_transport_with_credentials_file(): ) -@requires_google_auth_lt_1_25_0 -def test_error_group_service_base_transport_with_credentials_file_old_google_auth(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.errorreporting_v1beta1.services.error_group_service.transports.ErrorGroupServiceTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.ErrorGroupServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", - ) - load_creds.assert_called_once_with( - "credentials.json", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - def test_error_group_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( @@ -1094,7 +1055,6 @@ def test_error_group_service_base_transport_with_adc(): adc.assert_called_once() -@requires_google_auth_gte_1_25_0 def test_error_group_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(google.auth, "default", autospec=True) as adc: @@ -1107,18 +1067,6 @@ def test_error_group_service_auth_adc(): ) -@requires_google_auth_lt_1_25_0 -def test_error_group_service_auth_adc_old_google_auth(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - ErrorGroupServiceClient() - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id=None, - ) - - @pytest.mark.parametrize( "transport_class", [ @@ -1126,7 +1074,6 @@ def test_error_group_service_auth_adc_old_google_auth(): transports.ErrorGroupServiceGrpcAsyncIOTransport, ], ) -@requires_google_auth_gte_1_25_0 def test_error_group_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -1140,26 +1087,6 @@ def test_error_group_service_transport_auth_adc(transport_class): ) -@pytest.mark.parametrize( - "transport_class", - [ - transports.ErrorGroupServiceGrpcTransport, - transports.ErrorGroupServiceGrpcAsyncIOTransport, - ], -) -@requires_google_auth_lt_1_25_0 -def test_error_group_service_transport_auth_adc_old_google_auth(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus") - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - @pytest.mark.parametrize( "transport_class,grpc_helpers", [ diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index ef50a96f4a54..b2370f9c3709 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -15,7 +15,6 @@ # import os import mock -import packaging.version import grpc from grpc.experimental import aio @@ -40,9 +39,6 @@ ) from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.services.error_stats_service import transports -from google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.base import ( - _GOOGLE_AUTH_VERSION, -) from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service from google.oauth2 import service_account @@ -51,20 +47,6 @@ import google.auth -# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively -# through google-api-core: -# - Delete the auth "less than" test cases -# - Delete these pytest markers (Make the "greater than or equal to" tests the default). -requires_google_auth_lt_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), - reason="This test requires google-auth < 1.25.0", -) -requires_google_auth_gte_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), - reason="This test requires google-auth >= 1.25.0", -) - - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -222,7 +204,7 @@ def test_error_stats_service_client_client_options( 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(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -239,7 +221,7 @@ def test_error_stats_service_client_client_options( 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() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -256,7 +238,7 @@ def test_error_stats_service_client_client_options( 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() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -285,7 +267,7 @@ def test_error_stats_service_client_client_options( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -354,7 +336,7 @@ def test_error_stats_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) if use_client_cert_env == "false": expected_client_cert_source = None @@ -396,7 +378,7 @@ def test_error_stats_service_client_mtls_env_auto( expected_client_cert_source = client_cert_source_callback patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -418,7 +400,7 @@ def test_error_stats_service_client_mtls_env_auto( return_value=False, ): patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -449,7 +431,7 @@ def test_error_stats_service_client_client_options_scopes( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -480,7 +462,7 @@ def test_error_stats_service_client_client_options_credentials_file( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -1602,7 +1584,6 @@ def test_error_stats_service_base_transport(): transport.close() -@requires_google_auth_gte_1_25_0 def test_error_stats_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( @@ -1623,26 +1604,6 @@ def test_error_stats_service_base_transport_with_credentials_file(): ) -@requires_google_auth_lt_1_25_0 -def test_error_stats_service_base_transport_with_credentials_file_old_google_auth(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.errorreporting_v1beta1.services.error_stats_service.transports.ErrorStatsServiceTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.ErrorStatsServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", - ) - load_creds.assert_called_once_with( - "credentials.json", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - def test_error_stats_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( @@ -1654,7 +1615,6 @@ def test_error_stats_service_base_transport_with_adc(): adc.assert_called_once() -@requires_google_auth_gte_1_25_0 def test_error_stats_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(google.auth, "default", autospec=True) as adc: @@ -1667,18 +1627,6 @@ def test_error_stats_service_auth_adc(): ) -@requires_google_auth_lt_1_25_0 -def test_error_stats_service_auth_adc_old_google_auth(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - ErrorStatsServiceClient() - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id=None, - ) - - @pytest.mark.parametrize( "transport_class", [ @@ -1686,7 +1634,6 @@ def test_error_stats_service_auth_adc_old_google_auth(): transports.ErrorStatsServiceGrpcAsyncIOTransport, ], ) -@requires_google_auth_gte_1_25_0 def test_error_stats_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -1700,26 +1647,6 @@ def test_error_stats_service_transport_auth_adc(transport_class): ) -@pytest.mark.parametrize( - "transport_class", - [ - transports.ErrorStatsServiceGrpcTransport, - transports.ErrorStatsServiceGrpcAsyncIOTransport, - ], -) -@requires_google_auth_lt_1_25_0 -def test_error_stats_service_transport_auth_adc_old_google_auth(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus") - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - @pytest.mark.parametrize( "transport_class,grpc_helpers", [ diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 9c187df0be77..f1e03e038b2b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -15,7 +15,6 @@ # import os import mock -import packaging.version import grpc from grpc.experimental import aio @@ -41,9 +40,6 @@ from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( transports, ) -from google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.base import ( - _GOOGLE_AUTH_VERSION, -) from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import report_errors_service from google.oauth2 import service_account @@ -51,20 +47,6 @@ import google.auth -# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively -# through google-api-core: -# - Delete the auth "less than" test cases -# - Delete these pytest markers (Make the "greater than or equal to" tests the default). -requires_google_auth_lt_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), - reason="This test requires google-auth < 1.25.0", -) -requires_google_auth_gte_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), - reason="This test requires google-auth >= 1.25.0", -) - - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -226,7 +208,7 @@ def test_report_errors_service_client_client_options( 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(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -243,7 +225,7 @@ def test_report_errors_service_client_client_options( 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() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -260,7 +242,7 @@ def test_report_errors_service_client_client_options( 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() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -289,7 +271,7 @@ def test_report_errors_service_client_client_options( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -358,7 +340,7 @@ def test_report_errors_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) if use_client_cert_env == "false": expected_client_cert_source = None @@ -400,7 +382,7 @@ def test_report_errors_service_client_mtls_env_auto( expected_client_cert_source = client_cert_source_callback patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -422,7 +404,7 @@ def test_report_errors_service_client_mtls_env_auto( return_value=False, ): patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -457,7 +439,7 @@ def test_report_errors_service_client_client_options_scopes( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -492,7 +474,7 @@ def test_report_errors_service_client_client_options_credentials_file( 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) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -881,7 +863,6 @@ def test_report_errors_service_base_transport(): transport.close() -@requires_google_auth_gte_1_25_0 def test_report_errors_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( @@ -902,26 +883,6 @@ def test_report_errors_service_base_transport_with_credentials_file(): ) -@requires_google_auth_lt_1_25_0 -def test_report_errors_service_base_transport_with_credentials_file_old_google_auth(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.errorreporting_v1beta1.services.report_errors_service.transports.ReportErrorsServiceTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.ReportErrorsServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", - ) - load_creds.assert_called_once_with( - "credentials.json", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - def test_report_errors_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( @@ -933,7 +894,6 @@ def test_report_errors_service_base_transport_with_adc(): adc.assert_called_once() -@requires_google_auth_gte_1_25_0 def test_report_errors_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(google.auth, "default", autospec=True) as adc: @@ -946,18 +906,6 @@ def test_report_errors_service_auth_adc(): ) -@requires_google_auth_lt_1_25_0 -def test_report_errors_service_auth_adc_old_google_auth(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - ReportErrorsServiceClient() - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id=None, - ) - - @pytest.mark.parametrize( "transport_class", [ @@ -965,7 +913,6 @@ def test_report_errors_service_auth_adc_old_google_auth(): transports.ReportErrorsServiceGrpcAsyncIOTransport, ], ) -@requires_google_auth_gte_1_25_0 def test_report_errors_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -979,26 +926,6 @@ def test_report_errors_service_transport_auth_adc(transport_class): ) -@pytest.mark.parametrize( - "transport_class", - [ - transports.ReportErrorsServiceGrpcTransport, - transports.ReportErrorsServiceGrpcAsyncIOTransport, - ], -) -@requires_google_auth_lt_1_25_0 -def test_report_errors_service_transport_auth_adc_old_google_auth(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus") - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - @pytest.mark.parametrize( "transport_class,grpc_helpers", [ From 5e688d6aed8bc26444e8de11affcdcb45191e45c Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 2 Nov 2021 15:04:12 +0000 Subject: [PATCH 288/467] chore: release 1.4.1 (#198) :robot: I have created a release \*beep\* \*boop\* --- ### [1.4.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.4.0...v1.4.1) (2021-11-01) ### Bug Fixes * **deps:** drop packaging dependency ([31e3d6b](https://www.github.com/googleapis/python-error-reporting/commit/31e3d6b269139831e914165a316b450c01bc6c0d)) * **deps:** require google-api-core >= 1.28.0 ([31e3d6b](https://www.github.com/googleapis/python-error-reporting/commit/31e3d6b269139831e914165a316b450c01bc6c0d)) ### Documentation * list oneofs in docstring ([31e3d6b](https://www.github.com/googleapis/python-error-reporting/commit/31e3d6b269139831e914165a316b450c01bc6c0d)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- packages/google-cloud-error-reporting/CHANGELOG.md | 13 +++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 44c18f8ce3ce..906f667dfa11 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,19 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +### [1.4.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.4.0...v1.4.1) (2021-11-01) + + +### Bug Fixes + +* **deps:** drop packaging dependency ([31e3d6b](https://www.github.com/googleapis/python-error-reporting/commit/31e3d6b269139831e914165a316b450c01bc6c0d)) +* **deps:** require google-api-core >= 1.28.0 ([31e3d6b](https://www.github.com/googleapis/python-error-reporting/commit/31e3d6b269139831e914165a316b450c01bc6c0d)) + + +### Documentation + +* list oneofs in docstring ([31e3d6b](https://www.github.com/googleapis/python-error-reporting/commit/31e3d6b269139831e914165a316b450c01bc6c0d)) + ## [1.4.0](https://www.github.com/googleapis/python-error-reporting/compare/v1.3.0...v1.4.0) (2021-10-14) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index da02fc205ccb..cde620271480 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.4.0" +version = "1.4.1" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From a2d6f3de87aaf9558ad513e6333885edc6ce8c5e Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 2 Nov 2021 18:36:45 +0100 Subject: [PATCH 289/467] chore(deps): update dependency google-cloud-error-reporting to v1.4.1 (#199) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 21872c05d125..881f1e6c7657 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.4.0 +google-cloud-error-reporting==1.4.1 From 7a7864b967cd1ded398d9c508013c3e90eb9773c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 10 Nov 2021 05:18:10 -0500 Subject: [PATCH 290/467] chore: use gapic-generator-python 0.56.2 (#202) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: update Java and Python dependencies PiperOrigin-RevId: 408420890 Source-Link: https://github.com/googleapis/googleapis/commit/2921f9fb3bfbd16f6b2da0104373e2b47a80a65e Source-Link: https://github.com/googleapis/googleapis-gen/commit/6598ca8cbbf5226733a099c4506518a5af6ff74c Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNjU5OGNhOGNiYmY1MjI2NzMzYTA5OWM0NTA2NTE4YTVhZjZmZjc0YyJ9 * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../error_group_service/async_client.py | 13 +++--- .../services/error_group_service/client.py | 25 ++++++++---- .../error_group_service/transports/base.py | 8 ++-- .../error_group_service/transports/grpc.py | 4 +- .../transports/grpc_asyncio.py | 4 +- .../error_stats_service/async_client.py | 13 +++--- .../services/error_stats_service/client.py | 25 ++++++++---- .../error_stats_service/transports/base.py | 8 ++-- .../error_stats_service/transports/grpc.py | 4 +- .../transports/grpc_asyncio.py | 4 +- .../report_errors_service/async_client.py | 13 +++--- .../services/report_errors_service/client.py | 25 ++++++++---- .../report_errors_service/transports/base.py | 8 ++-- .../report_errors_service/transports/grpc.py | 4 +- .../transports/grpc_asyncio.py | 4 +- .../test_error_group_service.py | 16 ++++++-- .../test_error_stats_service.py | 40 ++++++++++++++----- .../test_report_errors_service.py | 16 ++++++-- 18 files changed, 153 insertions(+), 81 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 5b4a58788381..b3397de35ebc 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -19,14 +19,17 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -from google.api_core.client_options import ClientOptions # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +from google.api_core.client_options import ClientOptions +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore -OptionalRetry = Union[retries.Retry, object] +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 8e089a01cef3..82fe3e55adcd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -14,23 +14,25 @@ # limitations under the License. # from collections import OrderedDict -from distutils import util import os import re from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources -from google.api_core import client_options as client_options_lib # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore -OptionalRetry = Union[retries.Retry, object] +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service @@ -280,8 +282,15 @@ def __init__( client_options = client_options_lib.ClientOptions() # Create SSL credentials for mutual TLS if needed. - use_client_cert = bool( - util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) + if os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") not in ( + "true", + "false", + ): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + use_client_cert = ( + os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true" ) client_cert_source_func = None diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 5263e632bbec..456cfebc0478 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -18,10 +18,10 @@ import pkg_resources import google.auth # type: ignore -import google.api_core # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index c9c1123763dd..e09ae3675f75 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -16,8 +16,8 @@ import warnings from typing import Callable, Dict, Optional, Sequence, Tuple, Union -from google.api_core import grpc_helpers # type: ignore -from google.api_core import gapic_v1 # type: ignore +from google.api_core import grpc_helpers +from google.api_core import gapic_v1 import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 2b1135851b31..4a8bea19b4c3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -16,8 +16,8 @@ import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union -from google.api_core import gapic_v1 # type: ignore -from google.api_core import grpc_helpers_async # type: ignore +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers_async from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 90f9fdf876a1..c5f5053ecad2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -19,14 +19,17 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -from google.api_core.client_options import ClientOptions # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +from google.api_core.client_options import ClientOptions +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore -OptionalRetry = Union[retries.Retry, object] +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index c5a308e48470..7a3a3051254d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -14,23 +14,25 @@ # limitations under the License. # from collections import OrderedDict -from distutils import util import os import re from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources -from google.api_core import client_options as client_options_lib # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore -OptionalRetry = Union[retries.Retry, object] +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common @@ -283,8 +285,15 @@ def __init__( client_options = client_options_lib.ClientOptions() # Create SSL credentials for mutual TLS if needed. - use_client_cert = bool( - util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) + if os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") not in ( + "true", + "false", + ): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + use_client_cert = ( + os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true" ) client_cert_source_func = None diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 0cd4e9a994b9..92c950dea6b6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -18,10 +18,10 @@ import pkg_resources import google.auth # type: ignore -import google.api_core # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index ec69e07afe60..0d2a4f6fa229 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -16,8 +16,8 @@ import warnings from typing import Callable, Dict, Optional, Sequence, Tuple, Union -from google.api_core import grpc_helpers # type: ignore -from google.api_core import gapic_v1 # type: ignore +from google.api_core import grpc_helpers +from google.api_core import gapic_v1 import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 6d1d28c64890..bd61a2253cb9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -16,8 +16,8 @@ import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union -from google.api_core import gapic_v1 # type: ignore -from google.api_core import grpc_helpers_async # type: ignore +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers_async from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index a74397bb330f..276829733557 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -19,14 +19,17 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -from google.api_core.client_options import ClientOptions # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +from google.api_core.client_options import ClientOptions +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore -OptionalRetry = Union[retries.Retry, object] +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 17aed7a00086..45dec2cac0bb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -14,23 +14,25 @@ # limitations under the License. # from collections import OrderedDict -from distutils import util import os import re from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources -from google.api_core import client_options as client_options_lib # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore -OptionalRetry = Union[retries.Retry, object] +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO @@ -268,8 +270,15 @@ def __init__( client_options = client_options_lib.ClientOptions() # Create SSL credentials for mutual TLS if needed. - use_client_cert = bool( - util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")) + if os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") not in ( + "true", + "false", + ): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + use_client_cert = ( + os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true" ) client_cert_source_func = None diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 47b690a448cd..9305a9b18b2f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -18,10 +18,10 @@ import pkg_resources import google.auth # type: ignore -import google.api_core # type: ignore -from google.api_core import exceptions as core_exceptions # type: ignore -from google.api_core import gapic_v1 # type: ignore -from google.api_core import retry as retries # type: ignore +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 184b0f706f33..4f693e0e0711 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -16,8 +16,8 @@ import warnings from typing import Callable, Dict, Optional, Sequence, Tuple, Union -from google.api_core import grpc_helpers # type: ignore -from google.api_core import gapic_v1 # type: ignore +from google.api_core import grpc_helpers +from google.api_core import gapic_v1 import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 5e1191882a64..68ee60fa3ace 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -16,8 +16,8 @@ import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union -from google.api_core import gapic_v1 # type: ignore -from google.api_core import grpc_helpers_async # type: ignore +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers_async from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 1c968e7ef860..334fcc9944c6 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -651,7 +651,9 @@ def test_get_group_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].group_name == "group_name_value" + arg = args[0].group_name + mock_val = "group_name_value" + assert arg == mock_val def test_get_group_flattened_error(): @@ -685,7 +687,9 @@ async def test_get_group_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].group_name == "group_name_value" + arg = args[0].group_name + mock_val = "group_name_value" + assert arg == mock_val @pytest.mark.asyncio @@ -861,7 +865,9 @@ def test_update_group_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].group == common.ErrorGroup(name="name_value") + arg = args[0].group + mock_val = common.ErrorGroup(name="name_value") + assert arg == mock_val def test_update_group_flattened_error(): @@ -898,7 +904,9 @@ async def test_update_group_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].group == common.ErrorGroup(name="name_value") + arg = args[0].group + mock_val = common.ErrorGroup(name="name_value") + assert arg == mock_val @pytest.mark.asyncio diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index b2370f9c3709..cb4ca125a88b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -658,10 +658,14 @@ def test_list_group_stats_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].time_range == error_stats_service.QueryTimeRange( + arg = args[0].project_name + mock_val = "project_name_value" + assert arg == mock_val + arg = args[0].time_range + mock_val = error_stats_service.QueryTimeRange( period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR ) + assert arg == mock_val def test_list_group_stats_flattened_error(): @@ -706,10 +710,14 @@ async def test_list_group_stats_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].time_range == error_stats_service.QueryTimeRange( + arg = args[0].project_name + mock_val = "project_name_value" + assert arg == mock_val + arg = args[0].time_range + mock_val = error_stats_service.QueryTimeRange( period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR ) + assert arg == mock_val @pytest.mark.asyncio @@ -1057,8 +1065,12 @@ def test_list_events_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].group_id == "group_id_value" + arg = args[0].project_name + mock_val = "project_name_value" + assert arg == mock_val + arg = args[0].group_id + mock_val = "group_id_value" + assert arg == mock_val def test_list_events_flattened_error(): @@ -1098,8 +1110,12 @@ async def test_list_events_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].group_id == "group_id_value" + arg = args[0].project_name + mock_val = "project_name_value" + assert arg == mock_val + arg = args[0].group_id + mock_val = "group_id_value" + assert arg == mock_val @pytest.mark.asyncio @@ -1420,7 +1436,9 @@ def test_delete_events_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" + arg = args[0].project_name + mock_val = "project_name_value" + assert arg == mock_val def test_delete_events_flattened_error(): @@ -1457,7 +1475,9 @@ async def test_delete_events_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" + arg = args[0].project_name + mock_val = "project_name_value" + assert arg == mock_val @pytest.mark.asyncio diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index f1e03e038b2b..319288863b41 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -680,10 +680,14 @@ def test_report_error_event_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].event == report_errors_service.ReportedErrorEvent( + arg = args[0].project_name + mock_val = "project_name_value" + assert arg == mock_val + arg = args[0].event + mock_val = report_errors_service.ReportedErrorEvent( event_time=timestamp_pb2.Timestamp(seconds=751) ) + assert arg == mock_val def test_report_error_event_flattened_error(): @@ -732,10 +736,14 @@ async def test_report_error_event_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0].project_name == "project_name_value" - assert args[0].event == report_errors_service.ReportedErrorEvent( + arg = args[0].project_name + mock_val = "project_name_value" + assert arg == mock_val + arg = args[0].event + mock_val = report_errors_service.ReportedErrorEvent( event_time=timestamp_pb2.Timestamp(seconds=751) ) + assert arg == mock_val @pytest.mark.asyncio From a65eb5f24772311f159f5fa4af6e6086bb9fad3c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 11 Nov 2021 13:05:02 -0500 Subject: [PATCH 291/467] chore(python): add .github/CODEOWNERS as a templated file (#203) Source-Link: https://github.com/googleapis/synthtool/commit/c5026b3217973a8db55db8ee85feee0e9a65e295 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:0e18b9475fbeb12d9ad4302283171edebb6baf2dfca1bd215ee3b34ed79d95d7 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/.github/CODEOWNERS | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 108063d4dee4..7519fa3a2289 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:4ee57a76a176ede9087c14330c625a71553cf9c72828b2c0ca12f5338171ba60 + digest: sha256:0e18b9475fbeb12d9ad4302283171edebb6baf2dfca1bd215ee3b34ed79d95d7 diff --git a/packages/google-cloud-error-reporting/.github/CODEOWNERS b/packages/google-cloud-error-reporting/.github/CODEOWNERS index a8085b5437a5..21b5b8b8c530 100644 --- a/packages/google-cloud-error-reporting/.github/CODEOWNERS +++ b/packages/google-cloud-error-reporting/.github/CODEOWNERS @@ -3,9 +3,10 @@ # # For syntax help see: # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax +# Note: This file is autogenerated. To make changes to the codeowner team, please update .repo-metadata.json. -# The @googleapis/yoshi-python is the default owner for changes in this repo -* @googleapis/api-logging @googleapis/yoshi-python +# @googleapis/yoshi-python @googleapis/api-logging are the default owners for changes in this repo +* @googleapis/yoshi-python @googleapis/api-logging - -/samples/**/*.py @googleapis/python-samples-owners \ No newline at end of file +# @googleapis/python-samples-owners @googleapis/api-logging are the default owners for samples changes +/samples/ @googleapis/python-samples-owners @googleapis/api-logging From a6dcc6c872ce0ad0c758d54e1c7ded04f5e06757 Mon Sep 17 00:00:00 2001 From: Dan Lee <71398022+dandhlee@users.noreply.github.com> Date: Thu, 18 Nov 2021 13:05:26 -0500 Subject: [PATCH 292/467] chore: update doc links from googleapis.dev to cloud.google.com (#204) --- packages/google-cloud-error-reporting/.repo-metadata.json | 2 +- packages/google-cloud-error-reporting/README.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index f7d88d7ae2af..23a69653893f 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -2,7 +2,7 @@ "name": "clouderrorreporting", "name_pretty": "Cloud Error Reporting", "product_documentation": "https://cloud.google.com/error-reporting", - "client_documentation": "https://googleapis.dev/python/clouderrorreporting/latest", + "client_documentation": "https://cloud.google.com/python/docs/reference/clouderrorreporting/latest", "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", "release_level": "beta", "language": "python", diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 2c24a9d70c88..fce2927d01b5 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -14,7 +14,7 @@ to receive email and mobile alerts on new errors. - `Product Documentation`_ .. _Error Reporting: https://cloud.google.com/error-reporting/ -.. _Client Library Documentation: https://googleapis.dev/python/clouderrorreporting/latest +.. _Client Library Documentation: https://cloud.google.com/python/docs/reference/clouderrorreporting/latest .. _Product Documentation: https://cloud.google.com/error-reporting/reference/ .. |beta| image:: https://img.shields.io/badge/support-beta-orange.svg :target: https://github.com/googleapis/google-cloud-python/blob/main/README.rst#beta-support From 08e527038ed065e223717607c9b3c227261086ee Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sun, 12 Dec 2021 12:08:32 -0500 Subject: [PATCH 293/467] chore: update python-docs-samples link to main branch (#205) Source-Link: https://github.com/googleapis/synthtool/commit/0941ef32b18aff0be34a40404f3971d9f51996e9 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:2f90537dd7df70f6b663cd654b1fa5dee483cf6a4edcfd46072b2775be8a23ec Co-authored-by: Owl Bot --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/samples/AUTHORING_GUIDE.md | 2 +- packages/google-cloud-error-reporting/samples/CONTRIBUTING.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 7519fa3a2289..0b3c8cd98f89 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:0e18b9475fbeb12d9ad4302283171edebb6baf2dfca1bd215ee3b34ed79d95d7 + digest: sha256:2f90537dd7df70f6b663cd654b1fa5dee483cf6a4edcfd46072b2775be8a23ec diff --git a/packages/google-cloud-error-reporting/samples/AUTHORING_GUIDE.md b/packages/google-cloud-error-reporting/samples/AUTHORING_GUIDE.md index 55c97b32f4c1..8249522ffc2d 100644 --- a/packages/google-cloud-error-reporting/samples/AUTHORING_GUIDE.md +++ b/packages/google-cloud-error-reporting/samples/AUTHORING_GUIDE.md @@ -1 +1 @@ -See https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md \ No newline at end of file +See https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/AUTHORING_GUIDE.md \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/samples/CONTRIBUTING.md b/packages/google-cloud-error-reporting/samples/CONTRIBUTING.md index 34c882b6f1a3..f5fe2e6baf13 100644 --- a/packages/google-cloud-error-reporting/samples/CONTRIBUTING.md +++ b/packages/google-cloud-error-reporting/samples/CONTRIBUTING.md @@ -1 +1 @@ -See https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/CONTRIBUTING.md \ No newline at end of file +See https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/CONTRIBUTING.md \ No newline at end of file From 0a0bfaaeecb3148d799c12bc03776b4320eddf79 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Tue, 28 Dec 2021 13:19:17 -0500 Subject: [PATCH 294/467] chore: update .repo-metadata.json (#209) --- packages/google-cloud-error-reporting/.repo-metadata.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index 23a69653893f..a0f2eca2cfd5 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -4,7 +4,7 @@ "product_documentation": "https://cloud.google.com/error-reporting", "client_documentation": "https://cloud.google.com/python/docs/reference/clouderrorreporting/latest", "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", - "release_level": "beta", + "release_level": "preview", "language": "python", "library_type": "GAPIC_COMBO", "repo": "googleapis/python-error-reporting", @@ -12,5 +12,6 @@ "api_id": "clouderrorreporting.googleapis.com", "requires_billing": false, "codeowner_team": "@googleapis/api-logging", - "default_version": "v1beta1" + "default_version": "v1beta1", + "api_shortname": "clouderrorreporting" } From ec461a7b492e05abca82ea4b38a3dc19dced3546 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 6 Jan 2022 17:14:22 +0000 Subject: [PATCH 295/467] chore: use python-samples-reviewers (#211) --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/.github/CODEOWNERS | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 0b3c8cd98f89..f33299ddbbab 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:2f90537dd7df70f6b663cd654b1fa5dee483cf6a4edcfd46072b2775be8a23ec + digest: sha256:899d5d7cc340fa8ef9d8ae1a8cfba362c6898584f779e156f25ee828ba824610 diff --git a/packages/google-cloud-error-reporting/.github/CODEOWNERS b/packages/google-cloud-error-reporting/.github/CODEOWNERS index 21b5b8b8c530..2a3b42055693 100644 --- a/packages/google-cloud-error-reporting/.github/CODEOWNERS +++ b/packages/google-cloud-error-reporting/.github/CODEOWNERS @@ -8,5 +8,5 @@ # @googleapis/yoshi-python @googleapis/api-logging are the default owners for changes in this repo * @googleapis/yoshi-python @googleapis/api-logging -# @googleapis/python-samples-owners @googleapis/api-logging are the default owners for samples changes -/samples/ @googleapis/python-samples-owners @googleapis/api-logging +# @googleapis/python-samples-reviewers @googleapis/api-logging are the default owners for samples changes +/samples/ @googleapis/python-samples-reviewers @googleapis/api-logging From 2c820346f3eb434b81c6e3a9ec1793b66d98b18c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 7 Jan 2022 19:36:38 -0500 Subject: [PATCH 296/467] chore: use gapic-generator-python 0.58.4 (#210) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: use gapic-generator-python 0.58.4 fix: provide appropriate mock values for message body fields committer: dovs PiperOrigin-RevId: 419025932 Source-Link: https://github.com/googleapis/googleapis/commit/73da6697f598f1ba30618924936a59f8e457ec89 Source-Link: https://github.com/googleapis/googleapis-gen/commit/46df624a54b9ed47c1a7eefb7a49413cf7b82f98 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDZkZjYyNGE1NGI5ZWQ0N2MxYTdlZWZiN2E0OTQxM2NmN2I4MmY5OCJ9 * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../error_group_service/transports/base.py | 1 - .../error_stats_service/transports/base.py | 1 - .../report_errors_service/transports/base.py | 1 - .../test_error_group_service.py | 34 ++++----- .../test_error_stats_service.py | 69 +++++++++---------- .../test_report_errors_service.py | 25 +++---- 6 files changed, 57 insertions(+), 74 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 456cfebc0478..8dd78d455934 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -102,7 +102,6 @@ def __init__( credentials, _ = google.auth.load_credentials_from_file( credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) - elif credentials is None: credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 92c950dea6b6..e9fa24ae052e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -101,7 +101,6 @@ def __init__( credentials, _ = google.auth.load_credentials_from_file( credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) - elif credentials is None: credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 9305a9b18b2f..c768ca7afdc5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -101,7 +101,6 @@ def __init__( credentials, _ = google.auth.load_credentials_from_file( credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) - elif credentials is None: credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 334fcc9944c6..0eec0e5cbd73 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -251,20 +251,20 @@ def test_error_group_service_client_client_options( # unsupported value. with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): with pytest.raises(MutualTLSChannelError): - client = client_class() + client = client_class(transport=transport_name) # 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): - client = client_class() + client = client_class(transport=transport_name) # 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(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -333,7 +333,7 @@ def test_error_group_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) if use_client_cert_env == "false": expected_client_cert_source = None @@ -428,7 +428,7 @@ def test_error_group_service_client_client_options_scopes( options = client_options.ClientOptions(scopes=["1", "2"],) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -459,7 +459,7 @@ def test_error_group_service_client_client_options_credentials_file( options = client_options.ClientOptions(credentials_file="credentials.json") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -492,9 +492,8 @@ def test_error_group_service_client_client_options_from_dict(): ) -def test_get_group( - transport: str = "grpc", request_type=error_group_service.GetGroupRequest -): +@pytest.mark.parametrize("request_type", [error_group_service.GetGroupRequest, dict,]) +def test_get_group(request_type, transport: str = "grpc"): client = ErrorGroupServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) @@ -525,10 +524,6 @@ def test_get_group( assert response.resolution_status == common.ResolutionStatus.OPEN -def test_get_group_from_dict(): - test_get_group(request_type=dict) - - def test_get_group_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. @@ -706,9 +701,10 @@ async def test_get_group_flattened_error_async(): ) -def test_update_group( - transport: str = "grpc", request_type=error_group_service.UpdateGroupRequest -): +@pytest.mark.parametrize( + "request_type", [error_group_service.UpdateGroupRequest, dict,] +) +def test_update_group(request_type, transport: str = "grpc"): client = ErrorGroupServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) @@ -739,10 +735,6 @@ def test_update_group( assert response.resolution_status == common.ResolutionStatus.OPEN -def test_update_group_from_dict(): - test_update_group(request_type=dict) - - def test_update_group_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. @@ -1437,7 +1429,7 @@ def test_parse_common_location_path(): assert expected == actual -def test_client_withDEFAULT_CLIENT_INFO(): +def test_client_with_default_client_info(): client_info = gapic_v1.client_info.ClientInfo() with mock.patch.object( diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index cb4ca125a88b..4a01312d7d6c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -254,20 +254,20 @@ def test_error_stats_service_client_client_options( # unsupported value. with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): with pytest.raises(MutualTLSChannelError): - client = client_class() + client = client_class(transport=transport_name) # 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): - client = client_class() + client = client_class(transport=transport_name) # 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(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -336,7 +336,7 @@ def test_error_stats_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) if use_client_cert_env == "false": expected_client_cert_source = None @@ -431,7 +431,7 @@ def test_error_stats_service_client_client_options_scopes( options = client_options.ClientOptions(scopes=["1", "2"],) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -462,7 +462,7 @@ def test_error_stats_service_client_client_options_credentials_file( options = client_options.ClientOptions(credentials_file="credentials.json") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -495,9 +495,10 @@ def test_error_stats_service_client_client_options_from_dict(): ) -def test_list_group_stats( - transport: str = "grpc", request_type=error_stats_service.ListGroupStatsRequest -): +@pytest.mark.parametrize( + "request_type", [error_stats_service.ListGroupStatsRequest, dict,] +) +def test_list_group_stats(request_type, transport: str = "grpc"): client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) @@ -524,10 +525,6 @@ def test_list_group_stats( assert response.next_page_token == "next_page_token_value" -def test_list_group_stats_from_dict(): - test_list_group_stats(request_type=dict) - - def test_list_group_stats_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. @@ -738,8 +735,10 @@ async def test_list_group_stats_flattened_error_async(): ) -def test_list_group_stats_pager(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials,) +def test_list_group_stats_pager(transport_name: str = "grpc"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials, transport=transport_name, + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: @@ -782,8 +781,10 @@ def test_list_group_stats_pager(): assert all(isinstance(i, error_stats_service.ErrorGroupStats) for i in results) -def test_list_group_stats_pages(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials,) +def test_list_group_stats_pages(transport_name: str = "grpc"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials, transport=transport_name, + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: @@ -906,9 +907,8 @@ async def test_list_group_stats_async_pages(): assert page_.raw_page.next_page_token == token -def test_list_events( - transport: str = "grpc", request_type=error_stats_service.ListEventsRequest -): +@pytest.mark.parametrize("request_type", [error_stats_service.ListEventsRequest, dict,]) +def test_list_events(request_type, transport: str = "grpc"): client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) @@ -935,10 +935,6 @@ def test_list_events( assert response.next_page_token == "next_page_token_value" -def test_list_events_from_dict(): - test_list_events(request_type=dict) - - def test_list_events_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. @@ -1134,8 +1130,10 @@ async def test_list_events_flattened_error_async(): ) -def test_list_events_pager(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials,) +def test_list_events_pager(transport_name: str = "grpc"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials, transport=transport_name, + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: @@ -1174,8 +1172,10 @@ def test_list_events_pager(): assert all(isinstance(i, common.ErrorEvent) for i in results) -def test_list_events_pages(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials,) +def test_list_events_pages(transport_name: str = "grpc"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials, transport=transport_name, + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: @@ -1284,9 +1284,10 @@ async def test_list_events_async_pages(): assert page_.raw_page.next_page_token == token -def test_delete_events( - transport: str = "grpc", request_type=error_stats_service.DeleteEventsRequest -): +@pytest.mark.parametrize( + "request_type", [error_stats_service.DeleteEventsRequest, dict,] +) +def test_delete_events(request_type, transport: str = "grpc"): client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) @@ -1310,10 +1311,6 @@ def test_delete_events( assert isinstance(response, error_stats_service.DeleteEventsResponse) -def test_delete_events_from_dict(): - test_delete_events(request_type=dict) - - def test_delete_events_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. @@ -2009,7 +2006,7 @@ def test_parse_common_location_path(): assert expected == actual -def test_client_withDEFAULT_CLIENT_INFO(): +def test_client_with_default_client_info(): client_info = gapic_v1.client_info.ClientInfo() with mock.patch.object( diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 319288863b41..f3a730fb70d2 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -258,20 +258,20 @@ def test_report_errors_service_client_client_options( # unsupported value. with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): with pytest.raises(MutualTLSChannelError): - client = client_class() + client = client_class(transport=transport_name) # 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): - client = client_class() + client = client_class(transport=transport_name) # 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(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -340,7 +340,7 @@ def test_report_errors_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) if use_client_cert_env == "false": expected_client_cert_source = None @@ -439,7 +439,7 @@ def test_report_errors_service_client_client_options_scopes( options = client_options.ClientOptions(scopes=["1", "2"],) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -474,7 +474,7 @@ def test_report_errors_service_client_client_options_credentials_file( options = client_options.ClientOptions(credentials_file="credentials.json") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(transport=transport_name, client_options=options) + client = client_class(client_options=options, transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -507,9 +507,10 @@ def test_report_errors_service_client_client_options_from_dict(): ) -def test_report_error_event( - transport: str = "grpc", request_type=report_errors_service.ReportErrorEventRequest -): +@pytest.mark.parametrize( + "request_type", [report_errors_service.ReportErrorEventRequest, dict,] +) +def test_report_error_event(request_type, transport: str = "grpc"): client = ReportErrorsServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) @@ -535,10 +536,6 @@ def test_report_error_event( assert isinstance(response, report_errors_service.ReportErrorEventResponse) -def test_report_error_event_from_dict(): - test_report_error_event(request_type=dict) - - def test_report_error_event_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. @@ -1256,7 +1253,7 @@ def test_parse_common_location_path(): assert expected == actual -def test_client_withDEFAULT_CLIENT_INFO(): +def test_client_with_default_client_info(): client_info = gapic_v1.client_info.ClientInfo() with mock.patch.object( From 54e610a65a60dea84506a63f08e9672e61ca9553 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 11 Jan 2022 07:34:14 -0500 Subject: [PATCH 297/467] chore(samples): Add check for tests in directory (#213) Source-Link: https://github.com/googleapis/synthtool/commit/52aef91f8d25223d9dbdb4aebd94ba8eea2101f3 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:36a95b8f494e4674dc9eee9af98961293b51b86b3649942aac800ae6c1f796d4 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 2 +- .../samples/snippets/api/noxfile.py | 70 +++++++++++-------- .../snippets/fluent_on_compute/noxfile.py | 70 +++++++++++-------- 3 files changed, 79 insertions(+), 63 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index f33299ddbbab..6b8a73b31465 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:899d5d7cc340fa8ef9d8ae1a8cfba362c6898584f779e156f25ee828ba824610 + digest: sha256:36a95b8f494e4674dc9eee9af98961293b51b86b3649942aac800ae6c1f796d4 diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 93a9122cc457..3bbef5d54f44 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -14,6 +14,7 @@ from __future__ import print_function +import glob import os from pathlib import Path import sys @@ -184,37 +185,44 @@ def blacken(session: nox.sessions.Session) -> None: def _session_tests( session: nox.sessions.Session, post_install: Callable = None ) -> None: - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) + # check for presence of tests + test_list = glob.glob("*_test.py") + glob.glob("test_*.py") + if len(test_list) == 0: + print("No tests found, skipping directory.") + else: + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install( + "-r", "requirements-test.txt", "-c", "constraints-test.txt" + ) + else: + session.install("-r", "requirements-test.txt") + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) @nox.session(python=ALL_VERSIONS) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 93a9122cc457..3bbef5d54f44 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -14,6 +14,7 @@ from __future__ import print_function +import glob import os from pathlib import Path import sys @@ -184,37 +185,44 @@ def blacken(session: nox.sessions.Session) -> None: def _session_tests( session: nox.sessions.Session, post_install: Callable = None ) -> None: - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) + # check for presence of tests + test_list = glob.glob("*_test.py") + glob.glob("test_*.py") + if len(test_list) == 0: + print("No tests found, skipping directory.") + else: + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install( + "-r", "requirements-test.txt", "-c", "constraints-test.txt" + ) + else: + session.install("-r", "requirements-test.txt") + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) @nox.session(python=ALL_VERSIONS) From 6fa211025e376298b8b629847a2958a8554b5ede Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 13 Jan 2022 20:14:24 +0000 Subject: [PATCH 298/467] build: switch to release-please for tagging (#214) --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/.github/release-please.yml | 1 + .../google-cloud-error-reporting/.github/release-trigger.yml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 packages/google-cloud-error-reporting/.github/release-trigger.yml diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 6b8a73b31465..ff5126c188d0 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:36a95b8f494e4674dc9eee9af98961293b51b86b3649942aac800ae6c1f796d4 + digest: sha256:dfa9b663b32de8b5b327e32c1da665a80de48876558dd58091d8160c60ad7355 diff --git a/packages/google-cloud-error-reporting/.github/release-please.yml b/packages/google-cloud-error-reporting/.github/release-please.yml index 4507ad0598a5..466597e5b196 100644 --- a/packages/google-cloud-error-reporting/.github/release-please.yml +++ b/packages/google-cloud-error-reporting/.github/release-please.yml @@ -1 +1,2 @@ releaseType: python +handleGHRelease: true diff --git a/packages/google-cloud-error-reporting/.github/release-trigger.yml b/packages/google-cloud-error-reporting/.github/release-trigger.yml new file mode 100644 index 000000000000..d4ca94189e16 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/release-trigger.yml @@ -0,0 +1 @@ +enabled: true From 00a6c5af9ecac89c024821ebeb411ab535a479ef Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 14 Jan 2022 11:41:34 -0500 Subject: [PATCH 299/467] chore(python): update release.sh to use keystore (#215) Source-Link: https://github.com/googleapis/synthtool/commit/69fda12e2994f0b595a397e8bb6e3e9f380524eb Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:ae600f36b6bc972b368367b6f83a1d91ec2c82a4a116b383d67d547c56fe6de3 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/.kokoro/release.sh | 2 +- .../.kokoro/release/common.cfg | 12 +++++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index ff5126c188d0..eecb84c21b27 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:dfa9b663b32de8b5b327e32c1da665a80de48876558dd58091d8160c60ad7355 + digest: sha256:ae600f36b6bc972b368367b6f83a1d91ec2c82a4a116b383d67d547c56fe6de3 diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh index 8a6d27b13d89..086e7e24ae77 100755 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -26,7 +26,7 @@ python3 -m pip install --upgrade twine wheel setuptools export PYTHONUNBUFFERED=1 # Move into the package, build the distribution and upload. -TWINE_PASSWORD=$(cat "${KOKORO_GFILE_DIR}/secret_manager/google-cloud-pypi-token") +TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google-cloud-pypi-token-keystore-1") cd github/python-error-reporting python3 setup.py sdist bdist_wheel twine upload --username __token__ --password "${TWINE_PASSWORD}" dist/* diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg index beb4fc55224a..c4f805b87a1d 100644 --- a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg @@ -23,8 +23,18 @@ env_vars: { value: "github/python-error-reporting/.kokoro/release.sh" } +# Fetch PyPI password +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "google-cloud-pypi-token-keystore-1" + } + } +} + # Tokens needed to report release status back to GitHub env_vars: { key: "SECRET_MANAGER_KEYS" - value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem,google-cloud-pypi-token" + value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" } From 537af33a0e82172afe93e77096f62e54d0146ac5 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 18 Jan 2022 19:53:49 -0500 Subject: [PATCH 300/467] chore(python): Noxfile recognizes that tests can live in a folder (#217) Source-Link: https://github.com/googleapis/synthtool/commit/4760d8dce1351d93658cb11d02a1b7ceb23ae5d7 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:f0e4b51deef56bed74d3e2359c583fc104a8d6367da3984fc5c66938db738828 Co-authored-by: Owl Bot --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../samples/snippets/api/noxfile.py | 1 + .../samples/snippets/fluent_on_compute/noxfile.py | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index eecb84c21b27..52d79c11f3ad 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,3 @@ docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:ae600f36b6bc972b368367b6f83a1d91ec2c82a4a116b383d67d547c56fe6de3 + digest: sha256:f0e4b51deef56bed74d3e2359c583fc104a8d6367da3984fc5c66938db738828 diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 3bbef5d54f44..20cdfc620138 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -187,6 +187,7 @@ def _session_tests( ) -> None: # check for presence of tests test_list = glob.glob("*_test.py") + glob.glob("test_*.py") + test_list.extend(glob.glob("tests")) if len(test_list) == 0: print("No tests found, skipping directory.") else: diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 3bbef5d54f44..20cdfc620138 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -187,6 +187,7 @@ def _session_tests( ) -> None: # check for presence of tests test_list = glob.glob("*_test.py") + glob.glob("test_*.py") + test_list.extend(glob.glob("tests")) if len(test_list) == 0: print("No tests found, skipping directory.") else: From ec55d81952a04e199e25f9a277488b8c5dfff229 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 21 Jan 2022 06:08:47 -0500 Subject: [PATCH 301/467] ci(python): run lint / unit tests / docs as GH actions (#218) Source-Link: https://github.com/googleapis/synthtool/commit/57be0cdb0b94e1669cee0ca38d790de1dfdbcd44 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:ed1f9983d5a935a89fe8085e8bb97d94e41015252c5b6c9771257cf8624367e6 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 15 ++++- .../.github/workflows/docs.yml | 38 +++++++++++++ .../.github/workflows/lint.yml | 25 ++++++++ .../.github/workflows/unittest.yml | 57 +++++++++++++++++++ 4 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 packages/google-cloud-error-reporting/.github/workflows/docs.yml create mode 100644 packages/google-cloud-error-reporting/.github/workflows/lint.yml create mode 100644 packages/google-cloud-error-reporting/.github/workflows/unittest.yml diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 52d79c11f3ad..8cb43804d999 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,3 +1,16 @@ +# Copyright 2022 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. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:f0e4b51deef56bed74d3e2359c583fc104a8d6367da3984fc5c66938db738828 + digest: sha256:ed1f9983d5a935a89fe8085e8bb97d94e41015252c5b6c9771257cf8624367e6 diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml new file mode 100644 index 000000000000..f7b8344c4500 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/workflows/docs.yml @@ -0,0 +1,38 @@ +on: + pull_request: + branches: + - main +name: docs +jobs: + docs: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: "3.10" + - name: Install nox + run: | + python -m pip install --upgrade setuptools pip wheel + python -m pip install nox + - name: Run docs + run: | + nox -s docs + docfx: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: "3.10" + - name: Install nox + run: | + python -m pip install --upgrade setuptools pip wheel + python -m pip install nox + - name: Run docfx + run: | + nox -s docfx diff --git a/packages/google-cloud-error-reporting/.github/workflows/lint.yml b/packages/google-cloud-error-reporting/.github/workflows/lint.yml new file mode 100644 index 000000000000..1e8b05c3d7ff --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/workflows/lint.yml @@ -0,0 +1,25 @@ +on: + pull_request: + branches: + - main +name: lint +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: "3.10" + - name: Install nox + run: | + python -m pip install --upgrade setuptools pip wheel + python -m pip install nox + - name: Run lint + run: | + nox -s lint + - name: Run lint_setup_py + run: | + nox -s lint_setup_py diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml new file mode 100644 index 000000000000..074ee2504ca5 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -0,0 +1,57 @@ +on: + pull_request: + branches: + - main +name: unittest +jobs: + unit: + runs-on: ubuntu-latest + strategy: + matrix: + python: ['3.6', '3.7', '3.8', '3.9', '3.10'] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + - name: Install nox + run: | + python -m pip install --upgrade setuptools pip wheel + python -m pip install nox + - name: Run unit tests + env: + COVERAGE_FILE: .coverage-${{ matrix.python }} + run: | + nox -s unit-${{ matrix.python }} + - name: Upload coverage results + uses: actions/upload-artifact@v2 + with: + name: coverage-artifacts + path: .coverage-${{ matrix.python }} + + cover: + runs-on: ubuntu-latest + needs: + - unit + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: "3.10" + - name: Install coverage + run: | + python -m pip install --upgrade setuptools pip wheel + python -m pip install coverage + - name: Download coverage results + uses: actions/download-artifact@v2 + with: + name: coverage-artifacts + path: .coverage-results/ + - name: Report coverage results + run: | + coverage combine .coverage-results/.coverage* + coverage report --show-missing --fail-under=100 From 41e55085be7f7b2ad58d6c36b10f358361989833 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 22 Jan 2022 09:53:51 -0500 Subject: [PATCH 302/467] chore(python): set coverage level to 100% (#219) * chore(python): use cov_level in unittest gh action Source-Link: https://github.com/googleapis/synthtool/commit/e5aaa84b1dda1829c54d4696827817f133ed9780 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:d22cd2ddce65fdac6986f115563faf2fc81482b09dfbea83ac2808c92ecfdff0 * set coverage to 100% Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/noxfile.py | 2 +- packages/google-cloud-error-reporting/owlbot.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 8cb43804d999..39ad3cecd516 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:ed1f9983d5a935a89fe8085e8bb97d94e41015252c5b6c9771257cf8624367e6 + digest: sha256:d22cd2ddce65fdac6986f115563faf2fc81482b09dfbea83ac2808c92ecfdff0 diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index f041f1f5a4ae..2a2001c49998 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -175,7 +175,7 @@ def cover(session): test runs (not system test runs), and then erases coverage data. """ session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=98") + session.run("coverage", "report", "--show-missing", "--fail-under=100") session.run("coverage", "erase") diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 2f22cc62c9ce..a2f17a6695d1 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -32,7 +32,7 @@ templated_files = common.py_library( samples=True, # set to True only if there are samples microgenerator=True, - cov_level=98, + cov_level=100, ) s.move(templated_files, excludes=[".coveragerc"]) # microgenerator has a good .coveragerc file From 62fe73bddfcc6962a5586cc14efb5489b26dd7f1 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Mon, 24 Jan 2022 13:09:09 -0700 Subject: [PATCH 303/467] chore: make samples 3.6 check optional (#220) --- .../google-cloud-error-reporting/.github/sync-repo-settings.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml index 3e98ae70f964..37438d33d4fa 100644 --- a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml +++ b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml @@ -10,6 +10,5 @@ branchProtectionRules: - 'Kokoro' - 'cla/google' - 'Samples - Lint' - - 'Samples - Python 3.6' - 'Samples - Python 3.7' - 'Samples - Python 3.8' From da068ddfa1f8cb65441274c29943e94ba55acec6 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 25 Jan 2022 09:16:37 -0500 Subject: [PATCH 304/467] feat: add api key support (#221) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: upgrade gapic-generator-java, gax-java and gapic-generator-python PiperOrigin-RevId: 423842556 Source-Link: https://github.com/googleapis/googleapis/commit/a616ca08f4b1416abbac7bc5dd6d61c791756a81 Source-Link: https://github.com/googleapis/googleapis-gen/commit/29b938c58c1e51d019f2ee539d55dc0a3c86a905 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMjliOTM4YzU4YzFlNTFkMDE5ZjJlZTUzOWQ1NWRjMGEzYzg2YTkwNSJ9 * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../error_group_service/async_client.py | 38 ++++- .../services/error_group_service/client.py | 127 +++++++++++------ .../error_stats_service/async_client.py | 38 ++++- .../services/error_stats_service/client.py | 127 +++++++++++------ .../report_errors_service/async_client.py | 38 ++++- .../services/report_errors_service/client.py | 127 +++++++++++------ .../test_error_group_service.py | 131 ++++++++++++++++++ .../test_error_stats_service.py | 131 ++++++++++++++++++ .../test_report_errors_service.py | 131 ++++++++++++++++++ 9 files changed, 756 insertions(+), 132 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index b3397de35ebc..ceb774453895 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import functools import re -from typing import Dict, Sequence, Tuple, Type, Union +from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core.client_options import ClientOptions @@ -108,6 +108,42 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): 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 variabel 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 ErrorGroupServiceClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + @property def transport(self) -> ErrorGroupServiceTransport: """Returns the transport used by the client instance. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 82fe3e55adcd..65515404a110 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -231,6 +231,73 @@ def parse_common_location_path(path: str) -> Dict[str, str]: m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) return m.groupdict() if m else {} + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.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 variabel 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. + """ + 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 + def __init__( self, *, @@ -281,57 +348,22 @@ def __init__( if client_options is None: client_options = client_options_lib.ClientOptions() - # Create SSL credentials for mutual TLS if needed. - if os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") not in ( - "true", - "false", - ): - raise ValueError( - "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" - ) - use_client_cert = ( - os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true" + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( + client_options ) - client_cert_source_func = None - is_mtls = False - if use_client_cert: - if client_options.client_cert_source: - is_mtls = True - client_cert_source_func = client_options.client_cert_source - else: - is_mtls = mtls.has_default_client_cert_source() - if is_mtls: - client_cert_source_func = mtls.default_client_cert_source() - else: - client_cert_source_func = None - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - else: - use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_mtls_env == "never": - api_endpoint = self.DEFAULT_ENDPOINT - elif use_mtls_env == "always": - api_endpoint = self.DEFAULT_MTLS_ENDPOINT - elif use_mtls_env == "auto": - if is_mtls: - api_endpoint = self.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = self.DEFAULT_ENDPOINT - else: - raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted " - "values: never, auto, always" - ) + api_key_value = getattr(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. if isinstance(transport, ErrorGroupServiceTransport): # transport is a ErrorGroupServiceTransport instance. - if credentials or client_options.credentials_file: + if credentials or client_options.credentials_file or api_key_value: raise ValueError( "When providing a transport instance, " "provide its credentials directly." @@ -343,6 +375,15 @@ def __init__( ) self._transport = transport else: + 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 = type(self).get_transport_class(transport) self._transport = Transport( credentials=credentials, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index c5f5053ecad2..335f8eea9765 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import functools import re -from typing import Dict, Sequence, Tuple, Type, Union +from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core.client_options import ClientOptions @@ -111,6 +111,42 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): 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 variabel 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 ErrorStatsServiceClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + @property def transport(self) -> ErrorStatsServiceTransport: """Returns the transport used by the client instance. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 7a3a3051254d..7e3aac0398b1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -234,6 +234,73 @@ def parse_common_location_path(path: str) -> Dict[str, str]: m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) return m.groupdict() if m else {} + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.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 variabel 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. + """ + 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 + def __init__( self, *, @@ -284,57 +351,22 @@ def __init__( if client_options is None: client_options = client_options_lib.ClientOptions() - # Create SSL credentials for mutual TLS if needed. - if os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") not in ( - "true", - "false", - ): - raise ValueError( - "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" - ) - use_client_cert = ( - os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true" + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( + client_options ) - client_cert_source_func = None - is_mtls = False - if use_client_cert: - if client_options.client_cert_source: - is_mtls = True - client_cert_source_func = client_options.client_cert_source - else: - is_mtls = mtls.has_default_client_cert_source() - if is_mtls: - client_cert_source_func = mtls.default_client_cert_source() - else: - client_cert_source_func = None - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - else: - use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_mtls_env == "never": - api_endpoint = self.DEFAULT_ENDPOINT - elif use_mtls_env == "always": - api_endpoint = self.DEFAULT_MTLS_ENDPOINT - elif use_mtls_env == "auto": - if is_mtls: - api_endpoint = self.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = self.DEFAULT_ENDPOINT - else: - raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted " - "values: never, auto, always" - ) + api_key_value = getattr(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. if isinstance(transport, ErrorStatsServiceTransport): # transport is a ErrorStatsServiceTransport instance. - if credentials or client_options.credentials_file: + if credentials or client_options.credentials_file or api_key_value: raise ValueError( "When providing a transport instance, " "provide its credentials directly." @@ -346,6 +378,15 @@ def __init__( ) self._transport = transport else: + 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 = type(self).get_transport_class(transport) self._transport = Transport( credentials=credentials, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 276829733557..878c024991fc 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import functools import re -from typing import Dict, Sequence, Tuple, Type, Union +from typing import Dict, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core.client_options import ClientOptions @@ -103,6 +103,42 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): 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 variabel 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 ReportErrorsServiceClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + @property def transport(self) -> ReportErrorsServiceTransport: """Returns the transport used by the client instance. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 45dec2cac0bb..732824c2075e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -219,6 +219,73 @@ def parse_common_location_path(path: str) -> Dict[str, str]: m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) return m.groupdict() if m else {} + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.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 variabel 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. + """ + 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 + def __init__( self, *, @@ -269,57 +336,22 @@ def __init__( if client_options is None: client_options = client_options_lib.ClientOptions() - # Create SSL credentials for mutual TLS if needed. - if os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") not in ( - "true", - "false", - ): - raise ValueError( - "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" - ) - use_client_cert = ( - os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true" + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( + client_options ) - client_cert_source_func = None - is_mtls = False - if use_client_cert: - if client_options.client_cert_source: - is_mtls = True - client_cert_source_func = client_options.client_cert_source - else: - is_mtls = mtls.has_default_client_cert_source() - if is_mtls: - client_cert_source_func = mtls.default_client_cert_source() - else: - client_cert_source_func = None - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - else: - use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_mtls_env == "never": - api_endpoint = self.DEFAULT_ENDPOINT - elif use_mtls_env == "always": - api_endpoint = self.DEFAULT_MTLS_ENDPOINT - elif use_mtls_env == "auto": - if is_mtls: - api_endpoint = self.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = self.DEFAULT_ENDPOINT - else: - raise MutualTLSChannelError( - "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted " - "values: never, auto, always" - ) + api_key_value = getattr(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. if isinstance(transport, ReportErrorsServiceTransport): # transport is a ReportErrorsServiceTransport instance. - if credentials or client_options.credentials_file: + if credentials or client_options.credentials_file or api_key_value: raise ValueError( "When providing a transport instance, " "provide its credentials directly." @@ -331,6 +363,15 @@ def __init__( ) self._transport = transport else: + 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 = type(self).get_transport_class(transport) self._transport = Transport( credentials=credentials, diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 0eec0e5cbd73..b3a9f9c8dd3c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -410,6 +410,87 @@ def test_error_group_service_client_mtls_env_auto( ) +@pytest.mark.parametrize( + "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient] +) +@mock.patch.object( + ErrorGroupServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorGroupServiceClient), +) +@mock.patch.object( + ErrorGroupServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorGroupServiceAsyncClient), +) +def test_error_group_service_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 + + @pytest.mark.parametrize( "client_class,transport_class,transport_name", [ @@ -936,6 +1017,23 @@ def test_credentials_transport_error(): transport=transport, ) + # It is an error to provide an api_key and a transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = ErrorGroupServiceClient(client_options=options, transport=transport,) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = ErrorGroupServiceClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + # It is an error to provide scopes and a transport instance. transport = transports.ErrorGroupServiceGrpcTransport( credentials=ga_credentials.AnonymousCredentials(), @@ -1494,3 +1592,36 @@ def test_client_ctx(): with client: pass close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + (ErrorGroupServiceClient, transports.ErrorGroupServiceGrpcTransport), + ( + ErrorGroupServiceAsyncClient, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + ), + ], +) +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, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 4a01312d7d6c..02e8eccae330 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -413,6 +413,87 @@ def test_error_stats_service_client_mtls_env_auto( ) +@pytest.mark.parametrize( + "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient] +) +@mock.patch.object( + ErrorStatsServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorStatsServiceClient), +) +@mock.patch.object( + ErrorStatsServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ErrorStatsServiceAsyncClient), +) +def test_error_stats_service_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 + + @pytest.mark.parametrize( "client_class,transport_class,transport_name", [ @@ -1512,6 +1593,23 @@ def test_credentials_transport_error(): transport=transport, ) + # It is an error to provide an api_key and a transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = ErrorStatsServiceClient(client_options=options, transport=transport,) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = ErrorStatsServiceClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + # It is an error to provide scopes and a transport instance. transport = transports.ErrorStatsServiceGrpcTransport( credentials=ga_credentials.AnonymousCredentials(), @@ -2071,3 +2169,36 @@ def test_client_ctx(): with client: pass close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + (ErrorStatsServiceClient, transports.ErrorStatsServiceGrpcTransport), + ( + ErrorStatsServiceAsyncClient, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + ), + ], +) +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, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index f3a730fb70d2..9cade81e1d34 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -417,6 +417,87 @@ def test_report_errors_service_client_mtls_env_auto( ) +@pytest.mark.parametrize( + "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient] +) +@mock.patch.object( + ReportErrorsServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ReportErrorsServiceClient), +) +@mock.patch.object( + ReportErrorsServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(ReportErrorsServiceAsyncClient), +) +def test_report_errors_service_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 + + @pytest.mark.parametrize( "client_class,transport_class,transport_name", [ @@ -781,6 +862,23 @@ def test_credentials_transport_error(): transport=transport, ) + # It is an error to provide an api_key and a transport instance. + transport = transports.ReportErrorsServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = ReportErrorsServiceClient(client_options=options, transport=transport,) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = ReportErrorsServiceClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + # It is an error to provide scopes and a transport instance. transport = transports.ReportErrorsServiceGrpcTransport( credentials=ga_credentials.AnonymousCredentials(), @@ -1318,3 +1416,36 @@ def test_client_ctx(): with client: pass close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + (ReportErrorsServiceClient, transports.ReportErrorsServiceGrpcTransport), + ( + ReportErrorsServiceAsyncClient, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + ), + ], +) +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, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + ) From 1685a8e65f06585b1803bec56688bec40c1a1ca7 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 3 Feb 2022 20:12:39 +0000 Subject: [PATCH 305/467] chore: use gapic-generator-python 0.62.1 (#225) - [ ] Regenerate this pull request now. fix: resolve DuplicateCredentialArgs error when using credentials_file committer: parthea PiperOrigin-RevId: 425964861 Source-Link: https://github.com/googleapis/googleapis/commit/84b1a5a4f6fb2d04905be58e586b8a7a4310a8cf Source-Link: https://github.com/googleapis/googleapis-gen/commit/4fb761bbd8506ac156f49bac5f18306aa8eb3aa8 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNGZiNzYxYmJkODUwNmFjMTU2ZjQ5YmFjNWYxODMwNmFhOGViM2FhOCJ9 --- ...ools-clouderrorreporting-v1beta1-py.tar.gz | 0 .../error_group_service/async_client.py | 4 +- .../services/error_group_service/client.py | 4 +- .../error_group_service/transports/grpc.py | 5 +- .../transports/grpc_asyncio.py | 5 +- .../error_stats_service/async_client.py | 6 +- .../services/error_stats_service/client.py | 6 +- .../error_stats_service/transports/grpc.py | 5 +- .../transports/grpc_asyncio.py | 5 +- .../report_errors_service/async_client.py | 2 +- .../services/report_errors_service/client.py | 2 +- .../report_errors_service/transports/grpc.py | 5 +- .../transports/grpc_asyncio.py | 5 +- .../errorreporting_v1beta1/types/common.py | 4 +- .../test_error_group_service.py | 79 ++++++++++++++++++- .../test_error_stats_service.py | 79 ++++++++++++++++++- .../test_report_errors_service.py | 73 ++++++++++++++++- 17 files changed, 261 insertions(+), 28 deletions(-) create mode 100644 packages/google-cloud-error-reporting/devtools-clouderrorreporting-v1beta1-py.tar.gz diff --git a/packages/google-cloud-error-reporting/devtools-clouderrorreporting-v1beta1-py.tar.gz b/packages/google-cloud-error-reporting/devtools-clouderrorreporting-v1beta1-py.tar.gz new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index ceb774453895..0316878f2355 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -243,7 +243,7 @@ async def get_group( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([group_name]) if request is not None and has_flattened_params: @@ -317,7 +317,7 @@ async def update_group( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([group]) if request is not None and has_flattened_params: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 65515404a110..4b507ecf20d1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -435,7 +435,7 @@ def get_group( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([group_name]) if request is not None and has_flattened_params: @@ -509,7 +509,7 @@ def update_group( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([group]) if request is not None and has_flattened_params: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index e09ae3675f75..39041c5123f9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -159,8 +159,11 @@ def __init__( if not self._grpc_channel: self._grpc_channel = type(self).create_channel( self._host, + # use the credentials which are saved credentials=self._credentials, - credentials_file=credentials_file, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, quota_project_id=quota_project_id, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 4a8bea19b4c3..27d3f3204c18 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -204,8 +204,11 @@ def __init__( if not self._grpc_channel: self._grpc_channel = type(self).create_channel( self._host, + # use the credentials which are saved credentials=self._credentials, - credentials_file=credentials_file, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, quota_project_id=quota_project_id, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 335f8eea9765..c244ee88e11c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -265,7 +265,7 @@ async def list_group_stats( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, time_range]) if request is not None and has_flattened_params: @@ -361,7 +361,7 @@ async def list_events( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, group_id]) if request is not None and has_flattened_params: @@ -445,7 +445,7 @@ async def delete_events( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name]) if request is not None and has_flattened_params: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 7e3aac0398b1..5e90fc42003a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -457,7 +457,7 @@ def list_group_stats( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, time_range]) if request is not None and has_flattened_params: @@ -553,7 +553,7 @@ def list_events( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, group_id]) if request is not None and has_flattened_params: @@ -637,7 +637,7 @@ def delete_events( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name]) if request is not None and has_flattened_params: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 0d2a4f6fa229..2f1ac2c3a1ed 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -159,8 +159,11 @@ def __init__( if not self._grpc_channel: self._grpc_channel = type(self).create_channel( self._host, + # use the credentials which are saved credentials=self._credentials, - credentials_file=credentials_file, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, quota_project_id=quota_project_id, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index bd61a2253cb9..15f8345dc0c5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -204,8 +204,11 @@ def __init__( if not self._grpc_channel: self._grpc_channel = type(self).create_channel( self._host, + # use the credentials which are saved credentials=self._credentials, - credentials_file=credentials_file, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, quota_project_id=quota_project_id, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 878c024991fc..c71761aac83e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -263,7 +263,7 @@ async def report_error_event( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, event]) if request is not None and has_flattened_params: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 732824c2075e..69ad09c208b6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -447,7 +447,7 @@ def report_error_event( """ # Create or coerce a protobuf request object. - # Sanity check: If we got a request object, we should *not* have + # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, event]) if request is not None and has_flattened_params: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 4f693e0e0711..b48f0ad7d5c4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -158,8 +158,11 @@ def __init__( if not self._grpc_channel: self._grpc_channel = type(self).create_channel( self._host, + # use the credentials which are saved credentials=self._credentials, - credentials_file=credentials_file, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, quota_project_id=quota_project_id, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 68ee60fa3ace..067a50e6bbb9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -203,8 +203,11 @@ def __init__( if not self._grpc_channel: self._grpc_channel = type(self).create_channel( self._host, + # use the credentials which are saved credentials=self._credentials, - credentials_file=credentials_file, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, scopes=self._scopes, ssl_credentials=self._ssl_channel_credentials, quota_project_id=quota_project_id, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 40bf0c2bb365..b52622dc81ea 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -48,8 +48,8 @@ class ErrorGroup(proto.Message): Attributes: name (str): The group resource name. - Example: projects/my- - project-123/groups/CNSgkpnppqKCUw + Example: + projects/my-project-123/groups/CNSgkpnppqKCUw group_id (str): Group IDs are unique for a given project. If the same kind of error occurs in different diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index b3a9f9c8dd3c..ec24167876d7 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -523,21 +523,28 @@ def test_error_group_service_client_client_options_scopes( @pytest.mark.parametrize( - "client_class,transport_class,transport_name", + "client_class,transport_class,transport_name,grpc_helpers", [ - (ErrorGroupServiceClient, transports.ErrorGroupServiceGrpcTransport, "grpc"), + ( + ErrorGroupServiceClient, + transports.ErrorGroupServiceGrpcTransport, + "grpc", + grpc_helpers, + ), ( ErrorGroupServiceAsyncClient, transports.ErrorGroupServiceGrpcAsyncIOTransport, "grpc_asyncio", + grpc_helpers_async, ), ], ) def test_error_group_service_client_client_options_credentials_file( - client_class, transport_class, transport_name + 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) @@ -573,6 +580,72 @@ def test_error_group_service_client_client_options_from_dict(): ) +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + ErrorGroupServiceClient, + transports.ErrorGroupServiceGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + ErrorGroupServiceAsyncClient, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_error_group_service_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, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + ) + + # 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( + "clouderrorreporting.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="clouderrorreporting.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + @pytest.mark.parametrize("request_type", [error_group_service.GetGroupRequest, dict,]) def test_get_group(request_type, transport: str = "grpc"): client = ErrorGroupServiceClient( diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 02e8eccae330..7a211b85281e 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -526,21 +526,28 @@ def test_error_stats_service_client_client_options_scopes( @pytest.mark.parametrize( - "client_class,transport_class,transport_name", + "client_class,transport_class,transport_name,grpc_helpers", [ - (ErrorStatsServiceClient, transports.ErrorStatsServiceGrpcTransport, "grpc"), + ( + ErrorStatsServiceClient, + transports.ErrorStatsServiceGrpcTransport, + "grpc", + grpc_helpers, + ), ( ErrorStatsServiceAsyncClient, transports.ErrorStatsServiceGrpcAsyncIOTransport, "grpc_asyncio", + grpc_helpers_async, ), ], ) def test_error_stats_service_client_client_options_credentials_file( - client_class, transport_class, transport_name + 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) @@ -576,6 +583,72 @@ def test_error_stats_service_client_client_options_from_dict(): ) +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + ErrorStatsServiceClient, + transports.ErrorStatsServiceGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + ErrorStatsServiceAsyncClient, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_error_stats_service_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, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + ) + + # 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( + "clouderrorreporting.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="clouderrorreporting.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + @pytest.mark.parametrize( "request_type", [error_stats_service.ListGroupStatsRequest, dict,] ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 9cade81e1d34..c7470c281b9c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -534,25 +534,28 @@ def test_report_errors_service_client_client_options_scopes( @pytest.mark.parametrize( - "client_class,transport_class,transport_name", + "client_class,transport_class,transport_name,grpc_helpers", [ ( ReportErrorsServiceClient, transports.ReportErrorsServiceGrpcTransport, "grpc", + grpc_helpers, ), ( ReportErrorsServiceAsyncClient, transports.ReportErrorsServiceGrpcAsyncIOTransport, "grpc_asyncio", + grpc_helpers_async, ), ], ) def test_report_errors_service_client_client_options_credentials_file( - client_class, transport_class, transport_name + 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) @@ -588,6 +591,72 @@ def test_report_errors_service_client_client_options_from_dict(): ) +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + ReportErrorsServiceAsyncClient, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_report_errors_service_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, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + ) + + # 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( + "clouderrorreporting.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="clouderrorreporting.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + @pytest.mark.parametrize( "request_type", [report_errors_service.ReportErrorEventRequest, dict,] ) From 230eba6bf55f64fb5e32e367941c84bf8599712e Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 7 Feb 2022 17:21:23 +0100 Subject: [PATCH 306/467] chore(deps): update all dependencies (#224) --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- packages/google-cloud-error-reporting/setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index 927094516e65..4a46ff600804 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==6.2.5 +pytest==7.0.0 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index 5d836a5c5184..ee9a22731364 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==6.2.5 +pytest==7.0.0 mock==4.0.3 diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index cde620271480..7b5eb693df1f 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" dependencies = [ - "google-cloud-logging>=1.14.0, <3.0.0dev", + "google-cloud-logging>=1.14.0, <3.0.1", # NOTE: Maintainers, please do not require google-api-core>=2.x.x # Until this issue is closed # https://github.com/googleapis/google-cloud-python/issues/10566 From 9e5a27e15919c17939b32ce8700ecdeaef51daf3 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 11 Feb 2022 14:31:32 -0700 Subject: [PATCH 307/467] chore: use gapic-generator-python 0.63.2 (#228) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: use gapic-generator-python 0.63.2 docs: add generated snippets PiperOrigin-RevId: 427792504 Source-Link: https://github.com/googleapis/googleapis/commit/55b9e1e0b3106c850d13958352bc0751147b6b15 Source-Link: https://github.com/googleapis/googleapis-gen/commit/bf4e86b753f42cb0edb1fd51fbe840d7da0a1cde Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYmY0ZTg2Yjc1M2Y0MmNiMGVkYjFmZDUxZmJlODQwZDdkYTBhMWNkZSJ9 * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../error_group_service/async_client.py | 38 ++ .../services/error_group_service/client.py | 40 ++ .../error_stats_service/async_client.py | 60 ++ .../services/error_stats_service/client.py | 63 ++ .../report_errors_service/async_client.py | 24 + .../services/report_errors_service/client.py | 25 + ...ta1_error_group_service_get_group_async.py | 45 ++ ...eta1_error_group_service_get_group_sync.py | 45 ++ ..._error_group_service_update_group_async.py | 44 ++ ...1_error_group_service_update_group_sync.py | 44 ++ ...error_stats_service_delete_events_async.py | 45 ++ ..._error_stats_service_delete_events_sync.py | 45 ++ ...1_error_stats_service_list_events_async.py | 47 ++ ...a1_error_stats_service_list_events_sync.py | 47 ++ ...or_stats_service_list_group_stats_async.py | 46 ++ ...ror_stats_service_list_group_stats_sync.py | 46 ++ ...errors_service_report_error_event_async.py | 49 ++ ..._errors_service_report_error_event_sync.py | 49 ++ ...ippet_metadata_errorreporting_v1beta1.json | 538 ++++++++++++++++++ 19 files changed, 1340 insertions(+) create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py create mode 100644 packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 0316878f2355..f48fb94b9fa2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -215,6 +215,25 @@ async def get_group( ) -> common.ErrorGroup: r"""Get the specified group. + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_get_group(): + # Create a client + client = errorreporting_v1beta1.ErrorGroupServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.GetGroupRequest( + group_name="group_name_value", + ) + + # Make the request + response = client.get_group(request=request) + + # Handle the response + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.GetGroupRequest, dict]): The request object. A request to return an individual @@ -293,6 +312,25 @@ async def update_group( r"""Replace the data for the specified group. Fails if the group does not exist. + + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_update_group(): + # Create a client + client = errorreporting_v1beta1.ErrorGroupServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.UpdateGroupRequest( + ) + + # Make the request + response = client.update_group(request=request) + + # Handle the response + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest, dict]): The request object. A request to replace the existing diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 4b507ecf20d1..b7e40d17a330 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -407,6 +407,26 @@ def get_group( ) -> common.ErrorGroup: r"""Get the specified group. + + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_get_group(): + # Create a client + client = errorreporting_v1beta1.ErrorGroupServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.GetGroupRequest( + group_name="group_name_value", + ) + + # Make the request + response = client.get_group(request=request) + + # Handle the response + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.GetGroupRequest, dict]): The request object. A request to return an individual @@ -485,6 +505,26 @@ def update_group( r"""Replace the data for the specified group. Fails if the group does not exist. + + + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_update_group(): + # Create a client + client = errorreporting_v1beta1.ErrorGroupServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.UpdateGroupRequest( + ) + + # Make the request + response = client.update_group(request=request) + + # Handle the response + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest, dict]): The request object. A request to replace the existing diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index c244ee88e11c..1a772da0be71 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -219,6 +219,26 @@ async def list_group_stats( ) -> pagers.ListGroupStatsAsyncPager: r"""Lists the specified groups. + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_list_group_stats(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.ListGroupStatsRequest( + project_name="project_name_value", + ) + + # Make the request + page_result = client.list_group_stats(request=request) + + # Handle the response + for response in page_result: + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest, dict]): The request object. Specifies a set of `ErrorGroupStats` @@ -323,6 +343,27 @@ async def list_events( ) -> pagers.ListEventsAsyncPager: r"""Lists the specified events. + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_list_events(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.ListEventsRequest( + project_name="project_name_value", + group_id="group_id_value", + ) + + # Make the request + page_result = client.list_events(request=request) + + # Handle the response + for response in page_result: + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.ListEventsRequest, dict]): The request object. Specifies a set of error events to @@ -418,6 +459,25 @@ async def delete_events( ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_delete_events(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.DeleteEventsRequest( + project_name="project_name_value", + ) + + # Make the request + response = client.delete_events(request=request) + + # Handle the response + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest, dict]): The request object. Deletes all events in the project. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 5e90fc42003a..9e568baacb59 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -411,6 +411,27 @@ def list_group_stats( ) -> pagers.ListGroupStatsPager: r"""Lists the specified groups. + + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_list_group_stats(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.ListGroupStatsRequest( + project_name="project_name_value", + ) + + # Make the request + page_result = client.list_group_stats(request=request) + + # Handle the response + for response in page_result: + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest, dict]): The request object. Specifies a set of `ErrorGroupStats` @@ -515,6 +536,28 @@ def list_events( ) -> pagers.ListEventsPager: r"""Lists the specified events. + + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_list_events(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.ListEventsRequest( + project_name="project_name_value", + group_id="group_id_value", + ) + + # Make the request + page_result = client.list_events(request=request) + + # Handle the response + for response in page_result: + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.ListEventsRequest, dict]): The request object. Specifies a set of error events to @@ -610,6 +653,26 @@ def delete_events( ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. + + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_delete_events(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.DeleteEventsRequest( + project_name="project_name_value", + ) + + # Make the request + response = client.delete_events(request=request) + + # Handle the response + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest, dict]): The request object. Deletes all events in the project. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index c71761aac83e..476f0bcaf27a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -227,6 +227,30 @@ async def report_error_event( For more information, see `Using Error Reporting with regionalized logs `__. + + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_report_error_event(): + # Create a client + client = errorreporting_v1beta1.ReportErrorsServiceClient() + + # Initialize request argument(s) + event = errorreporting_v1beta1.ReportedErrorEvent() + event.message = "message_value" + + request = errorreporting_v1beta1.ReportErrorEventRequest( + project_name="project_name_value", + event=event, + ) + + # Make the request + response = client.report_error_event(request=request) + + # Handle the response + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest, dict]): The request object. A request for reporting an diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 69ad09c208b6..d56fb81e694c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -411,6 +411,31 @@ def report_error_event( For more information, see `Using Error Reporting with regionalized logs `__. + + + .. code-block:: + + from google.cloud import errorreporting_v1beta1 + + def sample_report_error_event(): + # Create a client + client = errorreporting_v1beta1.ReportErrorsServiceClient() + + # Initialize request argument(s) + event = errorreporting_v1beta1.ReportedErrorEvent() + event.message = "message_value" + + request = errorreporting_v1beta1.ReportErrorEventRequest( + project_name="project_name_value", + event=event, + ) + + # Make the request + response = client.report_error_event(request=request) + + # Handle the response + print(response) + Args: request (Union[google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest, dict]): The request object. A request for reporting an diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py new file mode 100644 index 000000000000..7aed1fc53b07 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetGroup +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_async] +from google.cloud import errorreporting_v1beta1 + + +async def sample_get_group(): + # Create a client + client = errorreporting_v1beta1.ErrorGroupServiceAsyncClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.GetGroupRequest( + group_name="group_name_value", + ) + + # Make the request + response = await client.get_group(request=request) + + # Handle the response + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py new file mode 100644 index 000000000000..17e1247a1df3 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetGroup +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_sync] +from google.cloud import errorreporting_v1beta1 + + +def sample_get_group(): + # Create a client + client = errorreporting_v1beta1.ErrorGroupServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.GetGroupRequest( + group_name="group_name_value", + ) + + # Make the request + response = client.get_group(request=request) + + # Handle the response + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py new file mode 100644 index 000000000000..0eb5803b7d1f --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateGroup +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_async] +from google.cloud import errorreporting_v1beta1 + + +async def sample_update_group(): + # Create a client + client = errorreporting_v1beta1.ErrorGroupServiceAsyncClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.UpdateGroupRequest( + ) + + # Make the request + response = await client.update_group(request=request) + + # Handle the response + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py new file mode 100644 index 000000000000..871a3cb6182a --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateGroup +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_sync] +from google.cloud import errorreporting_v1beta1 + + +def sample_update_group(): + # Create a client + client = errorreporting_v1beta1.ErrorGroupServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.UpdateGroupRequest( + ) + + # Make the request + response = client.update_group(request=request) + + # Handle the response + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py new file mode 100644 index 000000000000..5185f59d2d1d --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteEvents +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_async] +from google.cloud import errorreporting_v1beta1 + + +async def sample_delete_events(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceAsyncClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.DeleteEventsRequest( + project_name="project_name_value", + ) + + # Make the request + response = await client.delete_events(request=request) + + # Handle the response + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py new file mode 100644 index 000000000000..a1a44a5777eb --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteEvents +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_sync] +from google.cloud import errorreporting_v1beta1 + + +def sample_delete_events(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.DeleteEventsRequest( + project_name="project_name_value", + ) + + # Make the request + response = client.delete_events(request=request) + + # Handle the response + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py new file mode 100644 index 000000000000..7380c1be4771 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListEvents +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_async] +from google.cloud import errorreporting_v1beta1 + + +async def sample_list_events(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceAsyncClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.ListEventsRequest( + project_name="project_name_value", + group_id="group_id_value", + ) + + # Make the request + page_result = client.list_events(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py new file mode 100644 index 000000000000..a7f136c294c4 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListEvents +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_sync] +from google.cloud import errorreporting_v1beta1 + + +def sample_list_events(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.ListEventsRequest( + project_name="project_name_value", + group_id="group_id_value", + ) + + # Make the request + page_result = client.list_events(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py new file mode 100644 index 000000000000..1346e97e0082 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListGroupStats +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_async] +from google.cloud import errorreporting_v1beta1 + + +async def sample_list_group_stats(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceAsyncClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.ListGroupStatsRequest( + project_name="project_name_value", + ) + + # Make the request + page_result = client.list_group_stats(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py new file mode 100644 index 000000000000..ea344e81e708 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListGroupStats +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_sync] +from google.cloud import errorreporting_v1beta1 + + +def sample_list_group_stats(): + # Create a client + client = errorreporting_v1beta1.ErrorStatsServiceClient() + + # Initialize request argument(s) + request = errorreporting_v1beta1.ListGroupStatsRequest( + project_name="project_name_value", + ) + + # Make the request + page_result = client.list_group_stats(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py new file mode 100644 index 000000000000..5f5bede469b5 --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ReportErrorEvent +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_async] +from google.cloud import errorreporting_v1beta1 + + +async def sample_report_error_event(): + # Create a client + client = errorreporting_v1beta1.ReportErrorsServiceAsyncClient() + + # Initialize request argument(s) + event = errorreporting_v1beta1.ReportedErrorEvent() + event.message = "message_value" + + request = errorreporting_v1beta1.ReportErrorEventRequest( + project_name="project_name_value", + event=event, + ) + + # Make the request + response = await client.report_error_event(request=request) + + # Handle the response + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py new file mode 100644 index 000000000000..2e9d53b590de --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ReportErrorEvent +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-errorreporting + + +# [START clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_sync] +from google.cloud import errorreporting_v1beta1 + + +def sample_report_error_event(): + # Create a client + client = errorreporting_v1beta1.ReportErrorsServiceClient() + + # Initialize request argument(s) + event = errorreporting_v1beta1.ReportedErrorEvent() + event.message = "message_value" + + request = errorreporting_v1beta1.ReportErrorEventRequest( + project_name="project_name_value", + event=event, + ) + + # Make the request + response = client.report_error_event(request=request) + + # Handle the response + print(response) + +# [END clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json new file mode 100644 index 000000000000..73ee6cc8131d --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json @@ -0,0 +1,538 @@ +{ + "snippets": [ + { + "clientMethod": { + "async": true, + "method": { + "service": { + "shortName": "ErrorGroupService" + }, + "shortName": "GetGroup" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_async", + "segments": [ + { + "end": 44, + "start": 27, + "type": "FULL" + }, + { + "end": 44, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 38, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 41, + "start": 39, + "type": "REQUEST_EXECUTION" + }, + { + "end": 45, + "start": 42, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "method": { + "service": { + "shortName": "ErrorGroupService" + }, + "shortName": "GetGroup" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_sync", + "segments": [ + { + "end": 44, + "start": 27, + "type": "FULL" + }, + { + "end": 44, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 38, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 41, + "start": 39, + "type": "REQUEST_EXECUTION" + }, + { + "end": 45, + "start": 42, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "async": true, + "method": { + "service": { + "shortName": "ErrorGroupService" + }, + "shortName": "UpdateGroup" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_async", + "segments": [ + { + "end": 43, + "start": 27, + "type": "FULL" + }, + { + "end": 43, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 37, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 40, + "start": 38, + "type": "REQUEST_EXECUTION" + }, + { + "end": 44, + "start": 41, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "method": { + "service": { + "shortName": "ErrorGroupService" + }, + "shortName": "UpdateGroup" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_sync", + "segments": [ + { + "end": 43, + "start": 27, + "type": "FULL" + }, + { + "end": 43, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 37, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 40, + "start": 38, + "type": "REQUEST_EXECUTION" + }, + { + "end": 44, + "start": 41, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "async": true, + "method": { + "service": { + "shortName": "ErrorStatsService" + }, + "shortName": "DeleteEvents" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_async", + "segments": [ + { + "end": 44, + "start": 27, + "type": "FULL" + }, + { + "end": 44, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 38, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 41, + "start": 39, + "type": "REQUEST_EXECUTION" + }, + { + "end": 45, + "start": 42, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "method": { + "service": { + "shortName": "ErrorStatsService" + }, + "shortName": "DeleteEvents" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_sync", + "segments": [ + { + "end": 44, + "start": 27, + "type": "FULL" + }, + { + "end": 44, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 38, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 41, + "start": 39, + "type": "REQUEST_EXECUTION" + }, + { + "end": 45, + "start": 42, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "async": true, + "method": { + "service": { + "shortName": "ErrorStatsService" + }, + "shortName": "ListEvents" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_async", + "segments": [ + { + "end": 46, + "start": 27, + "type": "FULL" + }, + { + "end": 46, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 39, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 42, + "start": 40, + "type": "REQUEST_EXECUTION" + }, + { + "end": 47, + "start": 43, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "method": { + "service": { + "shortName": "ErrorStatsService" + }, + "shortName": "ListEvents" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_sync", + "segments": [ + { + "end": 46, + "start": 27, + "type": "FULL" + }, + { + "end": 46, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 39, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 42, + "start": 40, + "type": "REQUEST_EXECUTION" + }, + { + "end": 47, + "start": 43, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "async": true, + "method": { + "service": { + "shortName": "ErrorStatsService" + }, + "shortName": "ListGroupStats" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_async", + "segments": [ + { + "end": 45, + "start": 27, + "type": "FULL" + }, + { + "end": 45, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 38, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 41, + "start": 39, + "type": "REQUEST_EXECUTION" + }, + { + "end": 46, + "start": 42, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "method": { + "service": { + "shortName": "ErrorStatsService" + }, + "shortName": "ListGroupStats" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_sync", + "segments": [ + { + "end": 45, + "start": 27, + "type": "FULL" + }, + { + "end": 45, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 38, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 41, + "start": 39, + "type": "REQUEST_EXECUTION" + }, + { + "end": 46, + "start": 42, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "async": true, + "method": { + "service": { + "shortName": "ReportErrorsService" + }, + "shortName": "ReportErrorEvent" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_async", + "segments": [ + { + "end": 48, + "start": 27, + "type": "FULL" + }, + { + "end": 48, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 42, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 45, + "start": 43, + "type": "REQUEST_EXECUTION" + }, + { + "end": 49, + "start": 46, + "type": "RESPONSE_HANDLING" + } + ] + }, + { + "clientMethod": { + "method": { + "service": { + "shortName": "ReportErrorsService" + }, + "shortName": "ReportErrorEvent" + } + }, + "file": "clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py", + "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_sync", + "segments": [ + { + "end": 48, + "start": 27, + "type": "FULL" + }, + { + "end": 48, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 42, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 45, + "start": 43, + "type": "REQUEST_EXECUTION" + }, + { + "end": 49, + "start": 46, + "type": "RESPONSE_HANDLING" + } + ] + } + ] +} From e03d23c5f91c2e2170f40fa89b83806747477e73 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 14 Feb 2022 17:08:55 +0100 Subject: [PATCH 308/467] chore(deps): update dependency pytest to v7.0.1 (#229) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [pytest](https://docs.pytest.org/en/latest/) ([source](https://togithub.com/pytest-dev/pytest), [changelog](https://docs.pytest.org/en/stable/changelog.html)) | `==7.0.0` -> `==7.0.1` | [![age](https://badges.renovateapi.com/packages/pypi/pytest/7.0.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/pytest/7.0.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/pytest/7.0.1/compatibility-slim/7.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/pytest/7.0.1/confidence-slim/7.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
pytest-dev/pytest ### [`v7.0.1`](https://togithub.com/pytest-dev/pytest/releases/7.0.1) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/7.0.0...7.0.1) # pytest 7.0.1 (2022-02-11) ## Bug Fixes - [#​9608](https://togithub.com/pytest-dev/pytest/issues/9608): Fix invalid importing of `importlib.readers` in Python 3.9. - [#​9610](https://togithub.com/pytest-dev/pytest/issues/9610): Restore \[UnitTestFunction.obj]{.title-ref} to return unbound rather than bound method. Fixes a crash during a failed teardown in unittest TestCases with non-default \[\__init\_\_]{.title-ref}. Regressed in pytest 7.0.0. - [#​9636](https://togithub.com/pytest-dev/pytest/issues/9636): The `pythonpath` plugin was renamed to `python_path`. This avoids a conflict with the `pytest-pythonpath` plugin. - [#​9642](https://togithub.com/pytest-dev/pytest/issues/9642): Fix running tests by id with `::` in the parametrize portion. - [#​9643](https://togithub.com/pytest-dev/pytest/issues/9643): Delay issuing a `~pytest.PytestWarning`{.interpreted-text role="class"} about diamond inheritance involving `~pytest.Item`{.interpreted-text role="class"} and `~pytest.Collector`{.interpreted-text role="class"} so it can be filtered using `standard warning filters `{.interpreted-text role="ref"}.
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-error-reporting). --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index 4a46ff600804..c2845bffbe89 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==7.0.0 +pytest==7.0.1 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index ee9a22731364..4bd417eba1fa 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==7.0.0 +pytest==7.0.1 mock==4.0.3 From ca7e70817fba8c7a4014e6d50b61311bf4461b3c Mon Sep 17 00:00:00 2001 From: Avi Mimoun <36456709+av1m@users.noreply.github.com> Date: Wed, 16 Feb 2022 19:52:02 +0100 Subject: [PATCH 309/467] chore: Update minimum requirements for google-cloud-logging --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 7b5eb693df1f..9f353674139f 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -33,7 +33,7 @@ # NOTE: Maintainers, please do not require google-api-core>=2.x.x # Until this issue is closed # https://github.com/googleapis/google-cloud-python/issues/10566 - "google-api-core[grpc] >= 1.28.0, <3.0.0dev", + "google-api-core[grpc] >= 1.28.0, <4.0.0dev", "proto-plus >= 1.4.0", ] extras = {} From 63aa683214a6f73efe8c0dc2fd5fe8829dac17c7 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 17 Feb 2022 13:06:48 -0800 Subject: [PATCH 310/467] chore(main): release 1.5.0 (#222) --- packages/google-cloud-error-reporting/CHANGELOG.md | 12 ++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 906f667dfa11..452b7e43fd89 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,18 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.5.0](https://github.com/googleapis/python-error-reporting/compare/v1.4.1...v1.5.0) (2022-02-16) + + +### Features + +* add api key support ([#221](https://github.com/googleapis/python-error-reporting/issues/221)) ([b207f2c](https://github.com/googleapis/python-error-reporting/commit/b207f2cec4f5f3196e775ed35cd429f34f9c0bd1)) + + +### Bug Fixes + +* resolve DuplicateCredentialArgs error when using credentials_file ([f0afcae](https://github.com/googleapis/python-error-reporting/commit/f0afcae54c834872d1e40d1f5c948c1e0c299b85)) + ### [1.4.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.4.0...v1.4.1) (2021-11-01) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 9f353674139f..7922050a196d 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.4.1" +version = "1.5.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From ee408ecc94946b8e602d600a6cfa0e0560af05b4 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 23 Feb 2022 16:49:45 +0100 Subject: [PATCH 311/467] chore(deps): update dependency google-cloud-error-reporting to v1.5.0 (#231) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 881f1e6c7657..774b773e01bf 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.4.1 +google-cloud-error-reporting==1.5.0 From f4a68c0241c2f2c8ea250d12a98ac57e54438c24 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 25 Feb 2022 10:25:01 -0700 Subject: [PATCH 312/467] chore: use gapic-generator-python 0.63.4 (#232) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: use gapic-generator-python 0.63.4 chore: fix snippet region tag format chore: fix docstring code block formatting PiperOrigin-RevId: 430730865 Source-Link: https://github.com/googleapis/googleapis/commit/ea5800229f73f94fd7204915a86ed09dcddf429a Source-Link: https://github.com/googleapis/googleapis-gen/commit/ca893ff8af25fc7fe001de1405a517d80446ecca Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiY2E4OTNmZjhhZjI1ZmM3ZmUwMDFkZTE0MDVhNTE3ZDgwNDQ2ZWNjYSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: delete duplicates Co-authored-by: Owl Bot Co-authored-by: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> --- .../error_group_service/async_client.py | 4 +- .../services/error_group_service/client.py | 6 +-- .../error_stats_service/async_client.py | 6 +-- .../services/error_stats_service/client.py | 9 ++-- .../report_errors_service/async_client.py | 2 +- .../services/report_errors_service/client.py | 3 +- ...ed_error_group_service_get_group_async.py} | 4 +- ...ted_error_group_service_get_group_sync.py} | 4 +- ...error_group_service_update_group_async.py} | 4 +- ..._error_group_service_update_group_sync.py} | 4 +- ...rror_stats_service_delete_events_async.py} | 4 +- ...error_stats_service_delete_events_sync.py} | 4 +- ..._error_stats_service_list_events_async.py} | 4 +- ...d_error_stats_service_list_events_sync.py} | 4 +- ...r_stats_service_list_group_stats_async.py} | 4 +- ...or_stats_service_list_group_stats_sync.py} | 4 +- ...rrors_service_report_error_event_async.py} | 4 +- ...errors_service_report_error_event_sync.py} | 4 +- ...ippet_metadata_errorreporting_v1beta1.json | 48 +++++++++---------- 19 files changed, 60 insertions(+), 66 deletions(-) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py => clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py => clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py => clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py => clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py => clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py => clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py => clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py} (88%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py => clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py} (88%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py => clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py => clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py => clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py} (87%) rename packages/google-cloud-error-reporting/samples/generated_samples/{clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py => clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py} (87%) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index f48fb94b9fa2..bdf996195627 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -215,7 +215,7 @@ async def get_group( ) -> common.ErrorGroup: r"""Get the specified group. - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 @@ -313,7 +313,7 @@ async def update_group( Fails if the group does not exist. - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index b7e40d17a330..3518b9efe086 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -407,8 +407,7 @@ def get_group( ) -> common.ErrorGroup: r"""Get the specified group. - - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 @@ -506,8 +505,7 @@ def update_group( Fails if the group does not exist. - - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 1a772da0be71..1abe9b631e7a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -219,7 +219,7 @@ async def list_group_stats( ) -> pagers.ListGroupStatsAsyncPager: r"""Lists the specified groups. - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 @@ -343,7 +343,7 @@ async def list_events( ) -> pagers.ListEventsAsyncPager: r"""Lists the specified events. - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 @@ -459,7 +459,7 @@ async def delete_events( ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 9e568baacb59..eb9a44206f07 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -411,8 +411,7 @@ def list_group_stats( ) -> pagers.ListGroupStatsPager: r"""Lists the specified groups. - - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 @@ -536,8 +535,7 @@ def list_events( ) -> pagers.ListEventsPager: r"""Lists the specified events. - - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 @@ -653,8 +651,7 @@ def delete_events( ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. - - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 476f0bcaf27a..5421a54b2ae2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -228,7 +228,7 @@ async def report_error_event( regionalized logs `__. - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index d56fb81e694c..1b8f4b079734 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -412,8 +412,7 @@ def report_error_event( regionalized logs `__. - - .. code-block:: + .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py index 7aed1fc53b07..f6346d39a798 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_async] +# [START clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_async] from google.cloud import errorreporting_v1beta1 @@ -42,4 +42,4 @@ async def sample_get_group(): # Handle the response print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_async] +# [END clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py index 17e1247a1df3..ad13327246b1 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_sync] +# [START clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_sync] from google.cloud import errorreporting_v1beta1 @@ -42,4 +42,4 @@ def sample_get_group(): # Handle the response print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_sync] +# [END clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py index 0eb5803b7d1f..c88e36118798 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_async] +# [START clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_async] from google.cloud import errorreporting_v1beta1 @@ -41,4 +41,4 @@ async def sample_update_group(): # Handle the response print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_async] +# [END clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py index 871a3cb6182a..e94dcb585d56 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_sync] +# [START clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_sync] from google.cloud import errorreporting_v1beta1 @@ -41,4 +41,4 @@ def sample_update_group(): # Handle the response print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_sync] +# [END clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py index 5185f59d2d1d..73028394a75c 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_async] +# [START clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_async] from google.cloud import errorreporting_v1beta1 @@ -42,4 +42,4 @@ async def sample_delete_events(): # Handle the response print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_async] +# [END clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py index a1a44a5777eb..fbab9b16c028 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_sync] +# [START clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_sync] from google.cloud import errorreporting_v1beta1 @@ -42,4 +42,4 @@ def sample_delete_events(): # Handle the response print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_sync] +# [END clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py similarity index 88% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py index 7380c1be4771..7b1ed09480cb 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_async] +# [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_async] from google.cloud import errorreporting_v1beta1 @@ -44,4 +44,4 @@ async def sample_list_events(): async for response in page_result: print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_async] +# [END clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py similarity index 88% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py index a7f136c294c4..3e6c9dcb3ab5 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_sync] +# [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_sync] from google.cloud import errorreporting_v1beta1 @@ -44,4 +44,4 @@ def sample_list_events(): for response in page_result: print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_sync] +# [END clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py index 1346e97e0082..10e25bcd7c7b 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_async] +# [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_async] from google.cloud import errorreporting_v1beta1 @@ -43,4 +43,4 @@ async def sample_list_group_stats(): async for response in page_result: print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_async] +# [END clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py index ea344e81e708..7a83cb4a09c9 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_sync] +# [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_sync] from google.cloud import errorreporting_v1beta1 @@ -43,4 +43,4 @@ def sample_list_group_stats(): for response in page_result: print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_sync] +# [END clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py index 5f5bede469b5..e426857c6f56 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_async] +# [START clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_async] from google.cloud import errorreporting_v1beta1 @@ -46,4 +46,4 @@ async def sample_report_error_event(): # Handle the response print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_async] +# [END clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py similarity index 87% rename from packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py rename to packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py index 2e9d53b590de..62423aa63e31 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py @@ -23,7 +23,7 @@ # python3 -m pip install google-cloud-errorreporting -# [START clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_sync] +# [START clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_sync] from google.cloud import errorreporting_v1beta1 @@ -46,4 +46,4 @@ def sample_report_error_event(): # Handle the response print(response) -# [END clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_sync] +# [END clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json index 73ee6cc8131d..b493c226aaa4 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json @@ -10,8 +10,8 @@ "shortName": "GetGroup" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_async.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_async", + "file": "clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_async", "segments": [ { "end": 44, @@ -54,8 +54,8 @@ "shortName": "GetGroup" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_get_group_sync.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_GetGroup_sync", + "file": "clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_sync", "segments": [ { "end": 44, @@ -99,8 +99,8 @@ "shortName": "UpdateGroup" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_async.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_async", + "file": "clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_async", "segments": [ { "end": 43, @@ -143,8 +143,8 @@ "shortName": "UpdateGroup" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_group_service_update_group_sync.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorGroupService_UpdateGroup_sync", + "file": "clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_sync", "segments": [ { "end": 43, @@ -188,8 +188,8 @@ "shortName": "DeleteEvents" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_async.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_async", + "file": "clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_async", "segments": [ { "end": 44, @@ -232,8 +232,8 @@ "shortName": "DeleteEvents" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_delete_events_sync.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_DeleteEvents_sync", + "file": "clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_sync", "segments": [ { "end": 44, @@ -277,8 +277,8 @@ "shortName": "ListEvents" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_async.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_async", + "file": "clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_async", "segments": [ { "end": 46, @@ -321,8 +321,8 @@ "shortName": "ListEvents" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_events_sync.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListEvents_sync", + "file": "clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_sync", "segments": [ { "end": 46, @@ -366,8 +366,8 @@ "shortName": "ListGroupStats" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_async.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_async", + "file": "clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_async", "segments": [ { "end": 45, @@ -410,8 +410,8 @@ "shortName": "ListGroupStats" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_error_stats_service_list_group_stats_sync.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ErrorStatsService_ListGroupStats_sync", + "file": "clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_sync", "segments": [ { "end": 45, @@ -455,8 +455,8 @@ "shortName": "ReportErrorEvent" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_async.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_async", + "file": "clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_async", "segments": [ { "end": 48, @@ -499,8 +499,8 @@ "shortName": "ReportErrorEvent" } }, - "file": "clouderrorreporting_generated_errorreporting_v1beta1_report_errors_service_report_error_event_sync.py", - "regionTag": "clouderrorreporting_generated_errorreporting_v1beta1_ReportErrorsService_ReportErrorEvent_sync", + "file": "clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py", + "regionTag": "clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_sync", "segments": [ { "end": 48, From 831f29890afb0176603ee89d596ef5c13f238ebe Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 26 Feb 2022 05:23:34 -0500 Subject: [PATCH 313/467] chore: update copyright year to 2022 (#233) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: update copyright year to 2022 PiperOrigin-RevId: 431037888 Source-Link: https://github.com/googleapis/googleapis/commit/b3397f5febbf21dfc69b875ddabaf76bee765058 Source-Link: https://github.com/googleapis/googleapis-gen/commit/510b54e1cdefd53173984df16645081308fe897e Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNTEwYjU0ZTFjZGVmZDUzMTczOTg0ZGYxNjY0NTA4MTMwOGZlODk3ZSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../google/cloud/errorreporting_v1beta1/__init__.py | 2 +- .../google/cloud/errorreporting_v1beta1/services/__init__.py | 2 +- .../services/error_group_service/__init__.py | 2 +- .../services/error_group_service/async_client.py | 2 +- .../services/error_group_service/client.py | 2 +- .../services/error_group_service/transports/__init__.py | 2 +- .../services/error_group_service/transports/base.py | 2 +- .../services/error_group_service/transports/grpc.py | 2 +- .../services/error_group_service/transports/grpc_asyncio.py | 2 +- .../services/error_stats_service/__init__.py | 2 +- .../services/error_stats_service/async_client.py | 2 +- .../services/error_stats_service/client.py | 2 +- .../services/error_stats_service/pagers.py | 2 +- .../services/error_stats_service/transports/__init__.py | 2 +- .../services/error_stats_service/transports/base.py | 2 +- .../services/error_stats_service/transports/grpc.py | 2 +- .../services/error_stats_service/transports/grpc_asyncio.py | 2 +- .../services/report_errors_service/__init__.py | 2 +- .../services/report_errors_service/async_client.py | 2 +- .../services/report_errors_service/client.py | 2 +- .../services/report_errors_service/transports/__init__.py | 2 +- .../services/report_errors_service/transports/base.py | 2 +- .../services/report_errors_service/transports/grpc.py | 2 +- .../services/report_errors_service/transports/grpc_asyncio.py | 2 +- .../google/cloud/errorreporting_v1beta1/types/__init__.py | 2 +- .../google/cloud/errorreporting_v1beta1/types/common.py | 2 +- .../cloud/errorreporting_v1beta1/types/error_group_service.py | 2 +- .../cloud/errorreporting_v1beta1/types/error_stats_service.py | 2 +- .../cloud/errorreporting_v1beta1/types/report_errors_service.py | 2 +- ...ing_v1beta1_generated_error_group_service_get_group_async.py | 2 +- ...ting_v1beta1_generated_error_group_service_get_group_sync.py | 2 +- ..._v1beta1_generated_error_group_service_update_group_async.py | 2 +- ...g_v1beta1_generated_error_group_service_update_group_sync.py | 2 +- ...v1beta1_generated_error_stats_service_delete_events_async.py | 2 +- ..._v1beta1_generated_error_stats_service_delete_events_sync.py | 2 +- ...g_v1beta1_generated_error_stats_service_list_events_async.py | 2 +- ...ng_v1beta1_generated_error_stats_service_list_events_sync.py | 2 +- ...eta1_generated_error_stats_service_list_group_stats_async.py | 2 +- ...beta1_generated_error_stats_service_list_group_stats_sync.py | 2 +- ..._generated_report_errors_service_report_error_event_async.py | 2 +- ...1_generated_report_errors_service_report_error_event_sync.py | 2 +- .../scripts/fixup_errorreporting_v1beta1_keywords.py | 2 +- packages/google-cloud-error-reporting/tests/__init__.py | 2 +- packages/google-cloud-error-reporting/tests/unit/__init__.py | 2 +- .../google-cloud-error-reporting/tests/unit/gapic/__init__.py | 2 +- .../tests/unit/gapic/errorreporting_v1beta1/__init__.py | 2 +- .../gapic/errorreporting_v1beta1/test_error_group_service.py | 2 +- .../gapic/errorreporting_v1beta1/test_error_stats_service.py | 2 +- .../gapic/errorreporting_v1beta1/test_report_errors_service.py | 2 +- 49 files changed, 49 insertions(+), 49 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 47c1a698b064..04baaaa438a0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py index 4de65971c238..e8e1c3845db5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py index 87f6a56f5d80..62563e794b58 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index bdf996195627..af06be3b54cf 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 3518b9efe086..0984b2891e4e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py index 6e4ee23e9281..873035d946b5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 8dd78d455934..51d3632894d0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 39041c5123f9..695f89fd9971 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 27d3f3204c18..718fc657decd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py index 24c6107676fa..b402e01ab5a0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 1abe9b631e7a..a31c03356d80 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index eb9a44206f07..fd14ada013a3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index a54601fb728a..9fe297c6479c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py index 8a9987b999db..484e788e701b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index e9fa24ae052e..02ebb1976741 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 2f1ac2c3a1ed..fb4b77463741 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 15f8345dc0c5..cce5c95c9f37 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py index dc391175ea5e..5efbd9374670 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 5421a54b2ae2..c5bf86aeb4dc 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 1b8f4b079734..cce7eb3cb5b0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py index 9c967744b89c..b96eb34594ae 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index c768ca7afdc5..c251f4a81dab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index b48f0ad7d5c4..2f225db70cb7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 067a50e6bbb9..ae6174049206 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py index cca266b672b5..fed4105bd1af 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index b52622dc81ea..94a29554a81f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index 5fdcf7664577..b6890500e0ba 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index fa09546c11f7..aaa570167be1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index 44276bdfa44b..17f7de99fb04 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py index f6346d39a798..7a6e06fc8322 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py index ad13327246b1..9c8ac42b73d6 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py index c88e36118798..4581e274b910 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py index e94dcb585d56..67cb2a40b366 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py index 73028394a75c..e8f462be2f93 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py index fbab9b16c028..75da055a8320 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py index 7b1ed09480cb..8e3bd85fedbe 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py index 3e6c9dcb3ab5..9bd122f5fbcb 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py index 10e25bcd7c7b..d6176174bdeb 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py index 7a83cb4a09c9..02053bde10d2 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py index e426857c6f56..333e710b517d 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py index 62423aa63e31..4ffd5a4f6cf4 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py index 765a093f84fe..db88785ca667 100644 --- a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py +++ b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py @@ -1,6 +1,6 @@ #! /usr/bin/env python3 # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/__init__.py b/packages/google-cloud-error-reporting/tests/__init__.py index 4de65971c238..e8e1c3845db5 100644 --- a/packages/google-cloud-error-reporting/tests/__init__.py +++ b/packages/google-cloud-error-reporting/tests/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/__init__.py b/packages/google-cloud-error-reporting/tests/unit/__init__.py index 4de65971c238..e8e1c3845db5 100644 --- a/packages/google-cloud-error-reporting/tests/unit/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py index 4de65971c238..e8e1c3845db5 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py index 4de65971c238..e8e1c3845db5 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index ec24167876d7..09d3652a27a4 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 7a211b85281e..83df90db852f 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index c7470c281b9c..61f9ed9dedba 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From edad1f59c3947089065fac1bf824872b9b0894aa Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 11:50:16 -0500 Subject: [PATCH 314/467] chore(deps): update actions/setup-python action to v3 (#236) Source-Link: https://github.com/googleapis/synthtool/commit/571ee2c3b26182429eddcf115122ee545d7d3787 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:09af371bb7d8ebbaef620bfc76c0a3a42da96d75f4821409b54f3466d4ebbd3c Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/.github/workflows/docs.yml | 4 ++-- .../google-cloud-error-reporting/.github/workflows/lint.yml | 2 +- .../.github/workflows/unittest.yml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 39ad3cecd516..2a654fafc0d6 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:d22cd2ddce65fdac6986f115563faf2fc81482b09dfbea83ac2808c92ecfdff0 + digest: sha256:09af371bb7d8ebbaef620bfc76c0a3a42da96d75f4821409b54f3466d4ebbd3c diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml index f7b8344c4500..cca4e98bf236 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/docs.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/docs.yml @@ -10,7 +10,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: "3.10" - name: Install nox @@ -26,7 +26,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: "3.10" - name: Install nox diff --git a/packages/google-cloud-error-reporting/.github/workflows/lint.yml b/packages/google-cloud-error-reporting/.github/workflows/lint.yml index 1e8b05c3d7ff..f687324ef2eb 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/lint.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/lint.yml @@ -10,7 +10,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: "3.10" - name: Install nox diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index 074ee2504ca5..d3003e09e0c6 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -13,7 +13,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ matrix.python }} - name: Install nox @@ -39,7 +39,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: "3.10" - name: Install coverage From aae6bc868c071fd45af890679350891ca5fece24 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 3 Mar 2022 00:34:27 +0000 Subject: [PATCH 315/467] chore(deps): update actions/checkout action to v3 (#238) Source-Link: https://github.com/googleapis/synthtool/commit/ca879097772aeec2cbb971c3cea8ecc81522b68a Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:6162c384d685c5fe22521d3f37f6fc732bf99a085f6d47b677dbcae97fc21392 --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/.github/workflows/docs.yml | 4 ++-- .../google-cloud-error-reporting/.github/workflows/lint.yml | 2 +- .../.github/workflows/unittest.yml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 2a654fafc0d6..480226ac08a9 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:09af371bb7d8ebbaef620bfc76c0a3a42da96d75f4821409b54f3466d4ebbd3c + digest: sha256:6162c384d685c5fe22521d3f37f6fc732bf99a085f6d47b677dbcae97fc21392 diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml index cca4e98bf236..b46d7305d8cf 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/docs.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/docs.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v3 with: @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v3 with: diff --git a/packages/google-cloud-error-reporting/.github/workflows/lint.yml b/packages/google-cloud-error-reporting/.github/workflows/lint.yml index f687324ef2eb..f512a4960beb 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/lint.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/lint.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v3 with: diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index d3003e09e0c6..e87fe5b7b79a 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -11,7 +11,7 @@ jobs: python: ['3.6', '3.7', '3.8', '3.9', '3.10'] steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v3 with: @@ -37,7 +37,7 @@ jobs: - unit steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v3 with: From 6d661d75a191296ccb0adea0ca663fd0dc462636 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 4 Mar 2022 12:04:09 -0500 Subject: [PATCH 316/467] chore: Adding support for pytest-xdist and pytest-parallel (#242) Source-Link: https://github.com/googleapis/synthtool/commit/82f5cb283efffe96e1b6cd634738e0e7de2cd90a Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:5d8da01438ece4021d135433f2cf3227aa39ef0eaccc941d62aa35e6902832ae Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 2 +- .../samples/snippets/api/noxfile.py | 80 +++++++++++-------- .../snippets/fluent_on_compute/noxfile.py | 80 +++++++++++-------- 3 files changed, 93 insertions(+), 69 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 480226ac08a9..7e08e05a380c 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:6162c384d685c5fe22521d3f37f6fc732bf99a085f6d47b677dbcae97fc21392 + digest: sha256:5d8da01438ece4021d135433f2cf3227aa39ef0eaccc941d62aa35e6902832ae diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 20cdfc620138..4c808af73ea2 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -188,42 +188,54 @@ def _session_tests( # check for presence of tests test_list = glob.glob("*_test.py") + glob.glob("test_*.py") test_list.extend(glob.glob("tests")) + if len(test_list) == 0: print("No tests found, skipping directory.") - else: - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install( - "-r", "requirements-test.txt", "-c", "constraints-test.txt" - ) - else: - session.install("-r", "requirements-test.txt") - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install( + "-r", "requirements-test.txt", "-c", "constraints-test.txt" + ) + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(['--workers', 'auto', '--tests-per-worker', 'auto']) + elif "pytest-xdist" in packages: + concurrent_args.extend(['-n', 'auto']) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) @nox.session(python=ALL_VERSIONS) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 20cdfc620138..4c808af73ea2 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -188,42 +188,54 @@ def _session_tests( # check for presence of tests test_list = glob.glob("*_test.py") + glob.glob("test_*.py") test_list.extend(glob.glob("tests")) + if len(test_list) == 0: print("No tests found, skipping directory.") - else: - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install( - "-r", "requirements-test.txt", "-c", "constraints-test.txt" - ) - else: - session.install("-r", "requirements-test.txt") - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install( + "-r", "requirements-test.txt", "-c", "constraints-test.txt" + ) + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(['--workers', 'auto', '--tests-per-worker', 'auto']) + elif "pytest-xdist" in packages: + concurrent_args.extend(['-n', 'auto']) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) @nox.session(python=ALL_VERSIONS) From 669facf1e5427df68be2b55c1df2c33acb7ef8e9 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Fri, 4 Mar 2022 12:49:24 -0500 Subject: [PATCH 317/467] fix(deps): require google-api-core>=1.31.5, >=2.3.2 (#241) fix(deps): require proto-plus>=1.15.0 --- packages/google-cloud-error-reporting/setup.py | 4 ++-- .../google-cloud-error-reporting/testing/constraints-3.6.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 7922050a196d..7ec683e8558d 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -33,8 +33,8 @@ # NOTE: Maintainers, please do not require google-api-core>=2.x.x # Until this issue is closed # https://github.com/googleapis/google-cloud-python/issues/10566 - "google-api-core[grpc] >= 1.28.0, <4.0.0dev", - "proto-plus >= 1.4.0", + "google-api-core[grpc] >= 1.31.5, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0", + "proto-plus >= 1.15.0", ] extras = {} diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt index e35753aee341..b81c6b5d6478 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt @@ -6,5 +6,5 @@ # e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", # Then this file should have foo==1.14.0 google-cloud-logging==1.14.0 -google-api-core==1.28.0 -proto-plus==1.4.0 +google-api-core==1.31.5 +proto-plus==1.15.0 From e28a49f24199ae103d6fb2bb6f5a1e4cbdaea220 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 5 Mar 2022 00:22:32 +0000 Subject: [PATCH 318/467] chore(deps): update actions/download-artifact action to v3 (#245) Source-Link: https://github.com/googleapis/synthtool/commit/38e11ad1104dcc1e63b52691ddf2fe4015d06955 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:4e1991042fe54b991db9ca17c8fb386e61b22fe4d1472a568bf0fcac85dcf5d3 --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../.github/workflows/unittest.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 7e08e05a380c..44c78f7cc12d 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:5d8da01438ece4021d135433f2cf3227aa39ef0eaccc941d62aa35e6902832ae + digest: sha256:4e1991042fe54b991db9ca17c8fb386e61b22fe4d1472a568bf0fcac85dcf5d3 diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index e87fe5b7b79a..e5be6edbd54d 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -26,7 +26,7 @@ jobs: run: | nox -s unit-${{ matrix.python }} - name: Upload coverage results - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: coverage-artifacts path: .coverage-${{ matrix.python }} @@ -47,7 +47,7 @@ jobs: python -m pip install --upgrade setuptools pip wheel python -m pip install coverage - name: Download coverage results - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: coverage-artifacts path: .coverage-results/ From a679f77bf76c0a1bb9f2fa2ec3d34da06cc84da2 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Mon, 7 Mar 2022 16:20:46 -0500 Subject: [PATCH 319/467] fix(deps): allow google-cloud-logging <4.0.0dev (#244) --- packages/google-cloud-error-reporting/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 7ec683e8558d..0404fbfdc5c7 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -29,7 +29,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 4 - Beta" dependencies = [ - "google-cloud-logging>=1.14.0, <3.0.1", + "google-cloud-logging>=1.14.0, <4.0.0dev", # NOTE: Maintainers, please do not require google-api-core>=2.x.x # Until this issue is closed # https://github.com/googleapis/google-cloud-python/issues/10566 From f760512d282ed7d87666d89a794b27dba7c8fea8 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 8 Mar 2022 11:50:33 -0500 Subject: [PATCH 320/467] chore(main): release 1.5.1 (#243) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 9 +++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 452b7e43fd89..a935a4aa944a 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,15 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +### [1.5.1](https://github.com/googleapis/python-error-reporting/compare/v1.5.0...v1.5.1) (2022-03-07) + + +### Bug Fixes + +* **deps:** allow google-cloud-logging <4.0.0dev ([#244](https://github.com/googleapis/python-error-reporting/issues/244)) ([b2f83cf](https://github.com/googleapis/python-error-reporting/commit/b2f83cfb02792d4dfd1d881a07460d90e0ad4eb0)) +* **deps:** require google-api-core>=1.31.5, >=2.3.2 ([#241](https://github.com/googleapis/python-error-reporting/issues/241)) ([af66168](https://github.com/googleapis/python-error-reporting/commit/af66168f3926d63161070bbd3b6c6880155cf07d)) +* **deps:** require proto-plus>=1.15.0 ([af66168](https://github.com/googleapis/python-error-reporting/commit/af66168f3926d63161070bbd3b6c6880155cf07d)) + ## [1.5.0](https://github.com/googleapis/python-error-reporting/compare/v1.4.1...v1.5.0) (2022-02-16) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 0404fbfdc5c7..9dc541c2e63c 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.5.0" +version = "1.5.1" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 6af441881aa8e3edcdcffbf01cb1a3e99690dbd1 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 8 Mar 2022 21:02:36 +0100 Subject: [PATCH 321/467] chore(deps): update dependency google-cloud-error-reporting to v1.5.1 (#246) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 774b773e01bf..285dc70c6fd5 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.5.0 +google-cloud-error-reporting==1.5.1 From 924a28b3c7267128314d689861d2f20813d87310 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Sun, 13 Mar 2022 21:24:10 +0100 Subject: [PATCH 322/467] chore(deps): update dependency pytest to v7.1.0 (#247) --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index c2845bffbe89..824a8a7a0ce6 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==7.0.1 +pytest==7.1.0 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index 4bd417eba1fa..968b0186d2d4 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==7.0.1 +pytest==7.1.0 mock==4.0.3 From 6dbd6cc19bded4ae3ffc8eef658c041474709f1c Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 17 Mar 2022 22:56:15 +0100 Subject: [PATCH 323/467] chore(deps): update dependency pytest to v7.1.1 (#249) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [pytest](https://docs.pytest.org/en/latest/) ([source](https://togithub.com/pytest-dev/pytest), [changelog](https://docs.pytest.org/en/stable/changelog.html)) | `==7.1.0` -> `==7.1.1` | [![age](https://badges.renovateapi.com/packages/pypi/pytest/7.1.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/pytest/7.1.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/pytest/7.1.1/compatibility-slim/7.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/pytest/7.1.1/confidence-slim/7.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
pytest-dev/pytest ### [`v7.1.1`](https://togithub.com/pytest-dev/pytest/releases/7.1.1) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/7.1.0...7.1.1) # pytest 7.1.1 (2022-03-17) ## Bug Fixes - [#​9767](https://togithub.com/pytest-dev/pytest/issues/9767): Fixed a regression in pytest 7.1.0 where some conftest.py files outside of the source tree (e.g. in the \[site-packages]{.title-ref} directory) were not picked up.
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-error-reporting). --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index 824a8a7a0ce6..4f6bf643fc5e 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==7.1.0 +pytest==7.1.1 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index 968b0186d2d4..5e29de931dd5 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==7.1.0 +pytest==7.1.1 mock==4.0.3 From 2a555ca807447302e51508b32b6d983c987604f0 Mon Sep 17 00:00:00 2001 From: Drew Brown Date: Thu, 17 Mar 2022 17:47:02 -0700 Subject: [PATCH 324/467] chore: Update blunderbuss (#251) --- packages/google-cloud-error-reporting/.github/blunderbuss.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/blunderbuss.yml b/packages/google-cloud-error-reporting/.github/blunderbuss.yml index 148ebf4e81cb..28438484fcbf 100644 --- a/packages/google-cloud-error-reporting/.github/blunderbuss.yml +++ b/packages/google-cloud-error-reporting/.github/blunderbuss.yml @@ -1,4 +1,4 @@ assign_issues: - - Daniel-Sanche + - arbrown assign_prs: - - Daniel-Sanche + - arbrown From 51aa22489f26c340ecebe053309b2ca2fea7fd77 Mon Sep 17 00:00:00 2001 From: Drew Brown Date: Fri, 18 Mar 2022 08:27:24 -0700 Subject: [PATCH 325/467] chore: Adjust Error Reporting branding in documentation (#250) * chore: Adjust Error Reporting branding in documentation In line with product branding guidelines, the product is 'Error Reporting' and can be referred to as 'Google Cloud Error Reporting' when appropriate, but not 'Cloud Error Reporting' fixes #248 * Adjust brand name in repo metadata Co-authored-by: losalex <90795544+losalex@users.noreply.github.com> --- packages/google-cloud-error-reporting/.repo-metadata.json | 2 +- packages/google-cloud-error-reporting/README.rst | 4 ++-- packages/google-cloud-error-reporting/docs/usage.rst | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index a0f2eca2cfd5..a42bec3c762f 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -1,6 +1,6 @@ { "name": "clouderrorreporting", - "name_pretty": "Cloud Error Reporting", + "name_pretty": "Error Reporting", "product_documentation": "https://cloud.google.com/error-reporting", "client_documentation": "https://cloud.google.com/python/docs/reference/clouderrorreporting/latest", "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index fce2927d01b5..fb72fc838524 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -1,9 +1,9 @@ -Python Client for Cloud Error Reporting +Python Client for Error Reporting ============================================= |beta| |pypi| |versions| -The Cloud `Error Reporting`_ API counts, analyzes and aggregates the +The `Error Reporting`_ API counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management interface displays the results with sorting and filtering capabilities. A dedicated view shows the error details: time chart, occurrences, affected user diff --git a/packages/google-cloud-error-reporting/docs/usage.rst b/packages/google-cloud-error-reporting/docs/usage.rst index 40d4365f7bd4..7f1dc4f7cd5a 100644 --- a/packages/google-cloud-error-reporting/docs/usage.rst +++ b/packages/google-cloud-error-reporting/docs/usage.rst @@ -1,4 +1,4 @@ -Using Cloud Error Reporting +Using Error Reporting ================================= After configuring your environment, create a @@ -35,7 +35,7 @@ also optionally specify a version for that service, which defaults to Reporting an exception ----------------------- -Report a stacktrace to Cloud Error Reporting after an exception: +Report a stacktrace to Error Reporting after an exception: .. code-block:: python @@ -54,7 +54,7 @@ the client's constructor, or the default service of "python". The user and HTTP context can also be included in the exception. The HTTP context can be constructed using :class:`google.cloud.error_reporting.HTTPContext`. This will be used by -Cloud Error Reporting to help group exceptions. +Error Reporting to help group exceptions. .. code-block:: python @@ -88,7 +88,7 @@ object is provided. Reporting an error without an exception ----------------------------------------- -Errors can also be reported to Cloud Error Reporting outside the context +Errors can also be reported to Error Reporting outside the context of an exception. The library will include the file path, function name, and line number of the location where the error was reported. From c403e7bb1ac462e309f4660decc46075e7a38d83 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 29 Mar 2022 00:06:29 +0000 Subject: [PATCH 326/467] chore(python): use black==22.3.0 (#253) Source-Link: https://github.com/googleapis/synthtool/commit/6fab84af09f2cf89a031fd8671d1def6b2931b11 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:7cffbc10910c3ab1b852c05114a08d374c195a81cdec1d4a67a1d129331d0bfe --- .../.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/docs/conf.py | 5 +- .../google/cloud/error_reporting/_gapic.py | 6 +- .../google/cloud/error_reporting/client.py | 46 +-- .../error_group_service/async_client.py | 14 +- .../services/error_group_service/client.py | 63 +++- .../error_group_service/transports/base.py | 14 +- .../error_group_service/transports/grpc.py | 3 +- .../error_stats_service/async_client.py | 31 +- .../services/error_stats_service/client.py | 80 ++++- .../error_stats_service/transports/base.py | 18 +- .../error_stats_service/transports/grpc.py | 3 +- .../report_errors_service/async_client.py | 7 +- .../services/report_errors_service/client.py | 46 ++- .../report_errors_service/transports/base.py | 10 +- .../report_errors_service/transports/grpc.py | 3 +- .../errorreporting_v1beta1/types/common.py | 125 +++++-- .../types/error_group_service.py | 16 +- .../types/error_stats_service.py | 197 ++++++++--- .../types/report_errors_service.py | 32 +- .../google-cloud-error-reporting/noxfile.py | 9 +- .../samples/snippets/api/noxfile.py | 2 +- .../snippets/fluent_on_compute/noxfile.py | 2 +- .../test_error_group_service.py | 168 +++++++--- .../test_error_stats_service.py | 313 +++++++++++++----- .../test_report_errors_service.py | 94 ++++-- 26 files changed, 975 insertions(+), 334 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 44c78f7cc12d..87dd00611576 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:4e1991042fe54b991db9ca17c8fb386e61b22fe4d1472a568bf0fcac85dcf5d3 + digest: sha256:7cffbc10910c3ab1b852c05114a08d374c195a81cdec1d4a67a1d129331d0bfe diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index e56d4c58254b..c8f4857a64ce 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -361,7 +361,10 @@ intersphinx_mapping = { "python": ("https://python.readthedocs.org/en/latest/", None), "google-auth": ("https://googleapis.dev/python/google-auth/latest/", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None,), + "google.api_core": ( + "https://googleapis.dev/python/google-api-core/latest/", + None, + ), "grpc": ("https://grpc.github.io/grpc/python/", None), "proto-plus": ("https://proto-plus-python.readthedocs.io/en/latest/", None), "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py index 9c7f95c80362..d38adf295412 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/_gapic.py @@ -66,8 +66,10 @@ def report_error_event(self, error_report): # Since error_report uses camel case for key names (like serviceContext), # but ReportedErrorEvent uses snake case for key names (like service_context), # we need to route throught json. - error_report_payload = google.cloud.errorreporting_v1beta1.ReportedErrorEvent.from_json( - json.dumps(error_report) + error_report_payload = ( + google.cloud.errorreporting_v1beta1.ReportedErrorEvent.from_json( + json.dumps(error_report) + ) ) self._gapic_api.report_error_event( diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py index e44c5c92f88b..440262daf784 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/client.py @@ -246,7 +246,7 @@ def _build_error_report( :rtype: dict :returns: A dict payload ready to be serialized to JSON and sent to the API. - """ + """ payload = { "serviceContext": {"service": self.service}, "message": "{0}".format(message), @@ -315,7 +315,7 @@ def _send_error_report( self.report_errors_api.report_error_event(error_report) def report(self, message, http_context=None, user=None): - """ Reports a message to Error Reporting + """Reports a message to Error Reporting https://cloud.google.com/error-reporting/docs/formatting-error-messages @@ -360,27 +360,27 @@ def report(self, message, http_context=None, user=None): ) def report_exception(self, http_context=None, user=None): - """ Reports the details of the latest exceptions to Error Reporting. - - :type http_context: :class`google.cloud.error_reporting.HTTPContext` - :param http_context: The HTTP request which was processed when the - error was triggered. - - :type user: str - :param user: The user who caused or was affected by the crash. This - can be a user ID, an email address, or an arbitrary - token that uniquely identifies the user. When sending an - error report, leave this field empty if the user was - not logged in. In this case the Error Reporting system - will use other data, such as remote IP address, - to distinguish affected users. - - Example:: - - >>> try: - >>> raise NameError - >>> except Exception: - >>> client.report_exception() + """Reports the details of the latest exceptions to Error Reporting. + + :type http_context: :class`google.cloud.error_reporting.HTTPContext` + :param http_context: The HTTP request which was processed when the + error was triggered. + + :type user: str + :param user: The user who caused or was affected by the crash. This + can be a user ID, an email address, or an arbitrary + token that uniquely identifies the user. When sending an + error report, leave this field empty if the user was + not logged in. In this case the Error Reporting system + will use other data, such as remote IP address, + to distinguish affected users. + + Example:: + + >>> try: + >>> raise NameError + >>> except Exception: + >>> client.report_exception() """ self._send_error_report( traceback.format_exc(), http_context=http_context, user=user diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index af06be3b54cf..9a471702127c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -295,7 +295,12 @@ def sample_get_group(): ) # Send the request. - response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # Done; return the response. return response @@ -388,7 +393,12 @@ def sample_update_group(): ) # Send the request. - response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # Done; return the response. return response diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 0984b2891e4e..b847695975ef 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -56,7 +56,8 @@ class ErrorGroupServiceClientMeta(type): _transport_registry["grpc_asyncio"] = ErrorGroupServiceGrpcAsyncIOTransport def get_transport_class( - cls, label: str = None, + cls, + label: str = None, ) -> Type[ErrorGroupServiceTransport]: """Returns an appropriate transport class. @@ -162,9 +163,15 @@ def transport(self) -> ErrorGroupServiceTransport: return self._transport @staticmethod - def error_group_path(project: str, group: str,) -> str: + def error_group_path( + project: str, + group: str, + ) -> str: """Returns a fully-qualified error_group string.""" - return "projects/{project}/groups/{group}".format(project=project, group=group,) + return "projects/{project}/groups/{group}".format( + project=project, + group=group, + ) @staticmethod def parse_error_group_path(path: str) -> Dict[str, str]: @@ -173,7 +180,9 @@ def parse_error_group_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_billing_account_path(billing_account: str,) -> str: + def common_billing_account_path( + billing_account: str, + ) -> str: """Returns a fully-qualified billing_account string.""" return "billingAccounts/{billing_account}".format( billing_account=billing_account, @@ -186,9 +195,13 @@ def parse_common_billing_account_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_folder_path(folder: str,) -> str: + def common_folder_path( + folder: str, + ) -> str: """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder,) + return "folders/{folder}".format( + folder=folder, + ) @staticmethod def parse_common_folder_path(path: str) -> Dict[str, str]: @@ -197,9 +210,13 @@ def parse_common_folder_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_organization_path(organization: str,) -> str: + def common_organization_path( + organization: str, + ) -> str: """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization,) + return "organizations/{organization}".format( + organization=organization, + ) @staticmethod def parse_common_organization_path(path: str) -> Dict[str, str]: @@ -208,9 +225,13 @@ def parse_common_organization_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_project_path(project: str,) -> str: + def common_project_path( + project: str, + ) -> str: """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project,) + return "projects/{project}".format( + project=project, + ) @staticmethod def parse_common_project_path(path: str) -> Dict[str, str]: @@ -219,10 +240,14 @@ def parse_common_project_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_location_path(project: str, location: str,) -> str: + def common_location_path( + project: str, + location: str, + ) -> str: """Returns a fully-qualified location string.""" return "projects/{project}/locations/{location}".format( - project=project, location=location, + project=project, + location=location, ) @staticmethod @@ -487,7 +512,12 @@ def sample_get_group(): ) # Send the request. - response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # Done; return the response. return response @@ -580,7 +610,12 @@ def sample_update_group(): ) # Send the request. - response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # Done; return the response. return response diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 51d3632894d0..200ac35924cf 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -122,19 +122,23 @@ def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { self.get_group: gapic_v1.method.wrap_method( - self.get_group, default_timeout=None, client_info=client_info, + self.get_group, + default_timeout=None, + client_info=client_info, ), self.update_group: gapic_v1.method.wrap_method( - self.update_group, default_timeout=None, client_info=client_info, + self.update_group, + default_timeout=None, + client_info=client_info, ), } def close(self): """Closes resources associated with the transport. - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! """ raise NotImplementedError() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 695f89fd9971..e847c0c0ca7f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -225,8 +225,7 @@ def create_channel( @property def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ + """Return the channel designed to connect to this service.""" return self._grpc_channel @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index a31c03356d80..0b0cf09531ec 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -320,12 +320,20 @@ def sample_list_group_stats(): ) # Send the request. - response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. response = pagers.ListGroupStatsAsyncPager( - method=rpc, request=request, response=response, metadata=metadata, + method=rpc, + request=request, + response=response, + metadata=metadata, ) # Done; return the response. @@ -437,12 +445,20 @@ def sample_list_events(): ) # Send the request. - response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. response = pagers.ListEventsAsyncPager( - method=rpc, request=request, response=response, metadata=metadata, + method=rpc, + request=request, + response=response, + metadata=metadata, ) # Done; return the response. @@ -538,7 +554,12 @@ def sample_delete_events(): ) # Send the request. - response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # Done; return the response. return response diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index fd14ada013a3..3ab7187d5ec6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -57,7 +57,8 @@ class ErrorStatsServiceClientMeta(type): _transport_registry["grpc_asyncio"] = ErrorStatsServiceGrpcAsyncIOTransport def get_transport_class( - cls, label: str = None, + cls, + label: str = None, ) -> Type[ErrorStatsServiceTransport]: """Returns an appropriate transport class. @@ -165,9 +166,15 @@ def transport(self) -> ErrorStatsServiceTransport: return self._transport @staticmethod - def error_group_path(project: str, group: str,) -> str: + def error_group_path( + project: str, + group: str, + ) -> str: """Returns a fully-qualified error_group string.""" - return "projects/{project}/groups/{group}".format(project=project, group=group,) + return "projects/{project}/groups/{group}".format( + project=project, + group=group, + ) @staticmethod def parse_error_group_path(path: str) -> Dict[str, str]: @@ -176,7 +183,9 @@ def parse_error_group_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_billing_account_path(billing_account: str,) -> str: + def common_billing_account_path( + billing_account: str, + ) -> str: """Returns a fully-qualified billing_account string.""" return "billingAccounts/{billing_account}".format( billing_account=billing_account, @@ -189,9 +198,13 @@ def parse_common_billing_account_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_folder_path(folder: str,) -> str: + def common_folder_path( + folder: str, + ) -> str: """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder,) + return "folders/{folder}".format( + folder=folder, + ) @staticmethod def parse_common_folder_path(path: str) -> Dict[str, str]: @@ -200,9 +213,13 @@ def parse_common_folder_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_organization_path(organization: str,) -> str: + def common_organization_path( + organization: str, + ) -> str: """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization,) + return "organizations/{organization}".format( + organization=organization, + ) @staticmethod def parse_common_organization_path(path: str) -> Dict[str, str]: @@ -211,9 +228,13 @@ def parse_common_organization_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_project_path(project: str,) -> str: + def common_project_path( + project: str, + ) -> str: """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project,) + return "projects/{project}".format( + project=project, + ) @staticmethod def parse_common_project_path(path: str) -> Dict[str, str]: @@ -222,10 +243,14 @@ def parse_common_project_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_location_path(project: str, location: str,) -> str: + def common_location_path( + project: str, + location: str, + ) -> str: """Returns a fully-qualified location string.""" return "projects/{project}/locations/{location}".format( - project=project, location=location, + project=project, + location=location, ) @staticmethod @@ -512,12 +537,20 @@ def sample_list_group_stats(): ) # Send the request. - response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. response = pagers.ListGroupStatsPager( - method=rpc, request=request, response=response, metadata=metadata, + method=rpc, + request=request, + response=response, + metadata=metadata, ) # Done; return the response. @@ -629,12 +662,20 @@ def sample_list_events(): ) # Send the request. - response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. response = pagers.ListEventsPager( - method=rpc, request=request, response=response, metadata=metadata, + method=rpc, + request=request, + response=response, + metadata=metadata, ) # Done; return the response. @@ -730,7 +771,12 @@ def sample_delete_events(): ) # Send the request. - response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # Done; return the response. return response diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 02ebb1976741..55c2b09cb302 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -121,22 +121,28 @@ def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { self.list_group_stats: gapic_v1.method.wrap_method( - self.list_group_stats, default_timeout=None, client_info=client_info, + self.list_group_stats, + default_timeout=None, + client_info=client_info, ), self.list_events: gapic_v1.method.wrap_method( - self.list_events, default_timeout=None, client_info=client_info, + self.list_events, + default_timeout=None, + client_info=client_info, ), self.delete_events: gapic_v1.method.wrap_method( - self.delete_events, default_timeout=None, client_info=client_info, + self.delete_events, + default_timeout=None, + client_info=client_info, ), } def close(self): """Closes resources associated with the transport. - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! """ raise NotImplementedError() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index fb4b77463741..7e14aab43342 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -225,8 +225,7 @@ def create_channel( @property def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ + """Return the channel designed to connect to this service.""" return self._grpc_channel @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index c5bf86aeb4dc..8fc021077c19 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -322,7 +322,12 @@ def sample_report_error_event(): ) # Send the request. - response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # Done; return the response. return response diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index cce7eb3cb5b0..b514e1c54bf9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -55,7 +55,8 @@ class ReportErrorsServiceClientMeta(type): _transport_registry["grpc_asyncio"] = ReportErrorsServiceGrpcAsyncIOTransport def get_transport_class( - cls, label: str = None, + cls, + label: str = None, ) -> Type[ReportErrorsServiceTransport]: """Returns an appropriate transport class. @@ -161,7 +162,9 @@ def transport(self) -> ReportErrorsServiceTransport: return self._transport @staticmethod - def common_billing_account_path(billing_account: str,) -> str: + def common_billing_account_path( + billing_account: str, + ) -> str: """Returns a fully-qualified billing_account string.""" return "billingAccounts/{billing_account}".format( billing_account=billing_account, @@ -174,9 +177,13 @@ def parse_common_billing_account_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_folder_path(folder: str,) -> str: + def common_folder_path( + folder: str, + ) -> str: """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder,) + return "folders/{folder}".format( + folder=folder, + ) @staticmethod def parse_common_folder_path(path: str) -> Dict[str, str]: @@ -185,9 +192,13 @@ def parse_common_folder_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_organization_path(organization: str,) -> str: + def common_organization_path( + organization: str, + ) -> str: """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization,) + return "organizations/{organization}".format( + organization=organization, + ) @staticmethod def parse_common_organization_path(path: str) -> Dict[str, str]: @@ -196,9 +207,13 @@ def parse_common_organization_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_project_path(project: str,) -> str: + def common_project_path( + project: str, + ) -> str: """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project,) + return "projects/{project}".format( + project=project, + ) @staticmethod def parse_common_project_path(path: str) -> Dict[str, str]: @@ -207,10 +222,14 @@ def parse_common_project_path(path: str) -> Dict[str, str]: return m.groupdict() if m else {} @staticmethod - def common_location_path(project: str, location: str,) -> str: + def common_location_path( + project: str, + location: str, + ) -> str: """Returns a fully-qualified location string.""" return "projects/{project}/locations/{location}".format( - project=project, location=location, + project=project, + location=location, ) @staticmethod @@ -506,7 +525,12 @@ def sample_report_error_event(): ) # Send the request. - response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) # Done; return the response. return response diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index c251f4a81dab..ac6d66536f48 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -121,16 +121,18 @@ def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { self.report_error_event: gapic_v1.method.wrap_method( - self.report_error_event, default_timeout=None, client_info=client_info, + self.report_error_event, + default_timeout=None, + client_info=client_info, ), } def close(self): """Closes resources associated with the transport. - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! """ raise NotImplementedError() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 2f225db70cb7..e5b3d26d8ece 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -224,8 +224,7 @@ def create_channel( @property def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ + """Return the channel designed to connect to this service.""" return self._grpc_channel @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 94a29554a81f..1fbc87c6cb2e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -63,12 +63,24 @@ class ErrorGroup(proto.Message): interpreted as OPEN """ - name = proto.Field(proto.STRING, number=1,) - group_id = proto.Field(proto.STRING, number=2,) + name = proto.Field( + proto.STRING, + number=1, + ) + group_id = proto.Field( + proto.STRING, + number=2, + ) tracking_issues = proto.RepeatedField( - proto.MESSAGE, number=3, message="TrackingIssue", + proto.MESSAGE, + number=3, + message="TrackingIssue", + ) + resolution_status = proto.Field( + proto.ENUM, + number=5, + enum="ResolutionStatus", ) - resolution_status = proto.Field(proto.ENUM, number=5, enum="ResolutionStatus",) class TrackingIssue(proto.Message): @@ -82,7 +94,10 @@ class TrackingIssue(proto.Message): ``https://github.com/user/project/issues/4`` """ - url = proto.Field(proto.STRING, number=1,) + url = proto.Field( + proto.STRING, + number=1, + ) class ErrorEvent(proto.Message): @@ -105,10 +120,25 @@ class ErrorEvent(proto.Message): occurred. """ - event_time = proto.Field(proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp,) - service_context = proto.Field(proto.MESSAGE, number=2, message="ServiceContext",) - message = proto.Field(proto.STRING, number=3,) - context = proto.Field(proto.MESSAGE, number=5, message="ErrorContext",) + event_time = proto.Field( + proto.MESSAGE, + number=1, + message=timestamp_pb2.Timestamp, + ) + service_context = proto.Field( + proto.MESSAGE, + number=2, + message="ServiceContext", + ) + message = proto.Field( + proto.STRING, + number=3, + ) + context = proto.Field( + proto.MESSAGE, + number=5, + message="ErrorContext", + ) class ServiceContext(proto.Message): @@ -141,9 +171,18 @@ class ServiceContext(proto.Message): and must not be set when reporting errors. """ - service = proto.Field(proto.STRING, number=2,) - version = proto.Field(proto.STRING, number=3,) - resource_type = proto.Field(proto.STRING, number=4,) + service = proto.Field( + proto.STRING, + number=2, + ) + version = proto.Field( + proto.STRING, + number=3, + ) + resource_type = proto.Field( + proto.STRING, + number=4, + ) class ErrorContext(proto.Message): @@ -174,9 +213,20 @@ class ErrorContext(proto.Message): place where it was caught. """ - http_request = proto.Field(proto.MESSAGE, number=1, message="HttpRequestContext",) - user = proto.Field(proto.STRING, number=2,) - report_location = proto.Field(proto.MESSAGE, number=3, message="SourceLocation",) + http_request = proto.Field( + proto.MESSAGE, + number=1, + message="HttpRequestContext", + ) + user = proto.Field( + proto.STRING, + number=2, + ) + report_location = proto.Field( + proto.MESSAGE, + number=3, + message="SourceLocation", + ) class HttpRequestContext(proto.Message): @@ -208,12 +258,30 @@ class HttpRequestContext(proto.Message): report. """ - method = proto.Field(proto.STRING, number=1,) - url = proto.Field(proto.STRING, number=2,) - user_agent = proto.Field(proto.STRING, number=3,) - referrer = proto.Field(proto.STRING, number=4,) - response_status_code = proto.Field(proto.INT32, number=5,) - remote_ip = proto.Field(proto.STRING, number=6,) + method = proto.Field( + proto.STRING, + number=1, + ) + url = proto.Field( + proto.STRING, + number=2, + ) + user_agent = proto.Field( + proto.STRING, + number=3, + ) + referrer = proto.Field( + proto.STRING, + number=4, + ) + response_status_code = proto.Field( + proto.INT32, + number=5, + ) + remote_ip = proto.Field( + proto.STRING, + number=6, + ) class SourceLocation(proto.Message): @@ -237,9 +305,18 @@ class SourceLocation(proto.Message): example, ``my.package.MyClass.method`` in case of Java. """ - file_path = proto.Field(proto.STRING, number=1,) - line_number = proto.Field(proto.INT32, number=2,) - function_name = proto.Field(proto.STRING, number=4,) + file_path = proto.Field( + proto.STRING, + number=1, + ) + line_number = proto.Field( + proto.INT32, + number=2, + ) + function_name = proto.Field( + proto.STRING, + number=4, + ) __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index b6890500e0ba..f40ad9a9f261 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -20,7 +20,10 @@ __protobuf__ = proto.module( package="google.devtools.clouderrorreporting.v1beta1", - manifest={"GetGroupRequest", "UpdateGroupRequest",}, + manifest={ + "GetGroupRequest", + "UpdateGroupRequest", + }, ) @@ -37,7 +40,10 @@ class GetGroupRequest(proto.Message): Example: ``projects/my-project-123/groups/my-group`` """ - group_name = proto.Field(proto.STRING, number=1,) + group_name = proto.Field( + proto.STRING, + number=1, + ) class UpdateGroupRequest(proto.Message): @@ -49,7 +55,11 @@ class UpdateGroupRequest(proto.Message): resource on the server. """ - group = proto.Field(proto.MESSAGE, number=1, message=common.ErrorGroup,) + group = proto.Field( + proto.MESSAGE, + number=1, + message=common.ErrorGroup, + ) __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index aaa570167be1..15615596dae4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -108,22 +108,52 @@ class ListGroupStatsRequest(proto.Message): with the identical query parameters as the first request. """ - project_name = proto.Field(proto.STRING, number=1,) - group_id = proto.RepeatedField(proto.STRING, number=2,) + project_name = proto.Field( + proto.STRING, + number=1, + ) + group_id = proto.RepeatedField( + proto.STRING, + number=2, + ) service_filter = proto.Field( - proto.MESSAGE, number=3, message="ServiceContextFilter", + proto.MESSAGE, + number=3, + message="ServiceContextFilter", + ) + time_range = proto.Field( + proto.MESSAGE, + number=5, + message="QueryTimeRange", ) - time_range = proto.Field(proto.MESSAGE, number=5, message="QueryTimeRange",) timed_count_duration = proto.Field( - proto.MESSAGE, number=6, message=duration_pb2.Duration, + proto.MESSAGE, + number=6, + message=duration_pb2.Duration, + ) + alignment = proto.Field( + proto.ENUM, + number=7, + enum="TimedCountAlignment", ) - alignment = proto.Field(proto.ENUM, number=7, enum="TimedCountAlignment",) alignment_time = proto.Field( - proto.MESSAGE, number=8, message=timestamp_pb2.Timestamp, + proto.MESSAGE, + number=8, + message=timestamp_pb2.Timestamp, + ) + order = proto.Field( + proto.ENUM, + number=9, + enum="ErrorGroupOrder", + ) + page_size = proto.Field( + proto.INT32, + number=11, + ) + page_token = proto.Field( + proto.STRING, + number=12, ) - order = proto.Field(proto.ENUM, number=9, enum="ErrorGroupOrder",) - page_size = proto.Field(proto.INT32, number=11,) - page_token = proto.Field(proto.STRING, number=12,) class ListGroupStatsResponse(proto.Message): @@ -152,11 +182,18 @@ def raw_page(self): return self error_group_stats = proto.RepeatedField( - proto.MESSAGE, number=1, message="ErrorGroupStats", + proto.MESSAGE, + number=1, + message="ErrorGroupStats", + ) + next_page_token = proto.Field( + proto.STRING, + number=2, ) - next_page_token = proto.Field(proto.STRING, number=2,) time_range_begin = proto.Field( - proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, ) @@ -217,21 +254,48 @@ class ErrorGroupStats(proto.Message): characteristics of the group as a whole. """ - group = proto.Field(proto.MESSAGE, number=1, message=common.ErrorGroup,) - count = proto.Field(proto.INT64, number=2,) - affected_users_count = proto.Field(proto.INT64, number=3,) - timed_counts = proto.RepeatedField(proto.MESSAGE, number=4, message="TimedCount",) + group = proto.Field( + proto.MESSAGE, + number=1, + message=common.ErrorGroup, + ) + count = proto.Field( + proto.INT64, + number=2, + ) + affected_users_count = proto.Field( + proto.INT64, + number=3, + ) + timed_counts = proto.RepeatedField( + proto.MESSAGE, + number=4, + message="TimedCount", + ) first_seen_time = proto.Field( - proto.MESSAGE, number=5, message=timestamp_pb2.Timestamp, + proto.MESSAGE, + number=5, + message=timestamp_pb2.Timestamp, ) last_seen_time = proto.Field( - proto.MESSAGE, number=6, message=timestamp_pb2.Timestamp, + proto.MESSAGE, + number=6, + message=timestamp_pb2.Timestamp, ) affected_services = proto.RepeatedField( - proto.MESSAGE, number=7, message=common.ServiceContext, + proto.MESSAGE, + number=7, + message=common.ServiceContext, + ) + num_affected_services = proto.Field( + proto.INT32, + number=8, + ) + representative = proto.Field( + proto.MESSAGE, + number=9, + message=common.ErrorEvent, ) - num_affected_services = proto.Field(proto.INT32, number=8,) - representative = proto.Field(proto.MESSAGE, number=9, message=common.ErrorEvent,) class TimedCount(proto.Message): @@ -250,9 +314,20 @@ class TimedCount(proto.Message): End of the time period to which ``count`` refers (excluded). """ - count = proto.Field(proto.INT64, number=1,) - start_time = proto.Field(proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp,) - end_time = proto.Field(proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp,) + count = proto.Field( + proto.INT64, + number=1, + ) + start_time = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + end_time = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) class ListEventsRequest(proto.Message): @@ -287,14 +362,32 @@ class ListEventsRequest(proto.Message): response. """ - project_name = proto.Field(proto.STRING, number=1,) - group_id = proto.Field(proto.STRING, number=2,) + project_name = proto.Field( + proto.STRING, + number=1, + ) + group_id = proto.Field( + proto.STRING, + number=2, + ) service_filter = proto.Field( - proto.MESSAGE, number=3, message="ServiceContextFilter", + proto.MESSAGE, + number=3, + message="ServiceContextFilter", + ) + time_range = proto.Field( + proto.MESSAGE, + number=4, + message="QueryTimeRange", + ) + page_size = proto.Field( + proto.INT32, + number=6, + ) + page_token = proto.Field( + proto.STRING, + number=7, ) - time_range = proto.Field(proto.MESSAGE, number=4, message="QueryTimeRange",) - page_size = proto.Field(proto.INT32, number=6,) - page_token = proto.Field(proto.STRING, number=7,) class ListEventsResponse(proto.Message): @@ -319,11 +412,18 @@ def raw_page(self): return self error_events = proto.RepeatedField( - proto.MESSAGE, number=1, message=common.ErrorEvent, + proto.MESSAGE, + number=1, + message=common.ErrorEvent, + ) + next_page_token = proto.Field( + proto.STRING, + number=2, ) - next_page_token = proto.Field(proto.STRING, number=2,) time_range_begin = proto.Field( - proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, ) @@ -346,7 +446,11 @@ class Period(proto.Enum): PERIOD_1_WEEK = 4 PERIOD_30_DAYS = 5 - period = proto.Field(proto.ENUM, number=1, enum=Period,) + period = proto.Field( + proto.ENUM, + number=1, + enum=Period, + ) class ServiceContextFilter(proto.Message): @@ -367,9 +471,18 @@ class ServiceContextFilter(proto.Message): ```ServiceContext.resource_type`` `__. """ - service = proto.Field(proto.STRING, number=2,) - version = proto.Field(proto.STRING, number=3,) - resource_type = proto.Field(proto.STRING, number=4,) + service = proto.Field( + proto.STRING, + number=2, + ) + version = proto.Field( + proto.STRING, + number=3, + ) + resource_type = proto.Field( + proto.STRING, + number=4, + ) class DeleteEventsRequest(proto.Message): @@ -385,12 +498,14 @@ class DeleteEventsRequest(proto.Message): Example: ``projects/my-project-123``. """ - project_name = proto.Field(proto.STRING, number=1,) + project_name = proto.Field( + proto.STRING, + number=1, + ) class DeleteEventsResponse(proto.Message): - r"""Response message for deleting error events. - """ + r"""Response message for deleting error events.""" __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index 17f7de99fb04..22b901a4cac8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -44,8 +44,15 @@ class ReportErrorEventRequest(proto.Message): Required. The error event to be reported. """ - project_name = proto.Field(proto.STRING, number=1,) - event = proto.Field(proto.MESSAGE, number=2, message="ReportedErrorEvent",) + project_name = proto.Field( + proto.STRING, + number=1, + ) + event = proto.Field( + proto.MESSAGE, + number=2, + message="ReportedErrorEvent", + ) class ReportErrorEventResponse(proto.Message): @@ -99,12 +106,25 @@ class ReportedErrorEvent(proto.Message): which the error occurred. """ - event_time = proto.Field(proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp,) + event_time = proto.Field( + proto.MESSAGE, + number=1, + message=timestamp_pb2.Timestamp, + ) service_context = proto.Field( - proto.MESSAGE, number=2, message=common.ServiceContext, + proto.MESSAGE, + number=2, + message=common.ServiceContext, + ) + message = proto.Field( + proto.STRING, + number=3, + ) + context = proto.Field( + proto.MESSAGE, + number=4, + message=common.ErrorContext, ) - message = proto.Field(proto.STRING, number=3,) - context = proto.Field(proto.MESSAGE, number=4, message=common.ErrorContext,) __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 2a2001c49998..3addb4ed9431 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -24,7 +24,7 @@ import nox -BLACK_VERSION = "black==19.10b0" +BLACK_VERSION = "black==22.3.0" BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] DEFAULT_PYTHON_VERSION = "3.8" @@ -57,7 +57,9 @@ def lint(session): """ session.install("flake8", BLACK_VERSION) session.run( - "black", "--check", *BLACK_PATHS, + "black", + "--check", + *BLACK_PATHS, ) session.run("flake8", "google", "tests") @@ -67,7 +69,8 @@ def blacken(session): """Run black. Format code to uniform standard.""" session.install(BLACK_VERSION) session.run( - "black", *BLACK_PATHS, + "black", + *BLACK_PATHS, ) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 4c808af73ea2..949e0fde9ae1 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -29,7 +29,7 @@ # WARNING - WARNING - WARNING - WARNING - WARNING # WARNING - WARNING - WARNING - WARNING - WARNING -BLACK_VERSION = "black==19.10b0" +BLACK_VERSION = "black==22.3.0" # Copy `noxfile_config.py` to your directory and modify it instead. diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 4c808af73ea2..949e0fde9ae1 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -29,7 +29,7 @@ # WARNING - WARNING - WARNING - WARNING - WARNING # WARNING - WARNING - WARNING - WARNING - WARNING -BLACK_VERSION = "black==19.10b0" +BLACK_VERSION = "black==22.3.0" # Copy `noxfile_config.py` to your directory and modify it instead. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 09d3652a27a4..844f7414d489 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -90,7 +90,11 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] + "client_class", + [ + ErrorGroupServiceClient, + ErrorGroupServiceAsyncClient, + ], ) def test_error_group_service_client_from_service_account_info(client_class): creds = ga_credentials.AnonymousCredentials() @@ -132,7 +136,11 @@ def test_error_group_service_client_service_account_always_use_jwt( @pytest.mark.parametrize( - "client_class", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient,] + "client_class", + [ + ErrorGroupServiceClient, + ErrorGroupServiceAsyncClient, + ], ) def test_error_group_service_client_from_service_account_file(client_class): creds = ga_credentials.AnonymousCredentials() @@ -506,7 +514,9 @@ def test_error_group_service_client_client_options_scopes( client_class, transport_class, transport_name ): # Check the case scopes are provided. - options = client_options.ClientOptions(scopes=["1", "2"],) + 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) @@ -646,10 +656,17 @@ def test_error_group_service_client_create_channel_credentials_file( ) -@pytest.mark.parametrize("request_type", [error_group_service.GetGroupRequest, dict,]) +@pytest.mark.parametrize( + "request_type", + [ + error_group_service.GetGroupRequest, + dict, + ], +) def test_get_group(request_type, transport: str = "grpc"): client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -682,7 +699,8 @@ def test_get_group_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -698,7 +716,8 @@ async def test_get_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.GetGroupRequest ): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -735,7 +754,9 @@ async def test_get_group_async_from_dict(): def test_get_group_field_headers(): - client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. @@ -755,7 +776,10 @@ def test_get_group_field_headers(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "group_name=group_name/value",) in kw["metadata"] + assert ( + "x-goog-request-params", + "group_name=group_name/value", + ) in kw["metadata"] @pytest.mark.asyncio @@ -782,11 +806,16 @@ async def test_get_group_field_headers_async(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "group_name=group_name/value",) in kw["metadata"] + assert ( + "x-goog-request-params", + "group_name=group_name/value", + ) in kw["metadata"] def test_get_group_flattened(): - client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.get_group), "__call__") as call: @@ -794,7 +823,9 @@ def test_get_group_flattened(): call.return_value = common.ErrorGroup() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.get_group(group_name="group_name_value",) + client.get_group( + group_name="group_name_value", + ) # Establish that the underlying call was made with the expected # request object values. @@ -806,13 +837,16 @@ def test_get_group_flattened(): def test_get_group_flattened_error(): - client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): client.get_group( - error_group_service.GetGroupRequest(), group_name="group_name_value", + error_group_service.GetGroupRequest(), + group_name="group_name_value", ) @@ -830,7 +864,9 @@ async def test_get_group_flattened_async(): call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(common.ErrorGroup()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.get_group(group_name="group_name_value",) + response = await client.get_group( + group_name="group_name_value", + ) # Establish that the underlying call was made with the expected # request object values. @@ -851,16 +887,22 @@ async def test_get_group_flattened_error_async(): # fields is an error. with pytest.raises(ValueError): await client.get_group( - error_group_service.GetGroupRequest(), group_name="group_name_value", + error_group_service.GetGroupRequest(), + group_name="group_name_value", ) @pytest.mark.parametrize( - "request_type", [error_group_service.UpdateGroupRequest, dict,] + "request_type", + [ + error_group_service.UpdateGroupRequest, + dict, + ], ) def test_update_group(request_type, transport: str = "grpc"): client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -893,7 +935,8 @@ def test_update_group_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -909,7 +952,8 @@ async def test_update_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.UpdateGroupRequest ): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -946,7 +990,9 @@ async def test_update_group_async_from_dict(): def test_update_group_field_headers(): - client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. @@ -966,7 +1012,10 @@ def test_update_group_field_headers(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "group.name=group.name/value",) in kw["metadata"] + assert ( + "x-goog-request-params", + "group.name=group.name/value", + ) in kw["metadata"] @pytest.mark.asyncio @@ -993,11 +1042,16 @@ async def test_update_group_field_headers_async(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "group.name=group.name/value",) in kw["metadata"] + assert ( + "x-goog-request-params", + "group.name=group.name/value", + ) in kw["metadata"] def test_update_group_flattened(): - client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.update_group), "__call__") as call: @@ -1005,7 +1059,9 @@ def test_update_group_flattened(): call.return_value = common.ErrorGroup() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_group(group=common.ErrorGroup(name="name_value"),) + client.update_group( + group=common.ErrorGroup(name="name_value"), + ) # Establish that the underlying call was made with the expected # request object values. @@ -1017,7 +1073,9 @@ def test_update_group_flattened(): def test_update_group_flattened_error(): - client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -1077,7 +1135,8 @@ def test_credentials_transport_error(): ) with pytest.raises(ValueError): client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # It is an error to provide a credentials file and a transport instance. @@ -1097,7 +1156,10 @@ def test_credentials_transport_error(): options = client_options.ClientOptions() options.api_key = "api_key" with pytest.raises(ValueError): - client = ErrorGroupServiceClient(client_options=options, transport=transport,) + client = ErrorGroupServiceClient( + client_options=options, + transport=transport, + ) # It is an error to provide an api_key and a credential. options = mock.Mock() @@ -1113,7 +1175,8 @@ def test_credentials_transport_error(): ) with pytest.raises(ValueError): client = ErrorGroupServiceClient( - client_options={"scopes": ["1", "2"]}, transport=transport, + client_options={"scopes": ["1", "2"]}, + transport=transport, ) @@ -1158,8 +1221,13 @@ def test_transport_adc(transport_class): def test_transport_grpc_default(): # A client should use the gRPC transport by default. - client = ErrorGroupServiceClient(credentials=ga_credentials.AnonymousCredentials(),) - assert isinstance(client.transport, transports.ErrorGroupServiceGrpcTransport,) + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.ErrorGroupServiceGrpcTransport, + ) def test_error_group_service_base_transport_error(): @@ -1205,7 +1273,8 @@ def test_error_group_service_base_transport_with_credentials_file(): Transport.return_value = None load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ErrorGroupServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", + credentials_file="credentials.json", + quota_project_id="octopus", ) load_creds.assert_called_once_with( "credentials.json", @@ -1365,7 +1434,8 @@ def test_error_group_service_grpc_transport_channel(): # Check that channel is used if provided. transport = transports.ErrorGroupServiceGrpcTransport( - host="squid.clam.whelk", channel=channel, + host="squid.clam.whelk", + channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" @@ -1377,7 +1447,8 @@ def test_error_group_service_grpc_asyncio_transport_channel(): # Check that channel is used if provided. transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", channel=channel, + host="squid.clam.whelk", + channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" @@ -1487,7 +1558,10 @@ def test_error_group_service_transport_channel_mtls_with_adc(transport_class): def test_error_group_path(): project = "squid" group = "clam" - expected = "projects/{project}/groups/{group}".format(project=project, group=group,) + expected = "projects/{project}/groups/{group}".format( + project=project, + group=group, + ) actual = ErrorGroupServiceClient.error_group_path(project, group) assert expected == actual @@ -1526,7 +1600,9 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): folder = "cuttlefish" - expected = "folders/{folder}".format(folder=folder,) + expected = "folders/{folder}".format( + folder=folder, + ) actual = ErrorGroupServiceClient.common_folder_path(folder) assert expected == actual @@ -1544,7 +1620,9 @@ def test_parse_common_folder_path(): def test_common_organization_path(): organization = "winkle" - expected = "organizations/{organization}".format(organization=organization,) + expected = "organizations/{organization}".format( + organization=organization, + ) actual = ErrorGroupServiceClient.common_organization_path(organization) assert expected == actual @@ -1562,7 +1640,9 @@ def test_parse_common_organization_path(): def test_common_project_path(): project = "scallop" - expected = "projects/{project}".format(project=project,) + expected = "projects/{project}".format( + project=project, + ) actual = ErrorGroupServiceClient.common_project_path(project) assert expected == actual @@ -1582,7 +1662,8 @@ def test_common_location_path(): project = "squid" location = "clam" expected = "projects/{project}/locations/{location}".format( - project=project, location=location, + project=project, + location=location, ) actual = ErrorGroupServiceClient.common_location_path(project, location) assert expected == actual @@ -1607,7 +1688,8 @@ def test_client_with_default_client_info(): transports.ErrorGroupServiceTransport, "_prep_wrapped_messages" ) as prep: client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -1616,7 +1698,8 @@ def test_client_with_default_client_info(): ) as prep: transport_class = ErrorGroupServiceClient.get_transport_class() transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -1624,7 +1707,8 @@ def test_client_with_default_client_info(): @pytest.mark.asyncio async def test_transport_close_async(): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc_asyncio", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", ) with mock.patch.object( type(getattr(client.transport, "grpc_channel")), "close" diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 83df90db852f..dd2730f73ebc 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -93,7 +93,11 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] + "client_class", + [ + ErrorStatsServiceClient, + ErrorStatsServiceAsyncClient, + ], ) def test_error_stats_service_client_from_service_account_info(client_class): creds = ga_credentials.AnonymousCredentials() @@ -135,7 +139,11 @@ def test_error_stats_service_client_service_account_always_use_jwt( @pytest.mark.parametrize( - "client_class", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient,] + "client_class", + [ + ErrorStatsServiceClient, + ErrorStatsServiceAsyncClient, + ], ) def test_error_stats_service_client_from_service_account_file(client_class): creds = ga_credentials.AnonymousCredentials() @@ -509,7 +517,9 @@ def test_error_stats_service_client_client_options_scopes( client_class, transport_class, transport_name ): # Check the case scopes are provided. - options = client_options.ClientOptions(scopes=["1", "2"],) + 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) @@ -650,11 +660,16 @@ def test_error_stats_service_client_create_channel_credentials_file( @pytest.mark.parametrize( - "request_type", [error_stats_service.ListGroupStatsRequest, dict,] + "request_type", + [ + error_stats_service.ListGroupStatsRequest, + dict, + ], ) def test_list_group_stats(request_type, transport: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -683,7 +698,8 @@ def test_list_group_stats_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -700,7 +716,8 @@ async def test_list_group_stats_async( request_type=error_stats_service.ListGroupStatsRequest, ): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -733,7 +750,9 @@ async def test_list_group_stats_async_from_dict(): def test_list_group_stats_field_headers(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. @@ -753,9 +772,10 @@ def test_list_group_stats_field_headers(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ - "metadata" - ] + assert ( + "x-goog-request-params", + "project_name=project_name/value", + ) in kw["metadata"] @pytest.mark.asyncio @@ -784,13 +804,16 @@ async def test_list_group_stats_field_headers_async(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ - "metadata" - ] + assert ( + "x-goog-request-params", + "project_name=project_name/value", + ) in kw["metadata"] def test_list_group_stats_flattened(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: @@ -820,7 +843,9 @@ def test_list_group_stats_flattened(): def test_list_group_stats_flattened_error(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -891,7 +916,8 @@ async def test_list_group_stats_flattened_error_async(): def test_list_group_stats_pager(transport_name: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials, transport=transport_name, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. @@ -907,10 +933,13 @@ def test_list_group_stats_pager(transport_name: str = "grpc"): next_page_token="abc", ), error_stats_service.ListGroupStatsResponse( - error_group_stats=[], next_page_token="def", + error_group_stats=[], + next_page_token="def", ), error_stats_service.ListGroupStatsResponse( - error_group_stats=[error_stats_service.ErrorGroupStats(),], + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + ], next_page_token="ghi", ), error_stats_service.ListGroupStatsResponse( @@ -937,7 +966,8 @@ def test_list_group_stats_pager(transport_name: str = "grpc"): def test_list_group_stats_pages(transport_name: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials, transport=transport_name, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. @@ -953,10 +983,13 @@ def test_list_group_stats_pages(transport_name: str = "grpc"): next_page_token="abc", ), error_stats_service.ListGroupStatsResponse( - error_group_stats=[], next_page_token="def", + error_group_stats=[], + next_page_token="def", ), error_stats_service.ListGroupStatsResponse( - error_group_stats=[error_stats_service.ErrorGroupStats(),], + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + ], next_page_token="ghi", ), error_stats_service.ListGroupStatsResponse( @@ -993,10 +1026,13 @@ async def test_list_group_stats_async_pager(): next_page_token="abc", ), error_stats_service.ListGroupStatsResponse( - error_group_stats=[], next_page_token="def", + error_group_stats=[], + next_page_token="def", ), error_stats_service.ListGroupStatsResponse( - error_group_stats=[error_stats_service.ErrorGroupStats(),], + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + ], next_page_token="ghi", ), error_stats_service.ListGroupStatsResponse( @@ -1007,7 +1043,9 @@ async def test_list_group_stats_async_pager(): ), RuntimeError, ) - async_pager = await client.list_group_stats(request={},) + async_pager = await client.list_group_stats( + request={}, + ) assert async_pager.next_page_token == "abc" responses = [] async for response in async_pager: @@ -1040,10 +1078,13 @@ async def test_list_group_stats_async_pages(): next_page_token="abc", ), error_stats_service.ListGroupStatsResponse( - error_group_stats=[], next_page_token="def", + error_group_stats=[], + next_page_token="def", ), error_stats_service.ListGroupStatsResponse( - error_group_stats=[error_stats_service.ErrorGroupStats(),], + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + ], next_page_token="ghi", ), error_stats_service.ListGroupStatsResponse( @@ -1061,10 +1102,17 @@ async def test_list_group_stats_async_pages(): assert page_.raw_page.next_page_token == token -@pytest.mark.parametrize("request_type", [error_stats_service.ListEventsRequest, dict,]) +@pytest.mark.parametrize( + "request_type", + [ + error_stats_service.ListEventsRequest, + dict, + ], +) def test_list_events(request_type, transport: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -1093,7 +1141,8 @@ def test_list_events_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1109,7 +1158,8 @@ async def test_list_events_async( transport: str = "grpc_asyncio", request_type=error_stats_service.ListEventsRequest ): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -1142,7 +1192,9 @@ async def test_list_events_async_from_dict(): def test_list_events_field_headers(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. @@ -1162,9 +1214,10 @@ def test_list_events_field_headers(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ - "metadata" - ] + assert ( + "x-goog-request-params", + "project_name=project_name/value", + ) in kw["metadata"] @pytest.mark.asyncio @@ -1193,13 +1246,16 @@ async def test_list_events_field_headers_async(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ - "metadata" - ] + assert ( + "x-goog-request-params", + "project_name=project_name/value", + ) in kw["metadata"] def test_list_events_flattened(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: @@ -1208,7 +1264,8 @@ def test_list_events_flattened(): # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. client.list_events( - project_name="project_name_value", group_id="group_id_value", + project_name="project_name_value", + group_id="group_id_value", ) # Establish that the underlying call was made with the expected @@ -1224,7 +1281,9 @@ def test_list_events_flattened(): def test_list_events_flattened_error(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -1253,7 +1312,8 @@ async def test_list_events_flattened_async(): # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. response = await client.list_events( - project_name="project_name_value", group_id="group_id_value", + project_name="project_name_value", + group_id="group_id_value", ) # Establish that the underlying call was made with the expected @@ -1286,7 +1346,8 @@ async def test_list_events_flattened_error_async(): def test_list_events_pager(transport_name: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials, transport=transport_name, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1302,13 +1363,20 @@ def test_list_events_pager(transport_name: str = "grpc"): next_page_token="abc", ), error_stats_service.ListEventsResponse( - error_events=[], next_page_token="def", + error_events=[], + next_page_token="def", ), error_stats_service.ListEventsResponse( - error_events=[common.ErrorEvent(),], next_page_token="ghi", + error_events=[ + common.ErrorEvent(), + ], + next_page_token="ghi", ), error_stats_service.ListEventsResponse( - error_events=[common.ErrorEvent(), common.ErrorEvent(),], + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + ], ), RuntimeError, ) @@ -1328,7 +1396,8 @@ def test_list_events_pager(transport_name: str = "grpc"): def test_list_events_pages(transport_name: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials, transport=transport_name, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1344,13 +1413,20 @@ def test_list_events_pages(transport_name: str = "grpc"): next_page_token="abc", ), error_stats_service.ListEventsResponse( - error_events=[], next_page_token="def", + error_events=[], + next_page_token="def", ), error_stats_service.ListEventsResponse( - error_events=[common.ErrorEvent(),], next_page_token="ghi", + error_events=[ + common.ErrorEvent(), + ], + next_page_token="ghi", ), error_stats_service.ListEventsResponse( - error_events=[common.ErrorEvent(), common.ErrorEvent(),], + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + ], ), RuntimeError, ) @@ -1380,17 +1456,26 @@ async def test_list_events_async_pager(): next_page_token="abc", ), error_stats_service.ListEventsResponse( - error_events=[], next_page_token="def", + error_events=[], + next_page_token="def", ), error_stats_service.ListEventsResponse( - error_events=[common.ErrorEvent(),], next_page_token="ghi", + error_events=[ + common.ErrorEvent(), + ], + next_page_token="ghi", ), error_stats_service.ListEventsResponse( - error_events=[common.ErrorEvent(), common.ErrorEvent(),], + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + ], ), RuntimeError, ) - async_pager = await client.list_events(request={},) + async_pager = await client.list_events( + request={}, + ) assert async_pager.next_page_token == "abc" responses = [] async for response in async_pager: @@ -1421,13 +1506,20 @@ async def test_list_events_async_pages(): next_page_token="abc", ), error_stats_service.ListEventsResponse( - error_events=[], next_page_token="def", + error_events=[], + next_page_token="def", ), error_stats_service.ListEventsResponse( - error_events=[common.ErrorEvent(),], next_page_token="ghi", + error_events=[ + common.ErrorEvent(), + ], + next_page_token="ghi", ), error_stats_service.ListEventsResponse( - error_events=[common.ErrorEvent(), common.ErrorEvent(),], + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + ], ), RuntimeError, ) @@ -1439,11 +1531,16 @@ async def test_list_events_async_pages(): @pytest.mark.parametrize( - "request_type", [error_stats_service.DeleteEventsRequest, dict,] + "request_type", + [ + error_stats_service.DeleteEventsRequest, + dict, + ], ) def test_delete_events(request_type, transport: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -1469,7 +1566,8 @@ def test_delete_events_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1486,7 +1584,8 @@ async def test_delete_events_async( request_type=error_stats_service.DeleteEventsRequest, ): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -1516,7 +1615,9 @@ async def test_delete_events_async_from_dict(): def test_delete_events_field_headers(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. @@ -1536,9 +1637,10 @@ def test_delete_events_field_headers(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ - "metadata" - ] + assert ( + "x-goog-request-params", + "project_name=project_name/value", + ) in kw["metadata"] @pytest.mark.asyncio @@ -1567,13 +1669,16 @@ async def test_delete_events_field_headers_async(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ - "metadata" - ] + assert ( + "x-goog-request-params", + "project_name=project_name/value", + ) in kw["metadata"] def test_delete_events_flattened(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.delete_events), "__call__") as call: @@ -1581,7 +1686,9 @@ def test_delete_events_flattened(): call.return_value = error_stats_service.DeleteEventsResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.delete_events(project_name="project_name_value",) + client.delete_events( + project_name="project_name_value", + ) # Establish that the underlying call was made with the expected # request object values. @@ -1593,7 +1700,9 @@ def test_delete_events_flattened(): def test_delete_events_flattened_error(): - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) # Attempting to call a method with both a request object and flattened # fields is an error. @@ -1620,7 +1729,9 @@ async def test_delete_events_flattened_async(): ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.delete_events(project_name="project_name_value",) + response = await client.delete_events( + project_name="project_name_value", + ) # Establish that the underlying call was made with the expected # request object values. @@ -1653,7 +1764,8 @@ def test_credentials_transport_error(): ) with pytest.raises(ValueError): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # It is an error to provide a credentials file and a transport instance. @@ -1673,7 +1785,10 @@ def test_credentials_transport_error(): options = client_options.ClientOptions() options.api_key = "api_key" with pytest.raises(ValueError): - client = ErrorStatsServiceClient(client_options=options, transport=transport,) + client = ErrorStatsServiceClient( + client_options=options, + transport=transport, + ) # It is an error to provide an api_key and a credential. options = mock.Mock() @@ -1689,7 +1804,8 @@ def test_credentials_transport_error(): ) with pytest.raises(ValueError): client = ErrorStatsServiceClient( - client_options={"scopes": ["1", "2"]}, transport=transport, + client_options={"scopes": ["1", "2"]}, + transport=transport, ) @@ -1734,8 +1850,13 @@ def test_transport_adc(transport_class): def test_transport_grpc_default(): # A client should use the gRPC transport by default. - client = ErrorStatsServiceClient(credentials=ga_credentials.AnonymousCredentials(),) - assert isinstance(client.transport, transports.ErrorStatsServiceGrpcTransport,) + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.ErrorStatsServiceGrpcTransport, + ) def test_error_stats_service_base_transport_error(): @@ -1782,7 +1903,8 @@ def test_error_stats_service_base_transport_with_credentials_file(): Transport.return_value = None load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ErrorStatsServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", + credentials_file="credentials.json", + quota_project_id="octopus", ) load_creds.assert_called_once_with( "credentials.json", @@ -1942,7 +2064,8 @@ def test_error_stats_service_grpc_transport_channel(): # Check that channel is used if provided. transport = transports.ErrorStatsServiceGrpcTransport( - host="squid.clam.whelk", channel=channel, + host="squid.clam.whelk", + channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" @@ -1954,7 +2077,8 @@ def test_error_stats_service_grpc_asyncio_transport_channel(): # Check that channel is used if provided. transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", channel=channel, + host="squid.clam.whelk", + channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" @@ -2064,7 +2188,10 @@ def test_error_stats_service_transport_channel_mtls_with_adc(transport_class): def test_error_group_path(): project = "squid" group = "clam" - expected = "projects/{project}/groups/{group}".format(project=project, group=group,) + expected = "projects/{project}/groups/{group}".format( + project=project, + group=group, + ) actual = ErrorStatsServiceClient.error_group_path(project, group) assert expected == actual @@ -2103,7 +2230,9 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): folder = "cuttlefish" - expected = "folders/{folder}".format(folder=folder,) + expected = "folders/{folder}".format( + folder=folder, + ) actual = ErrorStatsServiceClient.common_folder_path(folder) assert expected == actual @@ -2121,7 +2250,9 @@ def test_parse_common_folder_path(): def test_common_organization_path(): organization = "winkle" - expected = "organizations/{organization}".format(organization=organization,) + expected = "organizations/{organization}".format( + organization=organization, + ) actual = ErrorStatsServiceClient.common_organization_path(organization) assert expected == actual @@ -2139,7 +2270,9 @@ def test_parse_common_organization_path(): def test_common_project_path(): project = "scallop" - expected = "projects/{project}".format(project=project,) + expected = "projects/{project}".format( + project=project, + ) actual = ErrorStatsServiceClient.common_project_path(project) assert expected == actual @@ -2159,7 +2292,8 @@ def test_common_location_path(): project = "squid" location = "clam" expected = "projects/{project}/locations/{location}".format( - project=project, location=location, + project=project, + location=location, ) actual = ErrorStatsServiceClient.common_location_path(project, location) assert expected == actual @@ -2184,7 +2318,8 @@ def test_client_with_default_client_info(): transports.ErrorStatsServiceTransport, "_prep_wrapped_messages" ) as prep: client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -2193,7 +2328,8 @@ def test_client_with_default_client_info(): ) as prep: transport_class = ErrorStatsServiceClient.get_transport_class() transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -2201,7 +2337,8 @@ def test_client_with_default_client_info(): @pytest.mark.asyncio async def test_transport_close_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc_asyncio", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", ) with mock.patch.object( type(getattr(client.transport, "grpc_channel")), "close" diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 61f9ed9dedba..cf123818c161 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -93,7 +93,11 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] + "client_class", + [ + ReportErrorsServiceClient, + ReportErrorsServiceAsyncClient, + ], ) def test_report_errors_service_client_from_service_account_info(client_class): creds = ga_credentials.AnonymousCredentials() @@ -135,7 +139,11 @@ def test_report_errors_service_client_service_account_always_use_jwt( @pytest.mark.parametrize( - "client_class", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient,] + "client_class", + [ + ReportErrorsServiceClient, + ReportErrorsServiceAsyncClient, + ], ) def test_report_errors_service_client_from_service_account_file(client_class): creds = ga_credentials.AnonymousCredentials() @@ -517,7 +525,9 @@ def test_report_errors_service_client_client_options_scopes( client_class, transport_class, transport_name ): # Check the case scopes are provided. - options = client_options.ClientOptions(scopes=["1", "2"],) + 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) @@ -658,11 +668,16 @@ def test_report_errors_service_client_create_channel_credentials_file( @pytest.mark.parametrize( - "request_type", [report_errors_service.ReportErrorEventRequest, dict,] + "request_type", + [ + report_errors_service.ReportErrorEventRequest, + dict, + ], ) def test_report_error_event(request_type, transport: str = "grpc"): client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -690,7 +705,8 @@ def test_report_error_event_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. @@ -709,7 +725,8 @@ async def test_report_error_event_async( request_type=report_errors_service.ReportErrorEventRequest, ): client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # Everything is optional in proto3 as far as the runtime is concerned, @@ -765,9 +782,10 @@ def test_report_error_event_field_headers(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ - "metadata" - ] + assert ( + "x-goog-request-params", + "project_name=project_name/value", + ) in kw["metadata"] @pytest.mark.asyncio @@ -798,9 +816,10 @@ async def test_report_error_event_field_headers_async(): # Establish that the field header was sent. _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "project_name=project_name/value",) in kw[ - "metadata" - ] + assert ( + "x-goog-request-params", + "project_name=project_name/value", + ) in kw["metadata"] def test_report_error_event_flattened(): @@ -918,7 +937,8 @@ def test_credentials_transport_error(): ) with pytest.raises(ValueError): client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) # It is an error to provide a credentials file and a transport instance. @@ -938,7 +958,10 @@ def test_credentials_transport_error(): options = client_options.ClientOptions() options.api_key = "api_key" with pytest.raises(ValueError): - client = ReportErrorsServiceClient(client_options=options, transport=transport,) + client = ReportErrorsServiceClient( + client_options=options, + transport=transport, + ) # It is an error to provide an api_key and a credential. options = mock.Mock() @@ -954,7 +977,8 @@ def test_credentials_transport_error(): ) with pytest.raises(ValueError): client = ReportErrorsServiceClient( - client_options={"scopes": ["1", "2"]}, transport=transport, + client_options={"scopes": ["1", "2"]}, + transport=transport, ) @@ -1002,7 +1026,10 @@ def test_transport_grpc_default(): client = ReportErrorsServiceClient( credentials=ga_credentials.AnonymousCredentials(), ) - assert isinstance(client.transport, transports.ReportErrorsServiceGrpcTransport,) + assert isinstance( + client.transport, + transports.ReportErrorsServiceGrpcTransport, + ) def test_report_errors_service_base_transport_error(): @@ -1045,7 +1072,8 @@ def test_report_errors_service_base_transport_with_credentials_file(): Transport.return_value = None load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) transport = transports.ReportErrorsServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", + credentials_file="credentials.json", + quota_project_id="octopus", ) load_creds.assert_called_once_with( "credentials.json", @@ -1205,7 +1233,8 @@ def test_report_errors_service_grpc_transport_channel(): # Check that channel is used if provided. transport = transports.ReportErrorsServiceGrpcTransport( - host="squid.clam.whelk", channel=channel, + host="squid.clam.whelk", + channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" @@ -1217,7 +1246,8 @@ def test_report_errors_service_grpc_asyncio_transport_channel(): # Check that channel is used if provided. transport = transports.ReportErrorsServiceGrpcAsyncIOTransport( - host="squid.clam.whelk", channel=channel, + host="squid.clam.whelk", + channel=channel, ) assert transport.grpc_channel == channel assert transport._host == "squid.clam.whelk:443" @@ -1346,7 +1376,9 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): folder = "whelk" - expected = "folders/{folder}".format(folder=folder,) + expected = "folders/{folder}".format( + folder=folder, + ) actual = ReportErrorsServiceClient.common_folder_path(folder) assert expected == actual @@ -1364,7 +1396,9 @@ def test_parse_common_folder_path(): def test_common_organization_path(): organization = "oyster" - expected = "organizations/{organization}".format(organization=organization,) + expected = "organizations/{organization}".format( + organization=organization, + ) actual = ReportErrorsServiceClient.common_organization_path(organization) assert expected == actual @@ -1382,7 +1416,9 @@ def test_parse_common_organization_path(): def test_common_project_path(): project = "cuttlefish" - expected = "projects/{project}".format(project=project,) + expected = "projects/{project}".format( + project=project, + ) actual = ReportErrorsServiceClient.common_project_path(project) assert expected == actual @@ -1402,7 +1438,8 @@ def test_common_location_path(): project = "winkle" location = "nautilus" expected = "projects/{project}/locations/{location}".format( - project=project, location=location, + project=project, + location=location, ) actual = ReportErrorsServiceClient.common_location_path(project, location) assert expected == actual @@ -1427,7 +1464,8 @@ def test_client_with_default_client_info(): transports.ReportErrorsServiceTransport, "_prep_wrapped_messages" ) as prep: client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -1436,7 +1474,8 @@ def test_client_with_default_client_info(): ) as prep: transport_class = ReportErrorsServiceClient.get_transport_class() transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), client_info=client_info, + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, ) prep.assert_called_once_with(client_info) @@ -1444,7 +1483,8 @@ def test_client_with_default_client_info(): @pytest.mark.asyncio async def test_transport_close_async(): client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport="grpc_asyncio", + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", ) with mock.patch.object( type(getattr(client.transport, "grpc_channel")), "close" From 56e339a9b0a20f58550a7dc0efe6bb84a81fbad8 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 30 Mar 2022 16:22:21 +0000 Subject: [PATCH 327/467] chore(python): add E231 to .flake8 ignore list (#254) Source-Link: https://github.com/googleapis/synthtool/commit/7ff4aad2ec5af0380e8bd6da1fa06eaadf24ec81 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:462782b0b492346b2d9099aaff52206dd30bc8e031ea97082e6facecc2373244 --- packages/google-cloud-error-reporting/.flake8 | 2 +- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index 29227d4cf419..2e438749863d 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -16,7 +16,7 @@ # Generated by synthtool. DO NOT EDIT! [flake8] -ignore = E203, E266, E501, W503 +ignore = E203, E231, E266, E501, W503 exclude = # Exclude generated code. **/proto/** diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 87dd00611576..9e0a9356b6eb 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:7cffbc10910c3ab1b852c05114a08d374c195a81cdec1d4a67a1d129331d0bfe + digest: sha256:462782b0b492346b2d9099aaff52206dd30bc8e031ea97082e6facecc2373244 From eb3978e3e6cf17c1231aa9aadd19cc570de39506 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 31 Mar 2022 16:42:10 +0000 Subject: [PATCH 328/467] chore(python): update .pre-commit-config.yaml to use black==22.3.0 (#255) Source-Link: https://github.com/googleapis/synthtool/commit/7804ade3daae0d66649bee8df6c55484c6580b8d Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:eede5672562a32821444a8e803fb984a6f61f2237ea3de229d2de24453f4ae7d --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 3 ++- packages/google-cloud-error-reporting/.pre-commit-config.yaml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 9e0a9356b6eb..22cc254afa2c 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:462782b0b492346b2d9099aaff52206dd30bc8e031ea97082e6facecc2373244 + digest: sha256:eede5672562a32821444a8e803fb984a6f61f2237ea3de229d2de24453f4ae7d +# created: 2022-03-30T23:44:26.560599165Z diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 62eb5a77d9a3..46d237160f6d 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/psf/black - rev: 19.10b0 + rev: 22.3.0 hooks: - id: black - repo: https://gitlab.com/pycqa/flake8 From 2abc24288d6b46a6e8aa31fe4557acf1e6bfb48c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 1 Apr 2022 02:10:22 +0000 Subject: [PATCH 329/467] chore(python): Enable size-label bot (#256) Source-Link: https://github.com/googleapis/synthtool/commit/06e82790dd719a165ad32b8a06f8f6ec3e3cae0f Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:b3500c053313dc34e07b1632ba9e4e589f4f77036a7cf39e1fe8906811ae0fce --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- packages/google-cloud-error-reporting/.github/auto-label.yaml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.github/auto-label.yaml diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 22cc254afa2c..58a0b153bf0e 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:eede5672562a32821444a8e803fb984a6f61f2237ea3de229d2de24453f4ae7d -# created: 2022-03-30T23:44:26.560599165Z + digest: sha256:b3500c053313dc34e07b1632ba9e4e589f4f77036a7cf39e1fe8906811ae0fce +# created: 2022-04-01T01:42:03.609279246Z diff --git a/packages/google-cloud-error-reporting/.github/auto-label.yaml b/packages/google-cloud-error-reporting/.github/auto-label.yaml new file mode 100644 index 000000000000..09c8d735b456 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/auto-label.yaml @@ -0,0 +1,2 @@ +requestsize: + enabled: true From 6c7d4f1e53eb59269460a5d4a4c2f4c73a77a605 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 1 Apr 2022 19:32:28 +0000 Subject: [PATCH 330/467] chore(python): refactor unit / system test dependency install (#257) Source-Link: https://github.com/googleapis/synthtool/commit/993985f0fc4b37152e588f0549bcbdaf34666023 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:1894490910e891a385484514b22eb5133578897eb5b3c380e6d8ad475c6647cd --- .../.github/.OwlBot.lock.yaml | 4 +- .../google-cloud-error-reporting/noxfile.py | 105 ++++++++++++++---- 2 files changed, 87 insertions(+), 22 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 58a0b153bf0e..fa5762290c5b 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:b3500c053313dc34e07b1632ba9e4e589f4f77036a7cf39e1fe8906811ae0fce -# created: 2022-04-01T01:42:03.609279246Z + digest: sha256:1894490910e891a385484514b22eb5133578897eb5b3c380e6d8ad475c6647cd +# created: 2022-04-01T15:48:07.524222836Z diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 3addb4ed9431..6ee5e8ab96d9 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -20,16 +20,40 @@ import os import pathlib import shutil +import warnings import nox - BLACK_VERSION = "black==22.3.0" BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] DEFAULT_PYTHON_VERSION = "3.8" -SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] + UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"] +UNIT_TEST_STANDARD_DEPENDENCIES = [ + "mock", + "asyncmock", + "pytest", + "pytest-cov", + "pytest-asyncio", +] +UNIT_TEST_EXTERNAL_DEPENDENCIES = [] +UNIT_TEST_LOCAL_DEPENDENCIES = [] +UNIT_TEST_DEPENDENCIES = [] +UNIT_TEST_EXTRAS = [] +UNIT_TEST_EXTRAS_BY_PYTHON = {} + +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] +SYSTEM_TEST_STANDARD_DEPENDENCIES = [ + "mock", + "pytest", + "google-cloud-testutils", +] +SYSTEM_TEST_EXTERNAL_DEPENDENCIES = [] +SYSTEM_TEST_LOCAL_DEPENDENCIES = [] +SYSTEM_TEST_DEPENDENCIES = [] +SYSTEM_TEST_EXTRAS = [] +SYSTEM_TEST_EXTRAS_BY_PYTHON = {} CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() @@ -81,23 +105,41 @@ def lint_setup_py(session): session.run("python", "setup.py", "check", "--restructuredtext", "--strict") +def install_unittest_dependencies(session, *constraints): + standard_deps = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_DEPENDENCIES + session.install(*standard_deps, *constraints) + + if UNIT_TEST_EXTERNAL_DEPENDENCIES: + warnings.warn( + "'unit_test_external_dependencies' is deprecated. Instead, please " + "use 'unit_test_dependencies' or 'unit_test_local_dependencies'.", + DeprecationWarning, + ) + session.install(*UNIT_TEST_EXTERNAL_DEPENDENCIES, *constraints) + + if UNIT_TEST_LOCAL_DEPENDENCIES: + session.install(*UNIT_TEST_LOCAL_DEPENDENCIES, *constraints) + + if UNIT_TEST_EXTRAS_BY_PYTHON: + extras = UNIT_TEST_EXTRAS_BY_PYTHON.get(session.python, []) + elif UNIT_TEST_EXTRAS: + extras = UNIT_TEST_EXTRAS + else: + extras = [] + + if extras: + session.install("-e", f".[{','.join(extras)}]", *constraints) + else: + session.install("-e", ".", *constraints) + + def default(session): # Install all test dependencies, then install this package in-place. constraints_path = str( CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" ) - session.install( - "mock", - "asyncmock", - "pytest", - "pytest-cov", - "pytest-asyncio", - "-c", - constraints_path, - ) - - session.install("-e", ".", "-c", constraints_path) + install_unittest_dependencies(session, "-c", constraints_path) # Run py.test against the unit tests. session.run( @@ -121,6 +163,35 @@ def unit(session): default(session) +def install_systemtest_dependencies(session, *constraints): + + # Use pre-release gRPC for system tests. + session.install("--pre", "grpcio") + + session.install(*SYSTEM_TEST_STANDARD_DEPENDENCIES, *constraints) + + if SYSTEM_TEST_EXTERNAL_DEPENDENCIES: + session.install(*SYSTEM_TEST_EXTERNAL_DEPENDENCIES, *constraints) + + if SYSTEM_TEST_LOCAL_DEPENDENCIES: + session.install("-e", *SYSTEM_TEST_LOCAL_DEPENDENCIES, *constraints) + + if SYSTEM_TEST_DEPENDENCIES: + session.install("-e", *SYSTEM_TEST_DEPENDENCIES, *constraints) + + if SYSTEM_TEST_EXTRAS_BY_PYTHON: + extras = SYSTEM_TEST_EXTRAS_BY_PYTHON.get(session.python, []) + elif SYSTEM_TEST_EXTRAS: + extras = SYSTEM_TEST_EXTRAS + else: + extras = [] + + if extras: + session.install("-e", f".[{','.join(extras)}]", *constraints) + else: + session.install("-e", ".", *constraints) + + @nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS) def system(session): """Run the system test suite.""" @@ -143,13 +214,7 @@ def system(session): if not system_test_exists and not system_test_folder_exists: session.skip("System tests were not found") - # Use pre-release gRPC for system tests. - session.install("--pre", "grpcio") - - # Install all test dependencies, then install this package into the - # virtualenv's dist-packages. - session.install("mock", "pytest", "google-cloud-testutils", "-c", constraints_path) - session.install("-e", ".", "-c", constraints_path) + install_systemtest_dependencies(session, "-c", constraints_path) # Run py.test against the system tests. if system_test_exists: From 9a8f8764086395b1564e5dac778f4ff06f0d557e Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Tue, 5 Apr 2022 11:15:12 -0400 Subject: [PATCH 331/467] chore: allow releases on previous major versions (#258) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: allow releases on previous major versions * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/release-please.yml | 6 ++++++ packages/google-cloud-error-reporting/owlbot.py | 1 + 2 files changed, 7 insertions(+) diff --git a/packages/google-cloud-error-reporting/.github/release-please.yml b/packages/google-cloud-error-reporting/.github/release-please.yml index 466597e5b196..6def37a84c98 100644 --- a/packages/google-cloud-error-reporting/.github/release-please.yml +++ b/packages/google-cloud-error-reporting/.github/release-please.yml @@ -1,2 +1,8 @@ releaseType: python handleGHRelease: true +# NOTE: this section is generated by synthtool.languages.python +# See https://github.com/googleapis/synthtool/blob/master/synthtool/languages/python.py +branches: +- branch: v0 + handleGHRelease: true + releaseType: python diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index a2f17a6695d1..08f2c9f71847 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -41,6 +41,7 @@ # ---------------------------------------------------------------------------- python.py_samples(skip_readmes=True) +python.configure_previous_major_version_branches() s.shell.run(["nox", "-s", "blacken"], hide_output=False) From f69f244e47936f47946a9301a284fc2f1302ba06 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 6 Apr 2022 10:52:17 +0000 Subject: [PATCH 332/467] chore(python): add license header to auto-label.yaml (#259) Source-Link: https://github.com/googleapis/synthtool/commit/eb78c980b52c7c6746d2edb77d9cf7aaa99a2aab Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:8a5d3f6a2e43ed8293f34e06a2f56931d1e88a2694c3bb11b15df4eb256ad163 --- .../.github/.OwlBot.lock.yaml | 4 ++-- .../.github/auto-label.yaml | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index fa5762290c5b..bc893c979e20 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:1894490910e891a385484514b22eb5133578897eb5b3c380e6d8ad475c6647cd -# created: 2022-04-01T15:48:07.524222836Z + digest: sha256:8a5d3f6a2e43ed8293f34e06a2f56931d1e88a2694c3bb11b15df4eb256ad163 +# created: 2022-04-06T10:30:21.687684602Z diff --git a/packages/google-cloud-error-reporting/.github/auto-label.yaml b/packages/google-cloud-error-reporting/.github/auto-label.yaml index 09c8d735b456..41bff0b5375a 100644 --- a/packages/google-cloud-error-reporting/.github/auto-label.yaml +++ b/packages/google-cloud-error-reporting/.github/auto-label.yaml @@ -1,2 +1,15 @@ +# Copyright 2022 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. requestsize: enabled: true From 35388ed122b2eb12eb6b7f713f9dc462d5e24522 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 14 Apr 2022 06:26:30 -0400 Subject: [PATCH 333/467] chore: use gapic-generator-python 0.65.1 (#263) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: use gapic-generator-python 0.65.1 PiperOrigin-RevId: 441524537 Source-Link: https://github.com/googleapis/googleapis/commit/2a273915b3f70fe86c9d2a75470a0b83e48d0abf Source-Link: https://github.com/googleapis/googleapis-gen/commit/ab6756a48c89b5bcb9fb73443cb8e55d574f4643 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYWI2NzU2YTQ4Yzg5YjViY2I5ZmI3MzQ0M2NiOGU1NWQ1NzRmNDY0MyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../error_group_service/async_client.py | 3 +- .../services/error_group_service/client.py | 3 +- .../error_group_service/transports/base.py | 5 + .../error_group_service/transports/grpc.py | 4 + .../error_stats_service/async_client.py | 2 +- .../services/error_stats_service/client.py | 2 +- .../error_stats_service/transports/base.py | 5 + .../error_stats_service/transports/grpc.py | 4 + .../report_errors_service/async_client.py | 3 +- .../services/report_errors_service/client.py | 3 +- .../report_errors_service/transports/base.py | 5 + .../report_errors_service/transports/grpc.py | 4 + ...ippet_metadata_errorreporting_v1beta1.json | 514 +++++++++++++++++- .../test_error_group_service.py | 79 ++- .../test_error_stats_service.py | 91 +++- .../test_report_errors_service.py | 79 ++- 16 files changed, 717 insertions(+), 89 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 9a471702127c..6316e62a7d0a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import functools import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core.client_options import ClientOptions @@ -317,7 +317,6 @@ async def update_group( r"""Replace the data for the specified group. Fails if the group does not exist. - .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index b847695975ef..eec0a0aebe5c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib @@ -534,7 +534,6 @@ def update_group( r"""Replace the data for the specified group. Fails if the group does not exist. - .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 200ac35924cf..d7f0edd8817f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -81,6 +81,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -160,5 +161,9 @@ def update_group( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("ErrorGroupServiceTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index e847c0c0ca7f..c90e37f74156 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -284,5 +284,9 @@ def update_group( def close(self): self.grpc_channel.close() + @property + def kind(self) -> str: + return "grpc" + __all__ = ("ErrorGroupServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 0b0cf09531ec..13cd9f089849 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import functools import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core.client_options import ClientOptions diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 3ab7187d5ec6..f3289f779567 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 55c2b09cb302..0bdbe002a3a0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -80,6 +80,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -182,5 +183,9 @@ def delete_events( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("ErrorStatsServiceTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 7e14aab43342..8b9510b1b09a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -317,5 +317,9 @@ def delete_events( def close(self): self.grpc_channel.close() + @property + def kind(self) -> str: + return "grpc" + __all__ = ("ErrorStatsServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 8fc021077c19..a7ab63d2d4eb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import functools import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core.client_options import ClientOptions @@ -227,7 +227,6 @@ async def report_error_event( For more information, see `Using Error Reporting with regionalized logs `__. - .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index b514e1c54bf9..297c8d8ec640 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib @@ -430,7 +430,6 @@ def report_error_event( For more information, see `Using Error Reporting with regionalized logs `__. - .. code-block:: python from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index ac6d66536f48..5da09490b6bf 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -80,6 +80,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -148,5 +149,9 @@ def report_error_event( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("ReportErrorsServiceTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index e5b3d26d8ece..aab08b85ee8e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -274,5 +274,9 @@ def report_error_event( def close(self): self.grpc_channel.close() + @property + def kind(self) -> str: + return "grpc" + __all__ = ("ReportErrorsServiceGrpcTransport",) diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json index b493c226aaa4..6b5f59262728 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json @@ -1,16 +1,61 @@ { + "clientLibrary": { + "apis": [ + { + "id": "google.devtools.clouderrorreporting.v1beta1", + "version": "v1beta1" + } + ], + "language": "PYTHON", + "name": "google-cloud-errorreporting" + }, "snippets": [ { + "canonical": true, "clientMethod": { "async": true, + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorGroupServiceAsyncClient", + "shortName": "ErrorGroupServiceAsyncClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorGroupServiceAsyncClient.get_group", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.GetGroup", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", "shortName": "ErrorGroupService" }, "shortName": "GetGroup" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.GetGroupRequest" + }, + { + "name": "group_name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.types.ErrorGroup", + "shortName": "get_group" }, + "description": "Sample for GetGroup", "file": "clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_async", "segments": [ { @@ -43,18 +88,54 @@ "start": 42, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py" }, { + "canonical": true, "clientMethod": { + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorGroupServiceClient", + "shortName": "ErrorGroupServiceClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorGroupServiceClient.get_group", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.GetGroup", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", "shortName": "ErrorGroupService" }, "shortName": "GetGroup" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.GetGroupRequest" + }, + { + "name": "group_name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.types.ErrorGroup", + "shortName": "get_group" }, + "description": "Sample for GetGroup", "file": "clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_sync", "segments": [ { @@ -87,19 +168,55 @@ "start": 42, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py" }, { + "canonical": true, "clientMethod": { "async": true, + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorGroupServiceAsyncClient", + "shortName": "ErrorGroupServiceAsyncClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorGroupServiceAsyncClient.update_group", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.UpdateGroup", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", "shortName": "ErrorGroupService" }, "shortName": "UpdateGroup" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest" + }, + { + "name": "group", + "type": "google.cloud.errorreporting_v1beta1.types.ErrorGroup" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.types.ErrorGroup", + "shortName": "update_group" }, + "description": "Sample for UpdateGroup", "file": "clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_async", "segments": [ { @@ -132,18 +249,54 @@ "start": 41, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py" }, { + "canonical": true, "clientMethod": { + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorGroupServiceClient", + "shortName": "ErrorGroupServiceClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorGroupServiceClient.update_group", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService.UpdateGroup", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", "shortName": "ErrorGroupService" }, "shortName": "UpdateGroup" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest" + }, + { + "name": "group", + "type": "google.cloud.errorreporting_v1beta1.types.ErrorGroup" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.types.ErrorGroup", + "shortName": "update_group" }, + "description": "Sample for UpdateGroup", "file": "clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_sync", "segments": [ { @@ -176,19 +329,55 @@ "start": 41, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py" }, { + "canonical": true, "clientMethod": { "async": true, + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceAsyncClient", + "shortName": "ErrorStatsServiceAsyncClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceAsyncClient.delete_events", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.DeleteEvents", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", "shortName": "ErrorStatsService" }, "shortName": "DeleteEvents" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest" + }, + { + "name": "project_name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse", + "shortName": "delete_events" }, + "description": "Sample for DeleteEvents", "file": "clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_async", "segments": [ { @@ -221,18 +410,54 @@ "start": 42, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py" }, { + "canonical": true, "clientMethod": { + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceClient", + "shortName": "ErrorStatsServiceClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceClient.delete_events", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.DeleteEvents", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", "shortName": "ErrorStatsService" }, "shortName": "DeleteEvents" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest" + }, + { + "name": "project_name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse", + "shortName": "delete_events" }, + "description": "Sample for DeleteEvents", "file": "clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_sync", "segments": [ { @@ -265,19 +490,59 @@ "start": 42, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py" }, { + "canonical": true, "clientMethod": { "async": true, + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceAsyncClient", + "shortName": "ErrorStatsServiceAsyncClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceAsyncClient.list_events", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListEvents", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", "shortName": "ErrorStatsService" }, "shortName": "ListEvents" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.ListEventsRequest" + }, + { + "name": "project_name", + "type": "str" + }, + { + "name": "group_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListEventsAsyncPager", + "shortName": "list_events" }, + "description": "Sample for ListEvents", "file": "clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_async", "segments": [ { @@ -310,18 +575,58 @@ "start": 43, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py" }, { + "canonical": true, "clientMethod": { + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceClient", + "shortName": "ErrorStatsServiceClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceClient.list_events", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListEvents", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", "shortName": "ErrorStatsService" }, "shortName": "ListEvents" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.ListEventsRequest" + }, + { + "name": "project_name", + "type": "str" + }, + { + "name": "group_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListEventsPager", + "shortName": "list_events" }, + "description": "Sample for ListEvents", "file": "clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_sync", "segments": [ { @@ -354,19 +659,59 @@ "start": 43, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py" }, { + "canonical": true, "clientMethod": { "async": true, + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceAsyncClient", + "shortName": "ErrorStatsServiceAsyncClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceAsyncClient.list_group_stats", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", "shortName": "ErrorStatsService" }, "shortName": "ListGroupStats" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest" + }, + { + "name": "project_name", + "type": "str" + }, + { + "name": "time_range", + "type": "google.cloud.errorreporting_v1beta1.types.QueryTimeRange" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListGroupStatsAsyncPager", + "shortName": "list_group_stats" }, + "description": "Sample for ListGroupStats", "file": "clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_async", "segments": [ { @@ -399,18 +744,58 @@ "start": 42, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py" }, { + "canonical": true, "clientMethod": { + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceClient", + "shortName": "ErrorStatsServiceClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ErrorStatsServiceClient.list_group_stats", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", "shortName": "ErrorStatsService" }, "shortName": "ListGroupStats" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest" + }, + { + "name": "project_name", + "type": "str" + }, + { + "name": "time_range", + "type": "google.cloud.errorreporting_v1beta1.types.QueryTimeRange" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListGroupStatsPager", + "shortName": "list_group_stats" }, + "description": "Sample for ListGroupStats", "file": "clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_sync", "segments": [ { @@ -443,19 +828,59 @@ "start": 42, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py" }, { + "canonical": true, "clientMethod": { "async": true, + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ReportErrorsServiceAsyncClient", + "shortName": "ReportErrorsServiceAsyncClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ReportErrorsServiceAsyncClient.report_error_event", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService.ReportErrorEvent", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", "shortName": "ReportErrorsService" }, "shortName": "ReportErrorEvent" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest" + }, + { + "name": "project_name", + "type": "str" + }, + { + "name": "event", + "type": "google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse", + "shortName": "report_error_event" }, + "description": "Sample for ReportErrorEvent", "file": "clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_async", "segments": [ { @@ -488,18 +913,58 @@ "start": 46, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py" }, { + "canonical": true, "clientMethod": { + "client": { + "fullName": "google.cloud.errorreporting_v1beta1.ReportErrorsServiceClient", + "shortName": "ReportErrorsServiceClient" + }, + "fullName": "google.cloud.errorreporting_v1beta1.ReportErrorsServiceClient.report_error_event", "method": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService.ReportErrorEvent", "service": { + "fullName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", "shortName": "ReportErrorsService" }, "shortName": "ReportErrorEvent" - } + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest" + }, + { + "name": "project_name", + "type": "str" + }, + { + "name": "event", + "type": "google.cloud.errorreporting_v1beta1.types.ReportedErrorEvent" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse", + "shortName": "report_error_event" }, + "description": "Sample for ReportErrorEvent", "file": "clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", "regionTag": "clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_sync", "segments": [ { @@ -532,7 +997,8 @@ "start": 46, "type": "RESPONSE_HANDLING" } - ] + ], + "title": "clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py" } ] } diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 844f7414d489..a9dce8c89939 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -90,24 +90,26 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", + "client_class,transport_name", [ - ErrorGroupServiceClient, - ErrorGroupServiceAsyncClient, + (ErrorGroupServiceClient, "grpc"), + (ErrorGroupServiceAsyncClient, "grpc_asyncio"), ], ) -def test_error_group_service_client_from_service_account_info(client_class): +def test_error_group_service_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) + 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 == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") @pytest.mark.parametrize( @@ -136,27 +138,33 @@ def test_error_group_service_client_service_account_always_use_jwt( @pytest.mark.parametrize( - "client_class", + "client_class,transport_name", [ - ErrorGroupServiceClient, - ErrorGroupServiceAsyncClient, + (ErrorGroupServiceClient, "grpc"), + (ErrorGroupServiceAsyncClient, "grpc_asyncio"), ], ) -def test_error_group_service_client_from_service_account_file(client_class): +def test_error_group_service_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") + 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") + 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 == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") def test_error_group_service_client_get_transport_class(): @@ -1219,6 +1227,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = ErrorGroupServiceClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_transport_grpc_default(): # A client should use the gRPC transport by default. client = ErrorGroupServiceClient( @@ -1262,6 +1283,14 @@ def test_error_group_service_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_error_group_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file @@ -1409,24 +1438,40 @@ def test_error_group_service_grpc_transport_client_cert_source_for_mtls( ) -def test_error_group_service_host_no_port(): +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_error_group_service_host_no_port(transport_name): client = ErrorGroupServiceClient( credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com" ), + transport=transport_name, ) - assert client.transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") -def test_error_group_service_host_with_port(): +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_error_group_service_host_with_port(transport_name): client = ErrorGroupServiceClient( credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com:8000" ), + transport=transport_name, ) - assert client.transport._host == "clouderrorreporting.googleapis.com:8000" + assert client.transport._host == ("clouderrorreporting.googleapis.com:8000") def test_error_group_service_grpc_transport_channel(): diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index dd2730f73ebc..13f57f23b342 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -93,24 +93,26 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", + "client_class,transport_name", [ - ErrorStatsServiceClient, - ErrorStatsServiceAsyncClient, + (ErrorStatsServiceClient, "grpc"), + (ErrorStatsServiceAsyncClient, "grpc_asyncio"), ], ) -def test_error_stats_service_client_from_service_account_info(client_class): +def test_error_stats_service_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) + 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 == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") @pytest.mark.parametrize( @@ -139,27 +141,33 @@ def test_error_stats_service_client_service_account_always_use_jwt( @pytest.mark.parametrize( - "client_class", + "client_class,transport_name", [ - ErrorStatsServiceClient, - ErrorStatsServiceAsyncClient, + (ErrorStatsServiceClient, "grpc"), + (ErrorStatsServiceAsyncClient, "grpc_asyncio"), ], ) -def test_error_stats_service_client_from_service_account_file(client_class): +def test_error_stats_service_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") + 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") + 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 == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") def test_error_stats_service_client_get_transport_class(): @@ -1048,7 +1056,7 @@ async def test_list_group_stats_async_pager(): ) assert async_pager.next_page_token == "abc" responses = [] - async for response in async_pager: + async for response in async_pager: # pragma: no branch responses.append(response) assert len(responses) == 6 @@ -1096,7 +1104,9 @@ async def test_list_group_stats_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_group_stats(request={})).pages: + async for page_ in ( + await client.list_group_stats(request={}) + ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -1478,7 +1488,7 @@ async def test_list_events_async_pager(): ) assert async_pager.next_page_token == "abc" responses = [] - async for response in async_pager: + async for response in async_pager: # pragma: no branch responses.append(response) assert len(responses) == 6 @@ -1524,7 +1534,9 @@ async def test_list_events_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_events(request={})).pages: + async for page_ in ( + await client.list_events(request={}) + ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -1848,6 +1860,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = ErrorStatsServiceClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_transport_grpc_default(): # A client should use the gRPC transport by default. client = ErrorStatsServiceClient( @@ -1892,6 +1917,14 @@ def test_error_stats_service_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_error_stats_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file @@ -2039,24 +2072,40 @@ def test_error_stats_service_grpc_transport_client_cert_source_for_mtls( ) -def test_error_stats_service_host_no_port(): +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_error_stats_service_host_no_port(transport_name): client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com" ), + transport=transport_name, ) - assert client.transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") -def test_error_stats_service_host_with_port(): +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_error_stats_service_host_with_port(transport_name): client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com:8000" ), + transport=transport_name, ) - assert client.transport._host == "clouderrorreporting.googleapis.com:8000" + assert client.transport._host == ("clouderrorreporting.googleapis.com:8000") def test_error_stats_service_grpc_transport_channel(): diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index cf123818c161..2fd72f9fdd3a 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -93,24 +93,26 @@ def test__get_default_mtls_endpoint(): @pytest.mark.parametrize( - "client_class", + "client_class,transport_name", [ - ReportErrorsServiceClient, - ReportErrorsServiceAsyncClient, + (ReportErrorsServiceClient, "grpc"), + (ReportErrorsServiceAsyncClient, "grpc_asyncio"), ], ) -def test_report_errors_service_client_from_service_account_info(client_class): +def test_report_errors_service_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) + 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 == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") @pytest.mark.parametrize( @@ -139,27 +141,33 @@ def test_report_errors_service_client_service_account_always_use_jwt( @pytest.mark.parametrize( - "client_class", + "client_class,transport_name", [ - ReportErrorsServiceClient, - ReportErrorsServiceAsyncClient, + (ReportErrorsServiceClient, "grpc"), + (ReportErrorsServiceAsyncClient, "grpc_asyncio"), ], ) -def test_report_errors_service_client_from_service_account_file(client_class): +def test_report_errors_service_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") + 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") + 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 == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") def test_report_errors_service_client_get_transport_class(): @@ -1021,6 +1029,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = ReportErrorsServiceClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_transport_grpc_default(): # A client should use the gRPC transport by default. client = ReportErrorsServiceClient( @@ -1061,6 +1082,14 @@ def test_report_errors_service_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_report_errors_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file @@ -1208,24 +1237,40 @@ def test_report_errors_service_grpc_transport_client_cert_source_for_mtls( ) -def test_report_errors_service_host_no_port(): +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_report_errors_service_host_no_port(transport_name): client = ReportErrorsServiceClient( credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com" ), + transport=transport_name, ) - assert client.transport._host == "clouderrorreporting.googleapis.com:443" + assert client.transport._host == ("clouderrorreporting.googleapis.com:443") -def test_report_errors_service_host_with_port(): +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_report_errors_service_host_with_port(transport_name): client = ReportErrorsServiceClient( credentials=ga_credentials.AnonymousCredentials(), client_options=client_options.ClientOptions( api_endpoint="clouderrorreporting.googleapis.com:8000" ), + transport=transport_name, ) - assert client.transport._host == "clouderrorreporting.googleapis.com:8000" + assert client.transport._host == ("clouderrorreporting.googleapis.com:8000") def test_report_errors_service_grpc_transport_channel(): From 404a298e17de74c1113ee7d4e5146ba2e637bfbe Mon Sep 17 00:00:00 2001 From: losalex <90795544+losalex@users.noreply.github.com> Date: Sat, 16 Apr 2022 00:49:38 -0500 Subject: [PATCH 334/467] fix: Reenable staleness bot (#264) * fix: Reenable staleness bot Reenable staleness bot on the repo * Update auto-label.yaml --- packages/google-cloud-error-reporting/.github/auto-label.yaml | 4 ++++ packages/google-cloud-error-reporting/owlbot.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.github/auto-label.yaml b/packages/google-cloud-error-reporting/.github/auto-label.yaml index 41bff0b5375a..ccad49b4ebfb 100644 --- a/packages/google-cloud-error-reporting/.github/auto-label.yaml +++ b/packages/google-cloud-error-reporting/.github/auto-label.yaml @@ -13,3 +13,7 @@ # limitations under the License. requestsize: enabled: true +staleness: + pullrequest: true + old: 30 + extraold: 60 diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 08f2c9f71847..5bc3f034732f 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -34,7 +34,7 @@ microgenerator=True, cov_level=100, ) -s.move(templated_files, excludes=[".coveragerc"]) # microgenerator has a good .coveragerc file +s.move(templated_files, excludes=[".coveragerc", ".github/auto-label.yaml"]) # microgenerator has a good .coveragerc file # ---------------------------------------------------------------------------- # Samples templates From 86612e6dac5a3022bbf9130e740faea6df9a9912 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Fri, 15 Apr 2022 22:59:50 -0700 Subject: [PATCH 335/467] chore(main): release 1.5.2 (#265) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index a935a4aa944a..3c87476b4fb8 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +### [1.5.2](https://github.com/googleapis/python-error-reporting/compare/v1.5.1...v1.5.2) (2022-04-16) + + +### Bug Fixes + +* Reenable staleness bot ([#264](https://github.com/googleapis/python-error-reporting/issues/264)) ([393141a](https://github.com/googleapis/python-error-reporting/commit/393141ac2c661485fdafb8f21fe13a6b2c854d07)) + ### [1.5.1](https://github.com/googleapis/python-error-reporting/compare/v1.5.0...v1.5.1) (2022-03-07) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 9dc541c2e63c..a2a137e04134 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.5.1" +version = "1.5.2" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 4958e5cecb66620a2a6486b705649ca2285abe4a Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Sat, 16 Apr 2022 08:18:34 +0200 Subject: [PATCH 336/467] chore(deps): update dependency google-cloud-error-reporting to v1.5.2 (#266) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 285dc70c6fd5..d44c41051f52 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.5.1 +google-cloud-error-reporting==1.5.2 From 5d16665607c92e6111f31474a504ebf06afc6989 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 20 Apr 2022 20:49:41 -0400 Subject: [PATCH 337/467] chore(python): add nox session to sort python imports (#267) Source-Link: https://github.com/googleapis/synthtool/commit/1b71c10e20de7ed3f97f692f99a0e3399b67049f Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:00c9d764fd1cd56265f12a5ef4b99a0c9e87cf261018099141e2ca5158890416 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +-- .../google-cloud-error-reporting/noxfile.py | 27 ++++++++++++++++--- .../samples/snippets/api/noxfile.py | 21 +++++++++++++++ .../snippets/fluent_on_compute/noxfile.py | 21 +++++++++++++++ 4 files changed, 68 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index bc893c979e20..7c454abf76f3 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:8a5d3f6a2e43ed8293f34e06a2f56931d1e88a2694c3bb11b15df4eb256ad163 -# created: 2022-04-06T10:30:21.687684602Z + digest: sha256:00c9d764fd1cd56265f12a5ef4b99a0c9e87cf261018099141e2ca5158890416 +# created: 2022-04-20T23:42:53.970438194Z diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 6ee5e8ab96d9..92da31f8c16d 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -25,7 +25,8 @@ import nox BLACK_VERSION = "black==22.3.0" -BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] +ISORT_VERSION = "isort==5.10.1" +LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] DEFAULT_PYTHON_VERSION = "3.8" @@ -83,7 +84,7 @@ def lint(session): session.run( "black", "--check", - *BLACK_PATHS, + *LINT_PATHS, ) session.run("flake8", "google", "tests") @@ -94,7 +95,27 @@ def blacken(session): session.install(BLACK_VERSION) session.run( "black", - *BLACK_PATHS, + *LINT_PATHS, + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def format(session): + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run( + "isort", + "--fss", + *LINT_PATHS, + ) + session.run( + "black", + *LINT_PATHS, ) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 949e0fde9ae1..38bb0a572b81 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -30,6 +30,7 @@ # WARNING - WARNING - WARNING - WARNING - WARNING BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" # Copy `noxfile_config.py` to your directory and modify it instead. @@ -168,12 +169,32 @@ def lint(session: nox.sessions.Session) -> None: @nox.session def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" session.install(BLACK_VERSION) python_files = [path for path in os.listdir(".") if path.endswith(".py")] session.run("black", *python_files) +# +# format = isort + black +# + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + # # Sample Tests # diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 949e0fde9ae1..38bb0a572b81 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -30,6 +30,7 @@ # WARNING - WARNING - WARNING - WARNING - WARNING BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" # Copy `noxfile_config.py` to your directory and modify it instead. @@ -168,12 +169,32 @@ def lint(session: nox.sessions.Session) -> None: @nox.session def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" session.install(BLACK_VERSION) python_files = [path for path in os.listdir(".") if path.endswith(".py")] session.run("black", *python_files) +# +# format = isort + black +# + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + # # Sample Tests # From 4804c56198ba069e81b765a8ffa5d3e92e5a74f5 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 21 Apr 2022 16:18:13 +0000 Subject: [PATCH 338/467] chore(python): use ubuntu 22.04 in docs image (#269) Source-Link: https://github.com/googleapis/synthtool/commit/f15cc72fb401b4861cedebb10af74afe428fb1f8 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:bc5eed3804aec2f05fad42aacf973821d9500c174015341f721a984a0825b6fd --- .../.github/.OwlBot.lock.yaml | 4 ++-- .../.kokoro/docker/docs/Dockerfile | 20 +++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 7c454abf76f3..64f82d6bf4bc 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:00c9d764fd1cd56265f12a5ef4b99a0c9e87cf261018099141e2ca5158890416 -# created: 2022-04-20T23:42:53.970438194Z + digest: sha256:bc5eed3804aec2f05fad42aacf973821d9500c174015341f721a984a0825b6fd +# created: 2022-04-21T15:43:16.246106921Z diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile index 4e1b1fb8b5a5..238b87b9d1c9 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from ubuntu:20.04 +from ubuntu:22.04 ENV DEBIAN_FRONTEND noninteractive @@ -60,8 +60,24 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* \ && rm -f /var/cache/apt/archives/*.deb +###################### Install python 3.8.11 + +# Download python 3.8.11 +RUN wget https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tgz + +# Extract files +RUN tar -xvf Python-3.8.11.tgz + +# Install python 3.8.11 +RUN ./Python-3.8.11/configure --enable-optimizations +RUN make altinstall + +###################### Install pip RUN wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ - && python3.8 /tmp/get-pip.py \ + && python3 /tmp/get-pip.py \ && rm /tmp/get-pip.py +# Test pip +RUN python3 -m pip + CMD ["python3.8"] From 623dad4dd9249104980f286eb9b708b2ed2c0f06 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 25 Apr 2022 17:01:42 +0200 Subject: [PATCH 339/467] chore(deps): update dependency pytest to v7.1.2 (#270) --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index 4f6bf643fc5e..d00689e0623a 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==7.1.1 +pytest==7.1.2 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index 5e29de931dd5..fb466e5093ef 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==7.1.1 +pytest==7.1.2 mock==4.0.3 From 89560e8a02e6e062cf375b891511bb07f5b85da3 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 27 Apr 2022 10:37:34 -0600 Subject: [PATCH 340/467] chore: use gapic-generator-python 0.65.2 (#271) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: use gapic-generator-python 0.65.2 PiperOrigin-RevId: 444333013 Source-Link: https://github.com/googleapis/googleapis/commit/f91b6cf82e929280f6562f6110957c654bd9e2e6 Source-Link: https://github.com/googleapis/googleapis-gen/commit/16eb36095c294e712c74a1bf23550817b42174e5 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMTZlYjM2MDk1YzI5NGU3MTJjNzRhMWJmMjM1NTA4MTdiNDIxNzRlNSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../error_group_service/async_client.py | 12 ++++---- .../error_stats_service/async_client.py | 18 ++++++------ .../report_errors_service/async_client.py | 6 ++-- .../test_error_group_service.py | 16 +++++------ .../test_error_stats_service.py | 28 +++++++++---------- .../test_report_errors_service.py | 8 +++--- 6 files changed, 44 insertions(+), 44 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 6316e62a7d0a..0a03d9a39b53 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -219,9 +219,9 @@ async def get_group( from google.cloud import errorreporting_v1beta1 - def sample_get_group(): + async def sample_get_group(): # Create a client - client = errorreporting_v1beta1.ErrorGroupServiceClient() + client = errorreporting_v1beta1.ErrorGroupServiceAsyncClient() # Initialize request argument(s) request = errorreporting_v1beta1.GetGroupRequest( @@ -229,7 +229,7 @@ def sample_get_group(): ) # Make the request - response = client.get_group(request=request) + response = await client.get_group(request=request) # Handle the response print(response) @@ -321,16 +321,16 @@ async def update_group( from google.cloud import errorreporting_v1beta1 - def sample_update_group(): + async def sample_update_group(): # Create a client - client = errorreporting_v1beta1.ErrorGroupServiceClient() + client = errorreporting_v1beta1.ErrorGroupServiceAsyncClient() # Initialize request argument(s) request = errorreporting_v1beta1.UpdateGroupRequest( ) # Make the request - response = client.update_group(request=request) + response = await client.update_group(request=request) # Handle the response print(response) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 13cd9f089849..03095875ac3a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -223,9 +223,9 @@ async def list_group_stats( from google.cloud import errorreporting_v1beta1 - def sample_list_group_stats(): + async def sample_list_group_stats(): # Create a client - client = errorreporting_v1beta1.ErrorStatsServiceClient() + client = errorreporting_v1beta1.ErrorStatsServiceAsyncClient() # Initialize request argument(s) request = errorreporting_v1beta1.ListGroupStatsRequest( @@ -236,7 +236,7 @@ def sample_list_group_stats(): page_result = client.list_group_stats(request=request) # Handle the response - for response in page_result: + async for response in page_result: print(response) Args: @@ -355,9 +355,9 @@ async def list_events( from google.cloud import errorreporting_v1beta1 - def sample_list_events(): + async def sample_list_events(): # Create a client - client = errorreporting_v1beta1.ErrorStatsServiceClient() + client = errorreporting_v1beta1.ErrorStatsServiceAsyncClient() # Initialize request argument(s) request = errorreporting_v1beta1.ListEventsRequest( @@ -369,7 +369,7 @@ def sample_list_events(): page_result = client.list_events(request=request) # Handle the response - for response in page_result: + async for response in page_result: print(response) Args: @@ -479,9 +479,9 @@ async def delete_events( from google.cloud import errorreporting_v1beta1 - def sample_delete_events(): + async def sample_delete_events(): # Create a client - client = errorreporting_v1beta1.ErrorStatsServiceClient() + client = errorreporting_v1beta1.ErrorStatsServiceAsyncClient() # Initialize request argument(s) request = errorreporting_v1beta1.DeleteEventsRequest( @@ -489,7 +489,7 @@ def sample_delete_events(): ) # Make the request - response = client.delete_events(request=request) + response = await client.delete_events(request=request) # Handle the response print(response) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index a7ab63d2d4eb..a8f85c3315b9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -231,9 +231,9 @@ async def report_error_event( from google.cloud import errorreporting_v1beta1 - def sample_report_error_event(): + async def sample_report_error_event(): # Create a client - client = errorreporting_v1beta1.ReportErrorsServiceClient() + client = errorreporting_v1beta1.ReportErrorsServiceAsyncClient() # Initialize request argument(s) event = errorreporting_v1beta1.ReportedErrorEvent() @@ -245,7 +245,7 @@ def sample_report_error_event(): ) # Make the request - response = client.report_error_event(request=request) + response = await client.report_error_event(request=request) # Handle the response print(response) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index a9dce8c89939..3102de8af15e 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -770,7 +770,7 @@ def test_get_group_field_headers(): # a field header. Set these to a non-empty value. request = error_group_service.GetGroupRequest() - request.group_name = "group_name/value" + request.group_name = "group_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.get_group), "__call__") as call: @@ -786,7 +786,7 @@ def test_get_group_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "group_name=group_name/value", + "group_name=group_name_value", ) in kw["metadata"] @@ -800,7 +800,7 @@ async def test_get_group_field_headers_async(): # a field header. Set these to a non-empty value. request = error_group_service.GetGroupRequest() - request.group_name = "group_name/value" + request.group_name = "group_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.get_group), "__call__") as call: @@ -816,7 +816,7 @@ async def test_get_group_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "group_name=group_name/value", + "group_name=group_name_value", ) in kw["metadata"] @@ -1006,7 +1006,7 @@ def test_update_group_field_headers(): # a field header. Set these to a non-empty value. request = error_group_service.UpdateGroupRequest() - request.group.name = "group.name/value" + request.group.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.update_group), "__call__") as call: @@ -1022,7 +1022,7 @@ def test_update_group_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "group.name=group.name/value", + "group.name=name_value", ) in kw["metadata"] @@ -1036,7 +1036,7 @@ async def test_update_group_field_headers_async(): # a field header. Set these to a non-empty value. request = error_group_service.UpdateGroupRequest() - request.group.name = "group.name/value" + request.group.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.update_group), "__call__") as call: @@ -1052,7 +1052,7 @@ async def test_update_group_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "group.name=group.name/value", + "group.name=name_value", ) in kw["metadata"] diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 13f57f23b342..bcb18ece18e7 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -766,7 +766,7 @@ def test_list_group_stats_field_headers(): # a field header. Set these to a non-empty value. request = error_stats_service.ListGroupStatsRequest() - request.project_name = "project_name/value" + request.project_name = "project_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: @@ -782,7 +782,7 @@ def test_list_group_stats_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "project_name=project_name/value", + "project_name=project_name_value", ) in kw["metadata"] @@ -796,7 +796,7 @@ async def test_list_group_stats_field_headers_async(): # a field header. Set these to a non-empty value. request = error_stats_service.ListGroupStatsRequest() - request.project_name = "project_name/value" + request.project_name = "project_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: @@ -814,7 +814,7 @@ async def test_list_group_stats_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "project_name=project_name/value", + "project_name=project_name_value", ) in kw["metadata"] @@ -967,7 +967,7 @@ def test_list_group_stats_pager(transport_name: str = "grpc"): assert pager._metadata == metadata - results = [i for i in pager] + results = list(pager) assert len(results) == 6 assert all(isinstance(i, error_stats_service.ErrorGroupStats) for i in results) @@ -1210,7 +1210,7 @@ def test_list_events_field_headers(): # a field header. Set these to a non-empty value. request = error_stats_service.ListEventsRequest() - request.project_name = "project_name/value" + request.project_name = "project_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: @@ -1226,7 +1226,7 @@ def test_list_events_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "project_name=project_name/value", + "project_name=project_name_value", ) in kw["metadata"] @@ -1240,7 +1240,7 @@ async def test_list_events_field_headers_async(): # a field header. Set these to a non-empty value. request = error_stats_service.ListEventsRequest() - request.project_name = "project_name/value" + request.project_name = "project_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: @@ -1258,7 +1258,7 @@ async def test_list_events_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "project_name=project_name/value", + "project_name=project_name_value", ) in kw["metadata"] @@ -1399,7 +1399,7 @@ def test_list_events_pager(transport_name: str = "grpc"): assert pager._metadata == metadata - results = [i for i in pager] + results = list(pager) assert len(results) == 6 assert all(isinstance(i, common.ErrorEvent) for i in results) @@ -1635,7 +1635,7 @@ def test_delete_events_field_headers(): # a field header. Set these to a non-empty value. request = error_stats_service.DeleteEventsRequest() - request.project_name = "project_name/value" + request.project_name = "project_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.delete_events), "__call__") as call: @@ -1651,7 +1651,7 @@ def test_delete_events_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "project_name=project_name/value", + "project_name=project_name_value", ) in kw["metadata"] @@ -1665,7 +1665,7 @@ async def test_delete_events_field_headers_async(): # a field header. Set these to a non-empty value. request = error_stats_service.DeleteEventsRequest() - request.project_name = "project_name/value" + request.project_name = "project_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.delete_events), "__call__") as call: @@ -1683,7 +1683,7 @@ async def test_delete_events_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "project_name=project_name/value", + "project_name=project_name_value", ) in kw["metadata"] diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 2fd72f9fdd3a..01b90e7fd704 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -774,7 +774,7 @@ def test_report_error_event_field_headers(): # a field header. Set these to a non-empty value. request = report_errors_service.ReportErrorEventRequest() - request.project_name = "project_name/value" + request.project_name = "project_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -792,7 +792,7 @@ def test_report_error_event_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "project_name=project_name/value", + "project_name=project_name_value", ) in kw["metadata"] @@ -806,7 +806,7 @@ async def test_report_error_event_field_headers_async(): # a field header. Set these to a non-empty value. request = report_errors_service.ReportErrorEventRequest() - request.project_name = "project_name/value" + request.project_name = "project_name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -826,7 +826,7 @@ async def test_report_error_event_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "project_name=project_name/value", + "project_name=project_name_value", ) in kw["metadata"] From 78a1a58caa6e7331160fb8903b021d0d9c8814be Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 5 May 2022 12:00:06 -0400 Subject: [PATCH 341/467] chore: [autoapprove] update readme_gen.py to include autoescape True (#272) Source-Link: https://github.com/googleapis/synthtool/commit/6b4d5a6407d740beb4158b302194a62a4108a8a6 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:f792ee1320e03eda2d13a5281a2989f7ed8a9e50b73ef6da97fac7e1e850b149 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../scripts/readme-gen/readme_gen.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 64f82d6bf4bc..b631901e99f4 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:bc5eed3804aec2f05fad42aacf973821d9500c174015341f721a984a0825b6fd -# created: 2022-04-21T15:43:16.246106921Z + digest: sha256:f792ee1320e03eda2d13a5281a2989f7ed8a9e50b73ef6da97fac7e1e850b149 +# created: 2022-05-05T15:17:27.599381182Z diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py b/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py index d309d6e97518..91b59676bfc7 100644 --- a/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py @@ -28,7 +28,10 @@ jinja_env = jinja2.Environment( trim_blocks=True, loader=jinja2.FileSystemLoader( - os.path.abspath(os.path.join(os.path.dirname(__file__), 'templates')))) + os.path.abspath(os.path.join(os.path.dirname(__file__), "templates")) + ), + autoescape=True, +) README_TMPL = jinja_env.get_template('README.tmpl.rst') From 8ad666c4e7b7fd1b4b5994a2117640b6f68165b4 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 5 May 2022 23:12:26 +0000 Subject: [PATCH 342/467] chore(python): auto approve template changes (#274) Source-Link: https://github.com/googleapis/synthtool/commit/453a5d9c9a55d1969240a37d36cec626d20a9024 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:81ed5ecdfc7cac5b699ba4537376f3563f6f04122c4ec9e735d3b3dc1d43dd32 --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../google-cloud-error-reporting/.github/auto-approve.yml | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.github/auto-approve.yml diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index b631901e99f4..757c9dca75ad 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:f792ee1320e03eda2d13a5281a2989f7ed8a9e50b73ef6da97fac7e1e850b149 -# created: 2022-05-05T15:17:27.599381182Z + digest: sha256:81ed5ecdfc7cac5b699ba4537376f3563f6f04122c4ec9e735d3b3dc1d43dd32 +# created: 2022-05-05T22:08:23.383410683Z diff --git a/packages/google-cloud-error-reporting/.github/auto-approve.yml b/packages/google-cloud-error-reporting/.github/auto-approve.yml new file mode 100644 index 000000000000..311ebbb853a9 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/auto-approve.yml @@ -0,0 +1,3 @@ +# https://github.com/googleapis/repo-automation-bots/tree/main/packages/auto-approve +processes: + - "OwlBotTemplateChanges" From c80f7fb81c03c2a4a358dac072929ed34f5c0792 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 17:24:36 +0000 Subject: [PATCH 343/467] chore: use gapic-generator-python 1.0.0 (#345) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 451250442 Source-Link: https://github.com/googleapis/googleapis/commit/cca5e8181f6442b134e8d4d206fbe9e0e74684ba Source-Link: https://github.com/googleapis/googleapis-gen/commit/0b219da161a8bdcc3c6f7b2efcd82105182a30ca Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMGIyMTlkYTE2MWE4YmRjYzNjNmY3YjJlZmNkODIxMDUxODJhMzBjYSJ9 --- .../errorreporting_v1beta1/test_error_group_service.py | 8 +++++++- .../errorreporting_v1beta1/test_error_stats_service.py | 8 +++++++- .../errorreporting_v1beta1/test_report_errors_service.py | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 3102de8af15e..96f3472f3696 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -14,7 +14,13 @@ # limitations under the License. # import os -import mock + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock +except ImportError: + import mock import grpc from grpc.experimental import aio diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index bcb18ece18e7..d3d0634b6af8 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -14,7 +14,13 @@ # limitations under the License. # import os -import mock + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock +except ImportError: + import mock import grpc from grpc.experimental import aio diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 01b90e7fd704..184946733106 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -14,7 +14,13 @@ # limitations under the License. # import os -import mock + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock +except ImportError: + import mock import grpc from grpc.experimental import aio From 24a3bf4df0270794de80008ad96bebd88ffeec43 Mon Sep 17 00:00:00 2001 From: Dan Lee <71398022+dandhlee@users.noreply.github.com> Date: Wed, 1 Jun 2022 13:45:31 -0400 Subject: [PATCH 344/467] docs: fix changelog header to consistent size (#346) --- .../google-cloud-error-reporting/CHANGELOG.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 3c87476b4fb8..829205461684 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,14 +4,14 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history -### [1.5.2](https://github.com/googleapis/python-error-reporting/compare/v1.5.1...v1.5.2) (2022-04-16) +## [1.5.2](https://github.com/googleapis/python-error-reporting/compare/v1.5.1...v1.5.2) (2022-04-16) ### Bug Fixes * Reenable staleness bot ([#264](https://github.com/googleapis/python-error-reporting/issues/264)) ([393141a](https://github.com/googleapis/python-error-reporting/commit/393141ac2c661485fdafb8f21fe13a6b2c854d07)) -### [1.5.1](https://github.com/googleapis/python-error-reporting/compare/v1.5.0...v1.5.1) (2022-03-07) +## [1.5.1](https://github.com/googleapis/python-error-reporting/compare/v1.5.0...v1.5.1) (2022-03-07) ### Bug Fixes @@ -32,7 +32,7 @@ * resolve DuplicateCredentialArgs error when using credentials_file ([f0afcae](https://github.com/googleapis/python-error-reporting/commit/f0afcae54c834872d1e40d1f5c948c1e0c299b85)) -### [1.4.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.4.0...v1.4.1) (2021-11-01) +## [1.4.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.4.0...v1.4.1) (2021-11-01) ### Bug Fixes @@ -65,14 +65,14 @@ * exception thrown when grpc is disabled ([#190](https://www.github.com/googleapis/python-error-reporting/issues/190)) ([929e293](https://www.github.com/googleapis/python-error-reporting/commit/929e293a479dea3059bfca152b93d7740348fc39)) * improper types in pagers generation ([18c93a9](https://www.github.com/googleapis/python-error-reporting/commit/18c93a99a967b6d86e7409f4e26ff56f1c9788de)) -### [1.2.3](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.2...v1.2.3) (2021-09-24) +## [1.2.3](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.2...v1.2.3) (2021-09-24) ### Bug Fixes * add 'dict' annotation type to 'request' ([253a66f](https://www.github.com/googleapis/python-error-reporting/commit/253a66f5f606f722bf5401cdd678989b9d2baa98)) -### [1.2.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.1...v1.2.2) (2021-07-28) +## [1.2.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.1...v1.2.2) (2021-07-28) ### Bug Fixes @@ -89,7 +89,7 @@ * release as 1.2.2 ([#157](https://www.github.com/googleapis/python-error-reporting/issues/157)) ([ea26377](https://www.github.com/googleapis/python-error-reporting/commit/ea2637721efac36b122edc499da08c12ae894d28)) -### [1.2.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.0...v1.2.1) (2021-07-20) +## [1.2.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.2.0...v1.2.1) (2021-07-20) ### Bug Fixes @@ -116,14 +116,14 @@ * omit mention of Python 2.7 in 'CONTRIBUTING.rst' ([#1127](https://www.github.com/googleapis/python-error-reporting/issues/1127)) ([#137](https://www.github.com/googleapis/python-error-reporting/issues/137)) ([0ca7d43](https://www.github.com/googleapis/python-error-reporting/commit/0ca7d4385de86e7ff462322807a717345774c017)) -### [1.1.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.1...v1.1.2) (2021-04-05) +## [1.1.2](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.1...v1.1.2) (2021-04-05) ### Dependencies * upgrade sphinx ([#99](https://www.github.com/googleapis/python-error-reporting/issues/99)) ([a118123](https://www.github.com/googleapis/python-error-reporting/commit/a118123cbfe8b5dd2a7ba260631b248c351cb116)) -### [1.1.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.0...v1.1.1) (2021-02-25) +## [1.1.1](https://www.github.com/googleapis/python-error-reporting/compare/v1.1.0...v1.1.1) (2021-02-25) ### Bug Fixes From 2213308b85f7e0c81f50095998d05fd09322b9a1 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Wed, 1 Jun 2022 14:10:00 -0400 Subject: [PATCH 345/467] fix(deps): require protobuf <4.0.0dev (#347) --- packages/google-cloud-error-reporting/setup.py | 3 ++- .../google-cloud-error-reporting/testing/constraints-3.6.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index a2a137e04134..8e6f6038d3f3 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -34,7 +34,8 @@ # Until this issue is closed # https://github.com/googleapis/google-cloud-python/issues/10566 "google-api-core[grpc] >= 1.31.5, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0", - "proto-plus >= 1.15.0", + "proto-plus >= 1.15.0, <2.0.0dev", + "protobuf >= 3.19.0, <4.0.0dev", ] extras = {} diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt index b81c6b5d6478..cf48a7f845b1 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt @@ -8,3 +8,4 @@ google-cloud-logging==1.14.0 google-api-core==1.31.5 proto-plus==1.15.0 +protobuf==3.19.0 From 993468932aa08c8e8621cd50aa25909192365732 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Tue, 7 Jun 2022 06:55:03 -0400 Subject: [PATCH 346/467] chore: test minimum dependencies in python 3.7 (#350) --- .../testing/constraints-3.7.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt index e69de29bb2d1..cf48a7f845b1 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt @@ -0,0 +1,11 @@ +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List *all* library dependencies and extras in this file. +# Pin the version to the lower bound. +# +# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", +# Then this file should have foo==1.14.0 +google-cloud-logging==1.14.0 +google-api-core==1.31.5 +proto-plus==1.15.0 +protobuf==3.19.0 From 5cd873edc77853ba0e6317872ba22f2d6a56f8b3 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 7 Jun 2022 07:18:13 -0400 Subject: [PATCH 347/467] chore(main): release 1.5.3 (#348) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 12 ++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 829205461684..30c79b90b43b 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,18 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.5.3](https://github.com/googleapis/python-error-reporting/compare/v1.5.2...v1.5.3) (2022-06-07) + + +### Bug Fixes + +* **deps:** require protobuf <4.0.0dev ([#347](https://github.com/googleapis/python-error-reporting/issues/347)) ([ad4c778](https://github.com/googleapis/python-error-reporting/commit/ad4c778e290eb76ea1d62252b5e115ca4c30d42c)) + + +### Documentation + +* fix changelog header to consistent size ([#346](https://github.com/googleapis/python-error-reporting/issues/346)) ([6dc90f7](https://github.com/googleapis/python-error-reporting/commit/6dc90f7e8978c06899c50f1897c160f5e253be79)) + ## [1.5.2](https://github.com/googleapis/python-error-reporting/compare/v1.5.1...v1.5.2) (2022-04-16) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 8e6f6038d3f3..468c2ceb618e 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.5.2" +version = "1.5.3" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 6a92fc0d0fa1f557d72ef57565d21ef925af32be Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 13 Jun 2022 06:12:35 -0400 Subject: [PATCH 348/467] chore: add prerelease nox session (#353) Source-Link: https://github.com/googleapis/synthtool/commit/d2871d98e1e767d4ad49a557ff979236d64361a1 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:b2dc5f80edcf5d4486c39068c9fa11f7f851d9568eea4dcba130f994ea9b5e97 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/continuous/prerelease-deps.cfg | 7 ++ .../.kokoro/presubmit/prerelease-deps.cfg | 7 ++ .../google-cloud-error-reporting/noxfile.py | 65 +++++++++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/continuous/prerelease-deps.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/presubmit/prerelease-deps.cfg diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 757c9dca75ad..50b29ffd2050 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:81ed5ecdfc7cac5b699ba4537376f3563f6f04122c4ec9e735d3b3dc1d43dd32 -# created: 2022-05-05T22:08:23.383410683Z + digest: sha256:b2dc5f80edcf5d4486c39068c9fa11f7f851d9568eea4dcba130f994ea9b5e97 +# created: 2022-06-12T16:09:31.61859086Z diff --git a/packages/google-cloud-error-reporting/.kokoro/continuous/prerelease-deps.cfg b/packages/google-cloud-error-reporting/.kokoro/continuous/prerelease-deps.cfg new file mode 100644 index 000000000000..3595fb43f5c0 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/continuous/prerelease-deps.cfg @@ -0,0 +1,7 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Only run this nox session. +env_vars: { + key: "NOX_SESSION" + value: "prerelease_deps" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/presubmit/prerelease-deps.cfg b/packages/google-cloud-error-reporting/.kokoro/presubmit/prerelease-deps.cfg new file mode 100644 index 000000000000..3595fb43f5c0 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/presubmit/prerelease-deps.cfg @@ -0,0 +1,7 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Only run this nox session. +env_vars: { + key: "NOX_SESSION" + value: "prerelease_deps" +} diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 92da31f8c16d..fe3a1fe2e8c8 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -19,6 +19,7 @@ from __future__ import absolute_import import os import pathlib +import re import shutil import warnings @@ -324,3 +325,67 @@ def docfx(session): os.path.join("docs", ""), os.path.join("docs", "_build", "html", ""), ) + + +@nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS) +def prerelease_deps(session): + """Run all tests with prerelease versions of dependencies installed.""" + + prerel_deps = [ + "protobuf", + "googleapis-common-protos", + "google-auth", + "grpcio", + "grpcio-status", + "google-api-core", + "proto-plus", + # dependencies of google-auth + "cryptography", + "pyasn1", + ] + + for dep in prerel_deps: + session.install("--pre", "--no-deps", "--upgrade", dep) + + # Remaining dependencies + other_deps = ["requests"] + session.install(*other_deps) + + session.install(*UNIT_TEST_STANDARD_DEPENDENCIES) + session.install(*SYSTEM_TEST_STANDARD_DEPENDENCIES) + + # Because we test minimum dependency versions on the minimum Python + # version, the first version we test with in the unit tests sessions has a + # constraints file containing all dependencies and extras. + with open( + CURRENT_DIRECTORY + / "testing" + / f"constraints-{UNIT_TEST_PYTHON_VERSIONS[0]}.txt", + encoding="utf-8", + ) as constraints_file: + constraints_text = constraints_file.read() + + # Ignore leading whitespace and comment lines. + deps = [ + match.group(1) + for match in re.finditer( + r"^\s*(\S+)(?===\S+)", constraints_text, flags=re.MULTILINE + ) + ] + + # Don't overwrite prerelease packages. + deps = [dep for dep in deps if dep not in prerel_deps] + # We use --no-deps to ensure that pre-release versions aren't overwritten + # by the version ranges in setup.py. + session.install(*deps) + session.install("--no-deps", "-e", ".[all]") + + # Print out prerelease package versions + session.run( + "python", "-c", "import google.protobuf; print(google.protobuf.__version__)" + ) + session.run("python", "-c", "import grpc; print(grpc.__version__)") + + session.run("py.test", "tests/unit") + session.run("py.test", "tests/system") + session.run("py.test", "samples/snippets") From 31344cb10f37c2d1da129c15194ad92451216798 Mon Sep 17 00:00:00 2001 From: Drew Brown Date: Mon, 27 Jun 2022 11:30:27 -0700 Subject: [PATCH 349/467] chore: Update blunderbuss (#355) --- packages/google-cloud-error-reporting/.github/blunderbuss.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/blunderbuss.yml b/packages/google-cloud-error-reporting/.github/blunderbuss.yml index 28438484fcbf..148ebf4e81cb 100644 --- a/packages/google-cloud-error-reporting/.github/blunderbuss.yml +++ b/packages/google-cloud-error-reporting/.github/blunderbuss.yml @@ -1,4 +1,4 @@ assign_issues: - - arbrown + - Daniel-Sanche assign_prs: - - arbrown + - Daniel-Sanche From b3a896f3bf41b7f5b3c0fc3bb96a6d496278cf1d Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sun, 10 Jul 2022 08:28:23 -0400 Subject: [PATCH 350/467] fix: require python 3.7+ (#358) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(python): drop python 3.6 Source-Link: https://github.com/googleapis/synthtool/commit/4f89b13af10d086458f9b379e56a614f9d6dab7b Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:e7bb19d47c13839fe8c147e50e02e8b6cf5da8edd1af8b82208cd6f66cc2829c * require python 3.7+ in setup.py * remove python 3.6 sample configs * add api_description to .repo-metadata.json * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/.OwlBot.lock.yaml | 4 +- .../.github/workflows/unittest.yml | 2 +- .../.kokoro/samples/python3.6/common.cfg | 40 --------- .../.kokoro/samples/python3.6/continuous.cfg | 7 -- .../samples/python3.6/periodic-head.cfg | 11 --- .../.kokoro/samples/python3.6/periodic.cfg | 6 -- .../.kokoro/samples/python3.6/presubmit.cfg | 6 -- .../.kokoro/test-samples-impl.sh | 4 +- .../.repo-metadata.json | 3 +- .../CONTRIBUTING.rst | 6 +- .../google-cloud-error-reporting/README.rst | 60 +++++++------ .../google-cloud-error-reporting/noxfile.py | 85 ++++++++++++------- .../samples/snippets/api/noxfile.py | 2 +- .../snippets/fluent_on_compute/noxfile.py | 2 +- .../templates/install_deps.tmpl.rst | 2 +- .../google-cloud-error-reporting/setup.py | 3 +- 16 files changed, 101 insertions(+), 142 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.6/presubmit.cfg diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 50b29ffd2050..1ce608523524 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:b2dc5f80edcf5d4486c39068c9fa11f7f851d9568eea4dcba130f994ea9b5e97 -# created: 2022-06-12T16:09:31.61859086Z + digest: sha256:e7bb19d47c13839fe8c147e50e02e8b6cf5da8edd1af8b82208cd6f66cc2829c +# created: 2022-07-05T18:31:20.838186805Z diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index e5be6edbd54d..5531b0141297 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python: ['3.6', '3.7', '3.8', '3.9', '3.10'] + python: ['3.7', '3.8', '3.9', '3.10'] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg deleted file mode 100644 index 695d94cc0f41..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/common.cfg +++ /dev/null @@ -1,40 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.6" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-py36" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/continuous.cfg deleted file mode 100644 index 7218af1499e5..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/continuous.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.6/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh index 8a324c9c7bc6..2c6500cae0b9 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh @@ -33,7 +33,7 @@ export PYTHONUNBUFFERED=1 env | grep KOKORO # Install nox -python3.6 -m pip install --upgrade --quiet nox +python3.9 -m pip install --upgrade --quiet nox # Use secrets acessor service account to get secrets if [[ -f "${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" ]]; then @@ -76,7 +76,7 @@ for file in samples/**/requirements.txt; do echo "------------------------------------------------------------" # Use nox to execute the tests for the project. - python3.6 -m nox -s "$RUN_TESTS_SESSION" + python3.9 -m nox -s "$RUN_TESTS_SESSION" EXIT=$? # If this is a periodic build, send the test log to the FlakyBot. diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index a42bec3c762f..ea61a2bb89d3 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -13,5 +13,6 @@ "requires_billing": false, "codeowner_team": "@googleapis/api-logging", "default_version": "v1beta1", - "api_shortname": "clouderrorreporting" + "api_shortname": "clouderrorreporting", + "api_description": "counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management interface displays the results with sorting and filtering capabilities. A dedicated view shows the error details: time chart, occurrences, affected user count, first and last seen dates and a cleaned exception stack trace. Opt-in to receive email and mobile alerts on new errors." } diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 7235162dcf16..795ac9916d3b 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.6, 3.7, 3.8, 3.9 and 3.10 on both UNIX and Windows. + 3.7, 3.8, 3.9 and 3.10 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -221,13 +221,11 @@ Supported Python Versions We support: -- `Python 3.6`_ - `Python 3.7`_ - `Python 3.8`_ - `Python 3.9`_ - `Python 3.10`_ -.. _Python 3.6: https://docs.python.org/3.6/ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ .. _Python 3.9: https://docs.python.org/3.9/ @@ -239,7 +237,7 @@ Supported versions can be found in our ``noxfile.py`` `config`_. .. _config: https://github.com/googleapis/python-error-reporting/blob/main/noxfile.py -We also explicitly decided to support Python 3 beginning with version 3.6. +We also explicitly decided to support Python 3 beginning with version 3.7. Reasons for this include: - Encouraging use of newest versions of Python 3 diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index fb72fc838524..a258b7d9ed79 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -1,27 +1,22 @@ -Python Client for Error Reporting -============================================= +Python Client for Error Reporting API +===================================== -|beta| |pypi| |versions| +|preview| |pypi| |versions| -The `Error Reporting`_ API counts, analyzes and aggregates the -crashes in your running cloud services. A centralized error management -interface displays the results with sorting and filtering capabilities. A -dedicated view shows the error details: time chart, occurrences, affected user -count, first and last seen dates and a cleaned exception stack trace. Opt-in -to receive email and mobile alerts on new errors. +`Error Reporting API`_: counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management interface displays the results with sorting and filtering capabilities. A dedicated view shows the error details: time chart, occurrences, affected user count, first and last seen dates and a cleaned exception stack trace. Opt-in to receive email and mobile alerts on new errors. - `Client Library Documentation`_ - `Product Documentation`_ -.. _Error Reporting: https://cloud.google.com/error-reporting/ -.. _Client Library Documentation: https://cloud.google.com/python/docs/reference/clouderrorreporting/latest -.. _Product Documentation: https://cloud.google.com/error-reporting/reference/ -.. |beta| image:: https://img.shields.io/badge/support-beta-orange.svg - :target: https://github.com/googleapis/google-cloud-python/blob/main/README.rst#beta-support +.. |preview| image:: https://img.shields.io/badge/support-preview-orange.svg + :target: https://github.com/googleapis/google-cloud-python/blob/main/README.rst#stability-levels .. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ +.. _Error Reporting API: https://cloud.google.com/error-reporting +.. _Client Library Documentation: https://cloud.google.com/python/docs/reference/clouderrorreporting/latest +.. _Product Documentation: https://cloud.google.com/error-reporting Quick Start ----------- @@ -30,12 +25,12 @@ In order to use this library, you first need to go through the following steps: 1. `Select or create a Cloud Platform project.`_ 2. `Enable billing for your project.`_ -3. `Enable the Google Cloud Error Reporting API.`_ +3. `Enable the Error Reporting API.`_ 4. `Setup Authentication.`_ .. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project .. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Enable the Google Cloud Error Reporting API.: https://cloud.google.com/error-reporting +.. _Enable the Error Reporting API.: https://cloud.google.com/error-reporting .. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html Installation @@ -52,15 +47,25 @@ dependencies. .. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ +Code samples and snippets +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Code samples and snippets live in the `samples/` folder. + + Supported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^ -Python >= 3.6 +Our client libraries are compatible with all current [active](https://devguide.python.org/devcycle/#in-development-main-branch) and [maintenance](https://devguide.python.org/devcycle/#maintenance-branches) versions of +Python. -Deprecated Python Versions -^^^^^^^^^^^^^^^^^^^^^^^^^^ -Python == 2.7. +Python >= 3.7 -The last version of this library compatible with Python 2.7 is google-cloud-error-reporting==0.34.0. +Unsupported Python Versions +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Python <= 3.6 + +If you are using an [end-of-life](https://devguide.python.org/devcycle/#end-of-life-branches) +version of Python, we recommend that you update as soon as possible to an actively supported version. Mac/Linux @@ -84,12 +89,15 @@ Windows \Scripts\activate \Scripts\pip.exe install google-cloud-error-reporting - - Next Steps ~~~~~~~~~~ -- Read the `Client Library Documentation`_ for Google Cloud Error Reporting - API to see other available methods on the client. -- Read the `Product documentation`_ to learn +- Read the `Client Library Documentation`_ for Error Reporting API + to see other available methods on the client. +- Read the `Error Reporting API Product documentation`_ to learn more about the product and see How-to Guides. +- View this `README`_ to see the full list of Cloud + APIs that we cover. + +.. _Error Reporting API Product documentation: https://cloud.google.com/error-reporting +.. _README: https://github.com/googleapis/google-cloud-python/blob/main/README.rst diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index fe3a1fe2e8c8..001ec73cd42c 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -31,7 +31,7 @@ DEFAULT_PYTHON_VERSION = "3.8" -UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"] +UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10"] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "asyncmock", @@ -331,28 +331,15 @@ def docfx(session): def prerelease_deps(session): """Run all tests with prerelease versions of dependencies installed.""" - prerel_deps = [ - "protobuf", - "googleapis-common-protos", - "google-auth", - "grpcio", - "grpcio-status", - "google-api-core", - "proto-plus", - # dependencies of google-auth - "cryptography", - "pyasn1", - ] - - for dep in prerel_deps: - session.install("--pre", "--no-deps", "--upgrade", dep) - - # Remaining dependencies - other_deps = ["requests"] - session.install(*other_deps) - + # Install all dependencies + session.install("-e", ".[all, tests, tracing]") session.install(*UNIT_TEST_STANDARD_DEPENDENCIES) - session.install(*SYSTEM_TEST_STANDARD_DEPENDENCIES) + system_deps_all = ( + SYSTEM_TEST_STANDARD_DEPENDENCIES + + SYSTEM_TEST_EXTERNAL_DEPENDENCIES + + SYSTEM_TEST_EXTRAS + ) + session.install(*system_deps_all) # Because we test minimum dependency versions on the minimum Python # version, the first version we test with in the unit tests sessions has a @@ -366,19 +353,44 @@ def prerelease_deps(session): constraints_text = constraints_file.read() # Ignore leading whitespace and comment lines. - deps = [ + constraints_deps = [ match.group(1) for match in re.finditer( r"^\s*(\S+)(?===\S+)", constraints_text, flags=re.MULTILINE ) ] - # Don't overwrite prerelease packages. - deps = [dep for dep in deps if dep not in prerel_deps] - # We use --no-deps to ensure that pre-release versions aren't overwritten - # by the version ranges in setup.py. - session.install(*deps) - session.install("--no-deps", "-e", ".[all]") + session.install(*constraints_deps) + + if os.path.exists("samples/snippets/requirements.txt"): + session.install("-r", "samples/snippets/requirements.txt") + + if os.path.exists("samples/snippets/requirements-test.txt"): + session.install("-r", "samples/snippets/requirements-test.txt") + + prerel_deps = [ + "protobuf", + # dependency of grpc + "six", + "googleapis-common-protos", + "grpcio", + "grpcio-status", + "google-api-core", + "proto-plus", + "google-cloud-testutils", + # dependencies of google-cloud-testutils" + "click", + ] + + for dep in prerel_deps: + session.install("--pre", "--no-deps", "--upgrade", dep) + + # Remaining dependencies + other_deps = [ + "requests", + "google-auth", + ] + session.install(*other_deps) # Print out prerelease package versions session.run( @@ -387,5 +399,16 @@ def prerelease_deps(session): session.run("python", "-c", "import grpc; print(grpc.__version__)") session.run("py.test", "tests/unit") - session.run("py.test", "tests/system") - session.run("py.test", "samples/snippets") + + system_test_path = os.path.join("tests", "system.py") + system_test_folder_path = os.path.join("tests", "system") + + # Only run system tests if found. + if os.path.exists(system_test_path) or os.path.exists(system_test_folder_path): + session.run("py.test", "tests/system") + + snippets_test_path = os.path.join("samples", "snippets") + + # Only run samples tests if found. + if os.path.exists(snippets_test_path): + session.run("py.test", "samples/snippets") diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 38bb0a572b81..5fcb9d7461f2 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -89,7 +89,7 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. # All versions used to test samples. -ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"] +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 38bb0a572b81..5fcb9d7461f2 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -89,7 +89,7 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. # All versions used to test samples. -ALL_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"] +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst index 275d649890d7..6f069c6c87a5 100644 --- a/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/templates/install_deps.tmpl.rst @@ -12,7 +12,7 @@ Install Dependencies .. _Python Development Environment Setup Guide: https://cloud.google.com/python/setup -#. Create a virtualenv. Samples are compatible with Python 3.6+. +#. Create a virtualenv. Samples are compatible with Python 3.7+. .. code-block:: bash diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 468c2ceb618e..6035154fd2e4 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -77,7 +77,6 @@ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", @@ -90,7 +89,7 @@ namespace_packages=namespaces, install_requires=dependencies, extras_require=extras, - python_requires=">=3.6", + python_requires=">=3.7", scripts=["scripts/fixup_errorreporting_v1beta1_keywords.py"], include_package_data=True, zip_safe=False, From b3a940149bdee31c2632104c916368c78d36d583 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 13 Jul 2022 22:42:06 -0400 Subject: [PATCH 351/467] chore(python): allow client documentation to be customized in README (#361) Source-Link: https://github.com/googleapis/synthtool/commit/95d9289ac3dc1ca2edae06619c82fe7a24d555f1 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:c8878270182edaab99f2927969d4f700c3af265accd472c3425deedff2b7fd93 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 ++-- packages/google-cloud-error-reporting/README.rst | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 1ce608523524..58fcbeeed649 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:e7bb19d47c13839fe8c147e50e02e8b6cf5da8edd1af8b82208cd6f66cc2829c -# created: 2022-07-05T18:31:20.838186805Z + digest: sha256:c8878270182edaab99f2927969d4f700c3af265accd472c3425deedff2b7fd93 +# created: 2022-07-14T01:58:16.015625351Z diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index a258b7d9ed79..46fa4e0c3aca 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -55,18 +55,22 @@ Code samples and snippets live in the `samples/` folder. Supported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^ -Our client libraries are compatible with all current [active](https://devguide.python.org/devcycle/#in-development-main-branch) and [maintenance](https://devguide.python.org/devcycle/#maintenance-branches) versions of +Our client libraries are compatible with all current `active`_ and `maintenance`_ versions of Python. Python >= 3.7 +.. _active: https://devguide.python.org/devcycle/#in-development-main-branch +.. _maintenance: https://devguide.python.org/devcycle/#maintenance-branches + Unsupported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Python <= 3.6 -If you are using an [end-of-life](https://devguide.python.org/devcycle/#end-of-life-branches) +If you are using an `end-of-life`_ version of Python, we recommend that you update as soon as possible to an actively supported version. +.. _end-of-life: https://devguide.python.org/devcycle/#end-of-life-branches Mac/Linux ^^^^^^^^^ From c381da973ec05255ea5b9a06ee58365f152a7642 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 15:08:10 +0000 Subject: [PATCH 352/467] fix(deps): require google-api-core>=1.32.0,>=2.8.0 (#354) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 459095142 Source-Link: https://github.com/googleapis/googleapis/commit/4f1be992601ed740a581a32cedc4e7b6c6a27793 Source-Link: https://github.com/googleapis/googleapis-gen/commit/ae686d9cde4fc3e36d0ac02efb8643b15890c1ed Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYWU2ODZkOWNkZTRmYzNlMzZkMGFjMDJlZmI4NjQzYjE1ODkwYzFlZCJ9 feat: add audience parameter PiperOrigin-RevId: 456827138 Source-Link: https://github.com/googleapis/googleapis/commit/23f1a157189581734c7a77cddfeb7c5bc1e440ae Source-Link: https://github.com/googleapis/googleapis-gen/commit/4075a8514f676691ec156688a5bbf183aa9893ce Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDA3NWE4NTE0ZjY3NjY5MWVjMTU2Njg4YTViYmYxODNhYTk4OTNjZSJ9 --- .../services/error_group_service/client.py | 1 + .../error_group_service/transports/base.py | 16 ++++-- .../error_group_service/transports/grpc.py | 2 + .../transports/grpc_asyncio.py | 2 + .../services/error_stats_service/client.py | 1 + .../error_stats_service/transports/base.py | 16 ++++-- .../error_stats_service/transports/grpc.py | 2 + .../transports/grpc_asyncio.py | 2 + .../services/report_errors_service/client.py | 1 + .../report_errors_service/transports/base.py | 16 ++++-- .../report_errors_service/transports/grpc.py | 2 + .../transports/grpc_asyncio.py | 2 + .../google-cloud-error-reporting/setup.py | 5 +- .../testing/constraints-3.6.txt | 11 ---- .../testing/constraints-3.7.txt | 2 +- .../test_error_group_service.py | 52 +++++++++++++++++++ .../test_error_stats_service.py | 52 +++++++++++++++++++ .../test_report_errors_service.py | 52 +++++++++++++++++++ 18 files changed, 206 insertions(+), 31 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.6.txt diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index eec0a0aebe5c..df10c96900c3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -419,6 +419,7 @@ def __init__( quota_project_id=client_options.quota_project_id, client_info=client_info, always_use_jwt_access=True, + api_audience=client_options.api_audience, ) def get_group( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index d7f0edd8817f..d2ef9e3f6446 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -55,6 +55,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, **kwargs, ) -> None: """Instantiate the transport. @@ -82,11 +83,6 @@ def __init__( be used for service account credentials. """ - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ":" not in host: - host += ":443" - self._host = host - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. @@ -107,6 +103,11 @@ def __init__( credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) # If the credentials are service account credentials, then always try to use self signed JWT. if ( @@ -119,6 +120,11 @@ def __init__( # Save the credentials. self._credentials = credentials + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index c90e37f74156..a4595425ea8c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -59,6 +59,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -154,6 +155,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 718fc657decd..be98ee03f5b9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -104,6 +104,7 @@ def __init__( quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -199,6 +200,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index f3289f779567..85de24ae07de 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -422,6 +422,7 @@ def __init__( quota_project_id=client_options.quota_project_id, client_info=client_info, always_use_jwt_access=True, + api_audience=client_options.api_audience, ) def list_group_stats( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 0bdbe002a3a0..d7970fc88136 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -54,6 +54,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, **kwargs, ) -> None: """Instantiate the transport. @@ -81,11 +82,6 @@ def __init__( be used for service account credentials. """ - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ":" not in host: - host += ":443" - self._host = host - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. @@ -106,6 +102,11 @@ def __init__( credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) # If the credentials are service account credentials, then always try to use self signed JWT. if ( @@ -118,6 +119,11 @@ def __init__( # Save the credentials. self._credentials = credentials + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 8b9510b1b09a..c2dbd8448f88 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -59,6 +59,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -154,6 +155,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index cce5c95c9f37..9fd8c8fd3b77 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -104,6 +104,7 @@ def __init__( quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -199,6 +200,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 297c8d8ec640..0f18a72b278a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -401,6 +401,7 @@ def __init__( quota_project_id=client_options.quota_project_id, client_info=client_info, always_use_jwt_access=True, + api_audience=client_options.api_audience, ) def report_error_event( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 5da09490b6bf..e2ec3343d7ce 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -54,6 +54,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, **kwargs, ) -> None: """Instantiate the transport. @@ -81,11 +82,6 @@ def __init__( be used for service account credentials. """ - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ":" not in host: - host += ":443" - self._host = host - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. @@ -106,6 +102,11 @@ def __init__( credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) # If the credentials are service account credentials, then always try to use self signed JWT. if ( @@ -118,6 +119,11 @@ def __init__( # Save the credentials. self._credentials = credentials + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index aab08b85ee8e..2c08420c6de8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -58,6 +58,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -153,6 +154,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index ae6174049206..def71459a2b1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -103,6 +103,7 @@ def __init__( quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -198,6 +199,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 6035154fd2e4..0dad9912de6f 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -30,10 +30,7 @@ release_status = "Development Status :: 4 - Beta" dependencies = [ "google-cloud-logging>=1.14.0, <4.0.0dev", - # NOTE: Maintainers, please do not require google-api-core>=2.x.x - # Until this issue is closed - # https://github.com/googleapis/google-cloud-python/issues/10566 - "google-api-core[grpc] >= 1.31.5, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0", + "google-api-core[grpc] >= 1.32.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", "proto-plus >= 1.15.0, <2.0.0dev", "protobuf >= 3.19.0, <4.0.0dev", ] diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt b/packages/google-cloud-error-reporting/testing/constraints-3.6.txt deleted file mode 100644 index cf48a7f845b1..000000000000 --- a/packages/google-cloud-error-reporting/testing/constraints-3.6.txt +++ /dev/null @@ -1,11 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List *all* library dependencies and extras in this file. -# Pin the version to the lower bound. -# -# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", -# Then this file should have foo==1.14.0 -google-cloud-logging==1.14.0 -google-api-core==1.31.5 -proto-plus==1.15.0 -protobuf==3.19.0 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt index cf48a7f845b1..1309e99ac431 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt @@ -6,6 +6,6 @@ # e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", # Then this file should have foo==1.14.0 google-cloud-logging==1.14.0 -google-api-core==1.31.5 +google-api-core==1.32.0 proto-plus==1.15.0 protobuf==3.19.0 diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 96f3472f3696..bc5be3a38a34 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -233,6 +233,7 @@ def test_error_group_service_client_client_options( 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 @@ -250,6 +251,7 @@ def test_error_group_service_client_client_options( 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 @@ -267,6 +269,7 @@ def test_error_group_service_client_client_options( 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 @@ -296,6 +299,25 @@ def test_error_group_service_client_client_options( 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, + 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", ) @@ -373,6 +395,7 @@ def test_error_group_service_client_mtls_env_auto( 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 @@ -407,6 +430,7 @@ def test_error_group_service_client_mtls_env_auto( 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. @@ -429,6 +453,7 @@ def test_error_group_service_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -543,6 +568,7 @@ def test_error_group_service_client_client_options_scopes( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -581,6 +607,7 @@ def test_error_group_service_client_client_options_credentials_file( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -601,6 +628,7 @@ def test_error_group_service_client_client_options_from_dict(): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -639,6 +667,7 @@ def test_error_group_service_client_create_channel_credentials_file( 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. @@ -1362,6 +1391,28 @@ def test_error_group_service_transport_auth_adc(transport_class): ) +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + ], +) +def test_error_group_service_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + @pytest.mark.parametrize( "transport_class,grpc_helpers", [ @@ -1832,4 +1883,5 @@ def test_api_key_credentials(client_class, transport_class): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index d3d0634b6af8..956aa9304ab5 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -236,6 +236,7 @@ def test_error_stats_service_client_client_options( 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 @@ -253,6 +254,7 @@ def test_error_stats_service_client_client_options( 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 @@ -270,6 +272,7 @@ def test_error_stats_service_client_client_options( 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 @@ -299,6 +302,25 @@ def test_error_stats_service_client_client_options( 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, + 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", ) @@ -376,6 +398,7 @@ def test_error_stats_service_client_mtls_env_auto( 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 @@ -410,6 +433,7 @@ def test_error_stats_service_client_mtls_env_auto( 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. @@ -432,6 +456,7 @@ def test_error_stats_service_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -546,6 +571,7 @@ def test_error_stats_service_client_client_options_scopes( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -584,6 +610,7 @@ def test_error_stats_service_client_client_options_credentials_file( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -604,6 +631,7 @@ def test_error_stats_service_client_client_options_from_dict(): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -642,6 +670,7 @@ def test_error_stats_service_client_create_channel_credentials_file( 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. @@ -1996,6 +2025,28 @@ def test_error_stats_service_transport_auth_adc(transport_class): ) +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + ], +) +def test_error_stats_service_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + @pytest.mark.parametrize( "transport_class,grpc_helpers", [ @@ -2466,4 +2517,5 @@ def test_api_key_credentials(client_class, transport_class): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 184946733106..d89e07129074 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -240,6 +240,7 @@ def test_report_errors_service_client_client_options( 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 @@ -257,6 +258,7 @@ def test_report_errors_service_client_client_options( 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 @@ -274,6 +276,7 @@ def test_report_errors_service_client_client_options( 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 @@ -303,6 +306,25 @@ def test_report_errors_service_client_client_options( 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, + 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", ) @@ -380,6 +402,7 @@ def test_report_errors_service_client_mtls_env_auto( 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 @@ -414,6 +437,7 @@ def test_report_errors_service_client_mtls_env_auto( 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. @@ -436,6 +460,7 @@ def test_report_errors_service_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -554,6 +579,7 @@ def test_report_errors_service_client_client_options_scopes( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -592,6 +618,7 @@ def test_report_errors_service_client_client_options_credentials_file( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -612,6 +639,7 @@ def test_report_errors_service_client_client_options_from_dict(): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -650,6 +678,7 @@ def test_report_errors_service_client_create_channel_credentials_file( 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. @@ -1161,6 +1190,28 @@ def test_report_errors_service_transport_auth_adc(transport_class): ) +@pytest.mark.parametrize( + "transport_class", + [ + transports.ReportErrorsServiceGrpcTransport, + transports.ReportErrorsServiceGrpcAsyncIOTransport, + ], +) +def test_report_errors_service_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + @pytest.mark.parametrize( "transport_class,grpc_helpers", [ @@ -1608,4 +1659,5 @@ def test_api_key_credentials(client_class, transport_class): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) From a0e95a9a00a9fddea8daf68cc24ffca62f59fa10 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 11:27:15 -0400 Subject: [PATCH 353/467] chore(main): release 1.6.0 (#359) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 13 +++++++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 30c79b90b43b..3a828e4855e8 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,19 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.6.0](https://github.com/googleapis/python-error-reporting/compare/v1.5.3...v1.6.0) (2022-07-14) + + +### Features + +* add audience parameter ([f53a2fa](https://github.com/googleapis/python-error-reporting/commit/f53a2fa49567035a1a3bb94d13444dd65bd104c6)) + + +### Bug Fixes + +* **deps:** require google-api-core>=1.32.0,>=2.8.0 ([#354](https://github.com/googleapis/python-error-reporting/issues/354)) ([f53a2fa](https://github.com/googleapis/python-error-reporting/commit/f53a2fa49567035a1a3bb94d13444dd65bd104c6)) +* require python 3.7+ ([#358](https://github.com/googleapis/python-error-reporting/issues/358)) ([ab0a9ba](https://github.com/googleapis/python-error-reporting/commit/ab0a9bacf9594ce3ff4c521413a20a2995533032)) + ## [1.5.3](https://github.com/googleapis/python-error-reporting/compare/v1.5.2...v1.5.3) (2022-06-07) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 0dad9912de6f..b83681ac38e9 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.5.3" +version = "1.6.0" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 7c342589adfd7a354f248c9e45e68fe207a78183 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 14 Jul 2022 19:08:43 +0200 Subject: [PATCH 354/467] chore(deps): update all dependencies (#351) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(deps): update all dependencies * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * revert Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index d44c41051f52..ef06f3a05300 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.5.2 +google-cloud-error-reporting==1.5.3 From 47ee6e00ff269a206cae29b6a05bfe68f5b030b8 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 25 Jul 2022 22:33:29 -0400 Subject: [PATCH 355/467] chore(python): fix prerelease session [autoapprove] (#362) Source-Link: https://github.com/googleapis/synthtool/commit/1b9ad7694e44ddb4d9844df55ff7af77b51a4435 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:9db98b055a7f8bd82351238ccaacfd3cda58cdf73012ab58b8da146368330021 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +-- .../google-cloud-error-reporting/noxfile.py | 33 ++++++++++--------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 58fcbeeed649..0eb02fda4c09 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:c8878270182edaab99f2927969d4f700c3af265accd472c3425deedff2b7fd93 -# created: 2022-07-14T01:58:16.015625351Z + digest: sha256:9db98b055a7f8bd82351238ccaacfd3cda58cdf73012ab58b8da146368330021 +# created: 2022-07-25T16:02:49.174178716Z diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 001ec73cd42c..70739b12dd8c 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -333,7 +333,8 @@ def prerelease_deps(session): # Install all dependencies session.install("-e", ".[all, tests, tracing]") - session.install(*UNIT_TEST_STANDARD_DEPENDENCIES) + unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES + session.install(*unit_deps_all) system_deps_all = ( SYSTEM_TEST_STANDARD_DEPENDENCIES + SYSTEM_TEST_EXTERNAL_DEPENDENCIES @@ -362,12 +363,6 @@ def prerelease_deps(session): session.install(*constraints_deps) - if os.path.exists("samples/snippets/requirements.txt"): - session.install("-r", "samples/snippets/requirements.txt") - - if os.path.exists("samples/snippets/requirements-test.txt"): - session.install("-r", "samples/snippets/requirements-test.txt") - prerel_deps = [ "protobuf", # dependency of grpc @@ -404,11 +399,19 @@ def prerelease_deps(session): system_test_folder_path = os.path.join("tests", "system") # Only run system tests if found. - if os.path.exists(system_test_path) or os.path.exists(system_test_folder_path): - session.run("py.test", "tests/system") - - snippets_test_path = os.path.join("samples", "snippets") - - # Only run samples tests if found. - if os.path.exists(snippets_test_path): - session.run("py.test", "samples/snippets") + if os.path.exists(system_test_path): + session.run( + "py.test", + "--verbose", + f"--junitxml=system_{session.python}_sponge_log.xml", + system_test_path, + *session.posargs, + ) + if os.path.exists(system_test_folder_path): + session.run( + "py.test", + "--verbose", + f"--junitxml=system_{session.python}_sponge_log.xml", + system_test_folder_path, + *session.posargs, + ) From d289a8336ee5d7a4496c15cdcb46c94698eff0d8 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 2 Aug 2022 14:48:39 +0200 Subject: [PATCH 356/467] chore(deps): update all dependencies (#363) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(deps): update all dependencies * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * revert Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index ef06f3a05300..fcddb2d1c5e0 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.5.3 +google-cloud-error-reporting==1.6.0 From 5fcdbbeb5b3c6b86036e0182933d37e94305bc20 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 21:05:12 -0400 Subject: [PATCH 357/467] chore(deps): update actions/setup-python action to v4 [autoapprove] (#365) Source-Link: https://github.com/googleapis/synthtool/commit/8e55b327bae44b6640c7ab4be91df85fc4d6fe8a Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:c6c965a4bf40c19011b11f87dbc801a66d3a23fbc6704102be064ef31c51f1c3 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../google-cloud-error-reporting/.github/workflows/docs.yml | 4 ++-- .../google-cloud-error-reporting/.github/workflows/lint.yml | 2 +- .../.github/workflows/unittest.yml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 0eb02fda4c09..c701359fc58c 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:9db98b055a7f8bd82351238ccaacfd3cda58cdf73012ab58b8da146368330021 -# created: 2022-07-25T16:02:49.174178716Z + digest: sha256:c6c965a4bf40c19011b11f87dbc801a66d3a23fbc6704102be064ef31c51f1c3 +# created: 2022-08-09T15:58:56.463048506Z diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml index b46d7305d8cf..7092a139aed3 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/docs.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/docs.yml @@ -10,7 +10,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install nox @@ -26,7 +26,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install nox diff --git a/packages/google-cloud-error-reporting/.github/workflows/lint.yml b/packages/google-cloud-error-reporting/.github/workflows/lint.yml index f512a4960beb..d2aee5b7d8ec 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/lint.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/lint.yml @@ -10,7 +10,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install nox diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index 5531b0141297..87ade4d54362 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -13,7 +13,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} - name: Install nox @@ -39,7 +39,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install coverage From 865001663b381a106fe7aa57e89d18f998662044 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Thu, 11 Aug 2022 19:14:16 -0400 Subject: [PATCH 358/467] fix(deps): allow protobuf < 5.0.0 (#366) fix(deps): require proto-plus >= 1.22.0 --- packages/google-cloud-error-reporting/setup.py | 4 ++-- .../google-cloud-error-reporting/testing/constraints-3.7.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index b83681ac38e9..0152403af631 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -31,8 +31,8 @@ dependencies = [ "google-cloud-logging>=1.14.0, <4.0.0dev", "google-api-core[grpc] >= 1.32.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", - "proto-plus >= 1.15.0, <2.0.0dev", - "protobuf >= 3.19.0, <4.0.0dev", + "proto-plus >= 1.22.0, <2.0.0dev", + "protobuf >= 3.19.0, <5.0.0dev", ] extras = {} diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt index 1309e99ac431..748724872d92 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt @@ -7,5 +7,5 @@ # Then this file should have foo==1.14.0 google-cloud-logging==1.14.0 google-api-core==1.32.0 -proto-plus==1.15.0 +proto-plus==1.22.0 protobuf==3.19.0 From 8da8412c1fe09b7848837e34287461fa1e29efaf Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Aug 2022 10:24:50 -0700 Subject: [PATCH 359/467] chore: added extra variables owlbot kokoro configs (#368) --- .../.kokoro/common_env_vars.cfg | 19 +++++++++++++++++ .../.kokoro/continuous/common.cfg | 20 ++++++++++++++++++ .../.kokoro/docs/common.cfg | 21 ++++++++++++++++++- .../.kokoro/presubmit/common.cfg | 20 ++++++++++++++++++ .../.kokoro/release/common.cfg | 20 ++++++++++++++++++ .../.kokoro/samples/lint/common.cfg | 21 ++++++++++++++++++- .../.kokoro/samples/python3.10/common.cfg | 21 ++++++++++++++++++- .../.kokoro/samples/python3.7/common.cfg | 21 ++++++++++++++++++- .../.kokoro/samples/python3.8/common.cfg | 21 ++++++++++++++++++- .../.kokoro/samples/python3.9/common.cfg | 21 ++++++++++++++++++- .../google-cloud-error-reporting/owlbot.py | 18 ++++++++++++++++ 11 files changed, 217 insertions(+), 6 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/common_env_vars.cfg diff --git a/packages/google-cloud-error-reporting/.kokoro/common_env_vars.cfg b/packages/google-cloud-error-reporting/.kokoro/common_env_vars.cfg new file mode 100644 index 000000000000..b5c22b802bf1 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/common_env_vars.cfg @@ -0,0 +1,19 @@ + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg b/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg index ccbc23c7673f..c337b6d8293e 100644 --- a/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg @@ -25,3 +25,23 @@ env_vars: { key: "TRAMPOLINE_BUILD_FILE" value: "github/python-error-reporting/.kokoro/build.sh" } + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg index 2603e22d4f83..eade26cf3e56 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg @@ -63,4 +63,23 @@ before_action { keyname: "docuploader_service_account" } } -} \ No newline at end of file +} + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg b/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg index ccbc23c7673f..c337b6d8293e 100644 --- a/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg @@ -25,3 +25,23 @@ env_vars: { key: "TRAMPOLINE_BUILD_FILE" value: "github/python-error-reporting/.kokoro/build.sh" } + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg index c4f805b87a1d..5e979115e711 100644 --- a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg @@ -38,3 +38,23 @@ env_vars: { key: "SECRET_MANAGER_KEYS" value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" } + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg index a38013a4dda6..3f98b56246ca 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg @@ -31,4 +31,23 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg index 2ed420e5bb76..d19172aefbc3 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg @@ -37,4 +37,23 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg index 161c018b0dc8..ad162db91b86 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg @@ -37,4 +37,23 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg index abd2a5bb7587..b495960b4e71 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg @@ -37,4 +37,23 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg index 4889669b5ad9..01a9e9d3214b 100644 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg @@ -37,4 +37,23 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" # Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" \ No newline at end of file +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 5bc3f034732f..b192af9a21f3 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -16,6 +16,7 @@ import synthtool as s from synthtool import gcp from synthtool.languages import python +import os common = gcp.CommonTemplates() @@ -45,3 +46,20 @@ s.shell.run(["nox", "-s", "blacken"], hide_output=False) + +# -------------------------------------------------------------------------- +# Modify test configs +# -------------------------------------------------------------------------- + +# add shared environment variables to test configs +tracked_subdirs = ["continuous", "presubmit", "release", "samples", "docs"] +for subdir in tracked_subdirs: + for path, subdirs, files in os.walk(f".kokoro/{subdir}"): + for name in files: + if name == "common.cfg": + file_path = os.path.join(path, name) + s.move( + ".kokoro/common_env_vars.cfg", + file_path, + merge=lambda src, dst, _, : f"{dst}\n{src}", + ) From a0cd396eab066115b73462b21799fdf30ea09c2a Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 11:51:58 -0400 Subject: [PATCH 360/467] chore(main): release 1.6.1 (#367) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 8 ++++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 3a828e4855e8..002eac0d64e5 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,14 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.6.1](https://github.com/googleapis/python-error-reporting/compare/v1.6.0...v1.6.1) (2022-08-12) + + +### Bug Fixes + +* **deps:** allow protobuf < 5.0.0 ([#366](https://github.com/googleapis/python-error-reporting/issues/366)) ([9535a28](https://github.com/googleapis/python-error-reporting/commit/9535a289a458badf7406688d3e9a77f0e580d0a8)) +* **deps:** require proto-plus >= 1.22.0 ([9535a28](https://github.com/googleapis/python-error-reporting/commit/9535a289a458badf7406688d3e9a77f0e580d0a8)) + ## [1.6.0](https://github.com/googleapis/python-error-reporting/compare/v1.5.3...v1.6.0) (2022-07-14) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 0152403af631..d587386526bb 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.6.0" +version = "1.6.1" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From b26d2d1b11b7329a5c3c051f6f02c67cacc48b9c Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 19 Aug 2022 18:35:00 +0200 Subject: [PATCH 361/467] chore(deps): update dependency google-cloud-error-reporting to v1.6.1 (#371) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index fcddb2d1c5e0..083d64d07c2f 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.6.0 +google-cloud-error-reporting==1.6.1 From 33ed3f08113c2c0807166da8c9e24f3d6245d23f Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 15:36:43 -0400 Subject: [PATCH 362/467] chore: remove 'pip install' statements from python_library templates [autoapprove] (#373) Source-Link: https://github.com/googleapis/synthtool/commit/69fabaee9eca28af7ecaa02c86895e606fbbebd6 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:562802bfac02e012a6ac34eda282f81d06e77326b82a32d7bbb1369ff552b387 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/publish-docs.sh | 4 +- .../.kokoro/release.sh | 5 +- .../.kokoro/requirements.in | 8 + .../.kokoro/requirements.txt | 464 ++++++++++++++++++ .../renovate.json | 2 +- 6 files changed, 477 insertions(+), 10 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/requirements.in create mode 100644 packages/google-cloud-error-reporting/.kokoro/requirements.txt diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index c701359fc58c..c6acdf3f90c4 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:c6c965a4bf40c19011b11f87dbc801a66d3a23fbc6704102be064ef31c51f1c3 -# created: 2022-08-09T15:58:56.463048506Z + digest: sha256:562802bfac02e012a6ac34eda282f81d06e77326b82a32d7bbb1369ff552b387 +# created: 2022-08-24T17:07:22.006876712Z diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh index 8acb14e802b0..1c4d62370042 100755 --- a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh +++ b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh @@ -21,14 +21,12 @@ export PYTHONUNBUFFERED=1 export PATH="${HOME}/.local/bin:${PATH}" # Install nox -python3 -m pip install --user --upgrade --quiet nox +python3 -m pip install --require-hashes -r .kokoro/requirements.txt python3 -m nox --version # build docs nox -s docs -python3 -m pip install --user gcp-docuploader - # create metadata python3 -m docuploader create-metadata \ --name=$(jq --raw-output '.name // empty' .repo-metadata.json) \ diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh index 086e7e24ae77..2efe6b7ed77a 100755 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -16,12 +16,9 @@ set -eo pipefail # Start the releasetool reporter -python3 -m pip install gcp-releasetool +python3 -m pip install --require-hashes -r .kokoro/requirements.txt python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script -# Ensure that we have the latest versions of Twine, Wheel, and Setuptools. -python3 -m pip install --upgrade twine wheel setuptools - # Disable buffering, so that the logs stream through. export PYTHONUNBUFFERED=1 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.in b/packages/google-cloud-error-reporting/.kokoro/requirements.in new file mode 100644 index 000000000000..7718391a34d7 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.in @@ -0,0 +1,8 @@ +gcp-docuploader +gcp-releasetool +importlib-metadata +typing-extensions +twine +wheel +setuptools +nox \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt new file mode 100644 index 000000000000..c4b824f247e3 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -0,0 +1,464 @@ +# +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: +# +# pip-compile --allow-unsafe --generate-hashes requirements.in +# +argcomplete==2.0.0 \ + --hash=sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20 \ + --hash=sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e + # via nox +attrs==22.1.0 \ + --hash=sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6 \ + --hash=sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c + # via gcp-releasetool +bleach==5.0.1 \ + --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ + --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c + # via readme-renderer +cachetools==5.2.0 \ + --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \ + --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db + # via google-auth +certifi==2022.6.15 \ + --hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d \ + --hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412 + # via requests +cffi==1.15.1 \ + --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ + --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ + --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ + --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ + --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ + --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ + --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ + --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ + --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ + --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ + --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ + --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ + --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ + --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ + --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ + --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ + --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ + --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ + --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ + --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ + --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ + --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ + --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ + --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ + --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ + --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ + --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ + --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ + --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ + --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ + --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ + --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ + --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ + --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ + --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ + --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ + --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ + --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ + --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ + --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ + --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ + --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ + --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ + --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ + --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ + --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ + --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ + --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ + --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ + --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ + --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ + --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ + --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ + --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ + --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ + --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ + --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ + --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ + --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ + --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ + --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ + --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ + --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ + --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 + # via cryptography +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f + # via requests +click==8.0.4 \ + --hash=sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1 \ + --hash=sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb + # via + # gcp-docuploader + # gcp-releasetool +colorlog==6.6.0 \ + --hash=sha256:344f73204009e4c83c5b6beb00b3c45dc70fcdae3c80db919e0a4171d006fde8 \ + --hash=sha256:351c51e866c86c3217f08e4b067a7974a678be78f07f85fc2d55b8babde6d94e + # via + # gcp-docuploader + # nox +commonmark==0.9.1 \ + --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ + --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 + # via rich +cryptography==37.0.4 \ + --hash=sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59 \ + --hash=sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596 \ + --hash=sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3 \ + --hash=sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5 \ + --hash=sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab \ + --hash=sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884 \ + --hash=sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82 \ + --hash=sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b \ + --hash=sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441 \ + --hash=sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa \ + --hash=sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d \ + --hash=sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b \ + --hash=sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a \ + --hash=sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6 \ + --hash=sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157 \ + --hash=sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280 \ + --hash=sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282 \ + --hash=sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67 \ + --hash=sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8 \ + --hash=sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046 \ + --hash=sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327 \ + --hash=sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9 + # via + # gcp-releasetool + # secretstorage +distlib==0.3.5 \ + --hash=sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe \ + --hash=sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c + # via virtualenv +docutils==0.19 \ + --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ + --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc + # via readme-renderer +filelock==3.8.0 \ + --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ + --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 + # via virtualenv +gcp-docuploader==0.6.3 \ + --hash=sha256:ba8c9d76b3bbac54b0311c503a373b00edc2dc02d6d54ea9507045adb8e870f7 \ + --hash=sha256:c0f5aaa82ce1854a386197e4e359b120ad6d4e57ae2c812fce42219a3288026b + # via -r requirements.in +gcp-releasetool==1.8.6 \ + --hash=sha256:42e51ab8e2e789bc8e22a03c09352962cd3452951c801a2230d564816630304a \ + --hash=sha256:a3518b79d1b243c494eac392a01c7fd65187fd6d52602dcab9b529bc934d4da1 + # via -r requirements.in +google-api-core==2.8.2 \ + --hash=sha256:06f7244c640322b508b125903bb5701bebabce8832f85aba9335ec00b3d02edc \ + --hash=sha256:93c6a91ccac79079ac6bbf8b74ee75db970cc899278b97d53bc012f35908cf50 + # via + # google-cloud-core + # google-cloud-storage +google-auth==2.11.0 \ + --hash=sha256:be62acaae38d0049c21ca90f27a23847245c9f161ff54ede13af2cb6afecbac9 \ + --hash=sha256:ed65ecf9f681832298e29328e1ef0a3676e3732b2e56f41532d45f70a22de0fb + # via + # gcp-releasetool + # google-api-core + # google-cloud-core + # google-cloud-storage +google-cloud-core==2.3.2 \ + --hash=sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe \ + --hash=sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a + # via google-cloud-storage +google-cloud-storage==2.5.0 \ + --hash=sha256:19a26c66c317ce542cea0830b7e787e8dac2588b6bfa4d3fd3b871ba16305ab0 \ + --hash=sha256:382f34b91de2212e3c2e7b40ec079d27ee2e3dbbae99b75b1bcd8c63063ce235 + # via gcp-docuploader +google-crc32c==1.3.0 \ + --hash=sha256:04e7c220798a72fd0f08242bc8d7a05986b2a08a0573396187fd32c1dcdd58b3 \ + --hash=sha256:05340b60bf05b574159e9bd940152a47d38af3fb43803ffe71f11d704b7696a6 \ + --hash=sha256:12674a4c3b56b706153a358eaa1018c4137a5a04635b92b4652440d3d7386206 \ + --hash=sha256:127f9cc3ac41b6a859bd9dc4321097b1a4f6aa7fdf71b4f9227b9e3ebffb4422 \ + --hash=sha256:13af315c3a0eec8bb8b8d80b8b128cb3fcd17d7e4edafc39647846345a3f003a \ + --hash=sha256:1926fd8de0acb9d15ee757175ce7242e235482a783cd4ec711cc999fc103c24e \ + --hash=sha256:226f2f9b8e128a6ca6a9af9b9e8384f7b53a801907425c9a292553a3a7218ce0 \ + --hash=sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df \ + --hash=sha256:318f73f5484b5671f0c7f5f63741ab020a599504ed81d209b5c7129ee4667407 \ + --hash=sha256:3bbce1be3687bbfebe29abdb7631b83e6b25da3f4e1856a1611eb21854b689ea \ + --hash=sha256:42ae4781333e331a1743445931b08ebdad73e188fd554259e772556fc4937c48 \ + --hash=sha256:58be56ae0529c664cc04a9c76e68bb92b091e0194d6e3c50bea7e0f266f73713 \ + --hash=sha256:5da2c81575cc3ccf05d9830f9e8d3c70954819ca9a63828210498c0774fda1a3 \ + --hash=sha256:6311853aa2bba4064d0c28ca54e7b50c4d48e3de04f6770f6c60ebda1e975267 \ + --hash=sha256:650e2917660e696041ab3dcd7abac160b4121cd9a484c08406f24c5964099829 \ + --hash=sha256:6a4db36f9721fdf391646685ecffa404eb986cbe007a3289499020daf72e88a2 \ + --hash=sha256:779cbf1ce375b96111db98fca913c1f5ec11b1d870e529b1dc7354b2681a8c3a \ + --hash=sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183 \ + --hash=sha256:891f712ce54e0d631370e1f4997b3f182f3368179198efc30d477c75d1f44942 \ + --hash=sha256:95c68a4b9b7828ba0428f8f7e3109c5d476ca44996ed9a5f8aac6269296e2d59 \ + --hash=sha256:96a8918a78d5d64e07c8ea4ed2bc44354e3f93f46a4866a40e8db934e4c0d74b \ + --hash=sha256:9c3cf890c3c0ecfe1510a452a165431b5831e24160c5fcf2071f0f85ca5a47cd \ + --hash=sha256:9f58099ad7affc0754ae42e6d87443299f15d739b0ce03c76f515153a5cda06c \ + --hash=sha256:a0b9e622c3b2b8d0ce32f77eba617ab0d6768b82836391e4f8f9e2074582bf02 \ + --hash=sha256:a7f9cbea4245ee36190f85fe1814e2d7b1e5f2186381b082f5d59f99b7f11328 \ + --hash=sha256:bab4aebd525218bab4ee615786c4581952eadc16b1ff031813a2fd51f0cc7b08 \ + --hash=sha256:c124b8c8779bf2d35d9b721e52d4adb41c9bfbde45e6a3f25f0820caa9aba73f \ + --hash=sha256:c9da0a39b53d2fab3e5467329ed50e951eb91386e9d0d5b12daf593973c3b168 \ + --hash=sha256:ca60076c388728d3b6ac3846842474f4250c91efbfe5afa872d3ffd69dd4b318 \ + --hash=sha256:cb6994fff247987c66a8a4e550ef374671c2b82e3c0d2115e689d21e511a652d \ + --hash=sha256:d1c1d6236feab51200272d79b3d3e0f12cf2cbb12b208c835b175a21efdb0a73 \ + --hash=sha256:dd7760a88a8d3d705ff562aa93f8445ead54f58fd482e4f9e2bafb7e177375d4 \ + --hash=sha256:dda4d8a3bb0b50f540f6ff4b6033f3a74e8bf0bd5320b70fab2c03e512a62812 \ + --hash=sha256:e0f1ff55dde0ebcfbef027edc21f71c205845585fffe30d4ec4979416613e9b3 \ + --hash=sha256:e7a539b9be7b9c00f11ef16b55486141bc2cdb0c54762f84e3c6fc091917436d \ + --hash=sha256:eb0b14523758e37802f27b7f8cd973f5f3d33be7613952c0df904b68c4842f0e \ + --hash=sha256:ed447680ff21c14aaceb6a9f99a5f639f583ccfe4ce1a5e1d48eb41c3d6b3217 \ + --hash=sha256:f52a4ad2568314ee713715b1e2d79ab55fab11e8b304fd1462ff5cccf4264b3e \ + --hash=sha256:fbd60c6aaa07c31d7754edbc2334aef50601b7f1ada67a96eb1eb57c7c72378f \ + --hash=sha256:fc28e0db232c62ca0c3600884933178f0825c99be4474cdd645e378a10588125 \ + --hash=sha256:fe31de3002e7b08eb20823b3735b97c86c5926dd0581c7710a680b418a8709d4 \ + --hash=sha256:fec221a051150eeddfdfcff162e6db92c65ecf46cb0f7bb1bf812a1520ec026b \ + --hash=sha256:ff71073ebf0e42258a42a0b34f2c09ec384977e7f6808999102eedd5b49920e3 + # via google-resumable-media +google-resumable-media==2.3.3 \ + --hash=sha256:27c52620bd364d1c8116eaac4ea2afcbfb81ae9139fb3199652fcac1724bfb6c \ + --hash=sha256:5b52774ea7a829a8cdaa8bd2d4c3d4bc660c91b30857ab2668d0eb830f4ea8c5 + # via google-cloud-storage +googleapis-common-protos==1.56.4 \ + --hash=sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394 \ + --hash=sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417 + # via google-api-core +idna==3.3 \ + --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ + --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d + # via requests +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ + --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 + # via + # -r requirements.in + # twine +jeepney==0.8.0 \ + --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ + --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 + # via + # keyring + # secretstorage +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 + # via gcp-releasetool +keyring==23.8.2 \ + --hash=sha256:0d9973f8891850f1ade5f26aafd06bb16865fbbae3fc56b0defb6a14a2624003 \ + --hash=sha256:10d2a8639663fe2090705a00b8c47c687cacdf97598ea9c11456679fa974473a + # via + # gcp-releasetool + # twine +markupsafe==2.1.1 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 + # via jinja2 +nox==2022.8.7 \ + --hash=sha256:1b894940551dc5c389f9271d197ca5d655d40bdc6ccf93ed6880e4042760a34b \ + --hash=sha256:96cca88779e08282a699d672258ec01eb7c792d35bbbf538c723172bce23212c + # via -r requirements.in +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 + # via + # gcp-releasetool + # nox +pkginfo==1.8.3 \ + --hash=sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594 \ + --hash=sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c + # via twine +platformdirs==2.5.2 \ + --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ + --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 + # via virtualenv +protobuf==3.20.1 \ + --hash=sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf \ + --hash=sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f \ + --hash=sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f \ + --hash=sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7 \ + --hash=sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996 \ + --hash=sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067 \ + --hash=sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c \ + --hash=sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7 \ + --hash=sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9 \ + --hash=sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c \ + --hash=sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739 \ + --hash=sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91 \ + --hash=sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c \ + --hash=sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153 \ + --hash=sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9 \ + --hash=sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388 \ + --hash=sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e \ + --hash=sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab \ + --hash=sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde \ + --hash=sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531 \ + --hash=sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8 \ + --hash=sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7 \ + --hash=sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20 \ + --hash=sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3 + # via + # gcp-docuploader + # gcp-releasetool + # google-api-core +py==1.11.0 \ + --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ + --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 + # via nox +pyasn1==0.4.8 \ + --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ + --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.2.8 \ + --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \ + --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 + # via google-auth +pycparser==2.21 \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 + # via cffi +pygments==2.13.0 \ + --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 \ + --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 + # via + # readme-renderer + # rich +pyjwt==2.4.0 \ + --hash=sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf \ + --hash=sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba + # via gcp-releasetool +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc + # via packaging +pyperclip==1.8.2 \ + --hash=sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57 + # via gcp-releasetool +python-dateutil==2.8.2 \ + --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ + --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 + # via gcp-releasetool +readme-renderer==37.0 \ + --hash=sha256:07b7ea234e03e58f77cc222e206e6abb8f4c0435becce5104794ee591f9301c5 \ + --hash=sha256:9fa416704703e509eeb900696751c908ddeb2011319d93700d8f18baff887a69 + # via twine +requests==2.28.1 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 + # via + # gcp-releasetool + # google-api-core + # google-cloud-storage + # requests-toolbelt + # twine +requests-toolbelt==0.9.1 \ + --hash=sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f \ + --hash=sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0 + # via twine +rfc3986==2.0.0 \ + --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ + --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c + # via twine +rich==12.5.1 \ + --hash=sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb \ + --hash=sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca + # via twine +rsa==4.9 \ + --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ + --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 + # via google-auth +secretstorage==3.3.3 \ + --hash=sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77 \ + --hash=sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 + # via keyring +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via + # bleach + # gcp-docuploader + # google-auth + # python-dateutil +twine==4.0.1 \ + --hash=sha256:42026c18e394eac3e06693ee52010baa5313e4811d5a11050e7d48436cf41b9e \ + --hash=sha256:96b1cf12f7ae611a4a40b6ae8e9570215daff0611828f5fe1f37a16255ab24a0 + # via -r requirements.in +typing-extensions==4.3.0 \ + --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ + --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 + # via -r requirements.in +urllib3==1.26.12 \ + --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ + --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 + # via + # requests + # twine +virtualenv==20.16.3 \ + --hash=sha256:4193b7bc8a6cd23e4eb251ac64f29b4398ab2c233531e66e40b19a6b7b0d30c1 \ + --hash=sha256:d86ea0bb50e06252d79e6c241507cb904fcd66090c3271381372d6221a3970f9 + # via nox +webencodings==0.5.1 \ + --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ + --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 + # via bleach +wheel==0.37.1 \ + --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ + --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 + # via -r requirements.in +zipp==3.8.1 \ + --hash=sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2 \ + --hash=sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009 + # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +setuptools==65.2.0 \ + --hash=sha256:7f4bc85450898a09f76ebf28b72fa25bc7111f6c7d665d514a60bba9c75ef2a9 \ + --hash=sha256:a3ca5857c89f82f5c9410e8508cb32f4872a3bafd4aa7ae122a24ca33bccc750 + # via -r requirements.in diff --git a/packages/google-cloud-error-reporting/renovate.json b/packages/google-cloud-error-reporting/renovate.json index c21036d385e5..566a70f3cc3c 100644 --- a/packages/google-cloud-error-reporting/renovate.json +++ b/packages/google-cloud-error-reporting/renovate.json @@ -5,7 +5,7 @@ ":preserveSemverRanges", ":disableDependencyDashboard" ], - "ignorePaths": [".pre-commit-config.yaml"], + "ignorePaths": [".pre-commit-config.yaml", ".kokoro/requirements.txt"], "pip_requirements": { "fileMatch": ["requirements-test.txt", "samples/[\\S/]*constraints.txt", "samples/[\\S/]*constraints-test.txt"] } From 0064548207adc8956f5569fd9a2520c43fd9298a Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 15:22:09 -0400 Subject: [PATCH 363/467] chore(python): exclude `grpcio==1.49.0rc1` in tests (#374) Source-Link: https://github.com/googleapis/synthtool/commit/c4dd5953003d13b239f872d329c3146586bb417e Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:ce3c1686bc81145c81dd269bd12c4025c6b275b22d14641358827334fddb1d72 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../google-cloud-error-reporting/.kokoro/requirements.txt | 6 +++--- packages/google-cloud-error-reporting/noxfile.py | 7 +++++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index c6acdf3f90c4..23e106b65770 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:562802bfac02e012a6ac34eda282f81d06e77326b82a32d7bbb1369ff552b387 -# created: 2022-08-24T17:07:22.006876712Z + digest: sha256:ce3c1686bc81145c81dd269bd12c4025c6b275b22d14641358827334fddb1d72 +# created: 2022-08-29T17:28:30.441852797Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index c4b824f247e3..4b29ef247bed 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -136,9 +136,9 @@ cryptography==37.0.4 \ # via # gcp-releasetool # secretstorage -distlib==0.3.5 \ - --hash=sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe \ - --hash=sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c +distlib==0.3.6 \ + --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ + --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via virtualenv docutils==0.19 \ --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 70739b12dd8c..5f898a7a57c9 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -188,7 +188,9 @@ def unit(session): def install_systemtest_dependencies(session, *constraints): # Use pre-release gRPC for system tests. - session.install("--pre", "grpcio") + # Exclude version 1.49.0rc1 which has a known issue. + # See https://github.com/grpc/grpc/pull/30642 + session.install("--pre", "grpcio!=1.49.0rc1") session.install(*SYSTEM_TEST_STANDARD_DEPENDENCIES, *constraints) @@ -368,7 +370,8 @@ def prerelease_deps(session): # dependency of grpc "six", "googleapis-common-protos", - "grpcio", + # Exclude version 1.49.0rc1 which has a known issue. See https://github.com/grpc/grpc/pull/30642 + "grpcio!=1.49.0rc1", "grpcio-status", "google-api-core", "proto-plus", From 8da610cad4b89871915afd5472675a7abcdd9f60 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 18:54:13 +0000 Subject: [PATCH 364/467] ci(python): fix path to requirements.txt in release script (#375) Source-Link: https://github.com/googleapis/synthtool/commit/fdba3ed145bdb2f4f3eff434d4284b1d03b80d34 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:1f0dbd02745fb7cf255563dab5968345989308544e52b7f460deadd5e78e63b0 --- .../.github/.OwlBot.lock.yaml | 3 +-- .../.kokoro/release.sh | 2 +- .../.kokoro/requirements.txt | 24 +++++++++---------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 23e106b65770..0d9eb2af9352 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:ce3c1686bc81145c81dd269bd12c4025c6b275b22d14641358827334fddb1d72 -# created: 2022-08-29T17:28:30.441852797Z + digest: sha256:1f0dbd02745fb7cf255563dab5968345989308544e52b7f460deadd5e78e63b0 diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh index 2efe6b7ed77a..4a5ad17a40ed 100755 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -16,7 +16,7 @@ set -eo pipefail # Start the releasetool reporter -python3 -m pip install --require-hashes -r .kokoro/requirements.txt +python3 -m pip install --require-hashes -r github/python-error-reporting/.kokoro/requirements.txt python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script # Disable buffering, so that the logs stream through. diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 4b29ef247bed..92b2f727e777 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -100,9 +100,9 @@ click==8.0.4 \ # via # gcp-docuploader # gcp-releasetool -colorlog==6.6.0 \ - --hash=sha256:344f73204009e4c83c5b6beb00b3c45dc70fcdae3c80db919e0a4171d006fde8 \ - --hash=sha256:351c51e866c86c3217f08e4b067a7974a678be78f07f85fc2d55b8babde6d94e +colorlog==6.7.0 \ + --hash=sha256:0d33ca236784a1ba3ff9c532d4964126d8a2c44f1f0cb1d2b0728196f512f662 \ + --hash=sha256:bd94bd21c1e13fac7bd3153f4bc3a7dc0eb0974b8bc2fdf1a989e474f6e582e5 # via # gcp-docuploader # nox @@ -152,9 +152,9 @@ gcp-docuploader==0.6.3 \ --hash=sha256:ba8c9d76b3bbac54b0311c503a373b00edc2dc02d6d54ea9507045adb8e870f7 \ --hash=sha256:c0f5aaa82ce1854a386197e4e359b120ad6d4e57ae2c812fce42219a3288026b # via -r requirements.in -gcp-releasetool==1.8.6 \ - --hash=sha256:42e51ab8e2e789bc8e22a03c09352962cd3452951c801a2230d564816630304a \ - --hash=sha256:a3518b79d1b243c494eac392a01c7fd65187fd6d52602dcab9b529bc934d4da1 +gcp-releasetool==1.8.7 \ + --hash=sha256:3d2a67c9db39322194afb3b427e9cb0476ce8f2a04033695f0aeb63979fc2b37 \ + --hash=sha256:5e4d28f66e90780d77f3ecf1e9155852b0c3b13cbccb08ab07e66b2357c8da8d # via -r requirements.in google-api-core==2.8.2 \ --hash=sha256:06f7244c640322b508b125903bb5701bebabce8832f85aba9335ec00b3d02edc \ @@ -251,9 +251,9 @@ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via gcp-releasetool -keyring==23.8.2 \ - --hash=sha256:0d9973f8891850f1ade5f26aafd06bb16865fbbae3fc56b0defb6a14a2624003 \ - --hash=sha256:10d2a8639663fe2090705a00b8c47c687cacdf97598ea9c11456679fa974473a +keyring==23.9.0 \ + --hash=sha256:4c32a31174faaee48f43a7e2c7e9c3216ec5e95acf22a2bebfb4a1d05056ee44 \ + --hash=sha256:98f060ec95ada2ab910c195a2d4317be6ef87936a766b239c46aa3c7aac4f0db # via # gcp-releasetool # twine @@ -440,9 +440,9 @@ urllib3==1.26.12 \ # via # requests # twine -virtualenv==20.16.3 \ - --hash=sha256:4193b7bc8a6cd23e4eb251ac64f29b4398ab2c233531e66e40b19a6b7b0d30c1 \ - --hash=sha256:d86ea0bb50e06252d79e6c241507cb904fcd66090c3271381372d6221a3970f9 +virtualenv==20.16.4 \ + --hash=sha256:014f766e4134d0008dcaa1f95bafa0fb0f575795d07cae50b1bee514185d6782 \ + --hash=sha256:035ed57acce4ac35c82c9d8802202b0e71adac011a511ff650cbcf9635006a22 # via nox webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ From c2ba0253befa36ece773c26b41dc7d5412530576 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 2 Sep 2022 00:52:28 +0000 Subject: [PATCH 365/467] chore(python): update .kokoro/requirements.txt (#376) Source-Link: https://github.com/googleapis/synthtool/commit/703554a14c7479542335b62fa69279f93a9e38ec Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:94961fdc5c9ca6d13530a6a414a49d2f607203168215d074cdb0a1df9ec31c0b --- .../.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/.kokoro/requirements.txt | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 0d9eb2af9352..2fa0f7c4fe15 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:1f0dbd02745fb7cf255563dab5968345989308544e52b7f460deadd5e78e63b0 + digest: sha256:94961fdc5c9ca6d13530a6a414a49d2f607203168215d074cdb0a1df9ec31c0b diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 92b2f727e777..385f2d4d6106 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -241,6 +241,10 @@ importlib-metadata==4.12.0 \ # via # -r requirements.in # twine +jaraco-classes==3.2.2 \ + --hash=sha256:6745f113b0b588239ceb49532aa09c3ebb947433ce311ef2f8e3ad64ebb74594 \ + --hash=sha256:e6ef6fd3fcf4579a7a019d87d1e56a883f4e4c35cfe925f86731abc58804e647 + # via keyring jeepney==0.8.0 \ --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 @@ -299,6 +303,10 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 +more-itertools==8.14.0 \ + --hash=sha256:1bc4f91ee5b1b31ac7ceacc17c09befe6a40a503907baf9c839c229b5095cfd2 \ + --hash=sha256:c09443cd3d5438b8dafccd867a6bc1cb0894389e90cb53d227456b0b0bccb750 + # via jaraco-classes nox==2022.8.7 \ --hash=sha256:1b894940551dc5c389f9271d197ca5d655d40bdc6ccf93ed6880e4042760a34b \ --hash=sha256:96cca88779e08282a699d672258ec01eb7c792d35bbbf538c723172bce23212c From 75c1c919d19da71bdd760d1951b038f301d894c2 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 2 Sep 2022 18:40:28 +0000 Subject: [PATCH 366/467] chore(python): exclude setup.py in renovate config (#380) Source-Link: https://github.com/googleapis/synthtool/commit/56da63e80c384a871356d1ea6640802017f213b4 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:993a058718e84a82fda04c3177e58f0a43281a996c7c395e0a56ccc4d6d210d7 --- packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/renovate.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 2fa0f7c4fe15..b8dcb4a4af99 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:94961fdc5c9ca6d13530a6a414a49d2f607203168215d074cdb0a1df9ec31c0b + digest: sha256:993a058718e84a82fda04c3177e58f0a43281a996c7c395e0a56ccc4d6d210d7 diff --git a/packages/google-cloud-error-reporting/renovate.json b/packages/google-cloud-error-reporting/renovate.json index 566a70f3cc3c..39b2a0ec9296 100644 --- a/packages/google-cloud-error-reporting/renovate.json +++ b/packages/google-cloud-error-reporting/renovate.json @@ -5,7 +5,7 @@ ":preserveSemverRanges", ":disableDependencyDashboard" ], - "ignorePaths": [".pre-commit-config.yaml", ".kokoro/requirements.txt"], + "ignorePaths": [".pre-commit-config.yaml", ".kokoro/requirements.txt", "setup.py"], "pip_requirements": { "fileMatch": ["requirements-test.txt", "samples/[\\S/]*constraints.txt", "samples/[\\S/]*constraints-test.txt"] } From b9df486d0c7b8b94e0b82e658df49f611df0a486 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 6 Sep 2022 17:41:08 +0200 Subject: [PATCH 367/467] chore(deps): update dependency pytest to v7.1.3 (#381) --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index d00689e0623a..e07168502ea9 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==7.1.2 +pytest==7.1.3 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index fb466e5093ef..6f722c66e151 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==7.1.2 +pytest==7.1.3 mock==4.0.3 From ab68179ce864a506894ec5826a51bb240ab6151c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 14:20:13 +0000 Subject: [PATCH 368/467] chore: Bump gapic-generator-python version to 1.3.0 (#382) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 472561635 Source-Link: https://github.com/googleapis/googleapis/commit/332ecf599f8e747d8d1213b77ae7db26eff12814 Source-Link: https://github.com/googleapis/googleapis-gen/commit/4313d682880fd9d7247291164d4e9d3d5bd9f177 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDMxM2Q2ODI4ODBmZDlkNzI0NzI5MTE2NGQ0ZTlkM2Q1YmQ5ZjE3NyJ9 --- .../error_group_service/async_client.py | 14 + .../services/error_group_service/client.py | 14 + .../error_stats_service/async_client.py | 21 ++ .../services/error_stats_service/client.py | 21 ++ .../report_errors_service/async_client.py | 7 + .../services/report_errors_service/client.py | 7 + .../google-cloud-error-reporting/mypy.ini | 2 +- ...ted_error_group_service_get_group_async.py | 7 + ...ated_error_group_service_get_group_sync.py | 7 + ..._error_group_service_update_group_async.py | 7 + ...d_error_group_service_update_group_sync.py | 7 + ...error_stats_service_delete_events_async.py | 7 + ..._error_stats_service_delete_events_sync.py | 7 + ...d_error_stats_service_list_events_async.py | 7 + ...ed_error_stats_service_list_events_sync.py | 7 + ...or_stats_service_list_group_stats_async.py | 7 + ...ror_stats_service_list_group_stats_sync.py | 7 + ...errors_service_report_error_event_async.py | 7 + ..._errors_service_report_error_event_sync.py | 7 + ...ippet_metadata_errorreporting_v1beta1.json | 240 +++++++++--------- 20 files changed, 289 insertions(+), 121 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 0a03d9a39b53..8af3cd8213ad 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -217,6 +217,13 @@ async def get_group( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 async def sample_get_group(): @@ -319,6 +326,13 @@ async def update_group( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 async def sample_update_group(): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index df10c96900c3..86ae1120b043 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -435,6 +435,13 @@ def get_group( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 def sample_get_group(): @@ -537,6 +544,13 @@ def update_group( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 def sample_update_group(): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 03095875ac3a..88b3190008de 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -221,6 +221,13 @@ async def list_group_stats( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 async def sample_list_group_stats(): @@ -353,6 +360,13 @@ async def list_events( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 async def sample_list_events(): @@ -477,6 +491,13 @@ async def delete_events( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 async def sample_delete_events(): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 85de24ae07de..776909891db8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -439,6 +439,13 @@ def list_group_stats( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 def sample_list_group_stats(): @@ -571,6 +578,13 @@ def list_events( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 def sample_list_events(): @@ -695,6 +709,13 @@ def delete_events( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 def sample_delete_events(): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index a8f85c3315b9..ae912ecd11da 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -229,6 +229,13 @@ async def report_error_event( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 async def sample_report_error_event(): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 0f18a72b278a..9d6f734a1228 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -433,6 +433,13 @@ def report_error_event( .. code-block:: python + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 def sample_report_error_event(): diff --git a/packages/google-cloud-error-reporting/mypy.ini b/packages/google-cloud-error-reporting/mypy.ini index 4505b485436b..574c5aed394b 100644 --- a/packages/google-cloud-error-reporting/mypy.ini +++ b/packages/google-cloud-error-reporting/mypy.ini @@ -1,3 +1,3 @@ [mypy] -python_version = 3.6 +python_version = 3.7 namespace_packages = True diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py index 7a6e06fc8322..7b49e8b8764e 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py index 9c8ac42b73d6..28d644283a12 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py index 4581e274b910..f0a68ab334ca 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py index 67cb2a40b366..b021265af76c 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py index e8f462be2f93..e30df345dc73 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py index 75da055a8320..0b16d477766e 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py index 8e3bd85fedbe..9d25b82174fc 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py index 9bd122f5fbcb..19cbf488d91a 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py index d6176174bdeb..25ae2ff0b473 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py index 02053bde10d2..0d779b46662f 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py index 333e710b517d..f836815d4c49 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py index 4ffd5a4f6cf4..575f57aa7b00 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py @@ -24,6 +24,13 @@ # [START clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import errorreporting_v1beta1 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json index 6b5f59262728..4d0884800215 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json @@ -59,33 +59,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_async", "segments": [ { - "end": 44, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 44, + "end": 51, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 38, - "start": 34, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 41, - "start": 39, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 45, - "start": 42, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], @@ -139,33 +139,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_sync", "segments": [ { - "end": 44, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 44, + "end": 51, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 38, - "start": 34, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 41, - "start": 39, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 45, - "start": 42, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], @@ -220,33 +220,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_async", "segments": [ { - "end": 43, + "end": 50, "start": 27, "type": "FULL" }, { - "end": 43, + "end": 50, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 37, - "start": 34, + "end": 44, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 40, - "start": 38, + "end": 47, + "start": 45, "type": "REQUEST_EXECUTION" }, { - "end": 44, - "start": 41, + "end": 51, + "start": 48, "type": "RESPONSE_HANDLING" } ], @@ -300,33 +300,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_sync", "segments": [ { - "end": 43, + "end": 50, "start": 27, "type": "FULL" }, { - "end": 43, + "end": 50, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 37, - "start": 34, + "end": 44, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 40, - "start": 38, + "end": 47, + "start": 45, "type": "REQUEST_EXECUTION" }, { - "end": 44, - "start": 41, + "end": 51, + "start": 48, "type": "RESPONSE_HANDLING" } ], @@ -381,33 +381,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_async", "segments": [ { - "end": 44, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 44, + "end": 51, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 38, - "start": 34, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 41, - "start": 39, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 45, - "start": 42, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], @@ -461,33 +461,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_sync", "segments": [ { - "end": 44, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 44, + "end": 51, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 38, - "start": 34, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 41, - "start": 39, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 45, - "start": 42, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], @@ -546,33 +546,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_async", "segments": [ { - "end": 46, + "end": 53, "start": 27, "type": "FULL" }, { - "end": 46, + "end": 53, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 39, - "start": 34, + "end": 46, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 42, - "start": 40, + "end": 49, + "start": 47, "type": "REQUEST_EXECUTION" }, { - "end": 47, - "start": 43, + "end": 54, + "start": 50, "type": "RESPONSE_HANDLING" } ], @@ -630,33 +630,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_sync", "segments": [ { - "end": 46, + "end": 53, "start": 27, "type": "FULL" }, { - "end": 46, + "end": 53, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 39, - "start": 34, + "end": 46, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 42, - "start": 40, + "end": 49, + "start": 47, "type": "REQUEST_EXECUTION" }, { - "end": 47, - "start": 43, + "end": 54, + "start": 50, "type": "RESPONSE_HANDLING" } ], @@ -715,33 +715,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_async", "segments": [ { - "end": 45, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 45, + "end": 52, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 38, - "start": 34, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 41, - "start": 39, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 46, - "start": 42, + "end": 53, + "start": 49, "type": "RESPONSE_HANDLING" } ], @@ -799,33 +799,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_sync", "segments": [ { - "end": 45, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 45, + "end": 52, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 38, - "start": 34, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 41, - "start": 39, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 46, - "start": 42, + "end": 53, + "start": 49, "type": "RESPONSE_HANDLING" } ], @@ -884,33 +884,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_async", "segments": [ { - "end": 48, + "end": 55, "start": 27, "type": "FULL" }, { - "end": 48, + "end": 55, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 42, - "start": 34, + "end": 49, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 45, - "start": 43, + "end": 52, + "start": 50, "type": "REQUEST_EXECUTION" }, { - "end": 49, - "start": 46, + "end": 56, + "start": 53, "type": "RESPONSE_HANDLING" } ], @@ -968,33 +968,33 @@ "regionTag": "clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_sync", "segments": [ { - "end": 48, + "end": 55, "start": 27, "type": "FULL" }, { - "end": 48, + "end": 55, "start": 27, "type": "SHORT" }, { - "end": 33, - "start": 31, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 42, - "start": 34, + "end": 49, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 45, - "start": 43, + "end": 52, + "start": 50, "type": "REQUEST_EXECUTION" }, { - "end": 49, - "start": 46, + "end": 56, + "start": 53, "type": "RESPONSE_HANDLING" } ], From 998a5f0e5d74933e9265d940d4e20690faca76d6 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 13:50:29 +0000 Subject: [PATCH 369/467] chore: use gapic-generator-python 1.3.1 (#383) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 472772457 Source-Link: https://github.com/googleapis/googleapis/commit/855b74d203deeb0f7a0215f9454cdde62a1f9b86 Source-Link: https://github.com/googleapis/googleapis-gen/commit/b64b1e7da3e138f15ca361552ef0545e54891b4f Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYjY0YjFlN2RhM2UxMzhmMTVjYTM2MTU1MmVmMDU0NWU1NDg5MWI0ZiJ9 --- .../gapic/errorreporting_v1beta1/test_error_group_service.py | 4 ++-- .../gapic/errorreporting_v1beta1/test_error_stats_service.py | 4 ++-- .../errorreporting_v1beta1/test_report_errors_service.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index bc5be3a38a34..0594bf3fdd90 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 956aa9304ab5..a69988581ab5 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index d89e07129074..1271610acca4 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc From d3135239f3561e277757ccfc98eb7d9b78dabad6 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 14:38:14 +0000 Subject: [PATCH 370/467] chore: use gapic generator python 1.4.1 (#384) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 473833416 Source-Link: https://github.com/googleapis/googleapis/commit/565a5508869557a3228b871101e4e4ebd8f93d11 Source-Link: https://github.com/googleapis/googleapis-gen/commit/1ee1a06c6de3ca8b843572c1fde0548f84236989 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMWVlMWEwNmM2ZGUzY2E4Yjg0MzU3MmMxZmRlMDU0OGY4NDIzNjk4OSJ9 --- .../gapic/errorreporting_v1beta1/test_error_group_service.py | 2 +- .../gapic/errorreporting_v1beta1/test_error_stats_service.py | 2 +- .../gapic/errorreporting_v1beta1/test_report_errors_service.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 0594bf3fdd90..994c484c0b67 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -27,7 +27,7 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from google.api_core import client_options from google.api_core import exceptions as core_exceptions diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index a69988581ab5..c5fbcf640d9a 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -27,7 +27,7 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from google.api_core import client_options from google.api_core import exceptions as core_exceptions diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 1271610acca4..85eb398703e1 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -27,7 +27,7 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from google.api_core import client_options from google.api_core import exceptions as core_exceptions From 5dce058a07139817ddd03c8bfeaea756641e3a8a Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 16:14:29 +0000 Subject: [PATCH 371/467] chore: detect samples tests in nested directories (#385) Source-Link: https://github.com/googleapis/synthtool/commit/50db768f450a50d7c1fd62513c113c9bb96fd434 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:e09366bdf0fd9c8976592988390b24d53583dd9f002d476934da43725adbb978 --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../samples/snippets/api/noxfile.py | 4 ++-- .../samples/snippets/fluent_on_compute/noxfile.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index b8dcb4a4af99..aa547962eb0a 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:993a058718e84a82fda04c3177e58f0a43281a996c7c395e0a56ccc4d6d210d7 + digest: sha256:e09366bdf0fd9c8976592988390b24d53583dd9f002d476934da43725adbb978 diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py index 5fcb9d7461f2..0398d72ff690 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py @@ -207,8 +207,8 @@ def _session_tests( session: nox.sessions.Session, post_install: Callable = None ) -> None: # check for presence of tests - test_list = glob.glob("*_test.py") + glob.glob("test_*.py") - test_list.extend(glob.glob("tests")) + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob("**/test_*.py", recursive=True) + test_list.extend(glob.glob("**/tests", recursive=True)) if len(test_list) == 0: print("No tests found, skipping directory.") diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py index 5fcb9d7461f2..0398d72ff690 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py @@ -207,8 +207,8 @@ def _session_tests( session: nox.sessions.Session, post_install: Callable = None ) -> None: # check for presence of tests - test_list = glob.glob("*_test.py") + glob.glob("test_*.py") - test_list.extend(glob.glob("tests")) + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob("**/test_*.py", recursive=True) + test_list.extend(glob.glob("**/tests", recursive=True)) if len(test_list) == 0: print("No tests found, skipping directory.") From ecb02e09222557833b9a736271d4581e11966e8a Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 12:15:03 -0400 Subject: [PATCH 372/467] fix(deps): require protobuf >= 3.20.2 (#388) * chore: exclude requirements.txt file from renovate-bot Source-Link: https://github.com/googleapis/synthtool/commit/f58d3135a2fab20e225d98741dbc06d57459b816 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:7a40313731a7cb1454eef6b33d3446ebb121836738dc3ab3d2d3ded5268c35b6 * update constraints files * fix(deps): require protobuf 3.20.2 Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/requirements.txt | 49 +++++++++---------- .../google-cloud-error-reporting/setup.py | 2 +- .../testing/constraints-3.7.txt | 2 +- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index aa547962eb0a..3815c983cb16 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:e09366bdf0fd9c8976592988390b24d53583dd9f002d476934da43725adbb978 + digest: sha256:7a40313731a7cb1454eef6b33d3446ebb121836738dc3ab3d2d3ded5268c35b6 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 385f2d4d6106..d15994bac93c 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -325,31 +325,30 @@ platformdirs==2.5.2 \ --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 # via virtualenv -protobuf==3.20.1 \ - --hash=sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf \ - --hash=sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f \ - --hash=sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f \ - --hash=sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7 \ - --hash=sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996 \ - --hash=sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067 \ - --hash=sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c \ - --hash=sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7 \ - --hash=sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9 \ - --hash=sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c \ - --hash=sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739 \ - --hash=sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91 \ - --hash=sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c \ - --hash=sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153 \ - --hash=sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9 \ - --hash=sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388 \ - --hash=sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e \ - --hash=sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab \ - --hash=sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde \ - --hash=sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531 \ - --hash=sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8 \ - --hash=sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7 \ - --hash=sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20 \ - --hash=sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3 +protobuf==3.20.2 \ + --hash=sha256:03d76b7bd42ac4a6e109742a4edf81ffe26ffd87c5993126d894fe48a120396a \ + --hash=sha256:09e25909c4297d71d97612f04f41cea8fa8510096864f2835ad2f3b3df5a5559 \ + --hash=sha256:18e34a10ae10d458b027d7638a599c964b030c1739ebd035a1dfc0e22baa3bfe \ + --hash=sha256:291fb4307094bf5ccc29f424b42268640e00d5240bf0d9b86bf3079f7576474d \ + --hash=sha256:2c0b040d0b5d5d207936ca2d02f00f765906622c07d3fa19c23a16a8ca71873f \ + --hash=sha256:384164994727f274cc34b8abd41a9e7e0562801361ee77437099ff6dfedd024b \ + --hash=sha256:3cb608e5a0eb61b8e00fe641d9f0282cd0eedb603be372f91f163cbfbca0ded0 \ + --hash=sha256:5d9402bf27d11e37801d1743eada54372f986a372ec9679673bfcc5c60441151 \ + --hash=sha256:712dca319eee507a1e7df3591e639a2b112a2f4a62d40fe7832a16fd19151750 \ + --hash=sha256:7a5037af4e76c975b88c3becdf53922b5ffa3f2cddf657574a4920a3b33b80f3 \ + --hash=sha256:8228e56a865c27163d5d1d1771d94b98194aa6917bcfb6ce139cbfa8e3c27334 \ + --hash=sha256:84a1544252a933ef07bb0b5ef13afe7c36232a774affa673fc3636f7cee1db6c \ + --hash=sha256:84fe5953b18a383fd4495d375fe16e1e55e0a3afe7b4f7b4d01a3a0649fcda9d \ + --hash=sha256:9c673c8bfdf52f903081816b9e0e612186684f4eb4c17eeb729133022d6032e3 \ + --hash=sha256:9f876a69ca55aed879b43c295a328970306e8e80a263ec91cf6e9189243c613b \ + --hash=sha256:a9e5ae5a8e8985c67e8944c23035a0dff2c26b0f5070b2f55b217a1c33bbe8b1 \ + --hash=sha256:b4fdb29c5a7406e3f7ef176b2a7079baa68b5b854f364c21abe327bbeec01cdb \ + --hash=sha256:c184485e0dfba4dfd451c3bd348c2e685d6523543a0f91b9fd4ae90eb09e8422 \ + --hash=sha256:c9cdf251c582c16fd6a9f5e95836c90828d51b0069ad22f463761d27c6c19019 \ + --hash=sha256:e39cf61bb8582bda88cdfebc0db163b774e7e03364bbf9ce1ead13863e81e359 \ + --hash=sha256:e8fbc522303e09036c752a0afcc5c0603e917222d8bedc02813fd73b4b4ed804 \ + --hash=sha256:f34464ab1207114e73bba0794d1257c150a2b89b7a9faf504e00af7c9fd58978 \ + --hash=sha256:f52dabc96ca99ebd2169dadbe018824ebda08a795c7684a0b7d203a290f3adb0 # via # gcp-docuploader # gcp-releasetool diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index d587386526bb..56a1f5f6bfe8 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -32,7 +32,7 @@ "google-cloud-logging>=1.14.0, <4.0.0dev", "google-api-core[grpc] >= 1.32.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", "proto-plus >= 1.22.0, <2.0.0dev", - "protobuf >= 3.19.0, <5.0.0dev", + "protobuf >= 3.20.2, <5.0.0dev", ] extras = {} diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt index 748724872d92..0c033d540960 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt @@ -8,4 +8,4 @@ google-cloud-logging==1.14.0 google-api-core==1.32.0 proto-plus==1.22.0 -protobuf==3.19.0 +protobuf==3.20.2 From a21d870caa8e077308b9927d65067a4221a87a90 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 20:17:37 -0400 Subject: [PATCH 373/467] chore(main): release 1.6.2 (#389) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 002eac0d64e5..5edbdb74c542 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.6.2](https://github.com/googleapis/python-error-reporting/compare/v1.6.1...v1.6.2) (2022-10-03) + + +### Bug Fixes + +* **deps:** Require protobuf >= 3.20.2 ([#388](https://github.com/googleapis/python-error-reporting/issues/388)) ([adde212](https://github.com/googleapis/python-error-reporting/commit/adde212c5c37ecbfac9a7ccda9e1fa027c670e52)) + ## [1.6.1](https://github.com/googleapis/python-error-reporting/compare/v1.6.0...v1.6.1) (2022-08-12) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 56a1f5f6bfe8..7b360e052ff8 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.6.1" +version = "1.6.2" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 023ae29592aa1664e415ed96350e7c1667cff26a Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 4 Oct 2022 15:35:06 +0200 Subject: [PATCH 374/467] chore(deps): update dependency google-cloud-error-reporting to v1.6.2 (#390) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 083d64d07c2f..21654ae59773 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.6.1 +google-cloud-error-reporting==1.6.2 From f585c1a23280d58656163defbe21aaa79ff63561 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Fri, 7 Oct 2022 16:46:49 -0400 Subject: [PATCH 375/467] fix(deps): allow protobuf 3.19.5 (#391) * fix(deps): allow protobuf 3.19.5 * explicitly exclude protobuf 4.21.0 --- packages/google-cloud-error-reporting/setup.py | 2 +- .../google-cloud-error-reporting/testing/constraints-3.7.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 7b360e052ff8..f19e35edc428 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -32,7 +32,7 @@ "google-cloud-logging>=1.14.0, <4.0.0dev", "google-api-core[grpc] >= 1.32.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", "proto-plus >= 1.22.0, <2.0.0dev", - "protobuf >= 3.20.2, <5.0.0dev", + "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", ] extras = {} diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt index 0c033d540960..c4e51385da33 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt @@ -8,4 +8,4 @@ google-cloud-logging==1.14.0 google-api-core==1.32.0 proto-plus==1.22.0 -protobuf==3.20.2 +protobuf==3.19.5 From 4784fe06f9903ffba3c64bebcd1b50d9c2361275 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 12:19:47 -0400 Subject: [PATCH 376/467] chore(main): release 1.6.3 (#392) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ packages/google-cloud-error-reporting/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 5edbdb74c542..945f6fb40e56 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.6.3](https://github.com/googleapis/python-error-reporting/compare/v1.6.2...v1.6.3) (2022-10-07) + + +### Bug Fixes + +* **deps:** Allow protobuf 3.19.5 ([#391](https://github.com/googleapis/python-error-reporting/issues/391)) ([6a42c05](https://github.com/googleapis/python-error-reporting/commit/6a42c056a7535f4c43d7698525e19df655c91092)) + ## [1.6.2](https://github.com/googleapis/python-error-reporting/compare/v1.6.1...v1.6.2) (2022-10-03) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index f19e35edc428..23a8f2ef0ef0 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -22,7 +22,7 @@ name = "google-cloud-error-reporting" description = "Error Reporting API client library" -version = "1.6.2" +version = "1.6.3" # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' From 22b84c11a65ee71ec2bb31bdf77bcba05ba0bf6d Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 10 Oct 2022 19:57:27 +0200 Subject: [PATCH 377/467] chore(deps): update dependency google-cloud-error-reporting to v1.6.3 (#393) --- .../samples/snippets/api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt index 21654ae59773..fd18a2fa936e 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt @@ -1 +1 @@ -google-cloud-error-reporting==1.6.2 +google-cloud-error-reporting==1.6.3 From a172bac6b2b4af76c8ead236f127d2d428218312 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 12 Oct 2022 11:53:42 -0700 Subject: [PATCH 378/467] chore: update blunderbuss asignments (#394) --- packages/google-cloud-error-reporting/.github/blunderbuss.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/blunderbuss.yml b/packages/google-cloud-error-reporting/.github/blunderbuss.yml index 148ebf4e81cb..a9d3f44e3967 100644 --- a/packages/google-cloud-error-reporting/.github/blunderbuss.yml +++ b/packages/google-cloud-error-reporting/.github/blunderbuss.yml @@ -1,4 +1,4 @@ assign_issues: - - Daniel-Sanche + - googleapis/api-logging-reviewers assign_prs: - - Daniel-Sanche + - googleapis/api-logging-reviewers From c90913a9cb6e9ada57f1a54f6304c1fb9868167c Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 26 Oct 2022 12:55:19 +0200 Subject: [PATCH 379/467] chore(deps): update dependency pytest to v7.2.0 (#395) --- .../samples/snippets/api/requirements-test.txt | 2 +- .../samples/snippets/fluent_on_compute/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt index e07168502ea9..49780e035690 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt @@ -1 +1 @@ -pytest==7.1.3 +pytest==7.2.0 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt index 6f722c66e151..980c425b9393 100644 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt @@ -1,2 +1,2 @@ -pytest==7.1.3 +pytest==7.2.0 mock==4.0.3 From 4e62c528b0b21cd7a74249ffc8ff30a90584d69f Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 8 Nov 2022 09:35:03 -0800 Subject: [PATCH 380/467] chore(python): update dependencies in .kokoro/requirements.txt (#397) Source-Link: https://github.com/googleapis/synthtool/commit/e3a1277ac35fc88c09db1930533e24292b132ced Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:452901c74a22f9b9a3bd02bce780b8e8805c97270d424684bff809ce5be8c2a2 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/requirements.txt | 325 ++++++++++-------- .../google-cloud-error-reporting/noxfile.py | 11 +- 3 files changed, 187 insertions(+), 151 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 3815c983cb16..12edee77695a 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:7a40313731a7cb1454eef6b33d3446ebb121836738dc3ab3d2d3ded5268c35b6 + digest: sha256:452901c74a22f9b9a3bd02bce780b8e8805c97270d424684bff809ce5be8c2a2 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index d15994bac93c..31425f164783 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -20,9 +20,9 @@ cachetools==5.2.0 \ --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \ --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db # via google-auth -certifi==2022.6.15 \ - --hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d \ - --hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412 +certifi==2022.9.24 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 # via requests cffi==1.15.1 \ --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ @@ -110,29 +110,33 @@ commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 # via rich -cryptography==37.0.4 \ - --hash=sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59 \ - --hash=sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596 \ - --hash=sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3 \ - --hash=sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5 \ - --hash=sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab \ - --hash=sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884 \ - --hash=sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82 \ - --hash=sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b \ - --hash=sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441 \ - --hash=sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa \ - --hash=sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d \ - --hash=sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b \ - --hash=sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a \ - --hash=sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6 \ - --hash=sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157 \ - --hash=sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280 \ - --hash=sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282 \ - --hash=sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67 \ - --hash=sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8 \ - --hash=sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046 \ - --hash=sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327 \ - --hash=sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9 +cryptography==38.0.3 \ + --hash=sha256:068147f32fa662c81aebab95c74679b401b12b57494872886eb5c1139250ec5d \ + --hash=sha256:06fc3cc7b6f6cca87bd56ec80a580c88f1da5306f505876a71c8cfa7050257dd \ + --hash=sha256:25c1d1f19729fb09d42e06b4bf9895212292cb27bb50229f5aa64d039ab29146 \ + --hash=sha256:402852a0aea73833d982cabb6d0c3bb582c15483d29fb7085ef2c42bfa7e38d7 \ + --hash=sha256:4e269dcd9b102c5a3d72be3c45d8ce20377b8076a43cbed6f660a1afe365e436 \ + --hash=sha256:5419a127426084933076132d317911e3c6eb77568a1ce23c3ac1e12d111e61e0 \ + --hash=sha256:554bec92ee7d1e9d10ded2f7e92a5d70c1f74ba9524947c0ba0c850c7b011828 \ + --hash=sha256:5e89468fbd2fcd733b5899333bc54d0d06c80e04cd23d8c6f3e0542358c6060b \ + --hash=sha256:65535bc550b70bd6271984d9863a37741352b4aad6fb1b3344a54e6950249b55 \ + --hash=sha256:6ab9516b85bebe7aa83f309bacc5f44a61eeb90d0b4ec125d2d003ce41932d36 \ + --hash=sha256:6addc3b6d593cd980989261dc1cce38263c76954d758c3c94de51f1e010c9a50 \ + --hash=sha256:728f2694fa743a996d7784a6194da430f197d5c58e2f4e278612b359f455e4a2 \ + --hash=sha256:785e4056b5a8b28f05a533fab69febf5004458e20dad7e2e13a3120d8ecec75a \ + --hash=sha256:78cf5eefac2b52c10398a42765bfa981ce2372cbc0457e6bf9658f41ec3c41d8 \ + --hash=sha256:7f836217000342d448e1c9a342e9163149e45d5b5eca76a30e84503a5a96cab0 \ + --hash=sha256:8d41a46251bf0634e21fac50ffd643216ccecfaf3701a063257fe0b2be1b6548 \ + --hash=sha256:984fe150f350a3c91e84de405fe49e688aa6092b3525f407a18b9646f6612320 \ + --hash=sha256:9b24bcff7853ed18a63cfb0c2b008936a9554af24af2fb146e16d8e1aed75748 \ + --hash=sha256:b1b35d9d3a65542ed2e9d90115dfd16bbc027b3f07ee3304fc83580f26e43249 \ + --hash=sha256:b1b52c9e5f8aa2b802d48bd693190341fae201ea51c7a167d69fc48b60e8a959 \ + --hash=sha256:bbf203f1a814007ce24bd4d51362991d5cb90ba0c177a9c08825f2cc304d871f \ + --hash=sha256:be243c7e2bfcf6cc4cb350c0d5cdf15ca6383bbcb2a8ef51d3c9411a9d4386f0 \ + --hash=sha256:bfbe6ee19615b07a98b1d2287d6a6073f734735b49ee45b11324d85efc4d5cbd \ + --hash=sha256:c46837ea467ed1efea562bbeb543994c2d1f6e800785bd5a2c98bc096f5cb220 \ + --hash=sha256:dfb4f4dd568de1b6af9f4cda334adf7d72cf5bc052516e1b2608b683375dd95c \ + --hash=sha256:ed7b00096790213e09eb11c97cc6e2b757f15f3d2f85833cd2d3ec3fe37c1722 # via # gcp-releasetool # secretstorage @@ -148,23 +152,23 @@ filelock==3.8.0 \ --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 # via virtualenv -gcp-docuploader==0.6.3 \ - --hash=sha256:ba8c9d76b3bbac54b0311c503a373b00edc2dc02d6d54ea9507045adb8e870f7 \ - --hash=sha256:c0f5aaa82ce1854a386197e4e359b120ad6d4e57ae2c812fce42219a3288026b +gcp-docuploader==0.6.4 \ + --hash=sha256:01486419e24633af78fd0167db74a2763974765ee8078ca6eb6964d0ebd388af \ + --hash=sha256:70861190c123d907b3b067da896265ead2eeb9263969d6955c9e0bb091b5ccbf # via -r requirements.in -gcp-releasetool==1.8.7 \ - --hash=sha256:3d2a67c9db39322194afb3b427e9cb0476ce8f2a04033695f0aeb63979fc2b37 \ - --hash=sha256:5e4d28f66e90780d77f3ecf1e9155852b0c3b13cbccb08ab07e66b2357c8da8d +gcp-releasetool==1.9.1 \ + --hash=sha256:952f4055d5d986b070ae2a71c4410b250000f9cc5a1e26398fcd55a5bbc5a15f \ + --hash=sha256:d0d3c814a97c1a237517e837d8cfa668ced8df4b882452578ecef4a4e79c583b # via -r requirements.in -google-api-core==2.8.2 \ - --hash=sha256:06f7244c640322b508b125903bb5701bebabce8832f85aba9335ec00b3d02edc \ - --hash=sha256:93c6a91ccac79079ac6bbf8b74ee75db970cc899278b97d53bc012f35908cf50 +google-api-core==2.10.2 \ + --hash=sha256:10c06f7739fe57781f87523375e8e1a3a4674bf6392cd6131a3222182b971320 \ + --hash=sha256:34f24bd1d5f72a8c4519773d99ca6bf080a6c4e041b4e9f024fe230191dda62e # via # google-cloud-core # google-cloud-storage -google-auth==2.11.0 \ - --hash=sha256:be62acaae38d0049c21ca90f27a23847245c9f161ff54ede13af2cb6afecbac9 \ - --hash=sha256:ed65ecf9f681832298e29328e1ef0a3676e3732b2e56f41532d45f70a22de0fb +google-auth==2.14.0 \ + --hash=sha256:1ad5b0e6eba5f69645971abb3d2c197537d5914070a8c6d30299dfdb07c5c700 \ + --hash=sha256:cf24817855d874ede2efd071aa22125445f555de1685b739a9782fcf408c2a3d # via # gcp-releasetool # google-api-core @@ -178,72 +182,97 @@ google-cloud-storage==2.5.0 \ --hash=sha256:19a26c66c317ce542cea0830b7e787e8dac2588b6bfa4d3fd3b871ba16305ab0 \ --hash=sha256:382f34b91de2212e3c2e7b40ec079d27ee2e3dbbae99b75b1bcd8c63063ce235 # via gcp-docuploader -google-crc32c==1.3.0 \ - --hash=sha256:04e7c220798a72fd0f08242bc8d7a05986b2a08a0573396187fd32c1dcdd58b3 \ - --hash=sha256:05340b60bf05b574159e9bd940152a47d38af3fb43803ffe71f11d704b7696a6 \ - --hash=sha256:12674a4c3b56b706153a358eaa1018c4137a5a04635b92b4652440d3d7386206 \ - --hash=sha256:127f9cc3ac41b6a859bd9dc4321097b1a4f6aa7fdf71b4f9227b9e3ebffb4422 \ - --hash=sha256:13af315c3a0eec8bb8b8d80b8b128cb3fcd17d7e4edafc39647846345a3f003a \ - --hash=sha256:1926fd8de0acb9d15ee757175ce7242e235482a783cd4ec711cc999fc103c24e \ - --hash=sha256:226f2f9b8e128a6ca6a9af9b9e8384f7b53a801907425c9a292553a3a7218ce0 \ - --hash=sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df \ - --hash=sha256:318f73f5484b5671f0c7f5f63741ab020a599504ed81d209b5c7129ee4667407 \ - --hash=sha256:3bbce1be3687bbfebe29abdb7631b83e6b25da3f4e1856a1611eb21854b689ea \ - --hash=sha256:42ae4781333e331a1743445931b08ebdad73e188fd554259e772556fc4937c48 \ - --hash=sha256:58be56ae0529c664cc04a9c76e68bb92b091e0194d6e3c50bea7e0f266f73713 \ - --hash=sha256:5da2c81575cc3ccf05d9830f9e8d3c70954819ca9a63828210498c0774fda1a3 \ - --hash=sha256:6311853aa2bba4064d0c28ca54e7b50c4d48e3de04f6770f6c60ebda1e975267 \ - --hash=sha256:650e2917660e696041ab3dcd7abac160b4121cd9a484c08406f24c5964099829 \ - --hash=sha256:6a4db36f9721fdf391646685ecffa404eb986cbe007a3289499020daf72e88a2 \ - --hash=sha256:779cbf1ce375b96111db98fca913c1f5ec11b1d870e529b1dc7354b2681a8c3a \ - --hash=sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183 \ - --hash=sha256:891f712ce54e0d631370e1f4997b3f182f3368179198efc30d477c75d1f44942 \ - --hash=sha256:95c68a4b9b7828ba0428f8f7e3109c5d476ca44996ed9a5f8aac6269296e2d59 \ - --hash=sha256:96a8918a78d5d64e07c8ea4ed2bc44354e3f93f46a4866a40e8db934e4c0d74b \ - --hash=sha256:9c3cf890c3c0ecfe1510a452a165431b5831e24160c5fcf2071f0f85ca5a47cd \ - --hash=sha256:9f58099ad7affc0754ae42e6d87443299f15d739b0ce03c76f515153a5cda06c \ - --hash=sha256:a0b9e622c3b2b8d0ce32f77eba617ab0d6768b82836391e4f8f9e2074582bf02 \ - --hash=sha256:a7f9cbea4245ee36190f85fe1814e2d7b1e5f2186381b082f5d59f99b7f11328 \ - --hash=sha256:bab4aebd525218bab4ee615786c4581952eadc16b1ff031813a2fd51f0cc7b08 \ - --hash=sha256:c124b8c8779bf2d35d9b721e52d4adb41c9bfbde45e6a3f25f0820caa9aba73f \ - --hash=sha256:c9da0a39b53d2fab3e5467329ed50e951eb91386e9d0d5b12daf593973c3b168 \ - --hash=sha256:ca60076c388728d3b6ac3846842474f4250c91efbfe5afa872d3ffd69dd4b318 \ - --hash=sha256:cb6994fff247987c66a8a4e550ef374671c2b82e3c0d2115e689d21e511a652d \ - --hash=sha256:d1c1d6236feab51200272d79b3d3e0f12cf2cbb12b208c835b175a21efdb0a73 \ - --hash=sha256:dd7760a88a8d3d705ff562aa93f8445ead54f58fd482e4f9e2bafb7e177375d4 \ - --hash=sha256:dda4d8a3bb0b50f540f6ff4b6033f3a74e8bf0bd5320b70fab2c03e512a62812 \ - --hash=sha256:e0f1ff55dde0ebcfbef027edc21f71c205845585fffe30d4ec4979416613e9b3 \ - --hash=sha256:e7a539b9be7b9c00f11ef16b55486141bc2cdb0c54762f84e3c6fc091917436d \ - --hash=sha256:eb0b14523758e37802f27b7f8cd973f5f3d33be7613952c0df904b68c4842f0e \ - --hash=sha256:ed447680ff21c14aaceb6a9f99a5f639f583ccfe4ce1a5e1d48eb41c3d6b3217 \ - --hash=sha256:f52a4ad2568314ee713715b1e2d79ab55fab11e8b304fd1462ff5cccf4264b3e \ - --hash=sha256:fbd60c6aaa07c31d7754edbc2334aef50601b7f1ada67a96eb1eb57c7c72378f \ - --hash=sha256:fc28e0db232c62ca0c3600884933178f0825c99be4474cdd645e378a10588125 \ - --hash=sha256:fe31de3002e7b08eb20823b3735b97c86c5926dd0581c7710a680b418a8709d4 \ - --hash=sha256:fec221a051150eeddfdfcff162e6db92c65ecf46cb0f7bb1bf812a1520ec026b \ - --hash=sha256:ff71073ebf0e42258a42a0b34f2c09ec384977e7f6808999102eedd5b49920e3 +google-crc32c==1.5.0 \ + --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ + --hash=sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876 \ + --hash=sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c \ + --hash=sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289 \ + --hash=sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298 \ + --hash=sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02 \ + --hash=sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f \ + --hash=sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2 \ + --hash=sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a \ + --hash=sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb \ + --hash=sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210 \ + --hash=sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5 \ + --hash=sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee \ + --hash=sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c \ + --hash=sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a \ + --hash=sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314 \ + --hash=sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd \ + --hash=sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65 \ + --hash=sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37 \ + --hash=sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4 \ + --hash=sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13 \ + --hash=sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894 \ + --hash=sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31 \ + --hash=sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e \ + --hash=sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709 \ + --hash=sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740 \ + --hash=sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc \ + --hash=sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d \ + --hash=sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c \ + --hash=sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c \ + --hash=sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d \ + --hash=sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906 \ + --hash=sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61 \ + --hash=sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57 \ + --hash=sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c \ + --hash=sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a \ + --hash=sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438 \ + --hash=sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946 \ + --hash=sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7 \ + --hash=sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96 \ + --hash=sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091 \ + --hash=sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae \ + --hash=sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d \ + --hash=sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88 \ + --hash=sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2 \ + --hash=sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd \ + --hash=sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541 \ + --hash=sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728 \ + --hash=sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178 \ + --hash=sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968 \ + --hash=sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346 \ + --hash=sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8 \ + --hash=sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93 \ + --hash=sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7 \ + --hash=sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273 \ + --hash=sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462 \ + --hash=sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94 \ + --hash=sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd \ + --hash=sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e \ + --hash=sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57 \ + --hash=sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b \ + --hash=sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9 \ + --hash=sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a \ + --hash=sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100 \ + --hash=sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325 \ + --hash=sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183 \ + --hash=sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556 \ + --hash=sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4 # via google-resumable-media -google-resumable-media==2.3.3 \ - --hash=sha256:27c52620bd364d1c8116eaac4ea2afcbfb81ae9139fb3199652fcac1724bfb6c \ - --hash=sha256:5b52774ea7a829a8cdaa8bd2d4c3d4bc660c91b30857ab2668d0eb830f4ea8c5 +google-resumable-media==2.4.0 \ + --hash=sha256:2aa004c16d295c8f6c33b2b4788ba59d366677c0a25ae7382436cb30f776deaa \ + --hash=sha256:8d5518502f92b9ecc84ac46779bd4f09694ecb3ba38a3e7ca737a86d15cbca1f # via google-cloud-storage googleapis-common-protos==1.56.4 \ --hash=sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394 \ --hash=sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417 # via google-api-core -idna==3.3 \ - --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ - --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -importlib-metadata==4.12.0 \ - --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ - --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 +importlib-metadata==5.0.0 \ + --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab \ + --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 # via # -r requirements.in # twine -jaraco-classes==3.2.2 \ - --hash=sha256:6745f113b0b588239ceb49532aa09c3ebb947433ce311ef2f8e3ad64ebb74594 \ - --hash=sha256:e6ef6fd3fcf4579a7a019d87d1e56a883f4e4c35cfe925f86731abc58804e647 +jaraco-classes==3.2.3 \ + --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ + --hash=sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a # via keyring jeepney==0.8.0 \ --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ @@ -255,9 +284,9 @@ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via gcp-releasetool -keyring==23.9.0 \ - --hash=sha256:4c32a31174faaee48f43a7e2c7e9c3216ec5e95acf22a2bebfb4a1d05056ee44 \ - --hash=sha256:98f060ec95ada2ab910c195a2d4317be6ef87936a766b239c46aa3c7aac4f0db +keyring==23.9.3 \ + --hash=sha256:69732a15cb1433bdfbc3b980a8a36a04878a6cfd7cb99f497b573f31618001c0 \ + --hash=sha256:69b01dd83c42f590250fe7a1f503fc229b14de83857314b1933a3ddbf595c4a5 # via # gcp-releasetool # twine @@ -303,9 +332,9 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 -more-itertools==8.14.0 \ - --hash=sha256:1bc4f91ee5b1b31ac7ceacc17c09befe6a40a503907baf9c839c229b5095cfd2 \ - --hash=sha256:c09443cd3d5438b8dafccd867a6bc1cb0894389e90cb53d227456b0b0bccb750 +more-itertools==9.0.0 \ + --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ + --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab # via jaraco-classes nox==2022.8.7 \ --hash=sha256:1b894940551dc5c389f9271d197ca5d655d40bdc6ccf93ed6880e4042760a34b \ @@ -325,34 +354,34 @@ platformdirs==2.5.2 \ --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 # via virtualenv -protobuf==3.20.2 \ - --hash=sha256:03d76b7bd42ac4a6e109742a4edf81ffe26ffd87c5993126d894fe48a120396a \ - --hash=sha256:09e25909c4297d71d97612f04f41cea8fa8510096864f2835ad2f3b3df5a5559 \ - --hash=sha256:18e34a10ae10d458b027d7638a599c964b030c1739ebd035a1dfc0e22baa3bfe \ - --hash=sha256:291fb4307094bf5ccc29f424b42268640e00d5240bf0d9b86bf3079f7576474d \ - --hash=sha256:2c0b040d0b5d5d207936ca2d02f00f765906622c07d3fa19c23a16a8ca71873f \ - --hash=sha256:384164994727f274cc34b8abd41a9e7e0562801361ee77437099ff6dfedd024b \ - --hash=sha256:3cb608e5a0eb61b8e00fe641d9f0282cd0eedb603be372f91f163cbfbca0ded0 \ - --hash=sha256:5d9402bf27d11e37801d1743eada54372f986a372ec9679673bfcc5c60441151 \ - --hash=sha256:712dca319eee507a1e7df3591e639a2b112a2f4a62d40fe7832a16fd19151750 \ - --hash=sha256:7a5037af4e76c975b88c3becdf53922b5ffa3f2cddf657574a4920a3b33b80f3 \ - --hash=sha256:8228e56a865c27163d5d1d1771d94b98194aa6917bcfb6ce139cbfa8e3c27334 \ - --hash=sha256:84a1544252a933ef07bb0b5ef13afe7c36232a774affa673fc3636f7cee1db6c \ - --hash=sha256:84fe5953b18a383fd4495d375fe16e1e55e0a3afe7b4f7b4d01a3a0649fcda9d \ - --hash=sha256:9c673c8bfdf52f903081816b9e0e612186684f4eb4c17eeb729133022d6032e3 \ - --hash=sha256:9f876a69ca55aed879b43c295a328970306e8e80a263ec91cf6e9189243c613b \ - --hash=sha256:a9e5ae5a8e8985c67e8944c23035a0dff2c26b0f5070b2f55b217a1c33bbe8b1 \ - --hash=sha256:b4fdb29c5a7406e3f7ef176b2a7079baa68b5b854f364c21abe327bbeec01cdb \ - --hash=sha256:c184485e0dfba4dfd451c3bd348c2e685d6523543a0f91b9fd4ae90eb09e8422 \ - --hash=sha256:c9cdf251c582c16fd6a9f5e95836c90828d51b0069ad22f463761d27c6c19019 \ - --hash=sha256:e39cf61bb8582bda88cdfebc0db163b774e7e03364bbf9ce1ead13863e81e359 \ - --hash=sha256:e8fbc522303e09036c752a0afcc5c0603e917222d8bedc02813fd73b4b4ed804 \ - --hash=sha256:f34464ab1207114e73bba0794d1257c150a2b89b7a9faf504e00af7c9fd58978 \ - --hash=sha256:f52dabc96ca99ebd2169dadbe018824ebda08a795c7684a0b7d203a290f3adb0 +protobuf==3.20.3 \ + --hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \ + --hash=sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c \ + --hash=sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2 \ + --hash=sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b \ + --hash=sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050 \ + --hash=sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9 \ + --hash=sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7 \ + --hash=sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454 \ + --hash=sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480 \ + --hash=sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469 \ + --hash=sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c \ + --hash=sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e \ + --hash=sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db \ + --hash=sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905 \ + --hash=sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b \ + --hash=sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86 \ + --hash=sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4 \ + --hash=sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402 \ + --hash=sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7 \ + --hash=sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4 \ + --hash=sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99 \ + --hash=sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee # via # gcp-docuploader # gcp-releasetool # google-api-core + # googleapis-common-protos py==1.11.0 \ --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 @@ -377,9 +406,9 @@ pygments==2.13.0 \ # via # readme-renderer # rich -pyjwt==2.4.0 \ - --hash=sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf \ - --hash=sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba +pyjwt==2.6.0 \ + --hash=sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd \ + --hash=sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14 # via gcp-releasetool pyparsing==3.0.9 \ --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ @@ -392,9 +421,9 @@ python-dateutil==2.8.2 \ --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 # via gcp-releasetool -readme-renderer==37.0 \ - --hash=sha256:07b7ea234e03e58f77cc222e206e6abb8f4c0435becce5104794ee591f9301c5 \ - --hash=sha256:9fa416704703e509eeb900696751c908ddeb2011319d93700d8f18baff887a69 +readme-renderer==37.3 \ + --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ + --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 # via twine requests==2.28.1 \ --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ @@ -405,17 +434,17 @@ requests==2.28.1 \ # google-cloud-storage # requests-toolbelt # twine -requests-toolbelt==0.9.1 \ - --hash=sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f \ - --hash=sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0 +requests-toolbelt==0.10.1 \ + --hash=sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7 \ + --hash=sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d # via twine rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==12.5.1 \ - --hash=sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb \ - --hash=sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca +rich==12.6.0 \ + --hash=sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e \ + --hash=sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0 # via twine rsa==4.9 \ --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ @@ -437,9 +466,9 @@ twine==4.0.1 \ --hash=sha256:42026c18e394eac3e06693ee52010baa5313e4811d5a11050e7d48436cf41b9e \ --hash=sha256:96b1cf12f7ae611a4a40b6ae8e9570215daff0611828f5fe1f37a16255ab24a0 # via -r requirements.in -typing-extensions==4.3.0 \ - --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ - --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 +typing-extensions==4.4.0 \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via -r requirements.in urllib3==1.26.12 \ --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ @@ -447,9 +476,9 @@ urllib3==1.26.12 \ # via # requests # twine -virtualenv==20.16.4 \ - --hash=sha256:014f766e4134d0008dcaa1f95bafa0fb0f575795d07cae50b1bee514185d6782 \ - --hash=sha256:035ed57acce4ac35c82c9d8802202b0e71adac011a511ff650cbcf9635006a22 +virtualenv==20.16.6 \ + --hash=sha256:186ca84254abcbde98180fd17092f9628c5fe742273c02724972a1d8a2035108 \ + --hash=sha256:530b850b523c6449406dfba859d6345e48ef19b8439606c5d74d7d3c9e14d76e # via nox webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ @@ -459,13 +488,13 @@ wheel==0.37.1 \ --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 # via -r requirements.in -zipp==3.8.1 \ - --hash=sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2 \ - --hash=sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009 +zipp==3.10.0 \ + --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ + --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==65.2.0 \ - --hash=sha256:7f4bc85450898a09f76ebf28b72fa25bc7111f6c7d665d514a60bba9c75ef2a9 \ - --hash=sha256:a3ca5857c89f82f5c9410e8508cb32f4872a3bafd4aa7ae122a24ca33bccc750 +setuptools==65.5.0 \ + --hash=sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17 \ + --hash=sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356 # via -r requirements.in diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 5f898a7a57c9..35f3976cb77e 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -277,7 +277,11 @@ def docs(session): """Build the docs for this library.""" session.install("-e", ".") - session.install("sphinx==4.0.1", "alabaster", "recommonmark") + session.install( + "sphinx==4.0.1", + "alabaster", + "recommonmark", + ) shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( @@ -300,7 +304,10 @@ def docfx(session): session.install("-e", ".") session.install( - "sphinx==4.0.1", "alabaster", "recommonmark", "gcp-sphinx-docfx-yaml" + "sphinx==4.0.1", + "alabaster", + "recommonmark", + "gcp-sphinx-docfx-yaml", ) shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) From 9693db6ea26d57d8a87d6d4d76be608b9427af64 Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Fri, 18 Nov 2022 17:41:25 +0100 Subject: [PATCH 381/467] chore: code clean up for samples are migrated to python-docs-samples (#400) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: code clean Manually written code samples are migrated to GoogleCloudPlatform/python-docs-samples For more detail, please refer to b/257073450 * Update and rename CONTRIBUTING.md to README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * Update README.md * Rename samples/README.md to samples/snippets/README.md Co-authored-by: Owl Bot --- .../samples/snippets/README.md | 4 + .../samples/snippets/api/README.rst | 98 ------ .../samples/snippets/api/README.rst.in | 21 -- .../samples/snippets/api/noxfile.py | 312 ------------------ .../samples/snippets/api/report_exception.py | 46 --- .../snippets/api/report_exception_test.py | 23 -- .../snippets/api/requirements-test.txt | 1 - .../samples/snippets/api/requirements.txt | 1 - .../snippets/fluent_on_compute/README.md | 35 -- .../snippets/fluent_on_compute/main.py | 42 --- .../snippets/fluent_on_compute/main_test.py | 23 -- .../snippets/fluent_on_compute/noxfile.py | 312 ------------------ .../fluent_on_compute/requirements-test.txt | 2 - .../fluent_on_compute/requirements.txt | 1 - .../fluent_on_compute/startup_script.sh | 35 -- 15 files changed, 4 insertions(+), 952 deletions(-) create mode 100644 packages/google-cloud-error-reporting/samples/snippets/README.md delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/README.rst delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/report_exception.py delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/report_exception_test.py delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/README.md delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main.py delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main_test.py delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt delete mode 100644 packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/startup_script.sh diff --git a/packages/google-cloud-error-reporting/samples/snippets/README.md b/packages/google-cloud-error-reporting/samples/snippets/README.md new file mode 100644 index 000000000000..b8c6e222b54b --- /dev/null +++ b/packages/google-cloud-error-reporting/samples/snippets/README.md @@ -0,0 +1,4 @@ +Samples migrated +================ + +New location: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/error_reporting diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst deleted file mode 100644 index fe98a482fd80..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst +++ /dev/null @@ -1,98 +0,0 @@ -.. This file is automatically generated. Do not edit this file directly. - -Error Reporting Python Samples -=============================================================================== - -.. image:: https://gstatic.com/cloudssh/images/open-btn.png - :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=error_reporting/api/README.rst - - -This directory contains samples for Error Reporting. `Error Reporting`_ aggregates and displays errors produced in - your running cloud services. - - - - -.. _Error Reporting: https://cloud.google.com/error-reporting/docs/ - -Setup -------------------------------------------------------------------------------- - - -Authentication -++++++++++++++ - -This sample requires you to have authentication setup. Refer to the -`Authentication Getting Started Guide`_ for instructions on setting up -credentials for applications. - -.. _Authentication Getting Started Guide: - https://cloud.google.com/docs/authentication/getting-started - -Install Dependencies -++++++++++++++++++++ - -#. Clone python-docs-samples and change directory to the sample directory you want to use. - - .. code-block:: bash - - $ git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git - -#. Install `pip`_ and `virtualenv`_ if you do not already have them. You may want to refer to the `Python Development Environment Setup Guide`_ for Google Cloud Platform for instructions. - - .. _Python Development Environment Setup Guide: - https://cloud.google.com/python/setup - -#. Create a virtualenv. Samples are compatible with Python 2.7 and 3.4+. - - .. code-block:: bash - - $ virtualenv env - $ source env/bin/activate - -#. Install the dependencies needed to run the samples. - - .. code-block:: bash - - $ pip install -r requirements.txt - -.. _pip: https://pip.pypa.io/ -.. _virtualenv: https://virtualenv.pypa.io/ - -Samples -------------------------------------------------------------------------------- - -Report Exception -+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -.. image:: https://gstatic.com/cloudssh/images/open-btn.png - :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=error_reporting/api/report_exception.py,error_reporting/api/README.rst - - - - -To run this sample: - -.. code-block:: bash - - $ python report_exception.py - - - - -The client library -------------------------------------------------------------------------------- - -This sample uses the `Google Cloud Client Library for Python`_. -You can read the documentation for more details on API usage and use GitHub -to `browse the source`_ and `report issues`_. - -.. _Google Cloud Client Library for Python: - https://googlecloudplatform.github.io/google-cloud-python/ -.. _browse the source: - https://github.com/GoogleCloudPlatform/google-cloud-python -.. _report issues: - https://github.com/GoogleCloudPlatform/google-cloud-python/issues - - -.. _Google Cloud SDK: https://cloud.google.com/sdk/ \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in b/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in deleted file mode 100644 index 56f4080f3b70..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/api/README.rst.in +++ /dev/null @@ -1,21 +0,0 @@ -# This file is used to generate README.rst - -product: - name: Error Reporting - short_name: Error Reporting - url: https://cloud.google.com/error-reporting/docs/ - description: > - `Error Reporting`_ aggregates and displays errors produced in - your running cloud services. - -setup: -- auth -- install_deps - -samples: -- name: Report Exception - file: report_exception.py - -cloud_client_library: true - -folder: error_reporting/api \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py deleted file mode 100644 index 0398d72ff690..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/api/noxfile.py +++ /dev/null @@ -1,312 +0,0 @@ -# Copyright 2019 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 __future__ import print_function - -import glob -import os -from pathlib import Path -import sys -from typing import Callable, Dict, List, Optional - -import nox - - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -def _determine_local_import_names(start_dir: str) -> List[str]: - """Determines all import names that should be considered "local". - - This is used when running the linter to insure that import order is - properly checked. - """ - file_ext_pairs = [os.path.splitext(path) for path in os.listdir(start_dir)] - return [ - basename - for basename, extension in file_ext_pairs - if extension == ".py" - or os.path.isdir(os.path.join(start_dir, basename)) - and basename not in ("__pycache__") - ] - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--import-order-style=google", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8", "flake8-import-order") - else: - session.install("flake8", "flake8-import-order", "flake8-annotations") - - local_names = _determine_local_import_names(".") - args = FLAKE8_COMMON_ARGS + [ - "--application-import-names", - ",".join(local_names), - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob("**/test_*.py", recursive=True) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install( - "-r", "requirements-test.txt", "-c", "constraints-test.txt" - ) - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(['--workers', 'auto', '--tests-per-worker', 'auto']) - elif "pytest-xdist" in packages: - concurrent_args.extend(['-n', 'auto']) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """ Returns the root folder of the project. """ - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/report_exception.py b/packages/google-cloud-error-reporting/samples/snippets/api/report_exception.py deleted file mode 100644 index 2b7e8f06ba92..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/api/report_exception.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2016 Google Inc. All rights reserved. -# -# 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. - - -# [START error_reporting] -# [START error_reporting_quickstart] -# [START error_reporting_setup_python] -def simulate_error(): - from google.cloud import error_reporting - - client = error_reporting.Client() - try: - # simulate calling a method that's not defined - raise NameError - except Exception: - client.report_exception() -# [END error_reporting_setup_python] -# [END error_reporting_quickstart] -# [END error_reporting] - - -# [START error_reporting_manual] -# [START error_reporting_setup_python_manual] -def report_manual_error(): - from google.cloud import error_reporting - - client = error_reporting.Client() - client.report("An error has occurred.") -# [START error_reporting_setup_python_manual] -# [END error_reporting_manual] - - -if __name__ == '__main__': - simulate_error() - report_manual_error() diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/report_exception_test.py b/packages/google-cloud-error-reporting/samples/snippets/api/report_exception_test.py deleted file mode 100644 index 042951e9a487..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/api/report_exception_test.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2016 Google Inc. All rights reserved. -# -# 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 report_exception - - -def test_error_sends(): - report_exception.simulate_error() - - -def test_manual_error_sends(): - report_exception.report_manual_error() diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt deleted file mode 100644 index 49780e035690..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest==7.2.0 diff --git a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt deleted file mode 100644 index fd18a2fa936e..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/api/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -google-cloud-error-reporting==1.6.3 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/README.md b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/README.md deleted file mode 100644 index d3a58c167d82..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Google Error Reorting Samples Samples - -[![Open in Cloud Shell][shell_img]][shell_link] - -[shell_img]: http://gstatic.com/cloudssh/images/open-btn.png -[shell_link]: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=error_reporting/fluent_on_compute/README.md - -This section contains samples for [Google Cloud Error Reporting](https://cloud.google.com/error-reporting). - -A startup script has been provided to demonstrated how to properly provision a GCE -instance with fluentd configured. Note the intallation of fluentd, the addition of the config file, - and the restarting of the fluetnd service. You can start an instance using -it like this: - - gcloud compute instances create example-instance --metadata-from-file startup-script=startup_script.sh - -or simply use it as reference when creating your own instance. - -After fluentd is configured, main.py could be used to simulate an error: - - gcloud compute copy-files main.py example-instance:~/main.py - -Then, - - gcloud compute ssh example-instance - python ~/main.py - -And you will see the message in the Errors Console. - - -These samples are used on the following documentation page: - -> https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine - - diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main.py deleted file mode 100644 index 45208c913ac5..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright 2016 Google Inc. All rights reserved. -# -# 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. - -# [START error_reporting] -import traceback - -import fluent.event -import fluent.sender - - -def simulate_error(): - fluent.sender.setup('myapp', host='localhost', port=24224) - - def report(ex): - data = {} - data['message'] = '{0}'.format(ex) - data['serviceContext'] = {'service': 'myapp'} - # ... add more metadata - fluent.event.Event('errors', data) - - # report exception data using: - try: - # simulate calling a method that's not defined - raise NameError - except Exception: - report(traceback.format_exc()) -# [END error_reporting] - - -if __name__ == '__main__': - simulate_error() diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main_test.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main_test.py deleted file mode 100644 index 11a24d035438..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/main_test.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2016 Google Inc. All rights reserved. -# -# 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 mock - -import main - - -@mock.patch("fluent.event") -def test_error_sends(event_mock): - main.simulate_error() - event_mock.Event.assert_called_once_with(mock.ANY, mock.ANY) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py deleted file mode 100644 index 0398d72ff690..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/noxfile.py +++ /dev/null @@ -1,312 +0,0 @@ -# Copyright 2019 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 __future__ import print_function - -import glob -import os -from pathlib import Path -import sys -from typing import Callable, Dict, List, Optional - -import nox - - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -def _determine_local_import_names(start_dir: str) -> List[str]: - """Determines all import names that should be considered "local". - - This is used when running the linter to insure that import order is - properly checked. - """ - file_ext_pairs = [os.path.splitext(path) for path in os.listdir(start_dir)] - return [ - basename - for basename, extension in file_ext_pairs - if extension == ".py" - or os.path.isdir(os.path.join(start_dir, basename)) - and basename not in ("__pycache__") - ] - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--import-order-style=google", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8", "flake8-import-order") - else: - session.install("flake8", "flake8-import-order", "flake8-annotations") - - local_names = _determine_local_import_names(".") - args = FLAKE8_COMMON_ARGS + [ - "--application-import-names", - ",".join(local_names), - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob("**/test_*.py", recursive=True) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install( - "-r", "requirements-test.txt", "-c", "constraints-test.txt" - ) - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(['--workers', 'auto', '--tests-per-worker', 'auto']) - elif "pytest-xdist" in packages: - concurrent_args.extend(['-n', 'auto']) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """ Returns the root folder of the project. """ - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt deleted file mode 100644 index 980c425b9393..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest==7.2.0 -mock==4.0.3 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt deleted file mode 100644 index 693841f66b8e..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -fluent-logger==0.10.0 diff --git a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/startup_script.sh b/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/startup_script.sh deleted file mode 100644 index f2ef895dcfdc..000000000000 --- a/packages/google-cloud-error-reporting/samples/snippets/fluent_on_compute/startup_script.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2016 Google Inc. All rights reserved. -# -# 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. - -set -v - -curl -sSO "https://dl.google.com/cloudagents/install-logging-agent.sh" -chmod +x install-logging-agent.sh -./install-logging-agent.sh -mkdir -p /etc/google-fluentd/config.d/ -cat < /etc/google-fluentd/config.d/forward.conf - - type forward - port 24224 - -EOF -service google-fluentd restart - -apt-get update -apt-get install -yq \ - git build-essential supervisor python python-dev python-pip libffi-dev \ - libssl-dev -pip install fluent-logger - From 3c4e8eadeb0904804832ad3f3c0ea07dc6067760 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 19 Nov 2022 11:32:03 -0500 Subject: [PATCH 382/467] chore(python): update release script dependencies (#399) Source-Link: https://github.com/googleapis/synthtool/commit/25083af347468dd5f90f69627420f7d452b6c50e Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:e6cbd61f1838d9ff6a31436dfc13717f372a7482a82fc1863ca954ec47bff8c8 Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/.OwlBot.lock.yaml | 2 +- .../.github/workflows/docs.yml | 4 +- .../.github/workflows/lint.yml | 2 +- .../.github/workflows/unittest.yml | 2 +- .../.kokoro/docker/docs/Dockerfile | 12 ++-- .../.kokoro/requirements.in | 4 +- .../.kokoro/requirements.txt | 61 ++++++++++--------- .../google-cloud-error-reporting/noxfile.py | 4 +- 8 files changed, 48 insertions(+), 43 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 12edee77695a..3f1ccc085ef7 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:452901c74a22f9b9a3bd02bce780b8e8805c97270d424684bff809ce5be8c2a2 + digest: sha256:e6cbd61f1838d9ff6a31436dfc13717f372a7482a82fc1863ca954ec47bff8c8 diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml index 7092a139aed3..e97d89e484c9 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/docs.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/docs.yml @@ -12,7 +12,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.9" - name: Install nox run: | python -m pip install --upgrade setuptools pip wheel @@ -28,7 +28,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.9" - name: Install nox run: | python -m pip install --upgrade setuptools pip wheel diff --git a/packages/google-cloud-error-reporting/.github/workflows/lint.yml b/packages/google-cloud-error-reporting/.github/workflows/lint.yml index d2aee5b7d8ec..16d5a9e90f6d 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/lint.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/lint.yml @@ -12,7 +12,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.8" - name: Install nox run: | python -m pip install --upgrade setuptools pip wheel diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index 87ade4d54362..23000c05d9d8 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -41,7 +41,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.8" - name: Install coverage run: | python -m pip install --upgrade setuptools pip wheel diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile index 238b87b9d1c9..f8137d0ae497 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -60,16 +60,16 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* \ && rm -f /var/cache/apt/archives/*.deb -###################### Install python 3.8.11 +###################### Install python 3.9.13 -# Download python 3.8.11 -RUN wget https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tgz +# Download python 3.9.13 +RUN wget https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz # Extract files -RUN tar -xvf Python-3.8.11.tgz +RUN tar -xvf Python-3.9.13.tgz -# Install python 3.8.11 -RUN ./Python-3.8.11/configure --enable-optimizations +# Install python 3.9.13 +RUN ./Python-3.9.13/configure --enable-optimizations RUN make altinstall ###################### Install pip diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.in b/packages/google-cloud-error-reporting/.kokoro/requirements.in index 7718391a34d7..cbd7e77f44db 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.in +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.in @@ -5,4 +5,6 @@ typing-extensions twine wheel setuptools -nox \ No newline at end of file +nox +charset-normalizer<3 +click<8.1.0 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 31425f164783..9c1b9be34e6b 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -93,11 +93,14 @@ cffi==1.15.1 \ charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f - # via requests + # via + # -r requirements.in + # requests click==8.0.4 \ --hash=sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1 \ --hash=sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb # via + # -r requirements.in # gcp-docuploader # gcp-releasetool colorlog==6.7.0 \ @@ -156,9 +159,9 @@ gcp-docuploader==0.6.4 \ --hash=sha256:01486419e24633af78fd0167db74a2763974765ee8078ca6eb6964d0ebd388af \ --hash=sha256:70861190c123d907b3b067da896265ead2eeb9263969d6955c9e0bb091b5ccbf # via -r requirements.in -gcp-releasetool==1.9.1 \ - --hash=sha256:952f4055d5d986b070ae2a71c4410b250000f9cc5a1e26398fcd55a5bbc5a15f \ - --hash=sha256:d0d3c814a97c1a237517e837d8cfa668ced8df4b882452578ecef4a4e79c583b +gcp-releasetool==1.10.0 \ + --hash=sha256:72a38ca91b59c24f7e699e9227c90cbe4dd71b789383cb0164b088abae294c83 \ + --hash=sha256:8c7c99320208383d4bb2b808c6880eb7a81424afe7cdba3c8d84b25f4f0e097d # via -r requirements.in google-api-core==2.10.2 \ --hash=sha256:10c06f7739fe57781f87523375e8e1a3a4674bf6392cd6131a3222182b971320 \ @@ -166,9 +169,9 @@ google-api-core==2.10.2 \ # via # google-cloud-core # google-cloud-storage -google-auth==2.14.0 \ - --hash=sha256:1ad5b0e6eba5f69645971abb3d2c197537d5914070a8c6d30299dfdb07c5c700 \ - --hash=sha256:cf24817855d874ede2efd071aa22125445f555de1685b739a9782fcf408c2a3d +google-auth==2.14.1 \ + --hash=sha256:ccaa901f31ad5cbb562615eb8b664b3dd0bf5404a67618e642307f00613eda4d \ + --hash=sha256:f5d8701633bebc12e0deea4df8abd8aff31c28b355360597f7f2ee60f2e4d016 # via # gcp-releasetool # google-api-core @@ -178,9 +181,9 @@ google-cloud-core==2.3.2 \ --hash=sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe \ --hash=sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a # via google-cloud-storage -google-cloud-storage==2.5.0 \ - --hash=sha256:19a26c66c317ce542cea0830b7e787e8dac2588b6bfa4d3fd3b871ba16305ab0 \ - --hash=sha256:382f34b91de2212e3c2e7b40ec079d27ee2e3dbbae99b75b1bcd8c63063ce235 +google-cloud-storage==2.6.0 \ + --hash=sha256:104ca28ae61243b637f2f01455cc8a05e8f15a2a18ced96cb587241cdd3820f5 \ + --hash=sha256:4ad0415ff61abdd8bb2ae81c1f8f7ec7d91a1011613f2db87c614c550f97bfe9 # via gcp-docuploader google-crc32c==1.5.0 \ --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ @@ -256,9 +259,9 @@ google-resumable-media==2.4.0 \ --hash=sha256:2aa004c16d295c8f6c33b2b4788ba59d366677c0a25ae7382436cb30f776deaa \ --hash=sha256:8d5518502f92b9ecc84ac46779bd4f09694ecb3ba38a3e7ca737a86d15cbca1f # via google-cloud-storage -googleapis-common-protos==1.56.4 \ - --hash=sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394 \ - --hash=sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417 +googleapis-common-protos==1.57.0 \ + --hash=sha256:27a849d6205838fb6cc3c1c21cb9800707a661bb21c6ce7fb13e99eb1f8a0c46 \ + --hash=sha256:a9f4a1d7f6d9809657b7f1316a1aa527f6664891531bcfcc13b6696e685f443c # via google-api-core idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -269,6 +272,7 @@ importlib-metadata==5.0.0 \ --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 # via # -r requirements.in + # keyring # twine jaraco-classes==3.2.3 \ --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ @@ -284,9 +288,9 @@ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via gcp-releasetool -keyring==23.9.3 \ - --hash=sha256:69732a15cb1433bdfbc3b980a8a36a04878a6cfd7cb99f497b573f31618001c0 \ - --hash=sha256:69b01dd83c42f590250fe7a1f503fc229b14de83857314b1933a3ddbf595c4a5 +keyring==23.11.0 \ + --hash=sha256:3dd30011d555f1345dec2c262f0153f2f0ca6bca041fb1dc4588349bb4c0ac1e \ + --hash=sha256:ad192263e2cdd5f12875dedc2da13534359a7e760e77f8d04b50968a821c2361 # via # gcp-releasetool # twine @@ -350,9 +354,9 @@ pkginfo==1.8.3 \ --hash=sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594 \ --hash=sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c # via twine -platformdirs==2.5.2 \ - --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ - --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 +platformdirs==2.5.4 \ + --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ + --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 # via virtualenv protobuf==3.20.3 \ --hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \ @@ -381,7 +385,6 @@ protobuf==3.20.3 \ # gcp-docuploader # gcp-releasetool # google-api-core - # googleapis-common-protos py==1.11.0 \ --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 @@ -476,17 +479,17 @@ urllib3==1.26.12 \ # via # requests # twine -virtualenv==20.16.6 \ - --hash=sha256:186ca84254abcbde98180fd17092f9628c5fe742273c02724972a1d8a2035108 \ - --hash=sha256:530b850b523c6449406dfba859d6345e48ef19b8439606c5d74d7d3c9e14d76e +virtualenv==20.16.7 \ + --hash=sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e \ + --hash=sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29 # via nox webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 # via bleach -wheel==0.37.1 \ - --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ - --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 +wheel==0.38.4 \ + --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ + --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via -r requirements.in zipp==3.10.0 \ --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ @@ -494,7 +497,7 @@ zipp==3.10.0 \ # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==65.5.0 \ - --hash=sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17 \ - --hash=sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356 +setuptools==65.5.1 \ + --hash=sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31 \ + --hash=sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f # via -r requirements.in diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 35f3976cb77e..d752b54f56da 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -272,7 +272,7 @@ def cover(session): session.run("coverage", "erase") -@nox.session(python=DEFAULT_PYTHON_VERSION) +@nox.session(python="3.9") def docs(session): """Build the docs for this library.""" @@ -298,7 +298,7 @@ def docs(session): ) -@nox.session(python=DEFAULT_PYTHON_VERSION) +@nox.session(python="3.9") def docfx(session): """Build the docfx yaml files for this library.""" From 431630d8722ab6fc1c999ff68b6d5b675acb2af4 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 13 Dec 2022 12:47:21 -0500 Subject: [PATCH 383/467] build(deps): bump certifi from 2022.9.24 to 2022.12.7 [autoapprove] (#401) * build(deps): bump certifi from 2022.9.24 to 2022.12.7 in /synthtool/gcp/templates/python_library/.kokoro Source-Link: https://github.com/googleapis/synthtool/commit/b4fe62efb5114b6738ad4b13d6f654f2bf4b7cc0 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:3bf87e47c2173d7eed42714589dc4da2c07c3268610f1e47f8e1a30decbfc7f1 * trigger ci Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 3 ++- .../google-cloud-error-reporting/.kokoro/requirements.txt | 6 +++--- .../google-cloud-error-reporting/.pre-commit-config.yaml | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 3f1ccc085ef7..df2cfe5d8965 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:e6cbd61f1838d9ff6a31436dfc13717f372a7482a82fc1863ca954ec47bff8c8 + digest: sha256:3bf87e47c2173d7eed42714589dc4da2c07c3268610f1e47f8e1a30decbfc7f1 + diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 9c1b9be34e6b..05dc4672edaa 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -20,9 +20,9 @@ cachetools==5.2.0 \ --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \ --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db # via google-auth -certifi==2022.9.24 \ - --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ - --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests cffi==1.15.1 \ --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 46d237160f6d..5405cc8ff1f3 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: rev: 22.3.0 hooks: - id: black -- repo: https://gitlab.com/pycqa/flake8 +- repo: https://github.com/pycqa/flake8 rev: 3.9.2 hooks: - id: flake8 From 03633d3df1d26c62943bcdb5093c184b6ff958c9 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 15 Dec 2022 11:48:32 -0500 Subject: [PATCH 384/467] fix(deps): Require google-api-core >=1.34.0, >=2.11.0 (#396) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: update to gapic-generator-python 1.5.0 feat: add support for `google.cloud..__version__` PiperOrigin-RevId: 484665853 Source-Link: https://github.com/googleapis/googleapis/commit/8eb249a19db926c2fbc4ecf1dc09c0e521a88b22 Source-Link: https://github.com/googleapis/googleapis-gen/commit/c8aa327b5f478865fc3fd91e3c2768e54e26ad44 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzhhYTMyN2I1ZjQ3ODg2NWZjM2ZkOTFlM2MyNzY4ZTU0ZTI2YWQ0NCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update to gapic-generator-python 1.6.0 feat(python): Add typing to proto.Message based class attributes feat(python): Snippetgen handling of repeated enum field PiperOrigin-RevId: 487326846 Source-Link: https://github.com/googleapis/googleapis/commit/da380c77bb87ba0f752baf07605dd1db30e1f7e1 Source-Link: https://github.com/googleapis/googleapis-gen/commit/61ef5762ee6731a0cbbfea22fd0eecee51ab1c8e Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNjFlZjU3NjJlZTY3MzFhMGNiYmZlYTIyZmQwZWVjZWU1MWFiMWM4ZSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat: new APIs added to reflect updates to the filestore service - Add ENTERPRISE Tier - Add snapshot APIs: RevertInstance, ListSnapshots, CreateSnapshot, DeleteSnapshot, UpdateSnapshot - Add multi-share APIs: ListShares, GetShare, CreateShare, DeleteShare, UpdateShare - Add ConnectMode to NetworkConfig (for Private Service Access support) - New status codes (SUSPENDED/SUSPENDING, REVERTING/RESUMING) - Add SuspensionReason (for KMS related suspension) - Add new fields to Instance information: max_capacity_gb, capacity_step_size_gb, max_share_count, capacity_gb, multi_share_enabled PiperOrigin-RevId: 487492758 Source-Link: https://github.com/googleapis/googleapis/commit/5be5981f50322cf0c7388595e0f31ac5d0693469 Source-Link: https://github.com/googleapis/googleapis-gen/commit/ab0e217f560cc2c1afc11441c2eab6b6950efd2b Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYWIwZTIxN2Y1NjBjYzJjMWFmYzExNDQxYzJlYWI2YjY5NTBlZmQyYiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update gapic-generator-python to v1.6.1 PiperOrigin-RevId: 488036204 Source-Link: https://github.com/googleapis/googleapis/commit/08f275f5c1c0d99056e1cb68376323414459ee19 Source-Link: https://github.com/googleapis/googleapis-gen/commit/555c0945e60649e38739ae64bc45719cdf72178f Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNTU1YzA5NDVlNjA2NDllMzg3MzlhZTY0YmM0NTcxOWNkZjcyMTc4ZiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore(python): fix warehouse-package-name for clouderrorreporting v1beta1 PiperOrigin-RevId: 491971000 Source-Link: https://github.com/googleapis/googleapis/commit/f0c519fb308a021f1a46eaf4428f49bb7c059edc Source-Link: https://github.com/googleapis/googleapis-gen/commit/7a1ce8ade63c592561aece1a734dc32e4cfcd36b Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiN2ExY2U4YWRlNjNjNTkyNTYxYWVjZTFhNzM0ZGMzMmU0Y2ZjZDM2YiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * fix(deps): Require google-api-core >=1.34.0, >=2.11.0 fix: Drop usage of pkg_resources fix: Fix timeout default values docs(samples): Snippetgen should call await on the operation coroutine before calling result PiperOrigin-RevId: 493260409 Source-Link: https://github.com/googleapis/googleapis/commit/fea43879f83a8d0dacc9353b3f75f8f46d37162f Source-Link: https://github.com/googleapis/googleapis-gen/commit/387b7344c7529ee44be84e613b19a820508c612b Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMzg3YjczNDRjNzUyOWVlNDRiZTg0ZTYxM2IxOWE4MjA1MDhjNjEyYiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * add gapic_version.py * fix path in setup.py * fix build Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../google-cloud-error-reporting/.coveragerc | 5 -- .../.github/release-please.yml | 1 + .../.release-please-manifest.json | 3 + .../docs/errorreporting_v1beta1/types.rst | 1 - .../google/cloud/error_reporting/__init__.py | 4 +- .../cloud/error_reporting/gapic_version.py | 16 ++++ .../cloud/errorreporting_v1beta1/__init__.py | 4 + .../errorreporting_v1beta1/gapic_version.py | 16 ++++ .../cloud/errorreporting_v1beta1/py.typed | 2 +- .../error_group_service/async_client.py | 46 +++++----- .../services/error_group_service/client.py | 48 +++++----- .../error_group_service/transports/base.py | 16 ++-- .../error_group_service/transports/grpc.py | 20 ++--- .../transports/grpc_asyncio.py | 16 ++-- .../error_stats_service/async_client.py | 60 +++++++------ .../services/error_stats_service/client.py | 60 +++++++------ .../error_stats_service/transports/base.py | 16 ++-- .../error_stats_service/transports/grpc.py | 20 ++--- .../transports/grpc_asyncio.py | 16 ++-- .../report_errors_service/async_client.py | 42 +++++---- .../services/report_errors_service/client.py | 46 ++++++---- .../report_errors_service/transports/base.py | 16 ++-- .../report_errors_service/transports/grpc.py | 20 ++--- .../transports/grpc_asyncio.py | 16 ++-- .../errorreporting_v1beta1/types/common.py | 52 +++++------ .../types/error_group_service.py | 6 +- .../types/error_stats_service.py | 90 ++++++++++--------- .../types/report_errors_service.py | 14 +-- .../google-cloud-error-reporting/owlbot.py | 70 +++++++++++---- .../release-please-config.json | 24 +++++ ...ted_error_group_service_get_group_async.py | 2 +- ...ated_error_group_service_get_group_sync.py | 2 +- ..._error_group_service_update_group_async.py | 2 +- ...d_error_group_service_update_group_sync.py | 2 +- ...error_stats_service_delete_events_async.py | 2 +- ..._error_stats_service_delete_events_sync.py | 2 +- ...d_error_stats_service_list_events_async.py | 2 +- ...ed_error_stats_service_list_events_sync.py | 2 +- ...or_stats_service_list_group_stats_async.py | 2 +- ...ror_stats_service_list_group_stats_sync.py | 2 +- ...errors_service_report_error_event_async.py | 2 +- ..._errors_service_report_error_event_sync.py | 2 +- ...devtools.clouderrorreporting.v1beta1.json} | 3 +- .../google-cloud-error-reporting/setup.py | 50 +++++------ .../testing/constraints-3.10.txt | 6 ++ .../testing/constraints-3.11.txt | 6 ++ .../testing/constraints-3.7.txt | 11 ++- .../testing/constraints-3.8.txt | 6 ++ .../testing/constraints-3.9.txt | 6 ++ 49 files changed, 519 insertions(+), 359 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.release-please-manifest.json create mode 100644 packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py create mode 100644 packages/google-cloud-error-reporting/release-please-config.json rename packages/google-cloud-error-reporting/samples/generated_samples/{snippet_metadata_errorreporting_v1beta1.json => snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json} (99%) diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc index f72fce1e0742..67733e5c9b84 100644 --- a/packages/google-cloud-error-reporting/.coveragerc +++ b/packages/google-cloud-error-reporting/.coveragerc @@ -10,8 +10,3 @@ exclude_lines = pragma: NO COVER # Ignore debug-only repr def __repr__ - # Ignore pkg_resources exceptions. - # This is added at the module level as a safeguard for if someone - # generates the code and tries to run it without pip installing. This - # makes it virtually impossible to test properly. - except pkg_resources.DistributionNotFound diff --git a/packages/google-cloud-error-reporting/.github/release-please.yml b/packages/google-cloud-error-reporting/.github/release-please.yml index 6def37a84c98..e9a4f0085128 100644 --- a/packages/google-cloud-error-reporting/.github/release-please.yml +++ b/packages/google-cloud-error-reporting/.github/release-please.yml @@ -1,5 +1,6 @@ releaseType: python handleGHRelease: true +manifest: true # NOTE: this section is generated by synthtool.languages.python # See https://github.com/googleapis/synthtool/blob/master/synthtool/languages/python.py branches: diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json new file mode 100644 index 000000000000..2a8d04b348f3 --- /dev/null +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "1.6.3" +} diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst index 179256c73ac9..08851dbe7c01 100644 --- a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst +++ b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst @@ -3,5 +3,4 @@ Types for Google Cloud Errorreporting v1beta1 API .. automodule:: google.cloud.errorreporting_v1beta1.types :members: - :undoc-members: :show-inheritance: diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py index 8cbe3963f519..1b729821e9c3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/__init__.py @@ -15,9 +15,9 @@ """Client library for Error Reporting""" -from pkg_resources import get_distribution +from google.cloud.error_reporting import gapic_version as package_version -__version__ = get_distribution("google-cloud-error-reporting").version +__version__ = package_version.__version__ from google.cloud.error_reporting.client import Client from google.cloud.error_reporting.client import HTTPContext diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py new file mode 100644 index 000000000000..a7807d3a8585 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +__version__ = "1.6.3" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 04baaaa438a0..32bd5db927fb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -13,6 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version + +__version__ = package_version.__version__ + from .services.error_group_service import ErrorGroupServiceClient from .services.error_group_service import ErrorGroupServiceAsyncClient diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py new file mode 100644 index 000000000000..a7807d3a8585 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +__version__ = "1.6.3" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/py.typed b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/py.typed index 20bf6ac69e13..01870137093b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/py.typed +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/py.typed @@ -1,2 +1,2 @@ # Marker file for PEP 561. -# The google-cloud-errorreporting package uses inline types. +# The google-cloud-error-reporting package uses inline types. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 8af3cd8213ad..ac13ab34854e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -16,8 +16,19 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version from google.api_core.client_options import ClientOptions from google.api_core import exceptions as core_exceptions @@ -160,9 +171,9 @@ def transport(self) -> ErrorGroupServiceTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, ErrorGroupServiceTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the error group service client. @@ -206,11 +217,11 @@ def __init__( async def get_group( self, - request: Union[error_group_service.GetGroupRequest, dict] = None, + request: Optional[Union[error_group_service.GetGroupRequest, dict]] = None, *, - group_name: str = None, + group_name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> common.ErrorGroup: r"""Get the specified group. @@ -242,7 +253,7 @@ async def sample_get_group(): print(response) Args: - request (Union[google.cloud.errorreporting_v1beta1.types.GetGroupRequest, dict]): + request (Optional[Union[google.cloud.errorreporting_v1beta1.types.GetGroupRequest, dict]]): The request object. A request to return an individual group. group_name (:class:`str`): @@ -314,11 +325,11 @@ async def sample_get_group(): async def update_group( self, - request: Union[error_group_service.UpdateGroupRequest, dict] = None, + request: Optional[Union[error_group_service.UpdateGroupRequest, dict]] = None, *, - group: common.ErrorGroup = None, + group: Optional[common.ErrorGroup] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> common.ErrorGroup: r"""Replace the data for the specified group. @@ -350,7 +361,7 @@ async def sample_update_group(): print(response) Args: - request (Union[google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest, dict]): + request (Optional[Union[google.cloud.errorreporting_v1beta1.types.UpdateGroupRequest, dict]]): The request object. A request to replace the existing data for the given group. group (:class:`google.cloud.errorreporting_v1beta1.types.ErrorGroup`): @@ -423,14 +434,9 @@ async def __aexit__(self, exc_type, exc, tb): await self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("ErrorGroupServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 86ae1120b043..b2224989b738 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -16,8 +16,20 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions @@ -57,7 +69,7 @@ class ErrorGroupServiceClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[ErrorGroupServiceTransport]: """Returns an appropriate transport class. @@ -327,8 +339,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, ErrorGroupServiceTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, ErrorGroupServiceTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the error group service client. @@ -342,7 +354,7 @@ def __init__( transport (Union[str, ErrorGroupServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (google.api_core.client_options.ClientOptions): Custom options for the + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -372,6 +384,7 @@ def __init__( client_options = client_options_lib.from_dict(client_options) if client_options is None: client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( client_options @@ -424,11 +437,11 @@ def __init__( def get_group( self, - request: Union[error_group_service.GetGroupRequest, dict] = None, + request: Optional[Union[error_group_service.GetGroupRequest, dict]] = None, *, - group_name: str = None, + group_name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> common.ErrorGroup: r"""Get the specified group. @@ -532,11 +545,11 @@ def sample_get_group(): def update_group( self, - request: Union[error_group_service.UpdateGroupRequest, dict] = None, + request: Optional[Union[error_group_service.UpdateGroupRequest, dict]] = None, *, - group: common.ErrorGroup = None, + group: Optional[common.ErrorGroup] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> common.ErrorGroup: r"""Replace the data for the specified group. @@ -648,14 +661,9 @@ def __exit__(self, type, value, traceback): self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("ErrorGroupServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index d2ef9e3f6446..665ee116fcd3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -15,7 +15,8 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import pkg_resources + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version import google.auth # type: ignore import google.api_core @@ -28,14 +29,9 @@ from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) class ErrorGroupServiceTransport(abc.ABC): @@ -49,7 +45,7 @@ def __init__( self, *, host: str = DEFAULT_HOST, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index a4595425ea8c..4145ab7b3591 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -48,14 +48,14 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, - scopes: Sequence[str] = None, - channel: grpc.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, @@ -182,8 +182,8 @@ def __init__( def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, **kwargs, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index be98ee03f5b9..694972980f52 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -50,7 +50,7 @@ class ErrorGroupServiceGrpcAsyncIOTransport(ErrorGroupServiceTransport): def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -93,15 +93,15 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: aio.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, - quota_project_id=None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, api_audience: Optional[str] = None, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 88b3190008de..84c42d3e4509 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -16,8 +16,19 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version from google.api_core.client_options import ClientOptions from google.api_core import exceptions as core_exceptions @@ -163,9 +174,9 @@ def transport(self) -> ErrorStatsServiceTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, ErrorStatsServiceTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the error stats service client. @@ -209,12 +220,14 @@ def __init__( async def list_group_stats( self, - request: Union[error_stats_service.ListGroupStatsRequest, dict] = None, + request: Optional[ + Union[error_stats_service.ListGroupStatsRequest, dict] + ] = None, *, - project_name: str = None, - time_range: error_stats_service.QueryTimeRange = None, + project_name: Optional[str] = None, + time_range: Optional[error_stats_service.QueryTimeRange] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListGroupStatsAsyncPager: r"""Lists the specified groups. @@ -247,7 +260,7 @@ async def sample_list_group_stats(): print(response) Args: - request (Union[google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest, dict]): + request (Optional[Union[google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest, dict]]): The request object. Specifies a set of `ErrorGroupStats` to return. project_name (:class:`str`): @@ -348,12 +361,12 @@ async def sample_list_group_stats(): async def list_events( self, - request: Union[error_stats_service.ListEventsRequest, dict] = None, + request: Optional[Union[error_stats_service.ListEventsRequest, dict]] = None, *, - project_name: str = None, - group_id: str = None, + project_name: Optional[str] = None, + group_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEventsAsyncPager: r"""Lists the specified events. @@ -387,7 +400,7 @@ async def sample_list_events(): print(response) Args: - request (Union[google.cloud.errorreporting_v1beta1.types.ListEventsRequest, dict]): + request (Optional[Union[google.cloud.errorreporting_v1beta1.types.ListEventsRequest, dict]]): The request object. Specifies a set of error events to return. project_name (:class:`str`): @@ -480,11 +493,11 @@ async def sample_list_events(): async def delete_events( self, - request: Union[error_stats_service.DeleteEventsRequest, dict] = None, + request: Optional[Union[error_stats_service.DeleteEventsRequest, dict]] = None, *, - project_name: str = None, + project_name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. @@ -516,7 +529,7 @@ async def sample_delete_events(): print(response) Args: - request (Union[google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest, dict]): + request (Optional[Union[google.cloud.errorreporting_v1beta1.types.DeleteEventsRequest, dict]]): The request object. Deletes all events in the project. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform @@ -592,14 +605,9 @@ async def __aexit__(self, exc_type, exc, tb): await self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("ErrorStatsServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 776909891db8..39b6b5fdbf6b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -16,8 +16,20 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions @@ -58,7 +70,7 @@ class ErrorStatsServiceClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[ErrorStatsServiceTransport]: """Returns an appropriate transport class. @@ -330,8 +342,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, ErrorStatsServiceTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, ErrorStatsServiceTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the error stats service client. @@ -345,7 +357,7 @@ def __init__( transport (Union[str, ErrorStatsServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (google.api_core.client_options.ClientOptions): Custom options for the + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -375,6 +387,7 @@ def __init__( client_options = client_options_lib.from_dict(client_options) if client_options is None: client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( client_options @@ -427,12 +440,14 @@ def __init__( def list_group_stats( self, - request: Union[error_stats_service.ListGroupStatsRequest, dict] = None, + request: Optional[ + Union[error_stats_service.ListGroupStatsRequest, dict] + ] = None, *, - project_name: str = None, - time_range: error_stats_service.QueryTimeRange = None, + project_name: Optional[str] = None, + time_range: Optional[error_stats_service.QueryTimeRange] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListGroupStatsPager: r"""Lists the specified groups. @@ -566,12 +581,12 @@ def sample_list_group_stats(): def list_events( self, - request: Union[error_stats_service.ListEventsRequest, dict] = None, + request: Optional[Union[error_stats_service.ListEventsRequest, dict]] = None, *, - project_name: str = None, - group_id: str = None, + project_name: Optional[str] = None, + group_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEventsPager: r"""Lists the specified events. @@ -698,11 +713,11 @@ def sample_list_events(): def delete_events( self, - request: Union[error_stats_service.DeleteEventsRequest, dict] = None, + request: Optional[Union[error_stats_service.DeleteEventsRequest, dict]] = None, *, - project_name: str = None, + project_name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. @@ -817,14 +832,9 @@ def __exit__(self, type, value, traceback): self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("ErrorStatsServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index d7970fc88136..a2546b27ad26 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -15,7 +15,8 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import pkg_resources + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version import google.auth # type: ignore import google.api_core @@ -27,14 +28,9 @@ from google.cloud.errorreporting_v1beta1.types import error_stats_service -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) class ErrorStatsServiceTransport(abc.ABC): @@ -48,7 +44,7 @@ def __init__( self, *, host: str = DEFAULT_HOST, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index c2dbd8448f88..21e0d0c2d5f2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -48,14 +48,14 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, - scopes: Sequence[str] = None, - channel: grpc.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, @@ -182,8 +182,8 @@ def __init__( def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, **kwargs, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 9fd8c8fd3b77..b51a2ccbdc7f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -50,7 +50,7 @@ class ErrorStatsServiceGrpcAsyncIOTransport(ErrorStatsServiceTransport): def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -93,15 +93,15 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: aio.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, - quota_project_id=None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, api_audience: Optional[str] = None, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index ae912ecd11da..abd5207be175 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -16,8 +16,19 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version from google.api_core.client_options import ClientOptions from google.api_core import exceptions as core_exceptions @@ -156,9 +167,9 @@ def transport(self) -> ReportErrorsServiceTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, ReportErrorsServiceTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the report errors service client. @@ -202,12 +213,14 @@ def __init__( async def report_error_event( self, - request: Union[report_errors_service.ReportErrorEventRequest, dict] = None, + request: Optional[ + Union[report_errors_service.ReportErrorEventRequest, dict] + ] = None, *, - project_name: str = None, - event: report_errors_service.ReportedErrorEvent = None, + project_name: Optional[str] = None, + event: Optional[report_errors_service.ReportedErrorEvent] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> report_errors_service.ReportErrorEventResponse: r"""Report an individual error event and record the event to a log. @@ -258,7 +271,7 @@ async def sample_report_error_event(): print(response) Args: - request (Union[google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest, dict]): + request (Optional[Union[google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest, dict]]): The request object. A request for reporting an individual error event. project_name (:class:`str`): @@ -345,14 +358,9 @@ async def __aexit__(self, exc_type, exc, tb): await self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("ReportErrorsServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 9d6f734a1228..984a993e9960 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -16,8 +16,20 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions @@ -56,7 +68,7 @@ class ReportErrorsServiceClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[ReportErrorsServiceTransport]: """Returns an appropriate transport class. @@ -309,8 +321,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, ReportErrorsServiceTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, ReportErrorsServiceTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the report errors service client. @@ -324,7 +336,7 @@ def __init__( transport (Union[str, ReportErrorsServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (google.api_core.client_options.ClientOptions): Custom options for the + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -354,6 +366,7 @@ def __init__( client_options = client_options_lib.from_dict(client_options) if client_options is None: client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( client_options @@ -406,12 +419,14 @@ def __init__( def report_error_event( self, - request: Union[report_errors_service.ReportErrorEventRequest, dict] = None, + request: Optional[ + Union[report_errors_service.ReportErrorEventRequest, dict] + ] = None, *, - project_name: str = None, - event: report_errors_service.ReportedErrorEvent = None, + project_name: Optional[str] = None, + event: Optional[report_errors_service.ReportedErrorEvent] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> report_errors_service.ReportErrorEventResponse: r"""Report an individual error event and record the event to a log. @@ -556,14 +571,9 @@ def __exit__(self, type, value, traceback): self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("ReportErrorsServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index e2ec3343d7ce..77dc674a2282 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -15,7 +15,8 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import pkg_resources + +from google.cloud.errorreporting_v1beta1 import gapic_version as package_version import google.auth # type: ignore import google.api_core @@ -27,14 +28,9 @@ from google.cloud.errorreporting_v1beta1.types import report_errors_service -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-errorreporting", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) class ReportErrorsServiceTransport(abc.ABC): @@ -48,7 +44,7 @@ def __init__( self, *, host: str = DEFAULT_HOST, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 2c08420c6de8..fb212ee3c182 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -47,14 +47,14 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, - scopes: Sequence[str] = None, - channel: grpc.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, @@ -181,8 +181,8 @@ def __init__( def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, **kwargs, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index def71459a2b1..44636c836457 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -49,7 +49,7 @@ class ReportErrorsServiceGrpcAsyncIOTransport(ReportErrorsServiceTransport): def create_channel( cls, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -92,15 +92,15 @@ def __init__( self, *, host: str = "clouderrorreporting.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: aio.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, - quota_project_id=None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, api_audience: Optional[str] = None, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 1fbc87c6cb2e..e84ca3511f0a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + import proto # type: ignore from google.protobuf import timestamp_pb2 # type: ignore @@ -55,7 +57,7 @@ class ErrorGroup(proto.Message): the same kind of error occurs in different service contexts, it will receive the same group ID. - tracking_issues (Sequence[google.cloud.errorreporting_v1beta1.types.TrackingIssue]): + tracking_issues (MutableSequence[google.cloud.errorreporting_v1beta1.types.TrackingIssue]): Associated tracking issues. resolution_status (google.cloud.errorreporting_v1beta1.types.ResolutionStatus): Error group's resolution status. @@ -63,20 +65,20 @@ class ErrorGroup(proto.Message): interpreted as OPEN """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - group_id = proto.Field( + group_id: str = proto.Field( proto.STRING, number=2, ) - tracking_issues = proto.RepeatedField( + tracking_issues: MutableSequence["TrackingIssue"] = proto.RepeatedField( proto.MESSAGE, number=3, message="TrackingIssue", ) - resolution_status = proto.Field( + resolution_status: "ResolutionStatus" = proto.Field( proto.ENUM, number=5, enum="ResolutionStatus", @@ -94,7 +96,7 @@ class TrackingIssue(proto.Message): ``https://github.com/user/project/issues/4`` """ - url = proto.Field( + url: str = proto.Field( proto.STRING, number=1, ) @@ -120,21 +122,21 @@ class ErrorEvent(proto.Message): occurred. """ - event_time = proto.Field( + event_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - service_context = proto.Field( + service_context: "ServiceContext" = proto.Field( proto.MESSAGE, number=2, message="ServiceContext", ) - message = proto.Field( + message: str = proto.Field( proto.STRING, number=3, ) - context = proto.Field( + context: "ErrorContext" = proto.Field( proto.MESSAGE, number=5, message="ErrorContext", @@ -171,15 +173,15 @@ class ServiceContext(proto.Message): and must not be set when reporting errors. """ - service = proto.Field( + service: str = proto.Field( proto.STRING, number=2, ) - version = proto.Field( + version: str = proto.Field( proto.STRING, number=3, ) - resource_type = proto.Field( + resource_type: str = proto.Field( proto.STRING, number=4, ) @@ -213,16 +215,16 @@ class ErrorContext(proto.Message): place where it was caught. """ - http_request = proto.Field( + http_request: "HttpRequestContext" = proto.Field( proto.MESSAGE, number=1, message="HttpRequestContext", ) - user = proto.Field( + user: str = proto.Field( proto.STRING, number=2, ) - report_location = proto.Field( + report_location: "SourceLocation" = proto.Field( proto.MESSAGE, number=3, message="SourceLocation", @@ -258,27 +260,27 @@ class HttpRequestContext(proto.Message): report. """ - method = proto.Field( + method: str = proto.Field( proto.STRING, number=1, ) - url = proto.Field( + url: str = proto.Field( proto.STRING, number=2, ) - user_agent = proto.Field( + user_agent: str = proto.Field( proto.STRING, number=3, ) - referrer = proto.Field( + referrer: str = proto.Field( proto.STRING, number=4, ) - response_status_code = proto.Field( + response_status_code: int = proto.Field( proto.INT32, number=5, ) - remote_ip = proto.Field( + remote_ip: str = proto.Field( proto.STRING, number=6, ) @@ -305,15 +307,15 @@ class SourceLocation(proto.Message): example, ``my.package.MyClass.method`` in case of Java. """ - file_path = proto.Field( + file_path: str = proto.Field( proto.STRING, number=1, ) - line_number = proto.Field( + line_number: int = proto.Field( proto.INT32, number=2, ) - function_name = proto.Field( + function_name: str = proto.Field( proto.STRING, number=4, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index f40ad9a9f261..a3afd595eda8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + import proto # type: ignore from google.cloud.errorreporting_v1beta1.types import common @@ -40,7 +42,7 @@ class GetGroupRequest(proto.Message): Example: ``projects/my-project-123/groups/my-group`` """ - group_name = proto.Field( + group_name: str = proto.Field( proto.STRING, number=1, ) @@ -55,7 +57,7 @@ class UpdateGroupRequest(proto.Message): resource on the server. """ - group = proto.Field( + group: common.ErrorGroup = proto.Field( proto.MESSAGE, number=1, message=common.ErrorGroup, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index 15615596dae4..e28c7ddeaa23 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + import proto # type: ignore from google.cloud.errorreporting_v1beta1.types import common @@ -69,7 +71,7 @@ class ListGroupStatsRequest(proto.Message): Console `__. Examples: ``projects/my-project-123``, ``projects/5551234``. - group_id (Sequence[str]): + group_id (MutableSequence[str]): Optional. List all ErrorGroupStats with these IDs. service_filter (google.cloud.errorreporting_v1beta1.types.ServiceContextFilter): @@ -108,49 +110,49 @@ class ListGroupStatsRequest(proto.Message): with the identical query parameters as the first request. """ - project_name = proto.Field( + project_name: str = proto.Field( proto.STRING, number=1, ) - group_id = proto.RepeatedField( + group_id: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=2, ) - service_filter = proto.Field( + service_filter: "ServiceContextFilter" = proto.Field( proto.MESSAGE, number=3, message="ServiceContextFilter", ) - time_range = proto.Field( + time_range: "QueryTimeRange" = proto.Field( proto.MESSAGE, number=5, message="QueryTimeRange", ) - timed_count_duration = proto.Field( + timed_count_duration: duration_pb2.Duration = proto.Field( proto.MESSAGE, number=6, message=duration_pb2.Duration, ) - alignment = proto.Field( + alignment: "TimedCountAlignment" = proto.Field( proto.ENUM, number=7, enum="TimedCountAlignment", ) - alignment_time = proto.Field( + alignment_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=8, message=timestamp_pb2.Timestamp, ) - order = proto.Field( + order: "ErrorGroupOrder" = proto.Field( proto.ENUM, number=9, enum="ErrorGroupOrder", ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=11, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=12, ) @@ -160,7 +162,7 @@ class ListGroupStatsResponse(proto.Message): r"""Contains a set of requested error group stats. Attributes: - error_group_stats (Sequence[google.cloud.errorreporting_v1beta1.types.ErrorGroupStats]): + error_group_stats (MutableSequence[google.cloud.errorreporting_v1beta1.types.ErrorGroupStats]): The error group stats which match the given request. next_page_token (str): @@ -181,16 +183,16 @@ class ListGroupStatsResponse(proto.Message): def raw_page(self): return self - error_group_stats = proto.RepeatedField( + error_group_stats: MutableSequence["ErrorGroupStats"] = proto.RepeatedField( proto.MESSAGE, number=1, message="ErrorGroupStats", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - time_range_begin = proto.Field( + time_range_begin: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, @@ -220,7 +222,7 @@ class ErrorGroupStats(proto.Message): provided in the error report. If more users are implicitly affected, such as due to a crash of the whole service, this is not reflected here. - timed_counts (Sequence[google.cloud.errorreporting_v1beta1.types.TimedCount]): + timed_counts (MutableSequence[google.cloud.errorreporting_v1beta1.types.TimedCount]): Approximate number of occurrences over time. Timed counts returned by ListGroups are guaranteed to be: @@ -235,7 +237,7 @@ class ErrorGroupStats(proto.Message): Approximate last occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the time_range that was specified in the request. - affected_services (Sequence[google.cloud.errorreporting_v1beta1.types.ServiceContext]): + affected_services (MutableSequence[google.cloud.errorreporting_v1beta1.types.ServiceContext]): Service contexts with a non-zero error count for the given filter criteria. This list can be truncated if multiple services are affected. Refer to ``num_affected_services`` @@ -254,44 +256,44 @@ class ErrorGroupStats(proto.Message): characteristics of the group as a whole. """ - group = proto.Field( + group: common.ErrorGroup = proto.Field( proto.MESSAGE, number=1, message=common.ErrorGroup, ) - count = proto.Field( + count: int = proto.Field( proto.INT64, number=2, ) - affected_users_count = proto.Field( + affected_users_count: int = proto.Field( proto.INT64, number=3, ) - timed_counts = proto.RepeatedField( + timed_counts: MutableSequence["TimedCount"] = proto.RepeatedField( proto.MESSAGE, number=4, message="TimedCount", ) - first_seen_time = proto.Field( + first_seen_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=5, message=timestamp_pb2.Timestamp, ) - last_seen_time = proto.Field( + last_seen_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=6, message=timestamp_pb2.Timestamp, ) - affected_services = proto.RepeatedField( + affected_services: MutableSequence[common.ServiceContext] = proto.RepeatedField( proto.MESSAGE, number=7, message=common.ServiceContext, ) - num_affected_services = proto.Field( + num_affected_services: int = proto.Field( proto.INT32, number=8, ) - representative = proto.Field( + representative: common.ErrorEvent = proto.Field( proto.MESSAGE, number=9, message=common.ErrorEvent, @@ -314,16 +316,16 @@ class TimedCount(proto.Message): End of the time period to which ``count`` refers (excluded). """ - count = proto.Field( + count: int = proto.Field( proto.INT64, number=1, ) - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, @@ -362,29 +364,29 @@ class ListEventsRequest(proto.Message): response. """ - project_name = proto.Field( + project_name: str = proto.Field( proto.STRING, number=1, ) - group_id = proto.Field( + group_id: str = proto.Field( proto.STRING, number=2, ) - service_filter = proto.Field( + service_filter: "ServiceContextFilter" = proto.Field( proto.MESSAGE, number=3, message="ServiceContextFilter", ) - time_range = proto.Field( + time_range: "QueryTimeRange" = proto.Field( proto.MESSAGE, number=4, message="QueryTimeRange", ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=6, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=7, ) @@ -394,7 +396,7 @@ class ListEventsResponse(proto.Message): r"""Contains a set of requested error events. Attributes: - error_events (Sequence[google.cloud.errorreporting_v1beta1.types.ErrorEvent]): + error_events (MutableSequence[google.cloud.errorreporting_v1beta1.types.ErrorEvent]): The error events which match the given request. next_page_token (str): @@ -411,16 +413,16 @@ class ListEventsResponse(proto.Message): def raw_page(self): return self - error_events = proto.RepeatedField( + error_events: MutableSequence[common.ErrorEvent] = proto.RepeatedField( proto.MESSAGE, number=1, message=common.ErrorEvent, ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - time_range_begin = proto.Field( + time_range_begin: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, @@ -446,7 +448,7 @@ class Period(proto.Enum): PERIOD_1_WEEK = 4 PERIOD_30_DAYS = 5 - period = proto.Field( + period: Period = proto.Field( proto.ENUM, number=1, enum=Period, @@ -471,15 +473,15 @@ class ServiceContextFilter(proto.Message): ```ServiceContext.resource_type`` `__. """ - service = proto.Field( + service: str = proto.Field( proto.STRING, number=2, ) - version = proto.Field( + version: str = proto.Field( proto.STRING, number=3, ) - resource_type = proto.Field( + resource_type: str = proto.Field( proto.STRING, number=4, ) @@ -498,7 +500,7 @@ class DeleteEventsRequest(proto.Message): Example: ``projects/my-project-123``. """ - project_name = proto.Field( + project_name: str = proto.Field( proto.STRING, number=1, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index 22b901a4cac8..e154c5fe5513 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + import proto # type: ignore from google.cloud.errorreporting_v1beta1.types import common @@ -44,11 +46,11 @@ class ReportErrorEventRequest(proto.Message): Required. The error event to be reported. """ - project_name = proto.Field( + project_name: str = proto.Field( proto.STRING, number=1, ) - event = proto.Field( + event: "ReportedErrorEvent" = proto.Field( proto.MESSAGE, number=2, message="ReportedErrorEvent", @@ -106,21 +108,21 @@ class ReportedErrorEvent(proto.Message): which the error occurred. """ - event_time = proto.Field( + event_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - service_context = proto.Field( + service_context: common.ServiceContext = proto.Field( proto.MESSAGE, number=2, message=common.ServiceContext, ) - message = proto.Field( + message: str = proto.Field( proto.STRING, number=3, ) - context = proto.Field( + context: common.ErrorContext = proto.Field( proto.MESSAGE, number=4, message=common.ErrorContext, diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index b192af9a21f3..c96feb0a70da 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,40 +12,72 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""This script is used to synthesize generated parts of this library.""" +import json +import os +from pathlib import Path +import shutil + import synthtool as s -from synthtool import gcp +import synthtool.gcp as gcp from synthtool.languages import python -import os -common = gcp.CommonTemplates() +# ---------------------------------------------------------------------------- +# Copy the generated client from the owl-bot staging directory +# ---------------------------------------------------------------------------- + +clean_up_generated_samples = True -default_version = "v1beta1" +# Load the default version defined in .repo-metadata.json. +default_version = json.load(open(".repo-metadata.json", "rt")).get("default_version") for library in s.get_staging_dirs(default_version): - s.move(library, excludes=["nox.py", "setup.py", "README.rst", "docs/index.rst", "google/cloud/errorreporting/"]) + if clean_up_generated_samples: + shutil.rmtree("samples/generated_samples", ignore_errors=True) + clean_up_generated_samples = False + # work around issue where google.cloud.errorreporting is not present + s.replace(library / "google/cloud/errorreporting_v1beta1/__init__.py", + "from google.cloud.errorreporting", + "from google.cloud.errorreporting_v1beta1" + ) + + s.move( + [library], + excludes=[ + "**/gapic_version.py", + "docs/index.rst", + "google/cloud/errorreporting/", + "setup.py", + "testing/constraints-3.7.txt", + ], + ) s.remove_staging_dirs() # ---------------------------------------------------------------------------- # Add templated files # ---------------------------------------------------------------------------- -templated_files = common.py_library( - samples=True, # set to True only if there are samples - microgenerator=True, + +templated_files = gcp.CommonTemplates().py_library( cov_level=100, + microgenerator=True, + versions=gcp.common.detect_versions(path="./google", default_first=True), +) +s.move( + templated_files, + excludes=[ + ".coveragerc", + ".github/release-please.yml", + ".github/auto-label.yaml", + "docs/index.rst", + "testing/constraints-3.7.txt", + ], ) -s.move(templated_files, excludes=[".coveragerc", ".github/auto-label.yaml"]) # microgenerator has a good .coveragerc file -# ---------------------------------------------------------------------------- -# Samples templates -# ---------------------------------------------------------------------------- python.py_samples(skip_readmes=True) -python.configure_previous_major_version_branches() - -s.shell.run(["nox", "-s", "blacken"], hide_output=False) - +# run format session for all directories which have a noxfile +for noxfile in Path(".").glob("**/noxfile.py"): + s.shell.run(["nox", "-s", "blacken"], cwd=noxfile.parent, hide_output=False) # -------------------------------------------------------------------------- # Modify test configs @@ -61,5 +93,5 @@ s.move( ".kokoro/common_env_vars.cfg", file_path, - merge=lambda src, dst, _, : f"{dst}\n{src}", + merge=lambda src, dst, _,: f"{dst}\n{src}", ) diff --git a/packages/google-cloud-error-reporting/release-please-config.json b/packages/google-cloud-error-reporting/release-please-config.json new file mode 100644 index 000000000000..27b697b95541 --- /dev/null +++ b/packages/google-cloud-error-reporting/release-please-config.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "python", + "extra-files": [ + "google/cloud/error_reporting/gapic_version.py", + "google/cloud/errorreporting_v1beta1/gapic_version.py", + { + "type": "json", + "path": "samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json", + "jsonpath": "$.clientLibrary.version" + } + ] + } + }, + "release-type": "python", + "plugins": [ + { + "type": "sentence-case" + } + ], + "initial-version": "0.1.0" +} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py index 7b49e8b8764e..b4a207adb2d6 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py index 28d644283a12..e4f473deed48 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorGroupService_GetGroup_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py index f0a68ab334ca..6ee4a823766a 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py index b021265af76c..4f8f6bca91f7 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorGroupService_UpdateGroup_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py index e30df345dc73..bc8eb7be7aa6 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py index 0b16d477766e..c03edfb3bc54 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_DeleteEvents_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py index 9d25b82174fc..0cd82da6f5c3 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py index 19cbf488d91a..dbed18fa9e4c 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListEvents_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py index 25ae2ff0b473..c78b943fe80f 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py index 0d779b46662f..a90ceaef123b 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ErrorStatsService_ListGroupStats_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py index f836815d4c49..400a567a83ac 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_async] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py index 575f57aa7b00..2260dd1bfd6a 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-errorreporting +# python3 -m pip install google-cloud-error-reporting # [START clouderrorreporting_v1beta1_generated_ReportErrorsService_ReportErrorEvent_sync] diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json similarity index 99% rename from packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json rename to packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index 4d0884800215..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_errorreporting_v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -7,7 +7,8 @@ } ], "language": "PYTHON", - "name": "google-cloud-errorreporting" + "name": "google-cloud-error-reporting", + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 23a8f2ef0ef0..56ed1ec556ca 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -1,4 +1,5 @@ -# Copyright 2018 Google LLC +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,33 +12,38 @@ # 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 io import os -import setuptools +import setuptools # type: ignore - -# Package metadata. +package_root = os.path.abspath(os.path.dirname(__file__)) name = "google-cloud-error-reporting" -description = "Error Reporting API client library" -version = "1.6.3" -# Should be one of: -# 'Development Status :: 3 - Alpha' -# 'Development Status :: 4 - Beta' -# 'Development Status :: 5 - Production/Stable' -release_status = "Development Status :: 4 - Beta" + + +description = "Google Cloud Error Reporting API client library" + +version = {} +with open( + os.path.join(package_root, "google/cloud/error_reporting/gapic_version.py") +) as fp: + exec(fp.read(), version) +version = version["__version__"] + +if version[0] == "0": + release_status = "Development Status :: 4 - Beta" +else: + release_status = "Development Status :: 5 - Production/Stable" + dependencies = [ "google-cloud-logging>=1.14.0, <4.0.0dev", - "google-api-core[grpc] >= 1.32.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", + "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", "proto-plus >= 1.22.0, <2.0.0dev", "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", ] -extras = {} - - -# Setup boilerplate below this line. +url = "https://github.com/googleapis/python-error-reporting" package_root = os.path.abspath(os.path.dirname(__file__)) @@ -45,20 +51,16 @@ with io.open(readme_filename, encoding="utf-8") as readme_file: readme = readme_file.read() -# Only include packages under the 'google' namespace. Do not include tests, -# benchmarks, etc. packages = [ package for package in setuptools.PEP420PackageFinder.find() if package.startswith("google") ] -# Determine which namespaces are needed. namespaces = ["google"] if "google.cloud" in packages: namespaces.append("google.cloud") - setuptools.setup( name=name, version=version, @@ -67,7 +69,7 @@ author="Google LLC", author_email="googleapis-packages@google.com", license="Apache 2.0", - url="https://github.com/googleapis/python-error-reporting", + url=url, classifiers=[ release_status, "Intended Audience :: Developers", @@ -83,11 +85,9 @@ ], platforms="Posix; MacOS X; Windows", packages=packages, + python_requires=">=3.7", namespace_packages=namespaces, install_requires=dependencies, - extras_require=extras, - python_requires=">=3.7", - scripts=["scripts/fixup_errorreporting_v1beta1_keywords.py"], include_package_data=True, zip_safe=False, ) diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.10.txt b/packages/google-cloud-error-reporting/testing/constraints-3.10.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.10.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.10.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.11.txt b/packages/google-cloud-error-reporting/testing/constraints-3.11.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.11.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.11.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt index c4e51385da33..1b92bfe86a62 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt @@ -1,11 +1,10 @@ # This constraints file is used to check that lower bounds # are correct in setup.py -# List *all* library dependencies and extras in this file. +# List all library dependencies and extras in this file. # Pin the version to the lower bound. -# -# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", -# Then this file should have foo==1.14.0 -google-cloud-logging==1.14.0 -google-api-core==1.32.0 +# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", +# Then this file should have google-cloud-foo==1.14.0 +google-api-core==1.34.0 proto-plus==1.22.0 protobuf==3.19.5 +google-cloud-logging==1.14.0 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.8.txt b/packages/google-cloud-error-reporting/testing/constraints-3.8.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.8.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.8.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.9.txt b/packages/google-cloud-error-reporting/testing/constraints-3.9.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.9.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.9.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf From ebc52500a5b537d7b1621093a988fef2cd7e2769 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 15 Dec 2022 14:08:50 -0500 Subject: [PATCH 385/467] chore(main): release 1.7.0 (#403) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- .../google-cloud-error-reporting/CHANGELOG.md | 21 +++++++++++++++++++ .../cloud/error_reporting/gapic_version.py | 2 +- .../errorreporting_v1beta1/gapic_version.py | 2 +- ....devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 2a8d04b348f3..7588679c01b1 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.6.3" + ".": "1.7.0" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 945f6fb40e56..d23ea5cf87d0 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,27 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.7.0](https://github.com/googleapis/python-error-reporting/compare/v1.6.3...v1.7.0) (2022-12-15) + + +### Features + +* Add typing to proto.Message based class attributes ([ccaa40f](https://github.com/googleapis/python-error-reporting/commit/ccaa40f1eca7d001cb58cd340189d521e93632ff)) + + +### Bug Fixes + +* Add dict typing for client_options ([ccaa40f](https://github.com/googleapis/python-error-reporting/commit/ccaa40f1eca7d001cb58cd340189d521e93632ff)) +* **deps:** Require google-api-core >=1.34.0, >=2.11.0 ([ccaa40f](https://github.com/googleapis/python-error-reporting/commit/ccaa40f1eca7d001cb58cd340189d521e93632ff)) +* Drop usage of pkg_resources ([ccaa40f](https://github.com/googleapis/python-error-reporting/commit/ccaa40f1eca7d001cb58cd340189d521e93632ff)) +* Fix timeout default values ([ccaa40f](https://github.com/googleapis/python-error-reporting/commit/ccaa40f1eca7d001cb58cd340189d521e93632ff)) + + +### Documentation + +* **samples:** Snippetgen handling of repeated enum field ([ccaa40f](https://github.com/googleapis/python-error-reporting/commit/ccaa40f1eca7d001cb58cd340189d521e93632ff)) +* **samples:** Snippetgen should call await on the operation coroutine before calling result ([ccaa40f](https://github.com/googleapis/python-error-reporting/commit/ccaa40f1eca7d001cb58cd340189d521e93632ff)) + ## [1.6.3](https://github.com/googleapis/python-error-reporting/compare/v1.6.2...v1.6.3) (2022-10-07) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index a7807d3a8585..f033c615ea52 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.6.3" # {x-release-please-version} +__version__ = "1.7.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index a7807d3a8585..f033c615ea52 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.6.3" # {x-release-please-version} +__version__ = "1.7.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..b365b419bbab 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.7.0" }, "snippets": [ { From 102e4e3bb91166cf28cbbd4c694d970afac0af36 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 6 Jan 2023 08:21:55 -0500 Subject: [PATCH 386/467] chore(python): add support for python 3.11 (#404) Source-Link: https://github.com/googleapis/synthtool/commit/7197a001ffb6d8ce7b0b9b11c280f0c536c1033a Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:c43f1d918bcf817d337aa29ff833439494a158a0831508fda4ec75dc4c0d0320 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 5 +- .../.github/workflows/unittest.yml | 2 +- .../.kokoro/samples/python3.11/common.cfg | 59 +++++++++++++++++++ .../.kokoro/samples/python3.11/continuous.cfg | 6 ++ .../samples/python3.11/periodic-head.cfg | 11 ++++ .../.kokoro/samples/python3.11/periodic.cfg | 6 ++ .../.kokoro/samples/python3.11/presubmit.cfg | 6 ++ .../CONTRIBUTING.rst | 6 +- .../google-cloud-error-reporting/noxfile.py | 2 +- 9 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic-head.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/presubmit.cfg diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index df2cfe5d8965..889f77dfa25d 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,4 +1,4 @@ -# Copyright 2022 Google LLC +# 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. @@ -13,5 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:3bf87e47c2173d7eed42714589dc4da2c07c3268610f1e47f8e1a30decbfc7f1 - + digest: sha256:c43f1d918bcf817d337aa29ff833439494a158a0831508fda4ec75dc4c0d0320 diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index 23000c05d9d8..8057a7691b12 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11'] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/common.cfg new file mode 100644 index 000000000000..d83d3eabd739 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/common.cfg @@ -0,0 +1,59 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.11" +} + +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-311" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic-head.cfg new file mode 100644 index 000000000000..0ab001caaf12 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic.cfg new file mode 100644 index 000000000000..71cd1e597e38 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 795ac9916d3b..f4f9bf83161b 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.7, 3.8, 3.9 and 3.10 on both UNIX and Windows. + 3.7, 3.8, 3.9, 3.10 and 3.11 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -72,7 +72,7 @@ We use `nox `__ to instrument our tests. - To run a single unit test:: - $ nox -s unit-3.10 -- -k + $ nox -s unit-3.11 -- -k .. note:: @@ -225,11 +225,13 @@ We support: - `Python 3.8`_ - `Python 3.9`_ - `Python 3.10`_ +- `Python 3.11`_ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ .. _Python 3.9: https://docs.python.org/3.9/ .. _Python 3.10: https://docs.python.org/3.10/ +.. _Python 3.11: https://docs.python.org/3.11/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index d752b54f56da..d1f249670120 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -31,7 +31,7 @@ DEFAULT_PYTHON_VERSION = "3.8" -UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10"] +UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11"] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "asyncmock", From 1d74d9477eefa67d882f197c43ca147dddd39ee7 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 9 Jan 2023 23:05:33 -0500 Subject: [PATCH 387/467] feat: Add support for python 3.11 (#405) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Add support for python 3.11 chore: Update gapic-generator-python to v1.8.0 PiperOrigin-RevId: 500768693 Source-Link: https://github.com/googleapis/googleapis/commit/190b612e3d0ff8f025875a669e5d68a1446d43c1 Source-Link: https://github.com/googleapis/googleapis-gen/commit/7bf29a414b9ecac3170f0b65bdc2a95705c0ef1a Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiN2JmMjlhNDE0YjllY2FjMzE3MGYwYjY1YmRjMmE5NTcwNWMwZWYxYSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * require proto-plus 1.22.2 for python 3.11 Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../services/error_group_service/async_client.py | 2 +- .../services/error_group_service/client.py | 2 +- .../services/error_stats_service/async_client.py | 2 +- .../services/error_stats_service/client.py | 2 +- .../services/report_errors_service/async_client.py | 2 +- .../services/report_errors_service/client.py | 2 +- ...etadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- packages/google-cloud-error-reporting/setup.py | 2 ++ .../testing/constraints-3.12.txt | 6 ++++++ 9 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.12.txt diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index ac13ab34854e..a8f33bee12d2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -135,7 +135,7 @@ def get_mtls_endpoint_and_cert_source( 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 variabel is "never", use the default API + 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index b2224989b738..38f39a81a5e1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -284,7 +284,7 @@ def get_mtls_endpoint_and_cert_source( 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 variabel is "never", use the default API + 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 84c42d3e4509..1b45e394088a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -138,7 +138,7 @@ def get_mtls_endpoint_and_cert_source( 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 variabel is "never", use the default API + 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 39b6b5fdbf6b..ddcba84d8ffe 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -287,7 +287,7 @@ def get_mtls_endpoint_and_cert_source( 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 variabel is "never", use the default API + 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index abd5207be175..cc5f39f32828 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -130,7 +130,7 @@ def get_mtls_endpoint_and_cert_source( 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 variabel is "never", use the default API + 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 984a993e9960..ca7d9a56b472 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -266,7 +266,7 @@ def get_mtls_endpoint_and_cert_source( 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 variabel is "never", use the default API + 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index b365b419bbab..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.7.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 56ed1ec556ca..db8b4288e38e 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -41,6 +41,7 @@ "google-cloud-logging>=1.14.0, <4.0.0dev", "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", "proto-plus >= 1.22.0, <2.0.0dev", + "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", ] url = "https://github.com/googleapis/python-error-reporting" @@ -80,6 +81,7 @@ "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Operating System :: OS Independent", "Topic :: Internet", ], diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.12.txt b/packages/google-cloud-error-reporting/testing/constraints-3.12.txt new file mode 100644 index 000000000000..ed7f9aed2559 --- /dev/null +++ b/packages/google-cloud-error-reporting/testing/constraints-3.12.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf From 144ec2685e8b2a8dc4fde509b28e0a9452580e4f Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 10 Jan 2023 13:26:46 -0500 Subject: [PATCH 388/467] chore(main): release 1.8.0 (#406) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../google/cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ...tadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 7588679c01b1..3800c0691dc9 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.7.0" + ".": "1.8.0" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index d23ea5cf87d0..62d5e28a3a02 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.8.0](https://github.com/googleapis/python-error-reporting/compare/v1.7.0...v1.8.0) (2023-01-10) + + +### Features + +* Add support for python 3.11 ([#405](https://github.com/googleapis/python-error-reporting/issues/405)) ([d5e0c4c](https://github.com/googleapis/python-error-reporting/commit/d5e0c4cf0cb40aab80146cad16141217b1998b30)) + ## [1.7.0](https://github.com/googleapis/python-error-reporting/compare/v1.6.3...v1.7.0) (2022-12-15) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index f033c615ea52..b334dccf50ad 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.7.0" # {x-release-please-version} +__version__ = "1.8.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index f033c615ea52..b334dccf50ad 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.7.0" # {x-release-please-version} +__version__ = "1.8.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..29f4d27eb1b4 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.8.0" }, "snippets": [ { From 0d9f62489040cf9ce0567e74f23d963b46744afe Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 20 Jan 2023 13:39:20 -0500 Subject: [PATCH 389/467] docs: Add documentation for enums (#407) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: Add documentation for enums fix: Add context manager return types chore: Update gapic-generator-python to v1.8.1 PiperOrigin-RevId: 503210727 Source-Link: https://github.com/googleapis/googleapis/commit/a391fd1dac18dfdfa00c18c8404f2c3a6ff8e98e Source-Link: https://github.com/googleapis/googleapis-gen/commit/0080f830dec37c3384157082bce279e37079ea58 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMDA4MGY4MzBkZWMzN2MzMzg0MTU3MDgyYmNlMjc5ZTM3MDc5ZWE1OCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- .../services/error_group_service/client.py | 2 +- .../services/error_stats_service/client.py | 2 +- .../services/report_errors_service/client.py | 2 +- .../errorreporting_v1beta1/types/common.py | 21 ++++++- .../types/error_stats_service.py | 63 ++++++++++++++++++- ....devtools.clouderrorreporting.v1beta1.json | 2 +- 6 files changed, 85 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 38f39a81a5e1..f52ea95160c2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -647,7 +647,7 @@ def sample_update_group(): # Done; return the response. return response - def __enter__(self): + def __enter__(self) -> "ErrorGroupServiceClient": return self def __exit__(self, type, value, traceback): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index ddcba84d8ffe..1033a8c92ce0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -818,7 +818,7 @@ def sample_delete_events(): # Done; return the response. return response - def __enter__(self): + def __enter__(self) -> "ErrorStatsServiceClient": return self def __exit__(self, type, value, traceback): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index ca7d9a56b472..86ea2339584e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -557,7 +557,7 @@ def sample_report_error_event(): # Done; return the response. return response - def __enter__(self): + def __enter__(self) -> "ReportErrorsServiceClient": return self def __exit__(self, type, value, traceback): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index e84ca3511f0a..2f04117b5f08 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -36,7 +36,26 @@ class ResolutionStatus(proto.Enum): - r"""Resolution status of an error group.""" + r"""Resolution status of an error group. + + Values: + RESOLUTION_STATUS_UNSPECIFIED (0): + Status is unknown. When left unspecified in + requests, it is treated like OPEN. + OPEN (1): + The error group is not being addressed. This + is the default for new groups. It is also used + for errors re-occurring after marked RESOLVED. + ACKNOWLEDGED (2): + Error Group manually acknowledged, it can + have an issue link attached. + RESOLVED (3): + Error Group manually resolved, more events + for this group are not expected to occur. + MUTED (4): + The error group is muted and excluded by + default on group stats requests. + """ RESOLUTION_STATUS_UNSPECIFIED = 0 OPEN = 1 ACKNOWLEDGED = 2 diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index e28c7ddeaa23..60d0f90a60a8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -44,6 +44,25 @@ class TimedCountAlignment(proto.Enum): r"""Specifies how the time periods of error group counts are aligned. + + Values: + ERROR_COUNT_ALIGNMENT_UNSPECIFIED (0): + No alignment specified. + ALIGNMENT_EQUAL_ROUNDED (1): + The time periods shall be consecutive, have width equal to + the requested duration, and be aligned at the + ``alignment_time`` provided in the request. The + ``alignment_time`` does not have to be inside the query + period but even if it is outside, only time periods are + returned which overlap with the query period. A rounded + alignment will typically result in a different size of the + first or the last time period. + ALIGNMENT_EQUAL_AT_END (2): + The time periods shall be consecutive, have + width equal to the requested duration, and be + aligned at the end of the requested time period. + This can result in a different size of the first + time period. """ ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0 ALIGNMENT_EQUAL_ROUNDED = 1 @@ -51,7 +70,24 @@ class TimedCountAlignment(proto.Enum): class ErrorGroupOrder(proto.Enum): - r"""A sorting order of error groups.""" + r"""A sorting order of error groups. + + Values: + GROUP_ORDER_UNSPECIFIED (0): + No group order specified. + COUNT_DESC (1): + Total count of errors in the given time + window in descending order. + LAST_SEEN_DESC (2): + Timestamp when the group was last seen in the + given time window in descending order. + CREATED_DESC (3): + Timestamp when the group was created in + descending order. + AFFECTED_USERS_DESC (4): + Number of affected users in the given time + window in descending order. + """ GROUP_ORDER_UNSPECIFIED = 0 COUNT_DESC = 1 LAST_SEEN_DESC = 2 @@ -440,7 +476,30 @@ class QueryTimeRange(proto.Message): """ class Period(proto.Enum): - r"""The supported time ranges.""" + r"""The supported time ranges. + + Values: + PERIOD_UNSPECIFIED (0): + Do not use. + PERIOD_1_HOUR (1): + Retrieve data for the last hour. + Recommended minimum timed count duration: 1 min. + PERIOD_6_HOURS (2): + Retrieve data for the last 6 hours. + Recommended minimum timed count duration: 10 + min. + PERIOD_1_DAY (3): + Retrieve data for the last day. + Recommended minimum timed count duration: 1 + hour. + PERIOD_1_WEEK (4): + Retrieve data for the last week. + Recommended minimum timed count duration: 6 + hours. + PERIOD_30_DAYS (5): + Retrieve data for the last 30 days. + Recommended minimum timed count duration: 1 day. + """ PERIOD_UNSPECIFIED = 0 PERIOD_1_HOUR = 1 PERIOD_6_HOURS = 2 diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index 29f4d27eb1b4..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.8.0" + "version": "0.1.0" }, "snippets": [ { From d699fe4ef87dcd338e05eaa2824a037cb5d74db4 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 23 Jan 2023 10:49:12 -0500 Subject: [PATCH 390/467] chore(main): release 1.8.1 (#408) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- packages/google-cloud-error-reporting/CHANGELOG.md | 12 ++++++++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ..._google.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 3800c0691dc9..064e56a8ba46 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.8.0" + ".": "1.8.1" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 62d5e28a3a02..2e07443021e8 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,18 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.8.1](https://github.com/googleapis/python-error-reporting/compare/v1.8.0...v1.8.1) (2023-01-20) + + +### Bug Fixes + +* Add context manager return types ([26a0749](https://github.com/googleapis/python-error-reporting/commit/26a074998b0c0a0697ed03086f7e1f6c4b77e35a)) + + +### Documentation + +* Add documentation for enums ([26a0749](https://github.com/googleapis/python-error-reporting/commit/26a074998b0c0a0697ed03086f7e1f6c4b77e35a)) + ## [1.8.0](https://github.com/googleapis/python-error-reporting/compare/v1.7.0...v1.8.0) (2023-01-10) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index b334dccf50ad..90e02933f3a4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.0" # {x-release-please-version} +__version__ = "1.8.1" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index b334dccf50ad..90e02933f3a4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.0" # {x-release-please-version} +__version__ = "1.8.1" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..c3cb99856997 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.8.1" }, "snippets": [ { From 1e6fdb34a4fecf53b01195ebf59e79e12a71d9cc Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 12:36:51 -0500 Subject: [PATCH 391/467] chore: Update gapic-generator-python to v1.8.2 (#409) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.8.2 PiperOrigin-RevId: 504289125 Source-Link: https://github.com/googleapis/googleapis/commit/38a48a44a44279e9cf9f2f864b588958a2d87491 Source-Link: https://github.com/googleapis/googleapis-gen/commit/b2dc22663dbe47a972c8d8c2f8a4df013dafdcbc Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYjJkYzIyNjYzZGJlNDdhOTcyYzhkOGMyZjhhNGRmMDEzZGFmZGNiYyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * remove workaround Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- packages/google-cloud-error-reporting/.coveragerc | 1 + packages/google-cloud-error-reporting/owlbot.py | 6 ------ ...etadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/.coveragerc b/packages/google-cloud-error-reporting/.coveragerc index 67733e5c9b84..9aac2710e161 100644 --- a/packages/google-cloud-error-reporting/.coveragerc +++ b/packages/google-cloud-error-reporting/.coveragerc @@ -5,6 +5,7 @@ branch = True show_missing = True omit = google/cloud/errorreporting/__init__.py + google/cloud/errorreporting/gapic_version.py exclude_lines = # Re-enable the standard pragma pragma: NO COVER diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index c96feb0a70da..0a02758fce45 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -35,12 +35,6 @@ shutil.rmtree("samples/generated_samples", ignore_errors=True) clean_up_generated_samples = False - # work around issue where google.cloud.errorreporting is not present - s.replace(library / "google/cloud/errorreporting_v1beta1/__init__.py", - "from google.cloud.errorreporting", - "from google.cloud.errorreporting_v1beta1" - ) - s.move( [library], excludes=[ diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index c3cb99856997..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.8.1" + "version": "0.1.0" }, "snippets": [ { From 4d0f4f8a4f4a7ea9df5dbf05cfa0581378e5f754 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 30 Jan 2023 16:42:13 +0000 Subject: [PATCH 392/467] chore: fix prerelease_deps nox session [autoapprove] (#410) Source-Link: https://togithub.com/googleapis/synthtool/commit/26c7505b2f76981ec1707b851e1595c8c06e90fc Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:f946c75373c2b0040e8e318c5e85d0cf46bc6e61d0a01f3ef94d8de974ac6790 --- .../.github/.OwlBot.lock.yaml | 2 +- packages/google-cloud-error-reporting/noxfile.py | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 889f77dfa25d..f0f3b24b20cd 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:c43f1d918bcf817d337aa29ff833439494a158a0831508fda4ec75dc4c0d0320 + digest: sha256:f946c75373c2b0040e8e318c5e85d0cf46bc6e61d0a01f3ef94d8de974ac6790 diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index d1f249670120..e9649dc6c86f 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -188,9 +188,9 @@ def unit(session): def install_systemtest_dependencies(session, *constraints): # Use pre-release gRPC for system tests. - # Exclude version 1.49.0rc1 which has a known issue. - # See https://github.com/grpc/grpc/pull/30642 - session.install("--pre", "grpcio!=1.49.0rc1") + # Exclude version 1.52.0rc1 which has a known issue. + # See https://github.com/grpc/grpc/issues/32163 + session.install("--pre", "grpcio!=1.52.0rc1") session.install(*SYSTEM_TEST_STANDARD_DEPENDENCIES, *constraints) @@ -345,9 +345,7 @@ def prerelease_deps(session): unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES session.install(*unit_deps_all) system_deps_all = ( - SYSTEM_TEST_STANDARD_DEPENDENCIES - + SYSTEM_TEST_EXTERNAL_DEPENDENCIES - + SYSTEM_TEST_EXTRAS + SYSTEM_TEST_STANDARD_DEPENDENCIES + SYSTEM_TEST_EXTERNAL_DEPENDENCIES ) session.install(*system_deps_all) @@ -377,8 +375,8 @@ def prerelease_deps(session): # dependency of grpc "six", "googleapis-common-protos", - # Exclude version 1.49.0rc1 which has a known issue. See https://github.com/grpc/grpc/pull/30642 - "grpcio!=1.49.0rc1", + # Exclude version 1.52.0rc1 which has a known issue. See https://github.com/grpc/grpc/issues/32163 + "grpcio!=1.52.0rc1", "grpcio-status", "google-api-core", "proto-plus", From 9f0899cbe5cf36c9603a85ba48132e1620202a45 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 06:41:44 -0500 Subject: [PATCH 393/467] docs: removed link to the regionalization page (#411) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: removed link to the regionalization page PiperOrigin-RevId: 506926790 Source-Link: https://github.com/googleapis/googleapis/commit/7295c41168dfc72307767bcff534582e3ccc8d4d Source-Link: https://github.com/googleapis/googleapis-gen/commit/c132408dc7a2b4705f68990eb3208f74b552eb88 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzEzMjQwOGRjN2EyYjQ3MDVmNjg5OTBlYjMyMDhmNzRiNTUyZWI4OCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../services/report_errors_service/async_client.py | 3 --- .../services/report_errors_service/client.py | 3 --- .../services/report_errors_service/transports/grpc.py | 3 --- .../services/report_errors_service/transports/grpc_asyncio.py | 3 --- 4 files changed, 12 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index cc5f39f32828..7ccd15ec184d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -237,9 +237,6 @@ async def report_error_event( in regional log buckets or logs routed to other Google Cloud projects. - For more information, see `Using Error Reporting with - regionalized logs `__. - .. code-block:: python # This snippet has been automatically generated and should be regarded as a diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 86ea2339584e..a7883f1f6bab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -443,9 +443,6 @@ def report_error_event( in regional log buckets or logs routed to other Google Cloud projects. - For more information, see `Using Error Reporting with - regionalized logs `__. - .. code-block:: python # This snippet has been automatically generated and should be regarded as a diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index fb212ee3c182..0ff8e43525ab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -252,9 +252,6 @@ def report_error_event( in regional log buckets or logs routed to other Google Cloud projects. - For more information, see `Using Error Reporting with - regionalized logs `__. - Returns: Callable[[~.ReportErrorEventRequest], ~.ReportErrorEventResponse]: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 44636c836457..eea7a486703c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -255,9 +255,6 @@ def report_error_event( in regional log buckets or logs routed to other Google Cloud projects. - For more information, see `Using Error Reporting with - regionalized logs `__. - Returns: Callable[[~.ReportErrorEventRequest], Awaitable[~.ReportErrorEventResponse]]: From fdd8749858745500f7e9aa33450ca6ef1327f944 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 7 Feb 2023 10:31:18 -0500 Subject: [PATCH 394/467] chore(main): release 1.8.2 (#412) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../google/cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ...tadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 064e56a8ba46..7017b7cfae14 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.8.1" + ".": "1.8.2" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 2e07443021e8..cebcaae1813e 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.8.2](https://github.com/googleapis/python-error-reporting/compare/v1.8.1...v1.8.2) (2023-02-04) + + +### Documentation + +* Removed link to the regionalization page ([#411](https://github.com/googleapis/python-error-reporting/issues/411)) ([3a0d82d](https://github.com/googleapis/python-error-reporting/commit/3a0d82db6a425b91430be0ee84fd9c957f39af00)) + ## [1.8.1](https://github.com/googleapis/python-error-reporting/compare/v1.8.0...v1.8.1) (2023-01-20) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index 90e02933f3a4..9a1b07eac0ab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.1" # {x-release-please-version} +__version__ = "1.8.2" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index 90e02933f3a4..9a1b07eac0ab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.1" # {x-release-please-version} +__version__ = "1.8.2" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..9a89b962825a 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.8.2" }, "snippets": [ { From d9290f431ed8e07c7914de91c60abd67137d63bd Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 8 Feb 2023 15:26:25 +0000 Subject: [PATCH 395/467] build(deps): bump cryptography from 38.0.3 to 39.0.1 in /synthtool/gcp/templates/python_library/.kokoro (#417) Source-Link: https://togithub.com/googleapis/synthtool/commit/bb171351c3946d3c3c32e60f5f18cee8c464ec51 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:f62c53736eccb0c4934a3ea9316e0d57696bb49c1a7c86c726e9bb8a2f87dadf --- .../.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/requirements.txt | 49 +++++++++---------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index f0f3b24b20cd..894fb6bc9b47 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:f946c75373c2b0040e8e318c5e85d0cf46bc6e61d0a01f3ef94d8de974ac6790 + digest: sha256:f62c53736eccb0c4934a3ea9316e0d57696bb49c1a7c86c726e9bb8a2f87dadf diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 05dc4672edaa..096e4800a9ac 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -113,33 +113,28 @@ commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 # via rich -cryptography==38.0.3 \ - --hash=sha256:068147f32fa662c81aebab95c74679b401b12b57494872886eb5c1139250ec5d \ - --hash=sha256:06fc3cc7b6f6cca87bd56ec80a580c88f1da5306f505876a71c8cfa7050257dd \ - --hash=sha256:25c1d1f19729fb09d42e06b4bf9895212292cb27bb50229f5aa64d039ab29146 \ - --hash=sha256:402852a0aea73833d982cabb6d0c3bb582c15483d29fb7085ef2c42bfa7e38d7 \ - --hash=sha256:4e269dcd9b102c5a3d72be3c45d8ce20377b8076a43cbed6f660a1afe365e436 \ - --hash=sha256:5419a127426084933076132d317911e3c6eb77568a1ce23c3ac1e12d111e61e0 \ - --hash=sha256:554bec92ee7d1e9d10ded2f7e92a5d70c1f74ba9524947c0ba0c850c7b011828 \ - --hash=sha256:5e89468fbd2fcd733b5899333bc54d0d06c80e04cd23d8c6f3e0542358c6060b \ - --hash=sha256:65535bc550b70bd6271984d9863a37741352b4aad6fb1b3344a54e6950249b55 \ - --hash=sha256:6ab9516b85bebe7aa83f309bacc5f44a61eeb90d0b4ec125d2d003ce41932d36 \ - --hash=sha256:6addc3b6d593cd980989261dc1cce38263c76954d758c3c94de51f1e010c9a50 \ - --hash=sha256:728f2694fa743a996d7784a6194da430f197d5c58e2f4e278612b359f455e4a2 \ - --hash=sha256:785e4056b5a8b28f05a533fab69febf5004458e20dad7e2e13a3120d8ecec75a \ - --hash=sha256:78cf5eefac2b52c10398a42765bfa981ce2372cbc0457e6bf9658f41ec3c41d8 \ - --hash=sha256:7f836217000342d448e1c9a342e9163149e45d5b5eca76a30e84503a5a96cab0 \ - --hash=sha256:8d41a46251bf0634e21fac50ffd643216ccecfaf3701a063257fe0b2be1b6548 \ - --hash=sha256:984fe150f350a3c91e84de405fe49e688aa6092b3525f407a18b9646f6612320 \ - --hash=sha256:9b24bcff7853ed18a63cfb0c2b008936a9554af24af2fb146e16d8e1aed75748 \ - --hash=sha256:b1b35d9d3a65542ed2e9d90115dfd16bbc027b3f07ee3304fc83580f26e43249 \ - --hash=sha256:b1b52c9e5f8aa2b802d48bd693190341fae201ea51c7a167d69fc48b60e8a959 \ - --hash=sha256:bbf203f1a814007ce24bd4d51362991d5cb90ba0c177a9c08825f2cc304d871f \ - --hash=sha256:be243c7e2bfcf6cc4cb350c0d5cdf15ca6383bbcb2a8ef51d3c9411a9d4386f0 \ - --hash=sha256:bfbe6ee19615b07a98b1d2287d6a6073f734735b49ee45b11324d85efc4d5cbd \ - --hash=sha256:c46837ea467ed1efea562bbeb543994c2d1f6e800785bd5a2c98bc096f5cb220 \ - --hash=sha256:dfb4f4dd568de1b6af9f4cda334adf7d72cf5bc052516e1b2608b683375dd95c \ - --hash=sha256:ed7b00096790213e09eb11c97cc6e2b757f15f3d2f85833cd2d3ec3fe37c1722 +cryptography==39.0.1 \ + --hash=sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4 \ + --hash=sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f \ + --hash=sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502 \ + --hash=sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41 \ + --hash=sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965 \ + --hash=sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e \ + --hash=sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc \ + --hash=sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad \ + --hash=sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505 \ + --hash=sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388 \ + --hash=sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6 \ + --hash=sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2 \ + --hash=sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac \ + --hash=sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695 \ + --hash=sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6 \ + --hash=sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336 \ + --hash=sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0 \ + --hash=sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c \ + --hash=sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106 \ + --hash=sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a \ + --hash=sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8 # via # gcp-releasetool # secretstorage From 86f4a3432637624828c97dfdcad5a088113b66ad Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 11:55:23 -0500 Subject: [PATCH 396/467] chore(python): upgrade gcp-releasetool in .kokoro [autoapprove] (#419) Source-Link: https://github.com/googleapis/synthtool/commit/5f2a6089f73abf06238fe4310f6a14d6f6d1eed3 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:8555f0e37e6261408f792bfd6635102d2da5ad73f8f09bcb24f25e6afb5fac97 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 2 +- .../google-cloud-error-reporting/.kokoro/requirements.in | 2 +- .../google-cloud-error-reporting/.kokoro/requirements.txt | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 894fb6bc9b47..5fc5daa31783 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:f62c53736eccb0c4934a3ea9316e0d57696bb49c1a7c86c726e9bb8a2f87dadf + digest: sha256:8555f0e37e6261408f792bfd6635102d2da5ad73f8f09bcb24f25e6afb5fac97 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.in b/packages/google-cloud-error-reporting/.kokoro/requirements.in index cbd7e77f44db..882178ce6001 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.in +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.in @@ -1,5 +1,5 @@ gcp-docuploader -gcp-releasetool +gcp-releasetool>=1.10.5 # required for compatibility with cryptography>=39.x importlib-metadata typing-extensions twine diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 096e4800a9ac..fa99c12908f0 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -154,9 +154,9 @@ gcp-docuploader==0.6.4 \ --hash=sha256:01486419e24633af78fd0167db74a2763974765ee8078ca6eb6964d0ebd388af \ --hash=sha256:70861190c123d907b3b067da896265ead2eeb9263969d6955c9e0bb091b5ccbf # via -r requirements.in -gcp-releasetool==1.10.0 \ - --hash=sha256:72a38ca91b59c24f7e699e9227c90cbe4dd71b789383cb0164b088abae294c83 \ - --hash=sha256:8c7c99320208383d4bb2b808c6880eb7a81424afe7cdba3c8d84b25f4f0e097d +gcp-releasetool==1.10.5 \ + --hash=sha256:174b7b102d704b254f2a26a3eda2c684fd3543320ec239baf771542a2e58e109 \ + --hash=sha256:e29d29927fe2ca493105a82958c6873bb2b90d503acac56be2c229e74de0eec9 # via -r requirements.in google-api-core==2.10.2 \ --hash=sha256:10c06f7739fe57781f87523375e8e1a3a4674bf6392cd6131a3222182b971320 \ From fdb88988daa234adbb9aa1153b047ff6dfc39612 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 28 Feb 2023 06:45:51 -0500 Subject: [PATCH 397/467] feat: enable "rest" transport in Python for services supporting numeric enums (#418) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: enable "rest" transport in Python for services supporting numeric enums PiperOrigin-RevId: 508143576 Source-Link: https://github.com/googleapis/googleapis/commit/7a702a989db3b413f39ff8994ca53fb38b6928c2 Source-Link: https://github.com/googleapis/googleapis-gen/commit/6ad1279c0e7aa787ac6b66c9fd4a210692edffcd Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNmFkMTI3OWMwZTdhYTc4N2FjNmI2NmM5ZmQ0YTIxMDY5MmVkZmZjZCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update gapic-generator-python to v1.8.5 PiperOrigin-RevId: 511892190 Source-Link: https://github.com/googleapis/googleapis/commit/a45d9c09c1287ffdf938f4e8083e791046c0b23b Source-Link: https://github.com/googleapis/googleapis-gen/commit/1907294b1d8365ea24f8c5f2e059a64124c4ed3b Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMTkwNzI5NGIxZDgzNjVlYTI0ZjhjNWYyZTA1OWE2NDEyNGM0ZWQzYiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../gapic_metadata.json | 45 + .../services/error_group_service/client.py | 2 + .../transports/__init__.py | 5 + .../error_group_service/transports/rest.py | 447 +++++++ .../services/error_stats_service/client.py | 2 + .../transports/__init__.py | 5 + .../error_stats_service/transports/rest.py | 579 +++++++++ .../services/report_errors_service/client.py | 2 + .../transports/__init__.py | 5 + .../report_errors_service/transports/rest.py | 329 +++++ .../errorreporting_v1beta1/types/common.py | 2 + .../types/error_group_service.py | 2 + .../types/error_stats_service.py | 2 + .../types/report_errors_service.py | 2 + ....devtools.clouderrorreporting.v1beta1.json | 2 +- .../test_error_group_service.py | 644 +++++++++- .../test_error_stats_service.py | 1091 ++++++++++++++++- .../test_report_errors_service.py | 441 ++++++- 18 files changed, 3594 insertions(+), 13 deletions(-) create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_metadata.json b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_metadata.json index 1b6fc5e2eda0..825275e6f72f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_metadata.json +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_metadata.json @@ -36,6 +36,21 @@ ] } } + }, + "rest": { + "libraryClient": "ErrorGroupServiceClient", + "rpcs": { + "GetGroup": { + "methods": [ + "get_group" + ] + }, + "UpdateGroup": { + "methods": [ + "update_group" + ] + } + } } } }, @@ -80,6 +95,26 @@ ] } } + }, + "rest": { + "libraryClient": "ErrorStatsServiceClient", + "rpcs": { + "DeleteEvents": { + "methods": [ + "delete_events" + ] + }, + "ListEvents": { + "methods": [ + "list_events" + ] + }, + "ListGroupStats": { + "methods": [ + "list_group_stats" + ] + } + } } } }, @@ -104,6 +139,16 @@ ] } } + }, + "rest": { + "libraryClient": "ReportErrorsServiceClient", + "rpcs": { + "ReportErrorEvent": { + "methods": [ + "report_error_event" + ] + } + } } } } diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index f52ea95160c2..07f0aeada1db 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -51,6 +51,7 @@ from .transports.base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc import ErrorGroupServiceGrpcTransport from .transports.grpc_asyncio import ErrorGroupServiceGrpcAsyncIOTransport +from .transports.rest import ErrorGroupServiceRestTransport class ErrorGroupServiceClientMeta(type): @@ -66,6 +67,7 @@ class ErrorGroupServiceClientMeta(type): ) # type: Dict[str, Type[ErrorGroupServiceTransport]] _transport_registry["grpc"] = ErrorGroupServiceGrpcTransport _transport_registry["grpc_asyncio"] = ErrorGroupServiceGrpcAsyncIOTransport + _transport_registry["rest"] = ErrorGroupServiceRestTransport def get_transport_class( cls, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py index 873035d946b5..b6d0629c6ca7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py @@ -19,15 +19,20 @@ from .base import ErrorGroupServiceTransport from .grpc import ErrorGroupServiceGrpcTransport from .grpc_asyncio import ErrorGroupServiceGrpcAsyncIOTransport +from .rest import ErrorGroupServiceRestTransport +from .rest import ErrorGroupServiceRestInterceptor # Compile a registry of transports. _transport_registry = OrderedDict() # type: Dict[str, Type[ErrorGroupServiceTransport]] _transport_registry["grpc"] = ErrorGroupServiceGrpcTransport _transport_registry["grpc_asyncio"] = ErrorGroupServiceGrpcAsyncIOTransport +_transport_registry["rest"] = ErrorGroupServiceRestTransport __all__ = ( "ErrorGroupServiceTransport", "ErrorGroupServiceGrpcTransport", "ErrorGroupServiceGrpcAsyncIOTransport", + "ErrorGroupServiceRestTransport", + "ErrorGroupServiceRestInterceptor", ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py new file mode 100644 index 000000000000..a85ea6ea781d --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -0,0 +1,447 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 google.auth.transport.requests import AuthorizedSession # type: ignore +import json # type: ignore +import grpc # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.api_core import exceptions as core_exceptions +from google.api_core import retry as retries +from google.api_core import rest_helpers +from google.api_core import rest_streaming +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from requests import __version__ as requests_version +import dataclasses +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union +import warnings + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service + +from .base import ( + ErrorGroupServiceTransport, + DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, +) + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=requests_version, +) + + +class ErrorGroupServiceRestInterceptor: + """Interceptor for ErrorGroupService. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the ErrorGroupServiceRestTransport. + + .. code-block:: python + class MyCustomErrorGroupServiceInterceptor(ErrorGroupServiceRestInterceptor): + def pre_get_group(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_group(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_group(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_group(self, response): + logging.log(f"Received response: {response}") + return response + + transport = ErrorGroupServiceRestTransport(interceptor=MyCustomErrorGroupServiceInterceptor()) + client = ErrorGroupServiceClient(transport=transport) + + + """ + + def pre_get_group( + self, + request: error_group_service.GetGroupRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[error_group_service.GetGroupRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_group + + Override in a subclass to manipulate the request or metadata + before they are sent to the ErrorGroupService server. + """ + return request, metadata + + def post_get_group(self, response: common.ErrorGroup) -> common.ErrorGroup: + """Post-rpc interceptor for get_group + + Override in a subclass to manipulate the response + after it is returned by the ErrorGroupService server but before + it is returned to user code. + """ + return response + + def pre_update_group( + self, + request: error_group_service.UpdateGroupRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[error_group_service.UpdateGroupRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_group + + Override in a subclass to manipulate the request or metadata + before they are sent to the ErrorGroupService server. + """ + return request, metadata + + def post_update_group(self, response: common.ErrorGroup) -> common.ErrorGroup: + """Post-rpc interceptor for update_group + + Override in a subclass to manipulate the response + after it is returned by the ErrorGroupService server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class ErrorGroupServiceRestStub: + _session: AuthorizedSession + _host: str + _interceptor: ErrorGroupServiceRestInterceptor + + +class ErrorGroupServiceRestTransport(ErrorGroupServiceTransport): + """REST backend transport for ErrorGroupService. + + Service for retrieving and updating individual error groups. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + + """ + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + interceptor: Optional[ErrorGroupServiceRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + 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. + + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or ErrorGroupServiceRestInterceptor() + self._prep_wrapped_messages(client_info) + + class _GetGroup(ErrorGroupServiceRestStub): + def __hash__(self): + return hash("GetGroup") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: error_group_service.GetGroupRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> common.ErrorGroup: + r"""Call the get group method over HTTP. + + Args: + request (~.error_group_service.GetGroupRequest): + The request object. A request to return an individual + group. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.common.ErrorGroup: + Description of a group of similar + error events. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1beta1/{group_name=projects/*/groups/*}", + }, + ] + request, metadata = self._interceptor.pre_get_group(request, metadata) + pb_request = error_group_service.GetGroupRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = common.ErrorGroup() + pb_resp = common.ErrorGroup.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_group(resp) + return resp + + class _UpdateGroup(ErrorGroupServiceRestStub): + def __hash__(self): + return hash("UpdateGroup") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: error_group_service.UpdateGroupRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> common.ErrorGroup: + r"""Call the update group method over HTTP. + + Args: + request (~.error_group_service.UpdateGroupRequest): + The request object. A request to replace the existing + data for the given group. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.common.ErrorGroup: + Description of a group of similar + error events. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "put", + "uri": "/v1beta1/{group.name=projects/*/groups/*}", + "body": "group", + }, + ] + request, metadata = self._interceptor.pre_update_group(request, metadata) + pb_request = error_group_service.UpdateGroupRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = common.ErrorGroup() + pb_resp = common.ErrorGroup.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_group(resp) + return resp + + @property + def get_group( + self, + ) -> Callable[[error_group_service.GetGroupRequest], common.ErrorGroup]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetGroup(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_group( + self, + ) -> Callable[[error_group_service.UpdateGroupRequest], common.ErrorGroup]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateGroup(self._session, self._host, self._interceptor) # type: ignore + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__ = ("ErrorGroupServiceRestTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 1033a8c92ce0..ff3799e42999 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -52,6 +52,7 @@ from .transports.base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc import ErrorStatsServiceGrpcTransport from .transports.grpc_asyncio import ErrorStatsServiceGrpcAsyncIOTransport +from .transports.rest import ErrorStatsServiceRestTransport class ErrorStatsServiceClientMeta(type): @@ -67,6 +68,7 @@ class ErrorStatsServiceClientMeta(type): ) # type: Dict[str, Type[ErrorStatsServiceTransport]] _transport_registry["grpc"] = ErrorStatsServiceGrpcTransport _transport_registry["grpc_asyncio"] = ErrorStatsServiceGrpcAsyncIOTransport + _transport_registry["rest"] = ErrorStatsServiceRestTransport def get_transport_class( cls, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py index 484e788e701b..b1b560f30ede 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py @@ -19,15 +19,20 @@ from .base import ErrorStatsServiceTransport from .grpc import ErrorStatsServiceGrpcTransport from .grpc_asyncio import ErrorStatsServiceGrpcAsyncIOTransport +from .rest import ErrorStatsServiceRestTransport +from .rest import ErrorStatsServiceRestInterceptor # Compile a registry of transports. _transport_registry = OrderedDict() # type: Dict[str, Type[ErrorStatsServiceTransport]] _transport_registry["grpc"] = ErrorStatsServiceGrpcTransport _transport_registry["grpc_asyncio"] = ErrorStatsServiceGrpcAsyncIOTransport +_transport_registry["rest"] = ErrorStatsServiceRestTransport __all__ = ( "ErrorStatsServiceTransport", "ErrorStatsServiceGrpcTransport", "ErrorStatsServiceGrpcAsyncIOTransport", + "ErrorStatsServiceRestTransport", + "ErrorStatsServiceRestInterceptor", ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py new file mode 100644 index 000000000000..779f59c56663 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -0,0 +1,579 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 google.auth.transport.requests import AuthorizedSession # type: ignore +import json # type: ignore +import grpc # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.api_core import exceptions as core_exceptions +from google.api_core import retry as retries +from google.api_core import rest_helpers +from google.api_core import rest_streaming +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from requests import __version__ as requests_version +import dataclasses +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union +import warnings + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + + +from google.cloud.errorreporting_v1beta1.types import error_stats_service + +from .base import ( + ErrorStatsServiceTransport, + DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, +) + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=requests_version, +) + + +class ErrorStatsServiceRestInterceptor: + """Interceptor for ErrorStatsService. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the ErrorStatsServiceRestTransport. + + .. code-block:: python + class MyCustomErrorStatsServiceInterceptor(ErrorStatsServiceRestInterceptor): + def pre_delete_events(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_delete_events(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_events(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_events(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_group_stats(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_group_stats(self, response): + logging.log(f"Received response: {response}") + return response + + transport = ErrorStatsServiceRestTransport(interceptor=MyCustomErrorStatsServiceInterceptor()) + client = ErrorStatsServiceClient(transport=transport) + + + """ + + def pre_delete_events( + self, + request: error_stats_service.DeleteEventsRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[error_stats_service.DeleteEventsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete_events + + Override in a subclass to manipulate the request or metadata + before they are sent to the ErrorStatsService server. + """ + return request, metadata + + def post_delete_events( + self, response: error_stats_service.DeleteEventsResponse + ) -> error_stats_service.DeleteEventsResponse: + """Post-rpc interceptor for delete_events + + Override in a subclass to manipulate the response + after it is returned by the ErrorStatsService server but before + it is returned to user code. + """ + return response + + def pre_list_events( + self, + request: error_stats_service.ListEventsRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[error_stats_service.ListEventsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_events + + Override in a subclass to manipulate the request or metadata + before they are sent to the ErrorStatsService server. + """ + return request, metadata + + def post_list_events( + self, response: error_stats_service.ListEventsResponse + ) -> error_stats_service.ListEventsResponse: + """Post-rpc interceptor for list_events + + Override in a subclass to manipulate the response + after it is returned by the ErrorStatsService server but before + it is returned to user code. + """ + return response + + def pre_list_group_stats( + self, + request: error_stats_service.ListGroupStatsRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[error_stats_service.ListGroupStatsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_group_stats + + Override in a subclass to manipulate the request or metadata + before they are sent to the ErrorStatsService server. + """ + return request, metadata + + def post_list_group_stats( + self, response: error_stats_service.ListGroupStatsResponse + ) -> error_stats_service.ListGroupStatsResponse: + """Post-rpc interceptor for list_group_stats + + Override in a subclass to manipulate the response + after it is returned by the ErrorStatsService server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class ErrorStatsServiceRestStub: + _session: AuthorizedSession + _host: str + _interceptor: ErrorStatsServiceRestInterceptor + + +class ErrorStatsServiceRestTransport(ErrorStatsServiceTransport): + """REST backend transport for ErrorStatsService. + + An API for retrieving and managing error statistics as well + as data for individual events. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + + """ + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + interceptor: Optional[ErrorStatsServiceRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + 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. + + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or ErrorStatsServiceRestInterceptor() + self._prep_wrapped_messages(client_info) + + class _DeleteEvents(ErrorStatsServiceRestStub): + def __hash__(self): + return hash("DeleteEvents") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: error_stats_service.DeleteEventsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> error_stats_service.DeleteEventsResponse: + r"""Call the delete events method over HTTP. + + Args: + request (~.error_stats_service.DeleteEventsRequest): + The request object. Deletes all events in the project. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.error_stats_service.DeleteEventsResponse: + Response message for deleting error + events. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "delete", + "uri": "/v1beta1/{project_name=projects/*}/events", + }, + ] + request, metadata = self._interceptor.pre_delete_events(request, metadata) + pb_request = error_stats_service.DeleteEventsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = error_stats_service.DeleteEventsResponse() + pb_resp = error_stats_service.DeleteEventsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_delete_events(resp) + return resp + + class _ListEvents(ErrorStatsServiceRestStub): + def __hash__(self): + return hash("ListEvents") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "groupId": "", + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: error_stats_service.ListEventsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> error_stats_service.ListEventsResponse: + r"""Call the list events method over HTTP. + + Args: + request (~.error_stats_service.ListEventsRequest): + The request object. Specifies a set of error events to + return. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.error_stats_service.ListEventsResponse: + Contains a set of requested error + events. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1beta1/{project_name=projects/*}/events", + }, + ] + request, metadata = self._interceptor.pre_list_events(request, metadata) + pb_request = error_stats_service.ListEventsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = error_stats_service.ListEventsResponse() + pb_resp = error_stats_service.ListEventsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_events(resp) + return resp + + class _ListGroupStats(ErrorStatsServiceRestStub): + def __hash__(self): + return hash("ListGroupStats") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: error_stats_service.ListGroupStatsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> error_stats_service.ListGroupStatsResponse: + r"""Call the list group stats method over HTTP. + + Args: + request (~.error_stats_service.ListGroupStatsRequest): + The request object. Specifies a set of ``ErrorGroupStats`` to return. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.error_stats_service.ListGroupStatsResponse: + Contains a set of requested error + group stats. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1beta1/{project_name=projects/*}/groupStats", + }, + ] + request, metadata = self._interceptor.pre_list_group_stats( + request, metadata + ) + pb_request = error_stats_service.ListGroupStatsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = error_stats_service.ListGroupStatsResponse() + pb_resp = error_stats_service.ListGroupStatsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_group_stats(resp) + return resp + + @property + def delete_events( + self, + ) -> Callable[ + [error_stats_service.DeleteEventsRequest], + error_stats_service.DeleteEventsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._DeleteEvents(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_events( + self, + ) -> Callable[ + [error_stats_service.ListEventsRequest], error_stats_service.ListEventsResponse + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListEvents(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_group_stats( + self, + ) -> Callable[ + [error_stats_service.ListGroupStatsRequest], + error_stats_service.ListGroupStatsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListGroupStats(self._session, self._host, self._interceptor) # type: ignore + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__ = ("ErrorStatsServiceRestTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index a7883f1f6bab..f2d057b083d1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -50,6 +50,7 @@ from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc import ReportErrorsServiceGrpcTransport from .transports.grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport +from .transports.rest import ReportErrorsServiceRestTransport class ReportErrorsServiceClientMeta(type): @@ -65,6 +66,7 @@ class ReportErrorsServiceClientMeta(type): ) # type: Dict[str, Type[ReportErrorsServiceTransport]] _transport_registry["grpc"] = ReportErrorsServiceGrpcTransport _transport_registry["grpc_asyncio"] = ReportErrorsServiceGrpcAsyncIOTransport + _transport_registry["rest"] = ReportErrorsServiceRestTransport def get_transport_class( cls, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py index b96eb34594ae..289d0ff1f489 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py @@ -19,6 +19,8 @@ from .base import ReportErrorsServiceTransport from .grpc import ReportErrorsServiceGrpcTransport from .grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport +from .rest import ReportErrorsServiceRestTransport +from .rest import ReportErrorsServiceRestInterceptor # Compile a registry of transports. @@ -27,9 +29,12 @@ ) # type: Dict[str, Type[ReportErrorsServiceTransport]] _transport_registry["grpc"] = ReportErrorsServiceGrpcTransport _transport_registry["grpc_asyncio"] = ReportErrorsServiceGrpcAsyncIOTransport +_transport_registry["rest"] = ReportErrorsServiceRestTransport __all__ = ( "ReportErrorsServiceTransport", "ReportErrorsServiceGrpcTransport", "ReportErrorsServiceGrpcAsyncIOTransport", + "ReportErrorsServiceRestTransport", + "ReportErrorsServiceRestInterceptor", ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py new file mode 100644 index 000000000000..cf2386167899 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py @@ -0,0 +1,329 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 google.auth.transport.requests import AuthorizedSession # type: ignore +import json # type: ignore +import grpc # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.api_core import exceptions as core_exceptions +from google.api_core import retry as retries +from google.api_core import rest_helpers +from google.api_core import rest_streaming +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from requests import __version__ as requests_version +import dataclasses +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union +import warnings + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + + +from google.cloud.errorreporting_v1beta1.types import report_errors_service + +from .base import ( + ReportErrorsServiceTransport, + DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, +) + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=requests_version, +) + + +class ReportErrorsServiceRestInterceptor: + """Interceptor for ReportErrorsService. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the ReportErrorsServiceRestTransport. + + .. code-block:: python + class MyCustomReportErrorsServiceInterceptor(ReportErrorsServiceRestInterceptor): + def pre_report_error_event(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_report_error_event(self, response): + logging.log(f"Received response: {response}") + return response + + transport = ReportErrorsServiceRestTransport(interceptor=MyCustomReportErrorsServiceInterceptor()) + client = ReportErrorsServiceClient(transport=transport) + + + """ + + def pre_report_error_event( + self, + request: report_errors_service.ReportErrorEventRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + report_errors_service.ReportErrorEventRequest, Sequence[Tuple[str, str]] + ]: + """Pre-rpc interceptor for report_error_event + + Override in a subclass to manipulate the request or metadata + before they are sent to the ReportErrorsService server. + """ + return request, metadata + + def post_report_error_event( + self, response: report_errors_service.ReportErrorEventResponse + ) -> report_errors_service.ReportErrorEventResponse: + """Post-rpc interceptor for report_error_event + + Override in a subclass to manipulate the response + after it is returned by the ReportErrorsService server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class ReportErrorsServiceRestStub: + _session: AuthorizedSession + _host: str + _interceptor: ReportErrorsServiceRestInterceptor + + +class ReportErrorsServiceRestTransport(ReportErrorsServiceTransport): + """REST backend transport for ReportErrorsService. + + An API for reporting error events. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + + """ + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + interceptor: Optional[ReportErrorsServiceRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + 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. + + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or ReportErrorsServiceRestInterceptor() + self._prep_wrapped_messages(client_info) + + class _ReportErrorEvent(ReportErrorsServiceRestStub): + def __hash__(self): + return hash("ReportErrorEvent") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: report_errors_service.ReportErrorEventRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> report_errors_service.ReportErrorEventResponse: + r"""Call the report error event method over HTTP. + + Args: + request (~.report_errors_service.ReportErrorEventRequest): + The request object. A request for reporting an individual + error event. + + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.report_errors_service.ReportErrorEventResponse: + Response for reporting an individual + error event. Data may be added to this + message in the future. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1beta1/{project_name=projects/*}/events:report", + "body": "event", + }, + ] + request, metadata = self._interceptor.pre_report_error_event( + request, metadata + ) + pb_request = report_errors_service.ReportErrorEventRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = report_errors_service.ReportErrorEventResponse() + pb_resp = report_errors_service.ReportErrorEventResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_report_error_event(resp) + return resp + + @property + def report_error_event( + self, + ) -> Callable[ + [report_errors_service.ReportErrorEventRequest], + report_errors_service.ReportErrorEventResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ReportErrorEvent(self._session, self._host, self._interceptor) # type: ignore + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__ = ("ReportErrorsServiceRestTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 2f04117b5f08..43ac4ba2cf92 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from __future__ import annotations + from typing import MutableMapping, MutableSequence import proto # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index a3afd595eda8..63ecabf94491 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from __future__ import annotations + from typing import MutableMapping, MutableSequence import proto # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index 60d0f90a60a8..afb2668a266e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from __future__ import annotations + from typing import MutableMapping, MutableSequence import proto # type: ignore diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index e154c5fe5513..a3087c1adf2d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from __future__ import annotations + from typing import MutableMapping, MutableSequence import proto # type: ignore diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index 9a89b962825a..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.8.2" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 994c484c0b67..90643d98fab0 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -24,10 +24,17 @@ import grpc from grpc.experimental import aio +from collections.abc import Iterable +from google.protobuf import json_format +import json import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule from proto.marshal.rules import wrappers +from requests import Response +from requests import Request, PreparedRequest +from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -100,6 +107,7 @@ def test__get_default_mtls_endpoint(): [ (ErrorGroupServiceClient, "grpc"), (ErrorGroupServiceAsyncClient, "grpc_asyncio"), + (ErrorGroupServiceClient, "rest"), ], ) def test_error_group_service_client_from_service_account_info( @@ -115,7 +123,11 @@ def test_error_group_service_client_from_service_account_info( assert client.transport._credentials == creds assert isinstance(client, client_class) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) @pytest.mark.parametrize( @@ -123,6 +135,7 @@ def test_error_group_service_client_from_service_account_info( [ (transports.ErrorGroupServiceGrpcTransport, "grpc"), (transports.ErrorGroupServiceGrpcAsyncIOTransport, "grpc_asyncio"), + (transports.ErrorGroupServiceRestTransport, "rest"), ], ) def test_error_group_service_client_service_account_always_use_jwt( @@ -148,6 +161,7 @@ def test_error_group_service_client_service_account_always_use_jwt( [ (ErrorGroupServiceClient, "grpc"), (ErrorGroupServiceAsyncClient, "grpc_asyncio"), + (ErrorGroupServiceClient, "rest"), ], ) def test_error_group_service_client_from_service_account_file( @@ -170,13 +184,18 @@ def test_error_group_service_client_from_service_account_file( assert client.transport._credentials == creds assert isinstance(client, client_class) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) def test_error_group_service_client_get_transport_class(): transport = ErrorGroupServiceClient.get_transport_class() available_transports = [ transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceRestTransport, ] assert transport in available_transports @@ -193,6 +212,7 @@ def test_error_group_service_client_get_transport_class(): transports.ErrorGroupServiceGrpcAsyncIOTransport, "grpc_asyncio", ), + (ErrorGroupServiceClient, transports.ErrorGroupServiceRestTransport, "rest"), ], ) @mock.patch.object( @@ -348,6 +368,18 @@ def test_error_group_service_client_client_options( "grpc_asyncio", "false", ), + ( + ErrorGroupServiceClient, + transports.ErrorGroupServiceRestTransport, + "rest", + "true", + ), + ( + ErrorGroupServiceClient, + transports.ErrorGroupServiceRestTransport, + "rest", + "false", + ), ], ) @mock.patch.object( @@ -547,6 +579,7 @@ def test_error_group_service_client_get_mtls_endpoint_and_cert_source(client_cla transports.ErrorGroupServiceGrpcAsyncIOTransport, "grpc_asyncio", ), + (ErrorGroupServiceClient, transports.ErrorGroupServiceRestTransport, "rest"), ], ) def test_error_group_service_client_client_options_scopes( @@ -587,6 +620,12 @@ def test_error_group_service_client_client_options_scopes( "grpc_asyncio", grpc_helpers_async, ), + ( + ErrorGroupServiceClient, + transports.ErrorGroupServiceRestTransport, + "rest", + None, + ), ], ) def test_error_group_service_client_client_options_credentials_file( @@ -1171,6 +1210,552 @@ async def test_update_group_flattened_error_async(): ) +@pytest.mark.parametrize( + "request_type", + [ + error_group_service.GetGroupRequest, + dict, + ], +) +def test_get_group_rest(request_type): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"group_name": "projects/sample1/groups/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_group(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) + assert response.name == "name_value" + assert response.group_id == "group_id_value" + assert response.resolution_status == common.ResolutionStatus.OPEN + + +def test_get_group_rest_required_fields( + request_type=error_group_service.GetGroupRequest, +): + transport_class = transports.ErrorGroupServiceRestTransport + + request_init = {} + request_init["group_name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_group._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["groupName"] = "group_name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_group._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "groupName" in jsonified_request + assert jsonified_request["groupName"] == "group_name_value" + + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_group(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_group_rest_unset_required_fields(): + transport = transports.ErrorGroupServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_group._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("groupName",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_group_rest_interceptors(null_interceptor): + transport = transports.ErrorGroupServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ErrorGroupServiceRestInterceptor(), + ) + client = ErrorGroupServiceClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ErrorGroupServiceRestInterceptor, "post_get_group" + ) as post, mock.patch.object( + transports.ErrorGroupServiceRestInterceptor, "pre_get_group" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = error_group_service.GetGroupRequest.pb( + error_group_service.GetGroupRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = common.ErrorGroup.to_json(common.ErrorGroup()) + + request = error_group_service.GetGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = common.ErrorGroup() + + client.get_group( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_group_rest_bad_request( + transport: str = "rest", request_type=error_group_service.GetGroupRequest +): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"group_name": "projects/sample1/groups/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_group(request) + + +def test_get_group_rest_flattened(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup() + + # get arguments that satisfy an http rule for this method + sample_request = {"group_name": "projects/sample1/groups/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + group_name="group_name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_group(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1beta1/{group_name=projects/*/groups/*}" % client.transport._host, + args[1], + ) + + +def test_get_group_rest_flattened_error(transport: str = "rest"): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_group( + error_group_service.GetGroupRequest(), + group_name="group_name_value", + ) + + +def test_get_group_rest_error(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + error_group_service.UpdateGroupRequest, + dict, + ], +) +def test_update_group_rest(request_type): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"group": {"name": "projects/sample1/groups/sample2"}} + request_init["group"] = { + "name": "projects/sample1/groups/sample2", + "group_id": "group_id_value", + "tracking_issues": [{"url": "url_value"}], + "resolution_status": 1, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.update_group(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) + assert response.name == "name_value" + assert response.group_id == "group_id_value" + assert response.resolution_status == common.ResolutionStatus.OPEN + + +def test_update_group_rest_required_fields( + request_type=error_group_service.UpdateGroupRequest, +): + transport_class = transports.ErrorGroupServiceRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).update_group._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).update_group._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "put", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.update_group(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_update_group_rest_unset_required_fields(): + transport = transports.ErrorGroupServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.update_group._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("group",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_group_rest_interceptors(null_interceptor): + transport = transports.ErrorGroupServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ErrorGroupServiceRestInterceptor(), + ) + client = ErrorGroupServiceClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ErrorGroupServiceRestInterceptor, "post_update_group" + ) as post, mock.patch.object( + transports.ErrorGroupServiceRestInterceptor, "pre_update_group" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = error_group_service.UpdateGroupRequest.pb( + error_group_service.UpdateGroupRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = common.ErrorGroup.to_json(common.ErrorGroup()) + + request = error_group_service.UpdateGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = common.ErrorGroup() + + client.update_group( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_group_rest_bad_request( + transport: str = "rest", request_type=error_group_service.UpdateGroupRequest +): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"group": {"name": "projects/sample1/groups/sample2"}} + request_init["group"] = { + "name": "projects/sample1/groups/sample2", + "group_id": "group_id_value", + "tracking_issues": [{"url": "url_value"}], + "resolution_status": 1, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_group(request) + + +def test_update_group_rest_flattened(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup() + + # get arguments that satisfy an http rule for this method + sample_request = {"group": {"name": "projects/sample1/groups/sample2"}} + + # get truthy value for each flattened field + mock_args = dict( + group=common.ErrorGroup(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.update_group(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1beta1/{group.name=projects/*/groups/*}" % client.transport._host, + args[1], + ) + + +def test_update_group_rest_flattened_error(transport: str = "rest"): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_group( + error_group_service.UpdateGroupRequest(), + group=common.ErrorGroup(name="name_value"), + ) + + +def test_update_group_rest_error(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + def test_credentials_transport_error(): # It is an error to provide credentials and a transport instance. transport = transports.ErrorGroupServiceGrpcTransport( @@ -1252,6 +1837,7 @@ def test_transport_get_channel(): [ transports.ErrorGroupServiceGrpcTransport, transports.ErrorGroupServiceGrpcAsyncIOTransport, + transports.ErrorGroupServiceRestTransport, ], ) def test_transport_adc(transport_class): @@ -1266,6 +1852,7 @@ def test_transport_adc(transport_class): "transport_name", [ "grpc", + "rest", ], ) def test_transport_kind(transport_name): @@ -1396,6 +1983,7 @@ def test_error_group_service_transport_auth_adc(transport_class): [ transports.ErrorGroupServiceGrpcTransport, transports.ErrorGroupServiceGrpcAsyncIOTransport, + transports.ErrorGroupServiceRestTransport, ], ) def test_error_group_service_transport_auth_gdch_credentials(transport_class): @@ -1495,11 +2083,23 @@ def test_error_group_service_grpc_transport_client_cert_source_for_mtls( ) +def test_error_group_service_http_transport_client_cert_source_for_mtls(): + cred = ga_credentials.AnonymousCredentials() + with mock.patch( + "google.auth.transport.requests.AuthorizedSession.configure_mtls_channel" + ) as mock_configure_mtls_channel: + transports.ErrorGroupServiceRestTransport( + credentials=cred, client_cert_source_for_mtls=client_cert_source_callback + ) + mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) + + @pytest.mark.parametrize( "transport_name", [ "grpc", "grpc_asyncio", + "rest", ], ) def test_error_group_service_host_no_port(transport_name): @@ -1510,7 +2110,11 @@ def test_error_group_service_host_no_port(transport_name): ), transport=transport_name, ) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) @pytest.mark.parametrize( @@ -1518,6 +2122,7 @@ def test_error_group_service_host_no_port(transport_name): [ "grpc", "grpc_asyncio", + "rest", ], ) def test_error_group_service_host_with_port(transport_name): @@ -1528,7 +2133,36 @@ def test_error_group_service_host_with_port(transport_name): ), transport=transport_name, ) - assert client.transport._host == ("clouderrorreporting.googleapis.com:8000") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:8000" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com:8000" + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_error_group_service_client_transport_session_collision(transport_name): + creds1 = ga_credentials.AnonymousCredentials() + creds2 = ga_credentials.AnonymousCredentials() + client1 = ErrorGroupServiceClient( + credentials=creds1, + transport=transport_name, + ) + client2 = ErrorGroupServiceClient( + credentials=creds2, + transport=transport_name, + ) + session1 = client1.transport.get_group._session + session2 = client2.transport.get_group._session + assert session1 != session2 + session1 = client1.transport.update_group._session + session2 = client2.transport.update_group._session + assert session1 != session2 def test_error_group_service_grpc_transport_channel(): @@ -1822,6 +2456,7 @@ async def test_transport_close_async(): def test_transport_close(): transports = { + "rest": "_session", "grpc": "_grpc_channel", } @@ -1839,6 +2474,7 @@ def test_transport_close(): def test_client_ctx(): transports = [ + "rest", "grpc", ] for transport in transports: diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index c5fbcf640d9a..4ea472017440 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -24,10 +24,17 @@ import grpc from grpc.experimental import aio +from collections.abc import Iterable +from google.protobuf import json_format +import json import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule from proto.marshal.rules import wrappers +from requests import Response +from requests import Request, PreparedRequest +from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -103,6 +110,7 @@ def test__get_default_mtls_endpoint(): [ (ErrorStatsServiceClient, "grpc"), (ErrorStatsServiceAsyncClient, "grpc_asyncio"), + (ErrorStatsServiceClient, "rest"), ], ) def test_error_stats_service_client_from_service_account_info( @@ -118,7 +126,11 @@ def test_error_stats_service_client_from_service_account_info( assert client.transport._credentials == creds assert isinstance(client, client_class) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) @pytest.mark.parametrize( @@ -126,6 +138,7 @@ def test_error_stats_service_client_from_service_account_info( [ (transports.ErrorStatsServiceGrpcTransport, "grpc"), (transports.ErrorStatsServiceGrpcAsyncIOTransport, "grpc_asyncio"), + (transports.ErrorStatsServiceRestTransport, "rest"), ], ) def test_error_stats_service_client_service_account_always_use_jwt( @@ -151,6 +164,7 @@ def test_error_stats_service_client_service_account_always_use_jwt( [ (ErrorStatsServiceClient, "grpc"), (ErrorStatsServiceAsyncClient, "grpc_asyncio"), + (ErrorStatsServiceClient, "rest"), ], ) def test_error_stats_service_client_from_service_account_file( @@ -173,13 +187,18 @@ def test_error_stats_service_client_from_service_account_file( assert client.transport._credentials == creds assert isinstance(client, client_class) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) def test_error_stats_service_client_get_transport_class(): transport = ErrorStatsServiceClient.get_transport_class() available_transports = [ transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceRestTransport, ] assert transport in available_transports @@ -196,6 +215,7 @@ def test_error_stats_service_client_get_transport_class(): transports.ErrorStatsServiceGrpcAsyncIOTransport, "grpc_asyncio", ), + (ErrorStatsServiceClient, transports.ErrorStatsServiceRestTransport, "rest"), ], ) @mock.patch.object( @@ -351,6 +371,18 @@ def test_error_stats_service_client_client_options( "grpc_asyncio", "false", ), + ( + ErrorStatsServiceClient, + transports.ErrorStatsServiceRestTransport, + "rest", + "true", + ), + ( + ErrorStatsServiceClient, + transports.ErrorStatsServiceRestTransport, + "rest", + "false", + ), ], ) @mock.patch.object( @@ -550,6 +582,7 @@ def test_error_stats_service_client_get_mtls_endpoint_and_cert_source(client_cla transports.ErrorStatsServiceGrpcAsyncIOTransport, "grpc_asyncio", ), + (ErrorStatsServiceClient, transports.ErrorStatsServiceRestTransport, "rest"), ], ) def test_error_stats_service_client_client_options_scopes( @@ -590,6 +623,12 @@ def test_error_stats_service_client_client_options_scopes( "grpc_asyncio", grpc_helpers_async, ), + ( + ErrorStatsServiceClient, + transports.ErrorStatsServiceRestTransport, + "rest", + None, + ), ], ) def test_error_stats_service_client_client_options_credentials_file( @@ -1804,6 +1843,996 @@ async def test_delete_events_flattened_error_async(): ) +@pytest.mark.parametrize( + "request_type", + [ + error_stats_service.ListGroupStatsRequest, + dict, + ], +) +def test_list_group_stats_rest(request_type): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListGroupStatsResponse( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_group_stats(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListGroupStatsPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_group_stats_rest_required_fields( + request_type=error_stats_service.ListGroupStatsRequest, +): + transport_class = transports.ErrorStatsServiceRestTransport + + request_init = {} + request_init["project_name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_group_stats._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["projectName"] = "project_name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_group_stats._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "alignment", + "alignment_time", + "group_id", + "order", + "page_size", + "page_token", + "service_filter", + "time_range", + "timed_count_duration", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "projectName" in jsonified_request + assert jsonified_request["projectName"] == "project_name_value" + + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListGroupStatsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = error_stats_service.ListGroupStatsResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_group_stats(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_group_stats_rest_unset_required_fields(): + transport = transports.ErrorStatsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_group_stats._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "alignment", + "alignmentTime", + "groupId", + "order", + "pageSize", + "pageToken", + "serviceFilter", + "timeRange", + "timedCountDuration", + ) + ) + & set(("projectName",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_group_stats_rest_interceptors(null_interceptor): + transport = transports.ErrorStatsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ErrorStatsServiceRestInterceptor(), + ) + client = ErrorStatsServiceClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "post_list_group_stats" + ) as post, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "pre_list_group_stats" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = error_stats_service.ListGroupStatsRequest.pb( + error_stats_service.ListGroupStatsRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = error_stats_service.ListGroupStatsResponse.to_json( + error_stats_service.ListGroupStatsResponse() + ) + + request = error_stats_service.ListGroupStatsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = error_stats_service.ListGroupStatsResponse() + + client.list_group_stats( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_group_stats_rest_bad_request( + transport: str = "rest", request_type=error_stats_service.ListGroupStatsRequest +): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_group_stats(request) + + +def test_list_group_stats_rest_flattened(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListGroupStatsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"project_name": "projects/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project_name="project_name_value", + time_range=error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_group_stats(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1beta1/{project_name=projects/*}/groupStats" % client.transport._host, + args[1], + ) + + +def test_list_group_stats_rest_flattened_error(transport: str = "rest"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_group_stats( + error_stats_service.ListGroupStatsRequest(), + project_name="project_name_value", + time_range=error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ), + ) + + +def test_list_group_stats_rest_pager(transport: str = "rest"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + next_page_token="abc", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[], + next_page_token="def", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + ], + next_page_token="ghi", + ), + error_stats_service.ListGroupStatsResponse( + error_group_stats=[ + error_stats_service.ErrorGroupStats(), + error_stats_service.ErrorGroupStats(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + error_stats_service.ListGroupStatsResponse.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project_name": "projects/sample1"} + + pager = client.list_group_stats(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, error_stats_service.ErrorGroupStats) for i in results) + + pages = list(client.list_group_stats(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + error_stats_service.ListEventsRequest, + dict, + ], +) +def test_list_events_rest(request_type): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListEventsResponse( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = error_stats_service.ListEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_events(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListEventsPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_events_rest_required_fields( + request_type=error_stats_service.ListEventsRequest, +): + transport_class = transports.ErrorStatsServiceRestTransport + + request_init = {} + request_init["project_name"] = "" + request_init["group_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + assert "groupId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_events._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "groupId" in jsonified_request + assert jsonified_request["groupId"] == request_init["group_id"] + + jsonified_request["projectName"] = "project_name_value" + jsonified_request["groupId"] = "group_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_events._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "group_id", + "page_size", + "page_token", + "service_filter", + "time_range", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "projectName" in jsonified_request + assert jsonified_request["projectName"] == "project_name_value" + assert "groupId" in jsonified_request + assert jsonified_request["groupId"] == "group_id_value" + + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListEventsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = error_stats_service.ListEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_events(request) + + expected_params = [ + ( + "groupId", + "", + ), + ("$alt", "json;enum-encoding=int"), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_events_rest_unset_required_fields(): + transport = transports.ErrorStatsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_events._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "groupId", + "pageSize", + "pageToken", + "serviceFilter", + "timeRange", + ) + ) + & set( + ( + "projectName", + "groupId", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_events_rest_interceptors(null_interceptor): + transport = transports.ErrorStatsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ErrorStatsServiceRestInterceptor(), + ) + client = ErrorStatsServiceClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "post_list_events" + ) as post, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "pre_list_events" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = error_stats_service.ListEventsRequest.pb( + error_stats_service.ListEventsRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = error_stats_service.ListEventsResponse.to_json( + error_stats_service.ListEventsResponse() + ) + + request = error_stats_service.ListEventsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = error_stats_service.ListEventsResponse() + + client.list_events( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_events_rest_bad_request( + transport: str = "rest", request_type=error_stats_service.ListEventsRequest +): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_events(request) + + +def test_list_events_rest_flattened(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListEventsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"project_name": "projects/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project_name="project_name_value", + group_id="group_id_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = error_stats_service.ListEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_events(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1beta1/{project_name=projects/*}/events" % client.transport._host, + args[1], + ) + + +def test_list_events_rest_flattened_error(transport: str = "rest"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_events( + error_stats_service.ListEventsRequest(), + project_name="project_name_value", + group_id="group_id_value", + ) + + +def test_list_events_rest_pager(transport: str = "rest"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + error_stats_service.ListEventsResponse( + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + common.ErrorEvent(), + ], + next_page_token="abc", + ), + error_stats_service.ListEventsResponse( + error_events=[], + next_page_token="def", + ), + error_stats_service.ListEventsResponse( + error_events=[ + common.ErrorEvent(), + ], + next_page_token="ghi", + ), + error_stats_service.ListEventsResponse( + error_events=[ + common.ErrorEvent(), + common.ErrorEvent(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + error_stats_service.ListEventsResponse.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project_name": "projects/sample1"} + + pager = client.list_events(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, common.ErrorEvent) for i in results) + + pages = list(client.list_events(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + error_stats_service.DeleteEventsRequest, + dict, + ], +) +def test_delete_events_rest(request_type): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.DeleteEventsResponse() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = error_stats_service.DeleteEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_events(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, error_stats_service.DeleteEventsResponse) + + +def test_delete_events_rest_required_fields( + request_type=error_stats_service.DeleteEventsRequest, +): + transport_class = transports.ErrorStatsServiceRestTransport + + request_init = {} + request_init["project_name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_events._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["projectName"] = "project_name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_events._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "projectName" in jsonified_request + assert jsonified_request["projectName"] == "project_name_value" + + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = error_stats_service.DeleteEventsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = error_stats_service.DeleteEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_events(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_events_rest_unset_required_fields(): + transport = transports.ErrorStatsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete_events._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("projectName",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_events_rest_interceptors(null_interceptor): + transport = transports.ErrorStatsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ErrorStatsServiceRestInterceptor(), + ) + client = ErrorStatsServiceClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "post_delete_events" + ) as post, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "pre_delete_events" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = error_stats_service.DeleteEventsRequest.pb( + error_stats_service.DeleteEventsRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = error_stats_service.DeleteEventsResponse.to_json( + error_stats_service.DeleteEventsResponse() + ) + + request = error_stats_service.DeleteEventsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = error_stats_service.DeleteEventsResponse() + + client.delete_events( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_events_rest_bad_request( + transport: str = "rest", request_type=error_stats_service.DeleteEventsRequest +): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_events(request) + + +def test_delete_events_rest_flattened(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.DeleteEventsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"project_name": "projects/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project_name="project_name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = error_stats_service.DeleteEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_events(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1beta1/{project_name=projects/*}/events" % client.transport._host, + args[1], + ) + + +def test_delete_events_rest_flattened_error(transport: str = "rest"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_events( + error_stats_service.DeleteEventsRequest(), + project_name="project_name_value", + ) + + +def test_delete_events_rest_error(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + def test_credentials_transport_error(): # It is an error to provide credentials and a transport instance. transport = transports.ErrorStatsServiceGrpcTransport( @@ -1885,6 +2914,7 @@ def test_transport_get_channel(): [ transports.ErrorStatsServiceGrpcTransport, transports.ErrorStatsServiceGrpcAsyncIOTransport, + transports.ErrorStatsServiceRestTransport, ], ) def test_transport_adc(transport_class): @@ -1899,6 +2929,7 @@ def test_transport_adc(transport_class): "transport_name", [ "grpc", + "rest", ], ) def test_transport_kind(transport_name): @@ -2030,6 +3061,7 @@ def test_error_stats_service_transport_auth_adc(transport_class): [ transports.ErrorStatsServiceGrpcTransport, transports.ErrorStatsServiceGrpcAsyncIOTransport, + transports.ErrorStatsServiceRestTransport, ], ) def test_error_stats_service_transport_auth_gdch_credentials(transport_class): @@ -2129,11 +3161,23 @@ def test_error_stats_service_grpc_transport_client_cert_source_for_mtls( ) +def test_error_stats_service_http_transport_client_cert_source_for_mtls(): + cred = ga_credentials.AnonymousCredentials() + with mock.patch( + "google.auth.transport.requests.AuthorizedSession.configure_mtls_channel" + ) as mock_configure_mtls_channel: + transports.ErrorStatsServiceRestTransport( + credentials=cred, client_cert_source_for_mtls=client_cert_source_callback + ) + mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) + + @pytest.mark.parametrize( "transport_name", [ "grpc", "grpc_asyncio", + "rest", ], ) def test_error_stats_service_host_no_port(transport_name): @@ -2144,7 +3188,11 @@ def test_error_stats_service_host_no_port(transport_name): ), transport=transport_name, ) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) @pytest.mark.parametrize( @@ -2152,6 +3200,7 @@ def test_error_stats_service_host_no_port(transport_name): [ "grpc", "grpc_asyncio", + "rest", ], ) def test_error_stats_service_host_with_port(transport_name): @@ -2162,7 +3211,39 @@ def test_error_stats_service_host_with_port(transport_name): ), transport=transport_name, ) - assert client.transport._host == ("clouderrorreporting.googleapis.com:8000") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:8000" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com:8000" + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_error_stats_service_client_transport_session_collision(transport_name): + creds1 = ga_credentials.AnonymousCredentials() + creds2 = ga_credentials.AnonymousCredentials() + client1 = ErrorStatsServiceClient( + credentials=creds1, + transport=transport_name, + ) + client2 = ErrorStatsServiceClient( + credentials=creds2, + transport=transport_name, + ) + session1 = client1.transport.list_group_stats._session + session2 = client2.transport.list_group_stats._session + assert session1 != session2 + session1 = client1.transport.list_events._session + session2 = client2.transport.list_events._session + assert session1 != session2 + session1 = client1.transport.delete_events._session + session2 = client2.transport.delete_events._session + assert session1 != session2 def test_error_stats_service_grpc_transport_channel(): @@ -2456,6 +3537,7 @@ async def test_transport_close_async(): def test_transport_close(): transports = { + "rest": "_session", "grpc": "_grpc_channel", } @@ -2473,6 +3555,7 @@ def test_transport_close(): def test_client_ctx(): transports = [ + "rest", "grpc", ] for transport in transports: diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 85eb398703e1..3a69144fcafa 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -24,10 +24,17 @@ import grpc from grpc.experimental import aio +from collections.abc import Iterable +from google.protobuf import json_format +import json import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule from proto.marshal.rules import wrappers +from requests import Response +from requests import Request, PreparedRequest +from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -103,6 +110,7 @@ def test__get_default_mtls_endpoint(): [ (ReportErrorsServiceClient, "grpc"), (ReportErrorsServiceAsyncClient, "grpc_asyncio"), + (ReportErrorsServiceClient, "rest"), ], ) def test_report_errors_service_client_from_service_account_info( @@ -118,7 +126,11 @@ def test_report_errors_service_client_from_service_account_info( assert client.transport._credentials == creds assert isinstance(client, client_class) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) @pytest.mark.parametrize( @@ -126,6 +138,7 @@ def test_report_errors_service_client_from_service_account_info( [ (transports.ReportErrorsServiceGrpcTransport, "grpc"), (transports.ReportErrorsServiceGrpcAsyncIOTransport, "grpc_asyncio"), + (transports.ReportErrorsServiceRestTransport, "rest"), ], ) def test_report_errors_service_client_service_account_always_use_jwt( @@ -151,6 +164,7 @@ def test_report_errors_service_client_service_account_always_use_jwt( [ (ReportErrorsServiceClient, "grpc"), (ReportErrorsServiceAsyncClient, "grpc_asyncio"), + (ReportErrorsServiceClient, "rest"), ], ) def test_report_errors_service_client_from_service_account_file( @@ -173,13 +187,18 @@ def test_report_errors_service_client_from_service_account_file( assert client.transport._credentials == creds assert isinstance(client, client_class) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) def test_report_errors_service_client_get_transport_class(): transport = ReportErrorsServiceClient.get_transport_class() available_transports = [ transports.ReportErrorsServiceGrpcTransport, + transports.ReportErrorsServiceRestTransport, ] assert transport in available_transports @@ -200,6 +219,11 @@ def test_report_errors_service_client_get_transport_class(): transports.ReportErrorsServiceGrpcAsyncIOTransport, "grpc_asyncio", ), + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceRestTransport, + "rest", + ), ], ) @mock.patch.object( @@ -355,6 +379,18 @@ def test_report_errors_service_client_client_options( "grpc_asyncio", "false", ), + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceRestTransport, + "rest", + "true", + ), + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceRestTransport, + "rest", + "false", + ), ], ) @mock.patch.object( @@ -558,6 +594,11 @@ def test_report_errors_service_client_get_mtls_endpoint_and_cert_source(client_c transports.ReportErrorsServiceGrpcAsyncIOTransport, "grpc_asyncio", ), + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceRestTransport, + "rest", + ), ], ) def test_report_errors_service_client_client_options_scopes( @@ -598,6 +639,12 @@ def test_report_errors_service_client_client_options_scopes( "grpc_asyncio", grpc_helpers_async, ), + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceRestTransport, + "rest", + None, + ), ], ) def test_report_errors_service_client_client_options_credentials_file( @@ -973,6 +1020,344 @@ async def test_report_error_event_flattened_error_async(): ) +@pytest.mark.parametrize( + "request_type", + [ + report_errors_service.ReportErrorEventRequest, + dict, + ], +) +def test_report_error_event_rest(request_type): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request_init["event"] = { + "event_time": {"seconds": 751, "nanos": 543}, + "service_context": { + "service": "service_value", + "version": "version_value", + "resource_type": "resource_type_value", + }, + "message": "message_value", + "context": { + "http_request": { + "method": "method_value", + "url": "url_value", + "user_agent": "user_agent_value", + "referrer": "referrer_value", + "response_status_code": 2156, + "remote_ip": "remote_ip_value", + }, + "user": "user_value", + "report_location": { + "file_path": "file_path_value", + "line_number": 1168, + "function_name": "function_name_value", + }, + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = report_errors_service.ReportErrorEventResponse() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = report_errors_service.ReportErrorEventResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.report_error_event(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, report_errors_service.ReportErrorEventResponse) + + +def test_report_error_event_rest_required_fields( + request_type=report_errors_service.ReportErrorEventRequest, +): + transport_class = transports.ReportErrorsServiceRestTransport + + request_init = {} + request_init["project_name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).report_error_event._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["projectName"] = "project_name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).report_error_event._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "projectName" in jsonified_request + assert jsonified_request["projectName"] == "project_name_value" + + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = report_errors_service.ReportErrorEventResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = report_errors_service.ReportErrorEventResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.report_error_event(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_report_error_event_rest_unset_required_fields(): + transport = transports.ReportErrorsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.report_error_event._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "projectName", + "event", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_report_error_event_rest_interceptors(null_interceptor): + transport = transports.ReportErrorsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ReportErrorsServiceRestInterceptor(), + ) + client = ReportErrorsServiceClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ReportErrorsServiceRestInterceptor, "post_report_error_event" + ) as post, mock.patch.object( + transports.ReportErrorsServiceRestInterceptor, "pre_report_error_event" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = report_errors_service.ReportErrorEventRequest.pb( + report_errors_service.ReportErrorEventRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + report_errors_service.ReportErrorEventResponse.to_json( + report_errors_service.ReportErrorEventResponse() + ) + ) + + request = report_errors_service.ReportErrorEventRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = report_errors_service.ReportErrorEventResponse() + + client.report_error_event( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_report_error_event_rest_bad_request( + transport: str = "rest", request_type=report_errors_service.ReportErrorEventRequest +): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request_init["event"] = { + "event_time": {"seconds": 751, "nanos": 543}, + "service_context": { + "service": "service_value", + "version": "version_value", + "resource_type": "resource_type_value", + }, + "message": "message_value", + "context": { + "http_request": { + "method": "method_value", + "url": "url_value", + "user_agent": "user_agent_value", + "referrer": "referrer_value", + "response_status_code": 2156, + "remote_ip": "remote_ip_value", + }, + "user": "user_value", + "report_location": { + "file_path": "file_path_value", + "line_number": 1168, + "function_name": "function_name_value", + }, + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.report_error_event(request) + + +def test_report_error_event_rest_flattened(): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = report_errors_service.ReportErrorEventResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"project_name": "projects/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project_name="project_name_value", + event=report_errors_service.ReportedErrorEvent( + event_time=timestamp_pb2.Timestamp(seconds=751) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = report_errors_service.ReportErrorEventResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.report_error_event(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1beta1/{project_name=projects/*}/events:report" + % client.transport._host, + args[1], + ) + + +def test_report_error_event_rest_flattened_error(transport: str = "rest"): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.report_error_event( + report_errors_service.ReportErrorEventRequest(), + project_name="project_name_value", + event=report_errors_service.ReportedErrorEvent( + event_time=timestamp_pb2.Timestamp(seconds=751) + ), + ) + + +def test_report_error_event_rest_error(): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + def test_credentials_transport_error(): # It is an error to provide credentials and a transport instance. transport = transports.ReportErrorsServiceGrpcTransport( @@ -1054,6 +1439,7 @@ def test_transport_get_channel(): [ transports.ReportErrorsServiceGrpcTransport, transports.ReportErrorsServiceGrpcAsyncIOTransport, + transports.ReportErrorsServiceRestTransport, ], ) def test_transport_adc(transport_class): @@ -1068,6 +1454,7 @@ def test_transport_adc(transport_class): "transport_name", [ "grpc", + "rest", ], ) def test_transport_kind(transport_name): @@ -1195,6 +1582,7 @@ def test_report_errors_service_transport_auth_adc(transport_class): [ transports.ReportErrorsServiceGrpcTransport, transports.ReportErrorsServiceGrpcAsyncIOTransport, + transports.ReportErrorsServiceRestTransport, ], ) def test_report_errors_service_transport_auth_gdch_credentials(transport_class): @@ -1294,11 +1682,23 @@ def test_report_errors_service_grpc_transport_client_cert_source_for_mtls( ) +def test_report_errors_service_http_transport_client_cert_source_for_mtls(): + cred = ga_credentials.AnonymousCredentials() + with mock.patch( + "google.auth.transport.requests.AuthorizedSession.configure_mtls_channel" + ) as mock_configure_mtls_channel: + transports.ReportErrorsServiceRestTransport( + credentials=cred, client_cert_source_for_mtls=client_cert_source_callback + ) + mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) + + @pytest.mark.parametrize( "transport_name", [ "grpc", "grpc_asyncio", + "rest", ], ) def test_report_errors_service_host_no_port(transport_name): @@ -1309,7 +1709,11 @@ def test_report_errors_service_host_no_port(transport_name): ), transport=transport_name, ) - assert client.transport._host == ("clouderrorreporting.googleapis.com:443") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com" + ) @pytest.mark.parametrize( @@ -1317,6 +1721,7 @@ def test_report_errors_service_host_no_port(transport_name): [ "grpc", "grpc_asyncio", + "rest", ], ) def test_report_errors_service_host_with_port(transport_name): @@ -1327,7 +1732,33 @@ def test_report_errors_service_host_with_port(transport_name): ), transport=transport_name, ) - assert client.transport._host == ("clouderrorreporting.googleapis.com:8000") + assert client.transport._host == ( + "clouderrorreporting.googleapis.com:8000" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://clouderrorreporting.googleapis.com:8000" + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_report_errors_service_client_transport_session_collision(transport_name): + creds1 = ga_credentials.AnonymousCredentials() + creds2 = ga_credentials.AnonymousCredentials() + client1 = ReportErrorsServiceClient( + credentials=creds1, + transport=transport_name, + ) + client2 = ReportErrorsServiceClient( + credentials=creds2, + transport=transport_name, + ) + session1 = client1.transport.report_error_event._session + session2 = client2.transport.report_error_event._session + assert session1 != session2 def test_report_errors_service_grpc_transport_channel(): @@ -1598,6 +2029,7 @@ async def test_transport_close_async(): def test_transport_close(): transports = { + "rest": "_session", "grpc": "_grpc_channel", } @@ -1615,6 +2047,7 @@ def test_transport_close(): def test_client_ctx(): transports = [ + "rest", "grpc", ] for transport in transports: From 07a08028f9e551782b58ed47d90f1291faa8129f Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 28 Feb 2023 18:43:50 -0500 Subject: [PATCH 398/467] chore(main): release 1.9.0 (#420) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../google/cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ...tadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 7017b7cfae14..44204dd04843 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.8.2" + ".": "1.9.0" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index cebcaae1813e..dcf9c0bd1d4f 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.9.0](https://github.com/googleapis/python-error-reporting/compare/v1.8.2...v1.9.0) (2023-02-28) + + +### Features + +* Enable "rest" transport in Python for services supporting numeric enums ([#418](https://github.com/googleapis/python-error-reporting/issues/418)) ([b2b9eab](https://github.com/googleapis/python-error-reporting/commit/b2b9eab649f413d7ad8a47fd660f9e2bcc32a820)) + ## [1.8.2](https://github.com/googleapis/python-error-reporting/compare/v1.8.1...v1.8.2) (2023-02-04) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index 9a1b07eac0ab..163d151126d8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.2" # {x-release-please-version} +__version__ = "1.9.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index 9a1b07eac0ab..163d151126d8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.2" # {x-release-please-version} +__version__ = "1.9.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..fd06ad9804e6 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.9.0" }, "snippets": [ { From 46e9a7b23b44830d5ad525fa960041f606a818ad Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 08:32:09 -0400 Subject: [PATCH 399/467] chore(deps): Update nox in .kokoro/requirements.in [autoapprove] (#421) Source-Link: https://github.com/googleapis/synthtool/commit/92006bb3cdc84677aa93c7f5235424ec2b157146 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:2e247c7bf5154df7f98cce087a20ca7605e236340c7d6d1a14447e5c06791bd6 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 2 +- .../.kokoro/requirements.in | 2 +- .../.kokoro/requirements.txt | 14 +++++--------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 5fc5daa31783..b8edda51cf46 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:8555f0e37e6261408f792bfd6635102d2da5ad73f8f09bcb24f25e6afb5fac97 + digest: sha256:2e247c7bf5154df7f98cce087a20ca7605e236340c7d6d1a14447e5c06791bd6 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.in b/packages/google-cloud-error-reporting/.kokoro/requirements.in index 882178ce6001..ec867d9fd65a 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.in +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.in @@ -5,6 +5,6 @@ typing-extensions twine wheel setuptools -nox +nox>=2022.11.21 # required to remove dependency on py charset-normalizer<3 click<8.1.0 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index fa99c12908f0..66a2172a76a8 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # # pip-compile --allow-unsafe --generate-hashes requirements.in # @@ -335,9 +335,9 @@ more-itertools==9.0.0 \ --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab # via jaraco-classes -nox==2022.8.7 \ - --hash=sha256:1b894940551dc5c389f9271d197ca5d655d40bdc6ccf93ed6880e4042760a34b \ - --hash=sha256:96cca88779e08282a699d672258ec01eb7c792d35bbbf538c723172bce23212c +nox==2022.11.21 \ + --hash=sha256:0e41a990e290e274cb205a976c4c97ee3c5234441a8132c8c3fd9ea3c22149eb \ + --hash=sha256:e21c31de0711d1274ca585a2c5fde36b1aa962005ba8e9322bf5eeed16dcd684 # via -r requirements.in packaging==21.3 \ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ @@ -380,10 +380,6 @@ protobuf==3.20.3 \ # gcp-docuploader # gcp-releasetool # google-api-core -py==1.11.0 \ - --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ - --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 - # via nox pyasn1==0.4.8 \ --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba From 62afa7c89670973eb3d76690b330cb895e68f6f5 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 09:28:07 -0400 Subject: [PATCH 400/467] docs: Fix formatting of request arg in docstring (#422) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: Fix formatting of request arg in docstring chore: Update gapic-generator-python to v1.9.1 PiperOrigin-RevId: 518604533 Source-Link: https://github.com/googleapis/googleapis/commit/8a085aeddfa010af5bcef090827aac5255383d7e Source-Link: https://github.com/googleapis/googleapis-gen/commit/b2ab4b0a0ae2907e812c209198a74e0898afcb04 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYjJhYjRiMGEwYWUyOTA3ZTgxMmMyMDkxOThhNzRlMDg5OGFmY2IwNCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../services/error_group_service/transports/rest.py | 2 -- .../services/error_stats_service/async_client.py | 3 +-- .../services/error_stats_service/client.py | 3 +-- .../services/error_stats_service/transports/rest.py | 1 - .../services/report_errors_service/async_client.py | 4 ++-- .../services/report_errors_service/client.py | 4 ++-- .../services/report_errors_service/transports/rest.py | 1 - ..._metadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- 8 files changed, 7 insertions(+), 13 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py index a85ea6ea781d..dcd0aefa6610 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -259,7 +259,6 @@ def __call__( request (~.error_group_service.GetGroupRequest): The request object. A request to return an individual group. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -349,7 +348,6 @@ def __call__( request (~.error_group_service.UpdateGroupRequest): The request object. A request to replace the existing data for the given group. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 1b45e394088a..6fb088572084 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -261,8 +261,7 @@ async def sample_list_group_stats(): Args: request (Optional[Union[google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest, dict]]): - The request object. Specifies a set of `ErrorGroupStats` - to return. + The request object. Specifies a set of ``ErrorGroupStats`` to return. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform project. Written as ``projects/{projectID}`` or diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index ff3799e42999..629a6ea60148 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -483,8 +483,7 @@ def sample_list_group_stats(): Args: request (Union[google.cloud.errorreporting_v1beta1.types.ListGroupStatsRequest, dict]): - The request object. Specifies a set of `ErrorGroupStats` - to return. + The request object. Specifies a set of ``ErrorGroupStats`` to return. project_name (str): Required. The resource name of the Google Cloud Platform project. Written as ``projects/{projectID}`` or diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py index 779f59c56663..a32ef79c6a72 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -384,7 +384,6 @@ def __call__( request (~.error_stats_service.ListEventsRequest): The request object. Specifies a set of error events to return. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 7ccd15ec184d..bbaf19b824e4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -269,8 +269,8 @@ async def sample_report_error_event(): Args: request (Optional[Union[google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest, dict]]): - The request object. A request for reporting an - individual error event. + The request object. A request for reporting an individual + error event. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform project. Written as ``projects/{projectId}``, where diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index f2d057b083d1..810b2abab173 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -477,8 +477,8 @@ def sample_report_error_event(): Args: request (Union[google.cloud.errorreporting_v1beta1.types.ReportErrorEventRequest, dict]): - The request object. A request for reporting an - individual error event. + The request object. A request for reporting an individual + error event. project_name (str): Required. The resource name of the Google Cloud Platform project. Written as ``projects/{projectId}``, where diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py index cf2386167899..dd460cf21b41 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py @@ -233,7 +233,6 @@ def __call__( request (~.report_errors_service.ReportErrorEventRequest): The request object. A request for reporting an individual error event. - retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fd06ad9804e6..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.9.0" + "version": "0.1.0" }, "snippets": [ { From f21265aa1b3791db3bc7d40cbc094f2b85ad1a87 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 11:57:53 -0400 Subject: [PATCH 401/467] chore(main): release 1.9.1 (#423) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../google/cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ...tadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 44204dd04843..627fb5f14e88 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.9.0" + ".": "1.9.1" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index dcf9c0bd1d4f..c8d4b09fd896 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.9.1](https://github.com/googleapis/python-error-reporting/compare/v1.9.0...v1.9.1) (2023-03-23) + + +### Documentation + +* Fix formatting of request arg in docstring ([#422](https://github.com/googleapis/python-error-reporting/issues/422)) ([561dc39](https://github.com/googleapis/python-error-reporting/commit/561dc395302f7989820db79f1c82aad04b7f6f7c)) + ## [1.9.0](https://github.com/googleapis/python-error-reporting/compare/v1.8.2...v1.9.0) (2023-02-28) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index 163d151126d8..13f1b4a785d4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.9.0" # {x-release-please-version} +__version__ = "1.9.1" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index 163d151126d8..13f1b4a785d4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.9.0" # {x-release-please-version} +__version__ = "1.9.1" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..bf184d5a1cd0 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.9.1" }, "snippets": [ { From e58699d33bea902a8b2c8ffcef6eaaad53c0f2aa Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 25 May 2023 12:39:35 -0400 Subject: [PATCH 402/467] build(deps): bump requests from 2.28.1 to 2.31.0 in /synthtool/gcp/templates/python_library/.kokoro (#427) Source-Link: https://github.com/googleapis/synthtool/commit/30bd01b4ab78bf1b2a425816e15b3e7e090993dd Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:9bc5fa3b62b091f60614c08a7fb4fd1d3e1678e326f34dd66ce1eefb5dc3267b Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 3 ++- .../google-cloud-error-reporting/.kokoro/requirements.txt | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index b8edda51cf46..32b3c486591a 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,4 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:2e247c7bf5154df7f98cce087a20ca7605e236340c7d6d1a14447e5c06791bd6 + digest: sha256:9bc5fa3b62b091f60614c08a7fb4fd1d3e1678e326f34dd66ce1eefb5dc3267b +# created: 2023-05-25T14:56:16.294623272Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 66a2172a76a8..3b8d7ee81848 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -419,9 +419,9 @@ readme-renderer==37.3 \ --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 # via twine -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via # gcp-releasetool # google-api-core From 8bdeaccd59dcb1645d9d46deaf3a9e5fc8135591 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 3 Jun 2023 19:15:26 -0400 Subject: [PATCH 403/467] build(deps): bump cryptography from 39.0.1 to 41.0.0 in /synthtool/gcp/templates/python_library/.kokoro (#429) Source-Link: https://github.com/googleapis/synthtool/commit/d0f51a0c2a9a6bcca86911eabea9e484baadf64b Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:240b5bcc2bafd450912d2da2be15e62bc6de2cf839823ae4bf94d4f392b451dc Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/requirements.txt | 42 +++++++++---------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 32b3c486591a..02a4dedced74 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:9bc5fa3b62b091f60614c08a7fb4fd1d3e1678e326f34dd66ce1eefb5dc3267b -# created: 2023-05-25T14:56:16.294623272Z + digest: sha256:240b5bcc2bafd450912d2da2be15e62bc6de2cf839823ae4bf94d4f392b451dc +# created: 2023-06-03T21:25:37.968717478Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 3b8d7ee81848..c7929db6d152 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -113,28 +113,26 @@ commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 # via rich -cryptography==39.0.1 \ - --hash=sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4 \ - --hash=sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f \ - --hash=sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502 \ - --hash=sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41 \ - --hash=sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965 \ - --hash=sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e \ - --hash=sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc \ - --hash=sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad \ - --hash=sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505 \ - --hash=sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388 \ - --hash=sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6 \ - --hash=sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2 \ - --hash=sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac \ - --hash=sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695 \ - --hash=sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6 \ - --hash=sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336 \ - --hash=sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0 \ - --hash=sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c \ - --hash=sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106 \ - --hash=sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a \ - --hash=sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8 +cryptography==41.0.0 \ + --hash=sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55 \ + --hash=sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895 \ + --hash=sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be \ + --hash=sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928 \ + --hash=sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d \ + --hash=sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8 \ + --hash=sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237 \ + --hash=sha256:5c1f7293c31ebc72163a9a0df246f890d65f66b4a40d9ec80081969ba8c78cc9 \ + --hash=sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78 \ + --hash=sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d \ + --hash=sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0 \ + --hash=sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46 \ + --hash=sha256:88ff107f211ea696455ea8d911389f6d2b276aabf3231bf72c8853d22db755c5 \ + --hash=sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4 \ + --hash=sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d \ + --hash=sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75 \ + --hash=sha256:b846d59a8d5a9ba87e2c3d757ca019fa576793e8758174d3868aecb88d6fc8eb \ + --hash=sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2 \ + --hash=sha256:f5d0bf9b252f30a31664b6f64432b4730bb7038339bd18b1fafe129cfc2be9be # via # gcp-releasetool # secretstorage From 1a5b675cc243145ead925b3e795df2494ecbf17d Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 28 Jun 2023 11:53:57 -0400 Subject: [PATCH 404/467] chore: remove pinned Sphinx version [autoapprove] (#431) Source-Link: https://github.com/googleapis/synthtool/commit/909573ce9da2819eeb835909c795d29aea5c724e Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:ddf4551385d566771dc713090feb7b4c1164fb8a698fe52bbe7670b24236565b Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- packages/google-cloud-error-reporting/noxfile.py | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 02a4dedced74..1b3cb6c52663 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:240b5bcc2bafd450912d2da2be15e62bc6de2cf839823ae4bf94d4f392b451dc -# created: 2023-06-03T21:25:37.968717478Z + digest: sha256:ddf4551385d566771dc713090feb7b4c1164fb8a698fe52bbe7670b24236565b +# created: 2023-06-27T13:04:21.96690344Z diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index e9649dc6c86f..1fa004833747 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -304,10 +304,9 @@ def docfx(session): session.install("-e", ".") session.install( - "sphinx==4.0.1", + "gcp-sphinx-docfx-yaml", "alabaster", "recommonmark", - "gcp-sphinx-docfx-yaml", ) shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) From 9217c755cd7680c5df1fadb9bf79436eafff8d07 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:30:14 -0400 Subject: [PATCH 405/467] chore: store artifacts in placer (#433) Source-Link: https://github.com/googleapis/synthtool/commit/cb960373d12d20f8dc38beee2bf884d49627165e Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:2d816f26f728ac8b24248741e7d4c461c09764ef9f7be3684d557c9632e46dbd Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 ++-- .../.kokoro/release/common.cfg | 9 +++++++++ packages/google-cloud-error-reporting/noxfile.py | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 1b3cb6c52663..98994f474104 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:ddf4551385d566771dc713090feb7b4c1164fb8a698fe52bbe7670b24236565b -# created: 2023-06-27T13:04:21.96690344Z + digest: sha256:2d816f26f728ac8b24248741e7d4c461c09764ef9f7be3684d557c9632e46dbd +# created: 2023-06-28T17:03:33.371210701Z diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg index 5e979115e711..5c1ce9b63993 100644 --- a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg @@ -39,6 +39,15 @@ env_vars: { value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" } +# Store the packages we uploaded to PyPI. That way, we have a record of exactly +# what we published, which we can use to generate SBOMs and attestations. +action { + define_artifacts { + regex: "github/python-error-reporting/**/*.tar.gz" + strip_prefix: "github/python-error-reporting" + } +} + ############################################# # this section merged from .kokoro/common_env_vars.cfg using owlbot.py diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 1fa004833747..715640ffda0d 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -378,6 +378,7 @@ def prerelease_deps(session): "grpcio!=1.52.0rc1", "grpcio-status", "google-api-core", + "google-auth", "proto-plus", "google-cloud-testutils", # dependencies of google-cloud-testutils" @@ -390,7 +391,6 @@ def prerelease_deps(session): # Remaining dependencies other_deps = [ "requests", - "google-auth", ] session.install(*other_deps) From 641002b7cf696478d284746776451bb37de9957a Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 4 Jul 2023 13:43:45 -0400 Subject: [PATCH 406/467] fix: Add async context manager return types (#434) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Add async context manager return types chore: Mock return_value should not populate oneof message fields chore: Support snippet generation for services that only support REST transport chore: Update gapic-generator-python to v1.11.0 PiperOrigin-RevId: 545430278 Source-Link: https://github.com/googleapis/googleapis/commit/601b5326107eeb74800b426d1f9933faa233258a Source-Link: https://github.com/googleapis/googleapis-gen/commit/b3f18d0f6560a855022fd058865e7620479d7af9 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYjNmMThkMGY2NTYwYTg1NTAyMmZkMDU4ODY1ZTc2MjA0NzlkN2FmOSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../services/error_group_service/async_client.py | 2 +- .../services/error_stats_service/async_client.py | 2 +- .../services/report_errors_service/async_client.py | 2 +- ..._google.devtools.clouderrorreporting.v1beta1.json | 2 +- .../test_error_stats_service.py | 12 ++++++++---- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index a8f33bee12d2..bdc59765956d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -427,7 +427,7 @@ async def sample_update_group(): # Done; return the response. return response - async def __aenter__(self): + async def __aenter__(self) -> "ErrorGroupServiceAsyncClient": return self async def __aexit__(self, exc_type, exc, tb): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 6fb088572084..9bbfbcfdab80 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -597,7 +597,7 @@ async def sample_delete_events(): # Done; return the response. return response - async def __aenter__(self): + async def __aenter__(self) -> "ErrorStatsServiceAsyncClient": return self async def __aexit__(self, exc_type, exc, tb): diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index bbaf19b824e4..cfcad25b5321 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -348,7 +348,7 @@ async def sample_report_error_event(): # Done; return the response. return response - async def __aenter__(self): + async def __aenter__(self) -> "ReportErrorsServiceAsyncClient": return self async def __aexit__(self, exc_type, exc, tb): diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index bf184d5a1cd0..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.9.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 4ea472017440..76143e091b89 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1178,9 +1178,11 @@ async def test_list_group_stats_async_pages(): RuntimeError, ) pages = [] - async for page_ in ( + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch await client.list_group_stats(request={}) - ).pages: # pragma: no branch + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -1608,9 +1610,11 @@ async def test_list_events_async_pages(): RuntimeError, ) pages = [] - async for page_ in ( + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch await client.list_events(request={}) - ).pages: # pragma: no branch + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token From b9337aed1f9b9da1eebcd4218f0a5214ef86c3a9 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Wed, 5 Jul 2023 11:41:42 -0400 Subject: [PATCH 407/467] chore(main): release 1.9.2 (#435) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../google/cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ...tadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 627fb5f14e88..50fc4585632d 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.9.1" + ".": "1.9.2" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index c8d4b09fd896..84fe7f1dd068 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.9.2](https://github.com/googleapis/python-error-reporting/compare/v1.9.1...v1.9.2) (2023-07-04) + + +### Bug Fixes + +* Add async context manager return types ([#434](https://github.com/googleapis/python-error-reporting/issues/434)) ([319fa54](https://github.com/googleapis/python-error-reporting/commit/319fa54a19cb9aca3a079439fd7c6bd2c3163f71)) + ## [1.9.1](https://github.com/googleapis/python-error-reporting/compare/v1.9.0...v1.9.1) (2023-03-23) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index 13f1b4a785d4..ab4e0f59eb91 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.9.1" # {x-release-please-version} +__version__ = "1.9.2" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index 13f1b4a785d4..ab4e0f59eb91 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.9.1" # {x-release-please-version} +__version__ = "1.9.2" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..631b8bceae0d 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.9.2" }, "snippets": [ { From 570b5e4e284931622c36d36a3f7c234bd00a83f7 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 10 Jul 2023 09:12:57 -0400 Subject: [PATCH 408/467] chore: Update gapic-generator-python to v1.11.2 (#436) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.11.2 PiperOrigin-RevId: 546510849 Source-Link: https://github.com/googleapis/googleapis/commit/736073ad9a9763a170eceaaa54519bcc0ea55a5e Source-Link: https://github.com/googleapis/googleapis-gen/commit/deb64e8ec19d141e31089fe932b3a997ad541c4d Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZGViNjRlOGVjMTlkMTQxZTMxMDg5ZmU5MzJiM2E5OTdhZDU0MWM0ZCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../google/cloud/errorreporting_v1beta1/__init__.py | 2 +- .../google/cloud/errorreporting_v1beta1/services/__init__.py | 2 +- .../services/error_group_service/__init__.py | 2 +- .../services/error_group_service/async_client.py | 2 +- .../services/error_group_service/client.py | 2 +- .../services/error_group_service/transports/__init__.py | 2 +- .../services/error_group_service/transports/base.py | 2 +- .../services/error_group_service/transports/grpc.py | 2 +- .../services/error_group_service/transports/grpc_asyncio.py | 2 +- .../services/error_group_service/transports/rest.py | 2 +- .../services/error_stats_service/__init__.py | 2 +- .../services/error_stats_service/async_client.py | 2 +- .../services/error_stats_service/client.py | 2 +- .../services/error_stats_service/pagers.py | 2 +- .../services/error_stats_service/transports/__init__.py | 2 +- .../services/error_stats_service/transports/base.py | 2 +- .../services/error_stats_service/transports/grpc.py | 2 +- .../services/error_stats_service/transports/grpc_asyncio.py | 2 +- .../services/error_stats_service/transports/rest.py | 2 +- .../services/report_errors_service/__init__.py | 2 +- .../services/report_errors_service/async_client.py | 2 +- .../services/report_errors_service/client.py | 2 +- .../services/report_errors_service/transports/__init__.py | 2 +- .../services/report_errors_service/transports/base.py | 2 +- .../services/report_errors_service/transports/grpc.py | 2 +- .../services/report_errors_service/transports/grpc_asyncio.py | 2 +- .../services/report_errors_service/transports/rest.py | 2 +- .../google/cloud/errorreporting_v1beta1/types/__init__.py | 2 +- .../google/cloud/errorreporting_v1beta1/types/common.py | 2 +- .../cloud/errorreporting_v1beta1/types/error_group_service.py | 2 +- .../cloud/errorreporting_v1beta1/types/error_stats_service.py | 2 +- .../cloud/errorreporting_v1beta1/types/report_errors_service.py | 2 +- ...ing_v1beta1_generated_error_group_service_get_group_async.py | 2 +- ...ting_v1beta1_generated_error_group_service_get_group_sync.py | 2 +- ..._v1beta1_generated_error_group_service_update_group_async.py | 2 +- ...g_v1beta1_generated_error_group_service_update_group_sync.py | 2 +- ...v1beta1_generated_error_stats_service_delete_events_async.py | 2 +- ..._v1beta1_generated_error_stats_service_delete_events_sync.py | 2 +- ...g_v1beta1_generated_error_stats_service_list_events_async.py | 2 +- ...ng_v1beta1_generated_error_stats_service_list_events_sync.py | 2 +- ...eta1_generated_error_stats_service_list_group_stats_async.py | 2 +- ...beta1_generated_error_stats_service_list_group_stats_sync.py | 2 +- ..._generated_report_errors_service_report_error_event_async.py | 2 +- ...1_generated_report_errors_service_report_error_event_sync.py | 2 +- ...et_metadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- .../scripts/fixup_errorreporting_v1beta1_keywords.py | 2 +- packages/google-cloud-error-reporting/tests/__init__.py | 2 +- packages/google-cloud-error-reporting/tests/unit/__init__.py | 2 +- .../google-cloud-error-reporting/tests/unit/gapic/__init__.py | 2 +- .../tests/unit/gapic/errorreporting_v1beta1/__init__.py | 2 +- .../gapic/errorreporting_v1beta1/test_error_group_service.py | 2 +- .../gapic/errorreporting_v1beta1/test_error_stats_service.py | 2 +- .../gapic/errorreporting_v1beta1/test_report_errors_service.py | 2 +- 53 files changed, 53 insertions(+), 53 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index 32bd5db927fb..e143641af905 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py index e8e1c3845db5..89a37dc92c5a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py index 62563e794b58..96ac56f8c6b4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index bdc59765956d..0d91c2fdb3bd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 07f0aeada1db..34b0119b5724 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py index b6d0629c6ca7..91a3752f9228 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 665ee116fcd3..3cbc64167a9e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 4145ab7b3591..d97d8ad83170 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 694972980f52..0a1d829b407e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py index dcd0aefa6610..71c259c256a4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py index b402e01ab5a0..3eda02c73548 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 9bbfbcfdab80..bb758420dcab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 629a6ea60148..75722883cf63 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index 9fe297c6479c..9170d15987f1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py index b1b560f30ede..f8a5fe874f97 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index a2546b27ad26..3899648bf1a5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 21e0d0c2d5f2..4e751ed4bd0f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index b51a2ccbdc7f..b9b1be5f464d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py index a32ef79c6a72..b32a340e5780 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py index 5efbd9374670..9b8290ad7806 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index cfcad25b5321..929bac2cdfc0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 810b2abab173..60a9b15b8bb3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py index 289d0ff1f489..d4d23aaf275d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 77dc674a2282..54a7eda6d111 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 0ff8e43525ab..e81bad5cbd83 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index eea7a486703c..d779e686e0e0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py index dd460cf21b41..3a9590033381 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py index fed4105bd1af..9b575327ecae 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 43ac4ba2cf92..c8fc2a1b4b75 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index 63ecabf94491..daecedde3a0a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index afb2668a266e..165d800bed15 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index a3087c1adf2d..7d6b5eeefd2c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py index b4a207adb2d6..702f5cda3568 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py index e4f473deed48..074978d97ba0 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py index 6ee4a823766a..8b3452989a1c 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py index 4f8f6bca91f7..7c38b173ca1a 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py index bc8eb7be7aa6..a1cd90bf431d 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py index c03edfb3bc54..f8c08c1bf1a0 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py index 0cd82da6f5c3..1ec25ba7b8ba 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py index dbed18fa9e4c..81c7cc4c2f2b 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py index c78b943fe80f..60e47686fe61 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py index a90ceaef123b..16d09dc44a7c 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py index 400a567a83ac..ba5907716b76 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py index 2260dd1bfd6a..c1fb7124450a 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index 631b8bceae0d..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.9.2" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py index db88785ca667..813f0be69086 100644 --- a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py +++ b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py @@ -1,6 +1,6 @@ #! /usr/bin/env python3 # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/tests/__init__.py b/packages/google-cloud-error-reporting/tests/__init__.py index e8e1c3845db5..89a37dc92c5a 100644 --- a/packages/google-cloud-error-reporting/tests/__init__.py +++ b/packages/google-cloud-error-reporting/tests/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/tests/unit/__init__.py b/packages/google-cloud-error-reporting/tests/unit/__init__.py index e8e1c3845db5..89a37dc92c5a 100644 --- a/packages/google-cloud-error-reporting/tests/unit/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py index e8e1c3845db5..89a37dc92c5a 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py index e8e1c3845db5..89a37dc92c5a 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 90643d98fab0..8f4bc53da8c0 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 76143e091b89..d2e77d24221b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 3a69144fcafa..9824fea42ba5 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# 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. From 47f130043cd2c8e19db3773de4f009ec655f6fd6 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 14 Jul 2023 10:19:04 -0400 Subject: [PATCH 409/467] chore: Update gapic-generator-python to v1.11.4 (#437) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.11.4 PiperOrigin-RevId: 547897126 Source-Link: https://github.com/googleapis/googleapis/commit/c09c75e087d8f9a2d466b4aaad7dd2926b5ead5a Source-Link: https://github.com/googleapis/googleapis-gen/commit/45e0ec4343517cd0aa66b5ca64232a1802c2f945 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDVlMGVjNDM0MzUxN2NkMGFhNjZiNWNhNjQyMzJhMTgwMmMyZjk0NSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../google/cloud/errorreporting_v1beta1/types/common.py | 1 + .../cloud/errorreporting_v1beta1/types/error_stats_service.py | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index c8fc2a1b4b75..947b89a3156c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -189,6 +189,7 @@ class ServiceContext(proto.Message): resource_type (str): Type of the MonitoredResource. List of possible values: + https://cloud.google.com/monitoring/api/resources Value is set automatically for incoming errors and must not be set when reporting errors. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index 165d800bed15..cb0a5091c6a7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -264,6 +264,7 @@ class ErrorGroupStats(proto.Message): Approximate number of occurrences over time. Timed counts returned by ListGroups are guaranteed to be: + - Inside the requested time interval - Non-overlapping, and - Ordered by ascending time. From 7ba3904ec1c78bf76016d4855cafecfa459eaaa3 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 17 Jul 2023 11:52:50 -0400 Subject: [PATCH 410/467] build(deps): [autoapprove] bump cryptography from 41.0.0 to 41.0.2 (#439) Source-Link: https://github.com/googleapis/synthtool/commit/d6103f4a3540ba60f633a9e25c37ec5fe7e6286d Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:39f0f3f2be02ef036e297e376fe3b6256775576da8a6ccb1d5eeb80f4c8bf8fb Co-authored-by: Owl Bot --- packages/google-cloud-error-reporting/.flake8 | 2 +- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/build.sh | 2 +- .../.kokoro/docker/docs/Dockerfile | 2 +- .../.kokoro/populate-secrets.sh | 2 +- .../.kokoro/publish-docs.sh | 2 +- .../.kokoro/release.sh | 2 +- .../.kokoro/requirements.txt | 44 ++++++++++--------- .../.kokoro/test-samples-against-head.sh | 2 +- .../.kokoro/test-samples-impl.sh | 2 +- .../.kokoro/test-samples.sh | 2 +- .../.kokoro/trampoline.sh | 2 +- .../.kokoro/trampoline_v2.sh | 2 +- .../.pre-commit-config.yaml | 2 +- .../.trampolinerc | 4 +- .../google-cloud-error-reporting/MANIFEST.in | 2 +- .../google-cloud-error-reporting/README.rst | 27 ++++++------ .../google-cloud-error-reporting/docs/conf.py | 2 +- .../google-cloud-error-reporting/noxfile.py | 3 +- .../scripts/decrypt-secrets.sh | 2 +- .../scripts/readme-gen/readme_gen.py | 18 ++++---- .../google-cloud-error-reporting/setup.cfg | 2 +- 22 files changed, 68 insertions(+), 64 deletions(-) diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index 2e438749863d..87f6e408c47d 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2020 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 98994f474104..ae4a522b9e5f 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:2d816f26f728ac8b24248741e7d4c461c09764ef9f7be3684d557c9632e46dbd -# created: 2023-06-28T17:03:33.371210701Z + digest: sha256:39f0f3f2be02ef036e297e376fe3b6256775576da8a6ccb1d5eeb80f4c8bf8fb +# created: 2023-07-17T15:20:13.819193964Z diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh index 165d0e0884ca..77234eac0d94 100755 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2018 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile index f8137d0ae497..8e39a2cc438d 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh b/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh index f52514257ef0..6f3972140e80 100755 --- a/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh +++ b/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC. +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh index 1c4d62370042..9eafe0be3bba 100755 --- a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh +++ b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh index 4a5ad17a40ed..716547f1e5ff 100755 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index c7929db6d152..67d70a110897 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -113,26 +113,30 @@ commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 # via rich -cryptography==41.0.0 \ - --hash=sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55 \ - --hash=sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895 \ - --hash=sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be \ - --hash=sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928 \ - --hash=sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d \ - --hash=sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8 \ - --hash=sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237 \ - --hash=sha256:5c1f7293c31ebc72163a9a0df246f890d65f66b4a40d9ec80081969ba8c78cc9 \ - --hash=sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78 \ - --hash=sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d \ - --hash=sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0 \ - --hash=sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46 \ - --hash=sha256:88ff107f211ea696455ea8d911389f6d2b276aabf3231bf72c8853d22db755c5 \ - --hash=sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4 \ - --hash=sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d \ - --hash=sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75 \ - --hash=sha256:b846d59a8d5a9ba87e2c3d757ca019fa576793e8758174d3868aecb88d6fc8eb \ - --hash=sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2 \ - --hash=sha256:f5d0bf9b252f30a31664b6f64432b4730bb7038339bd18b1fafe129cfc2be9be +cryptography==41.0.2 \ + --hash=sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711 \ + --hash=sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7 \ + --hash=sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd \ + --hash=sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e \ + --hash=sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58 \ + --hash=sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0 \ + --hash=sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d \ + --hash=sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83 \ + --hash=sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831 \ + --hash=sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766 \ + --hash=sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b \ + --hash=sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c \ + --hash=sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182 \ + --hash=sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f \ + --hash=sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa \ + --hash=sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4 \ + --hash=sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a \ + --hash=sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2 \ + --hash=sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76 \ + --hash=sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5 \ + --hash=sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee \ + --hash=sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f \ + --hash=sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14 # via # gcp-releasetool # secretstorage diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh index ba3a707b040c..63ac41dfae1d 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh index 2c6500cae0b9..5a0f5fab6a89 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2021 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh index 11c042d342d7..50b35a48c190 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh index f39236e943a8..d85b1f267693 100755 --- a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh +++ b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2017 Google Inc. +# 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. diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh index 4af6cdc26dbc..59a7cf3a9373 100755 --- a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh +++ b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2020 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 5405cc8ff1f3..9e3898fd1c12 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -# Copyright 2021 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/.trampolinerc b/packages/google-cloud-error-reporting/.trampolinerc index 0eee72ab62aa..a7dfeb42c6d0 100644 --- a/packages/google-cloud-error-reporting/.trampolinerc +++ b/packages/google-cloud-error-reporting/.trampolinerc @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# 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. @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Template for .trampolinerc - # Add required env vars here. required_envvars+=( ) diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index e783f4c6209b..e0a66705318e 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2020 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 46fa4e0c3aca..83ec17240b39 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -36,21 +36,24 @@ In order to use this library, you first need to go through the following steps: Installation ~~~~~~~~~~~~ -Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to -create isolated Python environments. The basic problem it addresses is one of -dependencies and versions, and indirectly permissions. +Install this library in a virtual environment using `venv`_. `venv`_ is a tool that +creates isolated Python environments. These isolated environments can have separate +versions of Python packages, which allows you to isolate one project's dependencies +from the dependencies of other projects. -With `virtualenv`_, it's possible to install this library without needing system +With `venv`_, it's possible to install this library without needing system install permissions, and without clashing with the installed system dependencies. -.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ +.. _`venv`: https://docs.python.org/3/library/venv.html Code samples and snippets ~~~~~~~~~~~~~~~~~~~~~~~~~ -Code samples and snippets live in the `samples/` folder. +Code samples and snippets live in the `samples/`_ folder. + +.. _samples/: https://github.com/googleapis/python-error-reporting/tree/main/samples Supported Python Versions @@ -77,10 +80,9 @@ Mac/Linux .. code-block:: console - pip install virtualenv - virtualenv + python3 -m venv source /bin/activate - /bin/pip install google-cloud-error-reporting + pip install google-cloud-error-reporting Windows @@ -88,10 +90,9 @@ Windows .. code-block:: console - pip install virtualenv - virtualenv - \Scripts\activate - \Scripts\pip.exe install google-cloud-error-reporting + py -m venv + .\\Scripts\activate + pip install google-cloud-error-reporting Next Steps ~~~~~~~~~~ diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index c8f4857a64ce..99304e78c757 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2021 Google LLC +# 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. diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 715640ffda0d..5ff54976a091 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2018 Google LLC +# 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. @@ -399,6 +399,7 @@ def prerelease_deps(session): "python", "-c", "import google.protobuf; print(google.protobuf.__version__)" ) session.run("python", "-c", "import grpc; print(grpc.__version__)") + session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") diff --git a/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh b/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh index 21f6d2a26d90..0018b421ddf8 100755 --- a/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh +++ b/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2015 Google Inc. All rights reserved. +# Copyright 2023 Google LLC All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py b/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py index 91b59676bfc7..1acc119835b5 100644 --- a/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2016 Google Inc +# 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. @@ -33,17 +33,17 @@ autoescape=True, ) -README_TMPL = jinja_env.get_template('README.tmpl.rst') +README_TMPL = jinja_env.get_template("README.tmpl.rst") def get_help(file): - return subprocess.check_output(['python', file, '--help']).decode() + return subprocess.check_output(["python", file, "--help"]).decode() def main(): parser = argparse.ArgumentParser() - parser.add_argument('source') - parser.add_argument('--destination', default='README.rst') + parser.add_argument("source") + parser.add_argument("--destination", default="README.rst") args = parser.parse_args() @@ -51,9 +51,9 @@ def main(): root = os.path.dirname(source) destination = os.path.join(root, args.destination) - jinja_env.globals['get_help'] = get_help + jinja_env.globals["get_help"] = get_help - with io.open(source, 'r') as f: + with io.open(source, "r") as f: config = yaml.load(f) # This allows get_help to execute in the right directory. @@ -61,9 +61,9 @@ def main(): output = README_TMPL.render(config) - with io.open(destination, 'w') as f: + with io.open(destination, "w") as f: f.write(output) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/packages/google-cloud-error-reporting/setup.cfg b/packages/google-cloud-error-reporting/setup.cfg index c3a2b39f6528..052350089505 100644 --- a/packages/google-cloud-error-reporting/setup.cfg +++ b/packages/google-cloud-error-reporting/setup.cfg @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2020 Google LLC +# 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. From 8676558ef41b0aa09d789d024baf5f223ae35dce Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 21 Jul 2023 10:17:53 -0400 Subject: [PATCH 411/467] build(deps): [autoapprove] bump pygments from 2.13.0 to 2.15.0 (#441) Source-Link: https://github.com/googleapis/synthtool/commit/eaef28efd179e6eeb9f4e9bf697530d074a6f3b9 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:f8ca7655fa8a449cadcabcbce4054f593dcbae7aeeab34aa3fcc8b5cf7a93c9e Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../google-cloud-error-reporting/.kokoro/requirements.txt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index ae4a522b9e5f..17c21d96d654 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:39f0f3f2be02ef036e297e376fe3b6256775576da8a6ccb1d5eeb80f4c8bf8fb -# created: 2023-07-17T15:20:13.819193964Z + digest: sha256:f8ca7655fa8a449cadcabcbce4054f593dcbae7aeeab34aa3fcc8b5cf7a93c9e +# created: 2023-07-21T02:12:46.49799314Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 67d70a110897..b563eb284459 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -396,9 +396,9 @@ pycparser==2.21 \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 # via cffi -pygments==2.13.0 \ - --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 \ - --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 +pygments==2.15.0 \ + --hash=sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094 \ + --hash=sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500 # via # readme-renderer # rich From c26b2dfca448034b3e741aa507002b32d482be50 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 27 Jul 2023 05:48:01 -0400 Subject: [PATCH 412/467] build(deps): [autoapprove] bump certifi from 2022.12.7 to 2023.7.22 (#443) Source-Link: https://github.com/googleapis/synthtool/commit/395d53adeeacfca00b73abf197f65f3c17c8f1e9 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:6c1cbc75c74b8bdd71dada2fa1677e9d6d78a889e9a70ee75b93d1d0543f96e1 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../google-cloud-error-reporting/.kokoro/requirements.txt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 17c21d96d654..0ddd0e4d1873 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:f8ca7655fa8a449cadcabcbce4054f593dcbae7aeeab34aa3fcc8b5cf7a93c9e -# created: 2023-07-21T02:12:46.49799314Z + digest: sha256:6c1cbc75c74b8bdd71dada2fa1677e9d6d78a889e9a70ee75b93d1d0543f96e1 +# created: 2023-07-25T21:01:10.396410762Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index b563eb284459..76d9bba0f7d0 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -20,9 +20,9 @@ cachetools==5.2.0 \ --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \ --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db # via google-auth -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 # via requests cffi==1.15.1 \ --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ From 6ee5c097bc9d0507ace88c32e83146e8cb378c64 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 1 Aug 2023 16:17:57 -0400 Subject: [PATCH 413/467] chore: [autoapprove] Pin flake8 version (#444) Source-Link: https://github.com/googleapis/synthtool/commit/0ddbff8012e47cde4462fe3f9feab01fbc4cdfd6 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:bced5ca77c4dda0fd2f5d845d4035fc3c5d3d6b81f245246a36aee114970082b Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- packages/google-cloud-error-reporting/.pre-commit-config.yaml | 2 +- packages/google-cloud-error-reporting/noxfile.py | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 0ddd0e4d1873..d71329cc807d 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:6c1cbc75c74b8bdd71dada2fa1677e9d6d78a889e9a70ee75b93d1d0543f96e1 -# created: 2023-07-25T21:01:10.396410762Z + digest: sha256:bced5ca77c4dda0fd2f5d845d4035fc3c5d3d6b81f245246a36aee114970082b +# created: 2023-08-01T17:41:45.434027321Z diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 9e3898fd1c12..19409cbd37a4 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -26,6 +26,6 @@ repos: hooks: - id: black - repo: https://github.com/pycqa/flake8 - rev: 3.9.2 + rev: 6.1.0 hooks: - id: flake8 diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 5ff54976a091..2b3b1bfa1318 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -25,6 +25,7 @@ import nox +FLAKE8_VERSION = "flake8==6.1.0" BLACK_VERSION = "black==22.3.0" ISORT_VERSION = "isort==5.10.1" LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] @@ -81,7 +82,7 @@ def lint(session): Returns a failure if the linters find linting errors or sufficiently serious code quality issues. """ - session.install("flake8", BLACK_VERSION) + session.install(FLAKE8_VERSION, BLACK_VERSION) session.run( "black", "--check", From 3623bc7872f274fbac856ca0ead570dfe6329142 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 10:39:02 -0400 Subject: [PATCH 414/467] build: [autoapprove] bump cryptography from 41.0.2 to 41.0.3 (#446) Source-Link: https://github.com/googleapis/synthtool/commit/352b9d4c068ce7c05908172af128b294073bf53c Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:3e3800bb100af5d7f9e810d48212b37812c1856d20ffeafb99ebe66461b61fc7 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/requirements.txt | 48 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index d71329cc807d..a3da1b0d4cd3 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:bced5ca77c4dda0fd2f5d845d4035fc3c5d3d6b81f245246a36aee114970082b -# created: 2023-08-01T17:41:45.434027321Z + digest: sha256:3e3800bb100af5d7f9e810d48212b37812c1856d20ffeafb99ebe66461b61fc7 +# created: 2023-08-02T10:53:29.114535628Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 76d9bba0f7d0..029bd342de94 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -113,30 +113,30 @@ commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 # via rich -cryptography==41.0.2 \ - --hash=sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711 \ - --hash=sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7 \ - --hash=sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd \ - --hash=sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e \ - --hash=sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58 \ - --hash=sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0 \ - --hash=sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d \ - --hash=sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83 \ - --hash=sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831 \ - --hash=sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766 \ - --hash=sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b \ - --hash=sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c \ - --hash=sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182 \ - --hash=sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f \ - --hash=sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa \ - --hash=sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4 \ - --hash=sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a \ - --hash=sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2 \ - --hash=sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76 \ - --hash=sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5 \ - --hash=sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee \ - --hash=sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f \ - --hash=sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14 +cryptography==41.0.3 \ + --hash=sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306 \ + --hash=sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84 \ + --hash=sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47 \ + --hash=sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d \ + --hash=sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116 \ + --hash=sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207 \ + --hash=sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81 \ + --hash=sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087 \ + --hash=sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd \ + --hash=sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507 \ + --hash=sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858 \ + --hash=sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae \ + --hash=sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34 \ + --hash=sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906 \ + --hash=sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd \ + --hash=sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922 \ + --hash=sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7 \ + --hash=sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4 \ + --hash=sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574 \ + --hash=sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1 \ + --hash=sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c \ + --hash=sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e \ + --hash=sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de # via # gcp-releasetool # secretstorage From 63e6b7131ae86a0123261b171f6c6463d74c9ae2 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:04:44 -0700 Subject: [PATCH 415/467] docs: Minor formatting (#448) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: Minor formatting chore: Update gapic-generator-python to v1.11.5 build: Update rules_python to 0.24.0 PiperOrigin-RevId: 563436317 Source-Link: https://github.com/googleapis/googleapis/commit/42fd37b18d706f6f51f52f209973b3b2c28f509a Source-Link: https://github.com/googleapis/googleapis-gen/commit/280264ca02fb9316b4237a96d0af1a2343a81a56 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMjgwMjY0Y2EwMmZiOTMxNmI0MjM3YTk2ZDBhZjFhMjM0M2E4MWE1NiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../google/cloud/errorreporting_v1beta1/types/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 947b89a3156c..6342410bf67a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -189,8 +189,8 @@ class ServiceContext(proto.Message): resource_type (str): Type of the MonitoredResource. List of possible values: - https://cloud.google.com/monitoring/api/resources + Value is set automatically for incoming errors and must not be set when reporting errors. """ From 7a420120d90668b0469b975a6df3ac9345804e3d Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 21:51:02 -0400 Subject: [PATCH 416/467] chore: [autoapprove] bump cryptography from 41.0.3 to 41.0.4 (#451) Source-Link: https://github.com/googleapis/synthtool/commit/dede53ff326079b457cfb1aae5bbdc82cbb51dc3 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:fac304457974bb530cc5396abd4ab25d26a469cd3bc97cbfb18c8d4324c584eb Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +- .../google-cloud-error-reporting/.gitignore | 1 + .../.kokoro/requirements.txt | 49 ++++++++++--------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index a3da1b0d4cd3..a9bdb1b7ac0f 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:3e3800bb100af5d7f9e810d48212b37812c1856d20ffeafb99ebe66461b61fc7 -# created: 2023-08-02T10:53:29.114535628Z + digest: sha256:fac304457974bb530cc5396abd4ab25d26a469cd3bc97cbfb18c8d4324c584eb +# created: 2023-10-02T21:31:03.517640371Z diff --git a/packages/google-cloud-error-reporting/.gitignore b/packages/google-cloud-error-reporting/.gitignore index b4243ced74e4..d083ea1ddc3e 100644 --- a/packages/google-cloud-error-reporting/.gitignore +++ b/packages/google-cloud-error-reporting/.gitignore @@ -50,6 +50,7 @@ docs.metadata # Virtual environment env/ +venv/ # Test logs coverage.xml diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 029bd342de94..96d593c8c82a 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -113,30 +113,30 @@ commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 # via rich -cryptography==41.0.3 \ - --hash=sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306 \ - --hash=sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84 \ - --hash=sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47 \ - --hash=sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d \ - --hash=sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116 \ - --hash=sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207 \ - --hash=sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81 \ - --hash=sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087 \ - --hash=sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd \ - --hash=sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507 \ - --hash=sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858 \ - --hash=sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae \ - --hash=sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34 \ - --hash=sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906 \ - --hash=sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd \ - --hash=sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922 \ - --hash=sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7 \ - --hash=sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4 \ - --hash=sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574 \ - --hash=sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1 \ - --hash=sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c \ - --hash=sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e \ - --hash=sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de +cryptography==41.0.4 \ + --hash=sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67 \ + --hash=sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311 \ + --hash=sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8 \ + --hash=sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13 \ + --hash=sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143 \ + --hash=sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f \ + --hash=sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829 \ + --hash=sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd \ + --hash=sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397 \ + --hash=sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac \ + --hash=sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d \ + --hash=sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a \ + --hash=sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839 \ + --hash=sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e \ + --hash=sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6 \ + --hash=sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9 \ + --hash=sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860 \ + --hash=sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca \ + --hash=sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91 \ + --hash=sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d \ + --hash=sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714 \ + --hash=sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb \ + --hash=sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f # via # gcp-releasetool # secretstorage @@ -382,6 +382,7 @@ protobuf==3.20.3 \ # gcp-docuploader # gcp-releasetool # google-api-core + # googleapis-common-protos pyasn1==0.4.8 \ --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba From aa51d4f420a2453fba7ecdcfabd04282da91e00f Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 11:04:31 -0400 Subject: [PATCH 417/467] chore: [autoapprove] Update `black` and `isort` to latest versions (#453) Source-Link: https://github.com/googleapis/synthtool/commit/0c7b0333f44b2b7075447f43a121a12d15a7b76a Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:08e34975760f002746b1d8c86fdc90660be45945ee6d9db914d1508acdf9a547 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +-- .../.kokoro/requirements.txt | 6 ++-- .../.pre-commit-config.yaml | 2 +- .../google-cloud-error-reporting/noxfile.py | 36 ++++++++++--------- .../tests/unit/test__gapic.py | 1 - .../tests/unit/test__logging.py | 1 - .../tests/unit/test_client.py | 1 - 7 files changed, 25 insertions(+), 26 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index a9bdb1b7ac0f..dd98abbdeebe 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:fac304457974bb530cc5396abd4ab25d26a469cd3bc97cbfb18c8d4324c584eb -# created: 2023-10-02T21:31:03.517640371Z + digest: sha256:08e34975760f002746b1d8c86fdc90660be45945ee6d9db914d1508acdf9a547 +# created: 2023-10-09T14:06:13.397766266Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 96d593c8c82a..0332d3267e15 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -467,9 +467,9 @@ typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via -r requirements.in -urllib3==1.26.12 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 +urllib3==1.26.17 \ + --hash=sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21 \ + --hash=sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b # via # requests # twine diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 19409cbd37a4..6a8e16950664 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 23.7.0 hooks: - id: black - repo: https://github.com/pycqa/flake8 diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 2b3b1bfa1318..54abbaabd056 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -17,22 +17,24 @@ # Generated by synthtool. DO NOT EDIT! from __future__ import absolute_import + import os import pathlib import re import shutil +from typing import Dict, List import warnings import nox FLAKE8_VERSION = "flake8==6.1.0" -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" +BLACK_VERSION = "black[jupyter]==23.7.0" +ISORT_VERSION = "isort==5.11.0" LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] DEFAULT_PYTHON_VERSION = "3.8" -UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11"] +UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.7", "3.8", "3.9", "3.10", "3.11"] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "asyncmock", @@ -40,23 +42,23 @@ "pytest-cov", "pytest-asyncio", ] -UNIT_TEST_EXTERNAL_DEPENDENCIES = [] -UNIT_TEST_LOCAL_DEPENDENCIES = [] -UNIT_TEST_DEPENDENCIES = [] -UNIT_TEST_EXTRAS = [] -UNIT_TEST_EXTRAS_BY_PYTHON = {} - -SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] -SYSTEM_TEST_STANDARD_DEPENDENCIES = [ +UNIT_TEST_EXTERNAL_DEPENDENCIES: List[str] = [] +UNIT_TEST_LOCAL_DEPENDENCIES: List[str] = [] +UNIT_TEST_DEPENDENCIES: List[str] = [] +UNIT_TEST_EXTRAS: List[str] = [] +UNIT_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {} + +SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.8"] +SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [ "mock", "pytest", "google-cloud-testutils", ] -SYSTEM_TEST_EXTERNAL_DEPENDENCIES = [] -SYSTEM_TEST_LOCAL_DEPENDENCIES = [] -SYSTEM_TEST_DEPENDENCIES = [] -SYSTEM_TEST_EXTRAS = [] -SYSTEM_TEST_EXTRAS_BY_PYTHON = {} +SYSTEM_TEST_EXTERNAL_DEPENDENCIES: List[str] = [] +SYSTEM_TEST_LOCAL_DEPENDENCIES: List[str] = [] +SYSTEM_TEST_DEPENDENCIES: List[str] = [] +SYSTEM_TEST_EXTRAS: List[str] = [] +SYSTEM_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {} CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() @@ -69,6 +71,7 @@ "lint_setup_py", "blacken", "docs", + "format", ] # Error if a python version is missing @@ -187,7 +190,6 @@ def unit(session): def install_systemtest_dependencies(session, *constraints): - # Use pre-release gRPC for system tests. # Exclude version 1.52.0rc1 which has a known issue. # See https://github.com/grpc/grpc/issues/32163 diff --git a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py index 365eee27215c..52e525e38890 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__gapic.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__gapic.py @@ -49,7 +49,6 @@ def test_make_report_error_api(self): class Test_ErrorReportingGapicApi(unittest.TestCase): - PROJECT = "PROJECT" def _make_one(self, gapic_api, project): diff --git a/packages/google-cloud-error-reporting/tests/unit/test__logging.py b/packages/google-cloud-error-reporting/tests/unit/test__logging.py index c5b1cc32c810..433c91929300 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test__logging.py +++ b/packages/google-cloud-error-reporting/tests/unit/test__logging.py @@ -24,7 +24,6 @@ def _make_credentials(): class Test_ErrorReportingLoggingAPI(unittest.TestCase): - PROJECT = "PROJECT" def _make_one(self, project, credentials, **kw): diff --git a/packages/google-cloud-error-reporting/tests/unit/test_client.py b/packages/google-cloud-error-reporting/tests/unit/test_client.py index 3a7290e8aa96..e53b1545915d 100644 --- a/packages/google-cloud-error-reporting/tests/unit/test_client.py +++ b/packages/google-cloud-error-reporting/tests/unit/test_client.py @@ -25,7 +25,6 @@ def _make_credentials(): class TestClient(unittest.TestCase): - PROJECT = "PROJECT" SERVICE = "SERVICE" VERSION = "myversion" From 25b07e6079df58f2144e2b5a5512192c59bafe9b Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 07:25:04 -0400 Subject: [PATCH 418/467] chore(deps): bump urllib3 from 1.26.17 to 1.26.18 in /.kokoro (#456) Source-Link: https://github.com/googleapis/synthtool/commit/d52e638b37b091054c869bfa6f5a9fedaba9e0dd Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:4f9b3b106ad0beafc2c8a415e3f62c1a0cc23cabea115dbe841b848f581cfe99 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../google-cloud-error-reporting/.kokoro/requirements.txt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index dd98abbdeebe..7f291dbd5f9b 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:08e34975760f002746b1d8c86fdc90660be45945ee6d9db914d1508acdf9a547 -# created: 2023-10-09T14:06:13.397766266Z + digest: sha256:4f9b3b106ad0beafc2c8a415e3f62c1a0cc23cabea115dbe841b848f581cfe99 +# created: 2023-10-18T20:26:37.410353675Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 0332d3267e15..16170d0ca7b8 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -467,9 +467,9 @@ typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via -r requirements.in -urllib3==1.26.17 \ - --hash=sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21 \ - --hash=sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b +urllib3==1.26.18 \ + --hash=sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07 \ + --hash=sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0 # via # requests # twine From b21c8253365ada1ae9ab8c4bcfa7d7cc86e07723 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 07:34:34 -0400 Subject: [PATCH 419/467] chore: Update gapic-generator-python to v1.11.9 (#454) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.11.7 PiperOrigin-RevId: 573230664 Source-Link: https://github.com/googleapis/googleapis/commit/93beed334607e70709cc60e6145be65fdc8ec386 Source-Link: https://github.com/googleapis/googleapis-gen/commit/f4a4edaa8057639fcf6adf9179872280d1a8f651 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZjRhNGVkYWE4MDU3NjM5ZmNmNmFkZjkxNzk4NzIyODBkMWE4ZjY1MSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update gapic-generator-python to v1.11.8 PiperOrigin-RevId: 574178735 Source-Link: https://github.com/googleapis/googleapis/commit/7307199008ee2d57a4337066de29f9cd8c444bc6 Source-Link: https://github.com/googleapis/googleapis-gen/commit/ce3af21b7c559a87c2befc076be0e3aeda3a26f0 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update gapic-generator-python to v1.11.9 PiperOrigin-RevId: 574520922 Source-Link: https://github.com/googleapis/googleapis/commit/5183984d611beb41e90f65f08609b9d926f779bd Source-Link: https://github.com/googleapis/googleapis-gen/commit/a59af19d4ac6509faedf1cc39029141b6a5b8968 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYTU5YWYxOWQ0YWM2NTA5ZmFlZGYxY2MzOTAyOTE0MWI2YTViODk2OCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * remove obsolete rst files --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../{services.rst => services_.rst} | 0 .../{types.rst => types_.rst} | 0 .../docs/index.rst | 4 +- .../test_error_group_service.py | 103 +++++++++++++--- .../test_error_stats_service.py | 47 ++++---- .../test_report_errors_service.py | 111 ++++++++++++------ 6 files changed, 190 insertions(+), 75 deletions(-) rename packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/{services.rst => services_.rst} (100%) rename packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/{types.rst => types_.rst} (100%) diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services_.rst similarity index 100% rename from packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services.rst rename to packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/services_.rst diff --git a/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst b/packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types_.rst similarity index 100% rename from packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types.rst rename to packages/google-cloud-error-reporting/docs/errorreporting_v1beta1/types_.rst diff --git a/packages/google-cloud-error-reporting/docs/index.rst b/packages/google-cloud-error-reporting/docs/index.rst index 949b1c9dad8e..cc149749d555 100644 --- a/packages/google-cloud-error-reporting/docs/index.rst +++ b/packages/google-cloud-error-reporting/docs/index.rst @@ -19,8 +19,8 @@ API Reference client util - errorreporting_v1beta1/services - errorreporting_v1beta1/types + errorreporting_v1beta1/services_ + errorreporting_v1beta1/types_ Changelog diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 8f4bc53da8c0..ea30d474b157 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1239,8 +1239,9 @@ def test_get_group_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1317,8 +1318,9 @@ def test_get_group_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1441,8 +1443,9 @@ def test_get_group_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1500,6 +1503,73 @@ def test_update_group_rest(request_type): "tracking_issues": [{"url": "url_value"}], "resolution_status": 1, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = error_group_service.UpdateGroupRequest.meta.fields["group"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["group"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["group"][field])): + del request_init["group"][field][i][subfield] + else: + del request_init["group"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -1514,8 +1584,9 @@ def test_update_group_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1588,8 +1659,9 @@ def test_update_group_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1675,12 +1747,6 @@ def test_update_group_rest_bad_request( # send a request that will satisfy transcoding request_init = {"group": {"name": "projects/sample1/groups/sample2"}} - request_init["group"] = { - "name": "projects/sample1/groups/sample2", - "group_id": "group_id_value", - "tracking_issues": [{"url": "url_value"}], - "resolution_status": 1, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1718,8 +1784,9 @@ def test_update_group_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index d2e77d24221b..29e94f34ac7e 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1874,8 +1874,9 @@ def test_list_group_stats_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1964,10 +1965,9 @@ def test_list_group_stats_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.ListGroupStatsResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2110,8 +2110,9 @@ def test_list_group_stats_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2235,8 +2236,9 @@ def test_list_events_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.ListEventsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.ListEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2328,8 +2330,9 @@ def test_list_events_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.ListEventsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.ListEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2477,8 +2480,9 @@ def test_list_events_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.ListEventsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.ListEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2598,8 +2602,9 @@ def test_delete_events_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.DeleteEventsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.DeleteEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2673,8 +2678,9 @@ def test_delete_events_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.DeleteEventsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.DeleteEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2799,8 +2805,9 @@ def test_delete_events_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = error_stats_service.DeleteEventsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = error_stats_service.DeleteEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 9824fea42ba5..1f84c2c1bc6c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1060,6 +1060,73 @@ def test_report_error_event_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = report_errors_service.ReportErrorEventRequest.meta.fields["event"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["event"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["event"][field])): + del request_init["event"][field][i][subfield] + else: + del request_init["event"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -1070,10 +1137,9 @@ def test_report_error_event_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = report_errors_service.ReportErrorEventResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = report_errors_service.ReportErrorEventResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1148,10 +1214,11 @@ def test_report_error_event_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = report_errors_service.ReportErrorEventResponse.pb( + # Convert return value to protobuf type + return_value = report_errors_service.ReportErrorEventResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1249,31 +1316,6 @@ def test_report_error_event_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project_name": "projects/sample1"} - request_init["event"] = { - "event_time": {"seconds": 751, "nanos": 543}, - "service_context": { - "service": "service_value", - "version": "version_value", - "resource_type": "resource_type_value", - }, - "message": "message_value", - "context": { - "http_request": { - "method": "method_value", - "url": "url_value", - "user_agent": "user_agent_value", - "referrer": "referrer_value", - "response_status_code": 2156, - "remote_ip": "remote_ip_value", - }, - "user": "user_value", - "report_location": { - "file_path": "file_path_value", - "line_number": 1168, - "function_name": "function_name_value", - }, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1314,10 +1356,9 @@ def test_report_error_event_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = report_errors_service.ReportErrorEventResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = report_errors_service.ReportErrorEventResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value From ee757d292455bbb7e1daef233bdc4a0226bd0fe6 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 21:16:14 -0400 Subject: [PATCH 420/467] chore: update docfx minimum Python version (#457) Source-Link: https://github.com/googleapis/synthtool/commit/bc07fd415c39853b382bcf8315f8eeacdf334055 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:30470597773378105e239b59fce8eb27cc97375580d592699206d17d117143d0 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../google-cloud-error-reporting/.github/workflows/docs.yml | 2 +- packages/google-cloud-error-reporting/noxfile.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 7f291dbd5f9b..ec696b558c35 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:4f9b3b106ad0beafc2c8a415e3f62c1a0cc23cabea115dbe841b848f581cfe99 -# created: 2023-10-18T20:26:37.410353675Z + digest: sha256:30470597773378105e239b59fce8eb27cc97375580d592699206d17d117143d0 +# created: 2023-11-03T00:57:07.335914631Z diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml index e97d89e484c9..221806cedf58 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/docs.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/docs.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.9" + python-version: "3.10" - name: Install nox run: | python -m pip install --upgrade setuptools pip wheel diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 54abbaabd056..91389c37ab2d 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -301,7 +301,7 @@ def docs(session): ) -@nox.session(python="3.9") +@nox.session(python="3.10") def docfx(session): """Build the docfx yaml files for this library.""" From 7d1da8155dfc8c4733281d8dd5fcc68a8d55b4db Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 15 Nov 2023 02:28:46 -0500 Subject: [PATCH 421/467] chore: bump urllib3 from 1.26.12 to 1.26.18 (#458) Source-Link: https://github.com/googleapis/synthtool/commit/febacccc98d6d224aff9d0bd0373bb5a4cd5969c Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:caffe0a9277daeccc4d1de5c9b55ebba0901b57c2f713ec9c876b0d4ec064f61 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/requirements.txt | 532 +++++++++--------- 2 files changed, 277 insertions(+), 259 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index ec696b558c35..453b540c1e58 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:30470597773378105e239b59fce8eb27cc97375580d592699206d17d117143d0 -# created: 2023-11-03T00:57:07.335914631Z + digest: sha256:caffe0a9277daeccc4d1de5c9b55ebba0901b57c2f713ec9c876b0d4ec064f61 +# created: 2023-11-08T19:46:45.022803742Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 16170d0ca7b8..8957e21104e2 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -4,91 +4,75 @@ # # pip-compile --allow-unsafe --generate-hashes requirements.in # -argcomplete==2.0.0 \ - --hash=sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20 \ - --hash=sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e +argcomplete==3.1.4 \ + --hash=sha256:72558ba729e4c468572609817226fb0a6e7e9a0a7d477b882be168c0b4a62b94 \ + --hash=sha256:fbe56f8cda08aa9a04b307d8482ea703e96a6a801611acb4be9bf3942017989f # via nox -attrs==22.1.0 \ - --hash=sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6 \ - --hash=sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c +attrs==23.1.0 \ + --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ + --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 # via gcp-releasetool -bleach==5.0.1 \ - --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ - --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c - # via readme-renderer -cachetools==5.2.0 \ - --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \ - --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db +cachetools==5.3.2 \ + --hash=sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2 \ + --hash=sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1 # via google-auth certifi==2023.7.22 \ --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 # via requests -cffi==1.15.1 \ - --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ - --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ - --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ - --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ - --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ - --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ - --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ - --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ - --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ - --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ - --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ - --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ - --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ - --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ - --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ - --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ - --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ - --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ - --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ - --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ - --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ - --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ - --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ - --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ - --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ - --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ - --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ - --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ - --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ - --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ - --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ - --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ - --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ - --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ - --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ - --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ - --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ - --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ - --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ - --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ - --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ - --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ - --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ - --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ - --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ - --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ - --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ - --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ - --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ - --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ - --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ - --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ - --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ - --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ - --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ - --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ - --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ - --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ - --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ - --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ - --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ - --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ - --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ - --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 +cffi==1.16.0 \ + --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ + --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ + --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ + --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \ + --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \ + --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \ + --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \ + --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \ + --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \ + --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \ + --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \ + --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \ + --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \ + --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \ + --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \ + --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \ + --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \ + --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \ + --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \ + --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \ + --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \ + --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \ + --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \ + --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \ + --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \ + --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \ + --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \ + --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \ + --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \ + --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \ + --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \ + --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \ + --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \ + --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \ + --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \ + --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \ + --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \ + --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \ + --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \ + --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \ + --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \ + --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \ + --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \ + --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \ + --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \ + --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \ + --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \ + --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \ + --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \ + --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ + --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ + --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 # via cryptography charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ @@ -109,78 +93,74 @@ colorlog==6.7.0 \ # via # gcp-docuploader # nox -commonmark==0.9.1 \ - --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ - --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 - # via rich -cryptography==41.0.4 \ - --hash=sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67 \ - --hash=sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311 \ - --hash=sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8 \ - --hash=sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13 \ - --hash=sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143 \ - --hash=sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f \ - --hash=sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829 \ - --hash=sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd \ - --hash=sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397 \ - --hash=sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac \ - --hash=sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d \ - --hash=sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a \ - --hash=sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839 \ - --hash=sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e \ - --hash=sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6 \ - --hash=sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9 \ - --hash=sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860 \ - --hash=sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca \ - --hash=sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91 \ - --hash=sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d \ - --hash=sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714 \ - --hash=sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb \ - --hash=sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f +cryptography==41.0.5 \ + --hash=sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf \ + --hash=sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84 \ + --hash=sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e \ + --hash=sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8 \ + --hash=sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7 \ + --hash=sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1 \ + --hash=sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88 \ + --hash=sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86 \ + --hash=sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179 \ + --hash=sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81 \ + --hash=sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20 \ + --hash=sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548 \ + --hash=sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d \ + --hash=sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d \ + --hash=sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5 \ + --hash=sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1 \ + --hash=sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147 \ + --hash=sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936 \ + --hash=sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797 \ + --hash=sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696 \ + --hash=sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72 \ + --hash=sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da \ + --hash=sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723 # via # gcp-releasetool # secretstorage -distlib==0.3.6 \ - --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ - --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e +distlib==0.3.7 \ + --hash=sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057 \ + --hash=sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8 # via virtualenv -docutils==0.19 \ - --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ - --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc +docutils==0.20.1 \ + --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ + --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b # via readme-renderer -filelock==3.8.0 \ - --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ - --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 +filelock==3.13.1 \ + --hash=sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e \ + --hash=sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c # via virtualenv -gcp-docuploader==0.6.4 \ - --hash=sha256:01486419e24633af78fd0167db74a2763974765ee8078ca6eb6964d0ebd388af \ - --hash=sha256:70861190c123d907b3b067da896265ead2eeb9263969d6955c9e0bb091b5ccbf +gcp-docuploader==0.6.5 \ + --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \ + --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea # via -r requirements.in -gcp-releasetool==1.10.5 \ - --hash=sha256:174b7b102d704b254f2a26a3eda2c684fd3543320ec239baf771542a2e58e109 \ - --hash=sha256:e29d29927fe2ca493105a82958c6873bb2b90d503acac56be2c229e74de0eec9 +gcp-releasetool==1.16.0 \ + --hash=sha256:27bf19d2e87aaa884096ff941aa3c592c482be3d6a2bfe6f06afafa6af2353e3 \ + --hash=sha256:a316b197a543fd036209d0caba7a8eb4d236d8e65381c80cbc6d7efaa7606d63 # via -r requirements.in -google-api-core==2.10.2 \ - --hash=sha256:10c06f7739fe57781f87523375e8e1a3a4674bf6392cd6131a3222182b971320 \ - --hash=sha256:34f24bd1d5f72a8c4519773d99ca6bf080a6c4e041b4e9f024fe230191dda62e +google-api-core==2.12.0 \ + --hash=sha256:c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553 \ + --hash=sha256:ec6054f7d64ad13b41e43d96f735acbd763b0f3b695dabaa2d579673f6a6e160 # via # google-cloud-core # google-cloud-storage -google-auth==2.14.1 \ - --hash=sha256:ccaa901f31ad5cbb562615eb8b664b3dd0bf5404a67618e642307f00613eda4d \ - --hash=sha256:f5d8701633bebc12e0deea4df8abd8aff31c28b355360597f7f2ee60f2e4d016 +google-auth==2.23.4 \ + --hash=sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3 \ + --hash=sha256:d4bbc92fe4b8bfd2f3e8d88e5ba7085935da208ee38a134fc280e7ce682a05f2 # via # gcp-releasetool # google-api-core # google-cloud-core # google-cloud-storage -google-cloud-core==2.3.2 \ - --hash=sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe \ - --hash=sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a +google-cloud-core==2.3.3 \ + --hash=sha256:37b80273c8d7eee1ae816b3a20ae43585ea50506cb0e60f3cf5be5f87f1373cb \ + --hash=sha256:fbd11cad3e98a7e5b0343dc07cb1039a5ffd7a5bb96e1f1e27cee4bda4a90863 # via google-cloud-storage -google-cloud-storage==2.6.0 \ - --hash=sha256:104ca28ae61243b637f2f01455cc8a05e8f15a2a18ced96cb587241cdd3820f5 \ - --hash=sha256:4ad0415ff61abdd8bb2ae81c1f8f7ec7d91a1011613f2db87c614c550f97bfe9 +google-cloud-storage==2.13.0 \ + --hash=sha256:ab0bf2e1780a1b74cf17fccb13788070b729f50c252f0c94ada2aae0ca95437d \ + --hash=sha256:f62dc4c7b6cd4360d072e3deb28035fbdad491ac3d9b0b1815a12daea10f37c7 # via gcp-docuploader google-crc32c==1.5.0 \ --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ @@ -251,29 +231,31 @@ google-crc32c==1.5.0 \ --hash=sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183 \ --hash=sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556 \ --hash=sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4 - # via google-resumable-media -google-resumable-media==2.4.0 \ - --hash=sha256:2aa004c16d295c8f6c33b2b4788ba59d366677c0a25ae7382436cb30f776deaa \ - --hash=sha256:8d5518502f92b9ecc84ac46779bd4f09694ecb3ba38a3e7ca737a86d15cbca1f + # via + # google-cloud-storage + # google-resumable-media +google-resumable-media==2.6.0 \ + --hash=sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7 \ + --hash=sha256:fc03d344381970f79eebb632a3c18bb1828593a2dc5572b5f90115ef7d11e81b # via google-cloud-storage -googleapis-common-protos==1.57.0 \ - --hash=sha256:27a849d6205838fb6cc3c1c21cb9800707a661bb21c6ce7fb13e99eb1f8a0c46 \ - --hash=sha256:a9f4a1d7f6d9809657b7f1316a1aa527f6664891531bcfcc13b6696e685f443c +googleapis-common-protos==1.61.0 \ + --hash=sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0 \ + --hash=sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b # via google-api-core idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -importlib-metadata==5.0.0 \ - --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab \ - --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 +importlib-metadata==6.8.0 \ + --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ + --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 # via # -r requirements.in # keyring # twine -jaraco-classes==3.2.3 \ - --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ - --hash=sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a +jaraco-classes==3.3.0 \ + --hash=sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb \ + --hash=sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621 # via keyring jeepney==0.8.0 \ --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ @@ -285,75 +267,121 @@ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via gcp-releasetool -keyring==23.11.0 \ - --hash=sha256:3dd30011d555f1345dec2c262f0153f2f0ca6bca041fb1dc4588349bb4c0ac1e \ - --hash=sha256:ad192263e2cdd5f12875dedc2da13534359a7e760e77f8d04b50968a821c2361 +keyring==24.2.0 \ + --hash=sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6 \ + --hash=sha256:ca0746a19ec421219f4d713f848fa297a661a8a8c1504867e55bfb5e09091509 # via # gcp-releasetool # twine -markupsafe==2.1.1 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 +markdown-it-py==3.0.0 \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ + --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb + # via rich +markupsafe==2.1.3 \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 # via jinja2 -more-itertools==9.0.0 \ - --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ - --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +more-itertools==10.1.0 \ + --hash=sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a \ + --hash=sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6 # via jaraco-classes -nox==2022.11.21 \ - --hash=sha256:0e41a990e290e274cb205a976c4c97ee3c5234441a8132c8c3fd9ea3c22149eb \ - --hash=sha256:e21c31de0711d1274ca585a2c5fde36b1aa962005ba8e9322bf5eeed16dcd684 +nh3==0.2.14 \ + --hash=sha256:116c9515937f94f0057ef50ebcbcc10600860065953ba56f14473ff706371873 \ + --hash=sha256:18415df36db9b001f71a42a3a5395db79cf23d556996090d293764436e98e8ad \ + --hash=sha256:203cac86e313cf6486704d0ec620a992c8bc164c86d3a4fd3d761dd552d839b5 \ + --hash=sha256:2b0be5c792bd43d0abef8ca39dd8acb3c0611052ce466d0401d51ea0d9aa7525 \ + --hash=sha256:377aaf6a9e7c63962f367158d808c6a1344e2b4f83d071c43fbd631b75c4f0b2 \ + --hash=sha256:525846c56c2bcd376f5eaee76063ebf33cf1e620c1498b2a40107f60cfc6054e \ + --hash=sha256:5529a3bf99402c34056576d80ae5547123f1078da76aa99e8ed79e44fa67282d \ + --hash=sha256:7771d43222b639a4cd9e341f870cee336b9d886de1ad9bec8dddab22fe1de450 \ + --hash=sha256:88c753efbcdfc2644a5012938c6b9753f1c64a5723a67f0301ca43e7b85dcf0e \ + --hash=sha256:93a943cfd3e33bd03f77b97baa11990148687877b74193bf777956b67054dcc6 \ + --hash=sha256:9be2f68fb9a40d8440cbf34cbf40758aa7f6093160bfc7fb018cce8e424f0c3a \ + --hash=sha256:a0c509894fd4dccdff557068e5074999ae3b75f4c5a2d6fb5415e782e25679c4 \ + --hash=sha256:ac8056e937f264995a82bf0053ca898a1cb1c9efc7cd68fa07fe0060734df7e4 \ + --hash=sha256:aed56a86daa43966dd790ba86d4b810b219f75b4bb737461b6886ce2bde38fd6 \ + --hash=sha256:e8986f1dd3221d1e741fda0a12eaa4a273f1d80a35e31a1ffe579e7c621d069e \ + --hash=sha256:f99212a81c62b5f22f9e7c3e347aa00491114a5647e1f13bbebd79c3e5f08d75 + # via readme-renderer +nox==2023.4.22 \ + --hash=sha256:0b1adc619c58ab4fa57d6ab2e7823fe47a32e70202f287d78474adcc7bda1891 \ + --hash=sha256:46c0560b0dc609d7d967dc99e22cb463d3c4caf54a5fda735d6c11b5177e3a9f # via -r requirements.in -packaging==21.3 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 # via # gcp-releasetool # nox -pkginfo==1.8.3 \ - --hash=sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594 \ - --hash=sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c +pkginfo==1.9.6 \ + --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ + --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==2.5.4 \ - --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ - --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 +platformdirs==3.11.0 \ + --hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \ + --hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e # via virtualenv protobuf==3.20.3 \ --hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \ @@ -383,34 +411,30 @@ protobuf==3.20.3 \ # gcp-releasetool # google-api-core # googleapis-common-protos -pyasn1==0.4.8 \ - --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ - --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba +pyasn1==0.5.0 \ + --hash=sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57 \ + --hash=sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde # via # pyasn1-modules # rsa -pyasn1-modules==0.2.8 \ - --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \ - --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 +pyasn1-modules==0.3.0 \ + --hash=sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c \ + --hash=sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d # via google-auth pycparser==2.21 \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 # via cffi -pygments==2.15.0 \ - --hash=sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094 \ - --hash=sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500 +pygments==2.16.1 \ + --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ + --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 # via # readme-renderer # rich -pyjwt==2.6.0 \ - --hash=sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd \ - --hash=sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14 +pyjwt==2.8.0 \ + --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ + --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 # via gcp-releasetool -pyparsing==3.0.9 \ - --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ - --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc - # via packaging pyperclip==1.8.2 \ --hash=sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57 # via gcp-releasetool @@ -418,9 +442,9 @@ python-dateutil==2.8.2 \ --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 # via gcp-releasetool -readme-renderer==37.3 \ - --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ - --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 +readme-renderer==42.0 \ + --hash=sha256:13d039515c1f24de668e2c93f2e877b9dbe6c6c32328b90a40a49d8b2b85f36d \ + --hash=sha256:2d55489f83be4992fe4454939d1a051c33edbab778e82761d060c9fc6b308cd1 # via twine requests==2.31.0 \ --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ @@ -431,17 +455,17 @@ requests==2.31.0 \ # google-cloud-storage # requests-toolbelt # twine -requests-toolbelt==0.10.1 \ - --hash=sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7 \ - --hash=sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d +requests-toolbelt==1.0.0 \ + --hash=sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6 \ + --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 # via twine rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==12.6.0 \ - --hash=sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e \ - --hash=sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0 +rich==13.6.0 \ + --hash=sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245 \ + --hash=sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef # via twine rsa==4.9 \ --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ @@ -455,43 +479,37 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via - # bleach # gcp-docuploader - # google-auth # python-dateutil -twine==4.0.1 \ - --hash=sha256:42026c18e394eac3e06693ee52010baa5313e4811d5a11050e7d48436cf41b9e \ - --hash=sha256:96b1cf12f7ae611a4a40b6ae8e9570215daff0611828f5fe1f37a16255ab24a0 +twine==4.0.2 \ + --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ + --hash=sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8 # via -r requirements.in -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.8.0 \ + --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ + --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef # via -r requirements.in -urllib3==1.26.18 \ - --hash=sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07 \ - --hash=sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0 +urllib3==2.0.7 \ + --hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \ + --hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e # via # requests # twine -virtualenv==20.16.7 \ - --hash=sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e \ - --hash=sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29 +virtualenv==20.24.6 \ + --hash=sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af \ + --hash=sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381 # via nox -webencodings==0.5.1 \ - --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ - --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 - # via bleach -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.41.3 \ + --hash=sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942 \ + --hash=sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841 # via -r requirements.in -zipp==3.10.0 \ - --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ - --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8 +zipp==3.17.0 \ + --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \ + --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==65.5.1 \ - --hash=sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31 \ - --hash=sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f +setuptools==68.2.2 \ + --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ + --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a # via -r requirements.in From e8b0832c37f832b3c06d174089c904143798ef5f Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 15:22:09 -0500 Subject: [PATCH 422/467] feat: Add support for Python 3.12 (#459) * chore(python): Add Python 3.12 Source-Link: https://github.com/googleapis/synthtool/commit/af16e6d4672cc7b400f144de2fc3068b54ff47d2 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:bacc3af03bff793a03add584537b36b5644342931ad989e3ba1171d3bd5399f5 * Add python3.12 to setup.py --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/.OwlBot.lock.yaml | 4 +- .../.github/workflows/unittest.yml | 2 +- .../.kokoro/samples/python3.12/common.cfg | 59 +++++++++++++++++++ .../.kokoro/samples/python3.12/continuous.cfg | 6 ++ .../samples/python3.12/periodic-head.cfg | 11 ++++ .../.kokoro/samples/python3.12/periodic.cfg | 6 ++ .../.kokoro/samples/python3.12/presubmit.cfg | 6 ++ .../CONTRIBUTING.rst | 6 +- .../google-cloud-error-reporting/noxfile.py | 2 +- .../google-cloud-error-reporting/setup.py | 1 + 10 files changed, 97 insertions(+), 6 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic-head.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/presubmit.cfg diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 453b540c1e58..eb4d9f794dc1 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:caffe0a9277daeccc4d1de5c9b55ebba0901b57c2f713ec9c876b0d4ec064f61 -# created: 2023-11-08T19:46:45.022803742Z + digest: sha256:bacc3af03bff793a03add584537b36b5644342931ad989e3ba1171d3bd5399f5 +# created: 2023-11-23T18:17:28.105124211Z diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index 8057a7691b12..a32027b49bc2 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12'] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/common.cfg new file mode 100644 index 000000000000..67d66075a14d --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/common.cfg @@ -0,0 +1,59 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.12" +} + +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-312" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic-head.cfg new file mode 100644 index 000000000000..0ab001caaf12 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic.cfg new file mode 100644 index 000000000000..71cd1e597e38 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index f4f9bf83161b..5fc13e52204d 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.7, 3.8, 3.9, 3.10 and 3.11 on both UNIX and Windows. + 3.7, 3.8, 3.9, 3.10, 3.11 and 3.12 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -72,7 +72,7 @@ We use `nox `__ to instrument our tests. - To run a single unit test:: - $ nox -s unit-3.11 -- -k + $ nox -s unit-3.12 -- -k .. note:: @@ -226,12 +226,14 @@ We support: - `Python 3.9`_ - `Python 3.10`_ - `Python 3.11`_ +- `Python 3.12`_ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ .. _Python 3.9: https://docs.python.org/3.9/ .. _Python 3.10: https://docs.python.org/3.10/ .. _Python 3.11: https://docs.python.org/3.11/ +.. _Python 3.12: https://docs.python.org/3.12/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 91389c37ab2d..c672b30acc2b 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -34,7 +34,7 @@ DEFAULT_PYTHON_VERSION = "3.8" -UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.7", "3.8", "3.9", "3.10", "3.11"] +UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "asyncmock", diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index db8b4288e38e..942db61ad56c 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -82,6 +82,7 @@ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Operating System :: OS Independent", "Topic :: Internet", ], From 828106b8dca41a569cbe1ed95d8f8183b6d40143 Mon Sep 17 00:00:00 2001 From: Kevin Zheng <147537668+gkevinzheng@users.noreply.github.com> Date: Wed, 29 Nov 2023 16:51:48 -0500 Subject: [PATCH 423/467] feat: use native namespaces instead of pkg_resources (#463) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: use native namespaces instead of pkg_resources * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * Fixed comments in test_packaging.py --------- Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/setup.py | 7 +-- .../tests/unit/test_packaging.py | 57 +++++++++++++++++++ 2 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 packages/google-cloud-error-reporting/tests/unit/test_packaging.py diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 942db61ad56c..3f28c8d6545e 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -54,14 +54,10 @@ packages = [ package - for package in setuptools.PEP420PackageFinder.find() + for package in setuptools.find_namespace_packages() if package.startswith("google") ] -namespaces = ["google"] -if "google.cloud" in packages: - namespaces.append("google.cloud") - setuptools.setup( name=name, version=version, @@ -89,7 +85,6 @@ platforms="Posix; MacOS X; Windows", packages=packages, python_requires=">=3.7", - namespace_packages=namespaces, install_requires=dependencies, include_package_data=True, zip_safe=False, diff --git a/packages/google-cloud-error-reporting/tests/unit/test_packaging.py b/packages/google-cloud-error-reporting/tests/unit/test_packaging.py new file mode 100644 index 000000000000..01ab6a79c62b --- /dev/null +++ b/packages/google-cloud-error-reporting/tests/unit/test_packaging.py @@ -0,0 +1,57 @@ +# 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. + +import os +import subprocess +import sys + + +def test_namespace_package_compat(tmp_path): + # The ``google`` namespace package should not be masked + # by the presence of ``google-cloud-error-reporting``. + + google = tmp_path / "google" + google.mkdir() + google.joinpath("othermod.py").write_text("") + + google_otherpkg = tmp_path / "google" / "otherpkg" + google_otherpkg.mkdir() + google_otherpkg.joinpath("__init__.py").write_text("") + + # The ``google.cloud`` namespace package should not be masked + # by the presence of ``google-cloud-error-reporting``. + google_cloud = tmp_path / "google" / "cloud" + google_cloud.mkdir() + google_cloud.joinpath("othermod.py").write_text("") + + google_cloud_otherpkg = tmp_path / "google" / "cloud" / "otherpkg" + google_cloud_otherpkg.mkdir() + google_cloud_otherpkg.joinpath("__init__.py").write_text("") + + env = dict(os.environ, PYTHONPATH=str(tmp_path)) + + for pkg in [ + "google.othermod", + "google.cloud.othermod", + "google.otherpkg", + "google.cloud.otherpkg", + "google.cloud.error_reporting", + "google.cloud.errorreporting_v1beta1", + ]: + cmd = [sys.executable, "-c", f"import {pkg}"] + subprocess.check_output(cmd, env=env) + + for module in ["google.othermod", "google.cloud.othermod"]: + cmd = [sys.executable, "-m", module] + subprocess.check_output(cmd, env=env) From 57dfa359f84921aefe217b5db123790af08806dc Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 18:15:19 -0500 Subject: [PATCH 424/467] chore: bump cryptography from 41.0.5 to 41.0.6 in /synthtool/gcp/templates/python_library/.kokoro (#461) Source-Link: https://github.com/googleapis/synthtool/commit/9367caadcbb30b5b2719f30eb00c44cc913550ed Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:2f155882785883336b4468d5218db737bb1d10c9cea7cb62219ad16fe248c03c Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/requirements.txt | 48 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index eb4d9f794dc1..773c1dfd2146 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:bacc3af03bff793a03add584537b36b5644342931ad989e3ba1171d3bd5399f5 -# created: 2023-11-23T18:17:28.105124211Z + digest: sha256:2f155882785883336b4468d5218db737bb1d10c9cea7cb62219ad16fe248c03c +# created: 2023-11-29T14:54:29.548172703Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 8957e21104e2..e5c1ffca94b7 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -93,30 +93,30 @@ colorlog==6.7.0 \ # via # gcp-docuploader # nox -cryptography==41.0.5 \ - --hash=sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf \ - --hash=sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84 \ - --hash=sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e \ - --hash=sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8 \ - --hash=sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7 \ - --hash=sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1 \ - --hash=sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88 \ - --hash=sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86 \ - --hash=sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179 \ - --hash=sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81 \ - --hash=sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20 \ - --hash=sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548 \ - --hash=sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d \ - --hash=sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d \ - --hash=sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5 \ - --hash=sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1 \ - --hash=sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147 \ - --hash=sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936 \ - --hash=sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797 \ - --hash=sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696 \ - --hash=sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72 \ - --hash=sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da \ - --hash=sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723 +cryptography==41.0.6 \ + --hash=sha256:068bc551698c234742c40049e46840843f3d98ad7ce265fd2bd4ec0d11306596 \ + --hash=sha256:0f27acb55a4e77b9be8d550d762b0513ef3fc658cd3eb15110ebbcbd626db12c \ + --hash=sha256:2132d5865eea673fe6712c2ed5fb4fa49dba10768bb4cc798345748380ee3660 \ + --hash=sha256:3288acccef021e3c3c10d58933f44e8602cf04dba96d9796d70d537bb2f4bbc4 \ + --hash=sha256:35f3f288e83c3f6f10752467c48919a7a94b7d88cc00b0668372a0d2ad4f8ead \ + --hash=sha256:398ae1fc711b5eb78e977daa3cbf47cec20f2c08c5da129b7a296055fbb22aed \ + --hash=sha256:422e3e31d63743855e43e5a6fcc8b4acab860f560f9321b0ee6269cc7ed70cc3 \ + --hash=sha256:48783b7e2bef51224020efb61b42704207dde583d7e371ef8fc2a5fb6c0aabc7 \ + --hash=sha256:4d03186af98b1c01a4eda396b137f29e4e3fb0173e30f885e27acec8823c1b09 \ + --hash=sha256:5daeb18e7886a358064a68dbcaf441c036cbdb7da52ae744e7b9207b04d3908c \ + --hash=sha256:60e746b11b937911dc70d164060d28d273e31853bb359e2b2033c9e93e6f3c43 \ + --hash=sha256:742ae5e9a2310e9dade7932f9576606836ed174da3c7d26bc3d3ab4bd49b9f65 \ + --hash=sha256:7e00fb556bda398b99b0da289ce7053639d33b572847181d6483ad89835115f6 \ + --hash=sha256:85abd057699b98fce40b41737afb234fef05c67e116f6f3650782c10862c43da \ + --hash=sha256:8efb2af8d4ba9dbc9c9dd8f04d19a7abb5b49eab1f3694e7b5a16a5fc2856f5c \ + --hash=sha256:ae236bb8760c1e55b7a39b6d4d32d2279bc6c7c8500b7d5a13b6fb9fc97be35b \ + --hash=sha256:afda76d84b053923c27ede5edc1ed7d53e3c9f475ebaf63c68e69f1403c405a8 \ + --hash=sha256:b27a7fd4229abef715e064269d98a7e2909ebf92eb6912a9603c7e14c181928c \ + --hash=sha256:b648fe2a45e426aaee684ddca2632f62ec4613ef362f4d681a9a6283d10e079d \ + --hash=sha256:c5a550dc7a3b50b116323e3d376241829fd326ac47bc195e04eb33a8170902a9 \ + --hash=sha256:da46e2b5df770070412c46f87bac0849b8d685c5f2679771de277a422c7d0b86 \ + --hash=sha256:f39812f70fc5c71a15aa3c97b2bbe213c3f2a460b79bd21c40d033bb34a9bf36 \ + --hash=sha256:ff369dd19e8fe0528b02e8df9f2aeb2479f89b1270d90f96a63500afe9af5cae # via # gcp-releasetool # secretstorage From f4d3c5e47cee187c2a577dae084cdfbd4b64db7d Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:08:54 -0500 Subject: [PATCH 425/467] fix: use `retry_async` instead of `retry` in async client (#462) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.12.0 PiperOrigin-RevId: 586356061 Source-Link: https://github.com/googleapis/googleapis/commit/72a1f55abaedbb62decd8ae8a44a4de223799c76 Source-Link: https://github.com/googleapis/googleapis-gen/commit/558a04bcd1cc0576e8fac1089e48e48b27ac161b Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNTU4YTA0YmNkMWNjMDU3NmU4ZmFjMTA4OWU0OGU0OGIyN2FjMTYxYiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * update required checks * feat: added Generator API docs: updated doc for speech mode PiperOrigin-RevId: 586469693 Source-Link: https://github.com/googleapis/googleapis/commit/e8148d6d4bb02c907e06a784848ef731acb9e258 Source-Link: https://github.com/googleapis/googleapis-gen/commit/85136bd04383ed7172bb18b7b8d220dd7ff6b3a0 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiODUxMzZiZDA0MzgzZWQ3MTcyYmIxOGI3YjhkMjIwZGQ3ZmY2YjNhMCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/sync-repo-settings.yaml | 14 ++++++++++++++ .../services/error_group_service/async_client.py | 10 +++++----- .../services/error_stats_service/async_client.py | 12 ++++++------ .../services/report_errors_service/async_client.py | 8 ++++---- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml index 37438d33d4fa..1ca6d9271d9c 100644 --- a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml +++ b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml @@ -12,3 +12,17 @@ branchProtectionRules: - 'Samples - Lint' - 'Samples - Python 3.7' - 'Samples - Python 3.8' + - 'Samples - Python 3.9' + - 'Samples - Python 3.10' + - 'Samples - Python 3.11' + - 'Samples - Python 3.12' + - 'docs' + - 'docfx' + - 'lint' + - 'unit (3.7)' + - 'unit (3.8)' + - 'unit (3.9)' + - 'unit (3.10)' + - 'unit (3.11)' + - 'unit (3.12)' + - 'cover' diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 0d91c2fdb3bd..45a13d3d0b2d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -33,14 +33,14 @@ from google.api_core.client_options import ClientOptions from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 -from google.api_core import retry as retries +from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service @@ -267,7 +267,7 @@ async def sample_get_group(): This corresponds to the ``group_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, + retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be @@ -371,7 +371,7 @@ async def sample_update_group(): This corresponds to the ``group`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, + retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index bb758420dcab..db0bc3e1facc 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -33,14 +33,14 @@ from google.api_core.client_options import ClientOptions from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 -from google.api_core import retry as retries +from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common @@ -288,7 +288,7 @@ async def sample_list_group_stats(): This corresponds to the ``time_range`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, + retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be @@ -420,7 +420,7 @@ async def sample_list_events(): This corresponds to the ``group_id`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, + retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be @@ -541,7 +541,7 @@ async def sample_delete_events(): This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, + retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 929bac2cdfc0..40d3deb66f6a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -33,14 +33,14 @@ from google.api_core.client_options import ClientOptions from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 -from google.api_core import retry as retries +from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO @@ -289,7 +289,7 @@ async def sample_report_error_event(): This corresponds to the ``event`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, + retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be From 071294b8e9f7de60cc5dfe3962800a0551a3c5b7 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Thu, 30 Nov 2023 13:05:59 -0500 Subject: [PATCH 426/467] build: treat warnings as errors (#464) * build: treat warnings as errors * silence warning from googleapis-common-protos --- packages/google-cloud-error-reporting/pytest.ini | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/google-cloud-error-reporting/pytest.ini diff --git a/packages/google-cloud-error-reporting/pytest.ini b/packages/google-cloud-error-reporting/pytest.ini new file mode 100644 index 000000000000..44aa37089bf6 --- /dev/null +++ b/packages/google-cloud-error-reporting/pytest.ini @@ -0,0 +1,13 @@ +[pytest] +filterwarnings = + # treat all warnings as errors + error + # Remove once https://github.com/protocolbuffers/protobuf/issues/12186 is fixed + ignore:.*custom tp_new.*in Python 3.14:DeprecationWarning + # Remove once https://github.com/grpc/grpc/issues/35086 is fixed + ignore:There is no current event loop:DeprecationWarning:grpc.aio._channel + # Remove once release PR https://github.com/googleapis/proto-plus-python/pull/391 is merged + ignore:datetime.datetime.utcfromtimestamp\(\) is deprecated:DeprecationWarning:proto.datetime_helpers + # Remove once https://github.com/googleapis/python-api-common-protos/pull/187/files is merged + ignore:.*pkg_resources.declare_namespace:DeprecationWarning + ignore:.*pkg_resources is deprecated as an API:DeprecationWarning From 86595ea5462276667054c01a7f61620ec1355787 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sun, 10 Dec 2023 08:59:55 -0500 Subject: [PATCH 427/467] build: update actions/checkout and actions/setup-python (#467) Source-Link: https://github.com/googleapis/synthtool/commit/3551acd1261fd8f616cbfd054cda9bd6d6ac75f4 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:230f7fe8a0d2ed81a519cfc15c6bb11c5b46b9fb449b8b1219b3771bcb520ad2 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 ++-- .../.github/workflows/docs.yml | 8 ++++---- .../.github/workflows/lint.yml | 4 ++-- .../.github/workflows/unittest.yml | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 773c1dfd2146..40bf99731959 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:2f155882785883336b4468d5218db737bb1d10c9cea7cb62219ad16fe248c03c -# created: 2023-11-29T14:54:29.548172703Z + digest: sha256:230f7fe8a0d2ed81a519cfc15c6bb11c5b46b9fb449b8b1219b3771bcb520ad2 +# created: 2023-12-09T15:16:25.430769578Z diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml index 221806cedf58..698fbc5c94da 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/docs.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/docs.yml @@ -8,9 +8,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.9" - name: Install nox @@ -24,9 +24,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.10" - name: Install nox diff --git a/packages/google-cloud-error-reporting/.github/workflows/lint.yml b/packages/google-cloud-error-reporting/.github/workflows/lint.yml index 16d5a9e90f6d..4866193af2a9 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/lint.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/lint.yml @@ -8,9 +8,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.8" - name: Install nox diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index a32027b49bc2..d6ca65627c2d 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -11,9 +11,9 @@ jobs: python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12'] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} - name: Install nox @@ -37,9 +37,9 @@ jobs: - unit steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.8" - name: Install coverage From 6426014e795b0798c6b89072867f13f845727cf3 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 14:23:11 -0500 Subject: [PATCH 428/467] chore(main): release 1.10.0 (#449) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- .../google-cloud-error-reporting/CHANGELOG.md | 18 ++++++++++++++++++ .../cloud/error_reporting/gapic_version.py | 2 +- .../errorreporting_v1beta1/gapic_version.py | 2 +- ...e.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 50fc4585632d..ce4f35c280c4 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.9.2" + ".": "1.10.0" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index 84fe7f1dd068..e68ae0e21798 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,24 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.10.0](https://github.com/googleapis/python-error-reporting/compare/v1.9.2...v1.10.0) (2023-12-10) + + +### Features + +* Add support for Python 3.12 ([#459](https://github.com/googleapis/python-error-reporting/issues/459)) ([36c1b59](https://github.com/googleapis/python-error-reporting/commit/36c1b598b35561e56815ce729884410134c3357d)) +* Use native namespaces instead of pkg_resources ([#463](https://github.com/googleapis/python-error-reporting/issues/463)) ([a63e3f2](https://github.com/googleapis/python-error-reporting/commit/a63e3f25ce5ef0cd0077838cdbb6ceff0f15ce31)) + + +### Bug Fixes + +* Use `retry_async` instead of `retry` in async client ([#462](https://github.com/googleapis/python-error-reporting/issues/462)) ([44c2b14](https://github.com/googleapis/python-error-reporting/commit/44c2b146aec92e272134ebaa6945fe78f98753bd)) + + +### Documentation + +* Minor formatting ([#448](https://github.com/googleapis/python-error-reporting/issues/448)) ([48823d4](https://github.com/googleapis/python-error-reporting/commit/48823d4529fc2a2ac7b6c3f745c3ea5cb0ec9d38)) + ## [1.9.2](https://github.com/googleapis/python-error-reporting/compare/v1.9.1...v1.9.2) (2023-07-04) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index ab4e0f59eb91..7ce19170ba64 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.9.2" # {x-release-please-version} +__version__ = "1.10.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index ab4e0f59eb91..7ce19170ba64 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.9.2" # {x-release-please-version} +__version__ = "1.10.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..030caa5cac9e 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.10.0" }, "snippets": [ { From c01c8d84b9783e2dff5dc95a78d177de7723675a Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 19:20:40 -0500 Subject: [PATCH 429/467] build: update actions/upload-artifact and actions/download-artifact (#468) Source-Link: https://github.com/googleapis/synthtool/commit/280ddaed417057dfe5b1395731de07b7d09f5058 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:346ab2efb51649c5dde7756cbbdc60dd394852ba83b9bbffc292a63549f33c17 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 ++-- .../.github/workflows/unittest.yml | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 40bf99731959..9bee24097165 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:230f7fe8a0d2ed81a519cfc15c6bb11c5b46b9fb449b8b1219b3771bcb520ad2 -# created: 2023-12-09T15:16:25.430769578Z + digest: sha256:346ab2efb51649c5dde7756cbbdc60dd394852ba83b9bbffc292a63549f33c17 +# created: 2023-12-14T22:17:57.611773021Z diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index d6ca65627c2d..f4a337c496a0 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -26,9 +26,9 @@ jobs: run: | nox -s unit-${{ matrix.python }} - name: Upload coverage results - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: coverage-artifacts + name: coverage-artifact-${{ matrix.python }} path: .coverage-${{ matrix.python }} cover: @@ -47,11 +47,11 @@ jobs: python -m pip install --upgrade setuptools pip wheel python -m pip install coverage - name: Download coverage results - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: coverage-artifacts path: .coverage-results/ - name: Report coverage results run: | - coverage combine .coverage-results/.coverage* + find .coverage-results -type f -name '*.zip' -exec unzip {} \; + coverage combine .coverage-results/**/.coverage* coverage report --show-missing --fail-under=100 From b8571a085ca0e2784a957a1a49189ee72ad63242 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 10:42:46 -0500 Subject: [PATCH 430/467] build(python): fix `docs` and `docfx` builds (#470) Source-Link: https://github.com/googleapis/synthtool/commit/fac8444edd5f5526e804c306b766a271772a3e2f Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:5ea6d0ab82c956b50962f91d94e206d3921537ae5fe1549ec5326381d8905cfa Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 6 +++--- .../.kokoro/requirements.txt | 6 +++--- .../google-cloud-error-reporting/noxfile.py | 20 ++++++++++++++++++- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 9bee24097165..d8a1bbca7179 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:346ab2efb51649c5dde7756cbbdc60dd394852ba83b9bbffc292a63549f33c17 -# created: 2023-12-14T22:17:57.611773021Z + digest: sha256:5ea6d0ab82c956b50962f91d94e206d3921537ae5fe1549ec5326381d8905cfa +# created: 2024-01-15T16:32:08.142785673Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index e5c1ffca94b7..bb3d6ca38b14 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -263,9 +263,9 @@ jeepney==0.8.0 \ # via # keyring # secretstorage -jinja2==3.1.2 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jinja2==3.1.3 \ + --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ + --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 # via gcp-releasetool keyring==24.2.0 \ --hash=sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6 \ diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index c672b30acc2b..5617223bb2d1 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -281,7 +281,16 @@ def docs(session): session.install("-e", ".") session.install( - "sphinx==4.0.1", + # We need to pin to specific versions of the `sphinxcontrib-*` packages + # which still support sphinx 4.x. + # See https://github.com/googleapis/sphinx-docfx-yaml/issues/344 + # and https://github.com/googleapis/sphinx-docfx-yaml/issues/345. + "sphinxcontrib-applehelp==1.0.4", + "sphinxcontrib-devhelp==1.0.2", + "sphinxcontrib-htmlhelp==2.0.1", + "sphinxcontrib-qthelp==1.0.3", + "sphinxcontrib-serializinghtml==1.1.5", + "sphinx==4.5.0", "alabaster", "recommonmark", ) @@ -307,6 +316,15 @@ def docfx(session): session.install("-e", ".") session.install( + # We need to pin to specific versions of the `sphinxcontrib-*` packages + # which still support sphinx 4.x. + # See https://github.com/googleapis/sphinx-docfx-yaml/issues/344 + # and https://github.com/googleapis/sphinx-docfx-yaml/issues/345. + "sphinxcontrib-applehelp==1.0.4", + "sphinxcontrib-devhelp==1.0.2", + "sphinxcontrib-htmlhelp==2.0.1", + "sphinxcontrib-qthelp==1.0.3", + "sphinxcontrib-serializinghtml==1.1.5", "gcp-sphinx-docfx-yaml", "alabaster", "recommonmark", From 3ef62b3c70a0c3793e6d0d0da46a951aa2521ab2 Mon Sep 17 00:00:00 2001 From: Cindy Peng <148148319+cindy-peng@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:35:54 -0800 Subject: [PATCH 431/467] chore: create flakybot.yaml to change default issue priority (#474) * chore: create flakybot.yaml to change default issue priority * Add google copyright license --------- Co-authored-by: cindy-peng --- .../.github/flakybot.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 packages/google-cloud-error-reporting/.github/flakybot.yaml diff --git a/packages/google-cloud-error-reporting/.github/flakybot.yaml b/packages/google-cloud-error-reporting/.github/flakybot.yaml new file mode 100644 index 000000000000..2159a1bca569 --- /dev/null +++ b/packages/google-cloud-error-reporting/.github/flakybot.yaml @@ -0,0 +1,15 @@ +# Copyright 2024 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. + +issuePriority: p2 \ No newline at end of file From d9d0909aaa624a132850ee37fa9058588e63b20b Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 10:59:27 -0500 Subject: [PATCH 432/467] build(deps): bump cryptography from 42.0.2 to 42.0.4 in .kokoro (#485) * build(deps): bump cryptography from 42.0.2 to 42.0.4 in .kokoro Source-Link: https://github.com/googleapis/synthtool/commit/d895aec3679ad22aa120481f746bf9f2f325f26f Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:98f3afd11308259de6e828e37376d18867fd321aba07826e29e4f8d9cab56bad * update warning filter for grpc; remove obsolete warning --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/requirements.txt | 57 +++++++++++-------- .../google-cloud-error-reporting/pytest.ini | 6 +- 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index d8a1bbca7179..e4e943e0259a 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:5ea6d0ab82c956b50962f91d94e206d3921537ae5fe1549ec5326381d8905cfa -# created: 2024-01-15T16:32:08.142785673Z + digest: sha256:98f3afd11308259de6e828e37376d18867fd321aba07826e29e4f8d9cab56bad +# created: 2024-02-27T15:56:18.442440378Z diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index bb3d6ca38b14..bda8e38c4f31 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -93,30 +93,39 @@ colorlog==6.7.0 \ # via # gcp-docuploader # nox -cryptography==41.0.6 \ - --hash=sha256:068bc551698c234742c40049e46840843f3d98ad7ce265fd2bd4ec0d11306596 \ - --hash=sha256:0f27acb55a4e77b9be8d550d762b0513ef3fc658cd3eb15110ebbcbd626db12c \ - --hash=sha256:2132d5865eea673fe6712c2ed5fb4fa49dba10768bb4cc798345748380ee3660 \ - --hash=sha256:3288acccef021e3c3c10d58933f44e8602cf04dba96d9796d70d537bb2f4bbc4 \ - --hash=sha256:35f3f288e83c3f6f10752467c48919a7a94b7d88cc00b0668372a0d2ad4f8ead \ - --hash=sha256:398ae1fc711b5eb78e977daa3cbf47cec20f2c08c5da129b7a296055fbb22aed \ - --hash=sha256:422e3e31d63743855e43e5a6fcc8b4acab860f560f9321b0ee6269cc7ed70cc3 \ - --hash=sha256:48783b7e2bef51224020efb61b42704207dde583d7e371ef8fc2a5fb6c0aabc7 \ - --hash=sha256:4d03186af98b1c01a4eda396b137f29e4e3fb0173e30f885e27acec8823c1b09 \ - --hash=sha256:5daeb18e7886a358064a68dbcaf441c036cbdb7da52ae744e7b9207b04d3908c \ - --hash=sha256:60e746b11b937911dc70d164060d28d273e31853bb359e2b2033c9e93e6f3c43 \ - --hash=sha256:742ae5e9a2310e9dade7932f9576606836ed174da3c7d26bc3d3ab4bd49b9f65 \ - --hash=sha256:7e00fb556bda398b99b0da289ce7053639d33b572847181d6483ad89835115f6 \ - --hash=sha256:85abd057699b98fce40b41737afb234fef05c67e116f6f3650782c10862c43da \ - --hash=sha256:8efb2af8d4ba9dbc9c9dd8f04d19a7abb5b49eab1f3694e7b5a16a5fc2856f5c \ - --hash=sha256:ae236bb8760c1e55b7a39b6d4d32d2279bc6c7c8500b7d5a13b6fb9fc97be35b \ - --hash=sha256:afda76d84b053923c27ede5edc1ed7d53e3c9f475ebaf63c68e69f1403c405a8 \ - --hash=sha256:b27a7fd4229abef715e064269d98a7e2909ebf92eb6912a9603c7e14c181928c \ - --hash=sha256:b648fe2a45e426aaee684ddca2632f62ec4613ef362f4d681a9a6283d10e079d \ - --hash=sha256:c5a550dc7a3b50b116323e3d376241829fd326ac47bc195e04eb33a8170902a9 \ - --hash=sha256:da46e2b5df770070412c46f87bac0849b8d685c5f2679771de277a422c7d0b86 \ - --hash=sha256:f39812f70fc5c71a15aa3c97b2bbe213c3f2a460b79bd21c40d033bb34a9bf36 \ - --hash=sha256:ff369dd19e8fe0528b02e8df9f2aeb2479f89b1270d90f96a63500afe9af5cae +cryptography==42.0.4 \ + --hash=sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b \ + --hash=sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce \ + --hash=sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88 \ + --hash=sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7 \ + --hash=sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20 \ + --hash=sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9 \ + --hash=sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff \ + --hash=sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1 \ + --hash=sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764 \ + --hash=sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b \ + --hash=sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298 \ + --hash=sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1 \ + --hash=sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824 \ + --hash=sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257 \ + --hash=sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a \ + --hash=sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129 \ + --hash=sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb \ + --hash=sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929 \ + --hash=sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854 \ + --hash=sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52 \ + --hash=sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923 \ + --hash=sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885 \ + --hash=sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0 \ + --hash=sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd \ + --hash=sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2 \ + --hash=sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18 \ + --hash=sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b \ + --hash=sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992 \ + --hash=sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74 \ + --hash=sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660 \ + --hash=sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925 \ + --hash=sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449 # via # gcp-releasetool # secretstorage diff --git a/packages/google-cloud-error-reporting/pytest.ini b/packages/google-cloud-error-reporting/pytest.ini index 44aa37089bf6..5af70b60c274 100644 --- a/packages/google-cloud-error-reporting/pytest.ini +++ b/packages/google-cloud-error-reporting/pytest.ini @@ -4,10 +4,8 @@ filterwarnings = error # Remove once https://github.com/protocolbuffers/protobuf/issues/12186 is fixed ignore:.*custom tp_new.*in Python 3.14:DeprecationWarning - # Remove once https://github.com/grpc/grpc/issues/35086 is fixed - ignore:There is no current event loop:DeprecationWarning:grpc.aio._channel - # Remove once release PR https://github.com/googleapis/proto-plus-python/pull/391 is merged - ignore:datetime.datetime.utcfromtimestamp\(\) is deprecated:DeprecationWarning:proto.datetime_helpers + # Remove warning once https://github.com/grpc/grpc/issues/35974 is fixed + ignore:unclosed:ResourceWarning # Remove once https://github.com/googleapis/python-api-common-protos/pull/187/files is merged ignore:.*pkg_resources.declare_namespace:DeprecationWarning ignore:.*pkg_resources is deprecated as an API:DeprecationWarning From 26ab401277b201d4ed3a8af838b78421b6337a0b Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 13:04:51 -0400 Subject: [PATCH 433/467] feat: Allow users to explicitly configure universe domain (#475) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Allow users to explicitly configure universe domain chore: Update gapic-generator-python to v1.14.0 PiperOrigin-RevId: 603108274 Source-Link: https://github.com/googleapis/googleapis/commit/3d83e3652f689ab51c3f95f876458c6faef619bf Source-Link: https://github.com/googleapis/googleapis-gen/commit/baf5e9bbb14a768b2b4c9eae9feb78f18f1757fa Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYmFmNWU5YmJiMTRhNzY4YjJiNGM5ZWFlOWZlYjc4ZjE4ZjE3NTdmYSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * fix: Resolve AttributeError 'Credentials' object has no attribute 'universe_domain' fix: Add google-auth as a direct dependency fix: Add staticmethod decorator to methods added in v1.14.0 chore: Update gapic-generator-python to v1.14.1 PiperOrigin-RevId: 603728206 Source-Link: https://github.com/googleapis/googleapis/commit/9063da8b4d45339db4e2d7d92a27c6708620e694 Source-Link: https://github.com/googleapis/googleapis-gen/commit/891c67d0a855b08085eb301dabb14064ef4b2c6d Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiODkxYzY3ZDBhODU1YjA4MDg1ZWIzMDFkYWJiMTQwNjRlZjRiMmM2ZCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * fix(diregapic): s/bazel/bazelisk/ in DIREGAPIC build GitHub action PiperOrigin-RevId: 604714585 Source-Link: https://github.com/googleapis/googleapis/commit/e4dce1324f4cb6dedb6822cb157e13cb8e0b3073 Source-Link: https://github.com/googleapis/googleapis-gen/commit/4036f78305c5c2aab80ff91960b3a3d983ff4b03 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDAzNmY3ODMwNWM1YzJhYWI4MGZmOTE5NjBiM2EzZDk4M2ZmNGIwMyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * fix(deps): Require `google-api-core>=1.34.1` fix: Resolve issue with missing import for certain enums in `**/types/…` PiperOrigin-RevId: 607041732 Source-Link: https://github.com/googleapis/googleapis/commit/b4532678459355676c95c00e39866776b7f40b2e Source-Link: https://github.com/googleapis/googleapis-gen/commit/cd796416f0f54cb22b2c44fb2d486960e693a346 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiY2Q3OTY0MTZmMGY1NGNiMjJiMmM0NGZiMmQ0ODY5NjBlNjkzYTM0NiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * fix(deps): Exclude google-auth 2.24.0 and 2.25.0 chore: Update gapic-generator-python to v1.14.4 PiperOrigin-RevId: 611561820 Source-Link: https://github.com/googleapis/googleapis/commit/87ef1fe57feede1f23b523f3c7fc4c3f2b92d6d2 Source-Link: https://github.com/googleapis/googleapis-gen/commit/197316137594aafad94dea31226528fbcc39310c Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMTk3MzE2MTM3NTk0YWFmYWQ5NGRlYTMxMjI2NTI4ZmJjYzM5MzEwYyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat: Add include_recaptcha_script for as a new action in firewall policies PiperOrigin-RevId: 612851792 Source-Link: https://github.com/googleapis/googleapis/commit/49ea2c0fc42dd48996b833f05a258ad7e8590d3d Source-Link: https://github.com/googleapis/googleapis-gen/commit/460fdcbbbe00f35b1c591b1f3ef0c77ebd3ce277 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDYwZmRjYmJiZTAwZjM1YjFjNTkxYjFmM2VmMGM3N2ViZDNjZTI3NyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * filter warning in generated tests * fix(deps): require google-auth >= 2.14.1 --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../cloud/errorreporting_v1beta1/__init__.py | 2 +- .../services/__init__.py | 2 +- .../services/error_group_service/__init__.py | 2 +- .../error_group_service/async_client.py | 74 ++- .../services/error_group_service/client.py | 298 +++++++++-- .../transports/__init__.py | 2 +- .../error_group_service/transports/base.py | 8 +- .../error_group_service/transports/grpc.py | 4 +- .../transports/grpc_asyncio.py | 4 +- .../error_group_service/transports/rest.py | 14 +- .../services/error_stats_service/__init__.py | 2 +- .../error_stats_service/async_client.py | 77 ++- .../services/error_stats_service/client.py | 301 +++++++++-- .../services/error_stats_service/pagers.py | 2 +- .../transports/__init__.py | 2 +- .../error_stats_service/transports/base.py | 8 +- .../error_stats_service/transports/grpc.py | 4 +- .../transports/grpc_asyncio.py | 4 +- .../error_stats_service/transports/rest.py | 11 +- .../report_errors_service/__init__.py | 2 +- .../report_errors_service/async_client.py | 71 ++- .../services/report_errors_service/client.py | 295 ++++++++-- .../transports/__init__.py | 2 +- .../report_errors_service/transports/base.py | 8 +- .../report_errors_service/transports/grpc.py | 4 +- .../transports/grpc_asyncio.py | 4 +- .../report_errors_service/transports/rest.py | 13 +- .../errorreporting_v1beta1/types/__init__.py | 2 +- .../errorreporting_v1beta1/types/common.py | 2 +- .../types/error_group_service.py | 2 +- .../types/error_stats_service.py | 2 +- .../types/report_errors_service.py | 2 +- .../google-cloud-error-reporting/pytest.ini | 2 + ...ted_error_group_service_get_group_async.py | 2 +- ...ated_error_group_service_get_group_sync.py | 2 +- ..._error_group_service_update_group_async.py | 2 +- ...d_error_group_service_update_group_sync.py | 2 +- ...error_stats_service_delete_events_async.py | 2 +- ..._error_stats_service_delete_events_sync.py | 2 +- ...d_error_stats_service_list_events_async.py | 2 +- ...ed_error_stats_service_list_events_sync.py | 2 +- ...or_stats_service_list_group_stats_async.py | 2 +- ...ror_stats_service_list_group_stats_sync.py | 2 +- ...errors_service_report_error_event_async.py | 2 +- ..._errors_service_report_error_event_sync.py | 2 +- ....devtools.clouderrorreporting.v1beta1.json | 2 +- .../fixup_errorreporting_v1beta1_keywords.py | 2 +- .../google-cloud-error-reporting/setup.py | 3 + .../testing/constraints-3.7.txt | 1 + .../testing/constraints-3.8.txt | 2 +- .../tests/__init__.py | 2 +- .../tests/unit/__init__.py | 2 +- .../tests/unit/gapic/__init__.py | 2 +- .../gapic/errorreporting_v1beta1/__init__.py | 2 +- .../test_error_group_service.py | 481 +++++++++++++++-- .../test_error_stats_service.py | 503 ++++++++++++++++-- .../test_report_errors_service.py | 489 ++++++++++++++++- 57 files changed, 2418 insertions(+), 329 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index e143641af905..f2c069f901f6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py index 89a37dc92c5a..8f6cf068242c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py index 96ac56f8c6b4..7adebfc3c86f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 45a13d3d0b2d..c65c9da40abe 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -38,9 +38,9 @@ from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore + OptionalRetry = Union[retries.AsyncRetry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service @@ -54,8 +54,12 @@ class ErrorGroupServiceAsyncClient: _client: ErrorGroupServiceClient + # Copy defaults from the synchronous client for use here. + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. DEFAULT_ENDPOINT = ErrorGroupServiceClient.DEFAULT_ENDPOINT DEFAULT_MTLS_ENDPOINT = ErrorGroupServiceClient.DEFAULT_MTLS_ENDPOINT + _DEFAULT_ENDPOINT_TEMPLATE = ErrorGroupServiceClient._DEFAULT_ENDPOINT_TEMPLATE + _DEFAULT_UNIVERSE = ErrorGroupServiceClient._DEFAULT_UNIVERSE error_group_path = staticmethod(ErrorGroupServiceClient.error_group_path) parse_error_group_path = staticmethod( @@ -164,6 +168,25 @@ def transport(self) -> ErrorGroupServiceTransport: """ return self._client.transport + @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 + get_transport_class = functools.partial( type(ErrorGroupServiceClient).get_transport_class, type(ErrorGroupServiceClient) ) @@ -176,7 +199,7 @@ def __init__( client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiates the error group service client. + """Instantiates the error group service async client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -187,23 +210,38 @@ def __init__( transport (Union[str, ~.ErrorGroupServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: + 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). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + 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 client certificate for mutual TLS transport. If + 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. @@ -312,6 +350,9 @@ async def sample_get_group(): ), ) + # Validate the universe domain. + self._client._validate_universe_domain() + # Send the request. response = await rpc( request, @@ -416,6 +457,9 @@ async def sample_update_group(): ), ) + # Validate the universe domain. + self._client._validate_universe_domain() + # Send the request. response = await rpc( request, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 34b0119b5724..5176c9c9f71e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ Union, cast, ) +import warnings from google.cloud.errorreporting_v1beta1 import gapic_version as package_version @@ -42,9 +43,9 @@ from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.Retry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service @@ -124,11 +125,15 @@ def _get_default_mtls_endpoint(api_endpoint): return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. DEFAULT_ENDPOINT = "clouderrorreporting.googleapis.com" DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore DEFAULT_ENDPOINT ) + _DEFAULT_ENDPOINT_TEMPLATE = "clouderrorreporting.{UNIVERSE_DOMAIN}" + _DEFAULT_UNIVERSE = "googleapis.com" + @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): """Creates an instance of this client using the provided credentials @@ -274,7 +279,7 @@ def parse_common_location_path(path: str) -> Dict[str, str]: def get_mtls_endpoint_and_cert_source( cls, client_options: Optional[client_options_lib.ClientOptions] = None ): - """Return the API endpoint and client cert source for mutual TLS. + """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 @@ -304,6 +309,11 @@ def get_mtls_endpoint_and_cert_source( 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") @@ -337,6 +347,178 @@ def get_mtls_endpoint_and_cert_source( 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 = ErrorGroupServiceClient._DEFAULT_UNIVERSE + if universe_domain != _default_universe: + raise MutualTLSChannelError( + f"mTLS is not supported in any universe other than {_default_universe}." + ) + api_endpoint = ErrorGroupServiceClient.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = ErrorGroupServiceClient._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 = ErrorGroupServiceClient._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 + + @staticmethod + def _compare_universes( + client_universe: str, credentials: ga_credentials.Credentials + ) -> bool: + """Returns True iff the universe domains used by the client and credentials match. + + Args: + client_universe (str): The universe domain configured via the client options. + credentials (ga_credentials.Credentials): The credentials being used in the client. + + Returns: + bool: True iff client_universe matches the universe in credentials. + + Raises: + ValueError: when client_universe does not match the universe in credentials. + """ + + default_universe = ErrorGroupServiceClient._DEFAULT_UNIVERSE + credentials_universe = getattr(credentials, "universe_domain", default_universe) + + if client_universe != credentials_universe: + raise ValueError( + "The configured universe domain " + f"({client_universe}) does not match the universe domain " + f"found in the credentials ({credentials_universe}). " + "If you haven't configured the universe domain explicitly, " + f"`{default_universe}` is the default." + ) + return True + + 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. + """ + self._is_universe_domain_valid = ( + self._is_universe_domain_valid + or ErrorGroupServiceClient._compare_universes( + self.universe_domain, self.transport._credentials + ) + ) + return self._is_universe_domain_valid + + @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 + def __init__( self, *, @@ -356,22 +538,32 @@ def __init__( transport (Union[str, ErrorGroupServiceTransport]): The transport to use. 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. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: + 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). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + 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 client certificate for mutual TLS transport. If + 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. @@ -382,17 +574,34 @@ def __init__( google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport creation failed for any reason. """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) + 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 + ) - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( - client_options + universe_domain_opt = getattr(self._client_options, "universe_domain", None) + + ( + self._use_client_cert, + self._use_mtls_endpoint, + self._universe_domain_env, + ) = ErrorGroupServiceClient._read_environment_variables() + self._client_cert_source = ErrorGroupServiceClient._get_client_cert_source( + self._client_options.client_cert_source, self._use_client_cert + ) + self._universe_domain = ErrorGroupServiceClient._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 - api_key_value = getattr(client_options, "api_key", None) + 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" @@ -401,20 +610,33 @@ def __init__( # Save or instantiate the transport. # Ordinarily, we provide the transport, but allowing a custom transport # instance provides an extensibility point for unusual situations. - if isinstance(transport, ErrorGroupServiceTransport): + transport_provided = isinstance(transport, ErrorGroupServiceTransport) + if transport_provided: # transport is a ErrorGroupServiceTransport instance. - if credentials or client_options.credentials_file or api_key_value: + if credentials or self._client_options.credentials_file or api_key_value: raise ValueError( "When providing a transport instance, " "provide its credentials directly." ) - if client_options.scopes: + if self._client_options.scopes: raise ValueError( "When providing a transport instance, provide its scopes " "directly." ) - self._transport = transport - else: + self._transport = cast(ErrorGroupServiceTransport, transport) + self._api_endpoint = self._transport.host + + self._api_endpoint = ( + self._api_endpoint + or ErrorGroupServiceClient._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( @@ -424,17 +646,17 @@ def __init__( api_key_value ) - Transport = type(self).get_transport_class(transport) + Transport = type(self).get_transport_class(cast(str, transport)) self._transport = Transport( credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, + 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=client_options.api_audience, + api_audience=self._client_options.api_audience, ) def get_group( @@ -534,6 +756,9 @@ def sample_get_group(): ), ) + # Validate the universe domain. + self._validate_universe_domain() + # Send the request. response = rpc( request, @@ -638,6 +863,9 @@ def sample_update_group(): ), ) + # Validate the universe domain. + self._validate_universe_domain() + # Send the request. response = rpc( request, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py index 91a3752f9228..ee3446ba0814 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 3cbc64167a9e..23026c11e2e5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -58,7 +58,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -121,6 +121,10 @@ def __init__( host += ":443" self._host = host + @property + def host(self): + return self._host + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index d97d8ad83170..3f1e94b73981 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -65,7 +65,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 0a1d829b407e..9c4fd6496730 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -110,7 +110,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py index 71c259c256a4..db1beb087bc3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -34,9 +34,9 @@ import warnings try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.Retry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.types import common @@ -174,7 +174,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -289,7 +289,6 @@ def __call__( query_params = json.loads( json_format.MessageToJson( transcoded_request["query_params"], - including_default_value_fields=False, use_integers_for_enums=True, ) ) @@ -375,9 +374,7 @@ def __call__( # Jsonify the request body body = json_format.MessageToJson( - transcoded_request["body"], - including_default_value_fields=False, - use_integers_for_enums=True, + transcoded_request["body"], use_integers_for_enums=True ) uri = transcoded_request["uri"] method = transcoded_request["method"] @@ -386,7 +383,6 @@ def __call__( query_params = json.loads( json_format.MessageToJson( transcoded_request["query_params"], - including_default_value_fields=False, use_integers_for_enums=True, ) ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py index 3eda02c73548..a31a509a9f79 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index db0bc3e1facc..d4d37ee3ea26 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -38,9 +38,9 @@ from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore + OptionalRetry = Union[retries.AsyncRetry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common @@ -57,8 +57,12 @@ class ErrorStatsServiceAsyncClient: _client: ErrorStatsServiceClient + # Copy defaults from the synchronous client for use here. + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. DEFAULT_ENDPOINT = ErrorStatsServiceClient.DEFAULT_ENDPOINT DEFAULT_MTLS_ENDPOINT = ErrorStatsServiceClient.DEFAULT_MTLS_ENDPOINT + _DEFAULT_ENDPOINT_TEMPLATE = ErrorStatsServiceClient._DEFAULT_ENDPOINT_TEMPLATE + _DEFAULT_UNIVERSE = ErrorStatsServiceClient._DEFAULT_UNIVERSE error_group_path = staticmethod(ErrorStatsServiceClient.error_group_path) parse_error_group_path = staticmethod( @@ -167,6 +171,25 @@ def transport(self) -> ErrorStatsServiceTransport: """ return self._client.transport + @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 + get_transport_class = functools.partial( type(ErrorStatsServiceClient).get_transport_class, type(ErrorStatsServiceClient) ) @@ -179,7 +202,7 @@ def __init__( client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiates the error stats service client. + """Instantiates the error stats service async client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -190,23 +213,38 @@ def __init__( transport (Union[str, ~.ErrorStatsServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: + 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). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + 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 client certificate for mutual TLS transport. If + 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. @@ -338,6 +376,9 @@ async def sample_list_group_stats(): ), ) + # Validate the universe domain. + self._client._validate_universe_domain() + # Send the request. response = await rpc( request, @@ -470,6 +511,9 @@ async def sample_list_events(): ), ) + # Validate the universe domain. + self._client._validate_universe_domain() + # Send the request. response = await rpc( request, @@ -586,6 +630,9 @@ async def sample_delete_events(): ), ) + # Validate the universe domain. + self._client._validate_universe_domain() + # Send the request. response = await rpc( request, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 75722883cf63..f0e61b21ca0e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ Union, cast, ) +import warnings from google.cloud.errorreporting_v1beta1 import gapic_version as package_version @@ -42,9 +43,9 @@ from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.Retry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common @@ -127,11 +128,15 @@ def _get_default_mtls_endpoint(api_endpoint): return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. DEFAULT_ENDPOINT = "clouderrorreporting.googleapis.com" DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore DEFAULT_ENDPOINT ) + _DEFAULT_ENDPOINT_TEMPLATE = "clouderrorreporting.{UNIVERSE_DOMAIN}" + _DEFAULT_UNIVERSE = "googleapis.com" + @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): """Creates an instance of this client using the provided credentials @@ -277,7 +282,7 @@ def parse_common_location_path(path: str) -> Dict[str, str]: def get_mtls_endpoint_and_cert_source( cls, client_options: Optional[client_options_lib.ClientOptions] = None ): - """Return the API endpoint and client cert source for mutual TLS. + """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 @@ -307,6 +312,11 @@ def get_mtls_endpoint_and_cert_source( 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") @@ -340,6 +350,178 @@ def get_mtls_endpoint_and_cert_source( 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 = ErrorStatsServiceClient._DEFAULT_UNIVERSE + if universe_domain != _default_universe: + raise MutualTLSChannelError( + f"mTLS is not supported in any universe other than {_default_universe}." + ) + api_endpoint = ErrorStatsServiceClient.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = ErrorStatsServiceClient._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 = ErrorStatsServiceClient._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 + + @staticmethod + def _compare_universes( + client_universe: str, credentials: ga_credentials.Credentials + ) -> bool: + """Returns True iff the universe domains used by the client and credentials match. + + Args: + client_universe (str): The universe domain configured via the client options. + credentials (ga_credentials.Credentials): The credentials being used in the client. + + Returns: + bool: True iff client_universe matches the universe in credentials. + + Raises: + ValueError: when client_universe does not match the universe in credentials. + """ + + default_universe = ErrorStatsServiceClient._DEFAULT_UNIVERSE + credentials_universe = getattr(credentials, "universe_domain", default_universe) + + if client_universe != credentials_universe: + raise ValueError( + "The configured universe domain " + f"({client_universe}) does not match the universe domain " + f"found in the credentials ({credentials_universe}). " + "If you haven't configured the universe domain explicitly, " + f"`{default_universe}` is the default." + ) + return True + + 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. + """ + self._is_universe_domain_valid = ( + self._is_universe_domain_valid + or ErrorStatsServiceClient._compare_universes( + self.universe_domain, self.transport._credentials + ) + ) + return self._is_universe_domain_valid + + @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 + def __init__( self, *, @@ -359,22 +541,32 @@ def __init__( transport (Union[str, ErrorStatsServiceTransport]): The transport to use. 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. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: + 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). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + 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 client certificate for mutual TLS transport. If + 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. @@ -385,17 +577,34 @@ def __init__( google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport creation failed for any reason. """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) + 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) - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( - client_options + ( + self._use_client_cert, + self._use_mtls_endpoint, + self._universe_domain_env, + ) = ErrorStatsServiceClient._read_environment_variables() + self._client_cert_source = ErrorStatsServiceClient._get_client_cert_source( + self._client_options.client_cert_source, self._use_client_cert ) + self._universe_domain = ErrorStatsServiceClient._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 - api_key_value = getattr(client_options, "api_key", None) + 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" @@ -404,20 +613,33 @@ def __init__( # Save or instantiate the transport. # Ordinarily, we provide the transport, but allowing a custom transport # instance provides an extensibility point for unusual situations. - if isinstance(transport, ErrorStatsServiceTransport): + transport_provided = isinstance(transport, ErrorStatsServiceTransport) + if transport_provided: # transport is a ErrorStatsServiceTransport instance. - if credentials or client_options.credentials_file or api_key_value: + if credentials or self._client_options.credentials_file or api_key_value: raise ValueError( "When providing a transport instance, " "provide its credentials directly." ) - if client_options.scopes: + if self._client_options.scopes: raise ValueError( "When providing a transport instance, provide its scopes " "directly." ) - self._transport = transport - else: + self._transport = cast(ErrorStatsServiceTransport, transport) + self._api_endpoint = self._transport.host + + self._api_endpoint = ( + self._api_endpoint + or ErrorStatsServiceClient._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( @@ -427,17 +649,17 @@ def __init__( api_key_value ) - Transport = type(self).get_transport_class(transport) + Transport = type(self).get_transport_class(cast(str, transport)) self._transport = Transport( credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, + 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=client_options.api_audience, + api_audience=self._client_options.api_audience, ) def list_group_stats( @@ -560,6 +782,9 @@ def sample_list_group_stats(): ), ) + # Validate the universe domain. + self._validate_universe_domain() + # Send the request. response = rpc( request, @@ -692,6 +917,9 @@ def sample_list_events(): ), ) + # Validate the universe domain. + self._validate_universe_domain() + # Send the request. response = rpc( request, @@ -808,6 +1036,9 @@ def sample_delete_events(): ), ) + # Validate the universe domain. + self._validate_universe_domain() + # Send the request. response = rpc( request, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index 9170d15987f1..4c333f7576e8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py index f8a5fe874f97..69c4f43c7c18 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 3899648bf1a5..17f383204bf4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -57,7 +57,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -120,6 +120,10 @@ def __init__( host += ":443" self._host = host + @property + def host(self): + return self._host + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 4e751ed4bd0f..55e2925c3d09 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -65,7 +65,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index b9b1be5f464d..6e284bce0106 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -110,7 +110,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py index b32a340e5780..f8a18a3089ec 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -34,9 +34,9 @@ import warnings try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.Retry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -209,7 +209,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -323,7 +323,6 @@ def __call__( query_params = json.loads( json_format.MessageToJson( transcoded_request["query_params"], - including_default_value_fields=False, use_integers_for_enums=True, ) ) @@ -414,7 +413,6 @@ def __call__( query_params = json.loads( json_format.MessageToJson( transcoded_request["query_params"], - including_default_value_fields=False, use_integers_for_enums=True, ) ) @@ -504,7 +502,6 @@ def __call__( query_params = json.loads( json_format.MessageToJson( transcoded_request["query_params"], - including_default_value_fields=False, use_integers_for_enums=True, ) ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py index 9b8290ad7806..d9e40c582be5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 40d3deb66f6a..03eb9ce0bf87 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -38,9 +38,9 @@ from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore + OptionalRetry = Union[retries.AsyncRetry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO @@ -53,8 +53,12 @@ class ReportErrorsServiceAsyncClient: _client: ReportErrorsServiceClient + # Copy defaults from the synchronous client for use here. + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. DEFAULT_ENDPOINT = ReportErrorsServiceClient.DEFAULT_ENDPOINT DEFAULT_MTLS_ENDPOINT = ReportErrorsServiceClient.DEFAULT_MTLS_ENDPOINT + _DEFAULT_ENDPOINT_TEMPLATE = ReportErrorsServiceClient._DEFAULT_ENDPOINT_TEMPLATE + _DEFAULT_UNIVERSE = ReportErrorsServiceClient._DEFAULT_UNIVERSE common_billing_account_path = staticmethod( ReportErrorsServiceClient.common_billing_account_path @@ -159,6 +163,25 @@ def transport(self) -> ReportErrorsServiceTransport: """ return self._client.transport + @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 + get_transport_class = functools.partial( type(ReportErrorsServiceClient).get_transport_class, type(ReportErrorsServiceClient), @@ -172,7 +195,7 @@ def __init__( client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: - """Instantiates the report errors service client. + """Instantiates the report errors service async client. Args: credentials (Optional[google.auth.credentials.Credentials]): The @@ -183,23 +206,38 @@ def __init__( transport (Union[str, ~.ReportErrorsServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: + 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). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + 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 client certificate for mutual TLS transport. If + 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. @@ -337,6 +375,9 @@ async def sample_report_error_event(): ), ) + # Validate the universe domain. + self._client._validate_universe_domain() + # Send the request. response = await rpc( request, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 60a9b15b8bb3..561dbc2aca22 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ Union, cast, ) +import warnings from google.cloud.errorreporting_v1beta1 import gapic_version as package_version @@ -42,9 +43,9 @@ from google.oauth2 import service_account # type: ignore try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.Retry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO @@ -123,11 +124,15 @@ def _get_default_mtls_endpoint(api_endpoint): return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. DEFAULT_ENDPOINT = "clouderrorreporting.googleapis.com" DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore DEFAULT_ENDPOINT ) + _DEFAULT_ENDPOINT_TEMPLATE = "clouderrorreporting.{UNIVERSE_DOMAIN}" + _DEFAULT_UNIVERSE = "googleapis.com" + @classmethod def from_service_account_info(cls, info: dict, *args, **kwargs): """Creates an instance of this client using the provided credentials @@ -256,7 +261,7 @@ def parse_common_location_path(path: str) -> Dict[str, str]: def get_mtls_endpoint_and_cert_source( cls, client_options: Optional[client_options_lib.ClientOptions] = None ): - """Return the API endpoint and client cert source for mutual TLS. + """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 @@ -286,6 +291,11 @@ def get_mtls_endpoint_and_cert_source( 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") @@ -319,6 +329,178 @@ def get_mtls_endpoint_and_cert_source( 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 = ReportErrorsServiceClient._DEFAULT_UNIVERSE + if universe_domain != _default_universe: + raise MutualTLSChannelError( + f"mTLS is not supported in any universe other than {_default_universe}." + ) + api_endpoint = ReportErrorsServiceClient.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = ReportErrorsServiceClient._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 = ReportErrorsServiceClient._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 + + @staticmethod + def _compare_universes( + client_universe: str, credentials: ga_credentials.Credentials + ) -> bool: + """Returns True iff the universe domains used by the client and credentials match. + + Args: + client_universe (str): The universe domain configured via the client options. + credentials (ga_credentials.Credentials): The credentials being used in the client. + + Returns: + bool: True iff client_universe matches the universe in credentials. + + Raises: + ValueError: when client_universe does not match the universe in credentials. + """ + + default_universe = ReportErrorsServiceClient._DEFAULT_UNIVERSE + credentials_universe = getattr(credentials, "universe_domain", default_universe) + + if client_universe != credentials_universe: + raise ValueError( + "The configured universe domain " + f"({client_universe}) does not match the universe domain " + f"found in the credentials ({credentials_universe}). " + "If you haven't configured the universe domain explicitly, " + f"`{default_universe}` is the default." + ) + return True + + 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. + """ + self._is_universe_domain_valid = ( + self._is_universe_domain_valid + or ReportErrorsServiceClient._compare_universes( + self.universe_domain, self.transport._credentials + ) + ) + return self._is_universe_domain_valid + + @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 + def __init__( self, *, @@ -338,22 +520,32 @@ def __init__( transport (Union[str, ReportErrorsServiceTransport]): The transport to use. 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. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: + 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). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + 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 client certificate for mutual TLS transport. If + 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. @@ -364,17 +556,34 @@ def __init__( google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport creation failed for any reason. """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) + 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) - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( - client_options + ( + self._use_client_cert, + self._use_mtls_endpoint, + self._universe_domain_env, + ) = ReportErrorsServiceClient._read_environment_variables() + self._client_cert_source = ReportErrorsServiceClient._get_client_cert_source( + self._client_options.client_cert_source, self._use_client_cert + ) + self._universe_domain = ReportErrorsServiceClient._get_universe_domain( + universe_domain_opt, self._universe_domain_env ) + self._api_endpoint = None # updated below, depending on `transport` - api_key_value = getattr(client_options, "api_key", None) + # Initialize the universe domain validation. + self._is_universe_domain_valid = False + + 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" @@ -383,20 +592,33 @@ def __init__( # Save or instantiate the transport. # Ordinarily, we provide the transport, but allowing a custom transport # instance provides an extensibility point for unusual situations. - if isinstance(transport, ReportErrorsServiceTransport): + transport_provided = isinstance(transport, ReportErrorsServiceTransport) + if transport_provided: # transport is a ReportErrorsServiceTransport instance. - if credentials or client_options.credentials_file or api_key_value: + if credentials or self._client_options.credentials_file or api_key_value: raise ValueError( "When providing a transport instance, " "provide its credentials directly." ) - if client_options.scopes: + if self._client_options.scopes: raise ValueError( "When providing a transport instance, provide its scopes " "directly." ) - self._transport = transport - else: + self._transport = cast(ReportErrorsServiceTransport, transport) + self._api_endpoint = self._transport.host + + self._api_endpoint = ( + self._api_endpoint + or ReportErrorsServiceClient._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( @@ -406,17 +628,17 @@ def __init__( api_key_value ) - Transport = type(self).get_transport_class(transport) + Transport = type(self).get_transport_class(cast(str, transport)) self._transport = Transport( credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, + 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=client_options.api_audience, + api_audience=self._client_options.api_audience, ) def report_error_event( @@ -545,6 +767,9 @@ def sample_report_error_event(): ), ) + # Validate the universe domain. + self._validate_universe_domain() + # Send the request. response = rpc( request, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py index d4d23aaf275d..bf8256bc40bb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 54a7eda6d111..052ff4a484e6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -57,7 +57,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -120,6 +120,10 @@ def __init__( host += ":443" self._host = host + @property + def host(self): + return self._host + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index e81bad5cbd83..5579c5b3efc7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -64,7 +64,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index d779e686e0e0..a3380e2575d8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -109,7 +109,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py index 3a9590033381..64aa2ae0ecdd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -34,9 +34,9 @@ import warnings try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore + OptionalRetry = Union[retries.Retry, object, None] # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service @@ -148,7 +148,7 @@ def __init__( Args: host (Optional[str]): - The hostname to connect to. + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). credentials (Optional[google.auth.credentials.Credentials]): The authorization credentials to attach to requests. These credentials identify the application to the service; if none @@ -263,9 +263,7 @@ def __call__( # Jsonify the request body body = json_format.MessageToJson( - transcoded_request["body"], - including_default_value_fields=False, - use_integers_for_enums=True, + transcoded_request["body"], use_integers_for_enums=True ) uri = transcoded_request["uri"] method = transcoded_request["method"] @@ -274,7 +272,6 @@ def __call__( query_params = json.loads( json_format.MessageToJson( transcoded_request["query_params"], - including_default_value_fields=False, use_integers_for_enums=True, ) ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py index 9b575327ecae..42ab63d453bd 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 6342410bf67a..d7517ecb2739 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index daecedde3a0a..d38bb52d176c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index cb0a5091c6a7..53e4a8f97a4f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index 7d6b5eeefd2c..1e719f92ea0f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/pytest.ini b/packages/google-cloud-error-reporting/pytest.ini index 5af70b60c274..1f8283a2f479 100644 --- a/packages/google-cloud-error-reporting/pytest.ini +++ b/packages/google-cloud-error-reporting/pytest.ini @@ -9,3 +9,5 @@ filterwarnings = # Remove once https://github.com/googleapis/python-api-common-protos/pull/187/files is merged ignore:.*pkg_resources.declare_namespace:DeprecationWarning ignore:.*pkg_resources is deprecated as an API:DeprecationWarning + # Remove warning once https://github.com/googleapis/gapic-generator-python/issues/1939 is fixed + ignore:get_mtls_endpoint_and_cert_source is deprecated.:DeprecationWarning diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py index 702f5cda3568..dc84897a07fe 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py index 074978d97ba0..e260be1fd9cf 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py index 8b3452989a1c..62a823683d02 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py index 7c38b173ca1a..7239a97f68d3 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py index a1cd90bf431d..4bf091380d3c 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py index f8c08c1bf1a0..6194de2342a8 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py index 1ec25ba7b8ba..49f25ac77416 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py index 81c7cc4c2f2b..99d4ca3238e2 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py index 60e47686fe61..8ffdf643f40a 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py index 16d09dc44a7c..a696194b0caf 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py index ba5907716b76..5dc4e264901c 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py index c1fb7124450a..f75f559136a6 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index 030caa5cac9e..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.10.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py index 813f0be69086..69a5a229ffe3 100644 --- a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py +++ b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py @@ -1,6 +1,6 @@ #! /usr/bin/env python3 # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 3f28c8d6545e..20c081aa906f 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -39,6 +39,9 @@ dependencies = [ "google-cloud-logging>=1.14.0, <4.0.0dev", + # Exclude incompatible versions of `google-auth` + # See https://github.com/googleapis/google-cloud-python/issues/12364 + "google-auth >= 2.14.1, <3.0.0dev,!=2.24.0,!=2.25.0", "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", "proto-plus >= 1.22.0, <2.0.0dev", "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt index 1b92bfe86a62..95877c438629 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt @@ -5,6 +5,7 @@ # e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", # Then this file should have google-cloud-foo==1.14.0 google-api-core==1.34.0 +google-auth==2.14.1 proto-plus==1.22.0 protobuf==3.19.5 google-cloud-logging==1.14.0 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.8.txt b/packages/google-cloud-error-reporting/testing/constraints-3.8.txt index ed7f9aed2559..3f30789875d5 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.8.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.8.txt @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # This constraints file is required for unit tests. # List all library dependencies and extras in this file. -google-api-core +google-api-core==2.14.0 proto-plus protobuf diff --git a/packages/google-cloud-error-reporting/tests/__init__.py b/packages/google-cloud-error-reporting/tests/__init__.py index 89a37dc92c5a..8f6cf068242c 100644 --- a/packages/google-cloud-error-reporting/tests/__init__.py +++ b/packages/google-cloud-error-reporting/tests/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/__init__.py b/packages/google-cloud-error-reporting/tests/unit/__init__.py index 89a37dc92c5a..8f6cf068242c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py index 89a37dc92c5a..8f6cf068242c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py index 89a37dc92c5a..8f6cf068242c 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index ea30d474b157..83f83a3c351b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import json import math import pytest +from google.api_core import api_core_version from proto.marshal.rules.dates import DurationRule, TimestampRule from proto.marshal.rules import wrappers from requests import Response @@ -72,6 +73,17 @@ def modify_default_endpoint(client): ) +# 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" @@ -102,6 +114,282 @@ def test__get_default_mtls_endpoint(): ) +def test__read_environment_variables(): + assert ErrorGroupServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + assert ErrorGroupServiceClient._read_environment_variables() == ( + True, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + assert ErrorGroupServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError) as excinfo: + ErrorGroupServiceClient._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 ErrorGroupServiceClient._read_environment_variables() == ( + False, + "never", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + assert ErrorGroupServiceClient._read_environment_variables() == ( + False, + "always", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}): + assert ErrorGroupServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError) as excinfo: + ErrorGroupServiceClient._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 ErrorGroupServiceClient._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 ErrorGroupServiceClient._get_client_cert_source(None, False) is None + assert ( + ErrorGroupServiceClient._get_client_cert_source( + mock_provided_cert_source, False + ) + is None + ) + assert ( + ErrorGroupServiceClient._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 ( + ErrorGroupServiceClient._get_client_cert_source(None, True) + is mock_default_cert_source + ) + assert ( + ErrorGroupServiceClient._get_client_cert_source( + mock_provided_cert_source, "true" + ) + is mock_provided_cert_source + ) + + +@mock.patch.object( + ErrorGroupServiceClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorGroupServiceClient), +) +@mock.patch.object( + ErrorGroupServiceAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorGroupServiceAsyncClient), +) +def test__get_api_endpoint(): + api_override = "foo.com" + mock_client_cert_source = mock.Mock() + default_universe = ErrorGroupServiceClient._DEFAULT_UNIVERSE + default_endpoint = ErrorGroupServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=default_universe + ) + mock_universe = "bar.com" + mock_endpoint = ErrorGroupServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=mock_universe + ) + + assert ( + ErrorGroupServiceClient._get_api_endpoint( + api_override, mock_client_cert_source, default_universe, "always" + ) + == api_override + ) + assert ( + ErrorGroupServiceClient._get_api_endpoint( + None, mock_client_cert_source, default_universe, "auto" + ) + == ErrorGroupServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ErrorGroupServiceClient._get_api_endpoint(None, None, default_universe, "auto") + == default_endpoint + ) + assert ( + ErrorGroupServiceClient._get_api_endpoint( + None, None, default_universe, "always" + ) + == ErrorGroupServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ErrorGroupServiceClient._get_api_endpoint( + None, mock_client_cert_source, default_universe, "always" + ) + == ErrorGroupServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ErrorGroupServiceClient._get_api_endpoint(None, None, mock_universe, "never") + == mock_endpoint + ) + assert ( + ErrorGroupServiceClient._get_api_endpoint(None, None, default_universe, "never") + == default_endpoint + ) + + with pytest.raises(MutualTLSChannelError) as excinfo: + ErrorGroupServiceClient._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 ( + ErrorGroupServiceClient._get_universe_domain( + client_universe_domain, universe_domain_env + ) + == client_universe_domain + ) + assert ( + ErrorGroupServiceClient._get_universe_domain(None, universe_domain_env) + == universe_domain_env + ) + assert ( + ErrorGroupServiceClient._get_universe_domain(None, None) + == ErrorGroupServiceClient._DEFAULT_UNIVERSE + ) + + with pytest.raises(ValueError) as excinfo: + ErrorGroupServiceClient._get_universe_domain("", None) + assert str(excinfo.value) == "Universe Domain cannot be an empty string." + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (ErrorGroupServiceClient, transports.ErrorGroupServiceGrpcTransport, "grpc"), + (ErrorGroupServiceClient, transports.ErrorGroupServiceRestTransport, "rest"), + ], +) +def test__validate_universe_domain(client_class, transport_class, transport_name): + client = client_class( + transport=transport_class(credentials=ga_credentials.AnonymousCredentials()) + ) + assert client._validate_universe_domain() == True + + # Test the case when universe is already validated. + assert client._validate_universe_domain() == True + + if transport_name == "grpc": + # Test the case where credentials are provided by the + # `local_channel_credentials`. The default universes in both match. + channel = grpc.secure_channel( + "http://localhost/", grpc.local_channel_credentials() + ) + client = client_class(transport=transport_class(channel=channel)) + assert client._validate_universe_domain() == True + + # Test the case where credentials do not exist: e.g. a transport is provided + # with no credentials. Validation should still succeed because there is no + # mismatch with non-existent credentials. + channel = grpc.secure_channel( + "http://localhost/", grpc.local_channel_credentials() + ) + transport = transport_class(channel=channel) + transport._credentials = None + client = client_class(transport=transport) + assert client._validate_universe_domain() == True + + # TODO: This is needed to cater for older versions of google-auth + # Make this test unconditional once the minimum supported version of + # google-auth becomes 2.23.0 or higher. + google_auth_major, google_auth_minor = [ + int(part) for part in google.auth.__version__.split(".")[0:2] + ] + if google_auth_major > 2 or (google_auth_major == 2 and google_auth_minor >= 23): + credentials = ga_credentials.AnonymousCredentials() + credentials._universe_domain = "foo.com" + # Test the case when there is a universe mismatch from the credentials. + client = client_class(transport=transport_class(credentials=credentials)) + with pytest.raises(ValueError) as excinfo: + client._validate_universe_domain() + assert ( + str(excinfo.value) + == "The configured universe domain (googleapis.com) does not match the universe domain found in the credentials (foo.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." + ) + + # Test the case when there is a universe mismatch from the client. + # + # TODO: Make this test unconditional once the minimum supported version of + # google-api-core becomes 2.15.0 or higher. + api_core_major, api_core_minor = [ + int(part) for part in api_core_version.__version__.split(".")[0:2] + ] + if api_core_major > 2 or (api_core_major == 2 and api_core_minor >= 15): + client = client_class( + client_options={"universe_domain": "bar.com"}, + transport=transport_class( + credentials=ga_credentials.AnonymousCredentials(), + ), + ) + with pytest.raises(ValueError) as excinfo: + client._validate_universe_domain() + assert ( + str(excinfo.value) + == "The configured universe domain (bar.com) does not match the universe domain found in the credentials (googleapis.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." + ) + + # Test that ValueError is raised if universe_domain is provided via client options and credentials is None + with pytest.raises(ValueError): + client._compare_universes("foo.bar", None) + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -217,13 +505,13 @@ def test_error_group_service_client_get_transport_class(): ) @mock.patch.object( ErrorGroupServiceClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ErrorGroupServiceClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorGroupServiceClient), ) @mock.patch.object( ErrorGroupServiceAsyncClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ErrorGroupServiceAsyncClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorGroupServiceAsyncClient), ) def test_error_group_service_client_client_options( client_class, transport_class, transport_name @@ -265,7 +553,9 @@ def test_error_group_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -295,15 +585,23 @@ def test_error_group_service_client_client_options( # 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): + 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): + 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") @@ -313,7 +611,9 @@ def test_error_group_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id="octopus", @@ -331,7 +631,9 @@ def test_error_group_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -384,13 +686,13 @@ def test_error_group_service_client_client_options( ) @mock.patch.object( ErrorGroupServiceClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ErrorGroupServiceClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorGroupServiceClient), ) @mock.patch.object( ErrorGroupServiceAsyncClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ErrorGroupServiceAsyncClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorGroupServiceAsyncClient), ) @mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) def test_error_group_service_client_mtls_env_auto( @@ -413,7 +715,9 @@ def test_error_group_service_client_mtls_env_auto( if use_client_cert_env == "false": expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT + 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 @@ -445,7 +749,9 @@ def test_error_group_service_client_mtls_env_auto( return_value=client_cert_source_callback, ): if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT + expected_host = client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ) expected_client_cert_source = None else: expected_host = client.DEFAULT_MTLS_ENDPOINT @@ -479,7 +785,9 @@ def test_error_group_service_client_mtls_env_auto( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -569,6 +877,115 @@ def test_error_group_service_client_get_mtls_endpoint_and_cert_source(client_cla 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", [ErrorGroupServiceClient, ErrorGroupServiceAsyncClient] +) +@mock.patch.object( + ErrorGroupServiceClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorGroupServiceClient), +) +@mock.patch.object( + ErrorGroupServiceAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorGroupServiceAsyncClient), +) +def test_error_group_service_client_client_api_endpoint(client_class): + mock_client_cert_source = client_cert_source_callback + api_override = "foo.com" + default_universe = ErrorGroupServiceClient._DEFAULT_UNIVERSE + default_endpoint = ErrorGroupServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=default_universe + ) + mock_universe = "bar.com" + mock_endpoint = ErrorGroupServiceClient._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", @@ -595,7 +1012,9 @@ def test_error_group_service_client_client_options_scopes( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=["1", "2"], client_cert_source_for_mtls=None, quota_project_id=None, @@ -640,7 +1059,9 @@ def test_error_group_service_client_client_options_credentials_file( patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -700,7 +1121,9 @@ def test_error_group_service_client_create_channel_credentials_file( patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -1264,11 +1687,7 @@ def test_get_group_rest_required_fields( request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + json_format.MessageToJson(pb_request, use_integers_for_enums=False) ) # verify fields with default values are dropped @@ -1608,11 +2027,7 @@ def test_update_group_rest_required_fields( request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + json_format.MessageToJson(pb_request, use_integers_for_enums=False) ) # verify fields with default values are dropped @@ -1857,7 +2272,7 @@ def test_credentials_transport_error(): ) # It is an error to provide an api_key and a credential. - options = mock.Mock() + options = client_options.ClientOptions() options.api_key = "api_key" with pytest.raises(ValueError): client = ErrorGroupServiceClient( @@ -2580,7 +2995,9 @@ def test_api_key_credentials(client_class, transport_class): patched.assert_called_once_with( credentials=mock_cred, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 29e94f34ac7e..0a0a465172cb 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import json import math import pytest +from google.api_core import api_core_version from proto.marshal.rules.dates import DurationRule, TimestampRule from proto.marshal.rules import wrappers from requests import Response @@ -75,6 +76,17 @@ def modify_default_endpoint(client): ) +# 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" @@ -105,6 +117,282 @@ def test__get_default_mtls_endpoint(): ) +def test__read_environment_variables(): + assert ErrorStatsServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + assert ErrorStatsServiceClient._read_environment_variables() == ( + True, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + assert ErrorStatsServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError) as excinfo: + ErrorStatsServiceClient._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 ErrorStatsServiceClient._read_environment_variables() == ( + False, + "never", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + assert ErrorStatsServiceClient._read_environment_variables() == ( + False, + "always", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}): + assert ErrorStatsServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError) as excinfo: + ErrorStatsServiceClient._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 ErrorStatsServiceClient._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 ErrorStatsServiceClient._get_client_cert_source(None, False) is None + assert ( + ErrorStatsServiceClient._get_client_cert_source( + mock_provided_cert_source, False + ) + is None + ) + assert ( + ErrorStatsServiceClient._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 ( + ErrorStatsServiceClient._get_client_cert_source(None, True) + is mock_default_cert_source + ) + assert ( + ErrorStatsServiceClient._get_client_cert_source( + mock_provided_cert_source, "true" + ) + is mock_provided_cert_source + ) + + +@mock.patch.object( + ErrorStatsServiceClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorStatsServiceClient), +) +@mock.patch.object( + ErrorStatsServiceAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorStatsServiceAsyncClient), +) +def test__get_api_endpoint(): + api_override = "foo.com" + mock_client_cert_source = mock.Mock() + default_universe = ErrorStatsServiceClient._DEFAULT_UNIVERSE + default_endpoint = ErrorStatsServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=default_universe + ) + mock_universe = "bar.com" + mock_endpoint = ErrorStatsServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=mock_universe + ) + + assert ( + ErrorStatsServiceClient._get_api_endpoint( + api_override, mock_client_cert_source, default_universe, "always" + ) + == api_override + ) + assert ( + ErrorStatsServiceClient._get_api_endpoint( + None, mock_client_cert_source, default_universe, "auto" + ) + == ErrorStatsServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ErrorStatsServiceClient._get_api_endpoint(None, None, default_universe, "auto") + == default_endpoint + ) + assert ( + ErrorStatsServiceClient._get_api_endpoint( + None, None, default_universe, "always" + ) + == ErrorStatsServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ErrorStatsServiceClient._get_api_endpoint( + None, mock_client_cert_source, default_universe, "always" + ) + == ErrorStatsServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ErrorStatsServiceClient._get_api_endpoint(None, None, mock_universe, "never") + == mock_endpoint + ) + assert ( + ErrorStatsServiceClient._get_api_endpoint(None, None, default_universe, "never") + == default_endpoint + ) + + with pytest.raises(MutualTLSChannelError) as excinfo: + ErrorStatsServiceClient._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 ( + ErrorStatsServiceClient._get_universe_domain( + client_universe_domain, universe_domain_env + ) + == client_universe_domain + ) + assert ( + ErrorStatsServiceClient._get_universe_domain(None, universe_domain_env) + == universe_domain_env + ) + assert ( + ErrorStatsServiceClient._get_universe_domain(None, None) + == ErrorStatsServiceClient._DEFAULT_UNIVERSE + ) + + with pytest.raises(ValueError) as excinfo: + ErrorStatsServiceClient._get_universe_domain("", None) + assert str(excinfo.value) == "Universe Domain cannot be an empty string." + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (ErrorStatsServiceClient, transports.ErrorStatsServiceGrpcTransport, "grpc"), + (ErrorStatsServiceClient, transports.ErrorStatsServiceRestTransport, "rest"), + ], +) +def test__validate_universe_domain(client_class, transport_class, transport_name): + client = client_class( + transport=transport_class(credentials=ga_credentials.AnonymousCredentials()) + ) + assert client._validate_universe_domain() == True + + # Test the case when universe is already validated. + assert client._validate_universe_domain() == True + + if transport_name == "grpc": + # Test the case where credentials are provided by the + # `local_channel_credentials`. The default universes in both match. + channel = grpc.secure_channel( + "http://localhost/", grpc.local_channel_credentials() + ) + client = client_class(transport=transport_class(channel=channel)) + assert client._validate_universe_domain() == True + + # Test the case where credentials do not exist: e.g. a transport is provided + # with no credentials. Validation should still succeed because there is no + # mismatch with non-existent credentials. + channel = grpc.secure_channel( + "http://localhost/", grpc.local_channel_credentials() + ) + transport = transport_class(channel=channel) + transport._credentials = None + client = client_class(transport=transport) + assert client._validate_universe_domain() == True + + # TODO: This is needed to cater for older versions of google-auth + # Make this test unconditional once the minimum supported version of + # google-auth becomes 2.23.0 or higher. + google_auth_major, google_auth_minor = [ + int(part) for part in google.auth.__version__.split(".")[0:2] + ] + if google_auth_major > 2 or (google_auth_major == 2 and google_auth_minor >= 23): + credentials = ga_credentials.AnonymousCredentials() + credentials._universe_domain = "foo.com" + # Test the case when there is a universe mismatch from the credentials. + client = client_class(transport=transport_class(credentials=credentials)) + with pytest.raises(ValueError) as excinfo: + client._validate_universe_domain() + assert ( + str(excinfo.value) + == "The configured universe domain (googleapis.com) does not match the universe domain found in the credentials (foo.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." + ) + + # Test the case when there is a universe mismatch from the client. + # + # TODO: Make this test unconditional once the minimum supported version of + # google-api-core becomes 2.15.0 or higher. + api_core_major, api_core_minor = [ + int(part) for part in api_core_version.__version__.split(".")[0:2] + ] + if api_core_major > 2 or (api_core_major == 2 and api_core_minor >= 15): + client = client_class( + client_options={"universe_domain": "bar.com"}, + transport=transport_class( + credentials=ga_credentials.AnonymousCredentials(), + ), + ) + with pytest.raises(ValueError) as excinfo: + client._validate_universe_domain() + assert ( + str(excinfo.value) + == "The configured universe domain (bar.com) does not match the universe domain found in the credentials (googleapis.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." + ) + + # Test that ValueError is raised if universe_domain is provided via client options and credentials is None + with pytest.raises(ValueError): + client._compare_universes("foo.bar", None) + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -220,13 +508,13 @@ def test_error_stats_service_client_get_transport_class(): ) @mock.patch.object( ErrorStatsServiceClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ErrorStatsServiceClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorStatsServiceClient), ) @mock.patch.object( ErrorStatsServiceAsyncClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ErrorStatsServiceAsyncClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorStatsServiceAsyncClient), ) def test_error_stats_service_client_client_options( client_class, transport_class, transport_name @@ -268,7 +556,9 @@ def test_error_stats_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -298,15 +588,23 @@ def test_error_stats_service_client_client_options( # 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): + 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): + 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") @@ -316,7 +614,9 @@ def test_error_stats_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id="octopus", @@ -334,7 +634,9 @@ def test_error_stats_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -387,13 +689,13 @@ def test_error_stats_service_client_client_options( ) @mock.patch.object( ErrorStatsServiceClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ErrorStatsServiceClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorStatsServiceClient), ) @mock.patch.object( ErrorStatsServiceAsyncClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ErrorStatsServiceAsyncClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorStatsServiceAsyncClient), ) @mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) def test_error_stats_service_client_mtls_env_auto( @@ -416,7 +718,9 @@ def test_error_stats_service_client_mtls_env_auto( if use_client_cert_env == "false": expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT + 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 @@ -448,7 +752,9 @@ def test_error_stats_service_client_mtls_env_auto( return_value=client_cert_source_callback, ): if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT + expected_host = client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ) expected_client_cert_source = None else: expected_host = client.DEFAULT_MTLS_ENDPOINT @@ -482,7 +788,9 @@ def test_error_stats_service_client_mtls_env_auto( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -572,6 +880,115 @@ def test_error_stats_service_client_get_mtls_endpoint_and_cert_source(client_cla 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", [ErrorStatsServiceClient, ErrorStatsServiceAsyncClient] +) +@mock.patch.object( + ErrorStatsServiceClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorStatsServiceClient), +) +@mock.patch.object( + ErrorStatsServiceAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ErrorStatsServiceAsyncClient), +) +def test_error_stats_service_client_client_api_endpoint(client_class): + mock_client_cert_source = client_cert_source_callback + api_override = "foo.com" + default_universe = ErrorStatsServiceClient._DEFAULT_UNIVERSE + default_endpoint = ErrorStatsServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=default_universe + ) + mock_universe = "bar.com" + mock_endpoint = ErrorStatsServiceClient._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", @@ -598,7 +1015,9 @@ def test_error_stats_service_client_client_options_scopes( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=["1", "2"], client_cert_source_for_mtls=None, quota_project_id=None, @@ -643,7 +1062,9 @@ def test_error_stats_service_client_client_options_credentials_file( patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -703,7 +1124,9 @@ def test_error_stats_service_client_create_channel_credentials_file( patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -998,7 +1421,7 @@ async def test_list_group_stats_flattened_error_async(): def test_list_group_stats_pager(transport_name: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), transport=transport_name, ) @@ -1048,7 +1471,7 @@ def test_list_group_stats_pager(transport_name: str = "grpc"): def test_list_group_stats_pages(transport_name: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), transport=transport_name, ) @@ -1090,7 +1513,7 @@ def test_list_group_stats_pages(transport_name: str = "grpc"): @pytest.mark.asyncio async def test_list_group_stats_async_pager(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1142,7 +1565,7 @@ async def test_list_group_stats_async_pager(): @pytest.mark.asyncio async def test_list_group_stats_async_pages(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1432,7 +1855,7 @@ async def test_list_events_flattened_error_async(): def test_list_events_pager(transport_name: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), transport=transport_name, ) @@ -1482,7 +1905,7 @@ def test_list_events_pager(transport_name: str = "grpc"): def test_list_events_pages(transport_name: str = "grpc"): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), transport=transport_name, ) @@ -1524,7 +1947,7 @@ def test_list_events_pages(transport_name: str = "grpc"): @pytest.mark.asyncio async def test_list_events_async_pager(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1574,7 +1997,7 @@ async def test_list_events_async_pager(): @pytest.mark.asyncio async def test_list_events_async_pages(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1897,11 +2320,7 @@ def test_list_group_stats_rest_required_fields( request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + json_format.MessageToJson(pb_request, use_integers_for_enums=False) ) # verify fields with default values are dropped @@ -2260,11 +2679,7 @@ def test_list_events_rest_required_fields( request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + json_format.MessageToJson(pb_request, use_integers_for_enums=False) ) # verify fields with default values are dropped @@ -2624,11 +3039,7 @@ def test_delete_events_rest_required_fields( request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + json_format.MessageToJson(pb_request, use_integers_for_enums=False) ) # verify fields with default values are dropped @@ -2878,7 +3289,7 @@ def test_credentials_transport_error(): ) # It is an error to provide an api_key and a credential. - options = mock.Mock() + options = client_options.ClientOptions() options.api_key = "api_key" with pytest.raises(ValueError): client = ErrorStatsServiceClient( @@ -3605,7 +4016,9 @@ def test_api_key_credentials(client_class, transport_class): patched.assert_called_once_with( credentials=mock_cred, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 1f84c2c1bc6c..7a1e1f167c50 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import json import math import pytest +from google.api_core import api_core_version from proto.marshal.rules.dates import DurationRule, TimestampRule from proto.marshal.rules import wrappers from requests import Response @@ -75,6 +76,17 @@ def modify_default_endpoint(client): ) +# 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" @@ -105,6 +117,296 @@ def test__get_default_mtls_endpoint(): ) +def test__read_environment_variables(): + assert ReportErrorsServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + assert ReportErrorsServiceClient._read_environment_variables() == ( + True, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + assert ReportErrorsServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError) as excinfo: + ReportErrorsServiceClient._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 ReportErrorsServiceClient._read_environment_variables() == ( + False, + "never", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + assert ReportErrorsServiceClient._read_environment_variables() == ( + False, + "always", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}): + assert ReportErrorsServiceClient._read_environment_variables() == ( + False, + "auto", + None, + ) + + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError) as excinfo: + ReportErrorsServiceClient._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 ReportErrorsServiceClient._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 ReportErrorsServiceClient._get_client_cert_source(None, False) is None + assert ( + ReportErrorsServiceClient._get_client_cert_source( + mock_provided_cert_source, False + ) + is None + ) + assert ( + ReportErrorsServiceClient._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 ( + ReportErrorsServiceClient._get_client_cert_source(None, True) + is mock_default_cert_source + ) + assert ( + ReportErrorsServiceClient._get_client_cert_source( + mock_provided_cert_source, "true" + ) + is mock_provided_cert_source + ) + + +@mock.patch.object( + ReportErrorsServiceClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ReportErrorsServiceClient), +) +@mock.patch.object( + ReportErrorsServiceAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ReportErrorsServiceAsyncClient), +) +def test__get_api_endpoint(): + api_override = "foo.com" + mock_client_cert_source = mock.Mock() + default_universe = ReportErrorsServiceClient._DEFAULT_UNIVERSE + default_endpoint = ReportErrorsServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=default_universe + ) + mock_universe = "bar.com" + mock_endpoint = ReportErrorsServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=mock_universe + ) + + assert ( + ReportErrorsServiceClient._get_api_endpoint( + api_override, mock_client_cert_source, default_universe, "always" + ) + == api_override + ) + assert ( + ReportErrorsServiceClient._get_api_endpoint( + None, mock_client_cert_source, default_universe, "auto" + ) + == ReportErrorsServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ReportErrorsServiceClient._get_api_endpoint( + None, None, default_universe, "auto" + ) + == default_endpoint + ) + assert ( + ReportErrorsServiceClient._get_api_endpoint( + None, None, default_universe, "always" + ) + == ReportErrorsServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ReportErrorsServiceClient._get_api_endpoint( + None, mock_client_cert_source, default_universe, "always" + ) + == ReportErrorsServiceClient.DEFAULT_MTLS_ENDPOINT + ) + assert ( + ReportErrorsServiceClient._get_api_endpoint(None, None, mock_universe, "never") + == mock_endpoint + ) + assert ( + ReportErrorsServiceClient._get_api_endpoint( + None, None, default_universe, "never" + ) + == default_endpoint + ) + + with pytest.raises(MutualTLSChannelError) as excinfo: + ReportErrorsServiceClient._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 ( + ReportErrorsServiceClient._get_universe_domain( + client_universe_domain, universe_domain_env + ) + == client_universe_domain + ) + assert ( + ReportErrorsServiceClient._get_universe_domain(None, universe_domain_env) + == universe_domain_env + ) + assert ( + ReportErrorsServiceClient._get_universe_domain(None, None) + == ReportErrorsServiceClient._DEFAULT_UNIVERSE + ) + + with pytest.raises(ValueError) as excinfo: + ReportErrorsServiceClient._get_universe_domain("", None) + assert str(excinfo.value) == "Universe Domain cannot be an empty string." + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceGrpcTransport, + "grpc", + ), + ( + ReportErrorsServiceClient, + transports.ReportErrorsServiceRestTransport, + "rest", + ), + ], +) +def test__validate_universe_domain(client_class, transport_class, transport_name): + client = client_class( + transport=transport_class(credentials=ga_credentials.AnonymousCredentials()) + ) + assert client._validate_universe_domain() == True + + # Test the case when universe is already validated. + assert client._validate_universe_domain() == True + + if transport_name == "grpc": + # Test the case where credentials are provided by the + # `local_channel_credentials`. The default universes in both match. + channel = grpc.secure_channel( + "http://localhost/", grpc.local_channel_credentials() + ) + client = client_class(transport=transport_class(channel=channel)) + assert client._validate_universe_domain() == True + + # Test the case where credentials do not exist: e.g. a transport is provided + # with no credentials. Validation should still succeed because there is no + # mismatch with non-existent credentials. + channel = grpc.secure_channel( + "http://localhost/", grpc.local_channel_credentials() + ) + transport = transport_class(channel=channel) + transport._credentials = None + client = client_class(transport=transport) + assert client._validate_universe_domain() == True + + # TODO: This is needed to cater for older versions of google-auth + # Make this test unconditional once the minimum supported version of + # google-auth becomes 2.23.0 or higher. + google_auth_major, google_auth_minor = [ + int(part) for part in google.auth.__version__.split(".")[0:2] + ] + if google_auth_major > 2 or (google_auth_major == 2 and google_auth_minor >= 23): + credentials = ga_credentials.AnonymousCredentials() + credentials._universe_domain = "foo.com" + # Test the case when there is a universe mismatch from the credentials. + client = client_class(transport=transport_class(credentials=credentials)) + with pytest.raises(ValueError) as excinfo: + client._validate_universe_domain() + assert ( + str(excinfo.value) + == "The configured universe domain (googleapis.com) does not match the universe domain found in the credentials (foo.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." + ) + + # Test the case when there is a universe mismatch from the client. + # + # TODO: Make this test unconditional once the minimum supported version of + # google-api-core becomes 2.15.0 or higher. + api_core_major, api_core_minor = [ + int(part) for part in api_core_version.__version__.split(".")[0:2] + ] + if api_core_major > 2 or (api_core_major == 2 and api_core_minor >= 15): + client = client_class( + client_options={"universe_domain": "bar.com"}, + transport=transport_class( + credentials=ga_credentials.AnonymousCredentials(), + ), + ) + with pytest.raises(ValueError) as excinfo: + client._validate_universe_domain() + assert ( + str(excinfo.value) + == "The configured universe domain (bar.com) does not match the universe domain found in the credentials (googleapis.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." + ) + + # Test that ValueError is raised if universe_domain is provided via client options and credentials is None + with pytest.raises(ValueError): + client._compare_universes("foo.bar", None) + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -228,13 +530,13 @@ def test_report_errors_service_client_get_transport_class(): ) @mock.patch.object( ReportErrorsServiceClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ReportErrorsServiceClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ReportErrorsServiceClient), ) @mock.patch.object( ReportErrorsServiceAsyncClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ReportErrorsServiceAsyncClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ReportErrorsServiceAsyncClient), ) def test_report_errors_service_client_client_options( client_class, transport_class, transport_name @@ -276,7 +578,9 @@ def test_report_errors_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -306,15 +610,23 @@ def test_report_errors_service_client_client_options( # 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): + 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): + 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") @@ -324,7 +636,9 @@ def test_report_errors_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id="octopus", @@ -342,7 +656,9 @@ def test_report_errors_service_client_client_options( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -395,13 +711,13 @@ def test_report_errors_service_client_client_options( ) @mock.patch.object( ReportErrorsServiceClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ReportErrorsServiceClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ReportErrorsServiceClient), ) @mock.patch.object( ReportErrorsServiceAsyncClient, - "DEFAULT_ENDPOINT", - modify_default_endpoint(ReportErrorsServiceAsyncClient), + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ReportErrorsServiceAsyncClient), ) @mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) def test_report_errors_service_client_mtls_env_auto( @@ -424,7 +740,9 @@ def test_report_errors_service_client_mtls_env_auto( if use_client_cert_env == "false": expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT + 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 @@ -456,7 +774,9 @@ def test_report_errors_service_client_mtls_env_auto( return_value=client_cert_source_callback, ): if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT + expected_host = client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ) expected_client_cert_source = None else: expected_host = client.DEFAULT_MTLS_ENDPOINT @@ -490,7 +810,9 @@ def test_report_errors_service_client_mtls_env_auto( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -580,6 +902,115 @@ def test_report_errors_service_client_get_mtls_endpoint_and_cert_source(client_c 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", [ReportErrorsServiceClient, ReportErrorsServiceAsyncClient] +) +@mock.patch.object( + ReportErrorsServiceClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ReportErrorsServiceClient), +) +@mock.patch.object( + ReportErrorsServiceAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template(ReportErrorsServiceAsyncClient), +) +def test_report_errors_service_client_client_api_endpoint(client_class): + mock_client_cert_source = client_cert_source_callback + api_override = "foo.com" + default_universe = ReportErrorsServiceClient._DEFAULT_UNIVERSE + default_endpoint = ReportErrorsServiceClient._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=default_universe + ) + mock_universe = "bar.com" + mock_endpoint = ReportErrorsServiceClient._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", @@ -614,7 +1045,9 @@ def test_report_errors_service_client_client_options_scopes( patched.assert_called_once_with( credentials=None, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=["1", "2"], client_cert_source_for_mtls=None, quota_project_id=None, @@ -659,7 +1092,9 @@ def test_report_errors_service_client_client_options_credentials_file( patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -719,7 +1154,9 @@ def test_report_errors_service_client_create_channel_credentials_file( patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, @@ -1159,11 +1596,7 @@ def test_report_error_event_rest_required_fields( request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + json_format.MessageToJson(pb_request, use_integers_for_enums=False) ) # verify fields with default values are dropped @@ -1433,7 +1866,7 @@ def test_credentials_transport_error(): ) # It is an error to provide an api_key and a credential. - options = mock.Mock() + options = client_options.ClientOptions() options.api_key = "api_key" with pytest.raises(ValueError): client = ReportErrorsServiceClient( @@ -2127,7 +2560,9 @@ def test_api_key_credentials(client_class, transport_class): patched.assert_called_once_with( credentials=mock_cred, credentials_file=None, - host=client.DEFAULT_ENDPOINT, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + ), scopes=None, client_cert_source_for_mtls=None, quota_project_id=None, From a9fa7296e5a6406ab20749c67929e085980b2075 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 11:21:36 -0400 Subject: [PATCH 434/467] chore: remove nox uninstall/reinstall from python build.sh template (#490) Source-Link: https://github.com/googleapis/synthtool/commit/26358881238150aa51939ccc82b78c0e33d3bc9c Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:007e7e46ef05e5a32e652bd0062be02f6ff050347d91e0f357b28caab0a042c4 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- packages/google-cloud-error-reporting/.kokoro/build.sh | 7 ------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index e4e943e0259a..af879fdecde7 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:98f3afd11308259de6e828e37376d18867fd321aba07826e29e4f8d9cab56bad -# created: 2024-02-27T15:56:18.442440378Z + digest: sha256:007e7e46ef05e5a32e652bd0062be02f6ff050347d91e0f357b28caab0a042c4 +# created: 2024-03-15T14:27:15.879623611Z diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh index 77234eac0d94..8ede533391db 100755 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -33,13 +33,6 @@ export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/service-account.json # Setup project id. export PROJECT_ID=$(cat "${KOKORO_GFILE_DIR}/project-id.json") -# Remove old nox -python3 -m pip uninstall --yes --quiet nox-automation - -# Install nox -python3 -m pip install --upgrade --quiet nox -python3 -m nox --version - # If this is a continuous build, send the test log to the FlakyBot. # See https://github.com/googleapis/repo-automation-bots/tree/main/packages/flakybot. if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"continuous"* ]]; then From ec06c9ac9f4cc3ab15ed18b5ef4fb479fc33ba98 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 14:10:18 -0400 Subject: [PATCH 435/467] chore(python): add requirements for docs build (#491) Source-Link: https://github.com/googleapis/synthtool/commit/85c23b6bc4352c1b0674848eaeb4e48645aeda6b Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:3741fd1f5f5150378563c76afa06bcc12777b5fe54c5ee01115218f83872134f Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/docker/docs/Dockerfile | 4 ++ .../.kokoro/docker/docs/requirements.in | 1 + .../.kokoro/docker/docs/requirements.txt | 38 +++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in create mode 100644 packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index af879fdecde7..5d9542b1cb21 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:007e7e46ef05e5a32e652bd0062be02f6ff050347d91e0f357b28caab0a042c4 -# created: 2024-03-15T14:27:15.879623611Z + digest: sha256:3741fd1f5f5150378563c76afa06bcc12777b5fe54c5ee01115218f83872134f +# created: 2024-03-15T16:26:15.743347415Z diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile index 8e39a2cc438d..bdaf39fe22d0 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -80,4 +80,8 @@ RUN wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ # Test pip RUN python3 -m pip +# Install build requirements +COPY requirements.txt /requirements.txt +RUN python3 -m pip install --require-hashes -r requirements.txt + CMD ["python3.8"] diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in new file mode 100644 index 000000000000..816817c672a1 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in @@ -0,0 +1 @@ +nox diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt new file mode 100644 index 000000000000..0e5d70f20f83 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt @@ -0,0 +1,38 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --generate-hashes requirements.in +# +argcomplete==3.2.3 \ + --hash=sha256:bf7900329262e481be5a15f56f19736b376df6f82ed27576fa893652c5de6c23 \ + --hash=sha256:c12355e0494c76a2a7b73e3a59b09024ca0ba1e279fb9ed6c1b82d5b74b6a70c + # via nox +colorlog==6.8.2 \ + --hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \ + --hash=sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33 + # via nox +distlib==0.3.8 \ + --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ + --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 + # via virtualenv +filelock==3.13.1 \ + --hash=sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e \ + --hash=sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c + # via virtualenv +nox==2024.3.2 \ + --hash=sha256:e53514173ac0b98dd47585096a55572fe504fecede58ced708979184d05440be \ + --hash=sha256:f521ae08a15adbf5e11f16cb34e8d0e6ea521e0b92868f684e91677deb974553 + # via -r requirements.in +packaging==24.0 \ + --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ + --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 + # via nox +platformdirs==4.2.0 \ + --hash=sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068 \ + --hash=sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768 + # via virtualenv +virtualenv==20.25.1 \ + --hash=sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a \ + --hash=sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197 + # via nox From 3ed4d7027c5326e5c9e01c90d22e4cb051024f49 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:16:24 -0400 Subject: [PATCH 436/467] chore: Update gapic-generator-python to v1.16.1 (#493) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.16.1 PiperOrigin-RevId: 618243632 Source-Link: https://github.com/googleapis/googleapis/commit/078a38bd240827be8e69a5b62993380d1b047994 Source-Link: https://github.com/googleapis/googleapis-gen/commit/7af768c3f8ce58994482350f7401173329950a31 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiN2FmNzY4YzNmOGNlNTg5OTQ0ODIzNTBmNzQwMTE3MzMyOTk1MGEzMSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * revert changes to testing/constraints-3.8.txt --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../google-cloud-error-reporting/owlbot.py | 1 + .../test_error_group_service.py | 108 +++++++++++- .../test_error_stats_service.py | 166 +++++++++++++++++- .../test_report_errors_service.py | 56 +++++- 4 files changed, 319 insertions(+), 12 deletions(-) diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 0a02758fce45..ded8fbe79d47 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -43,6 +43,7 @@ "google/cloud/errorreporting/", "setup.py", "testing/constraints-3.7.txt", + "testing/constraints-3.8.txt", ], ) s.remove_staging_dirs() diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 83f83a3c351b..647c829d6c19 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1191,7 +1191,8 @@ def test_get_group(request_type, transport: str = "grpc"): # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.GetGroupRequest() + request = error_group_service.GetGroupRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, common.ErrorGroup) @@ -1216,6 +1217,56 @@ def test_get_group_empty_call(): assert args[0] == error_group_service.GetGroupRequest() +def test_get_group_non_empty_request_with_auto_populated_field(): + # This test is a coverage failsafe to make sure that UUID4 fields are + # automatically populated, according to AIP-4235, with non-empty requests. + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Populate all string fields in the request which are not UUID4 + # since we want to check that UUID4 are populated automatically + # if they meet the requirements of AIP 4235. + request = error_group_service.GetGroupRequest( + group_name="group_name_value", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_group), "__call__") as call: + client.get_group(request=request) + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_group_service.GetGroupRequest( + group_name="group_name_value", + ) + + +@pytest.mark.asyncio +async def test_get_group_empty_call_async(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorGroupServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_group), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) + ) + response = await client.get_group() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_group_service.GetGroupRequest() + + @pytest.mark.asyncio async def test_get_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.GetGroupRequest @@ -1244,7 +1295,8 @@ async def test_get_group_async( # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.GetGroupRequest() + request = error_group_service.GetGroupRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, common.ErrorGroup) @@ -1427,7 +1479,8 @@ def test_update_group(request_type, transport: str = "grpc"): # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.UpdateGroupRequest() + request = error_group_service.UpdateGroupRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, common.ErrorGroup) @@ -1452,6 +1505,52 @@ def test_update_group_empty_call(): assert args[0] == error_group_service.UpdateGroupRequest() +def test_update_group_non_empty_request_with_auto_populated_field(): + # This test is a coverage failsafe to make sure that UUID4 fields are + # automatically populated, according to AIP-4235, with non-empty requests. + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Populate all string fields in the request which are not UUID4 + # since we want to check that UUID4 are populated automatically + # if they meet the requirements of AIP 4235. + request = error_group_service.UpdateGroupRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.update_group), "__call__") as call: + client.update_group(request=request) + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_group_service.UpdateGroupRequest() + + +@pytest.mark.asyncio +async def test_update_group_empty_call_async(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorGroupServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.update_group), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) + ) + response = await client.update_group() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_group_service.UpdateGroupRequest() + + @pytest.mark.asyncio async def test_update_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.UpdateGroupRequest @@ -1480,7 +1579,8 @@ async def test_update_group_async( # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.UpdateGroupRequest() + request = error_group_service.UpdateGroupRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, common.ErrorGroup) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 0a0a465172cb..512b0bb64cdc 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1192,7 +1192,8 @@ def test_list_group_stats(request_type, transport: str = "grpc"): # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListGroupStatsRequest() + request = error_stats_service.ListGroupStatsRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListGroupStatsPager) @@ -1215,6 +1216,56 @@ def test_list_group_stats_empty_call(): assert args[0] == error_stats_service.ListGroupStatsRequest() +def test_list_group_stats_non_empty_request_with_auto_populated_field(): + # This test is a coverage failsafe to make sure that UUID4 fields are + # automatically populated, according to AIP-4235, with non-empty requests. + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Populate all string fields in the request which are not UUID4 + # since we want to check that UUID4 are populated automatically + # if they meet the requirements of AIP 4235. + request = error_stats_service.ListGroupStatsRequest( + project_name="project_name_value", + page_token="page_token_value", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: + client.list_group_stats(request=request) + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_stats_service.ListGroupStatsRequest( + project_name="project_name_value", + page_token="page_token_value", + ) + + +@pytest.mark.asyncio +async def test_list_group_stats_empty_call_async(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListGroupStatsResponse( + next_page_token="next_page_token_value", + ) + ) + response = await client.list_group_stats() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_stats_service.ListGroupStatsRequest() + + @pytest.mark.asyncio async def test_list_group_stats_async( transport: str = "grpc_asyncio", @@ -1242,7 +1293,8 @@ async def test_list_group_stats_async( # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListGroupStatsRequest() + request = error_stats_service.ListGroupStatsRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListGroupStatsAsyncPager) @@ -1639,7 +1691,8 @@ def test_list_events(request_type, transport: str = "grpc"): # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListEventsRequest() + request = error_stats_service.ListEventsRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListEventsPager) @@ -1662,6 +1715,58 @@ def test_list_events_empty_call(): assert args[0] == error_stats_service.ListEventsRequest() +def test_list_events_non_empty_request_with_auto_populated_field(): + # This test is a coverage failsafe to make sure that UUID4 fields are + # automatically populated, according to AIP-4235, with non-empty requests. + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Populate all string fields in the request which are not UUID4 + # since we want to check that UUID4 are populated automatically + # if they meet the requirements of AIP 4235. + request = error_stats_service.ListEventsRequest( + project_name="project_name_value", + group_id="group_id_value", + page_token="page_token_value", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_events), "__call__") as call: + client.list_events(request=request) + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_stats_service.ListEventsRequest( + project_name="project_name_value", + group_id="group_id_value", + page_token="page_token_value", + ) + + +@pytest.mark.asyncio +async def test_list_events_empty_call_async(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_events), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListEventsResponse( + next_page_token="next_page_token_value", + ) + ) + response = await client.list_events() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_stats_service.ListEventsRequest() + + @pytest.mark.asyncio async def test_list_events_async( transport: str = "grpc_asyncio", request_type=error_stats_service.ListEventsRequest @@ -1688,7 +1793,8 @@ async def test_list_events_async( # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListEventsRequest() + request = error_stats_service.ListEventsRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListEventsAsyncPager) @@ -2069,7 +2175,8 @@ def test_delete_events(request_type, transport: str = "grpc"): # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.DeleteEventsRequest() + request = error_stats_service.DeleteEventsRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, error_stats_service.DeleteEventsResponse) @@ -2091,6 +2198,52 @@ def test_delete_events_empty_call(): assert args[0] == error_stats_service.DeleteEventsRequest() +def test_delete_events_non_empty_request_with_auto_populated_field(): + # This test is a coverage failsafe to make sure that UUID4 fields are + # automatically populated, according to AIP-4235, with non-empty requests. + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Populate all string fields in the request which are not UUID4 + # since we want to check that UUID4 are populated automatically + # if they meet the requirements of AIP 4235. + request = error_stats_service.DeleteEventsRequest( + project_name="project_name_value", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: + client.delete_events(request=request) + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_stats_service.DeleteEventsRequest( + project_name="project_name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_events_empty_call_async(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.DeleteEventsResponse() + ) + response = await client.delete_events() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == error_stats_service.DeleteEventsRequest() + + @pytest.mark.asyncio async def test_delete_events_async( transport: str = "grpc_asyncio", @@ -2116,7 +2269,8 @@ async def test_delete_events_async( # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.DeleteEventsRequest() + request = error_stats_service.DeleteEventsRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, error_stats_service.DeleteEventsResponse) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 7a1e1f167c50..7904cc875d96 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1222,7 +1222,8 @@ def test_report_error_event(request_type, transport: str = "grpc"): # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == report_errors_service.ReportErrorEventRequest() + request = report_errors_service.ReportErrorEventRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, report_errors_service.ReportErrorEventResponse) @@ -1246,6 +1247,56 @@ def test_report_error_event_empty_call(): assert args[0] == report_errors_service.ReportErrorEventRequest() +def test_report_error_event_non_empty_request_with_auto_populated_field(): + # This test is a coverage failsafe to make sure that UUID4 fields are + # automatically populated, according to AIP-4235, with non-empty requests. + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Populate all string fields in the request which are not UUID4 + # since we want to check that UUID4 are populated automatically + # if they meet the requirements of AIP 4235. + request = report_errors_service.ReportErrorEventRequest( + project_name="project_name_value", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.report_error_event), "__call__" + ) as call: + client.report_error_event(request=request) + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == report_errors_service.ReportErrorEventRequest( + project_name="project_name_value", + ) + + +@pytest.mark.asyncio +async def test_report_error_event_empty_call_async(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ReportErrorsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.report_error_event), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + report_errors_service.ReportErrorEventResponse() + ) + response = await client.report_error_event() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == report_errors_service.ReportErrorEventRequest() + + @pytest.mark.asyncio async def test_report_error_event_async( transport: str = "grpc_asyncio", @@ -1273,7 +1324,8 @@ async def test_report_error_event_async( # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == report_errors_service.ReportErrorEventRequest() + request = report_errors_service.ReportErrorEventRequest() + assert args[0] == request # Establish that the response is the type that we expect. assert isinstance(response, report_errors_service.ReportErrorEventResponse) From 4fb4af513e264cf8de3e27457448f685bf4c43e1 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 16:08:50 -0400 Subject: [PATCH 437/467] chore(main): release 1.11.0 (#489) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- packages/google-cloud-error-reporting/CHANGELOG.md | 7 +++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../google/cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ...tadata_google.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index ce4f35c280c4..15df9e067d89 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.10.0" + ".": "1.11.0" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index e68ae0e21798..e4b2e395688f 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,13 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.11.0](https://github.com/googleapis/python-error-reporting/compare/v1.10.0...v1.11.0) (2024-03-26) + + +### Features + +* Allow users to explicitly configure universe domain ([#475](https://github.com/googleapis/python-error-reporting/issues/475)) ([e4c3454](https://github.com/googleapis/python-error-reporting/commit/e4c3454bd5ba9f452479b0bc956c6ef011766d14)) + ## [1.10.0](https://github.com/googleapis/python-error-reporting/compare/v1.9.2...v1.10.0) (2023-12-10) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index 7ce19170ba64..98fb3f5858e8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.10.0" # {x-release-please-version} +__version__ = "1.11.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index 7ce19170ba64..98fb3f5858e8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.10.0" # {x-release-please-version} +__version__ = "1.11.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..717892a19ec7 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.11.0" }, "snippets": [ { From 4024708a3ecd16d0c8e4fb434b497815634fdf53 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:28:59 -0400 Subject: [PATCH 438/467] docs: add summary_overview template (#496) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: add summary_overview template Source-Link: https://github.com/googleapis/synthtool/commit/d7c2271d319aeb7e3043ec3f1ecec6f3604f1f1e Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:db05f70829de86fe8e34ba972b7fe56da57eaccf1691f875ed4867db80d5cec9 * Added summary_overview.md to hidden toctree in index.rst * Updated .repo-metadata.json * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot Co-authored-by: Kevin Zheng --- .../.github/.OwlBot.lock.yaml | 4 +- .../.github/CODEOWNERS | 8 +- .../.github/blunderbuss.yml | 17 ++- .../.kokoro/requirements.in | 3 +- .../.kokoro/requirements.txt | 114 ++++++++---------- .../.repo-metadata.json | 2 +- .../google-cloud-error-reporting/README.rst | 2 +- .../docs/index.rst | 5 + .../docs/summary_overview.md | 22 ++++ 9 files changed, 104 insertions(+), 73 deletions(-) create mode 100644 packages/google-cloud-error-reporting/docs/summary_overview.md diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 5d9542b1cb21..3189719173b1 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:3741fd1f5f5150378563c76afa06bcc12777b5fe54c5ee01115218f83872134f -# created: 2024-03-15T16:26:15.743347415Z + digest: sha256:db05f70829de86fe8e34ba972b7fe56da57eaccf1691f875ed4867db80d5cec9 +# created: 2024-04-05T19:51:26.466869535Z diff --git a/packages/google-cloud-error-reporting/.github/CODEOWNERS b/packages/google-cloud-error-reporting/.github/CODEOWNERS index 2a3b42055693..0738e11eea58 100644 --- a/packages/google-cloud-error-reporting/.github/CODEOWNERS +++ b/packages/google-cloud-error-reporting/.github/CODEOWNERS @@ -5,8 +5,8 @@ # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax # Note: This file is autogenerated. To make changes to the codeowner team, please update .repo-metadata.json. -# @googleapis/yoshi-python @googleapis/api-logging are the default owners for changes in this repo -* @googleapis/yoshi-python @googleapis/api-logging +# @googleapis/yoshi-python @googleapis/api-logging @googleapis/api-logging-partners are the default owners for changes in this repo +* @googleapis/yoshi-python @googleapis/api-logging @googleapis/api-logging-partners -# @googleapis/python-samples-reviewers @googleapis/api-logging are the default owners for samples changes -/samples/ @googleapis/python-samples-reviewers @googleapis/api-logging +# @googleapis/python-samples-reviewers @googleapis/api-logging @googleapis/api-logging-partners are the default owners for samples changes +/samples/ @googleapis/python-samples-reviewers @googleapis/api-logging @googleapis/api-logging-partners diff --git a/packages/google-cloud-error-reporting/.github/blunderbuss.yml b/packages/google-cloud-error-reporting/.github/blunderbuss.yml index a9d3f44e3967..8574279a5f28 100644 --- a/packages/google-cloud-error-reporting/.github/blunderbuss.yml +++ b/packages/google-cloud-error-reporting/.github/blunderbuss.yml @@ -1,4 +1,17 @@ +# Blunderbuss config +# +# This file controls who is assigned for pull requests and issues. +# Note: This file is autogenerated. To make changes to the assignee +# team, please update `codeowner_team` in `.repo-metadata.json`. assign_issues: - - googleapis/api-logging-reviewers + - googleapis/api-logging googleapis/api-logging-partners + +assign_issues_by: + - labels: + - "samples" + to: + - googleapis/python-samples-reviewers + - googleapis/api-logging googleapis/api-logging-partners + assign_prs: - - googleapis/api-logging-reviewers + - googleapis/api-logging googleapis/api-logging-partners diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.in b/packages/google-cloud-error-reporting/.kokoro/requirements.in index ec867d9fd65a..fff4d9ce0d0a 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.in +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.in @@ -1,5 +1,5 @@ gcp-docuploader -gcp-releasetool>=1.10.5 # required for compatibility with cryptography>=39.x +gcp-releasetool>=2 # required for compatibility with cryptography>=42.x importlib-metadata typing-extensions twine @@ -8,3 +8,4 @@ setuptools nox>=2022.11.21 # required to remove dependency on py charset-normalizer<3 click<8.1.0 +cryptography>=42.0.5 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index bda8e38c4f31..dd61f5f32018 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -93,40 +93,41 @@ colorlog==6.7.0 \ # via # gcp-docuploader # nox -cryptography==42.0.4 \ - --hash=sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b \ - --hash=sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce \ - --hash=sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88 \ - --hash=sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7 \ - --hash=sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20 \ - --hash=sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9 \ - --hash=sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff \ - --hash=sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1 \ - --hash=sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764 \ - --hash=sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b \ - --hash=sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298 \ - --hash=sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1 \ - --hash=sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824 \ - --hash=sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257 \ - --hash=sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a \ - --hash=sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129 \ - --hash=sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb \ - --hash=sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929 \ - --hash=sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854 \ - --hash=sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52 \ - --hash=sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923 \ - --hash=sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885 \ - --hash=sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0 \ - --hash=sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd \ - --hash=sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2 \ - --hash=sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18 \ - --hash=sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b \ - --hash=sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992 \ - --hash=sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74 \ - --hash=sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660 \ - --hash=sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925 \ - --hash=sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449 +cryptography==42.0.5 \ + --hash=sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee \ + --hash=sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576 \ + --hash=sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d \ + --hash=sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30 \ + --hash=sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413 \ + --hash=sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb \ + --hash=sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da \ + --hash=sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4 \ + --hash=sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd \ + --hash=sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc \ + --hash=sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8 \ + --hash=sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1 \ + --hash=sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc \ + --hash=sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e \ + --hash=sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8 \ + --hash=sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940 \ + --hash=sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400 \ + --hash=sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7 \ + --hash=sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16 \ + --hash=sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278 \ + --hash=sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74 \ + --hash=sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec \ + --hash=sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1 \ + --hash=sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2 \ + --hash=sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c \ + --hash=sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922 \ + --hash=sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a \ + --hash=sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6 \ + --hash=sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1 \ + --hash=sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e \ + --hash=sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac \ + --hash=sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7 # via + # -r requirements.in # gcp-releasetool # secretstorage distlib==0.3.7 \ @@ -145,9 +146,9 @@ gcp-docuploader==0.6.5 \ --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \ --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea # via -r requirements.in -gcp-releasetool==1.16.0 \ - --hash=sha256:27bf19d2e87aaa884096ff941aa3c592c482be3d6a2bfe6f06afafa6af2353e3 \ - --hash=sha256:a316b197a543fd036209d0caba7a8eb4d236d8e65381c80cbc6d7efaa7606d63 +gcp-releasetool==2.0.0 \ + --hash=sha256:3d73480b50ba243f22d7c7ec08b115a30e1c7817c4899781840c26f9c55b8277 \ + --hash=sha256:7aa9fd935ec61e581eb8458ad00823786d91756c25e492f372b2b30962f3c28f # via -r requirements.in google-api-core==2.12.0 \ --hash=sha256:c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553 \ @@ -392,29 +393,18 @@ platformdirs==3.11.0 \ --hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \ --hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e # via virtualenv -protobuf==3.20.3 \ - --hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \ - --hash=sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c \ - --hash=sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2 \ - --hash=sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b \ - --hash=sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050 \ - --hash=sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9 \ - --hash=sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7 \ - --hash=sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454 \ - --hash=sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480 \ - --hash=sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469 \ - --hash=sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c \ - --hash=sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e \ - --hash=sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db \ - --hash=sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905 \ - --hash=sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b \ - --hash=sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86 \ - --hash=sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4 \ - --hash=sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402 \ - --hash=sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7 \ - --hash=sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4 \ - --hash=sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99 \ - --hash=sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee +protobuf==4.25.3 \ + --hash=sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4 \ + --hash=sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8 \ + --hash=sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c \ + --hash=sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d \ + --hash=sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4 \ + --hash=sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa \ + --hash=sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c \ + --hash=sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019 \ + --hash=sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9 \ + --hash=sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c \ + --hash=sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2 # via # gcp-docuploader # gcp-releasetool @@ -518,7 +508,7 @@ zipp==3.17.0 \ # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==68.2.2 \ - --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ - --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a +setuptools==69.2.0 \ + --hash=sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e \ + --hash=sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c # via -r requirements.in diff --git a/packages/google-cloud-error-reporting/.repo-metadata.json b/packages/google-cloud-error-reporting/.repo-metadata.json index ea61a2bb89d3..e032093f28f6 100644 --- a/packages/google-cloud-error-reporting/.repo-metadata.json +++ b/packages/google-cloud-error-reporting/.repo-metadata.json @@ -11,7 +11,7 @@ "distribution_name": "google-cloud-error-reporting", "api_id": "clouderrorreporting.googleapis.com", "requires_billing": false, - "codeowner_team": "@googleapis/api-logging", + "codeowner_team": "@googleapis/api-logging @googleapis/api-logging-partners", "default_version": "v1beta1", "api_shortname": "clouderrorreporting", "api_description": "counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management interface displays the results with sorting and filtering capabilities. A dedicated view shows the error details: time chart, occurrences, affected user count, first and last seen dates and a cleaned exception stack trace. Opt-in to receive email and mobile alerts on new errors." diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 83ec17240b39..445767c5b8f5 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -15,7 +15,7 @@ Python Client for Error Reporting API .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg :target: https://pypi.org/project/google-cloud-error-reporting/ .. _Error Reporting API: https://cloud.google.com/error-reporting -.. _Client Library Documentation: https://cloud.google.com/python/docs/reference/clouderrorreporting/latest +.. _Client Library Documentation: https://cloud.google.com/python/docs/reference/clouderrorreporting/latest/summary_overview .. _Product Documentation: https://cloud.google.com/error-reporting Quick Start diff --git a/packages/google-cloud-error-reporting/docs/index.rst b/packages/google-cloud-error-reporting/docs/index.rst index cc149749d555..a33c831a4ded 100644 --- a/packages/google-cloud-error-reporting/docs/index.rst +++ b/packages/google-cloud-error-reporting/docs/index.rst @@ -32,3 +32,8 @@ For a list of all ``google-cloud-error-reporting`` releases: :maxdepth: 2 changelog + +.. toctree:: + :hidden: + + summary_overview.md diff --git a/packages/google-cloud-error-reporting/docs/summary_overview.md b/packages/google-cloud-error-reporting/docs/summary_overview.md new file mode 100644 index 000000000000..dd16632d0b2c --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/summary_overview.md @@ -0,0 +1,22 @@ +[ +This is a templated file. Adding content to this file may result in it being +reverted. Instead, if you want to place additional content, create an +"overview_content.md" file in `docs/` directory. The Sphinx tool will +pick up on the content and merge the content. +]: # + +# Error Reporting API + +Overview of the APIs available for Error Reporting API. + +## All entries + +Classes, methods and properties & attributes for +Error Reporting API. + +[classes](https://cloud.google.com/python/docs/reference/clouderrorreporting/latest/summary_class.html) + +[methods](https://cloud.google.com/python/docs/reference/clouderrorreporting/latest/summary_method.html) + +[properties and +attributes](https://cloud.google.com/python/docs/reference/clouderrorreporting/latest/summary_property.html) From 1d362c449b4e1088b67c299581ea0a5e9cbe3c7b Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 10:30:02 -0400 Subject: [PATCH 439/467] chore(python): bump idna from 3.4 to 3.7 in .kokoro (#500) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(python): bump idna from 3.4 to 3.7 in .kokoro Source-Link: https://github.com/googleapis/synthtool/commit/d50980e704793a2d3310bfb3664f3a82f24b5796 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:5a4c19d17e597b92d786e569be101e636c9c2817731f80a5adec56b2aa8fe070 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot Co-authored-by: Kevin Zheng <147537668+gkevinzheng@users.noreply.github.com> --- .../.github/.OwlBot.lock.yaml | 4 ++-- .../google-cloud-error-reporting/.github/blunderbuss.yml | 9 ++++++--- .../.kokoro/requirements.txt | 6 +++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 3189719173b1..81f87c56917d 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:db05f70829de86fe8e34ba972b7fe56da57eaccf1691f875ed4867db80d5cec9 -# created: 2024-04-05T19:51:26.466869535Z + digest: sha256:5a4c19d17e597b92d786e569be101e636c9c2817731f80a5adec56b2aa8fe070 +# created: 2024-04-12T11:35:58.922854369Z diff --git a/packages/google-cloud-error-reporting/.github/blunderbuss.yml b/packages/google-cloud-error-reporting/.github/blunderbuss.yml index 8574279a5f28..d5f69b10a4ef 100644 --- a/packages/google-cloud-error-reporting/.github/blunderbuss.yml +++ b/packages/google-cloud-error-reporting/.github/blunderbuss.yml @@ -4,14 +4,17 @@ # Note: This file is autogenerated. To make changes to the assignee # team, please update `codeowner_team` in `.repo-metadata.json`. assign_issues: - - googleapis/api-logging googleapis/api-logging-partners + - googleapis/api-logging + - googleapis/api-logging-partners assign_issues_by: - labels: - "samples" to: - googleapis/python-samples-reviewers - - googleapis/api-logging googleapis/api-logging-partners + - googleapis/api-logging + - googleapis/api-logging-partners assign_prs: - - googleapis/api-logging googleapis/api-logging-partners + - googleapis/api-logging + - googleapis/api-logging-partners diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index dd61f5f32018..51f92b8e12f1 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -252,9 +252,9 @@ googleapis-common-protos==1.61.0 \ --hash=sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0 \ --hash=sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b # via google-api-core -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +idna==3.7 \ + --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ + --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 # via requests importlib-metadata==6.8.0 \ --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ From d123481c1dc31ec01280377ad2204f9a6803007e Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Fri, 5 Jul 2024 10:19:50 -0400 Subject: [PATCH 440/467] chore(python): Use latest python runtime in prerelease_deps session (#512) * chore(python): Use latest python runtime in prerelease_deps session Source-Link: https://github.com/googleapis/synthtool/commit/14d8b284c826cd8501142aeb9ab7e721b630417e Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:5651442a6336971a2fb2df40fb56b3337df67cafa14c0809cc89cb34ccee1b8e * filter warnings from google-cloud-logging 1.x --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- packages/google-cloud-error-reporting/.flake8 | 2 +- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/build.sh | 2 +- .../.kokoro/docker/docs/Dockerfile | 2 +- .../.kokoro/populate-secrets.sh | 2 +- .../.kokoro/publish-docs.sh | 2 +- .../.kokoro/release.sh | 2 +- .../.kokoro/requirements.txt | 509 +++++++++--------- .../.kokoro/test-samples-against-head.sh | 2 +- .../.kokoro/test-samples-impl.sh | 2 +- .../.kokoro/test-samples.sh | 2 +- .../.kokoro/trampoline.sh | 2 +- .../.kokoro/trampoline_v2.sh | 2 +- .../.pre-commit-config.yaml | 2 +- .../.trampolinerc | 2 +- .../google-cloud-error-reporting/MANIFEST.in | 2 +- .../google-cloud-error-reporting/docs/conf.py | 2 +- .../google-cloud-error-reporting/noxfile.py | 56 +- .../google-cloud-error-reporting/pytest.ini | 2 + .../scripts/decrypt-secrets.sh | 2 +- .../scripts/readme-gen/readme_gen.py | 2 +- 21 files changed, 330 insertions(+), 275 deletions(-) diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index 87f6e408c47d..32986c79287a 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 81f87c56917d..76524393faf1 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:5a4c19d17e597b92d786e569be101e636c9c2817731f80a5adec56b2aa8fe070 -# created: 2024-04-12T11:35:58.922854369Z + digest: sha256:5651442a6336971a2fb2df40fb56b3337df67cafa14c0809cc89cb34ccee1b8e +# created: 2024-07-04T19:38:10.086106449Z diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh index 8ede533391db..0c44d59c98f1 100755 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile index bdaf39fe22d0..a26ce61930f5 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh b/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh index 6f3972140e80..c435402f473e 100755 --- a/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh +++ b/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2023 Google LLC. +# Copyright 2024 Google LLC. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh index 9eafe0be3bba..38f083f05aa0 100755 --- a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh +++ b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh index 716547f1e5ff..036f248070f2 100755 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 51f92b8e12f1..35ece0e4d2e9 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -4,21 +4,25 @@ # # pip-compile --allow-unsafe --generate-hashes requirements.in # -argcomplete==3.1.4 \ - --hash=sha256:72558ba729e4c468572609817226fb0a6e7e9a0a7d477b882be168c0b4a62b94 \ - --hash=sha256:fbe56f8cda08aa9a04b307d8482ea703e96a6a801611acb4be9bf3942017989f +argcomplete==3.4.0 \ + --hash=sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5 \ + --hash=sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f # via nox -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 +attrs==23.2.0 \ + --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ + --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 # via gcp-releasetool -cachetools==5.3.2 \ - --hash=sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2 \ - --hash=sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1 +backports-tarfile==1.2.0 \ + --hash=sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34 \ + --hash=sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991 + # via jaraco-context +cachetools==5.3.3 \ + --hash=sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945 \ + --hash=sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105 # via google-auth -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +certifi==2024.6.2 \ + --hash=sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516 \ + --hash=sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56 # via requests cffi==1.16.0 \ --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ @@ -87,90 +91,90 @@ click==8.0.4 \ # -r requirements.in # gcp-docuploader # gcp-releasetool -colorlog==6.7.0 \ - --hash=sha256:0d33ca236784a1ba3ff9c532d4964126d8a2c44f1f0cb1d2b0728196f512f662 \ - --hash=sha256:bd94bd21c1e13fac7bd3153f4bc3a7dc0eb0974b8bc2fdf1a989e474f6e582e5 +colorlog==6.8.2 \ + --hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \ + --hash=sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33 # via # gcp-docuploader # nox -cryptography==42.0.5 \ - --hash=sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee \ - --hash=sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576 \ - --hash=sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d \ - --hash=sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30 \ - --hash=sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413 \ - --hash=sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb \ - --hash=sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da \ - --hash=sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4 \ - --hash=sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd \ - --hash=sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc \ - --hash=sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8 \ - --hash=sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1 \ - --hash=sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc \ - --hash=sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e \ - --hash=sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8 \ - --hash=sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940 \ - --hash=sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400 \ - --hash=sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7 \ - --hash=sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16 \ - --hash=sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278 \ - --hash=sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74 \ - --hash=sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec \ - --hash=sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1 \ - --hash=sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2 \ - --hash=sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c \ - --hash=sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922 \ - --hash=sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a \ - --hash=sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6 \ - --hash=sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1 \ - --hash=sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e \ - --hash=sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac \ - --hash=sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7 +cryptography==42.0.8 \ + --hash=sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad \ + --hash=sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583 \ + --hash=sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b \ + --hash=sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c \ + --hash=sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1 \ + --hash=sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648 \ + --hash=sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949 \ + --hash=sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba \ + --hash=sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c \ + --hash=sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9 \ + --hash=sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d \ + --hash=sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c \ + --hash=sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e \ + --hash=sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2 \ + --hash=sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d \ + --hash=sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7 \ + --hash=sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70 \ + --hash=sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2 \ + --hash=sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7 \ + --hash=sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14 \ + --hash=sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe \ + --hash=sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e \ + --hash=sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71 \ + --hash=sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961 \ + --hash=sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7 \ + --hash=sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c \ + --hash=sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28 \ + --hash=sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842 \ + --hash=sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902 \ + --hash=sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801 \ + --hash=sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a \ + --hash=sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e # via # -r requirements.in # gcp-releasetool # secretstorage -distlib==0.3.7 \ - --hash=sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057 \ - --hash=sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8 +distlib==0.3.8 \ + --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ + --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 # via virtualenv -docutils==0.20.1 \ - --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ - --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b +docutils==0.21.2 \ + --hash=sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f \ + --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 # via readme-renderer -filelock==3.13.1 \ - --hash=sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e \ - --hash=sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c +filelock==3.15.4 \ + --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ + --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 # via virtualenv gcp-docuploader==0.6.5 \ --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \ --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea # via -r requirements.in -gcp-releasetool==2.0.0 \ - --hash=sha256:3d73480b50ba243f22d7c7ec08b115a30e1c7817c4899781840c26f9c55b8277 \ - --hash=sha256:7aa9fd935ec61e581eb8458ad00823786d91756c25e492f372b2b30962f3c28f +gcp-releasetool==2.0.1 \ + --hash=sha256:34314a910c08e8911d9c965bd44f8f2185c4f556e737d719c33a41f6a610de96 \ + --hash=sha256:b0d5863c6a070702b10883d37c4bdfd74bf930fe417f36c0c965d3b7c779ae62 # via -r requirements.in -google-api-core==2.12.0 \ - --hash=sha256:c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553 \ - --hash=sha256:ec6054f7d64ad13b41e43d96f735acbd763b0f3b695dabaa2d579673f6a6e160 +google-api-core==2.19.1 \ + --hash=sha256:f12a9b8309b5e21d92483bbd47ce2c445861ec7d269ef6784ecc0ea8c1fa6125 \ + --hash=sha256:f4695f1e3650b316a795108a76a1c416e6afb036199d1c1f1f110916df479ffd # via # google-cloud-core # google-cloud-storage -google-auth==2.23.4 \ - --hash=sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3 \ - --hash=sha256:d4bbc92fe4b8bfd2f3e8d88e5ba7085935da208ee38a134fc280e7ce682a05f2 +google-auth==2.31.0 \ + --hash=sha256:042c4702efa9f7d3c48d3a69341c209381b125faa6dbf3ebe56bc7e40ae05c23 \ + --hash=sha256:87805c36970047247c8afe614d4e3af8eceafc1ebba0c679fe75ddd1d575e871 # via # gcp-releasetool # google-api-core # google-cloud-core # google-cloud-storage -google-cloud-core==2.3.3 \ - --hash=sha256:37b80273c8d7eee1ae816b3a20ae43585ea50506cb0e60f3cf5be5f87f1373cb \ - --hash=sha256:fbd11cad3e98a7e5b0343dc07cb1039a5ffd7a5bb96e1f1e27cee4bda4a90863 +google-cloud-core==2.4.1 \ + --hash=sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073 \ + --hash=sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61 # via google-cloud-storage -google-cloud-storage==2.13.0 \ - --hash=sha256:ab0bf2e1780a1b74cf17fccb13788070b729f50c252f0c94ada2aae0ca95437d \ - --hash=sha256:f62dc4c7b6cd4360d072e3deb28035fbdad491ac3d9b0b1815a12daea10f37c7 +google-cloud-storage==2.17.0 \ + --hash=sha256:49378abff54ef656b52dca5ef0f2eba9aa83dc2b2c72c78714b03a1a95fe9388 \ + --hash=sha256:5b393bc766b7a3bc6f5407b9e665b2450d36282614b7945e570b3480a456d1e1 # via gcp-docuploader google-crc32c==1.5.0 \ --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ @@ -244,28 +248,36 @@ google-crc32c==1.5.0 \ # via # google-cloud-storage # google-resumable-media -google-resumable-media==2.6.0 \ - --hash=sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7 \ - --hash=sha256:fc03d344381970f79eebb632a3c18bb1828593a2dc5572b5f90115ef7d11e81b +google-resumable-media==2.7.1 \ + --hash=sha256:103ebc4ba331ab1bfdac0250f8033627a2cd7cde09e7ccff9181e31ba4315b2c \ + --hash=sha256:eae451a7b2e2cdbaaa0fd2eb00cc8a1ee5e95e16b55597359cbc3d27d7d90e33 # via google-cloud-storage -googleapis-common-protos==1.61.0 \ - --hash=sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0 \ - --hash=sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b +googleapis-common-protos==1.63.2 \ + --hash=sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945 \ + --hash=sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87 # via google-api-core idna==3.7 \ --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 # via requests -importlib-metadata==6.8.0 \ - --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ - --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 +importlib-metadata==8.0.0 \ + --hash=sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f \ + --hash=sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812 # via # -r requirements.in # keyring # twine -jaraco-classes==3.3.0 \ - --hash=sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb \ - --hash=sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 + # via keyring +jaraco-context==5.3.0 \ + --hash=sha256:3e16388f7da43d384a1a7cd3452e72e14732ac9fe459678773a3608a812bf266 \ + --hash=sha256:c2f67165ce1f9be20f32f650f25d8edfc1646a8aeee48ae06fb35f90763576d2 + # via keyring +jaraco-functools==4.0.1 \ + --hash=sha256:3b24ccb921d6b593bdceb56ce14799204f473976e2a9d4b15b04d0f2c2326664 \ + --hash=sha256:d33fa765374c0611b52f8b3a795f8900869aa88c84769d4d1746cd68fb28c3e8 # via keyring jeepney==0.8.0 \ --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ @@ -273,13 +285,13 @@ jeepney==0.8.0 \ # via # keyring # secretstorage -jinja2==3.1.3 \ - --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ - --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 +jinja2==3.1.4 \ + --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ + --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d # via gcp-releasetool -keyring==24.2.0 \ - --hash=sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6 \ - --hash=sha256:ca0746a19ec421219f4d713f848fa297a661a8a8c1504867e55bfb5e09091509 +keyring==25.2.1 \ + --hash=sha256:2458681cdefc0dbc0b7eb6cf75d0b98e59f9ad9b2d4edd319d18f68bdca95e50 \ + --hash=sha256:daaffd42dbda25ddafb1ad5fec4024e5bbcfe424597ca1ca452b299861e49f1b # via # gcp-releasetool # twine @@ -287,146 +299,153 @@ markdown-it-py==3.0.0 \ --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb # via rich -markupsafe==2.1.3 \ - --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ - --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ - --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ - --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ - --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ - --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ - --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ - --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ - --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ - --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ - --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ - --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ - --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ - --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ - --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ - --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ - --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ - --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ - --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ - --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ - --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ - --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ - --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ - --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ - --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ - --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ - --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ - --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ - --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ - --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ - --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ - --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ - --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ - --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ - --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ - --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ - --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ - --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ - --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ - --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ - --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ - --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ - --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ - --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ - --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ - --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ - --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ - --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ - --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ - --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ - --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ - --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ - --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ - --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ - --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ - --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ - --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ - --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ - --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ - --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 +markupsafe==2.1.5 \ + --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ + --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ + --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ + --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ + --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ + --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ + --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ + --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ + --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ + --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ + --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ + --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ + --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ + --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ + --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ + --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ + --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ + --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ + --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ + --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ + --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ + --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ + --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ + --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ + --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ + --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ + --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ + --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ + --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ + --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ + --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ + --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ + --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ + --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ + --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ + --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ + --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ + --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ + --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ + --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ + --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ + --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ + --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ + --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ + --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ + --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ + --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ + --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ + --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ + --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ + --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ + --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ + --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ + --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ + --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ + --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ + --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ + --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ + --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ + --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 # via jinja2 mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py -more-itertools==10.1.0 \ - --hash=sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a \ - --hash=sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6 - # via jaraco-classes -nh3==0.2.14 \ - --hash=sha256:116c9515937f94f0057ef50ebcbcc10600860065953ba56f14473ff706371873 \ - --hash=sha256:18415df36db9b001f71a42a3a5395db79cf23d556996090d293764436e98e8ad \ - --hash=sha256:203cac86e313cf6486704d0ec620a992c8bc164c86d3a4fd3d761dd552d839b5 \ - --hash=sha256:2b0be5c792bd43d0abef8ca39dd8acb3c0611052ce466d0401d51ea0d9aa7525 \ - --hash=sha256:377aaf6a9e7c63962f367158d808c6a1344e2b4f83d071c43fbd631b75c4f0b2 \ - --hash=sha256:525846c56c2bcd376f5eaee76063ebf33cf1e620c1498b2a40107f60cfc6054e \ - --hash=sha256:5529a3bf99402c34056576d80ae5547123f1078da76aa99e8ed79e44fa67282d \ - --hash=sha256:7771d43222b639a4cd9e341f870cee336b9d886de1ad9bec8dddab22fe1de450 \ - --hash=sha256:88c753efbcdfc2644a5012938c6b9753f1c64a5723a67f0301ca43e7b85dcf0e \ - --hash=sha256:93a943cfd3e33bd03f77b97baa11990148687877b74193bf777956b67054dcc6 \ - --hash=sha256:9be2f68fb9a40d8440cbf34cbf40758aa7f6093160bfc7fb018cce8e424f0c3a \ - --hash=sha256:a0c509894fd4dccdff557068e5074999ae3b75f4c5a2d6fb5415e782e25679c4 \ - --hash=sha256:ac8056e937f264995a82bf0053ca898a1cb1c9efc7cd68fa07fe0060734df7e4 \ - --hash=sha256:aed56a86daa43966dd790ba86d4b810b219f75b4bb737461b6886ce2bde38fd6 \ - --hash=sha256:e8986f1dd3221d1e741fda0a12eaa4a273f1d80a35e31a1ffe579e7c621d069e \ - --hash=sha256:f99212a81c62b5f22f9e7c3e347aa00491114a5647e1f13bbebd79c3e5f08d75 +more-itertools==10.3.0 \ + --hash=sha256:e5d93ef411224fbcef366a6e8ddc4c5781bc6359d43412a65dd5964e46111463 \ + --hash=sha256:ea6a02e24a9161e51faad17a8782b92a0df82c12c1c8886fec7f0c3fa1a1b320 + # via + # jaraco-classes + # jaraco-functools +nh3==0.2.17 \ + --hash=sha256:0316c25b76289cf23be6b66c77d3608a4fdf537b35426280032f432f14291b9a \ + --hash=sha256:1a814dd7bba1cb0aba5bcb9bebcc88fd801b63e21e2450ae6c52d3b3336bc911 \ + --hash=sha256:1aa52a7def528297f256de0844e8dd680ee279e79583c76d6fa73a978186ddfb \ + --hash=sha256:22c26e20acbb253a5bdd33d432a326d18508a910e4dcf9a3316179860d53345a \ + --hash=sha256:40015514022af31975c0b3bca4014634fa13cb5dc4dbcbc00570acc781316dcc \ + --hash=sha256:40d0741a19c3d645e54efba71cb0d8c475b59135c1e3c580f879ad5514cbf028 \ + --hash=sha256:551672fd71d06cd828e282abdb810d1be24e1abb7ae2543a8fa36a71c1006fe9 \ + --hash=sha256:66f17d78826096291bd264f260213d2b3905e3c7fae6dfc5337d49429f1dc9f3 \ + --hash=sha256:85cdbcca8ef10733bd31f931956f7fbb85145a4d11ab9e6742bbf44d88b7e351 \ + --hash=sha256:a3f55fabe29164ba6026b5ad5c3151c314d136fd67415a17660b4aaddacf1b10 \ + --hash=sha256:b4427ef0d2dfdec10b641ed0bdaf17957eb625b2ec0ea9329b3d28806c153d71 \ + --hash=sha256:ba73a2f8d3a1b966e9cdba7b211779ad8a2561d2dba9674b8a19ed817923f65f \ + --hash=sha256:c21bac1a7245cbd88c0b0e4a420221b7bfa838a2814ee5bb924e9c2f10a1120b \ + --hash=sha256:c551eb2a3876e8ff2ac63dff1585236ed5dfec5ffd82216a7a174f7c5082a78a \ + --hash=sha256:c790769152308421283679a142dbdb3d1c46c79c823008ecea8e8141db1a2062 \ + --hash=sha256:d7a25fd8c86657f5d9d576268e3b3767c5cd4f42867c9383618be8517f0f022a # via readme-renderer -nox==2023.4.22 \ - --hash=sha256:0b1adc619c58ab4fa57d6ab2e7823fe47a32e70202f287d78474adcc7bda1891 \ - --hash=sha256:46c0560b0dc609d7d967dc99e22cb463d3c4caf54a5fda735d6c11b5177e3a9f +nox==2024.4.15 \ + --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ + --hash=sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f # via -r requirements.in -packaging==23.2 \ - --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ - --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 +packaging==24.1 \ + --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ + --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 # via # gcp-releasetool # nox -pkginfo==1.9.6 \ - --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ - --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 +pkginfo==1.10.0 \ + --hash=sha256:5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297 \ + --hash=sha256:889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097 # via twine -platformdirs==3.11.0 \ - --hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \ - --hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e +platformdirs==4.2.2 \ + --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ + --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 # via virtualenv -protobuf==4.25.3 \ - --hash=sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4 \ - --hash=sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8 \ - --hash=sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c \ - --hash=sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d \ - --hash=sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4 \ - --hash=sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa \ - --hash=sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c \ - --hash=sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019 \ - --hash=sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9 \ - --hash=sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c \ - --hash=sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2 +proto-plus==1.24.0 \ + --hash=sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445 \ + --hash=sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12 + # via google-api-core +protobuf==5.27.2 \ + --hash=sha256:0e341109c609749d501986b835f667c6e1e24531096cff9d34ae411595e26505 \ + --hash=sha256:176c12b1f1c880bf7a76d9f7c75822b6a2bc3db2d28baa4d300e8ce4cde7409b \ + --hash=sha256:354d84fac2b0d76062e9b3221f4abbbacdfd2a4d8af36bab0474f3a0bb30ab38 \ + --hash=sha256:4fadd8d83e1992eed0248bc50a4a6361dc31bcccc84388c54c86e530b7f58863 \ + --hash=sha256:54330f07e4949d09614707c48b06d1a22f8ffb5763c159efd5c0928326a91470 \ + --hash=sha256:610e700f02469c4a997e58e328cac6f305f649826853813177e6290416e846c6 \ + --hash=sha256:7fc3add9e6003e026da5fc9e59b131b8f22b428b991ccd53e2af8071687b4fce \ + --hash=sha256:9e8f199bf7f97bd7ecebffcae45ebf9527603549b2b562df0fbc6d4d688f14ca \ + --hash=sha256:a109916aaac42bff84702fb5187f3edadbc7c97fc2c99c5ff81dd15dcce0d1e5 \ + --hash=sha256:b848dbe1d57ed7c191dfc4ea64b8b004a3f9ece4bf4d0d80a367b76df20bf36e \ + --hash=sha256:f3ecdef226b9af856075f28227ff2c90ce3a594d092c39bee5513573f25e2714 # via # gcp-docuploader # gcp-releasetool # google-api-core # googleapis-common-protos -pyasn1==0.5.0 \ - --hash=sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57 \ - --hash=sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde + # proto-plus +pyasn1==0.6.0 \ + --hash=sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c \ + --hash=sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473 # via # pyasn1-modules # rsa -pyasn1-modules==0.3.0 \ - --hash=sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c \ - --hash=sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d +pyasn1-modules==0.4.0 \ + --hash=sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6 \ + --hash=sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b # via google-auth -pycparser==2.21 \ - --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ - --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 +pycparser==2.22 \ + --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ + --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc # via cffi -pygments==2.16.1 \ - --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ - --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 +pygments==2.18.0 \ + --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ + --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a # via # readme-renderer # rich @@ -434,20 +453,20 @@ pyjwt==2.8.0 \ --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 # via gcp-releasetool -pyperclip==1.8.2 \ - --hash=sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57 +pyperclip==1.9.0 \ + --hash=sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310 # via gcp-releasetool -python-dateutil==2.8.2 \ - --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ - --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 # via gcp-releasetool -readme-renderer==42.0 \ - --hash=sha256:13d039515c1f24de668e2c93f2e877b9dbe6c6c32328b90a40a49d8b2b85f36d \ - --hash=sha256:2d55489f83be4992fe4454939d1a051c33edbab778e82761d060c9fc6b308cd1 +readme-renderer==43.0 \ + --hash=sha256:1818dd28140813509eeed8d62687f7cd4f7bad90d4db586001c5dc09d4fde311 \ + --hash=sha256:19db308d86ecd60e5affa3b2a98f017af384678c63c88e5d4556a380e674f3f9 # via twine -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 # via # gcp-releasetool # google-api-core @@ -462,9 +481,9 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==13.6.0 \ - --hash=sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245 \ - --hash=sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef +rich==13.7.1 \ + --hash=sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222 \ + --hash=sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432 # via twine rsa==4.9 \ --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ @@ -480,35 +499,39 @@ six==1.16.0 \ # via # gcp-docuploader # python-dateutil -twine==4.0.2 \ - --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ - --hash=sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8 +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via nox +twine==5.1.1 \ + --hash=sha256:215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997 \ + --hash=sha256:9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db # via -r requirements.in -typing-extensions==4.8.0 \ - --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ - --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef +typing-extensions==4.12.2 \ + --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ + --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 # via -r requirements.in -urllib3==2.0.7 \ - --hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \ - --hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e +urllib3==2.2.2 \ + --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ + --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 # via # requests # twine -virtualenv==20.24.6 \ - --hash=sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af \ - --hash=sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381 +virtualenv==20.26.3 \ + --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ + --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 # via nox -wheel==0.41.3 \ - --hash=sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942 \ - --hash=sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841 +wheel==0.43.0 \ + --hash=sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85 \ + --hash=sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81 # via -r requirements.in -zipp==3.17.0 \ - --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \ - --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 +zipp==3.19.2 \ + --hash=sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19 \ + --hash=sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==69.2.0 \ - --hash=sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e \ - --hash=sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c +setuptools==70.2.0 \ + --hash=sha256:b8b8060bb426838fbe942479c90296ce976249451118ef566a5a0b7d8b78fb05 \ + --hash=sha256:bd63e505105011b25c3c11f753f7e3b8465ea739efddaccef8f0efac2137bac1 # via -r requirements.in diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh index 63ac41dfae1d..e9d8bd79a644 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh index 5a0f5fab6a89..55910c8ba178 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh index 50b35a48c190..7933d820149a 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh index d85b1f267693..48f79699706e 100755 --- a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh +++ b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh index 59a7cf3a9373..35fa529231dc 100755 --- a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh +++ b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.pre-commit-config.yaml b/packages/google-cloud-error-reporting/.pre-commit-config.yaml index 6a8e16950664..1d74695f70b6 100644 --- a/packages/google-cloud-error-reporting/.pre-commit-config.yaml +++ b/packages/google-cloud-error-reporting/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/.trampolinerc b/packages/google-cloud-error-reporting/.trampolinerc index a7dfeb42c6d0..0080152373d5 100644 --- a/packages/google-cloud-error-reporting/.trampolinerc +++ b/packages/google-cloud-error-reporting/.trampolinerc @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index e0a66705318e..d6814cd60037 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/docs/conf.py b/packages/google-cloud-error-reporting/docs/conf.py index 99304e78c757..fd79abb79200 100644 --- a/packages/google-cloud-error-reporting/docs/conf.py +++ b/packages/google-cloud-error-reporting/docs/conf.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 5617223bb2d1..7b984f6d0fb7 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -159,14 +159,28 @@ def install_unittest_dependencies(session, *constraints): session.install("-e", ".", *constraints) -def default(session): +@nox.session(python=UNIT_TEST_PYTHON_VERSIONS) +@nox.parametrize( + "protobuf_implementation", + ["python", "upb", "cpp"], +) +def unit(session, protobuf_implementation): # Install all test dependencies, then install this package in-place. + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12"): + session.skip("cpp implementation is not supported in python 3.11+") + constraints_path = str( CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" ) install_unittest_dependencies(session, "-c", constraints_path) + # TODO(https://github.com/googleapis/synthtool/issues/1976): + # Remove the 'cpp' implementation once support for Protobuf 3.x is dropped. + # The 'cpp' implementation requires Protobuf<4. + if protobuf_implementation == "cpp": + session.install("protobuf<4") + # Run py.test against the unit tests. session.run( "py.test", @@ -180,15 +194,12 @@ def default(session): "--cov-fail-under=0", os.path.join("tests", "unit"), *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, ) -@nox.session(python=UNIT_TEST_PYTHON_VERSIONS) -def unit(session): - """Run the unit test suite.""" - default(session) - - def install_systemtest_dependencies(session, *constraints): # Use pre-release gRPC for system tests. # Exclude version 1.52.0rc1 which has a known issue. @@ -356,10 +367,17 @@ def docfx(session): ) -@nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS) -def prerelease_deps(session): +@nox.session(python="3.12") +@nox.parametrize( + "protobuf_implementation", + ["python", "upb", "cpp"], +) +def prerelease_deps(session, protobuf_implementation): """Run all tests with prerelease versions of dependencies installed.""" + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12"): + session.skip("cpp implementation is not supported in python 3.11+") + # Install all dependencies session.install("-e", ".[all, tests, tracing]") unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES @@ -394,9 +412,9 @@ def prerelease_deps(session): "protobuf", # dependency of grpc "six", + "grpc-google-iam-v1", "googleapis-common-protos", - # Exclude version 1.52.0rc1 which has a known issue. See https://github.com/grpc/grpc/issues/32163 - "grpcio!=1.52.0rc1", + "grpcio", "grpcio-status", "google-api-core", "google-auth", @@ -422,7 +440,13 @@ def prerelease_deps(session): session.run("python", "-c", "import grpc; print(grpc.__version__)") session.run("python", "-c", "import google.auth; print(google.auth.__version__)") - session.run("py.test", "tests/unit") + session.run( + "py.test", + "tests/unit", + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, + ) system_test_path = os.path.join("tests", "system.py") system_test_folder_path = os.path.join("tests", "system") @@ -435,6 +459,9 @@ def prerelease_deps(session): f"--junitxml=system_{session.python}_sponge_log.xml", system_test_path, *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, ) if os.path.exists(system_test_folder_path): session.run( @@ -443,4 +470,7 @@ def prerelease_deps(session): f"--junitxml=system_{session.python}_sponge_log.xml", system_test_folder_path, *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, ) diff --git a/packages/google-cloud-error-reporting/pytest.ini b/packages/google-cloud-error-reporting/pytest.ini index 1f8283a2f479..4166e729561a 100644 --- a/packages/google-cloud-error-reporting/pytest.ini +++ b/packages/google-cloud-error-reporting/pytest.ini @@ -11,3 +11,5 @@ filterwarnings = ignore:.*pkg_resources is deprecated as an API:DeprecationWarning # Remove warning once https://github.com/googleapis/gapic-generator-python/issues/1939 is fixed ignore:get_mtls_endpoint_and_cert_source is deprecated.:DeprecationWarning + # Remove warning once the minium supported version of google-cloud-logging is 2.x.x + ignore:.*Create unlinked descriptors is going to go away. Please use get/find descriptors from generated code or query the descriptor_pool.*:DeprecationWarning diff --git a/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh b/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh index 0018b421ddf8..120b0ddc4364 100755 --- a/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh +++ b/packages/google-cloud-error-reporting/scripts/decrypt-secrets.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2023 Google LLC All rights reserved. +# Copyright 2024 Google LLC All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py b/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py index 1acc119835b5..8f5e248a0da1 100644 --- a/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py +++ b/packages/google-cloud-error-reporting/scripts/readme-gen/readme_gen.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From ecdaf153c886d3fb7708ed0101b4837960dde48f Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:26:00 -0400 Subject: [PATCH 441/467] chore(python): use python 3.10 for docs build (#516) Source-Link: https://github.com/googleapis/synthtool/commit/9ae07858520bf035a3d5be569b5a65d960ee4392 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:52210e0e0559f5ea8c52be148b33504022e1faef4e95fbe4b32d68022af2fa7e Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/docker/docs/Dockerfile | 21 +++++---- .../.kokoro/docker/docs/requirements.txt | 40 ++++++++-------- .../.kokoro/requirements.txt | 46 +++++++++---------- .../google-cloud-error-reporting/noxfile.py | 2 +- 5 files changed, 60 insertions(+), 53 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 76524393faf1..f30cb3775afc 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:5651442a6336971a2fb2df40fb56b3337df67cafa14c0809cc89cb34ccee1b8e -# created: 2024-07-04T19:38:10.086106449Z + digest: sha256:52210e0e0559f5ea8c52be148b33504022e1faef4e95fbe4b32d68022af2fa7e +# created: 2024-07-08T19:25:35.862283192Z diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile index a26ce61930f5..5205308b334d 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from ubuntu:22.04 +from ubuntu:24.04 ENV DEBIAN_FRONTEND noninteractive @@ -40,7 +40,6 @@ RUN apt-get update \ libssl-dev \ libsqlite3-dev \ portaudio19-dev \ - python3-distutils \ redis-server \ software-properties-common \ ssh \ @@ -60,18 +59,22 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* \ && rm -f /var/cache/apt/archives/*.deb -###################### Install python 3.9.13 -# Download python 3.9.13 -RUN wget https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz +###################### Install python 3.10.14 for docs/docfx session + +# Download python 3.10.14 +RUN wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz # Extract files -RUN tar -xvf Python-3.9.13.tgz +RUN tar -xvf Python-3.10.14.tgz -# Install python 3.9.13 -RUN ./Python-3.9.13/configure --enable-optimizations +# Install python 3.10.14 +RUN ./Python-3.10.14/configure --enable-optimizations RUN make altinstall +RUN python3.10 -m venv /venv +ENV PATH /venv/bin:$PATH + ###################### Install pip RUN wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ && python3 /tmp/get-pip.py \ @@ -84,4 +87,4 @@ RUN python3 -m pip COPY requirements.txt /requirements.txt RUN python3 -m pip install --require-hashes -r requirements.txt -CMD ["python3.8"] +CMD ["python3.10"] diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt index 0e5d70f20f83..7129c7715594 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt @@ -4,9 +4,9 @@ # # pip-compile --allow-unsafe --generate-hashes requirements.in # -argcomplete==3.2.3 \ - --hash=sha256:bf7900329262e481be5a15f56f19736b376df6f82ed27576fa893652c5de6c23 \ - --hash=sha256:c12355e0494c76a2a7b73e3a59b09024ca0ba1e279fb9ed6c1b82d5b74b6a70c +argcomplete==3.4.0 \ + --hash=sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5 \ + --hash=sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f # via nox colorlog==6.8.2 \ --hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \ @@ -16,23 +16,27 @@ distlib==0.3.8 \ --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 # via virtualenv -filelock==3.13.1 \ - --hash=sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e \ - --hash=sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c +filelock==3.15.4 \ + --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ + --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 # via virtualenv -nox==2024.3.2 \ - --hash=sha256:e53514173ac0b98dd47585096a55572fe504fecede58ced708979184d05440be \ - --hash=sha256:f521ae08a15adbf5e11f16cb34e8d0e6ea521e0b92868f684e91677deb974553 +nox==2024.4.15 \ + --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ + --hash=sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f # via -r requirements.in -packaging==24.0 \ - --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ - --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 +packaging==24.1 \ + --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ + --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 # via nox -platformdirs==4.2.0 \ - --hash=sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068 \ - --hash=sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768 +platformdirs==4.2.2 \ + --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ + --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 # via virtualenv -virtualenv==20.25.1 \ - --hash=sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a \ - --hash=sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197 +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via nox +virtualenv==20.26.3 \ + --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ + --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 # via nox diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt index 35ece0e4d2e9..9622baf0ba38 100644 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/requirements.txt @@ -20,9 +20,9 @@ cachetools==5.3.3 \ --hash=sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945 \ --hash=sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105 # via google-auth -certifi==2024.6.2 \ - --hash=sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516 \ - --hash=sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56 +certifi==2024.7.4 \ + --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ + --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 # via requests cffi==1.16.0 \ --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ @@ -371,23 +371,23 @@ more-itertools==10.3.0 \ # via # jaraco-classes # jaraco-functools -nh3==0.2.17 \ - --hash=sha256:0316c25b76289cf23be6b66c77d3608a4fdf537b35426280032f432f14291b9a \ - --hash=sha256:1a814dd7bba1cb0aba5bcb9bebcc88fd801b63e21e2450ae6c52d3b3336bc911 \ - --hash=sha256:1aa52a7def528297f256de0844e8dd680ee279e79583c76d6fa73a978186ddfb \ - --hash=sha256:22c26e20acbb253a5bdd33d432a326d18508a910e4dcf9a3316179860d53345a \ - --hash=sha256:40015514022af31975c0b3bca4014634fa13cb5dc4dbcbc00570acc781316dcc \ - --hash=sha256:40d0741a19c3d645e54efba71cb0d8c475b59135c1e3c580f879ad5514cbf028 \ - --hash=sha256:551672fd71d06cd828e282abdb810d1be24e1abb7ae2543a8fa36a71c1006fe9 \ - --hash=sha256:66f17d78826096291bd264f260213d2b3905e3c7fae6dfc5337d49429f1dc9f3 \ - --hash=sha256:85cdbcca8ef10733bd31f931956f7fbb85145a4d11ab9e6742bbf44d88b7e351 \ - --hash=sha256:a3f55fabe29164ba6026b5ad5c3151c314d136fd67415a17660b4aaddacf1b10 \ - --hash=sha256:b4427ef0d2dfdec10b641ed0bdaf17957eb625b2ec0ea9329b3d28806c153d71 \ - --hash=sha256:ba73a2f8d3a1b966e9cdba7b211779ad8a2561d2dba9674b8a19ed817923f65f \ - --hash=sha256:c21bac1a7245cbd88c0b0e4a420221b7bfa838a2814ee5bb924e9c2f10a1120b \ - --hash=sha256:c551eb2a3876e8ff2ac63dff1585236ed5dfec5ffd82216a7a174f7c5082a78a \ - --hash=sha256:c790769152308421283679a142dbdb3d1c46c79c823008ecea8e8141db1a2062 \ - --hash=sha256:d7a25fd8c86657f5d9d576268e3b3767c5cd4f42867c9383618be8517f0f022a +nh3==0.2.18 \ + --hash=sha256:0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164 \ + --hash=sha256:14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86 \ + --hash=sha256:19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b \ + --hash=sha256:34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad \ + --hash=sha256:36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204 \ + --hash=sha256:3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a \ + --hash=sha256:42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200 \ + --hash=sha256:5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189 \ + --hash=sha256:6955369e4d9f48f41e3f238a9e60f9410645db7e07435e62c6a9ea6135a4907f \ + --hash=sha256:7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811 \ + --hash=sha256:8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844 \ + --hash=sha256:94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4 \ + --hash=sha256:a7f1b5b2c15866f2db413a3649a8fe4fd7b428ae58be2c0f6bca5eefd53ca2be \ + --hash=sha256:c8b3a1cebcba9b3669ed1a84cc65bf005728d2f0bc1ed2a6594a992e817f3a50 \ + --hash=sha256:de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307 \ + --hash=sha256:f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe # via readme-renderer nox==2024.4.15 \ --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ @@ -460,9 +460,9 @@ python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 # via gcp-releasetool -readme-renderer==43.0 \ - --hash=sha256:1818dd28140813509eeed8d62687f7cd4f7bad90d4db586001c5dc09d4fde311 \ - --hash=sha256:19db308d86ecd60e5affa3b2a98f017af384678c63c88e5d4556a380e674f3f9 +readme-renderer==44.0 \ + --hash=sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151 \ + --hash=sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1 # via twine requests==2.32.3 \ --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 7b984f6d0fb7..7540caad0f9d 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -286,7 +286,7 @@ def cover(session): session.run("coverage", "erase") -@nox.session(python="3.9") +@nox.session(python="3.10") def docs(session): """Build the docs for this library.""" From 27afc9edb31fa0ff632db52f4b5ed0ec58b6e4e2 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 11:06:35 -0400 Subject: [PATCH 442/467] fix: Allow Protobuf 5.x (#507) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.17.1 PiperOrigin-RevId: 629071173 Source-Link: https://github.com/googleapis/googleapis/commit/4afa392105cc62e965631d15b772ff68454ecf1c Source-Link: https://github.com/googleapis/googleapis-gen/commit/16dbbb4d0457db5e61ac9f99b0d52a46154455ac Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMTZkYmJiNGQwNDU3ZGI1ZTYxYWM5Zjk5YjBkNTJhNDYxNTQ0NTVhYyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update gapic-generator-python to v1.18.0 PiperOrigin-RevId: 638650618 Source-Link: https://github.com/googleapis/googleapis/commit/6330f0389afdd04235c59898cc44f715b077aa25 Source-Link: https://github.com/googleapis/googleapis-gen/commit/44fa4f1979dc45c1778fd7caf13f8e61c6d1cae8 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDRmYTRmMTk3OWRjNDVjMTc3OGZkN2NhZjEzZjhlNjFjNmQxY2FlOCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat(spanner): Add support for Cloud Spanner Scheduled Backups PiperOrigin-RevId: 649277844 Source-Link: https://github.com/googleapis/googleapis/commit/fd7efa2da3860e813485e63661d3bdd21fc9ba82 Source-Link: https://github.com/googleapis/googleapis-gen/commit/50be251329d8db5b555626ebd4886721f547d3cc Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNTBiZTI1MTMyOWQ4ZGI1YjU1NTYyNmViZDQ4ODY3MjFmNTQ3ZDNjYyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * allow protobuf 5.x * update constraints --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../error_group_service/async_client.py | 52 ++- .../services/error_group_service/client.py | 49 ++- .../error_group_service/transports/base.py | 4 +- .../error_group_service/transports/grpc.py | 28 +- .../transports/grpc_asyncio.py | 44 ++- .../error_stats_service/async_client.py | 69 ++-- .../services/error_stats_service/client.py | 59 +-- .../error_stats_service/transports/base.py | 4 +- .../error_stats_service/transports/grpc.py | 28 +- .../transports/grpc_asyncio.py | 49 ++- .../report_errors_service/async_client.py | 35 +- .../services/report_errors_service/client.py | 39 +- .../report_errors_service/transports/base.py | 4 +- .../report_errors_service/transports/grpc.py | 28 +- .../transports/grpc_asyncio.py | 39 +- ....devtools.clouderrorreporting.v1beta1.json | 2 +- .../google-cloud-error-reporting/setup.py | 2 +- .../testing/constraints-3.7.txt | 2 +- .../test_error_group_service.py | 234 +++++++++++ .../test_error_stats_service.py | 370 +++++++++++++++++- .../test_report_errors_service.py | 126 ++++++ 21 files changed, 1075 insertions(+), 192 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index c65c9da40abe..c67a5c323168 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -18,6 +18,7 @@ import re from typing import ( Dict, + Callable, Mapping, MutableMapping, MutableSequence, @@ -37,6 +38,7 @@ from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore + try: OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER @@ -195,7 +197,13 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, ErrorGroupServiceTransport] = "grpc_asyncio", + transport: Optional[ + Union[ + str, + ErrorGroupServiceTransport, + Callable[..., ErrorGroupServiceTransport], + ] + ] = "grpc_asyncio", client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -207,9 +215,11 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ~.ErrorGroupServiceTransport]): The - transport to use. If set to None, a transport is chosen - automatically. + transport (Optional[Union[str,ErrorGroupServiceTransport,Callable[..., ErrorGroupServiceTransport]]]): + 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 ErrorGroupServiceTransport 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. @@ -318,8 +328,8 @@ async def sample_get_group(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([group_name]) if request is not None and has_flattened_params: raise ValueError( @@ -327,7 +337,10 @@ async def sample_get_group(): "the individual field arguments should be set." ) - request = error_group_service.GetGroupRequest(request) + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, error_group_service.GetGroupRequest): + request = error_group_service.GetGroupRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -336,11 +349,9 @@ async def sample_get_group(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_group, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) + rpc = self._client._transport._wrapped_methods[ + self._client._transport.get_group + ] # Certain fields should be provided within the metadata header; # add these here. @@ -425,8 +436,8 @@ async def sample_update_group(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([group]) if request is not None and has_flattened_params: raise ValueError( @@ -434,7 +445,10 @@ async def sample_update_group(): "the individual field arguments should be set." ) - request = error_group_service.UpdateGroupRequest(request) + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, error_group_service.UpdateGroupRequest): + request = error_group_service.UpdateGroupRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -443,11 +457,9 @@ async def sample_update_group(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_group, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) + rpc = self._client._transport._wrapped_methods[ + self._client._transport.update_group + ] # Certain fields should be provided within the metadata header; # add these here. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 5176c9c9f71e..cba6d6c9c3c6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -18,6 +18,7 @@ import re from typing import ( Dict, + Callable, Mapping, MutableMapping, MutableSequence, @@ -523,7 +524,13 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, ErrorGroupServiceTransport]] = None, + transport: Optional[ + Union[ + str, + ErrorGroupServiceTransport, + Callable[..., ErrorGroupServiceTransport], + ] + ] = None, client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -535,9 +542,11 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ErrorGroupServiceTransport]): The - transport to use. If set to None, a transport is chosen - automatically. + transport (Optional[Union[str,ErrorGroupServiceTransport,Callable[..., ErrorGroupServiceTransport]]]): + 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 ErrorGroupServiceTransport 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. @@ -646,8 +655,16 @@ def __init__( api_key_value ) - Transport = type(self).get_transport_class(cast(str, transport)) - self._transport = Transport( + transport_init: Union[ + Type[ErrorGroupServiceTransport], + Callable[..., ErrorGroupServiceTransport], + ] = ( + type(self).get_transport_class(transport) + if isinstance(transport, str) or transport is None + else cast(Callable[..., ErrorGroupServiceTransport], 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, @@ -724,8 +741,8 @@ def sample_get_group(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([group_name]) if request is not None and has_flattened_params: raise ValueError( @@ -733,10 +750,8 @@ def sample_get_group(): "the individual field arguments should be set." ) - # Minor optimization to avoid making a copy if the user passes - # in a error_group_service.GetGroupRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. if not isinstance(request, error_group_service.GetGroupRequest): request = error_group_service.GetGroupRequest(request) # If we have keyword arguments corresponding to fields on the @@ -831,8 +846,8 @@ def sample_update_group(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([group]) if request is not None and has_flattened_params: raise ValueError( @@ -840,10 +855,8 @@ def sample_update_group(): "the individual field arguments should be set." ) - # Minor optimization to avoid making a copy if the user passes - # in a error_group_service.UpdateGroupRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. if not isinstance(request, error_group_service.UpdateGroupRequest): request = error_group_service.UpdateGroupRequest(request) # If we have keyword arguments corresponding to fields on the diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 23026c11e2e5..52b03cea977d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -83,6 +83,8 @@ def __init__( # Save the scopes. self._scopes = scopes + if not hasattr(self, "_ignore_credentials"): + self._ignore_credentials: bool = False # If no credentials are provided, then determine the appropriate # defaults. @@ -95,7 +97,7 @@ def __init__( credentials, _ = google.auth.load_credentials_from_file( credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) - elif credentials is None: + elif credentials is None and not self._ignore_credentials: credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 3f1e94b73981..793b005b3e6e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -51,7 +51,7 @@ def __init__( credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, + channel: Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]] = None, api_mtls_endpoint: Optional[str] = None, client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, @@ -71,14 +71,17 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. + ignored if a ``channel`` instance is provided. + channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]): + A ``Channel`` instance through which to make calls, or a Callable + that constructs and returns one. If set to None, ``self.create_channel`` + is used to create the channel. If a Callable is given, it will be called + with the same arguments as used in ``self.create_channel``. api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from @@ -88,11 +91,11 @@ def __init__( private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if a ``channel`` instance is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + ignored if a ``channel`` instance or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -118,9 +121,10 @@ def __init__( if client_cert_source: warnings.warn("client_cert_source is deprecated", DeprecationWarning) - if channel: + if isinstance(channel, grpc.Channel): # Ignore credentials if a channel was passed. - credentials = False + credentials = None + self._ignore_credentials = True # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None @@ -159,7 +163,9 @@ def __init__( ) if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( + # initialize with the provided callable or the default channel + channel_init = channel or type(self).create_channel + self._grpc_channel = channel_init( self._host, # use the credentials which are saved credentials=self._credentials, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 9c4fd6496730..87365094302b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -18,6 +18,8 @@ from google.api_core import gapic_v1 from google.api_core import grpc_helpers_async +from google.api_core import exceptions as core_exceptions +from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore @@ -66,7 +68,6 @@ def create_channel( the credentials from the environment. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. @@ -96,7 +97,7 @@ def __init__( credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, + channel: Optional[Union[aio.Channel, Callable[..., aio.Channel]]] = None, api_mtls_endpoint: Optional[str] = None, client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, @@ -116,15 +117,18 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. + channel (Optional[Union[aio.Channel, Callable[..., aio.Channel]]]): + A ``Channel`` instance through which to make calls, or a Callable + that constructs and returns one. If set to None, ``self.create_channel`` + is used to create the channel. If a Callable is given, it will be called + with the same arguments as used in ``self.create_channel``. api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from @@ -134,11 +138,11 @@ def __init__( private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if a ``channel`` instance is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + ignored if a ``channel`` instance or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -164,9 +168,10 @@ def __init__( if client_cert_source: warnings.warn("client_cert_source is deprecated", DeprecationWarning) - if channel: + if isinstance(channel, aio.Channel): # Ignore credentials if a channel was passed. - credentials = False + credentials = None + self._ignore_credentials = True # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None @@ -204,7 +209,9 @@ def __init__( ) if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( + # initialize with the provided callable or the default channel + channel_init = channel or type(self).create_channel + self._grpc_channel = channel_init( self._host, # use the credentials which are saved credentials=self._credentials, @@ -288,6 +295,21 @@ def update_group( ) return self._stubs["update_group"] + def _prep_wrapped_messages(self, client_info): + """Precompute the wrapped methods, overriding the base class method to use async wrappers.""" + self._wrapped_methods = { + self.get_group: gapic_v1.method_async.wrap_method( + self.get_group, + default_timeout=None, + client_info=client_info, + ), + self.update_group: gapic_v1.method_async.wrap_method( + self.update_group, + default_timeout=None, + client_info=client_info, + ), + } + def close(self): return self.grpc_channel.close() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index d4d37ee3ea26..b1f1ac82f6fc 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -18,6 +18,7 @@ import re from typing import ( Dict, + Callable, Mapping, MutableMapping, MutableSequence, @@ -37,6 +38,7 @@ from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore + try: OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER @@ -198,7 +200,13 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, ErrorStatsServiceTransport] = "grpc_asyncio", + transport: Optional[ + Union[ + str, + ErrorStatsServiceTransport, + Callable[..., ErrorStatsServiceTransport], + ] + ] = "grpc_asyncio", client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -210,9 +218,11 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ~.ErrorStatsServiceTransport]): The - transport to use. If set to None, a transport is chosen - automatically. + transport (Optional[Union[str,ErrorStatsServiceTransport,Callable[..., ErrorStatsServiceTransport]]]): + 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 ErrorStatsServiceTransport 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. @@ -342,8 +352,8 @@ async def sample_list_group_stats(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, time_range]) if request is not None and has_flattened_params: raise ValueError( @@ -351,7 +361,10 @@ async def sample_list_group_stats(): "the individual field arguments should be set." ) - request = error_stats_service.ListGroupStatsRequest(request) + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, error_stats_service.ListGroupStatsRequest): + request = error_stats_service.ListGroupStatsRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -362,11 +375,9 @@ async def sample_list_group_stats(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_group_stats, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) + rpc = self._client._transport._wrapped_methods[ + self._client._transport.list_group_stats + ] # Certain fields should be provided within the metadata header; # add these here. @@ -477,8 +488,8 @@ async def sample_list_events(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, group_id]) if request is not None and has_flattened_params: raise ValueError( @@ -486,7 +497,10 @@ async def sample_list_events(): "the individual field arguments should be set." ) - request = error_stats_service.ListEventsRequest(request) + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, error_stats_service.ListEventsRequest): + request = error_stats_service.ListEventsRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -497,11 +511,9 @@ async def sample_list_events(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_events, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) + rpc = self._client._transport._wrapped_methods[ + self._client._transport.list_events + ] # Certain fields should be provided within the metadata header; # add these here. @@ -598,8 +610,8 @@ async def sample_delete_events(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name]) if request is not None and has_flattened_params: raise ValueError( @@ -607,7 +619,10 @@ async def sample_delete_events(): "the individual field arguments should be set." ) - request = error_stats_service.DeleteEventsRequest(request) + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, error_stats_service.DeleteEventsRequest): + request = error_stats_service.DeleteEventsRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -616,11 +631,9 @@ async def sample_delete_events(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_events, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) + rpc = self._client._transport._wrapped_methods[ + self._client._transport.delete_events + ] # Certain fields should be provided within the metadata header; # add these here. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index f0e61b21ca0e..5cce65c52987 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -18,6 +18,7 @@ import re from typing import ( Dict, + Callable, Mapping, MutableMapping, MutableSequence, @@ -526,7 +527,13 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, ErrorStatsServiceTransport]] = None, + transport: Optional[ + Union[ + str, + ErrorStatsServiceTransport, + Callable[..., ErrorStatsServiceTransport], + ] + ] = None, client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -538,9 +545,11 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ErrorStatsServiceTransport]): The - transport to use. If set to None, a transport is chosen - automatically. + transport (Optional[Union[str,ErrorStatsServiceTransport,Callable[..., ErrorStatsServiceTransport]]]): + 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 ErrorStatsServiceTransport 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. @@ -649,8 +658,16 @@ def __init__( api_key_value ) - Transport = type(self).get_transport_class(cast(str, transport)) - self._transport = Transport( + transport_init: Union[ + Type[ErrorStatsServiceTransport], + Callable[..., ErrorStatsServiceTransport], + ] = ( + type(self).get_transport_class(transport) + if isinstance(transport, str) or transport is None + else cast(Callable[..., ErrorStatsServiceTransport], 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, @@ -748,8 +765,8 @@ def sample_list_group_stats(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, time_range]) if request is not None and has_flattened_params: raise ValueError( @@ -757,10 +774,8 @@ def sample_list_group_stats(): "the individual field arguments should be set." ) - # Minor optimization to avoid making a copy if the user passes - # in a error_stats_service.ListGroupStatsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. if not isinstance(request, error_stats_service.ListGroupStatsRequest): request = error_stats_service.ListGroupStatsRequest(request) # If we have keyword arguments corresponding to fields on the @@ -883,8 +898,8 @@ def sample_list_events(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, group_id]) if request is not None and has_flattened_params: raise ValueError( @@ -892,10 +907,8 @@ def sample_list_events(): "the individual field arguments should be set." ) - # Minor optimization to avoid making a copy if the user passes - # in a error_stats_service.ListEventsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. if not isinstance(request, error_stats_service.ListEventsRequest): request = error_stats_service.ListEventsRequest(request) # If we have keyword arguments corresponding to fields on the @@ -1004,8 +1017,8 @@ def sample_delete_events(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name]) if request is not None and has_flattened_params: raise ValueError( @@ -1013,10 +1026,8 @@ def sample_delete_events(): "the individual field arguments should be set." ) - # Minor optimization to avoid making a copy if the user passes - # in a error_stats_service.DeleteEventsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. if not isinstance(request, error_stats_service.DeleteEventsRequest): request = error_stats_service.DeleteEventsRequest(request) # If we have keyword arguments corresponding to fields on the diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 17f383204bf4..2ca8391cdd7f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -82,6 +82,8 @@ def __init__( # Save the scopes. self._scopes = scopes + if not hasattr(self, "_ignore_credentials"): + self._ignore_credentials: bool = False # If no credentials are provided, then determine the appropriate # defaults. @@ -94,7 +96,7 @@ def __init__( credentials, _ = google.auth.load_credentials_from_file( credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) - elif credentials is None: + elif credentials is None and not self._ignore_credentials: credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 55e2925c3d09..b1f71dd3c9b2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -51,7 +51,7 @@ def __init__( credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, + channel: Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]] = None, api_mtls_endpoint: Optional[str] = None, client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, @@ -71,14 +71,17 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. + ignored if a ``channel`` instance is provided. + channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]): + A ``Channel`` instance through which to make calls, or a Callable + that constructs and returns one. If set to None, ``self.create_channel`` + is used to create the channel. If a Callable is given, it will be called + with the same arguments as used in ``self.create_channel``. api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from @@ -88,11 +91,11 @@ def __init__( private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if a ``channel`` instance is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + ignored if a ``channel`` instance or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -118,9 +121,10 @@ def __init__( if client_cert_source: warnings.warn("client_cert_source is deprecated", DeprecationWarning) - if channel: + if isinstance(channel, grpc.Channel): # Ignore credentials if a channel was passed. - credentials = False + credentials = None + self._ignore_credentials = True # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None @@ -159,7 +163,9 @@ def __init__( ) if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( + # initialize with the provided callable or the default channel + channel_init = channel or type(self).create_channel + self._grpc_channel = channel_init( self._host, # use the credentials which are saved credentials=self._credentials, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 6e284bce0106..895a12958ceb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -18,6 +18,8 @@ from google.api_core import gapic_v1 from google.api_core import grpc_helpers_async +from google.api_core import exceptions as core_exceptions +from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore @@ -66,7 +68,6 @@ def create_channel( the credentials from the environment. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. @@ -96,7 +97,7 @@ def __init__( credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, + channel: Optional[Union[aio.Channel, Callable[..., aio.Channel]]] = None, api_mtls_endpoint: Optional[str] = None, client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, @@ -116,15 +117,18 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. + channel (Optional[Union[aio.Channel, Callable[..., aio.Channel]]]): + A ``Channel`` instance through which to make calls, or a Callable + that constructs and returns one. If set to None, ``self.create_channel`` + is used to create the channel. If a Callable is given, it will be called + with the same arguments as used in ``self.create_channel``. api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from @@ -134,11 +138,11 @@ def __init__( private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if a ``channel`` instance is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + ignored if a ``channel`` instance or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -164,9 +168,10 @@ def __init__( if client_cert_source: warnings.warn("client_cert_source is deprecated", DeprecationWarning) - if channel: + if isinstance(channel, aio.Channel): # Ignore credentials if a channel was passed. - credentials = False + credentials = None + self._ignore_credentials = True # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None @@ -204,7 +209,9 @@ def __init__( ) if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( + # initialize with the provided callable or the default channel + channel_init = channel or type(self).create_channel + self._grpc_channel = channel_init( self._host, # use the credentials which are saved credentials=self._credentials, @@ -320,6 +327,26 @@ def delete_events( ) return self._stubs["delete_events"] + def _prep_wrapped_messages(self, client_info): + """Precompute the wrapped methods, overriding the base class method to use async wrappers.""" + self._wrapped_methods = { + self.list_group_stats: gapic_v1.method_async.wrap_method( + self.list_group_stats, + default_timeout=None, + client_info=client_info, + ), + self.list_events: gapic_v1.method_async.wrap_method( + self.list_events, + default_timeout=None, + client_info=client_info, + ), + self.delete_events: gapic_v1.method_async.wrap_method( + self.delete_events, + default_timeout=None, + client_info=client_info, + ), + } + def close(self): return self.grpc_channel.close() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 03eb9ce0bf87..222a2a656289 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -18,6 +18,7 @@ import re from typing import ( Dict, + Callable, Mapping, MutableMapping, MutableSequence, @@ -37,6 +38,7 @@ from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore + try: OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER @@ -191,7 +193,13 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, ReportErrorsServiceTransport] = "grpc_asyncio", + transport: Optional[ + Union[ + str, + ReportErrorsServiceTransport, + Callable[..., ReportErrorsServiceTransport], + ] + ] = "grpc_asyncio", client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -203,9 +211,11 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ~.ReportErrorsServiceTransport]): The - transport to use. If set to None, a transport is chosen - automatically. + transport (Optional[Union[str,ReportErrorsServiceTransport,Callable[..., ReportErrorsServiceTransport]]]): + 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 ReportErrorsServiceTransport 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. @@ -341,8 +351,8 @@ async def sample_report_error_event(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, event]) if request is not None and has_flattened_params: raise ValueError( @@ -350,7 +360,10 @@ async def sample_report_error_event(): "the individual field arguments should be set." ) - request = report_errors_service.ReportErrorEventRequest(request) + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, report_errors_service.ReportErrorEventRequest): + request = report_errors_service.ReportErrorEventRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -361,11 +374,9 @@ async def sample_report_error_event(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.report_error_event, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) + rpc = self._client._transport._wrapped_methods[ + self._client._transport.report_error_event + ] # Certain fields should be provided within the metadata header; # add these here. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 561dbc2aca22..001d5c5e84ed 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -18,6 +18,7 @@ import re from typing import ( Dict, + Callable, Mapping, MutableMapping, MutableSequence, @@ -505,7 +506,13 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, ReportErrorsServiceTransport]] = None, + transport: Optional[ + Union[ + str, + ReportErrorsServiceTransport, + Callable[..., ReportErrorsServiceTransport], + ] + ] = None, client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: @@ -517,9 +524,11 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - transport (Union[str, ReportErrorsServiceTransport]): The - transport to use. If set to None, a transport is chosen - automatically. + transport (Optional[Union[str,ReportErrorsServiceTransport,Callable[..., ReportErrorsServiceTransport]]]): + 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 ReportErrorsServiceTransport 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. @@ -628,8 +637,16 @@ def __init__( api_key_value ) - Transport = type(self).get_transport_class(cast(str, transport)) - self._transport = Transport( + transport_init: Union[ + Type[ReportErrorsServiceTransport], + Callable[..., ReportErrorsServiceTransport], + ] = ( + type(self).get_transport_class(transport) + if isinstance(transport, str) or transport is None + else cast(Callable[..., ReportErrorsServiceTransport], 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, @@ -733,8 +750,8 @@ def sample_report_error_event(): """ # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. has_flattened_params = any([project_name, event]) if request is not None and has_flattened_params: raise ValueError( @@ -742,10 +759,8 @@ def sample_report_error_event(): "the individual field arguments should be set." ) - # Minor optimization to avoid making a copy if the user passes - # in a report_errors_service.ReportErrorEventRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. if not isinstance(request, report_errors_service.ReportErrorEventRequest): request = report_errors_service.ReportErrorEventRequest(request) # If we have keyword arguments corresponding to fields on the diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 052ff4a484e6..9bb43400f6bb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -82,6 +82,8 @@ def __init__( # Save the scopes. self._scopes = scopes + if not hasattr(self, "_ignore_credentials"): + self._ignore_credentials: bool = False # If no credentials are provided, then determine the appropriate # defaults. @@ -94,7 +96,7 @@ def __init__( credentials, _ = google.auth.load_credentials_from_file( credentials_file, **scopes_kwargs, quota_project_id=quota_project_id ) - elif credentials is None: + elif credentials is None and not self._ignore_credentials: credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 5579c5b3efc7..be3ec4061dab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -50,7 +50,7 @@ def __init__( credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, + channel: Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]] = None, api_mtls_endpoint: Optional[str] = None, client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, @@ -70,14 +70,17 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. + ignored if a ``channel`` instance is provided. + channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]): + A ``Channel`` instance through which to make calls, or a Callable + that constructs and returns one. If set to None, ``self.create_channel`` + is used to create the channel. If a Callable is given, it will be called + with the same arguments as used in ``self.create_channel``. api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from @@ -87,11 +90,11 @@ def __init__( private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if a ``channel`` instance is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + ignored if a ``channel`` instance or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -117,9 +120,10 @@ def __init__( if client_cert_source: warnings.warn("client_cert_source is deprecated", DeprecationWarning) - if channel: + if isinstance(channel, grpc.Channel): # Ignore credentials if a channel was passed. - credentials = False + credentials = None + self._ignore_credentials = True # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None @@ -158,7 +162,9 @@ def __init__( ) if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( + # initialize with the provided callable or the default channel + channel_init = channel or type(self).create_channel + self._grpc_channel = channel_init( self._host, # use the credentials which are saved credentials=self._credentials, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index a3380e2575d8..844198797b8f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -18,6 +18,8 @@ from google.api_core import gapic_v1 from google.api_core import grpc_helpers_async +from google.api_core import exceptions as core_exceptions +from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore @@ -65,7 +67,6 @@ def create_channel( the credentials from the environment. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. @@ -95,7 +96,7 @@ def __init__( credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, + channel: Optional[Union[aio.Channel, Callable[..., aio.Channel]]] = None, api_mtls_endpoint: Optional[str] = None, client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, @@ -115,15 +116,18 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. credentials_file (Optional[str]): A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if a ``channel`` instance is provided. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. + channel (Optional[Union[aio.Channel, Callable[..., aio.Channel]]]): + A ``Channel`` instance through which to make calls, or a Callable + that constructs and returns one. If set to None, ``self.create_channel`` + is used to create the channel. If a Callable is given, it will be called + with the same arguments as used in ``self.create_channel``. api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. If provided, it overrides the ``host`` argument and tries to create a mutual TLS channel with client SSL credentials from @@ -133,11 +137,11 @@ def __init__( private key bytes, both in PEM format. It is ignored if ``api_mtls_endpoint`` is None. ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. + for the grpc channel. It is ignored if a ``channel`` instance is provided. client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): A callback to provide client certificate bytes and private key bytes, both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + ignored if a ``channel`` instance or ``ssl_channel_credentials`` is provided. quota_project_id (Optional[str]): An optional project to use for billing and quota. client_info (google.api_core.gapic_v1.client_info.ClientInfo): @@ -163,9 +167,10 @@ def __init__( if client_cert_source: warnings.warn("client_cert_source is deprecated", DeprecationWarning) - if channel: + if isinstance(channel, aio.Channel): # Ignore credentials if a channel was passed. - credentials = False + credentials = None + self._ignore_credentials = True # If a channel was explicitly provided, set it. self._grpc_channel = channel self._ssl_channel_credentials = None @@ -203,7 +208,9 @@ def __init__( ) if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( + # initialize with the provided callable or the default channel + channel_init = channel or type(self).create_channel + self._grpc_channel = channel_init( self._host, # use the credentials which are saved credentials=self._credentials, @@ -273,6 +280,16 @@ def report_error_event( ) return self._stubs["report_error_event"] + def _prep_wrapped_messages(self, client_info): + """Precompute the wrapped methods, overriding the base class method to use async wrappers.""" + self._wrapped_methods = { + self.report_error_event: gapic_v1.method_async.wrap_method( + self.report_error_event, + default_timeout=None, + client_info=client_info, + ), + } + def close(self): return self.grpc_channel.close() diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index 717892a19ec7..fedd655c8443 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.11.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 20c081aa906f..88311343cfab 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -45,7 +45,7 @@ "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", "proto-plus >= 1.22.0, <2.0.0dev", "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", - "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", + "protobuf>=3.20.2,<6.0.0dev,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", ] url = "https://github.com/googleapis/python-error-reporting" diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt index 95877c438629..76b09648d016 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.7.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.7.txt @@ -7,5 +7,5 @@ google-api-core==1.34.0 google-auth==2.14.1 proto-plus==1.22.0 -protobuf==3.19.5 +protobuf==3.20.2 google-cloud-logging==1.14.0 diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 647c829d6c19..1752363ea8e1 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1211,6 +1211,9 @@ def test_get_group_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.get_group), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.get_group() call.assert_called() _, args, _ = call.mock_calls[0] @@ -1234,6 +1237,9 @@ def test_get_group_non_empty_request_with_auto_populated_field(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.get_group), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.get_group(request=request) call.assert_called() _, args, _ = call.mock_calls[0] @@ -1242,6 +1248,41 @@ def test_get_group_non_empty_request_with_auto_populated_field(): ) +def test_get_group_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.get_group in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[client._transport.get_group] = mock_rpc + request = {} + client.get_group(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.get_group(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + @pytest.mark.asyncio async def test_get_group_empty_call_async(): # This test is a coverage failsafe to make sure that totally empty calls, @@ -1267,6 +1308,45 @@ async def test_get_group_empty_call_async(): assert args[0] == error_group_service.GetGroupRequest() +@pytest.mark.asyncio +async def test_get_group_async_use_cached_wrapped_rpc(transport: str = "grpc_asyncio"): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: + client = ErrorGroupServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert ( + client._client._transport.get_group + in client._client._transport._wrapped_methods + ) + + # Replace cached wrapped function with mock + mock_object = mock.AsyncMock() + client._client._transport._wrapped_methods[ + client._client._transport.get_group + ] = mock_object + + request = {} + await client.get_group(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_object.call_count == 1 + + await client.get_group(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_object.call_count == 2 + + @pytest.mark.asyncio async def test_get_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.GetGroupRequest @@ -1499,6 +1579,9 @@ def test_update_group_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.update_group), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.update_group() call.assert_called() _, args, _ = call.mock_calls[0] @@ -1520,12 +1603,50 @@ def test_update_group_non_empty_request_with_auto_populated_field(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.update_group), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.update_group(request=request) call.assert_called() _, args, _ = call.mock_calls[0] assert args[0] == error_group_service.UpdateGroupRequest() +def test_update_group_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.update_group in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[client._transport.update_group] = mock_rpc + request = {} + client.update_group(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.update_group(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + @pytest.mark.asyncio async def test_update_group_empty_call_async(): # This test is a coverage failsafe to make sure that totally empty calls, @@ -1551,6 +1672,47 @@ async def test_update_group_empty_call_async(): assert args[0] == error_group_service.UpdateGroupRequest() +@pytest.mark.asyncio +async def test_update_group_async_use_cached_wrapped_rpc( + transport: str = "grpc_asyncio", +): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: + client = ErrorGroupServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert ( + client._client._transport.update_group + in client._client._transport._wrapped_methods + ) + + # Replace cached wrapped function with mock + mock_object = mock.AsyncMock() + client._client._transport._wrapped_methods[ + client._client._transport.update_group + ] = mock_object + + request = {} + await client.update_group(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_object.call_count == 1 + + await client.update_group(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_object.call_count == 2 + + @pytest.mark.asyncio async def test_update_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.UpdateGroupRequest @@ -1777,6 +1939,42 @@ def test_get_group_rest(request_type): assert response.resolution_status == common.ResolutionStatus.OPEN +def test_get_group_rest_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.get_group in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[client._transport.get_group] = mock_rpc + + request = {} + client.get_group(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.get_group(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + def test_get_group_rest_required_fields( request_type=error_group_service.GetGroupRequest, ): @@ -2118,6 +2316,42 @@ def get_message_fields(field): assert response.resolution_status == common.ResolutionStatus.OPEN +def test_update_group_rest_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.update_group in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[client._transport.update_group] = mock_rpc + + request = {} + client.update_group(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.update_group(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + def test_update_group_rest_required_fields( request_type=error_group_service.UpdateGroupRequest, ): diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 512b0bb64cdc..0dd71e5540d7 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1210,6 +1210,9 @@ def test_list_group_stats_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.list_group_stats() call.assert_called() _, args, _ = call.mock_calls[0] @@ -1234,6 +1237,9 @@ def test_list_group_stats_non_empty_request_with_auto_populated_field(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.list_group_stats(request=request) call.assert_called() _, args, _ = call.mock_calls[0] @@ -1243,6 +1249,43 @@ def test_list_group_stats_non_empty_request_with_auto_populated_field(): ) +def test_list_group_stats_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.list_group_stats in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[ + client._transport.list_group_stats + ] = mock_rpc + request = {} + client.list_group_stats(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.list_group_stats(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + @pytest.mark.asyncio async def test_list_group_stats_empty_call_async(): # This test is a coverage failsafe to make sure that totally empty calls, @@ -1266,6 +1309,47 @@ async def test_list_group_stats_empty_call_async(): assert args[0] == error_stats_service.ListGroupStatsRequest() +@pytest.mark.asyncio +async def test_list_group_stats_async_use_cached_wrapped_rpc( + transport: str = "grpc_asyncio", +): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert ( + client._client._transport.list_group_stats + in client._client._transport._wrapped_methods + ) + + # Replace cached wrapped function with mock + mock_object = mock.AsyncMock() + client._client._transport._wrapped_methods[ + client._client._transport.list_group_stats + ] = mock_object + + request = {} + await client.list_group_stats(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_object.call_count == 1 + + await client.list_group_stats(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_object.call_count == 2 + + @pytest.mark.asyncio async def test_list_group_stats_async( transport: str = "grpc_asyncio", @@ -1508,13 +1592,13 @@ def test_list_group_stats_pager(transport_name: str = "grpc"): RuntimeError, ) - metadata = () - metadata = tuple(metadata) + ( + expected_metadata = () + expected_metadata = tuple(expected_metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("project_name", ""),)), ) pager = client.list_group_stats(request={}) - assert pager._metadata == metadata + assert pager._metadata == expected_metadata results = list(pager) assert len(results) == 6 @@ -1709,6 +1793,9 @@ def test_list_events_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.list_events() call.assert_called() _, args, _ = call.mock_calls[0] @@ -1734,6 +1821,9 @@ def test_list_events_non_empty_request_with_auto_populated_field(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.list_events), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.list_events(request=request) call.assert_called() _, args, _ = call.mock_calls[0] @@ -1744,6 +1834,41 @@ def test_list_events_non_empty_request_with_auto_populated_field(): ) +def test_list_events_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.list_events in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[client._transport.list_events] = mock_rpc + request = {} + client.list_events(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.list_events(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + @pytest.mark.asyncio async def test_list_events_empty_call_async(): # This test is a coverage failsafe to make sure that totally empty calls, @@ -1767,6 +1892,47 @@ async def test_list_events_empty_call_async(): assert args[0] == error_stats_service.ListEventsRequest() +@pytest.mark.asyncio +async def test_list_events_async_use_cached_wrapped_rpc( + transport: str = "grpc_asyncio", +): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert ( + client._client._transport.list_events + in client._client._transport._wrapped_methods + ) + + # Replace cached wrapped function with mock + mock_object = mock.AsyncMock() + client._client._transport._wrapped_methods[ + client._client._transport.list_events + ] = mock_object + + request = {} + await client.list_events(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_object.call_count == 1 + + await client.list_events(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_object.call_count == 2 + + @pytest.mark.asyncio async def test_list_events_async( transport: str = "grpc_asyncio", request_type=error_stats_service.ListEventsRequest @@ -1996,13 +2162,13 @@ def test_list_events_pager(transport_name: str = "grpc"): RuntimeError, ) - metadata = () - metadata = tuple(metadata) + ( + expected_metadata = () + expected_metadata = tuple(expected_metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("project_name", ""),)), ) pager = client.list_events(request={}) - assert pager._metadata == metadata + assert pager._metadata == expected_metadata results = list(pager) assert len(results) == 6 @@ -2192,6 +2358,9 @@ def test_delete_events_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.delete_events), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.delete_events() call.assert_called() _, args, _ = call.mock_calls[0] @@ -2215,6 +2384,9 @@ def test_delete_events_non_empty_request_with_auto_populated_field(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client.transport.delete_events), "__call__") as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.delete_events(request=request) call.assert_called() _, args, _ = call.mock_calls[0] @@ -2223,6 +2395,41 @@ def test_delete_events_non_empty_request_with_auto_populated_field(): ) +def test_delete_events_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.delete_events in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[client._transport.delete_events] = mock_rpc + request = {} + client.delete_events(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.delete_events(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + @pytest.mark.asyncio async def test_delete_events_empty_call_async(): # This test is a coverage failsafe to make sure that totally empty calls, @@ -2244,6 +2451,47 @@ async def test_delete_events_empty_call_async(): assert args[0] == error_stats_service.DeleteEventsRequest() +@pytest.mark.asyncio +async def test_delete_events_async_use_cached_wrapped_rpc( + transport: str = "grpc_asyncio", +): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: + client = ErrorStatsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert ( + client._client._transport.delete_events + in client._client._transport._wrapped_methods + ) + + # Replace cached wrapped function with mock + mock_object = mock.AsyncMock() + client._client._transport._wrapped_methods[ + client._client._transport.delete_events + ] = mock_object + + request = {} + await client.delete_events(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_object.call_count == 1 + + await client.delete_events(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_object.call_count == 2 + + @pytest.mark.asyncio async def test_delete_events_async( transport: str = "grpc_asyncio", @@ -2464,6 +2712,44 @@ def test_list_group_stats_rest(request_type): assert response.next_page_token == "next_page_token_value" +def test_list_group_stats_rest_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.list_group_stats in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[ + client._transport.list_group_stats + ] = mock_rpc + + request = {} + client.list_group_stats(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.list_group_stats(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + def test_list_group_stats_rest_required_fields( request_type=error_stats_service.ListGroupStatsRequest, ): @@ -2822,6 +3108,42 @@ def test_list_events_rest(request_type): assert response.next_page_token == "next_page_token_value" +def test_list_events_rest_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.list_events in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[client._transport.list_events] = mock_rpc + + request = {} + client.list_events(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.list_events(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + def test_list_events_rest_required_fields( request_type=error_stats_service.ListEventsRequest, ): @@ -3183,6 +3505,42 @@ def test_delete_events_rest(request_type): assert isinstance(response, error_stats_service.DeleteEventsResponse) +def test_delete_events_rest_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert client._transport.delete_events in client._transport._wrapped_methods + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[client._transport.delete_events] = mock_rpc + + request = {} + client.delete_events(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.delete_events(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + def test_delete_events_rest_required_fields( request_type=error_stats_service.DeleteEventsRequest, ): diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 7904cc875d96..276ba85405fd 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1241,6 +1241,9 @@ def test_report_error_event_empty_call(): with mock.patch.object( type(client.transport.report_error_event), "__call__" ) as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.report_error_event() call.assert_called() _, args, _ = call.mock_calls[0] @@ -1266,6 +1269,9 @@ def test_report_error_event_non_empty_request_with_auto_populated_field(): with mock.patch.object( type(client.transport.report_error_event), "__call__" ) as call: + call.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) client.report_error_event(request=request) call.assert_called() _, args, _ = call.mock_calls[0] @@ -1274,6 +1280,45 @@ def test_report_error_event_non_empty_request_with_auto_populated_field(): ) +def test_report_error_event_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert ( + client._transport.report_error_event in client._transport._wrapped_methods + ) + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[ + client._transport.report_error_event + ] = mock_rpc + request = {} + client.report_error_event(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.report_error_event(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + @pytest.mark.asyncio async def test_report_error_event_empty_call_async(): # This test is a coverage failsafe to make sure that totally empty calls, @@ -1297,6 +1342,47 @@ async def test_report_error_event_empty_call_async(): assert args[0] == report_errors_service.ReportErrorEventRequest() +@pytest.mark.asyncio +async def test_report_error_event_async_use_cached_wrapped_rpc( + transport: str = "grpc_asyncio", +): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: + client = ReportErrorsServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert ( + client._client._transport.report_error_event + in client._client._transport._wrapped_methods + ) + + # Replace cached wrapped function with mock + mock_object = mock.AsyncMock() + client._client._transport._wrapped_methods[ + client._client._transport.report_error_event + ] = mock_object + + request = {} + await client.report_error_event(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_object.call_count == 1 + + await client.report_error_event(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_object.call_count == 2 + + @pytest.mark.asyncio async def test_report_error_event_async( transport: str = "grpc_asyncio", @@ -1638,6 +1724,46 @@ def get_message_fields(field): assert isinstance(response, report_errors_service.ReportErrorEventResponse) +def test_report_error_event_rest_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() + + # Ensure method has been cached + assert ( + client._transport.report_error_event in client._transport._wrapped_methods + ) + + # Replace cached wrapped function with mock + mock_rpc = mock.Mock() + mock_rpc.return_value.name = ( + "foo" # operation_request.operation in compute client(s) expect a string. + ) + client._transport._wrapped_methods[ + client._transport.report_error_event + ] = mock_rpc + + request = {} + client.report_error_event(request) + + # Establish that the underlying gRPC stub method was called. + assert mock_rpc.call_count == 1 + + client.report_error_event(request) + + # Establish that a new wrapper was not created for this call + assert wrapper_fn.call_count == 0 + assert mock_rpc.call_count == 2 + + def test_report_error_event_rest_required_fields( request_type=report_errors_service.ReportErrorEventRequest, ): From 3c204095bcf7630feb268343a7ed1ee1876c3ff7 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:58:01 -0400 Subject: [PATCH 443/467] chore: Update gapic-generator-python to v1.18.3 (#517) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: Updates documentation with regional resource names for multiple requests docs: Removes references as a "global-only" service PiperOrigin-RevId: 652832022 Source-Link: https://github.com/googleapis/googleapis/commit/72b72389895f0c4da476e04625a45b898952a873 Source-Link: https://github.com/googleapis/googleapis-gen/commit/fa6a37c10040be800a9bfe3286f26785535c3737 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZmE2YTM3YzEwMDQwYmU4MDBhOWJmZTMyODZmMjY3ODU1MzVjMzczNyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update gapic-generator-python to v1.18.3 PiperOrigin-RevId: 655567917 Source-Link: https://github.com/googleapis/googleapis/commit/43aa65e3897557c11d947f3133ddb76e5c4b2a6c Source-Link: https://github.com/googleapis/googleapis-gen/commit/0e38378753074c0f66ff63348d6864929e104d5c Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMGUzODM3ODc1MzA3NGMwZjY2ZmY2MzM0OGQ2ODY0OTI5ZTEwNGQ1YyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update gapic-generator-python to v1.18.3 PiperOrigin-RevId: 656040068 Source-Link: https://github.com/googleapis/googleapis/commit/3f4e29a88f2e1f412439e61c48c88f81dec0bbbf Source-Link: https://github.com/googleapis/googleapis-gen/commit/b8feb2109dde7b0938c22c993d002251ac6714dc Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYjhmZWIyMTA5ZGRlN2IwOTM4YzIyYzk5M2QwMDIyNTFhYzY3MTRkYyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../error_group_service/async_client.py | 22 ++- .../services/error_group_service/client.py | 22 ++- .../error_group_service/transports/rest.py | 9 ++ .../error_stats_service/async_client.py | 69 ++++++-- .../services/error_stats_service/client.py | 69 ++++++-- .../error_stats_service/transports/rest.py | 12 ++ .../report_errors_service/async_client.py | 17 +- .../services/report_errors_service/client.py | 17 +- .../report_errors_service/transports/grpc.py | 17 +- .../transports/grpc_asyncio.py | 17 +- .../errorreporting_v1beta1/types/common.py | 34 +++- .../types/error_group_service.py | 22 ++- .../types/error_stats_service.py | 147 ++++++++++++------ .../types/report_errors_service.py | 17 +- 14 files changed, 373 insertions(+), 118 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index c67a5c323168..724b56f03cb7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -305,12 +305,26 @@ async def sample_get_group(): The request object. A request to return an individual group. group_name (:class:`str`): - Required. The group resource name. Written as - ``projects/{projectID}/groups/{group_name}``. Call - ```groupStats.list`` `__ + Required. The group resource name. Written as either + ``projects/{projectID}/groups/{group_id}`` or + ``projects/{projectID}/locations/{location}/groups/{group_id}``. + Call [groupStats.list] + [google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats] to return a list of groups belonging to this project. - Example: ``projects/my-project-123/groups/my-group`` + Examples: ``projects/my-project-123/groups/my-group``, + ``projects/my-project-123/locations/global/groups/my-group`` + + In the group resource name, the ``group_id`` is a unique + identifier for a particular error group. The identifier + is derived from key parts of the error-log content and + is treated as Service Data. For information about how + Service Data is handled, see `Google Cloud Privacy + Notice `__. + + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. This corresponds to the ``group_name`` field on the ``request`` instance; if ``request`` is provided, this diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index cba6d6c9c3c6..f56f11db350c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -718,12 +718,26 @@ def sample_get_group(): The request object. A request to return an individual group. group_name (str): - Required. The group resource name. Written as - ``projects/{projectID}/groups/{group_name}``. Call - ```groupStats.list`` `__ + Required. The group resource name. Written as either + ``projects/{projectID}/groups/{group_id}`` or + ``projects/{projectID}/locations/{location}/groups/{group_id}``. + Call [groupStats.list] + [google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats] to return a list of groups belonging to this project. - Example: ``projects/my-project-123/groups/my-group`` + Examples: ``projects/my-project-123/groups/my-group``, + ``projects/my-project-123/locations/global/groups/my-group`` + + In the group resource name, the ``group_id`` is a unique + identifier for a particular error group. The identifier + is derived from key parts of the error-log content and + is treated as Service Data. For information about how + Service Data is handled, see `Google Cloud Privacy + Notice `__. + + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. This corresponds to the ``group_name`` field on the ``request`` instance; if ``request`` is provided, this diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py index db1beb087bc3..900d875aacb2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -277,6 +277,10 @@ def __call__( "method": "get", "uri": "/v1beta1/{group_name=projects/*/groups/*}", }, + { + "method": "get", + "uri": "/v1beta1/{group_name=projects/*/locations/*/groups/*}", + }, ] request, metadata = self._interceptor.pre_get_group(request, metadata) pb_request = error_group_service.GetGroupRequest.pb(request) @@ -366,6 +370,11 @@ def __call__( "uri": "/v1beta1/{group.name=projects/*/groups/*}", "body": "group", }, + { + "method": "put", + "uri": "/v1beta1/{group.name=projects/*/locations/*/groups/*}", + "body": "group", + }, ] request, metadata = self._interceptor.pre_update_group(request, metadata) pb_request = error_group_service.UpdateGroupRequest.pb(request) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index b1f1ac82f6fc..702c5bfd6566 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -315,10 +315,20 @@ async def sample_list_group_stats(): project. Written as ``projects/{projectID}`` or ``projects/{projectNumber}``, where ``{projectID}`` and ``{projectNumber}`` can be found in the `Google Cloud - Console `__. + console `__. + It may also include a location, such as + ``projects/{projectID}/locations/{location}`` where + ``{location}`` is a cloud region. Examples: ``projects/my-project-123``, - ``projects/5551234``. + ``projects/5551234``, + ``projects/my-project-123/locations/us-central1``, + ``projects/5551234/locations/us-central1``. + + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. Use ``-`` as + a wildcard to request group stats from all regions. This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this @@ -326,12 +336,20 @@ async def sample_list_group_stats(): time_range (:class:`google.cloud.errorreporting_v1beta1.types.QueryTimeRange`): Optional. List data for the given time range. If not set, a default time range is used. The field - time_range_begin in the response will specify the - beginning of this time range. Only ErrorGroupStats with - a non-zero count in the given time range are returned, - unless the request contains an explicit group_id list. - If a group_id list is given, also ErrorGroupStats with - zero occurrences are returned. + [time_range_begin] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.time_range_begin] + in the response will specify the beginning of this time + range. Only [ErrorGroupStats] + [google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats] + with a non-zero count in the given time range are + returned, unless the request contains an explicit + [group_id] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id] + list. If a [group_id] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id] + list is given, also [ErrorGroupStats] + [google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats] + with zero occurrences are returned. This corresponds to the ``time_range`` field on the ``request`` instance; if ``request`` is provided, this @@ -456,18 +474,30 @@ async def sample_list_events(): return. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/{projectID}``, where + project. Written as ``projects/{projectID}`` or + ``projects/{projectID}/locations/{location}``, where ``{projectID}`` is the `Google Cloud Platform project - ID `__. + ID `__ + and ``{location}`` is a Cloud region. + + Examples: ``projects/my-project-123``, + ``projects/my-project-123/locations/global``. - Example: ``projects/my-project-123``. + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. group_id (:class:`str`): - Required. The group for which events - shall be returned. + Required. The group for which events shall be returned. + The ``group_id`` is a unique identifier for a particular + error group. The identifier is derived from key parts of + the error-log content and is treated as Service Data. + For information about how Service Data is handled, see + `Google Cloud Privacy + Notice `__. This corresponds to the ``group_id`` field on the ``request`` instance; if ``request`` is provided, this @@ -588,11 +618,18 @@ async def sample_delete_events(): The request object. Deletes all events in the project. project_name (:class:`str`): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/{projectID}``, where + project. Written as ``projects/{projectID}`` or + ``projects/{projectID}/locations/{location}``, where ``{projectID}`` is the `Google Cloud Platform project - ID `__. + ID `__ + and ``{location}`` is a Cloud region. + + Examples: ``projects/my-project-123``, + ``projects/my-project-123/locations/global``. - Example: ``projects/my-project-123``. + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 5cce65c52987..d6a628eaa9c6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -728,10 +728,20 @@ def sample_list_group_stats(): project. Written as ``projects/{projectID}`` or ``projects/{projectNumber}``, where ``{projectID}`` and ``{projectNumber}`` can be found in the `Google Cloud - Console `__. + console `__. + It may also include a location, such as + ``projects/{projectID}/locations/{location}`` where + ``{location}`` is a cloud region. Examples: ``projects/my-project-123``, - ``projects/5551234``. + ``projects/5551234``, + ``projects/my-project-123/locations/us-central1``, + ``projects/5551234/locations/us-central1``. + + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. Use ``-`` as + a wildcard to request group stats from all regions. This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this @@ -739,12 +749,20 @@ def sample_list_group_stats(): time_range (google.cloud.errorreporting_v1beta1.types.QueryTimeRange): Optional. List data for the given time range. If not set, a default time range is used. The field - time_range_begin in the response will specify the - beginning of this time range. Only ErrorGroupStats with - a non-zero count in the given time range are returned, - unless the request contains an explicit group_id list. - If a group_id list is given, also ErrorGroupStats with - zero occurrences are returned. + [time_range_begin] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.time_range_begin] + in the response will specify the beginning of this time + range. Only [ErrorGroupStats] + [google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats] + with a non-zero count in the given time range are + returned, unless the request contains an explicit + [group_id] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id] + list. If a [group_id] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id] + list is given, also [ErrorGroupStats] + [google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats] + with zero occurrences are returned. This corresponds to the ``time_range`` field on the ``request`` instance; if ``request`` is provided, this @@ -866,18 +884,30 @@ def sample_list_events(): return. project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/{projectID}``, where + project. Written as ``projects/{projectID}`` or + ``projects/{projectID}/locations/{location}``, where ``{projectID}`` is the `Google Cloud Platform project - ID `__. + ID `__ + and ``{location}`` is a Cloud region. + + Examples: ``projects/my-project-123``, + ``projects/my-project-123/locations/global``. - Example: ``projects/my-project-123``. + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. group_id (str): - Required. The group for which events - shall be returned. + Required. The group for which events shall be returned. + The ``group_id`` is a unique identifier for a particular + error group. The identifier is derived from key parts of + the error-log content and is treated as Service Data. + For information about how Service Data is handled, see + `Google Cloud Privacy + Notice `__. This corresponds to the ``group_id`` field on the ``request`` instance; if ``request`` is provided, this @@ -995,11 +1025,18 @@ def sample_delete_events(): The request object. Deletes all events in the project. project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/{projectID}``, where + project. Written as ``projects/{projectID}`` or + ``projects/{projectID}/locations/{location}``, where ``{projectID}`` is the `Google Cloud Platform project - ID `__. + ID `__ + and ``{location}`` is a Cloud region. + + Examples: ``projects/my-project-123``, + ``projects/my-project-123/locations/global``. - Example: ``projects/my-project-123``. + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. This corresponds to the ``project_name`` field on the ``request`` instance; if ``request`` is provided, this diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py index f8a18a3089ec..f7cbbf8fa0a9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -311,6 +311,10 @@ def __call__( "method": "delete", "uri": "/v1beta1/{project_name=projects/*}/events", }, + { + "method": "delete", + "uri": "/v1beta1/{project_name=projects/*/locations/*}/events", + }, ] request, metadata = self._interceptor.pre_delete_events(request, metadata) pb_request = error_stats_service.DeleteEventsRequest.pb(request) @@ -401,6 +405,10 @@ def __call__( "method": "get", "uri": "/v1beta1/{project_name=projects/*}/events", }, + { + "method": "get", + "uri": "/v1beta1/{project_name=projects/*/locations/*}/events", + }, ] request, metadata = self._interceptor.pre_list_events(request, metadata) pb_request = error_stats_service.ListEventsRequest.pb(request) @@ -488,6 +496,10 @@ def __call__( "method": "get", "uri": "/v1beta1/{project_name=projects/*}/groupStats", }, + { + "method": "get", + "uri": "/v1beta1/{project_name=projects/*/locations/*}/groupStats", + }, ] request, metadata = self._interceptor.pre_list_group_stats( request, metadata diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 222a2a656289..1dea38b7456e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -280,10 +280,19 @@ async def report_error_event( ``POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`` - **Note:** `Error Reporting `__ is a global - service built on Cloud Logging and doesn't analyze logs stored - in regional log buckets or logs routed to other Google Cloud - projects. + **Note:** [Error Reporting] + (https://cloud.google.com/error-reporting) is a service built on + Cloud Logging and can analyze log entries when all of the + following are true: + + - Customer-managed encryption keys (CMEK) are disabled on the + log bucket. + - The log bucket satisfies one of the following: + + - The log bucket is stored in the same project where the + logs originated. + - The logs were routed to a project, and then that project + stored those logs in a log bucket that it owns. .. code-block:: python diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 001d5c5e84ed..37efdb0f5002 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -679,10 +679,19 @@ def report_error_event( ``POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`` - **Note:** `Error Reporting `__ is a global - service built on Cloud Logging and doesn't analyze logs stored - in regional log buckets or logs routed to other Google Cloud - projects. + **Note:** [Error Reporting] + (https://cloud.google.com/error-reporting) is a service built on + Cloud Logging and can analyze log entries when all of the + following are true: + + - Customer-managed encryption keys (CMEK) are disabled on the + log bucket. + - The log bucket satisfies one of the following: + + - The log bucket is stored in the same project where the + logs originated. + - The logs were routed to a project, and then that project + stored those logs in a log bucket that it owns. .. code-block:: python diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index be3ec4061dab..0cbcc619f7f7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -253,10 +253,19 @@ def report_error_event( ``POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`` - **Note:** `Error Reporting `__ is a global - service built on Cloud Logging and doesn't analyze logs stored - in regional log buckets or logs routed to other Google Cloud - projects. + **Note:** [Error Reporting] + (https://cloud.google.com/error-reporting) is a service built on + Cloud Logging and can analyze log entries when all of the + following are true: + + - Customer-managed encryption keys (CMEK) are disabled on the + log bucket. + - The log bucket satisfies one of the following: + + - The log bucket is stored in the same project where the + logs originated. + - The logs were routed to a project, and then that project + stored those logs in a log bucket that it owns. Returns: Callable[[~.ReportErrorEventRequest], diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 844198797b8f..5b3612ba1aee 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -257,10 +257,19 @@ def report_error_event( ``POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`` - **Note:** `Error Reporting `__ is a global - service built on Cloud Logging and doesn't analyze logs stored - in regional log buckets or logs routed to other Google Cloud - projects. + **Note:** [Error Reporting] + (https://cloud.google.com/error-reporting) is a service built on + Cloud Logging and can analyze log entries when all of the + following are true: + + - Customer-managed encryption keys (CMEK) are disabled on the + log bucket. + - The log bucket satisfies one of the following: + + - The log bucket is stored in the same project where the + logs originated. + - The logs were routed to a project, and then that project + stored those logs in a log bucket that it owns. Returns: Callable[[~.ReportErrorEventRequest], diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index d7517ecb2739..1278fa58080b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -70,18 +70,38 @@ class ErrorGroup(proto.Message): Attributes: name (str): - The group resource name. - Example: - projects/my-project-123/groups/CNSgkpnppqKCUw + The group resource name. Written as + ``projects/{projectID}/groups/{group_id}`` or + ``projects/{projectID}/locations/{location}/groups/{group_id}`` + + Examples: ``projects/my-project-123/groups/my-group``, + ``projects/my-project-123/locations/us-central1/groups/my-group`` + + In the group resource name, the ``group_id`` is a unique + identifier for a particular error group. The identifier is + derived from key parts of the error-log content and is + treated as Service Data. For information about how Service + Data is handled, see `Google Cloud Privacy + Notice `__. + + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. group_id (str): - Group IDs are unique for a given project. If - the same kind of error occurs in different - service contexts, it will receive the same group - ID. + An opaque identifier of the group. This field is assigned by + the Error Reporting system and always populated. + + In the group resource name, the ``group_id`` is a unique + identifier for a particular error group. The identifier is + derived from key parts of the error-log content and is + treated as Service Data. For information about how Service + Data is handled, see `Google Cloud Privacy + Notice `__. tracking_issues (MutableSequence[google.cloud.errorreporting_v1beta1.types.TrackingIssue]): Associated tracking issues. resolution_status (google.cloud.errorreporting_v1beta1.types.ResolutionStatus): Error group's resolution status. + An unspecified resolution status will be interpreted as OPEN """ diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index d38bb52d176c..cfd82fa7957b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -36,12 +36,26 @@ class GetGroupRequest(proto.Message): Attributes: group_name (str): - Required. The group resource name. Written as - ``projects/{projectID}/groups/{group_name}``. Call - ```groupStats.list`` `__ + Required. The group resource name. Written as either + ``projects/{projectID}/groups/{group_id}`` or + ``projects/{projectID}/locations/{location}/groups/{group_id}``. + Call [groupStats.list] + [google.devtools.clouderrorreporting.v1beta1.ErrorStatsService.ListGroupStats] to return a list of groups belonging to this project. - Example: ``projects/my-project-123/groups/my-group`` + Examples: ``projects/my-project-123/groups/my-group``, + ``projects/my-project-123/locations/global/groups/my-group`` + + In the group resource name, the ``group_id`` is a unique + identifier for a particular error group. The identifier is + derived from key parts of the error-log content and is + treated as Service Data. For information about how Service + Data is handled, see `Google Cloud Privacy + Notice `__. + + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. """ group_name: str = proto.Field( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index 53e4a8f97a4f..93158ab50be3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -53,12 +53,18 @@ class TimedCountAlignment(proto.Enum): ALIGNMENT_EQUAL_ROUNDED (1): The time periods shall be consecutive, have width equal to the requested duration, and be aligned at the - ``alignment_time`` provided in the request. The - ``alignment_time`` does not have to be inside the query - period but even if it is outside, only time periods are - returned which overlap with the query period. A rounded - alignment will typically result in a different size of the - first or the last time period. + [alignment_time] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment_time] + provided in the request. + + The [alignment_time] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.alignment_time] + does not have to be inside the query period but even if it + is outside, only time periods are returned which overlap + with the query period. + + A rounded alignment will typically result in a different + size of the first or the last time period. ALIGNMENT_EQUAL_AT_END (2): The time periods shall be consecutive, have width equal to the requested duration, and be @@ -106,29 +112,54 @@ class ListGroupStatsRequest(proto.Message): project. Written as ``projects/{projectID}`` or ``projects/{projectNumber}``, where ``{projectID}`` and ``{projectNumber}`` can be found in the `Google Cloud - Console `__. - - Examples: ``projects/my-project-123``, ``projects/5551234``. + console `__. + It may also include a location, such as + ``projects/{projectID}/locations/{location}`` where + ``{location}`` is a cloud region. + + Examples: ``projects/my-project-123``, ``projects/5551234``, + ``projects/my-project-123/locations/us-central1``, + ``projects/5551234/locations/us-central1``. + + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. Use ``-`` as a + wildcard to request group stats from all regions. group_id (MutableSequence[str]): - Optional. List all - ErrorGroupStats with these IDs. + Optional. List all [ErrorGroupStats] + [google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats] + with these IDs. The ``group_id`` is a unique identifier for + a particular error group. The identifier is derived from key + parts of the error-log content and is treated as Service + Data. For information about how Service Data is handled, see + [Google Cloud Privacy Notice] + (https://cloud.google.com/terms/cloud-privacy-notice). service_filter (google.cloud.errorreporting_v1beta1.types.ServiceContextFilter): - Optional. List only - ErrorGroupStats which belong to a - service context that matches the filter. Data - for all service contexts is returned if this - field is not specified. + Optional. List only [ErrorGroupStats] + [google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats] + which belong to a service context that matches the filter. + Data for all service contexts is returned if this field is + not specified. time_range (google.cloud.errorreporting_v1beta1.types.QueryTimeRange): Optional. List data for the given time range. If not set, a - default time range is used. The field time_range_begin in - the response will specify the beginning of this time range. - Only ErrorGroupStats with a non-zero count in the given time - range are returned, unless the request contains an explicit - group_id list. If a group_id list is given, also - ErrorGroupStats with zero occurrences are returned. + default time range is used. The field [time_range_begin] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.time_range_begin] + in the response will specify the beginning of this time + range. Only [ErrorGroupStats] + [google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats] + with a non-zero count in the given time range are returned, + unless the request contains an explicit [group_id] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id] + list. If a [group_id] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsRequest.group_id] + list is given, also [ErrorGroupStats] + [google.devtools.clouderrorreporting.v1beta1.ErrorGroupStats] + with zero occurrences are returned. timed_count_duration (google.protobuf.duration_pb2.Duration): Optional. The preferred duration for a single returned - ``TimedCount``. If not set, no timed counts are returned. + [TimedCount] + [google.devtools.clouderrorreporting.v1beta1.TimedCount]. If + not set, no timed counts are returned. alignment (google.cloud.errorreporting_v1beta1.types.TimedCountAlignment): Optional. The alignment of the timed counts to be returned. Default is ``ALIGNMENT_EQUAL_AT_END``. @@ -143,9 +174,11 @@ class ListGroupStatsRequest(proto.Message): Optional. The maximum number of results to return per response. Default is 20. page_token (str): - Optional. A ``next_page_token`` provided by a previous - response. To view additional results, pass this token along - with the identical query parameters as the first request. + Optional. A [next_page_token] + [google.devtools.clouderrorreporting.v1beta1.ListGroupStatsResponse.next_page_token] + provided by a previous response. To view additional results, + pass this token along with the identical query parameters as + the first request. """ project_name: str = proto.Field( @@ -251,15 +284,16 @@ class ErrorGroupStats(proto.Message): affected_users_count (int): Approximate number of affected users in the given group that match the filter criteria. Users are distinguished by data - in the ``ErrorContext`` of the individual error events, such - as their login name or their remote IP address in case of - HTTP requests. The number of affected users can be zero even - if the number of errors is non-zero if no data was provided - from which the affected user could be deduced. Users are - counted based on data in the request context that was - provided in the error report. If more users are implicitly - affected, such as due to a crash of the whole service, this - is not reflected here. + in the [ErrorContext] + [google.devtools.clouderrorreporting.v1beta1.ErrorContext] + of the individual error events, such as their login name or + their remote IP address in case of HTTP requests. The number + of affected users can be zero even if the number of errors + is non-zero if no data was provided from which the affected + user could be deduced. Users are counted based on data in + the request context that was provided in the error report. + If more users are implicitly affected, such as due to a + crash of the whole service, this is not reflected here. timed_counts (MutableSequence[google.cloud.errorreporting_v1beta1.types.TimedCount]): Approximate number of occurrences over time. Timed counts returned by ListGroups are @@ -377,14 +411,26 @@ class ListEventsRequest(proto.Message): Attributes: project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/{projectID}``, where + project. Written as ``projects/{projectID}`` or + ``projects/{projectID}/locations/{location}``, where ``{projectID}`` is the `Google Cloud Platform project - ID `__. + ID `__ and + ``{location}`` is a Cloud region. - Example: ``projects/my-project-123``. + Examples: ``projects/my-project-123``, + ``projects/my-project-123/locations/global``. + + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. group_id (str): - Required. The group for which events shall be - returned. + Required. The group for which events shall be returned. The + ``group_id`` is a unique identifier for a particular error + group. The identifier is derived from key parts of the + error-log content and is treated as Service Data. For + information about how Service Data is handled, see `Google + Cloud Privacy + Notice `__. service_filter (google.cloud.errorreporting_v1beta1.types.ServiceContextFilter): Optional. List only ErrorGroups which belong to a service context that matches the filter. @@ -469,7 +515,13 @@ def raw_page(self): class QueryTimeRange(proto.Message): - r"""Requests might be rejected or the resulting timed count + r"""A time range for which error group data shall be displayed. + Query time ranges end at 'now'. + When longer time ranges are selected, the resolution of the data + decreases. The description of each time range below indicates + the suggested minimum timed count duration for that range. + + Requests might be rejected or the resulting timed count durations might be adjusted for lower durations. Attributes: @@ -555,11 +607,18 @@ class DeleteEventsRequest(proto.Message): Attributes: project_name (str): Required. The resource name of the Google Cloud Platform - project. Written as ``projects/{projectID}``, where + project. Written as ``projects/{projectID}`` or + ``projects/{projectID}/locations/{location}``, where ``{projectID}`` is the `Google Cloud Platform project - ID `__. + ID `__ and + ``{location}`` is a Cloud region. + + Examples: ``projects/my-project-123``, + ``projects/my-project-123/locations/global``. - Example: ``projects/my-project-123``. + For a list of supported locations, see `Supported + Regions `__. + ``global`` is the default when unspecified. """ project_name: str = proto.Field( diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index 1e719f92ea0f..87c1b14dcb4e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -72,10 +72,13 @@ class ReportedErrorEvent(proto.Message): Attributes: event_time (google.protobuf.timestamp_pb2.Timestamp): - Optional. Time when the event occurred. - If not provided, the time when the event was - received by the Error Reporting system will be - used. + Optional. Time when the event occurred. If not provided, the + time when the event was received by the Error Reporting + system is used. If provided, the time must not exceed the + `logs retention + period `__ + in the past, or be more than 24 hours in the future. If an + invalid time is provided, then an error is returned. service_context (google.cloud.errorreporting_v1beta1.types.ServiceContext): Required. The service context in which this error has occurred. @@ -99,10 +102,10 @@ class ReportedErrorEvent(proto.Message): ```Exception.backtrace`` `__. - **C#**: Must be the return value of ```Exception.ToString()`` `__. - - **PHP**: Must start with - ``PHP (Notice|Parse error|Fatal error|Warning)`` and + - **PHP**: Must be prefixed with + ``"PHP (Notice|Parse error|Fatal error|Warning): "`` and contain the result of - ```(string)$exception`` `__. + ```(string)$exception`` `__. - **Go**: Must be the return value of ```runtime.Stack()`` `__. context (google.cloud.errorreporting_v1beta1.types.ErrorContext): From d7cb375b053964083ec6dfa34c58298748e14be5 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 14:15:13 -0400 Subject: [PATCH 444/467] fix: Retry and timeout values do not propagate in requests during pagination (#518) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.18.4 PiperOrigin-RevId: 657207628 Source-Link: https://github.com/googleapis/googleapis/commit/33fe71e5a2061402283e0455636a98e5b78eaf7f Source-Link: https://github.com/googleapis/googleapis-gen/commit/e02739d122ed15bd5ef5771c57f12a83d47a1dda Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZTAyNzM5ZDEyMmVkMTViZDVlZjU3NzFjNTdmMTJhODNkNDdhMWRkYSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../error_stats_service/async_client.py | 4 ++ .../services/error_stats_service/client.py | 4 ++ .../services/error_stats_service/pagers.py | 69 +++++++++++++++++-- .../test_error_group_service.py | 1 + .../test_error_stats_service.py | 13 +++- .../test_report_errors_service.py | 1 + 6 files changed, 86 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 702c5bfd6566..2ba6b9e2108a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -422,6 +422,8 @@ async def sample_list_group_stats(): method=rpc, request=request, response=response, + retry=retry, + timeout=timeout, metadata=metadata, ) @@ -570,6 +572,8 @@ async def sample_list_events(): method=rpc, request=request, response=response, + retry=retry, + timeout=timeout, metadata=metadata, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index d6a628eaa9c6..6356e9d5f6a3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -832,6 +832,8 @@ def sample_list_group_stats(): method=rpc, request=request, response=response, + retry=retry, + timeout=timeout, metadata=metadata, ) @@ -977,6 +979,8 @@ def sample_list_events(): method=rpc, request=request, response=response, + retry=retry, + timeout=timeout, metadata=metadata, ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index 4c333f7576e8..274f7ac23f18 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -13,6 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.api_core import retry_async as retries_async from typing import ( Any, AsyncIterator, @@ -22,8 +25,18 @@ Tuple, Optional, Iterator, + Union, ) +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] + OptionalAsyncRetry = Union[ + retries_async.AsyncRetry, gapic_v1.method._MethodDefault, None + ] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + OptionalAsyncRetry = Union[retries_async.AsyncRetry, object, None] # type: ignore + from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -52,6 +65,8 @@ def __init__( request: error_stats_service.ListGroupStatsRequest, response: error_stats_service.ListGroupStatsResponse, *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = () ): """Instantiate the pager. @@ -63,12 +78,17 @@ def __init__( The initial request object. response (google.cloud.errorreporting_v1beta1.types.ListGroupStatsResponse): The initial response object. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. """ self._method = method self._request = error_stats_service.ListGroupStatsRequest(request) self._response = response + self._retry = retry + self._timeout = timeout self._metadata = metadata def __getattr__(self, name: str) -> Any: @@ -79,7 +99,12 @@ def pages(self) -> Iterator[error_stats_service.ListGroupStatsResponse]: yield self._response while self._response.next_page_token: self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) + self._response = self._method( + self._request, + retry=self._retry, + timeout=self._timeout, + metadata=self._metadata, + ) yield self._response def __iter__(self) -> Iterator[error_stats_service.ErrorGroupStats]: @@ -114,6 +139,8 @@ def __init__( request: error_stats_service.ListGroupStatsRequest, response: error_stats_service.ListGroupStatsResponse, *, + retry: OptionalAsyncRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = () ): """Instantiates the pager. @@ -125,12 +152,17 @@ def __init__( The initial request object. response (google.cloud.errorreporting_v1beta1.types.ListGroupStatsResponse): The initial response object. + retry (google.api_core.retry.AsyncRetry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. """ self._method = method self._request = error_stats_service.ListGroupStatsRequest(request) self._response = response + self._retry = retry + self._timeout = timeout self._metadata = metadata def __getattr__(self, name: str) -> Any: @@ -141,7 +173,12 @@ async def pages(self) -> AsyncIterator[error_stats_service.ListGroupStatsRespons yield self._response while self._response.next_page_token: self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) + self._response = await self._method( + self._request, + retry=self._retry, + timeout=self._timeout, + metadata=self._metadata, + ) yield self._response def __aiter__(self) -> AsyncIterator[error_stats_service.ErrorGroupStats]: @@ -180,6 +217,8 @@ def __init__( request: error_stats_service.ListEventsRequest, response: error_stats_service.ListEventsResponse, *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = () ): """Instantiate the pager. @@ -191,12 +230,17 @@ def __init__( The initial request object. response (google.cloud.errorreporting_v1beta1.types.ListEventsResponse): The initial response object. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. """ self._method = method self._request = error_stats_service.ListEventsRequest(request) self._response = response + self._retry = retry + self._timeout = timeout self._metadata = metadata def __getattr__(self, name: str) -> Any: @@ -207,7 +251,12 @@ def pages(self) -> Iterator[error_stats_service.ListEventsResponse]: yield self._response while self._response.next_page_token: self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) + self._response = self._method( + self._request, + retry=self._retry, + timeout=self._timeout, + metadata=self._metadata, + ) yield self._response def __iter__(self) -> Iterator[common.ErrorEvent]: @@ -242,6 +291,8 @@ def __init__( request: error_stats_service.ListEventsRequest, response: error_stats_service.ListEventsResponse, *, + retry: OptionalAsyncRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = () ): """Instantiates the pager. @@ -253,12 +304,17 @@ def __init__( The initial request object. response (google.cloud.errorreporting_v1beta1.types.ListEventsResponse): The initial response object. + retry (google.api_core.retry.AsyncRetry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. """ self._method = method self._request = error_stats_service.ListEventsRequest(request) self._response = response + self._retry = retry + self._timeout = timeout self._metadata = metadata def __getattr__(self, name: str) -> Any: @@ -269,7 +325,12 @@ async def pages(self) -> AsyncIterator[error_stats_service.ListEventsResponse]: yield self._response while self._response.next_page_token: self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) + self._response = await self._method( + self._request, + retry=self._retry, + timeout=self._timeout, + metadata=self._metadata, + ) yield self._response def __aiter__(self) -> AsyncIterator[common.ErrorEvent]: diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index 1752363ea8e1..e80b7c106c59 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -43,6 +43,7 @@ from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async from google.api_core import path_template +from google.api_core import retry as retries from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.error_group_service import ( diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 0dd71e5540d7..3312037bdbca 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -43,6 +43,7 @@ from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async from google.api_core import path_template +from google.api_core import retry as retries from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.error_stats_service import ( @@ -1593,12 +1594,16 @@ def test_list_group_stats_pager(transport_name: str = "grpc"): ) expected_metadata = () + retry = retries.Retry() + timeout = 5 expected_metadata = tuple(expected_metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("project_name", ""),)), ) - pager = client.list_group_stats(request={}) + pager = client.list_group_stats(request={}, retry=retry, timeout=timeout) assert pager._metadata == expected_metadata + assert pager._retry == retry + assert pager._timeout == timeout results = list(pager) assert len(results) == 6 @@ -2163,12 +2168,16 @@ def test_list_events_pager(transport_name: str = "grpc"): ) expected_metadata = () + retry = retries.Retry() + timeout = 5 expected_metadata = tuple(expected_metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("project_name", ""),)), ) - pager = client.list_events(request={}) + pager = client.list_events(request={}, retry=retry, timeout=timeout) assert pager._metadata == expected_metadata + assert pager._retry == retry + assert pager._timeout == timeout results = list(pager) assert len(results) == 6 diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 276ba85405fd..559a57876a21 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -43,6 +43,7 @@ from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async from google.api_core import path_template +from google.api_core import retry as retries from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.cloud.errorreporting_v1beta1.services.report_errors_service import ( From e62584ceba30e20bf90539e5908005c2d52d7741 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:21:01 -0400 Subject: [PATCH 445/467] chore(python): fix docs build (#519) Source-Link: https://github.com/googleapis/synthtool/commit/bef813d194de29ddf3576eda60148b6b3dcc93d9 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:94bb690db96e6242b2567a4860a94d48fa48696d092e51b0884a1a2c0a79a407 Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 4 ++-- .../.kokoro/docker/docs/Dockerfile | 9 ++++----- .../.kokoro/publish-docs.sh | 20 +++++++++---------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index f30cb3775afc..6d064ddb9b06 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:52210e0e0559f5ea8c52be148b33504022e1faef4e95fbe4b32d68022af2fa7e -# created: 2024-07-08T19:25:35.862283192Z + digest: sha256:94bb690db96e6242b2567a4860a94d48fa48696d092e51b0884a1a2c0a79a407 +# created: 2024-07-31T14:52:44.926548819Z diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile index 5205308b334d..e5410e296bd8 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile @@ -72,19 +72,18 @@ RUN tar -xvf Python-3.10.14.tgz RUN ./Python-3.10.14/configure --enable-optimizations RUN make altinstall -RUN python3.10 -m venv /venv -ENV PATH /venv/bin:$PATH +ENV PATH /usr/local/bin/python3.10:$PATH ###################### Install pip RUN wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ - && python3 /tmp/get-pip.py \ + && python3.10 /tmp/get-pip.py \ && rm /tmp/get-pip.py # Test pip -RUN python3 -m pip +RUN python3.10 -m pip # Install build requirements COPY requirements.txt /requirements.txt -RUN python3 -m pip install --require-hashes -r requirements.txt +RUN python3.10 -m pip install --require-hashes -r requirements.txt CMD ["python3.10"] diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh index 38f083f05aa0..233205d580e9 100755 --- a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh +++ b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh @@ -21,18 +21,18 @@ export PYTHONUNBUFFERED=1 export PATH="${HOME}/.local/bin:${PATH}" # Install nox -python3 -m pip install --require-hashes -r .kokoro/requirements.txt -python3 -m nox --version +python3.10 -m pip install --require-hashes -r .kokoro/requirements.txt +python3.10 -m nox --version # build docs nox -s docs # create metadata -python3 -m docuploader create-metadata \ +python3.10 -m docuploader create-metadata \ --name=$(jq --raw-output '.name // empty' .repo-metadata.json) \ - --version=$(python3 setup.py --version) \ + --version=$(python3.10 setup.py --version) \ --language=$(jq --raw-output '.language // empty' .repo-metadata.json) \ - --distribution-name=$(python3 setup.py --name) \ + --distribution-name=$(python3.10 setup.py --name) \ --product-page=$(jq --raw-output '.product_documentation // empty' .repo-metadata.json) \ --github-repository=$(jq --raw-output '.repo // empty' .repo-metadata.json) \ --issue-tracker=$(jq --raw-output '.issue_tracker // empty' .repo-metadata.json) @@ -40,18 +40,18 @@ python3 -m docuploader create-metadata \ cat docs.metadata # upload docs -python3 -m docuploader upload docs/_build/html --metadata-file docs.metadata --staging-bucket "${STAGING_BUCKET}" +python3.10 -m docuploader upload docs/_build/html --metadata-file docs.metadata --staging-bucket "${STAGING_BUCKET}" # docfx yaml files nox -s docfx # create metadata. -python3 -m docuploader create-metadata \ +python3.10 -m docuploader create-metadata \ --name=$(jq --raw-output '.name // empty' .repo-metadata.json) \ - --version=$(python3 setup.py --version) \ + --version=$(python3.10 setup.py --version) \ --language=$(jq --raw-output '.language // empty' .repo-metadata.json) \ - --distribution-name=$(python3 setup.py --name) \ + --distribution-name=$(python3.10 setup.py --name) \ --product-page=$(jq --raw-output '.product_documentation // empty' .repo-metadata.json) \ --github-repository=$(jq --raw-output '.repo // empty' .repo-metadata.json) \ --issue-tracker=$(jq --raw-output '.issue_tracker // empty' .repo-metadata.json) @@ -59,4 +59,4 @@ python3 -m docuploader create-metadata \ cat docs.metadata # upload docs -python3 -m docuploader upload docs/_build/html/docfx_yaml --metadata-file docs.metadata --destination-prefix docfx --staging-bucket "${V2_STAGING_BUCKET}" +python3.10 -m docuploader upload docs/_build/html/docfx_yaml --metadata-file docs.metadata --destination-prefix docfx --staging-bucket "${V2_STAGING_BUCKET}" From c880ad7ddd4849c1a0f71e8fa9e2cdd1d45b3411 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:22:08 -0400 Subject: [PATCH 446/467] chore: Update gapic-generator-python to v1.18.5 (#521) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to v1.18.5 PiperOrigin-RevId: 661268868 Source-Link: https://github.com/googleapis/googleapis/commit/f7d214cb08cd7d9b018d44564a8b184263f64177 Source-Link: https://github.com/googleapis/googleapis-gen/commit/79a8411bbdb25a983fa3aae8c0e14327df129f94 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNzlhODQxMWJiZGIyNWE5ODNmYTNhYWU4YzBlMTQzMjdkZjEyOWY5NCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../error_group_service/async_client.py | 5 +--- .../services/error_group_service/client.py | 2 +- .../error_stats_service/async_client.py | 5 +--- .../services/error_stats_service/client.py | 2 +- .../report_errors_service/async_client.py | 6 +---- .../services/report_errors_service/client.py | 2 +- .../test_error_group_service.py | 18 +++++++------ .../test_error_stats_service.py | 27 ++++++++++--------- .../test_report_errors_service.py | 9 ++++--- 9 files changed, 36 insertions(+), 40 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 724b56f03cb7..21361c25e884 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -14,7 +14,6 @@ # limitations under the License. # from collections import OrderedDict -import functools import re from typing import ( Dict, @@ -189,9 +188,7 @@ def universe_domain(self) -> str: """ return self._client._universe_domain - get_transport_class = functools.partial( - type(ErrorGroupServiceClient).get_transport_class, type(ErrorGroupServiceClient) - ) + get_transport_class = ErrorGroupServiceClient.get_transport_class def __init__( self, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index f56f11db350c..97cb91579eb5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -659,7 +659,7 @@ def __init__( Type[ErrorGroupServiceTransport], Callable[..., ErrorGroupServiceTransport], ] = ( - type(self).get_transport_class(transport) + ErrorGroupServiceClient.get_transport_class(transport) if isinstance(transport, str) or transport is None else cast(Callable[..., ErrorGroupServiceTransport], transport) ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 2ba6b9e2108a..232049f7a3f2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -14,7 +14,6 @@ # limitations under the License. # from collections import OrderedDict -import functools import re from typing import ( Dict, @@ -192,9 +191,7 @@ def universe_domain(self) -> str: """ return self._client._universe_domain - get_transport_class = functools.partial( - type(ErrorStatsServiceClient).get_transport_class, type(ErrorStatsServiceClient) - ) + get_transport_class = ErrorStatsServiceClient.get_transport_class def __init__( self, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 6356e9d5f6a3..2f128d1a04d8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -662,7 +662,7 @@ def __init__( Type[ErrorStatsServiceTransport], Callable[..., ErrorStatsServiceTransport], ] = ( - type(self).get_transport_class(transport) + ErrorStatsServiceClient.get_transport_class(transport) if isinstance(transport, str) or transport is None else cast(Callable[..., ErrorStatsServiceTransport], transport) ) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 1dea38b7456e..6c0ef6601004 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -14,7 +14,6 @@ # limitations under the License. # from collections import OrderedDict -import functools import re from typing import ( Dict, @@ -184,10 +183,7 @@ def universe_domain(self) -> str: """ return self._client._universe_domain - get_transport_class = functools.partial( - type(ReportErrorsServiceClient).get_transport_class, - type(ReportErrorsServiceClient), - ) + get_transport_class = ReportErrorsServiceClient.get_transport_class def __init__( self, diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 37efdb0f5002..212c58118ea6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -641,7 +641,7 @@ def __init__( Type[ReportErrorsServiceTransport], Callable[..., ReportErrorsServiceTransport], ] = ( - type(self).get_transport_class(transport) + ReportErrorsServiceClient.get_transport_class(transport) if isinstance(transport, str) or transport is None else cast(Callable[..., ReportErrorsServiceTransport], transport) ) diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index e80b7c106c59..e6e0089bfb82 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1330,22 +1330,23 @@ async def test_get_group_async_use_cached_wrapped_rpc(transport: str = "grpc_asy ) # Replace cached wrapped function with mock - mock_object = mock.AsyncMock() + mock_rpc = mock.AsyncMock() + mock_rpc.return_value = mock.Mock() client._client._transport._wrapped_methods[ client._client._transport.get_group - ] = mock_object + ] = mock_rpc request = {} await client.get_group(request) # Establish that the underlying gRPC stub method was called. - assert mock_object.call_count == 1 + assert mock_rpc.call_count == 1 await client.get_group(request) # Establish that a new wrapper was not created for this call assert wrapper_fn.call_count == 0 - assert mock_object.call_count == 2 + assert mock_rpc.call_count == 2 @pytest.mark.asyncio @@ -1696,22 +1697,23 @@ async def test_update_group_async_use_cached_wrapped_rpc( ) # Replace cached wrapped function with mock - mock_object = mock.AsyncMock() + mock_rpc = mock.AsyncMock() + mock_rpc.return_value = mock.Mock() client._client._transport._wrapped_methods[ client._client._transport.update_group - ] = mock_object + ] = mock_rpc request = {} await client.update_group(request) # Establish that the underlying gRPC stub method was called. - assert mock_object.call_count == 1 + assert mock_rpc.call_count == 1 await client.update_group(request) # Establish that a new wrapper was not created for this call assert wrapper_fn.call_count == 0 - assert mock_object.call_count == 2 + assert mock_rpc.call_count == 2 @pytest.mark.asyncio diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 3312037bdbca..9241fa39fca9 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1333,22 +1333,23 @@ async def test_list_group_stats_async_use_cached_wrapped_rpc( ) # Replace cached wrapped function with mock - mock_object = mock.AsyncMock() + mock_rpc = mock.AsyncMock() + mock_rpc.return_value = mock.Mock() client._client._transport._wrapped_methods[ client._client._transport.list_group_stats - ] = mock_object + ] = mock_rpc request = {} await client.list_group_stats(request) # Establish that the underlying gRPC stub method was called. - assert mock_object.call_count == 1 + assert mock_rpc.call_count == 1 await client.list_group_stats(request) # Establish that a new wrapper was not created for this call assert wrapper_fn.call_count == 0 - assert mock_object.call_count == 2 + assert mock_rpc.call_count == 2 @pytest.mark.asyncio @@ -1920,22 +1921,23 @@ async def test_list_events_async_use_cached_wrapped_rpc( ) # Replace cached wrapped function with mock - mock_object = mock.AsyncMock() + mock_rpc = mock.AsyncMock() + mock_rpc.return_value = mock.Mock() client._client._transport._wrapped_methods[ client._client._transport.list_events - ] = mock_object + ] = mock_rpc request = {} await client.list_events(request) # Establish that the underlying gRPC stub method was called. - assert mock_object.call_count == 1 + assert mock_rpc.call_count == 1 await client.list_events(request) # Establish that a new wrapper was not created for this call assert wrapper_fn.call_count == 0 - assert mock_object.call_count == 2 + assert mock_rpc.call_count == 2 @pytest.mark.asyncio @@ -2483,22 +2485,23 @@ async def test_delete_events_async_use_cached_wrapped_rpc( ) # Replace cached wrapped function with mock - mock_object = mock.AsyncMock() + mock_rpc = mock.AsyncMock() + mock_rpc.return_value = mock.Mock() client._client._transport._wrapped_methods[ client._client._transport.delete_events - ] = mock_object + ] = mock_rpc request = {} await client.delete_events(request) # Establish that the underlying gRPC stub method was called. - assert mock_object.call_count == 1 + assert mock_rpc.call_count == 1 await client.delete_events(request) # Establish that a new wrapper was not created for this call assert wrapper_fn.call_count == 0 - assert mock_object.call_count == 2 + assert mock_rpc.call_count == 2 @pytest.mark.asyncio diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index 559a57876a21..ca1f397fd44e 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1366,22 +1366,23 @@ async def test_report_error_event_async_use_cached_wrapped_rpc( ) # Replace cached wrapped function with mock - mock_object = mock.AsyncMock() + mock_rpc = mock.AsyncMock() + mock_rpc.return_value = mock.Mock() client._client._transport._wrapped_methods[ client._client._transport.report_error_event - ] = mock_object + ] = mock_rpc request = {} await client.report_error_event(request) # Establish that the underlying gRPC stub method was called. - assert mock_object.call_count == 1 + assert mock_rpc.call_count == 1 await client.report_error_event(request) # Establish that a new wrapper was not created for this call assert wrapper_fn.call_count == 0 - assert mock_object.call_count == 2 + assert mock_rpc.call_count == 2 @pytest.mark.asyncio From a20cb773cce30edd79949fbed52ba2cd42445a49 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:28:03 -0400 Subject: [PATCH 447/467] chore(python): update unittest workflow template (#523) Source-Link: https://github.com/googleapis/synthtool/commit/e6f91eb4db419b02af74197905b99fa00a6030c0 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:365d92ef2206cfad00a8c5955c36789d0de124e2b6d92a72dd0486315a0f2e57 Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- .../.github/workflows/unittest.yml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 6d064ddb9b06..f8bd8149fa87 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:94bb690db96e6242b2567a4860a94d48fa48696d092e51b0884a1a2c0a79a407 -# created: 2024-07-31T14:52:44.926548819Z + digest: sha256:365d92ef2206cfad00a8c5955c36789d0de124e2b6d92a72dd0486315a0f2e57 +# created: 2024-09-04T14:50:52.658171431Z diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index f4a337c496a0..dd8bd76922f9 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -30,6 +30,7 @@ jobs: with: name: coverage-artifact-${{ matrix.python }} path: .coverage-${{ matrix.python }} + include-hidden-files: true cover: runs-on: ubuntu-latest From 165a04a092730e654d0de91dfcd54e79c8f2a2f5 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2024 11:12:48 -0400 Subject: [PATCH 448/467] build(python): release script update (#526) Source-Link: https://github.com/googleapis/synthtool/commit/71a72973dddbc66ea64073b53eda49f0d22e0942 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:e8dcfd7cbfd8beac3a3ff8d3f3185287ea0625d859168cc80faccfc9a7a00455 Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- packages/google-cloud-error-reporting/.kokoro/release.sh | 2 +- .../google-cloud-error-reporting/.kokoro/release/common.cfg | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index f8bd8149fa87..597e0c3261ca 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:365d92ef2206cfad00a8c5955c36789d0de124e2b6d92a72dd0486315a0f2e57 -# created: 2024-09-04T14:50:52.658171431Z + digest: sha256:e8dcfd7cbfd8beac3a3ff8d3f3185287ea0625d859168cc80faccfc9a7a00455 +# created: 2024-09-16T21:04:09.091105552Z diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh index 036f248070f2..0b4837926271 100755 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ b/packages/google-cloud-error-reporting/.kokoro/release.sh @@ -23,7 +23,7 @@ python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source / export PYTHONUNBUFFERED=1 # Move into the package, build the distribution and upload. -TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google-cloud-pypi-token-keystore-1") +TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google-cloud-pypi-token-keystore-2") cd github/python-error-reporting python3 setup.py sdist bdist_wheel twine upload --username __token__ --password "${TWINE_PASSWORD}" dist/* diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg index 5c1ce9b63993..346d4892a297 100644 --- a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg @@ -28,7 +28,7 @@ before_action { fetch_keystore { keystore_resource { keystore_config_id: 73713 - keyname: "google-cloud-pypi-token-keystore-1" + keyname: "google-cloud-pypi-token-keystore-2" } } } From 630ba464cb7204392381b8446b15f2617bc291b5 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:49:35 -0400 Subject: [PATCH 449/467] chore(main): release 1.11.1 (#503) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- .../google-cloud-error-reporting/CHANGELOG.md | 15 +++++++++++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ...ogle.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index 15df9e067d89..c42d93fc6118 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.11.0" + ".": "1.11.1" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index e4b2e395688f..d3385b6040e9 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,21 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.11.1](https://github.com/googleapis/python-error-reporting/compare/v1.11.0...v1.11.1) (2024-09-17) + + +### Bug Fixes + +* Allow Protobuf 5.x ([#507](https://github.com/googleapis/python-error-reporting/issues/507)) ([8d33168](https://github.com/googleapis/python-error-reporting/commit/8d3316866c0825911b26f17fd4f703cabbc3c396)) +* Retry and timeout values do not propagate in requests during pagination ([#518](https://github.com/googleapis/python-error-reporting/issues/518)) ([cbe41fd](https://github.com/googleapis/python-error-reporting/commit/cbe41fd1fa4edbb1c574cd2c07dc99d4415c3078)) + + +### Documentation + +* Add summary_overview template ([#496](https://github.com/googleapis/python-error-reporting/issues/496)) ([988def5](https://github.com/googleapis/python-error-reporting/commit/988def551df3f95577519450470a7cbf5f3b6b7d)) +* Removes references as a "global-only" service ([1fef616](https://github.com/googleapis/python-error-reporting/commit/1fef61635e3f9d7297f9fe28d18568cf6c2a0fc1)) +* Updates documentation with regional resource names for multiple requests ([1fef616](https://github.com/googleapis/python-error-reporting/commit/1fef61635e3f9d7297f9fe28d18568cf6c2a0fc1)) + ## [1.11.0](https://github.com/googleapis/python-error-reporting/compare/v1.10.0...v1.11.0) (2024-03-26) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index 98fb3f5858e8..a034d27a388b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.11.0" # {x-release-please-version} +__version__ = "1.11.1" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index 98fb3f5858e8..a034d27a388b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.11.0" # {x-release-please-version} +__version__ = "1.11.1" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index fedd655c8443..f8a87619a8db 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.11.1" }, "snippets": [ { From 1d8f9fb8f49f889247625878613c6ba8beade467 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 11:58:23 -0500 Subject: [PATCH 450/467] chore(python): conditionally load credentials in .kokoro/build.sh (#551) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(python): conditionally load credentials in .kokoro/build.sh Source-Link: https://github.com/googleapis/synthtool/commit/aa69fb74717c8f4c58c60f8cc101d3f4b2c07b09 Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:f016446d6e520e5fb552c45b110cba3f217bffdd3d06bdddd076e9e6d13266cf * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * revert * remove post processing for release.cfg which no longer exists in templates * add constraints file for Python 3.13 --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/.OwlBot.lock.yaml | 6 +- .../.github/release-trigger.yml | 1 + .../.github/workflows/docs.yml | 2 +- .../.github/workflows/unittest.yml | 7 +- .../.kokoro/build.sh | 20 +- .../.kokoro/docker/docs/requirements.in | 1 + .../.kokoro/docker/docs/requirements.txt | 313 ++++++++++++++++-- .../.kokoro/docs/common.cfg | 1 + .../.kokoro/publish-docs.sh | 4 - .../.kokoro/release/common.cfg | 1 - .../.kokoro/samples/python3.13/common.cfg | 60 ++++ .../.kokoro/samples/python3.13/continuous.cfg | 6 + .../samples/python3.13/periodic-head.cfg | 11 + .../.kokoro/samples/python3.13/periodic.cfg | 6 + .../.kokoro/samples/python3.13/presubmit.cfg | 6 + .../.kokoro/test-samples-impl.sh | 3 +- .../CONTRIBUTING.rst | 6 +- .../google-cloud-error-reporting/README.rst | 93 +++++- .../google-cloud-error-reporting/noxfile.py | 18 +- .../google-cloud-error-reporting/owlbot.py | 2 +- .../renovate.json | 2 +- .../google-cloud-error-reporting/setup.py | 1 + .../testing/constraints-3.13.txt | 0 23 files changed, 512 insertions(+), 58 deletions(-) create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic-head.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/presubmit.cfg create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.13.txt diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 597e0c3261ca..3f7634f25f8e 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -1,4 +1,4 @@ -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:e8dcfd7cbfd8beac3a3ff8d3f3185287ea0625d859168cc80faccfc9a7a00455 -# created: 2024-09-16T21:04:09.091105552Z + digest: sha256:f016446d6e520e5fb552c45b110cba3f217bffdd3d06bdddd076e9e6d13266cf +# created: 2025-02-21T19:32:52.01306189Z diff --git a/packages/google-cloud-error-reporting/.github/release-trigger.yml b/packages/google-cloud-error-reporting/.github/release-trigger.yml index d4ca94189e16..c1b200964d0f 100644 --- a/packages/google-cloud-error-reporting/.github/release-trigger.yml +++ b/packages/google-cloud-error-reporting/.github/release-trigger.yml @@ -1 +1,2 @@ enabled: true +multiScmName: python-error-reporting diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml index 698fbc5c94da..2833fe98fff0 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/docs.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/docs.yml @@ -12,7 +12,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: "3.9" + python-version: "3.10" - name: Install nox run: | python -m pip install --upgrade setuptools pip wheel diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index dd8bd76922f9..c66b757ced2b 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -5,10 +5,13 @@ on: name: unittest jobs: unit: - runs-on: ubuntu-latest + # TODO(https://github.com/googleapis/gapic-generator-python/issues/2303): use `ubuntu-latest` once this bug is fixed. + # Use ubuntu-22.04 until Python 3.7 is removed from the test matrix + # https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories + runs-on: ubuntu-22.04 strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh index 0c44d59c98f1..d41b45aa1dd0 100755 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ b/packages/google-cloud-error-reporting/.kokoro/build.sh @@ -15,11 +15,13 @@ set -eo pipefail +CURRENT_DIR=$(dirname "${BASH_SOURCE[0]}") + if [[ -z "${PROJECT_ROOT:-}" ]]; then - PROJECT_ROOT="github/python-error-reporting" + PROJECT_ROOT=$(realpath "${CURRENT_DIR}/..") fi -cd "${PROJECT_ROOT}" +pushd "${PROJECT_ROOT}" # Disable buffering, so that the logs stream through. export PYTHONUNBUFFERED=1 @@ -28,10 +30,16 @@ export PYTHONUNBUFFERED=1 env | grep KOKORO # Setup service account credentials. -export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/service-account.json +if [[ -f "${KOKORO_GFILE_DIR}/service-account.json" ]] +then + export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/service-account.json +fi # Setup project id. -export PROJECT_ID=$(cat "${KOKORO_GFILE_DIR}/project-id.json") +if [[ -f "${KOKORO_GFILE_DIR}/project-id.json" ]] +then + export PROJECT_ID=$(cat "${KOKORO_GFILE_DIR}/project-id.json") +fi # If this is a continuous build, send the test log to the FlakyBot. # See https://github.com/googleapis/repo-automation-bots/tree/main/packages/flakybot. @@ -46,7 +54,7 @@ fi # If NOX_SESSION is set, it only runs the specified session, # otherwise run all the sessions. if [[ -n "${NOX_SESSION:-}" ]]; then - python3 -m nox -s ${NOX_SESSION:-} + python3 -m nox -s ${NOX_SESSION:-} else - python3 -m nox + python3 -m nox fi diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in index 816817c672a1..586bd07037ae 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in @@ -1 +1,2 @@ nox +gcp-docuploader diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt index 7129c7715594..a9360a25b707 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt +++ b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt @@ -1,42 +1,297 @@ # -# This file is autogenerated by pip-compile with Python 3.9 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # pip-compile --allow-unsafe --generate-hashes requirements.in # -argcomplete==3.4.0 \ - --hash=sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5 \ - --hash=sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f +argcomplete==3.5.3 \ + --hash=sha256:2ab2c4a215c59fd6caaff41a869480a23e8f6a5f910b266c1808037f4e375b61 \ + --hash=sha256:c12bf50eded8aebb298c7b7da7a5ff3ee24dffd9f5281867dfe1424b58c55392 # via nox -colorlog==6.8.2 \ - --hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \ - --hash=sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33 - # via nox -distlib==0.3.8 \ - --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ - --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 +cachetools==5.5.0 \ + --hash=sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 \ + --hash=sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a + # via google-auth +certifi==2024.12.14 \ + --hash=sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 \ + --hash=sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db + # via requests +charset-normalizer==3.4.1 \ + --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ + --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ + --hash=sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a \ + --hash=sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294 \ + --hash=sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b \ + --hash=sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd \ + --hash=sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601 \ + --hash=sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd \ + --hash=sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4 \ + --hash=sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d \ + --hash=sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2 \ + --hash=sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313 \ + --hash=sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd \ + --hash=sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa \ + --hash=sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8 \ + --hash=sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1 \ + --hash=sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2 \ + --hash=sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496 \ + --hash=sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d \ + --hash=sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b \ + --hash=sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e \ + --hash=sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a \ + --hash=sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4 \ + --hash=sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca \ + --hash=sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78 \ + --hash=sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408 \ + --hash=sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5 \ + --hash=sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3 \ + --hash=sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f \ + --hash=sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a \ + --hash=sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765 \ + --hash=sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6 \ + --hash=sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146 \ + --hash=sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6 \ + --hash=sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9 \ + --hash=sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd \ + --hash=sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c \ + --hash=sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f \ + --hash=sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545 \ + --hash=sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176 \ + --hash=sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770 \ + --hash=sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824 \ + --hash=sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f \ + --hash=sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf \ + --hash=sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487 \ + --hash=sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d \ + --hash=sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd \ + --hash=sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b \ + --hash=sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534 \ + --hash=sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f \ + --hash=sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b \ + --hash=sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9 \ + --hash=sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd \ + --hash=sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125 \ + --hash=sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9 \ + --hash=sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de \ + --hash=sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11 \ + --hash=sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d \ + --hash=sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35 \ + --hash=sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f \ + --hash=sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda \ + --hash=sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7 \ + --hash=sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a \ + --hash=sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971 \ + --hash=sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8 \ + --hash=sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41 \ + --hash=sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d \ + --hash=sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f \ + --hash=sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757 \ + --hash=sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a \ + --hash=sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886 \ + --hash=sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77 \ + --hash=sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76 \ + --hash=sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247 \ + --hash=sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85 \ + --hash=sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb \ + --hash=sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7 \ + --hash=sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e \ + --hash=sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6 \ + --hash=sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037 \ + --hash=sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1 \ + --hash=sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e \ + --hash=sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807 \ + --hash=sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407 \ + --hash=sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c \ + --hash=sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12 \ + --hash=sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3 \ + --hash=sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089 \ + --hash=sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd \ + --hash=sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e \ + --hash=sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00 \ + --hash=sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616 + # via requests +click==8.1.8 \ + --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \ + --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a + # via gcp-docuploader +colorlog==6.9.0 \ + --hash=sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff \ + --hash=sha256:bfba54a1b93b94f54e1f4fe48395725a3d92fd2a4af702f6bd70946bdc0c6ac2 + # via + # gcp-docuploader + # nox +distlib==0.3.9 \ + --hash=sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 \ + --hash=sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403 # via virtualenv -filelock==3.15.4 \ - --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ - --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 +filelock==3.16.1 \ + --hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \ + --hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435 # via virtualenv -nox==2024.4.15 \ - --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ - --hash=sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f +gcp-docuploader==0.6.5 \ + --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \ + --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea + # via -r requirements.in +google-api-core==2.24.0 \ + --hash=sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9 \ + --hash=sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf + # via + # google-cloud-core + # google-cloud-storage +google-auth==2.37.0 \ + --hash=sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00 \ + --hash=sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0 + # via + # google-api-core + # google-cloud-core + # google-cloud-storage +google-cloud-core==2.4.1 \ + --hash=sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073 \ + --hash=sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61 + # via google-cloud-storage +google-cloud-storage==2.19.0 \ + --hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \ + --hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2 + # via gcp-docuploader +google-crc32c==1.6.0 \ + --hash=sha256:05e2d8c9a2f853ff116db9706b4a27350587f341eda835f46db3c0a8c8ce2f24 \ + --hash=sha256:18e311c64008f1f1379158158bb3f0c8d72635b9eb4f9545f8cf990c5668e59d \ + --hash=sha256:236c87a46cdf06384f614e9092b82c05f81bd34b80248021f729396a78e55d7e \ + --hash=sha256:35834855408429cecf495cac67ccbab802de269e948e27478b1e47dfb6465e57 \ + --hash=sha256:386122eeaaa76951a8196310432c5b0ef3b53590ef4c317ec7588ec554fec5d2 \ + --hash=sha256:40b05ab32a5067525670880eb5d169529089a26fe35dce8891127aeddc1950e8 \ + --hash=sha256:48abd62ca76a2cbe034542ed1b6aee851b6f28aaca4e6551b5599b6f3ef175cc \ + --hash=sha256:50cf2a96da226dcbff8671233ecf37bf6e95de98b2a2ebadbfdf455e6d05df42 \ + --hash=sha256:51c4f54dd8c6dfeb58d1df5e4f7f97df8abf17a36626a217f169893d1d7f3e9f \ + --hash=sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa \ + --hash=sha256:62f6d4a29fea082ac4a3c9be5e415218255cf11684ac6ef5488eea0c9132689b \ + --hash=sha256:6eceb6ad197656a1ff49ebfbbfa870678c75be4344feb35ac1edf694309413dc \ + --hash=sha256:7aec8e88a3583515f9e0957fe4f5f6d8d4997e36d0f61624e70469771584c760 \ + --hash=sha256:91ca8145b060679ec9176e6de4f89b07363d6805bd4760631ef254905503598d \ + --hash=sha256:a184243544811e4a50d345838a883733461e67578959ac59964e43cca2c791e7 \ + --hash=sha256:a9e4b426c3702f3cd23b933436487eb34e01e00327fac20c9aebb68ccf34117d \ + --hash=sha256:bb0966e1c50d0ef5bc743312cc730b533491d60585a9a08f897274e57c3f70e0 \ + --hash=sha256:bb8b3c75bd157010459b15222c3fd30577042a7060e29d42dabce449c087f2b3 \ + --hash=sha256:bd5e7d2445d1a958c266bfa5d04c39932dc54093fa391736dbfdb0f1929c1fb3 \ + --hash=sha256:c87d98c7c4a69066fd31701c4e10d178a648c2cac3452e62c6b24dc51f9fcc00 \ + --hash=sha256:d2952396dc604544ea7476b33fe87faedc24d666fb0c2d5ac971a2b9576ab871 \ + --hash=sha256:d8797406499f28b5ef791f339594b0b5fdedf54e203b5066675c406ba69d705c \ + --hash=sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9 \ + --hash=sha256:e2806553238cd076f0a55bddab37a532b53580e699ed8e5606d0de1f856b5205 \ + --hash=sha256:ebab974b1687509e5c973b5c4b8b146683e101e102e17a86bd196ecaa4d099fc \ + --hash=sha256:ed767bf4ba90104c1216b68111613f0d5926fb3780660ea1198fc469af410e9d \ + --hash=sha256:f7a1fc29803712f80879b0806cb83ab24ce62fc8daf0569f2204a0cfd7f68ed4 + # via + # google-cloud-storage + # google-resumable-media +google-resumable-media==2.7.2 \ + --hash=sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa \ + --hash=sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0 + # via google-cloud-storage +googleapis-common-protos==1.66.0 \ + --hash=sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c \ + --hash=sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed + # via google-api-core +idna==3.10 \ + --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + # via requests +nox==2024.10.9 \ + --hash=sha256:1d36f309a0a2a853e9bccb76bbef6bb118ba92fa92674d15604ca99adeb29eab \ + --hash=sha256:7aa9dc8d1c27e9f45ab046ffd1c3b2c4f7c91755304769df231308849ebded95 # via -r requirements.in -packaging==24.1 \ - --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ - --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 +packaging==24.2 \ + --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ + --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f # via nox -platformdirs==4.2.2 \ - --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ - --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 +platformdirs==4.3.6 \ + --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \ + --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb # via virtualenv -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +proto-plus==1.25.0 \ + --hash=sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961 \ + --hash=sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91 + # via google-api-core +protobuf==5.29.3 \ + --hash=sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f \ + --hash=sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7 \ + --hash=sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888 \ + --hash=sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620 \ + --hash=sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da \ + --hash=sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252 \ + --hash=sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a \ + --hash=sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e \ + --hash=sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107 \ + --hash=sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f \ + --hash=sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84 + # via + # gcp-docuploader + # google-api-core + # googleapis-common-protos + # proto-plus +pyasn1==0.6.1 \ + --hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 \ + --hash=sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.1 \ + --hash=sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd \ + --hash=sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c + # via google-auth +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 + # via + # google-api-core + # google-cloud-storage +rsa==4.9 \ + --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ + --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 + # via google-auth +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 + # via gcp-docuploader +tomli==2.2.1 \ + --hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \ + --hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \ + --hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \ + --hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \ + --hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \ + --hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \ + --hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \ + --hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \ + --hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \ + --hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \ + --hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \ + --hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \ + --hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \ + --hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \ + --hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \ + --hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \ + --hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \ + --hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \ + --hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \ + --hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \ + --hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \ + --hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \ + --hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \ + --hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \ + --hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \ + --hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \ + --hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \ + --hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \ + --hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \ + --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ + --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ + --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 # via nox -virtualenv==20.26.3 \ - --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ - --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 +urllib3==2.3.0 \ + --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ + --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d + # via requests +virtualenv==20.28.1 \ + --hash=sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb \ + --hash=sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329 # via nox diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg index eade26cf3e56..b53153fe1f64 100644 --- a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg @@ -65,6 +65,7 @@ before_action { } } + ############################################# # this section merged from .kokoro/common_env_vars.cfg using owlbot.py diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh index 233205d580e9..4ed4aaf1346f 100755 --- a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh +++ b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh @@ -20,10 +20,6 @@ export PYTHONUNBUFFERED=1 export PATH="${HOME}/.local/bin:${PATH}" -# Install nox -python3.10 -m pip install --require-hashes -r .kokoro/requirements.txt -python3.10 -m nox --version - # build docs nox -s docs diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg index 346d4892a297..e0de520f20e1 100644 --- a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg +++ b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg @@ -66,4 +66,3 @@ env_vars: { } ################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/common.cfg new file mode 100644 index 000000000000..e83c889e6029 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/common.cfg @@ -0,0 +1,60 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.13" +} + +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-313" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic-head.cfg new file mode 100644 index 000000000000..0ab001caaf12 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic.cfg new file mode 100644 index 000000000000..71cd1e597e38 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh index 55910c8ba178..53e365bc4e79 100755 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh +++ b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh @@ -33,7 +33,8 @@ export PYTHONUNBUFFERED=1 env | grep KOKORO # Install nox -python3.9 -m pip install --upgrade --quiet nox +# `virtualenv==20.26.6` is added for Python 3.7 compatibility +python3.9 -m pip install --upgrade --quiet nox virtualenv==20.26.6 # Use secrets acessor service account to get secrets if [[ -f "${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" ]]; then diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 5fc13e52204d..5307292a2a32 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.7, 3.8, 3.9, 3.10, 3.11 and 3.12 on both UNIX and Windows. + 3.7, 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -72,7 +72,7 @@ We use `nox `__ to instrument our tests. - To run a single unit test:: - $ nox -s unit-3.12 -- -k + $ nox -s unit-3.13 -- -k .. note:: @@ -227,6 +227,7 @@ We support: - `Python 3.10`_ - `Python 3.11`_ - `Python 3.12`_ +- `Python 3.13`_ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ @@ -234,6 +235,7 @@ We support: .. _Python 3.10: https://docs.python.org/3.10/ .. _Python 3.11: https://docs.python.org/3.11/ .. _Python 3.12: https://docs.python.org/3.12/ +.. _Python 3.13: https://docs.python.org/3.13/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 445767c5b8f5..484923c1e5dd 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -26,12 +26,12 @@ In order to use this library, you first need to go through the following steps: 1. `Select or create a Cloud Platform project.`_ 2. `Enable billing for your project.`_ 3. `Enable the Error Reporting API.`_ -4. `Setup Authentication.`_ +4. `Set up Authentication.`_ .. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project .. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project .. _Enable the Error Reporting API.: https://cloud.google.com/error-reporting -.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html +.. _Set up Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html Installation ~~~~~~~~~~~~ @@ -106,3 +106,92 @@ Next Steps .. _Error Reporting API Product documentation: https://cloud.google.com/error-reporting .. _README: https://github.com/googleapis/google-cloud-python/blob/main/README.rst + +Logging +------- + +This library uses the standard Python :code:`logging` functionality to log some RPC events that could be of interest for debugging and monitoring purposes. +Note the following: + +#. Logs may contain sensitive information. Take care to **restrict access to the logs** if they are saved, whether it be on local storage or on Google Cloud Logging. +#. Google may refine the occurrence, level, and content of various log messages in this library without flagging such changes as breaking. **Do not depend on immutability of the logging events**. +#. By default, the logging events from this library are not handled. You must **explicitly configure log handling** using one of the mechanisms below. + +Simple, environment-based configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To enable logging for this library without any changes in your code, set the :code:`GOOGLE_SDK_PYTHON_LOGGING_SCOPE` environment variable to a valid Google +logging scope. This configures handling of logging events (at level :code:`logging.DEBUG` or higher) from this library in a default manner, emitting the logged +messages in a structured format. It does not currently allow customizing the logging levels captured nor the handlers, formatters, etc. used for any logging +event. + +A logging scope is a period-separated namespace that begins with :code:`google`, identifying the Python module or package to log. + +- Valid logging scopes: :code:`google`, :code:`google.cloud.asset.v1`, :code:`google.api`, :code:`google.auth`, etc. +- Invalid logging scopes: :code:`foo`, :code:`123`, etc. + +**NOTE**: If the logging scope is invalid, the library does not set up any logging handlers. + +Environment-Based Examples +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Enabling the default handler for all Google-based loggers + +.. code-block:: console + + export GOOGLE_SDK_PYTHON_LOGGING_SCOPE=google + +- Enabling the default handler for a specific Google module (for a client library called :code:`library_v1`): + +.. code-block:: console + + export GOOGLE_SDK_PYTHON_LOGGING_SCOPE=google.cloud.library_v1 + + +Advanced, code-based configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also configure a valid logging scope using Python's standard `logging` mechanism. + +Code-Based Examples +^^^^^^^^^^^^^^^^^^^ + +- Configuring a handler for all Google-based loggers + +.. code-block:: python + + import logging + + from google.cloud.translate_v3 import translate + + base_logger = logging.getLogger("google") + base_logger.addHandler(logging.StreamHandler()) + base_logger.setLevel(logging.DEBUG) + +- Configuring a handler for a specific Google module (for a client library called :code:`library_v1`): + +.. code-block:: python + + import logging + + from google.cloud.translate_v3 import translate + + base_logger = logging.getLogger("google.cloud.library_v1") + base_logger.addHandler(logging.StreamHandler()) + base_logger.setLevel(logging.DEBUG) + +Logging details +~~~~~~~~~~~~~~~ + +#. Regardless of which of the mechanisms above you use to configure logging for this library, by default logging events are not propagated up to the root + logger from the `google`-level logger. If you need the events to be propagated to the root logger, you must explicitly set + :code:`logging.getLogger("google").propagate = True` in your code. +#. You can mix the different logging configurations above for different Google modules. For example, you may want use a code-based logging configuration for + one library, but decide you need to also set up environment-based logging configuration for another library. + + #. If you attempt to use both code-based and environment-based configuration for the same module, the environment-based configuration will be ineffectual + if the code -based configuration gets applied first. + +#. The Google-specific logging configurations (default handlers for environment-based configuration; not propagating logging events to the root logger) get + executed the first time *any* client library is instantiated in your application, and only if the affected loggers have not been previously configured. + (This is the reason for 2.i. above.) diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index 7540caad0f9d..bc66951c2fa9 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -34,7 +34,15 @@ DEFAULT_PYTHON_VERSION = "3.8" -UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] +UNIT_TEST_PYTHON_VERSIONS: List[str] = [ + "3.7", + "3.8", + "3.9", + "3.10", + "3.11", + "3.12", + "3.13", +] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "asyncmock", @@ -62,7 +70,6 @@ CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() -# 'docfx' is excluded since it only needs to run in 'docs-presubmit' nox.options.sessions = [ "unit", "system", @@ -71,6 +78,7 @@ "lint_setup_py", "blacken", "docs", + "docfx", "format", ] @@ -167,7 +175,7 @@ def install_unittest_dependencies(session, *constraints): def unit(session, protobuf_implementation): # Install all test dependencies, then install this package in-place. - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12"): + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): session.skip("cpp implementation is not supported in python 3.11+") constraints_path = str( @@ -367,7 +375,7 @@ def docfx(session): ) -@nox.session(python="3.12") +@nox.session(python="3.13") @nox.parametrize( "protobuf_implementation", ["python", "upb", "cpp"], @@ -375,7 +383,7 @@ def docfx(session): def prerelease_deps(session, protobuf_implementation): """Run all tests with prerelease versions of dependencies installed.""" - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12"): + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): session.skip("cpp implementation is not supported in python 3.11+") # Install all dependencies diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index ded8fbe79d47..47e5271902cc 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -79,7 +79,7 @@ # -------------------------------------------------------------------------- # add shared environment variables to test configs -tracked_subdirs = ["continuous", "presubmit", "release", "samples", "docs"] +tracked_subdirs = ["continuous", "presubmit", "samples", "docs"] for subdir in tracked_subdirs: for path, subdirs, files in os.walk(f".kokoro/{subdir}"): for name in files: diff --git a/packages/google-cloud-error-reporting/renovate.json b/packages/google-cloud-error-reporting/renovate.json index 39b2a0ec9296..c7875c469bd5 100644 --- a/packages/google-cloud-error-reporting/renovate.json +++ b/packages/google-cloud-error-reporting/renovate.json @@ -5,7 +5,7 @@ ":preserveSemverRanges", ":disableDependencyDashboard" ], - "ignorePaths": [".pre-commit-config.yaml", ".kokoro/requirements.txt", "setup.py"], + "ignorePaths": [".pre-commit-config.yaml", ".kokoro/requirements.txt", "setup.py", ".github/workflows/unittest.yml"], "pip_requirements": { "fileMatch": ["requirements-test.txt", "samples/[\\S/]*constraints.txt", "samples/[\\S/]*constraints-test.txt"] } diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 88311343cfab..d3f038a78c47 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -82,6 +82,7 @@ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Operating System :: OS Independent", "Topic :: Internet", ], diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.13.txt b/packages/google-cloud-error-reporting/testing/constraints-3.13.txt new file mode 100644 index 000000000000..e69de29bb2d1 From 34cf2e283929adeb5a49747a4784343007a750b3 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 13:29:28 -0500 Subject: [PATCH 451/467] chore: Update gapic-generator-python to v1.23.2 (#529) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: remove body selector from http rule PiperOrigin-RevId: 693215877 Source-Link: https://github.com/googleapis/googleapis/commit/bb6b53e326ce2db403d18be7158c265e07948920 Source-Link: https://github.com/googleapis/googleapis-gen/commit/db8b5a93484ad44055b2bacc4c7cf87e970fe0ed Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZGI4YjVhOTM0ODRhZDQ0MDU1YjJiYWNjNGM3Y2Y4N2U5NzBmZTBlZCJ9 chore: Configure Ruby clients for google-ads-ad_manager PiperOrigin-RevId: 689139590 Source-Link: https://github.com/googleapis/googleapis/commit/296f2ac1aa9abccb7708b639b7839faa1809087f Source-Link: https://github.com/googleapis/googleapis-gen/commit/26927362e0aa1293258fc23fe3ce83c5c21d5fbb Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMjY5MjczNjJlMGFhMTI5MzI1OGZjMjNmZTNjZTgzYzVjMjFkNWZiYiJ9 chore: Update gapic-generator-python to v1.19.1 PiperOrigin-RevId: 684571179 Source-Link: https://github.com/googleapis/googleapis/commit/fbdc238931e0a7a95c0f55e0cd3ad9e3de2535c8 Source-Link: https://github.com/googleapis/googleapis-gen/commit/3a2cdcfb80c2d0f5ec0cc663c2bab0a9486229d0 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiM2EyY2RjZmI4MGMyZDBmNWVjMGNjNjYzYzJiYWIwYTk0ODYyMjlkMCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat: Add support for opt-in debug logging fix: Fix typing issue with gRPC metadata when key ends in -bin chore: Update gapic-generator-python to v1.21.0 PiperOrigin-RevId: 705285820 Source-Link: https://github.com/googleapis/googleapis/commit/f9b8b9150f7fcd600b0acaeef91236b1843f5e49 Source-Link: https://github.com/googleapis/googleapis-gen/commit/ca1e0a1e472d6e6f5de883a5cb54724f112ce348 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiY2ExZTBhMWU0NzJkNmU2ZjVkZTg4M2E1Y2I1NDcyNGYxMTJjZTM0OCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat: Add REST Interceptors which support reading metadata feat: Add support for reading selective GAPIC generation methods from service YAML chore: Update gapic-generator-python to v1.22.0 PiperOrigin-RevId: 724026024 Source-Link: https://github.com/googleapis/googleapis/commit/ad9963857109513e77eed153a66264481789109f Source-Link: https://github.com/googleapis/googleapis-gen/commit/e291c4dd1d670eda19998de76f967e1603a48993 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZTI5MWM0ZGQxZDY3MGVkYTE5OTk4ZGU3NmY5NjdlMTYwM2E0ODk5MyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update gapic-generator-python to v1.23.2 PiperOrigin-RevId: 732281673 Source-Link: https://github.com/googleapis/googleapis/commit/2f37e0ad56637325b24f8603284ccb6f05796f9a Source-Link: https://github.com/googleapis/googleapis-gen/commit/016b7538ba5a798f2ae423d4ccd7f82b06cdf6d2 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMDE2Yjc1MzhiYTVhNzk4ZjJhZTQyM2Q0Y2NkN2Y4MmIwNmNkZjZkMiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../error_group_service/async_client.py | 58 +- .../services/error_group_service/client.py | 130 +- .../error_group_service/transports/README.rst | 9 + .../error_group_service/transports/grpc.py | 94 +- .../transports/grpc_asyncio.py | 110 +- .../error_group_service/transports/rest.py | 409 +++-- .../transports/rest_base.py | 207 +++ .../error_stats_service/async_client.py | 71 +- .../services/error_stats_service/client.py | 143 +- .../services/error_stats_service/pagers.py | 32 +- .../error_stats_service/transports/README.rst | 9 + .../error_stats_service/transports/grpc.py | 96 +- .../transports/grpc_asyncio.py | 114 +- .../error_stats_service/transports/rest.py | 591 +++++-- .../transports/rest_base.py | 248 +++ .../report_errors_service/async_client.py | 45 +- .../services/report_errors_service/client.py | 117 +- .../transports/README.rst | 9 + .../report_errors_service/transports/grpc.py | 92 +- .../transports/grpc_asyncio.py | 106 +- .../report_errors_service/transports/rest.py | 231 ++- .../transports/rest_base.py | 150 ++ ....devtools.clouderrorreporting.v1beta1.json | 26 +- .../testing/constraints-3.13.txt | 6 + .../test_error_group_service.py | 1351 ++++++++------- .../test_error_stats_service.py | 1491 +++++++++-------- .../test_report_errors_service.py | 813 ++++----- 27 files changed, 4482 insertions(+), 2276 deletions(-) create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/README.rst create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest_base.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/README.rst create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest_base.py create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/README.rst create mode 100644 packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest_base.py diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index 21361c25e884..c4c8feaea447 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import logging as std_logging from collections import OrderedDict import re from typing import ( @@ -49,6 +50,15 @@ from .transports.grpc_asyncio import ErrorGroupServiceGrpcAsyncIOTransport from .client import ErrorGroupServiceClient +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + class ErrorGroupServiceAsyncClient: """Service for retrieving and updating individual error groups.""" @@ -260,6 +270,28 @@ def __init__( client_info=client_info, ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ): # pragma: NO COVER + _LOGGER.debug( + "Created client `google.devtools.clouderrorreporting_v1beta1.ErrorGroupServiceAsyncClient`.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "universeDomain": getattr( + self._client._transport._credentials, "universe_domain", "" + ), + "credentialsType": f"{type(self._client._transport._credentials).__module__}.{type(self._client._transport._credentials).__qualname__}", + "credentialsInfo": getattr( + self.transport._credentials, "get_cred_info", lambda: None + )(), + } + if hasattr(self._client._transport, "_credentials") + else { + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "credentialsType": None, + }, + ) + async def get_group( self, request: Optional[Union[error_group_service.GetGroupRequest, dict]] = None, @@ -267,7 +299,7 @@ async def get_group( group_name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> common.ErrorGroup: r"""Get the specified group. @@ -329,8 +361,10 @@ async def sample_get_group(): retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.types.ErrorGroup: @@ -341,7 +375,10 @@ async def sample_get_group(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([group_name]) + flattened_params = [group_name] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -393,7 +430,7 @@ async def update_group( group: Optional[common.ErrorGroup] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> common.ErrorGroup: r"""Replace the data for the specified group. Fails if the group does not exist. @@ -437,8 +474,10 @@ async def sample_update_group(): retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.types.ErrorGroup: @@ -449,7 +488,10 @@ async def sample_update_group(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([group]) + flattened_params = [group] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index 97cb91579eb5..d4b2a29b51b9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -14,6 +14,9 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json +import logging as std_logging import os import re from typing import ( @@ -48,6 +51,15 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object, None] # type: ignore +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service from .transports.base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO @@ -455,52 +467,45 @@ def _get_universe_domain( raise ValueError("Universe Domain cannot be an empty string.") return universe_domain - @staticmethod - def _compare_universes( - client_universe: str, credentials: ga_credentials.Credentials - ) -> bool: - """Returns True iff the universe domains used by the client and credentials match. - - Args: - client_universe (str): The universe domain configured via the client options. - credentials (ga_credentials.Credentials): The credentials being used in the client. + def _validate_universe_domain(self): + """Validates client's and credentials' universe domains are consistent. Returns: - bool: True iff client_universe matches the universe in credentials. + bool: True iff the configured universe domain is valid. Raises: - ValueError: when client_universe does not match the universe in credentials. + ValueError: If the configured universe domain is not valid. """ - default_universe = ErrorGroupServiceClient._DEFAULT_UNIVERSE - credentials_universe = getattr(credentials, "universe_domain", default_universe) - - if client_universe != credentials_universe: - raise ValueError( - "The configured universe domain " - f"({client_universe}) does not match the universe domain " - f"found in the credentials ({credentials_universe}). " - "If you haven't configured the universe domain explicitly, " - f"`{default_universe}` is the default." - ) + # NOTE (b/349488459): universe validation is disabled until further notice. return True - def _validate_universe_domain(self): - """Validates client's and credentials' universe domains are consistent. - - Returns: - bool: True iff the configured universe domain is valid. + 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. - Raises: - ValueError: If the configured universe domain is not valid. + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. """ - self._is_universe_domain_valid = ( - self._is_universe_domain_valid - or ErrorGroupServiceClient._compare_universes( - self.universe_domain, self.transport._credentials - ) - ) - return self._is_universe_domain_valid + 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): @@ -610,6 +615,10 @@ def __init__( # 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( @@ -676,6 +685,29 @@ def __init__( 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 `google.devtools.clouderrorreporting_v1beta1.ErrorGroupServiceClient`.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "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": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "credentialsType": None, + }, + ) + def get_group( self, request: Optional[Union[error_group_service.GetGroupRequest, dict]] = None, @@ -683,7 +715,7 @@ def get_group( group_name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> common.ErrorGroup: r"""Get the specified group. @@ -745,8 +777,10 @@ def sample_get_group(): retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.types.ErrorGroup: @@ -757,7 +791,10 @@ def sample_get_group(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([group_name]) + flattened_params = [group_name] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -806,7 +843,7 @@ def update_group( group: Optional[common.ErrorGroup] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> common.ErrorGroup: r"""Replace the data for the specified group. Fails if the group does not exist. @@ -850,8 +887,10 @@ def sample_update_group(): retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.types.ErrorGroup: @@ -862,7 +901,10 @@ def sample_update_group(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([group]) + flattened_params = [group] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/README.rst b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/README.rst new file mode 100644 index 000000000000..a0b01808f7b7 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/README.rst @@ -0,0 +1,9 @@ + +transport inheritance structure +_______________________________ + +`ErrorGroupServiceTransport` is the ABC for all transports. +- public child `ErrorGroupServiceGrpcTransport` for sync gRPC transport (defined in `grpc.py`). +- public child `ErrorGroupServiceGrpcAsyncIOTransport` for async gRPC transport (defined in `grpc_asyncio.py`). +- private child `_BaseErrorGroupServiceRestTransport` for base REST transport with inner classes `_BaseMETHOD` (defined in `rest_base.py`). +- public child `ErrorGroupServiceRestTransport` for sync REST transport with inner classes `METHOD` derived from the parent's corresponding `_BaseMETHOD` classes (defined in `rest.py`). diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 793b005b3e6e..3d24d3eb1385 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -13,6 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import json +import logging as std_logging +import pickle import warnings from typing import Callable, Dict, Optional, Sequence, Tuple, Union @@ -21,13 +24,91 @@ import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +from google.protobuf.json_format import MessageToJson +import google.protobuf.message import grpc # type: ignore +import proto # type: ignore from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service from .base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + + +class _LoggingClientInterceptor(grpc.UnaryUnaryClientInterceptor): # pragma: NO COVER + def intercept_unary_unary(self, continuation, client_call_details, request): + logging_enabled = CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ) + if logging_enabled: # pragma: NO COVER + request_metadata = client_call_details.metadata + if isinstance(request, proto.Message): + request_payload = type(request).to_json(request) + elif isinstance(request, google.protobuf.message.Message): + request_payload = MessageToJson(request) + else: + request_payload = f"{type(request).__name__}: {pickle.dumps(request)}" + + request_metadata = { + key: value.decode("utf-8") if isinstance(value, bytes) else value + for key, value in request_metadata + } + grpc_request = { + "payload": request_payload, + "requestMethod": "grpc", + "metadata": dict(request_metadata), + } + _LOGGER.debug( + f"Sending request for {client_call_details.method}", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "rpcName": client_call_details.method, + "request": grpc_request, + "metadata": grpc_request["metadata"], + }, + ) + + response = continuation(client_call_details, request) + if logging_enabled: # pragma: NO COVER + response_metadata = response.trailing_metadata() + # Convert gRPC metadata `` to list of tuples + metadata = ( + dict([(k, str(v)) for k, v in response_metadata]) + if response_metadata + else None + ) + result = response.result() + if isinstance(result, proto.Message): + response_payload = type(result).to_json(result) + elif isinstance(result, google.protobuf.message.Message): + response_payload = MessageToJson(result) + else: + response_payload = f"{type(result).__name__}: {pickle.dumps(result)}" + grpc_response = { + "payload": response_payload, + "metadata": metadata, + "status": "OK", + } + _LOGGER.debug( + f"Received response for {client_call_details.method}.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "rpcName": client_call_details.method, + "response": grpc_response, + "metadata": grpc_response["metadata"], + }, + ) + return response + class ErrorGroupServiceGrpcTransport(ErrorGroupServiceTransport): """gRPC backend transport for ErrorGroupService. @@ -181,7 +262,12 @@ def __init__( ], ) - # Wrap messages. This must be done after self._grpc_channel exists + self._interceptor = _LoggingClientInterceptor() + self._logged_channel = grpc.intercept_channel( + self._grpc_channel, self._interceptor + ) + + # Wrap messages. This must be done after self._logged_channel exists self._prep_wrapped_messages(client_info) @classmethod @@ -255,7 +341,7 @@ def get_group( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "get_group" not in self._stubs: - self._stubs["get_group"] = self.grpc_channel.unary_unary( + self._stubs["get_group"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", request_serializer=error_group_service.GetGroupRequest.serialize, response_deserializer=common.ErrorGroup.deserialize, @@ -282,7 +368,7 @@ def update_group( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "update_group" not in self._stubs: - self._stubs["update_group"] = self.grpc_channel.unary_unary( + self._stubs["update_group"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", request_serializer=error_group_service.UpdateGroupRequest.serialize, response_deserializer=common.ErrorGroup.deserialize, @@ -290,7 +376,7 @@ def update_group( return self._stubs["update_group"] def close(self): - self.grpc_channel.close() + self._logged_channel.close() @property def kind(self) -> str: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 87365094302b..24e5f0ebe134 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -13,6 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import inspect +import json +import pickle +import logging as std_logging import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union @@ -22,8 +26,11 @@ from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +from google.protobuf.json_format import MessageToJson +import google.protobuf.message import grpc # type: ignore +import proto # type: ignore from grpc.experimental import aio # type: ignore from google.cloud.errorreporting_v1beta1.types import common @@ -31,6 +38,82 @@ from .base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO from .grpc import ErrorGroupServiceGrpcTransport +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + + +class _LoggingClientAIOInterceptor( + grpc.aio.UnaryUnaryClientInterceptor +): # pragma: NO COVER + async def intercept_unary_unary(self, continuation, client_call_details, request): + logging_enabled = CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ) + if logging_enabled: # pragma: NO COVER + request_metadata = client_call_details.metadata + if isinstance(request, proto.Message): + request_payload = type(request).to_json(request) + elif isinstance(request, google.protobuf.message.Message): + request_payload = MessageToJson(request) + else: + request_payload = f"{type(request).__name__}: {pickle.dumps(request)}" + + request_metadata = { + key: value.decode("utf-8") if isinstance(value, bytes) else value + for key, value in request_metadata + } + grpc_request = { + "payload": request_payload, + "requestMethod": "grpc", + "metadata": dict(request_metadata), + } + _LOGGER.debug( + f"Sending request for {client_call_details.method}", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "rpcName": str(client_call_details.method), + "request": grpc_request, + "metadata": grpc_request["metadata"], + }, + ) + response = await continuation(client_call_details, request) + if logging_enabled: # pragma: NO COVER + response_metadata = await response.trailing_metadata() + # Convert gRPC metadata `` to list of tuples + metadata = ( + dict([(k, str(v)) for k, v in response_metadata]) + if response_metadata + else None + ) + result = await response + if isinstance(result, proto.Message): + response_payload = type(result).to_json(result) + elif isinstance(result, google.protobuf.message.Message): + response_payload = MessageToJson(result) + else: + response_payload = f"{type(result).__name__}: {pickle.dumps(result)}" + grpc_response = { + "payload": response_payload, + "metadata": metadata, + "status": "OK", + } + _LOGGER.debug( + f"Received response to rpc {client_call_details.method}.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "rpcName": str(client_call_details.method), + "response": grpc_response, + "metadata": grpc_response["metadata"], + }, + ) + return response + class ErrorGroupServiceGrpcAsyncIOTransport(ErrorGroupServiceTransport): """gRPC AsyncIO backend transport for ErrorGroupService. @@ -227,7 +310,13 @@ def __init__( ], ) - # Wrap messages. This must be done after self._grpc_channel exists + self._interceptor = _LoggingClientAIOInterceptor() + self._grpc_channel._unary_unary_interceptors.append(self._interceptor) + self._logged_channel = self._grpc_channel + self._wrap_with_kind = ( + "kind" in inspect.signature(gapic_v1.method_async.wrap_method).parameters + ) + # Wrap messages. This must be done after self._logged_channel exists self._prep_wrapped_messages(client_info) @property @@ -259,7 +348,7 @@ def get_group( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "get_group" not in self._stubs: - self._stubs["get_group"] = self.grpc_channel.unary_unary( + self._stubs["get_group"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/GetGroup", request_serializer=error_group_service.GetGroupRequest.serialize, response_deserializer=common.ErrorGroup.deserialize, @@ -288,7 +377,7 @@ def update_group( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "update_group" not in self._stubs: - self._stubs["update_group"] = self.grpc_channel.unary_unary( + self._stubs["update_group"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorGroupService/UpdateGroup", request_serializer=error_group_service.UpdateGroupRequest.serialize, response_deserializer=common.ErrorGroup.deserialize, @@ -298,20 +387,29 @@ def update_group( def _prep_wrapped_messages(self, client_info): """Precompute the wrapped methods, overriding the base class method to use async wrappers.""" self._wrapped_methods = { - self.get_group: gapic_v1.method_async.wrap_method( + self.get_group: self._wrap_method( self.get_group, default_timeout=None, client_info=client_info, ), - self.update_group: gapic_v1.method_async.wrap_method( + self.update_group: self._wrap_method( self.update_group, default_timeout=None, client_info=client_info, ), } + def _wrap_method(self, func, *args, **kwargs): + if self._wrap_with_kind: # pragma: NO COVER + kwargs["kind"] = self.kind + return gapic_v1.method_async.wrap_method(func, *args, **kwargs) + def close(self): - return self.grpc_channel.close() + return self._logged_channel.close() + + @property + def kind(self) -> str: + return "grpc_asyncio" __all__ = ("ErrorGroupServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py index 900d875aacb2..80bba4e5ed57 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -13,45 +13,50 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import logging +import json # type: ignore from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.api_core import exceptions as core_exceptions from google.api_core import retry as retries from google.api_core import rest_helpers from google.api_core import rest_streaming -from google.api_core import path_template from google.api_core import gapic_v1 from google.protobuf import json_format + from requests import __version__ as requests_version import dataclasses -import re from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union import warnings + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service + + +from .rest_base import _BaseErrorGroupServiceRestTransport +from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO + try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object, None] # type: ignore +try: + from google.api_core import client_logging # type: ignore -from google.cloud.errorreporting_v1beta1.types import common -from google.cloud.errorreporting_v1beta1.types import error_group_service - -from .base import ( - ErrorGroupServiceTransport, - DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, -) + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False +_LOGGER = logging.getLogger(__name__) DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, grpc_version=None, - rest_version=requests_version, + rest_version=f"requests@{requests_version}", ) @@ -95,8 +100,10 @@ def post_update_group(self, response): def pre_get_group( self, request: error_group_service.GetGroupRequest, - metadata: Sequence[Tuple[str, str]], - ) -> Tuple[error_group_service.GetGroupRequest, Sequence[Tuple[str, str]]]: + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + error_group_service.GetGroupRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: """Pre-rpc interceptor for get_group Override in a subclass to manipulate the request or metadata @@ -107,17 +114,42 @@ def pre_get_group( def post_get_group(self, response: common.ErrorGroup) -> common.ErrorGroup: """Post-rpc interceptor for get_group - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_group_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ErrorGroupService server but before - it is returned to user code. + it is returned to user code. This `post_get_group` interceptor runs + before the `post_get_group_with_metadata` interceptor. """ return response + def post_get_group_with_metadata( + self, + response: common.ErrorGroup, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[common.ErrorGroup, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_group + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ErrorGroupService server but before it is returned to user code. + + We recommend only using this `post_get_group_with_metadata` + interceptor in new development instead of the `post_get_group` interceptor. + When both interceptors are used, this `post_get_group_with_metadata` interceptor runs after the + `post_get_group` interceptor. The (possibly modified) response returned by + `post_get_group` will be passed to + `post_get_group_with_metadata`. + """ + return response, metadata + def pre_update_group( self, request: error_group_service.UpdateGroupRequest, - metadata: Sequence[Tuple[str, str]], - ) -> Tuple[error_group_service.UpdateGroupRequest, Sequence[Tuple[str, str]]]: + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + error_group_service.UpdateGroupRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: """Pre-rpc interceptor for update_group Override in a subclass to manipulate the request or metadata @@ -128,12 +160,35 @@ def pre_update_group( def post_update_group(self, response: common.ErrorGroup) -> common.ErrorGroup: """Post-rpc interceptor for update_group - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_group_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ErrorGroupService server but before - it is returned to user code. + it is returned to user code. This `post_update_group` interceptor runs + before the `post_update_group_with_metadata` interceptor. """ return response + def post_update_group_with_metadata( + self, + response: common.ErrorGroup, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[common.ErrorGroup, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_group + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ErrorGroupService server but before it is returned to user code. + + We recommend only using this `post_update_group_with_metadata` + interceptor in new development instead of the `post_update_group` interceptor. + When both interceptors are used, this `post_update_group_with_metadata` interceptor runs after the + `post_update_group` interceptor. The (possibly modified) response returned by + `post_update_group` will be passed to + `post_update_group_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ErrorGroupServiceRestStub: @@ -142,8 +197,8 @@ class ErrorGroupServiceRestStub: _interceptor: ErrorGroupServiceRestInterceptor -class ErrorGroupServiceRestTransport(ErrorGroupServiceTransport): - """REST backend transport for ErrorGroupService. +class ErrorGroupServiceRestTransport(_BaseErrorGroupServiceRestTransport): + """REST backend synchronous transport for ErrorGroupService. Service for retrieving and updating individual error groups. @@ -152,7 +207,6 @@ class ErrorGroupServiceRestTransport(ErrorGroupServiceTransport): and call it. It sends JSON representations of protocol buffers over HTTP/1.1 - """ def __init__( @@ -206,21 +260,12 @@ def __init__( # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError( - f"Unexpected hostname structure: {host}" - ) # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - super().__init__( host=host, credentials=credentials, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + url_scheme=url_scheme, api_audience=api_audience, ) self._session = AuthorizedSession( @@ -231,19 +276,33 @@ def __init__( self._interceptor = interceptor or ErrorGroupServiceRestInterceptor() self._prep_wrapped_messages(client_info) - class _GetGroup(ErrorGroupServiceRestStub): + class _GetGroup( + _BaseErrorGroupServiceRestTransport._BaseGetGroup, ErrorGroupServiceRestStub + ): def __hash__(self): - return hash("GetGroup") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return { - k: v - for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() - if k not in message_dict - } + return hash("ErrorGroupServiceRestTransport.GetGroup") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response def __call__( self, @@ -251,7 +310,7 @@ def __call__( *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> common.ErrorGroup: r"""Call the get group method over HTTP. @@ -262,8 +321,10 @@ def __call__( retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: ~.common.ErrorGroup: @@ -272,42 +333,55 @@ def __call__( """ - http_options: List[Dict[str, str]] = [ - { - "method": "get", - "uri": "/v1beta1/{group_name=projects/*/groups/*}", - }, - { - "method": "get", - "uri": "/v1beta1/{group_name=projects/*/locations/*/groups/*}", - }, - ] - request, metadata = self._interceptor.pre_get_group(request, metadata) - pb_request = error_group_service.GetGroupRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) + http_options = ( + _BaseErrorGroupServiceRestTransport._BaseGetGroup._get_http_options() + ) - uri = transcoded_request["uri"] - method = transcoded_request["method"] + request, metadata = self._interceptor.pre_get_group(request, metadata) + transcoded_request = _BaseErrorGroupServiceRestTransport._BaseGetGroup._get_transcoded_request( + http_options, request + ) # Jsonify the query params - query_params = json.loads( - json_format.MessageToJson( - transcoded_request["query_params"], - use_integers_for_enums=True, - ) + query_params = _BaseErrorGroupServiceRestTransport._BaseGetGroup._get_query_params_json( + transcoded_request ) - query_params.update(self._get_unset_required_fields(query_params)) - query_params["$alt"] = "json;enum-encoding=int" + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.devtools.clouderrorreporting_v1beta1.ErrorGroupServiceClient.GetGroup", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "rpcName": "GetGroup", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) # Send the request - headers = dict(metadata) - headers["Content-Type"] = "application/json" - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), + response = ErrorGroupServiceRestTransport._GetGroup._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -320,22 +394,63 @@ def __call__( pb_resp = common.ErrorGroup.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_group(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_group_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = common.ErrorGroup.to_json(response) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.devtools.clouderrorreporting_v1beta1.ErrorGroupServiceClient.get_group", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "rpcName": "GetGroup", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) return resp - class _UpdateGroup(ErrorGroupServiceRestStub): + class _UpdateGroup( + _BaseErrorGroupServiceRestTransport._BaseUpdateGroup, ErrorGroupServiceRestStub + ): def __hash__(self): - return hash("UpdateGroup") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return { - k: v - for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() - if k not in message_dict - } + return hash("ErrorGroupServiceRestTransport.UpdateGroup") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response def __call__( self, @@ -343,7 +458,7 @@ def __call__( *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> common.ErrorGroup: r"""Call the update group method over HTTP. @@ -354,8 +469,10 @@ def __call__( retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: ~.common.ErrorGroup: @@ -364,50 +481,60 @@ def __call__( """ - http_options: List[Dict[str, str]] = [ - { - "method": "put", - "uri": "/v1beta1/{group.name=projects/*/groups/*}", - "body": "group", - }, - { - "method": "put", - "uri": "/v1beta1/{group.name=projects/*/locations/*/groups/*}", - "body": "group", - }, - ] - request, metadata = self._interceptor.pre_update_group(request, metadata) - pb_request = error_group_service.UpdateGroupRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) + http_options = ( + _BaseErrorGroupServiceRestTransport._BaseUpdateGroup._get_http_options() + ) - # Jsonify the request body + request, metadata = self._interceptor.pre_update_group(request, metadata) + transcoded_request = _BaseErrorGroupServiceRestTransport._BaseUpdateGroup._get_transcoded_request( + http_options, request + ) - body = json_format.MessageToJson( - transcoded_request["body"], use_integers_for_enums=True + body = _BaseErrorGroupServiceRestTransport._BaseUpdateGroup._get_request_body_json( + transcoded_request ) - uri = transcoded_request["uri"] - method = transcoded_request["method"] # Jsonify the query params - query_params = json.loads( - json_format.MessageToJson( - transcoded_request["query_params"], - use_integers_for_enums=True, - ) + query_params = _BaseErrorGroupServiceRestTransport._BaseUpdateGroup._get_query_params_json( + transcoded_request ) - query_params.update(self._get_unset_required_fields(query_params)) - query_params["$alt"] = "json;enum-encoding=int" + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.devtools.clouderrorreporting_v1beta1.ErrorGroupServiceClient.UpdateGroup", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "rpcName": "UpdateGroup", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) # Send the request - headers = dict(metadata) - headers["Content-Type"] = "application/json" - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, + response = ErrorGroupServiceRestTransport._UpdateGroup._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -420,7 +547,33 @@ def __call__( pb_resp = common.ErrorGroup.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_group(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_group_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = common.ErrorGroup.to_json(response) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.devtools.clouderrorreporting_v1beta1.ErrorGroupServiceClient.update_group", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", + "rpcName": "UpdateGroup", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) return resp @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest_base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest_base.py new file mode 100644 index 000000000000..0668d9acd551 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest_base.py @@ -0,0 +1,207 @@ +# -*- coding: utf-8 -*- +# Copyright 2024 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 # type: ignore +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from .base import ErrorGroupServiceTransport, DEFAULT_CLIENT_INFO + +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + + +from google.cloud.errorreporting_v1beta1.types import common +from google.cloud.errorreporting_v1beta1.types import error_group_service + + +class _BaseErrorGroupServiceRestTransport(ErrorGroupServiceTransport): + """Base REST backend transport for ErrorGroupService. + + Note: This class is not meant to be used directly. Use its sync and + async sub-classes instead. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: Optional[Any] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + Args: + host (Optional[str]): + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). + credentials (Optional[Any]): 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. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + class _BaseGetGroup: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1beta1/{group_name=projects/*/groups/*}", + }, + { + "method": "get", + "uri": "/v1beta1/{group_name=projects/*/locations/*/groups/*}", + }, + ] + return http_options + + @staticmethod + def _get_transcoded_request(http_options, request): + pb_request = error_group_service.GetGroupRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + return transcoded_request + + @staticmethod + def _get_query_params_json(transcoded_request): + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + use_integers_for_enums=True, + ) + ) + query_params.update( + _BaseErrorGroupServiceRestTransport._BaseGetGroup._get_unset_required_fields( + query_params + ) + ) + + query_params["$alt"] = "json;enum-encoding=int" + return query_params + + class _BaseUpdateGroup: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "put", + "uri": "/v1beta1/{group.name=projects/*/groups/*}", + "body": "group", + }, + { + "method": "put", + "uri": "/v1beta1/{group.name=projects/*/locations/*/groups/*}", + "body": "group", + }, + ] + return http_options + + @staticmethod + def _get_transcoded_request(http_options, request): + pb_request = error_group_service.UpdateGroupRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + return transcoded_request + + @staticmethod + def _get_request_body_json(transcoded_request): + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], use_integers_for_enums=True + ) + return body + + @staticmethod + def _get_query_params_json(transcoded_request): + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + use_integers_for_enums=True, + ) + ) + query_params.update( + _BaseErrorGroupServiceRestTransport._BaseUpdateGroup._get_unset_required_fields( + query_params + ) + ) + + query_params["$alt"] = "json;enum-encoding=int" + return query_params + + +__all__ = ("_BaseErrorGroupServiceRestTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 232049f7a3f2..3b804ae47108 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import logging as std_logging from collections import OrderedDict import re from typing import ( @@ -50,6 +51,15 @@ from .transports.grpc_asyncio import ErrorStatsServiceGrpcAsyncIOTransport from .client import ErrorStatsServiceClient +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + class ErrorStatsServiceAsyncClient: """An API for retrieving and managing error statistics as well @@ -263,6 +273,28 @@ def __init__( client_info=client_info, ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ): # pragma: NO COVER + _LOGGER.debug( + "Created client `google.devtools.clouderrorreporting_v1beta1.ErrorStatsServiceAsyncClient`.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "universeDomain": getattr( + self._client._transport._credentials, "universe_domain", "" + ), + "credentialsType": f"{type(self._client._transport._credentials).__module__}.{type(self._client._transport._credentials).__qualname__}", + "credentialsInfo": getattr( + self.transport._credentials, "get_cred_info", lambda: None + )(), + } + if hasattr(self._client._transport, "_credentials") + else { + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "credentialsType": None, + }, + ) + async def list_group_stats( self, request: Optional[ @@ -273,7 +305,7 @@ async def list_group_stats( time_range: Optional[error_stats_service.QueryTimeRange] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> pagers.ListGroupStatsAsyncPager: r"""Lists the specified groups. @@ -354,8 +386,10 @@ async def sample_list_group_stats(): retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListGroupStatsAsyncPager: @@ -369,7 +403,10 @@ async def sample_list_group_stats(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project_name, time_range]) + flattened_params = [project_name, time_range] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -435,7 +472,7 @@ async def list_events( group_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> pagers.ListEventsAsyncPager: r"""Lists the specified events. @@ -504,8 +541,10 @@ async def sample_list_events(): retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListEventsAsyncPager: @@ -519,7 +558,10 @@ async def sample_list_events(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project_name, group_id]) + flattened_params = [project_name, group_id] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -584,7 +626,7 @@ async def delete_events( project_name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. @@ -638,8 +680,10 @@ async def sample_delete_events(): retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse: @@ -650,7 +694,10 @@ async def sample_delete_events(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project_name]) + flattened_params = [project_name] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 2f128d1a04d8..6f67b82230b0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -14,6 +14,9 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json +import logging as std_logging import os import re from typing import ( @@ -48,6 +51,15 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object, None] # type: ignore +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + from google.cloud.errorreporting_v1beta1.services.error_stats_service import pagers from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -458,52 +470,45 @@ def _get_universe_domain( raise ValueError("Universe Domain cannot be an empty string.") return universe_domain - @staticmethod - def _compare_universes( - client_universe: str, credentials: ga_credentials.Credentials - ) -> bool: - """Returns True iff the universe domains used by the client and credentials match. - - Args: - client_universe (str): The universe domain configured via the client options. - credentials (ga_credentials.Credentials): The credentials being used in the client. + def _validate_universe_domain(self): + """Validates client's and credentials' universe domains are consistent. Returns: - bool: True iff client_universe matches the universe in credentials. + bool: True iff the configured universe domain is valid. Raises: - ValueError: when client_universe does not match the universe in credentials. + ValueError: If the configured universe domain is not valid. """ - default_universe = ErrorStatsServiceClient._DEFAULT_UNIVERSE - credentials_universe = getattr(credentials, "universe_domain", default_universe) - - if client_universe != credentials_universe: - raise ValueError( - "The configured universe domain " - f"({client_universe}) does not match the universe domain " - f"found in the credentials ({credentials_universe}). " - "If you haven't configured the universe domain explicitly, " - f"`{default_universe}` is the default." - ) + # NOTE (b/349488459): universe validation is disabled until further notice. return True - def _validate_universe_domain(self): - """Validates client's and credentials' universe domains are consistent. - - Returns: - bool: True iff the configured universe domain is valid. + 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. - Raises: - ValueError: If the configured universe domain is not valid. + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. """ - self._is_universe_domain_valid = ( - self._is_universe_domain_valid - or ErrorStatsServiceClient._compare_universes( - self.universe_domain, self.transport._credentials - ) - ) - return self._is_universe_domain_valid + 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): @@ -613,6 +618,10 @@ def __init__( # 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( @@ -679,6 +688,29 @@ def __init__( 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 `google.devtools.clouderrorreporting_v1beta1.ErrorStatsServiceClient`.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "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": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "credentialsType": None, + }, + ) + def list_group_stats( self, request: Optional[ @@ -689,7 +721,7 @@ def list_group_stats( time_range: Optional[error_stats_service.QueryTimeRange] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> pagers.ListGroupStatsPager: r"""Lists the specified groups. @@ -770,8 +802,10 @@ def sample_list_group_stats(): retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListGroupStatsPager: @@ -785,7 +819,10 @@ def sample_list_group_stats(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project_name, time_range]) + flattened_params = [project_name, time_range] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -848,7 +885,7 @@ def list_events( group_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> pagers.ListEventsPager: r"""Lists the specified events. @@ -917,8 +954,10 @@ def sample_list_events(): retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListEventsPager: @@ -932,7 +971,10 @@ def sample_list_events(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project_name, group_id]) + flattened_params = [project_name, group_id] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -994,7 +1036,7 @@ def delete_events( project_name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> error_stats_service.DeleteEventsResponse: r"""Deletes all error events of a given project. @@ -1048,8 +1090,10 @@ def sample_delete_events(): retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse: @@ -1060,7 +1104,10 @@ def sample_delete_events(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project_name]) + flattened_params = [project_name] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index 274f7ac23f18..277a4112ff63 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -67,7 +67,7 @@ def __init__( *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = () + metadata: Sequence[Tuple[str, Union[str, bytes]]] = () ): """Instantiate the pager. @@ -81,8 +81,10 @@ def __init__( retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. """ self._method = method self._request = error_stats_service.ListGroupStatsRequest(request) @@ -141,7 +143,7 @@ def __init__( *, retry: OptionalAsyncRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = () + metadata: Sequence[Tuple[str, Union[str, bytes]]] = () ): """Instantiates the pager. @@ -155,8 +157,10 @@ def __init__( retry (google.api_core.retry.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. """ self._method = method self._request = error_stats_service.ListGroupStatsRequest(request) @@ -219,7 +223,7 @@ def __init__( *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = () + metadata: Sequence[Tuple[str, Union[str, bytes]]] = () ): """Instantiate the pager. @@ -233,8 +237,10 @@ def __init__( retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. """ self._method = method self._request = error_stats_service.ListEventsRequest(request) @@ -293,7 +299,7 @@ def __init__( *, retry: OptionalAsyncRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = () + metadata: Sequence[Tuple[str, Union[str, bytes]]] = () ): """Instantiates the pager. @@ -307,8 +313,10 @@ def __init__( retry (google.api_core.retry.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. """ self._method = method self._request = error_stats_service.ListEventsRequest(request) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/README.rst b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/README.rst new file mode 100644 index 000000000000..9fb4cf06a773 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/README.rst @@ -0,0 +1,9 @@ + +transport inheritance structure +_______________________________ + +`ErrorStatsServiceTransport` is the ABC for all transports. +- public child `ErrorStatsServiceGrpcTransport` for sync gRPC transport (defined in `grpc.py`). +- public child `ErrorStatsServiceGrpcAsyncIOTransport` for async gRPC transport (defined in `grpc_asyncio.py`). +- private child `_BaseErrorStatsServiceRestTransport` for base REST transport with inner classes `_BaseMETHOD` (defined in `rest_base.py`). +- public child `ErrorStatsServiceRestTransport` for sync REST transport with inner classes `METHOD` derived from the parent's corresponding `_BaseMETHOD` classes (defined in `rest.py`). diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index b1f71dd3c9b2..08a27874628e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -13,6 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import json +import logging as std_logging +import pickle import warnings from typing import Callable, Dict, Optional, Sequence, Tuple, Union @@ -21,12 +24,90 @@ import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +from google.protobuf.json_format import MessageToJson +import google.protobuf.message import grpc # type: ignore +import proto # type: ignore from google.cloud.errorreporting_v1beta1.types import error_stats_service from .base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + + +class _LoggingClientInterceptor(grpc.UnaryUnaryClientInterceptor): # pragma: NO COVER + def intercept_unary_unary(self, continuation, client_call_details, request): + logging_enabled = CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ) + if logging_enabled: # pragma: NO COVER + request_metadata = client_call_details.metadata + if isinstance(request, proto.Message): + request_payload = type(request).to_json(request) + elif isinstance(request, google.protobuf.message.Message): + request_payload = MessageToJson(request) + else: + request_payload = f"{type(request).__name__}: {pickle.dumps(request)}" + + request_metadata = { + key: value.decode("utf-8") if isinstance(value, bytes) else value + for key, value in request_metadata + } + grpc_request = { + "payload": request_payload, + "requestMethod": "grpc", + "metadata": dict(request_metadata), + } + _LOGGER.debug( + f"Sending request for {client_call_details.method}", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": client_call_details.method, + "request": grpc_request, + "metadata": grpc_request["metadata"], + }, + ) + + response = continuation(client_call_details, request) + if logging_enabled: # pragma: NO COVER + response_metadata = response.trailing_metadata() + # Convert gRPC metadata `` to list of tuples + metadata = ( + dict([(k, str(v)) for k, v in response_metadata]) + if response_metadata + else None + ) + result = response.result() + if isinstance(result, proto.Message): + response_payload = type(result).to_json(result) + elif isinstance(result, google.protobuf.message.Message): + response_payload = MessageToJson(result) + else: + response_payload = f"{type(result).__name__}: {pickle.dumps(result)}" + grpc_response = { + "payload": response_payload, + "metadata": metadata, + "status": "OK", + } + _LOGGER.debug( + f"Received response for {client_call_details.method}.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": client_call_details.method, + "response": grpc_response, + "metadata": grpc_response["metadata"], + }, + ) + return response + class ErrorStatsServiceGrpcTransport(ErrorStatsServiceTransport): """gRPC backend transport for ErrorStatsService. @@ -181,7 +262,12 @@ def __init__( ], ) - # Wrap messages. This must be done after self._grpc_channel exists + self._interceptor = _LoggingClientInterceptor() + self._logged_channel = grpc.intercept_channel( + self._grpc_channel, self._interceptor + ) + + # Wrap messages. This must be done after self._logged_channel exists self._prep_wrapped_messages(client_info) @classmethod @@ -258,7 +344,7 @@ def list_group_stats( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "list_group_stats" not in self._stubs: - self._stubs["list_group_stats"] = self.grpc_channel.unary_unary( + self._stubs["list_group_stats"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", request_serializer=error_stats_service.ListGroupStatsRequest.serialize, response_deserializer=error_stats_service.ListGroupStatsResponse.deserialize, @@ -286,7 +372,7 @@ def list_events( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "list_events" not in self._stubs: - self._stubs["list_events"] = self.grpc_channel.unary_unary( + self._stubs["list_events"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", request_serializer=error_stats_service.ListEventsRequest.serialize, response_deserializer=error_stats_service.ListEventsResponse.deserialize, @@ -315,7 +401,7 @@ def delete_events( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "delete_events" not in self._stubs: - self._stubs["delete_events"] = self.grpc_channel.unary_unary( + self._stubs["delete_events"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", request_serializer=error_stats_service.DeleteEventsRequest.serialize, response_deserializer=error_stats_service.DeleteEventsResponse.deserialize, @@ -323,7 +409,7 @@ def delete_events( return self._stubs["delete_events"] def close(self): - self.grpc_channel.close() + self._logged_channel.close() @property def kind(self) -> str: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 895a12958ceb..7085b89b88a8 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -13,6 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import inspect +import json +import pickle +import logging as std_logging import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union @@ -22,14 +26,93 @@ from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +from google.protobuf.json_format import MessageToJson +import google.protobuf.message import grpc # type: ignore +import proto # type: ignore from grpc.experimental import aio # type: ignore from google.cloud.errorreporting_v1beta1.types import error_stats_service from .base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO from .grpc import ErrorStatsServiceGrpcTransport +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + + +class _LoggingClientAIOInterceptor( + grpc.aio.UnaryUnaryClientInterceptor +): # pragma: NO COVER + async def intercept_unary_unary(self, continuation, client_call_details, request): + logging_enabled = CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ) + if logging_enabled: # pragma: NO COVER + request_metadata = client_call_details.metadata + if isinstance(request, proto.Message): + request_payload = type(request).to_json(request) + elif isinstance(request, google.protobuf.message.Message): + request_payload = MessageToJson(request) + else: + request_payload = f"{type(request).__name__}: {pickle.dumps(request)}" + + request_metadata = { + key: value.decode("utf-8") if isinstance(value, bytes) else value + for key, value in request_metadata + } + grpc_request = { + "payload": request_payload, + "requestMethod": "grpc", + "metadata": dict(request_metadata), + } + _LOGGER.debug( + f"Sending request for {client_call_details.method}", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": str(client_call_details.method), + "request": grpc_request, + "metadata": grpc_request["metadata"], + }, + ) + response = await continuation(client_call_details, request) + if logging_enabled: # pragma: NO COVER + response_metadata = await response.trailing_metadata() + # Convert gRPC metadata `` to list of tuples + metadata = ( + dict([(k, str(v)) for k, v in response_metadata]) + if response_metadata + else None + ) + result = await response + if isinstance(result, proto.Message): + response_payload = type(result).to_json(result) + elif isinstance(result, google.protobuf.message.Message): + response_payload = MessageToJson(result) + else: + response_payload = f"{type(result).__name__}: {pickle.dumps(result)}" + grpc_response = { + "payload": response_payload, + "metadata": metadata, + "status": "OK", + } + _LOGGER.debug( + f"Received response to rpc {client_call_details.method}.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": str(client_call_details.method), + "response": grpc_response, + "metadata": grpc_response["metadata"], + }, + ) + return response + class ErrorStatsServiceGrpcAsyncIOTransport(ErrorStatsServiceTransport): """gRPC AsyncIO backend transport for ErrorStatsService. @@ -227,7 +310,13 @@ def __init__( ], ) - # Wrap messages. This must be done after self._grpc_channel exists + self._interceptor = _LoggingClientAIOInterceptor() + self._grpc_channel._unary_unary_interceptors.append(self._interceptor) + self._logged_channel = self._grpc_channel + self._wrap_with_kind = ( + "kind" in inspect.signature(gapic_v1.method_async.wrap_method).parameters + ) + # Wrap messages. This must be done after self._logged_channel exists self._prep_wrapped_messages(client_info) @property @@ -262,7 +351,7 @@ def list_group_stats( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "list_group_stats" not in self._stubs: - self._stubs["list_group_stats"] = self.grpc_channel.unary_unary( + self._stubs["list_group_stats"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListGroupStats", request_serializer=error_stats_service.ListGroupStatsRequest.serialize, response_deserializer=error_stats_service.ListGroupStatsResponse.deserialize, @@ -291,7 +380,7 @@ def list_events( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "list_events" not in self._stubs: - self._stubs["list_events"] = self.grpc_channel.unary_unary( + self._stubs["list_events"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/ListEvents", request_serializer=error_stats_service.ListEventsRequest.serialize, response_deserializer=error_stats_service.ListEventsResponse.deserialize, @@ -320,7 +409,7 @@ def delete_events( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "delete_events" not in self._stubs: - self._stubs["delete_events"] = self.grpc_channel.unary_unary( + self._stubs["delete_events"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ErrorStatsService/DeleteEvents", request_serializer=error_stats_service.DeleteEventsRequest.serialize, response_deserializer=error_stats_service.DeleteEventsResponse.deserialize, @@ -330,25 +419,34 @@ def delete_events( def _prep_wrapped_messages(self, client_info): """Precompute the wrapped methods, overriding the base class method to use async wrappers.""" self._wrapped_methods = { - self.list_group_stats: gapic_v1.method_async.wrap_method( + self.list_group_stats: self._wrap_method( self.list_group_stats, default_timeout=None, client_info=client_info, ), - self.list_events: gapic_v1.method_async.wrap_method( + self.list_events: self._wrap_method( self.list_events, default_timeout=None, client_info=client_info, ), - self.delete_events: gapic_v1.method_async.wrap_method( + self.delete_events: self._wrap_method( self.delete_events, default_timeout=None, client_info=client_info, ), } + def _wrap_method(self, func, *args, **kwargs): + if self._wrap_with_kind: # pragma: NO COVER + kwargs["kind"] = self.kind + return gapic_v1.method_async.wrap_method(func, *args, **kwargs) + def close(self): - return self.grpc_channel.close() + return self._logged_channel.close() + + @property + def kind(self) -> str: + return "grpc_asyncio" __all__ = ("ErrorStatsServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py index f7cbbf8fa0a9..11a6cdd9113b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -13,44 +13,49 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import logging +import json # type: ignore from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.api_core import exceptions as core_exceptions from google.api_core import retry as retries from google.api_core import rest_helpers from google.api_core import rest_streaming -from google.api_core import path_template from google.api_core import gapic_v1 from google.protobuf import json_format + from requests import __version__ as requests_version import dataclasses -import re from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union import warnings + +from google.cloud.errorreporting_v1beta1.types import error_stats_service + + +from .rest_base import _BaseErrorStatsServiceRestTransport +from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO + try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object, None] # type: ignore +try: + from google.api_core import client_logging # type: ignore -from google.cloud.errorreporting_v1beta1.types import error_stats_service - -from .base import ( - ErrorStatsServiceTransport, - DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, -) + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False +_LOGGER = logging.getLogger(__name__) DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, grpc_version=None, - rest_version=requests_version, + rest_version=f"requests@{requests_version}", ) @@ -102,8 +107,10 @@ def post_list_group_stats(self, response): def pre_delete_events( self, request: error_stats_service.DeleteEventsRequest, - metadata: Sequence[Tuple[str, str]], - ) -> Tuple[error_stats_service.DeleteEventsRequest, Sequence[Tuple[str, str]]]: + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + error_stats_service.DeleteEventsRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: """Pre-rpc interceptor for delete_events Override in a subclass to manipulate the request or metadata @@ -116,17 +123,45 @@ def post_delete_events( ) -> error_stats_service.DeleteEventsResponse: """Post-rpc interceptor for delete_events - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_events_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ErrorStatsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_events` interceptor runs + before the `post_delete_events_with_metadata` interceptor. """ return response + def post_delete_events_with_metadata( + self, + response: error_stats_service.DeleteEventsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + error_stats_service.DeleteEventsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for delete_events + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ErrorStatsService server but before it is returned to user code. + + We recommend only using this `post_delete_events_with_metadata` + interceptor in new development instead of the `post_delete_events` interceptor. + When both interceptors are used, this `post_delete_events_with_metadata` interceptor runs after the + `post_delete_events` interceptor. The (possibly modified) response returned by + `post_delete_events` will be passed to + `post_delete_events_with_metadata`. + """ + return response, metadata + def pre_list_events( self, request: error_stats_service.ListEventsRequest, - metadata: Sequence[Tuple[str, str]], - ) -> Tuple[error_stats_service.ListEventsRequest, Sequence[Tuple[str, str]]]: + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + error_stats_service.ListEventsRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: """Pre-rpc interceptor for list_events Override in a subclass to manipulate the request or metadata @@ -139,17 +174,45 @@ def post_list_events( ) -> error_stats_service.ListEventsResponse: """Post-rpc interceptor for list_events - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_events_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ErrorStatsService server but before - it is returned to user code. + it is returned to user code. This `post_list_events` interceptor runs + before the `post_list_events_with_metadata` interceptor. """ return response + def post_list_events_with_metadata( + self, + response: error_stats_service.ListEventsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + error_stats_service.ListEventsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_events + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ErrorStatsService server but before it is returned to user code. + + We recommend only using this `post_list_events_with_metadata` + interceptor in new development instead of the `post_list_events` interceptor. + When both interceptors are used, this `post_list_events_with_metadata` interceptor runs after the + `post_list_events` interceptor. The (possibly modified) response returned by + `post_list_events` will be passed to + `post_list_events_with_metadata`. + """ + return response, metadata + def pre_list_group_stats( self, request: error_stats_service.ListGroupStatsRequest, - metadata: Sequence[Tuple[str, str]], - ) -> Tuple[error_stats_service.ListGroupStatsRequest, Sequence[Tuple[str, str]]]: + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + error_stats_service.ListGroupStatsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: """Pre-rpc interceptor for list_group_stats Override in a subclass to manipulate the request or metadata @@ -162,12 +225,38 @@ def post_list_group_stats( ) -> error_stats_service.ListGroupStatsResponse: """Post-rpc interceptor for list_group_stats - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_group_stats_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ErrorStatsService server but before - it is returned to user code. + it is returned to user code. This `post_list_group_stats` interceptor runs + before the `post_list_group_stats_with_metadata` interceptor. """ return response + def post_list_group_stats_with_metadata( + self, + response: error_stats_service.ListGroupStatsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + error_stats_service.ListGroupStatsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_group_stats + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ErrorStatsService server but before it is returned to user code. + + We recommend only using this `post_list_group_stats_with_metadata` + interceptor in new development instead of the `post_list_group_stats` interceptor. + When both interceptors are used, this `post_list_group_stats_with_metadata` interceptor runs after the + `post_list_group_stats` interceptor. The (possibly modified) response returned by + `post_list_group_stats` will be passed to + `post_list_group_stats_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ErrorStatsServiceRestStub: @@ -176,8 +265,8 @@ class ErrorStatsServiceRestStub: _interceptor: ErrorStatsServiceRestInterceptor -class ErrorStatsServiceRestTransport(ErrorStatsServiceTransport): - """REST backend transport for ErrorStatsService. +class ErrorStatsServiceRestTransport(_BaseErrorStatsServiceRestTransport): + """REST backend synchronous transport for ErrorStatsService. An API for retrieving and managing error statistics as well as data for individual events. @@ -187,7 +276,6 @@ class ErrorStatsServiceRestTransport(ErrorStatsServiceTransport): and call it. It sends JSON representations of protocol buffers over HTTP/1.1 - """ def __init__( @@ -241,21 +329,12 @@ def __init__( # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError( - f"Unexpected hostname structure: {host}" - ) # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - super().__init__( host=host, credentials=credentials, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + url_scheme=url_scheme, api_audience=api_audience, ) self._session = AuthorizedSession( @@ -266,19 +345,33 @@ def __init__( self._interceptor = interceptor or ErrorStatsServiceRestInterceptor() self._prep_wrapped_messages(client_info) - class _DeleteEvents(ErrorStatsServiceRestStub): + class _DeleteEvents( + _BaseErrorStatsServiceRestTransport._BaseDeleteEvents, ErrorStatsServiceRestStub + ): def __hash__(self): - return hash("DeleteEvents") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return { - k: v - for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() - if k not in message_dict - } + return hash("ErrorStatsServiceRestTransport.DeleteEvents") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response def __call__( self, @@ -286,7 +379,7 @@ def __call__( *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> error_stats_service.DeleteEventsResponse: r"""Call the delete events method over HTTP. @@ -296,8 +389,10 @@ def __call__( retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: ~.error_stats_service.DeleteEventsResponse: @@ -306,42 +401,55 @@ def __call__( """ - http_options: List[Dict[str, str]] = [ - { - "method": "delete", - "uri": "/v1beta1/{project_name=projects/*}/events", - }, - { - "method": "delete", - "uri": "/v1beta1/{project_name=projects/*/locations/*}/events", - }, - ] - request, metadata = self._interceptor.pre_delete_events(request, metadata) - pb_request = error_stats_service.DeleteEventsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) + http_options = ( + _BaseErrorStatsServiceRestTransport._BaseDeleteEvents._get_http_options() + ) - uri = transcoded_request["uri"] - method = transcoded_request["method"] + request, metadata = self._interceptor.pre_delete_events(request, metadata) + transcoded_request = _BaseErrorStatsServiceRestTransport._BaseDeleteEvents._get_transcoded_request( + http_options, request + ) # Jsonify the query params - query_params = json.loads( - json_format.MessageToJson( - transcoded_request["query_params"], - use_integers_for_enums=True, - ) + query_params = _BaseErrorStatsServiceRestTransport._BaseDeleteEvents._get_query_params_json( + transcoded_request ) - query_params.update(self._get_unset_required_fields(query_params)) - query_params["$alt"] = "json;enum-encoding=int" + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.devtools.clouderrorreporting_v1beta1.ErrorStatsServiceClient.DeleteEvents", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": "DeleteEvents", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) # Send the request - headers = dict(metadata) - headers["Content-Type"] = "application/json" - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), + response = ErrorStatsServiceRestTransport._DeleteEvents._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -354,24 +462,64 @@ def __call__( pb_resp = error_stats_service.DeleteEventsResponse.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_delete_events(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_events_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = error_stats_service.DeleteEventsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.devtools.clouderrorreporting_v1beta1.ErrorStatsServiceClient.delete_events", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": "DeleteEvents", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) return resp - class _ListEvents(ErrorStatsServiceRestStub): + class _ListEvents( + _BaseErrorStatsServiceRestTransport._BaseListEvents, ErrorStatsServiceRestStub + ): def __hash__(self): - return hash("ListEvents") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "groupId": "", - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return { - k: v - for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() - if k not in message_dict - } + return hash("ErrorStatsServiceRestTransport.ListEvents") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response def __call__( self, @@ -379,7 +527,7 @@ def __call__( *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> error_stats_service.ListEventsResponse: r"""Call the list events method over HTTP. @@ -390,8 +538,10 @@ def __call__( retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: ~.error_stats_service.ListEventsResponse: @@ -400,42 +550,55 @@ def __call__( """ - http_options: List[Dict[str, str]] = [ - { - "method": "get", - "uri": "/v1beta1/{project_name=projects/*}/events", - }, - { - "method": "get", - "uri": "/v1beta1/{project_name=projects/*/locations/*}/events", - }, - ] - request, metadata = self._interceptor.pre_list_events(request, metadata) - pb_request = error_stats_service.ListEventsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) + http_options = ( + _BaseErrorStatsServiceRestTransport._BaseListEvents._get_http_options() + ) - uri = transcoded_request["uri"] - method = transcoded_request["method"] + request, metadata = self._interceptor.pre_list_events(request, metadata) + transcoded_request = _BaseErrorStatsServiceRestTransport._BaseListEvents._get_transcoded_request( + http_options, request + ) # Jsonify the query params - query_params = json.loads( - json_format.MessageToJson( - transcoded_request["query_params"], - use_integers_for_enums=True, - ) + query_params = _BaseErrorStatsServiceRestTransport._BaseListEvents._get_query_params_json( + transcoded_request ) - query_params.update(self._get_unset_required_fields(query_params)) - query_params["$alt"] = "json;enum-encoding=int" + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.devtools.clouderrorreporting_v1beta1.ErrorStatsServiceClient.ListEvents", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": "ListEvents", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) # Send the request - headers = dict(metadata) - headers["Content-Type"] = "application/json" - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), + response = ErrorStatsServiceRestTransport._ListEvents._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -448,22 +611,65 @@ def __call__( pb_resp = error_stats_service.ListEventsResponse.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_events(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_events_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = error_stats_service.ListEventsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.devtools.clouderrorreporting_v1beta1.ErrorStatsServiceClient.list_events", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": "ListEvents", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) return resp - class _ListGroupStats(ErrorStatsServiceRestStub): + class _ListGroupStats( + _BaseErrorStatsServiceRestTransport._BaseListGroupStats, + ErrorStatsServiceRestStub, + ): def __hash__(self): - return hash("ListGroupStats") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return { - k: v - for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() - if k not in message_dict - } + return hash("ErrorStatsServiceRestTransport.ListGroupStats") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response def __call__( self, @@ -471,7 +677,7 @@ def __call__( *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> error_stats_service.ListGroupStatsResponse: r"""Call the list group stats method over HTTP. @@ -481,8 +687,10 @@ def __call__( retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: ~.error_stats_service.ListGroupStatsResponse: @@ -491,44 +699,57 @@ def __call__( """ - http_options: List[Dict[str, str]] = [ - { - "method": "get", - "uri": "/v1beta1/{project_name=projects/*}/groupStats", - }, - { - "method": "get", - "uri": "/v1beta1/{project_name=projects/*/locations/*}/groupStats", - }, - ] + http_options = ( + _BaseErrorStatsServiceRestTransport._BaseListGroupStats._get_http_options() + ) + request, metadata = self._interceptor.pre_list_group_stats( request, metadata ) - pb_request = error_stats_service.ListGroupStatsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request["uri"] - method = transcoded_request["method"] + transcoded_request = _BaseErrorStatsServiceRestTransport._BaseListGroupStats._get_transcoded_request( + http_options, request + ) # Jsonify the query params - query_params = json.loads( - json_format.MessageToJson( - transcoded_request["query_params"], - use_integers_for_enums=True, - ) + query_params = _BaseErrorStatsServiceRestTransport._BaseListGroupStats._get_query_params_json( + transcoded_request ) - query_params.update(self._get_unset_required_fields(query_params)) - query_params["$alt"] = "json;enum-encoding=int" + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.devtools.clouderrorreporting_v1beta1.ErrorStatsServiceClient.ListGroupStats", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": "ListGroupStats", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) # Send the request - headers = dict(metadata) - headers["Content-Type"] = "application/json" - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), + response = ErrorStatsServiceRestTransport._ListGroupStats._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -541,7 +762,35 @@ def __call__( pb_resp = error_stats_service.ListGroupStatsResponse.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_group_stats(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_group_stats_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = ( + error_stats_service.ListGroupStatsResponse.to_json(response) + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.devtools.clouderrorreporting_v1beta1.ErrorStatsServiceClient.list_group_stats", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", + "rpcName": "ListGroupStats", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) return resp @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest_base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest_base.py new file mode 100644 index 000000000000..cd1c2a0f2a9c --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest_base.py @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +# Copyright 2024 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 # type: ignore +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from .base import ErrorStatsServiceTransport, DEFAULT_CLIENT_INFO + +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + + +from google.cloud.errorreporting_v1beta1.types import error_stats_service + + +class _BaseErrorStatsServiceRestTransport(ErrorStatsServiceTransport): + """Base REST backend transport for ErrorStatsService. + + Note: This class is not meant to be used directly. Use its sync and + async sub-classes instead. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: Optional[Any] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + Args: + host (Optional[str]): + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). + credentials (Optional[Any]): 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. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + class _BaseDeleteEvents: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "delete", + "uri": "/v1beta1/{project_name=projects/*}/events", + }, + { + "method": "delete", + "uri": "/v1beta1/{project_name=projects/*/locations/*}/events", + }, + ] + return http_options + + @staticmethod + def _get_transcoded_request(http_options, request): + pb_request = error_stats_service.DeleteEventsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + return transcoded_request + + @staticmethod + def _get_query_params_json(transcoded_request): + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + use_integers_for_enums=True, + ) + ) + query_params.update( + _BaseErrorStatsServiceRestTransport._BaseDeleteEvents._get_unset_required_fields( + query_params + ) + ) + + query_params["$alt"] = "json;enum-encoding=int" + return query_params + + class _BaseListEvents: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "groupId": "", + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1beta1/{project_name=projects/*}/events", + }, + { + "method": "get", + "uri": "/v1beta1/{project_name=projects/*/locations/*}/events", + }, + ] + return http_options + + @staticmethod + def _get_transcoded_request(http_options, request): + pb_request = error_stats_service.ListEventsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + return transcoded_request + + @staticmethod + def _get_query_params_json(transcoded_request): + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + use_integers_for_enums=True, + ) + ) + query_params.update( + _BaseErrorStatsServiceRestTransport._BaseListEvents._get_unset_required_fields( + query_params + ) + ) + + query_params["$alt"] = "json;enum-encoding=int" + return query_params + + class _BaseListGroupStats: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1beta1/{project_name=projects/*}/groupStats", + }, + { + "method": "get", + "uri": "/v1beta1/{project_name=projects/*/locations/*}/groupStats", + }, + ] + return http_options + + @staticmethod + def _get_transcoded_request(http_options, request): + pb_request = error_stats_service.ListGroupStatsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + return transcoded_request + + @staticmethod + def _get_query_params_json(transcoded_request): + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + use_integers_for_enums=True, + ) + ) + query_params.update( + _BaseErrorStatsServiceRestTransport._BaseListGroupStats._get_unset_required_fields( + query_params + ) + ) + + query_params["$alt"] = "json;enum-encoding=int" + return query_params + + +__all__ = ("_BaseErrorStatsServiceRestTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 6c0ef6601004..76e85eed4a0b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import logging as std_logging from collections import OrderedDict import re from typing import ( @@ -48,6 +49,15 @@ from .transports.grpc_asyncio import ReportErrorsServiceGrpcAsyncIOTransport from .client import ReportErrorsServiceClient +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + class ReportErrorsServiceAsyncClient: """An API for reporting error events.""" @@ -255,6 +265,28 @@ def __init__( client_info=client_info, ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ): # pragma: NO COVER + _LOGGER.debug( + "Created client `google.devtools.clouderrorreporting_v1beta1.ReportErrorsServiceAsyncClient`.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "universeDomain": getattr( + self._client._transport._credentials, "universe_domain", "" + ), + "credentialsType": f"{type(self._client._transport._credentials).__module__}.{type(self._client._transport._credentials).__qualname__}", + "credentialsInfo": getattr( + self.transport._credentials, "get_cred_info", lambda: None + )(), + } + if hasattr(self._client._transport, "_credentials") + else { + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "credentialsType": None, + }, + ) + async def report_error_event( self, request: Optional[ @@ -265,7 +297,7 @@ async def report_error_event( event: Optional[report_errors_service.ReportedErrorEvent] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> report_errors_service.ReportErrorEventResponse: r"""Report an individual error event and record the event to a log. @@ -345,8 +377,10 @@ async def sample_report_error_event(): retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse: @@ -358,7 +392,10 @@ async def sample_report_error_event(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project_name, event]) + flattened_params = [project_name, event] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 212c58118ea6..aa9f01e88830 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -14,6 +14,9 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json +import logging as std_logging import os import re from typing import ( @@ -48,6 +51,15 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object, None] # type: ignore +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + from google.cloud.errorreporting_v1beta1.types import report_errors_service from .transports.base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO from .transports.grpc import ReportErrorsServiceGrpcTransport @@ -437,52 +449,45 @@ def _get_universe_domain( raise ValueError("Universe Domain cannot be an empty string.") return universe_domain - @staticmethod - def _compare_universes( - client_universe: str, credentials: ga_credentials.Credentials - ) -> bool: - """Returns True iff the universe domains used by the client and credentials match. - - Args: - client_universe (str): The universe domain configured via the client options. - credentials (ga_credentials.Credentials): The credentials being used in the client. + def _validate_universe_domain(self): + """Validates client's and credentials' universe domains are consistent. Returns: - bool: True iff client_universe matches the universe in credentials. + bool: True iff the configured universe domain is valid. Raises: - ValueError: when client_universe does not match the universe in credentials. + ValueError: If the configured universe domain is not valid. """ - default_universe = ReportErrorsServiceClient._DEFAULT_UNIVERSE - credentials_universe = getattr(credentials, "universe_domain", default_universe) - - if client_universe != credentials_universe: - raise ValueError( - "The configured universe domain " - f"({client_universe}) does not match the universe domain " - f"found in the credentials ({credentials_universe}). " - "If you haven't configured the universe domain explicitly, " - f"`{default_universe}` is the default." - ) + # NOTE (b/349488459): universe validation is disabled until further notice. return True - def _validate_universe_domain(self): - """Validates client's and credentials' universe domains are consistent. - - Returns: - bool: True iff the configured universe domain is valid. + 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. - Raises: - ValueError: If the configured universe domain is not valid. + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. """ - self._is_universe_domain_valid = ( - self._is_universe_domain_valid - or ReportErrorsServiceClient._compare_universes( - self.universe_domain, self.transport._credentials - ) - ) - return self._is_universe_domain_valid + 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): @@ -592,6 +597,10 @@ def __init__( # 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( @@ -658,6 +667,29 @@ def __init__( 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 `google.devtools.clouderrorreporting_v1beta1.ReportErrorsServiceClient`.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "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": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "credentialsType": None, + }, + ) + def report_error_event( self, request: Optional[ @@ -668,7 +700,7 @@ def report_error_event( event: Optional[report_errors_service.ReportedErrorEvent] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> report_errors_service.ReportErrorEventResponse: r"""Report an individual error event and record the event to a log. @@ -748,8 +780,10 @@ def sample_report_error_event(): retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse: @@ -761,7 +795,10 @@ def sample_report_error_event(): # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project_name, event]) + flattened_params = [project_name, event] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/README.rst b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/README.rst new file mode 100644 index 000000000000..d70e90101f33 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/README.rst @@ -0,0 +1,9 @@ + +transport inheritance structure +_______________________________ + +`ReportErrorsServiceTransport` is the ABC for all transports. +- public child `ReportErrorsServiceGrpcTransport` for sync gRPC transport (defined in `grpc.py`). +- public child `ReportErrorsServiceGrpcAsyncIOTransport` for async gRPC transport (defined in `grpc_asyncio.py`). +- private child `_BaseReportErrorsServiceRestTransport` for base REST transport with inner classes `_BaseMETHOD` (defined in `rest_base.py`). +- public child `ReportErrorsServiceRestTransport` for sync REST transport with inner classes `METHOD` derived from the parent's corresponding `_BaseMETHOD` classes (defined in `rest.py`). diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 0cbcc619f7f7..e9cf45f35de6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -13,6 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import json +import logging as std_logging +import pickle import warnings from typing import Callable, Dict, Optional, Sequence, Tuple, Union @@ -21,12 +24,90 @@ import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +from google.protobuf.json_format import MessageToJson +import google.protobuf.message import grpc # type: ignore +import proto # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service from .base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + + +class _LoggingClientInterceptor(grpc.UnaryUnaryClientInterceptor): # pragma: NO COVER + def intercept_unary_unary(self, continuation, client_call_details, request): + logging_enabled = CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ) + if logging_enabled: # pragma: NO COVER + request_metadata = client_call_details.metadata + if isinstance(request, proto.Message): + request_payload = type(request).to_json(request) + elif isinstance(request, google.protobuf.message.Message): + request_payload = MessageToJson(request) + else: + request_payload = f"{type(request).__name__}: {pickle.dumps(request)}" + + request_metadata = { + key: value.decode("utf-8") if isinstance(value, bytes) else value + for key, value in request_metadata + } + grpc_request = { + "payload": request_payload, + "requestMethod": "grpc", + "metadata": dict(request_metadata), + } + _LOGGER.debug( + f"Sending request for {client_call_details.method}", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "rpcName": client_call_details.method, + "request": grpc_request, + "metadata": grpc_request["metadata"], + }, + ) + + response = continuation(client_call_details, request) + if logging_enabled: # pragma: NO COVER + response_metadata = response.trailing_metadata() + # Convert gRPC metadata `` to list of tuples + metadata = ( + dict([(k, str(v)) for k, v in response_metadata]) + if response_metadata + else None + ) + result = response.result() + if isinstance(result, proto.Message): + response_payload = type(result).to_json(result) + elif isinstance(result, google.protobuf.message.Message): + response_payload = MessageToJson(result) + else: + response_payload = f"{type(result).__name__}: {pickle.dumps(result)}" + grpc_response = { + "payload": response_payload, + "metadata": metadata, + "status": "OK", + } + _LOGGER.debug( + f"Received response for {client_call_details.method}.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "rpcName": client_call_details.method, + "response": grpc_response, + "metadata": grpc_response["metadata"], + }, + ) + return response + class ReportErrorsServiceGrpcTransport(ReportErrorsServiceTransport): """gRPC backend transport for ReportErrorsService. @@ -180,7 +261,12 @@ def __init__( ], ) - # Wrap messages. This must be done after self._grpc_channel exists + self._interceptor = _LoggingClientInterceptor() + self._logged_channel = grpc.intercept_channel( + self._grpc_channel, self._interceptor + ) + + # Wrap messages. This must be done after self._logged_channel exists self._prep_wrapped_messages(client_info) @classmethod @@ -278,7 +364,7 @@ def report_error_event( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "report_error_event" not in self._stubs: - self._stubs["report_error_event"] = self.grpc_channel.unary_unary( + self._stubs["report_error_event"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", request_serializer=report_errors_service.ReportErrorEventRequest.serialize, response_deserializer=report_errors_service.ReportErrorEventResponse.deserialize, @@ -286,7 +372,7 @@ def report_error_event( return self._stubs["report_error_event"] def close(self): - self.grpc_channel.close() + self._logged_channel.close() @property def kind(self) -> str: diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 5b3612ba1aee..609b0be29dfe 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -13,6 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import inspect +import json +import pickle +import logging as std_logging import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union @@ -22,14 +26,93 @@ from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +from google.protobuf.json_format import MessageToJson +import google.protobuf.message import grpc # type: ignore +import proto # type: ignore from grpc.experimental import aio # type: ignore from google.cloud.errorreporting_v1beta1.types import report_errors_service from .base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO from .grpc import ReportErrorsServiceGrpcTransport +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + + +class _LoggingClientAIOInterceptor( + grpc.aio.UnaryUnaryClientInterceptor +): # pragma: NO COVER + async def intercept_unary_unary(self, continuation, client_call_details, request): + logging_enabled = CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ) + if logging_enabled: # pragma: NO COVER + request_metadata = client_call_details.metadata + if isinstance(request, proto.Message): + request_payload = type(request).to_json(request) + elif isinstance(request, google.protobuf.message.Message): + request_payload = MessageToJson(request) + else: + request_payload = f"{type(request).__name__}: {pickle.dumps(request)}" + + request_metadata = { + key: value.decode("utf-8") if isinstance(value, bytes) else value + for key, value in request_metadata + } + grpc_request = { + "payload": request_payload, + "requestMethod": "grpc", + "metadata": dict(request_metadata), + } + _LOGGER.debug( + f"Sending request for {client_call_details.method}", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "rpcName": str(client_call_details.method), + "request": grpc_request, + "metadata": grpc_request["metadata"], + }, + ) + response = await continuation(client_call_details, request) + if logging_enabled: # pragma: NO COVER + response_metadata = await response.trailing_metadata() + # Convert gRPC metadata `` to list of tuples + metadata = ( + dict([(k, str(v)) for k, v in response_metadata]) + if response_metadata + else None + ) + result = await response + if isinstance(result, proto.Message): + response_payload = type(result).to_json(result) + elif isinstance(result, google.protobuf.message.Message): + response_payload = MessageToJson(result) + else: + response_payload = f"{type(result).__name__}: {pickle.dumps(result)}" + grpc_response = { + "payload": response_payload, + "metadata": metadata, + "status": "OK", + } + _LOGGER.debug( + f"Received response to rpc {client_call_details.method}.", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "rpcName": str(client_call_details.method), + "response": grpc_response, + "metadata": grpc_response["metadata"], + }, + ) + return response + class ReportErrorsServiceGrpcAsyncIOTransport(ReportErrorsServiceTransport): """gRPC AsyncIO backend transport for ReportErrorsService. @@ -226,7 +309,13 @@ def __init__( ], ) - # Wrap messages. This must be done after self._grpc_channel exists + self._interceptor = _LoggingClientAIOInterceptor() + self._grpc_channel._unary_unary_interceptors.append(self._interceptor) + self._logged_channel = self._grpc_channel + self._wrap_with_kind = ( + "kind" in inspect.signature(gapic_v1.method_async.wrap_method).parameters + ) + # Wrap messages. This must be done after self._logged_channel exists self._prep_wrapped_messages(client_info) @property @@ -282,7 +371,7 @@ def report_error_event( # gRPC handles serialization and deserialization, so we just need # to pass in the functions for each. if "report_error_event" not in self._stubs: - self._stubs["report_error_event"] = self.grpc_channel.unary_unary( + self._stubs["report_error_event"] = self._logged_channel.unary_unary( "/google.devtools.clouderrorreporting.v1beta1.ReportErrorsService/ReportErrorEvent", request_serializer=report_errors_service.ReportErrorEventRequest.serialize, response_deserializer=report_errors_service.ReportErrorEventResponse.deserialize, @@ -292,15 +381,24 @@ def report_error_event( def _prep_wrapped_messages(self, client_info): """Precompute the wrapped methods, overriding the base class method to use async wrappers.""" self._wrapped_methods = { - self.report_error_event: gapic_v1.method_async.wrap_method( + self.report_error_event: self._wrap_method( self.report_error_event, default_timeout=None, client_info=client_info, ), } + def _wrap_method(self, func, *args, **kwargs): + if self._wrap_with_kind: # pragma: NO COVER + kwargs["kind"] = self.kind + return gapic_v1.method_async.wrap_method(func, *args, **kwargs) + def close(self): - return self.grpc_channel.close() + return self._logged_channel.close() + + @property + def kind(self) -> str: + return "grpc_asyncio" __all__ = ("ReportErrorsServiceGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py index 64aa2ae0ecdd..b6120041ff89 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py @@ -13,44 +13,49 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import logging +import json # type: ignore from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.api_core import exceptions as core_exceptions from google.api_core import retry as retries from google.api_core import rest_helpers from google.api_core import rest_streaming -from google.api_core import path_template from google.api_core import gapic_v1 from google.protobuf import json_format + from requests import __version__ as requests_version import dataclasses -import re from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union import warnings + +from google.cloud.errorreporting_v1beta1.types import report_errors_service + + +from .rest_base import _BaseReportErrorsServiceRestTransport +from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO + try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object, None] # type: ignore +try: + from google.api_core import client_logging # type: ignore -from google.cloud.errorreporting_v1beta1.types import report_errors_service - -from .base import ( - ReportErrorsServiceTransport, - DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, -) + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False +_LOGGER = logging.getLogger(__name__) DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, grpc_version=None, - rest_version=requests_version, + rest_version=f"requests@{requests_version}", ) @@ -86,9 +91,10 @@ def post_report_error_event(self, response): def pre_report_error_event( self, request: report_errors_service.ReportErrorEventRequest, - metadata: Sequence[Tuple[str, str]], + metadata: Sequence[Tuple[str, Union[str, bytes]]], ) -> Tuple[ - report_errors_service.ReportErrorEventRequest, Sequence[Tuple[str, str]] + report_errors_service.ReportErrorEventRequest, + Sequence[Tuple[str, Union[str, bytes]]], ]: """Pre-rpc interceptor for report_error_event @@ -102,12 +108,38 @@ def post_report_error_event( ) -> report_errors_service.ReportErrorEventResponse: """Post-rpc interceptor for report_error_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_report_error_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ReportErrorsService server but before - it is returned to user code. + it is returned to user code. This `post_report_error_event` interceptor runs + before the `post_report_error_event_with_metadata` interceptor. """ return response + def post_report_error_event_with_metadata( + self, + response: report_errors_service.ReportErrorEventResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + report_errors_service.ReportErrorEventResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for report_error_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ReportErrorsService server but before it is returned to user code. + + We recommend only using this `post_report_error_event_with_metadata` + interceptor in new development instead of the `post_report_error_event` interceptor. + When both interceptors are used, this `post_report_error_event_with_metadata` interceptor runs after the + `post_report_error_event` interceptor. The (possibly modified) response returned by + `post_report_error_event` will be passed to + `post_report_error_event_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ReportErrorsServiceRestStub: @@ -116,8 +148,8 @@ class ReportErrorsServiceRestStub: _interceptor: ReportErrorsServiceRestInterceptor -class ReportErrorsServiceRestTransport(ReportErrorsServiceTransport): - """REST backend transport for ReportErrorsService. +class ReportErrorsServiceRestTransport(_BaseReportErrorsServiceRestTransport): + """REST backend synchronous transport for ReportErrorsService. An API for reporting error events. @@ -126,7 +158,6 @@ class ReportErrorsServiceRestTransport(ReportErrorsServiceTransport): and call it. It sends JSON representations of protocol buffers over HTTP/1.1 - """ def __init__( @@ -180,21 +211,12 @@ def __init__( # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError( - f"Unexpected hostname structure: {host}" - ) # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - super().__init__( host=host, credentials=credentials, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + url_scheme=url_scheme, api_audience=api_audience, ) self._session = AuthorizedSession( @@ -205,19 +227,35 @@ def __init__( self._interceptor = interceptor or ReportErrorsServiceRestInterceptor() self._prep_wrapped_messages(client_info) - class _ReportErrorEvent(ReportErrorsServiceRestStub): + class _ReportErrorEvent( + _BaseReportErrorsServiceRestTransport._BaseReportErrorEvent, + ReportErrorsServiceRestStub, + ): def __hash__(self): - return hash("ReportErrorEvent") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return { - k: v - for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() - if k not in message_dict - } + return hash("ReportErrorsServiceRestTransport.ReportErrorEvent") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response def __call__( self, @@ -225,7 +263,7 @@ def __call__( *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, - metadata: Sequence[Tuple[str, str]] = (), + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), ) -> report_errors_service.ReportErrorEventResponse: r"""Call the report error event method over HTTP. @@ -236,8 +274,10 @@ def __call__( retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. Returns: ~.report_errors_service.ReportErrorEventResponse: @@ -247,47 +287,62 @@ def __call__( """ - http_options: List[Dict[str, str]] = [ - { - "method": "post", - "uri": "/v1beta1/{project_name=projects/*}/events:report", - "body": "event", - }, - ] + http_options = ( + _BaseReportErrorsServiceRestTransport._BaseReportErrorEvent._get_http_options() + ) + request, metadata = self._interceptor.pre_report_error_event( request, metadata ) - pb_request = report_errors_service.ReportErrorEventRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body + transcoded_request = _BaseReportErrorsServiceRestTransport._BaseReportErrorEvent._get_transcoded_request( + http_options, request + ) - body = json_format.MessageToJson( - transcoded_request["body"], use_integers_for_enums=True + body = _BaseReportErrorsServiceRestTransport._BaseReportErrorEvent._get_request_body_json( + transcoded_request ) - uri = transcoded_request["uri"] - method = transcoded_request["method"] # Jsonify the query params - query_params = json.loads( - json_format.MessageToJson( - transcoded_request["query_params"], - use_integers_for_enums=True, - ) + query_params = _BaseReportErrorsServiceRestTransport._BaseReportErrorEvent._get_query_params_json( + transcoded_request ) - query_params.update(self._get_unset_required_fields(query_params)) - query_params["$alt"] = "json;enum-encoding=int" + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.devtools.clouderrorreporting_v1beta1.ReportErrorsServiceClient.ReportErrorEvent", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "rpcName": "ReportErrorEvent", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) # Send the request - headers = dict(metadata) - headers["Content-Type"] = "application/json" - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, + response = ReportErrorsServiceRestTransport._ReportErrorEvent._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -300,7 +355,35 @@ def __call__( pb_resp = report_errors_service.ReportErrorEventResponse.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_report_error_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_report_error_event_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = ( + report_errors_service.ReportErrorEventResponse.to_json(response) + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.devtools.clouderrorreporting_v1beta1.ReportErrorsServiceClient.report_error_event", + extra={ + "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", + "rpcName": "ReportErrorEvent", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) return resp @property diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest_base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest_base.py new file mode 100644 index 000000000000..61e2fbf190f7 --- /dev/null +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest_base.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# Copyright 2024 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 # type: ignore +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from .base import ReportErrorsServiceTransport, DEFAULT_CLIENT_INFO + +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + + +from google.cloud.errorreporting_v1beta1.types import report_errors_service + + +class _BaseReportErrorsServiceRestTransport(ReportErrorsServiceTransport): + """Base REST backend transport for ReportErrorsService. + + Note: This class is not meant to be used directly. Use its sync and + async sub-classes instead. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "clouderrorreporting.googleapis.com", + credentials: Optional[Any] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + Args: + host (Optional[str]): + The hostname to connect to (default: 'clouderrorreporting.googleapis.com'). + credentials (Optional[Any]): 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. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + class _BaseReportErrorEvent: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1beta1/{project_name=projects/*}/events:report", + "body": "event", + }, + ] + return http_options + + @staticmethod + def _get_transcoded_request(http_options, request): + pb_request = report_errors_service.ReportErrorEventRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + return transcoded_request + + @staticmethod + def _get_request_body_json(transcoded_request): + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], use_integers_for_enums=True + ) + return body + + @staticmethod + def _get_query_params_json(transcoded_request): + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + use_integers_for_enums=True, + ) + ) + query_params.update( + _BaseReportErrorsServiceRestTransport._BaseReportErrorEvent._get_unset_required_fields( + query_params + ) + ) + + query_params["$alt"] = "json;enum-encoding=int" + return query_params + + +__all__ = ("_BaseReportErrorsServiceRestTransport",) diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index f8a87619a8db..f3b984e52976 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.11.1" + "version": "0.1.0" }, "snippets": [ { @@ -47,7 +47,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.types.ErrorGroup", @@ -127,7 +127,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.types.ErrorGroup", @@ -208,7 +208,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.types.ErrorGroup", @@ -288,7 +288,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.types.ErrorGroup", @@ -369,7 +369,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse", @@ -449,7 +449,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.types.DeleteEventsResponse", @@ -534,7 +534,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListEventsAsyncPager", @@ -618,7 +618,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListEventsPager", @@ -703,7 +703,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListGroupStatsAsyncPager", @@ -787,7 +787,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.services.error_stats_service.pagers.ListGroupStatsPager", @@ -872,7 +872,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse", @@ -956,7 +956,7 @@ }, { "name": "metadata", - "type": "Sequence[Tuple[str, str]" + "type": "Sequence[Tuple[str, Union[str, bytes]]]" } ], "resultType": "google.cloud.errorreporting_v1beta1.types.ReportErrorEventResponse", diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.13.txt b/packages/google-cloud-error-reporting/testing/constraints-3.13.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.13.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.13.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index e6e0089bfb82..cacaa62015b5 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -24,7 +24,7 @@ import grpc from grpc.experimental import aio -from collections.abc import Iterable +from collections.abc import Iterable, AsyncIterable from google.protobuf import json_format import json import math @@ -37,6 +37,13 @@ from requests.sessions import Session from google.protobuf import json_format +try: + from google.auth.aio import credentials as ga_credentials_async + + HAS_GOOGLE_AUTH_AIO = True +except ImportError: # pragma: NO COVER + HAS_GOOGLE_AUTH_AIO = False + from google.api_core import client_options from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -59,10 +66,32 @@ import google.auth +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + + +async def mock_async_gen(data, chunk_size=1): + for i in range(0, len(data)): # pragma: NO COVER + chunk = data[i : i + chunk_size] + yield chunk.encode("utf-8") + + def client_cert_source_callback(): return b"cert bytes", b"key bytes" +# TODO: use async auth anon credentials by default once the minimum version of google-auth is upgraded. +# See related issue: https://github.com/googleapis/gapic-generator-python/issues/2107. +def async_anonymous_credentials(): + if HAS_GOOGLE_AUTH_AIO: + return ga_credentials_async.AnonymousCredentials() + return ga_credentials.AnonymousCredentials() + + # 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. @@ -312,83 +341,46 @@ def test__get_universe_domain(): @pytest.mark.parametrize( - "client_class,transport_class,transport_name", + "error_code,cred_info_json,show_cred_info", [ - (ErrorGroupServiceClient, transports.ErrorGroupServiceGrpcTransport, "grpc"), - (ErrorGroupServiceClient, transports.ErrorGroupServiceRestTransport, "rest"), + (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__validate_universe_domain(client_class, transport_class, transport_name): - client = client_class( - transport=transport_class(credentials=ga_credentials.AnonymousCredentials()) - ) - assert client._validate_universe_domain() == True - - # Test the case when universe is already validated. - assert client._validate_universe_domain() == True - - if transport_name == "grpc": - # Test the case where credentials are provided by the - # `local_channel_credentials`. The default universes in both match. - channel = grpc.secure_channel( - "http://localhost/", grpc.local_channel_credentials() - ) - client = client_class(transport=transport_class(channel=channel)) - assert client._validate_universe_domain() == True +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 = ErrorGroupServiceClient(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"] - # Test the case where credentials do not exist: e.g. a transport is provided - # with no credentials. Validation should still succeed because there is no - # mismatch with non-existent credentials. - channel = grpc.secure_channel( - "http://localhost/", grpc.local_channel_credentials() - ) - transport = transport_class(channel=channel) - transport._credentials = None - client = client_class(transport=transport) - assert client._validate_universe_domain() == True - # TODO: This is needed to cater for older versions of google-auth - # Make this test unconditional once the minimum supported version of - # google-auth becomes 2.23.0 or higher. - google_auth_major, google_auth_minor = [ - int(part) for part in google.auth.__version__.split(".")[0:2] - ] - if google_auth_major > 2 or (google_auth_major == 2 and google_auth_minor >= 23): - credentials = ga_credentials.AnonymousCredentials() - credentials._universe_domain = "foo.com" - # Test the case when there is a universe mismatch from the credentials. - client = client_class(transport=transport_class(credentials=credentials)) - with pytest.raises(ValueError) as excinfo: - client._validate_universe_domain() - assert ( - str(excinfo.value) - == "The configured universe domain (googleapis.com) does not match the universe domain found in the credentials (foo.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." - ) +@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 = ErrorGroupServiceClient(credentials=cred) + client._transport._credentials = cred - # Test the case when there is a universe mismatch from the client. - # - # TODO: Make this test unconditional once the minimum supported version of - # google-api-core becomes 2.15.0 or higher. - api_core_major, api_core_minor = [ - int(part) for part in api_core_version.__version__.split(".")[0:2] - ] - if api_core_major > 2 or (api_core_major == 2 and api_core_minor >= 15): - client = client_class( - client_options={"universe_domain": "bar.com"}, - transport=transport_class( - credentials=ga_credentials.AnonymousCredentials(), - ), - ) - with pytest.raises(ValueError) as excinfo: - client._validate_universe_domain() - assert ( - str(excinfo.value) - == "The configured universe domain (bar.com) does not match the universe domain found in the credentials (googleapis.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." - ) + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code - # Test that ValueError is raised if universe_domain is provided via client options and credentials is None - with pytest.raises(ValueError): - client._compare_universes("foo.bar", None) + client._add_cred_info_for_auth_errors(error) + assert error.details == [] @pytest.mark.parametrize( @@ -1202,25 +1194,6 @@ def test_get_group(request_type, transport: str = "grpc"): assert response.resolution_status == common.ResolutionStatus.OPEN -def test_get_group_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_group), "__call__") as call: - call.return_value.name = ( - "foo" # operation_request.operation in compute client(s) expect a string. - ) - client.get_group() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.GetGroupRequest() - - def test_get_group_non_empty_request_with_auto_populated_field(): # This test is a coverage failsafe to make sure that UUID4 fields are # automatically populated, according to AIP-4235, with non-empty requests. @@ -1284,38 +1257,13 @@ def test_get_group_use_cached_wrapped_rpc(): assert mock_rpc.call_count == 2 -@pytest.mark.asyncio -async def test_get_group_empty_call_async(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_group), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - common.ErrorGroup( - name="name_value", - group_id="group_id_value", - resolution_status=common.ResolutionStatus.OPEN, - ) - ) - response = await client.get_group() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.GetGroupRequest() - - @pytest.mark.asyncio async def test_get_group_async_use_cached_wrapped_rpc(transport: str = "grpc_asyncio"): # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, # instead of constructing them on each call with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1354,7 +1302,7 @@ async def test_get_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.GetGroupRequest ): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1424,7 +1372,7 @@ def test_get_group_field_headers(): @pytest.mark.asyncio async def test_get_group_field_headers_async(): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as @@ -1492,7 +1440,7 @@ def test_get_group_flattened_error(): @pytest.mark.asyncio async def test_get_group_flattened_async(): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1519,7 +1467,7 @@ async def test_get_group_flattened_async(): @pytest.mark.asyncio async def test_get_group_flattened_error_async(): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Attempting to call a method with both a request object and flattened @@ -1571,25 +1519,6 @@ def test_update_group(request_type, transport: str = "grpc"): assert response.resolution_status == common.ResolutionStatus.OPEN -def test_update_group_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_group), "__call__") as call: - call.return_value.name = ( - "foo" # operation_request.operation in compute client(s) expect a string. - ) - client.update_group() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.UpdateGroupRequest() - - def test_update_group_non_empty_request_with_auto_populated_field(): # This test is a coverage failsafe to make sure that UUID4 fields are # automatically populated, according to AIP-4235, with non-empty requests. @@ -1649,31 +1578,6 @@ def test_update_group_use_cached_wrapped_rpc(): assert mock_rpc.call_count == 2 -@pytest.mark.asyncio -async def test_update_group_empty_call_async(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_group), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - common.ErrorGroup( - name="name_value", - group_id="group_id_value", - resolution_status=common.ResolutionStatus.OPEN, - ) - ) - response = await client.update_group() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_group_service.UpdateGroupRequest() - - @pytest.mark.asyncio async def test_update_group_async_use_cached_wrapped_rpc( transport: str = "grpc_asyncio", @@ -1682,7 +1586,7 @@ async def test_update_group_async_use_cached_wrapped_rpc( # instead of constructing them on each call with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1721,7 +1625,7 @@ async def test_update_group_async( transport: str = "grpc_asyncio", request_type=error_group_service.UpdateGroupRequest ): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1791,7 +1695,7 @@ def test_update_group_field_headers(): @pytest.mark.asyncio async def test_update_group_field_headers_async(): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as @@ -1859,7 +1763,7 @@ def test_update_group_flattened_error(): @pytest.mark.asyncio async def test_update_group_flattened_async(): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1886,7 +1790,7 @@ async def test_update_group_flattened_async(): @pytest.mark.asyncio async def test_update_group_flattened_error_async(): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Attempting to call a method with both a request object and flattened @@ -1898,50 +1802,6 @@ async def test_update_group_flattened_error_async(): ) -@pytest.mark.parametrize( - "request_type", - [ - error_group_service.GetGroupRequest, - dict, - ], -) -def test_get_group_rest(request_type): - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {"group_name": "projects/sample1/groups/sample2"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = common.ErrorGroup( - name="name_value", - group_id="group_id_value", - resolution_status=common.ResolutionStatus.OPEN, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - # Convert return value to protobuf type - return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.get_group(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, common.ErrorGroup) - assert response.name == "name_value" - assert response.group_id == "group_id_value" - assert response.resolution_status == common.ResolutionStatus.OPEN - - def test_get_group_rest_use_cached_wrapped_rpc(): # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, # instead of constructing them on each call @@ -2044,6 +1904,7 @@ def test_get_group_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} response = client.get_group(request) @@ -2061,85 +1922,6 @@ def test_get_group_rest_unset_required_fields(): assert set(unset_fields) == (set(()) & set(("groupName",))) -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_group_rest_interceptors(null_interceptor): - transport = transports.ErrorGroupServiceRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.ErrorGroupServiceRestInterceptor(), - ) - client = ErrorGroupServiceClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.ErrorGroupServiceRestInterceptor, "post_get_group" - ) as post, mock.patch.object( - transports.ErrorGroupServiceRestInterceptor, "pre_get_group" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = error_group_service.GetGroupRequest.pb( - error_group_service.GetGroupRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = common.ErrorGroup.to_json(common.ErrorGroup()) - - request = error_group_service.GetGroupRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = common.ErrorGroup() - - client.get_group( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_group_rest_bad_request( - transport: str = "rest", request_type=error_group_service.GetGroupRequest -): - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"group_name": "projects/sample1/groups/sample2"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_group(request) - - def test_get_group_rest_flattened(): client = ErrorGroupServiceClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2168,6 +1950,7 @@ def test_get_group_rest_flattened(): json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} client.get_group(**mock_args) @@ -2196,144 +1979,21 @@ def test_get_group_rest_flattened_error(transport: str = "rest"): ) -def test_get_group_rest_error(): - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) +def test_update_group_rest_use_cached_wrapped_rpc(): + # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, + # instead of constructing them on each call + with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + # Should wrap all calls on client creation + assert wrapper_fn.call_count > 0 + wrapper_fn.reset_mock() -@pytest.mark.parametrize( - "request_type", - [ - error_group_service.UpdateGroupRequest, - dict, - ], -) -def test_update_group_rest(request_type): - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {"group": {"name": "projects/sample1/groups/sample2"}} - request_init["group"] = { - "name": "projects/sample1/groups/sample2", - "group_id": "group_id_value", - "tracking_issues": [{"url": "url_value"}], - "resolution_status": 1, - } - # The version of a generated dependency at test runtime may differ from the version used during generation. - # Delete any fields which are not present in the current runtime dependency - # See https://github.com/googleapis/gapic-generator-python/issues/1748 - - # Determine if the message type is proto-plus or protobuf - test_field = error_group_service.UpdateGroupRequest.meta.fields["group"] - - def get_message_fields(field): - # Given a field which is a message (composite type), return a list with - # all the fields of the message. - # If the field is not a composite type, return an empty list. - message_fields = [] - - if hasattr(field, "message") and field.message: - is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") - - if is_field_type_proto_plus_type: - message_fields = field.message.meta.fields.values() - # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types - else: # pragma: NO COVER - message_fields = field.message.DESCRIPTOR.fields - return message_fields - - runtime_nested_fields = [ - (field.name, nested_field.name) - for field in get_message_fields(test_field) - for nested_field in get_message_fields(field) - ] - - subfields_not_in_runtime = [] - - # For each item in the sample request, create a list of sub fields which are not present at runtime - # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime - for field, value in request_init["group"].items(): # pragma: NO COVER - result = None - is_repeated = False - # For repeated fields - if isinstance(value, list) and len(value): - is_repeated = True - result = value[0] - # For fields where the type is another message - if isinstance(value, dict): - result = value - - if result and hasattr(result, "keys"): - for subfield in result.keys(): - if (field, subfield) not in runtime_nested_fields: - subfields_not_in_runtime.append( - { - "field": field, - "subfield": subfield, - "is_repeated": is_repeated, - } - ) - - # Remove fields from the sample request which are not present in the runtime version of the dependency - # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime - for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER - field = subfield_to_delete.get("field") - field_repeated = subfield_to_delete.get("is_repeated") - subfield = subfield_to_delete.get("subfield") - if subfield: - if field_repeated: - for i in range(0, len(request_init["group"][field])): - del request_init["group"][field][i][subfield] - else: - del request_init["group"][field][subfield] - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = common.ErrorGroup( - name="name_value", - group_id="group_id_value", - resolution_status=common.ResolutionStatus.OPEN, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - # Convert return value to protobuf type - return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.update_group(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, common.ErrorGroup) - assert response.name == "name_value" - assert response.group_id == "group_id_value" - assert response.resolution_status == common.ResolutionStatus.OPEN - - -def test_update_group_rest_use_cached_wrapped_rpc(): - # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, - # instead of constructing them on each call - with mock.patch("google.api_core.gapic_v1.method.wrap_method") as wrapper_fn: - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Should wrap all calls on client creation - assert wrapper_fn.call_count > 0 - wrapper_fn.reset_mock() - - # Ensure method has been cached - assert client._transport.update_group in client._transport._wrapped_methods + # Ensure method has been cached + assert client._transport.update_group in client._transport._wrapped_methods # Replace cached wrapped function with mock mock_rpc = mock.Mock() @@ -2415,23 +2075,579 @@ def test_update_group_rest_required_fields( return_value = common.ErrorGroup.pb(return_value) json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + + response = client.update_group(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_update_group_rest_unset_required_fields(): + transport = transports.ErrorGroupServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.update_group._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("group",))) + + +def test_update_group_rest_flattened(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup() + + # get arguments that satisfy an http rule for this method + sample_request = {"group": {"name": "projects/sample1/groups/sample2"}} + + # get truthy value for each flattened field + mock_args = dict( + group=common.ErrorGroup(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + + client.update_group(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1beta1/{group.name=projects/*/groups/*}" % client.transport._host, + args[1], + ) + + +def test_update_group_rest_flattened_error(transport: str = "rest"): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_group( + error_group_service.UpdateGroupRequest(), + group=common.ErrorGroup(name="name_value"), + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorGroupServiceClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = ErrorGroupServiceClient( + 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 = ErrorGroupServiceClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorGroupServiceClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = ErrorGroupServiceClient(transport=transport) + assert client.transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.ErrorGroupServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorGroupServiceGrpcTransport, + transports.ErrorGroupServiceGrpcAsyncIOTransport, + transports.ErrorGroupServiceRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +def test_transport_kind_grpc(): + transport = ErrorGroupServiceClient.get_transport_class("grpc")( + credentials=ga_credentials.AnonymousCredentials() + ) + assert transport.kind == "grpc" + + +def test_initialize_client_w_grpc(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc" + ) + assert client is not None + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_get_group_empty_call_grpc(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.get_group), "__call__") as call: + call.return_value = common.ErrorGroup() + client.get_group(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_group_service.GetGroupRequest() + + assert args[0] == request_msg + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_update_group_empty_call_grpc(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.update_group), "__call__") as call: + call.return_value = common.ErrorGroup() + client.update_group(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_group_service.UpdateGroupRequest() + + assert args[0] == request_msg + + +def test_transport_kind_grpc_asyncio(): + transport = ErrorGroupServiceAsyncClient.get_transport_class("grpc_asyncio")( + credentials=async_anonymous_credentials() + ) + assert transport.kind == "grpc_asyncio" + + +def test_initialize_client_w_grpc_asyncio(): + client = ErrorGroupServiceAsyncClient( + credentials=async_anonymous_credentials(), transport="grpc_asyncio" + ) + assert client is not None + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +@pytest.mark.asyncio +async def test_get_group_empty_call_grpc_asyncio(): + client = ErrorGroupServiceAsyncClient( + credentials=async_anonymous_credentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.get_group), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) + ) + await client.get_group(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_group_service.GetGroupRequest() + + assert args[0] == request_msg + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +@pytest.mark.asyncio +async def test_update_group_empty_call_grpc_asyncio(): + client = ErrorGroupServiceAsyncClient( + credentials=async_anonymous_credentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.update_group), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) + ) + await client.update_group(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_group_service.UpdateGroupRequest() + + assert args[0] == request_msg + + +def test_transport_kind_rest(): + transport = ErrorGroupServiceClient.get_transport_class("rest")( + credentials=ga_credentials.AnonymousCredentials() + ) + assert transport.kind == "rest" + + +def test_get_group_rest_bad_request(request_type=error_group_service.GetGroupRequest): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + # send a request that will satisfy transcoding + request_init = {"group_name": "projects/sample1/groups/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = mock.Mock() + json_return_value = "" + response_value.json = mock.Mock(return_value={}) + response_value.status_code = 400 + response_value.request = mock.Mock() + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + client.get_group(request) + + +@pytest.mark.parametrize( + "request_type", + [ + error_group_service.GetGroupRequest, + dict, + ], +) +def test_get_group_rest_call_success(request_type): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + # send a request that will satisfy transcoding + request_init = {"group_name": "projects/sample1/groups/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) + + # Wrap the value into a proper Response obj + response_value = mock.Mock() + response_value.status_code = 200 + + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + response_value.content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + response = client.get_group(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) + assert response.name == "name_value" + assert response.group_id == "group_id_value" + assert response.resolution_status == common.ResolutionStatus.OPEN + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_group_rest_interceptors(null_interceptor): + transport = transports.ErrorGroupServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ErrorGroupServiceRestInterceptor(), + ) + client = ErrorGroupServiceClient(transport=transport) + + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ErrorGroupServiceRestInterceptor, "post_get_group" + ) as post, mock.patch.object( + transports.ErrorGroupServiceRestInterceptor, "post_get_group_with_metadata" + ) as post_with_metadata, mock.patch.object( + transports.ErrorGroupServiceRestInterceptor, "pre_get_group" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + post_with_metadata.assert_not_called() + pb_message = error_group_service.GetGroupRequest.pb( + error_group_service.GetGroupRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = mock.Mock() + req.return_value.status_code = 200 + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + return_value = common.ErrorGroup.to_json(common.ErrorGroup()) + req.return_value.content = return_value + + request = error_group_service.GetGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = common.ErrorGroup() + post_with_metadata.return_value = common.ErrorGroup(), metadata + + client.get_group( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + post_with_metadata.assert_called_once() + + +def test_update_group_rest_bad_request( + request_type=error_group_service.UpdateGroupRequest, +): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + # send a request that will satisfy transcoding + request_init = {"group": {"name": "projects/sample1/groups/sample2"}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = mock.Mock() + json_return_value = "" + response_value.json = mock.Mock(return_value={}) + response_value.status_code = 400 + response_value.request = mock.Mock() + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + client.update_group(request) + + +@pytest.mark.parametrize( + "request_type", + [ + error_group_service.UpdateGroupRequest, + dict, + ], +) +def test_update_group_rest_call_success(request_type): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + # send a request that will satisfy transcoding + request_init = {"group": {"name": "projects/sample1/groups/sample2"}} + request_init["group"] = { + "name": "projects/sample1/groups/sample2", + "group_id": "group_id_value", + "tracking_issues": [{"url": "url_value"}], + "resolution_status": 1, + } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = error_group_service.UpdateGroupRequest.meta.fields["group"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["group"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) - response = client.update_group(request) + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["group"][field])): + del request_init["group"][field][i][subfield] + else: + del request_init["group"][field][subfield] + request = request_type(**request_init) - expected_params = [("$alt", "json;enum-encoding=int")] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = common.ErrorGroup( + name="name_value", + group_id="group_id_value", + resolution_status=common.ResolutionStatus.OPEN, + ) + # Wrap the value into a proper Response obj + response_value = mock.Mock() + response_value.status_code = 200 -def test_update_group_rest_unset_required_fields(): - transport = transports.ErrorGroupServiceRestTransport( - credentials=ga_credentials.AnonymousCredentials - ) + # Convert return value to protobuf type + return_value = common.ErrorGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + response_value.content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + response = client.update_group(request) - unset_fields = transport.update_group._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("group",))) + # Establish that the response is the type that we expect. + assert isinstance(response, common.ErrorGroup) + assert response.name == "name_value" + assert response.group_id == "group_id_value" + assert response.resolution_status == common.ResolutionStatus.OPEN @pytest.mark.parametrize("null_interceptor", [True, False]) @@ -2443,6 +2659,7 @@ def test_update_group_rest_interceptors(null_interceptor): else transports.ErrorGroupServiceRestInterceptor(), ) client = ErrorGroupServiceClient(transport=transport) + with mock.patch.object( type(client.transport._session), "request" ) as req, mock.patch.object( @@ -2450,10 +2667,13 @@ def test_update_group_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ErrorGroupServiceRestInterceptor, "post_update_group" ) as post, mock.patch.object( + transports.ErrorGroupServiceRestInterceptor, "post_update_group_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ErrorGroupServiceRestInterceptor, "pre_update_group" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = error_group_service.UpdateGroupRequest.pb( error_group_service.UpdateGroupRequest() ) @@ -2464,10 +2684,11 @@ def test_update_group_rest_interceptors(null_interceptor): "query_params": pb_message, } - req.return_value = Response() + req.return_value = mock.Mock() req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = common.ErrorGroup.to_json(common.ErrorGroup()) + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + return_value = common.ErrorGroup.to_json(common.ErrorGroup()) + req.return_value.content = return_value request = error_group_service.UpdateGroupRequest() metadata = [ @@ -2476,6 +2697,7 @@ def test_update_group_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = common.ErrorGroup() + post_with_metadata.return_value = common.ErrorGroup(), metadata client.update_group( request, @@ -2487,198 +2709,54 @@ def test_update_group_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() -def test_update_group_rest_bad_request( - transport: str = "rest", request_type=error_group_service.UpdateGroupRequest -): +def test_initialize_client_w_rest(): client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - - # send a request that will satisfy transcoding - request_init = {"group": {"name": "projects/sample1/groups/sample2"}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_group(request) + assert client is not None -def test_update_group_rest_flattened(): +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_get_group_empty_call_rest(): client = ErrorGroupServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = common.ErrorGroup() - - # get arguments that satisfy an http rule for this method - sample_request = {"group": {"name": "projects/sample1/groups/sample2"}} - - # get truthy value for each flattened field - mock_args = dict( - group=common.ErrorGroup(name="name_value"), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - # Convert return value to protobuf type - return_value = common.ErrorGroup.pb(return_value) - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.update_group(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1beta1/{group.name=projects/*/groups/*}" % client.transport._host, - args[1], - ) - + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.get_group), "__call__") as call: + client.get_group(request=None) -def test_update_group_rest_flattened_error(transport: str = "rest"): - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_group_service.GetGroupRequest() - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_group( - error_group_service.UpdateGroupRequest(), - group=common.ErrorGroup(name="name_value"), - ) + assert args[0] == request_msg -def test_update_group_rest_error(): +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_update_group_empty_call_rest(): client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.ErrorGroupServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # It is an error to provide a credentials file and a transport instance. - transport = transports.ErrorGroupServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = ErrorGroupServiceClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, - ) - - # It is an error to provide an api_key and a transport instance. - transport = transports.ErrorGroupServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = ErrorGroupServiceClient( - 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 = ErrorGroupServiceClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) - - # It is an error to provide scopes and a transport instance. - transport = transports.ErrorGroupServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = ErrorGroupServiceClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) - - -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.ErrorGroupServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - client = ErrorGroupServiceClient(transport=transport) - assert client.transport is transport - - -def test_transport_get_channel(): - # A client may be instantiated with a custom transport instance. - transport = transports.ErrorGroupServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - - transport = transports.ErrorGroupServiceGrpcAsyncIOTransport( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - channel = transport.grpc_channel - assert channel - -@pytest.mark.parametrize( - "transport_class", - [ - transports.ErrorGroupServiceGrpcTransport, - transports.ErrorGroupServiceGrpcAsyncIOTransport, - transports.ErrorGroupServiceRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.update_group), "__call__") as call: + client.update_group(request=None) + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_group_service.UpdateGroupRequest() -@pytest.mark.parametrize( - "transport_name", - [ - "grpc", - "rest", - ], -) -def test_transport_kind(transport_name): - transport = ErrorGroupServiceClient.get_transport_class(transport_name)( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert transport.kind == transport_name + assert args[0] == request_msg def test_transport_grpc_default(): @@ -3259,36 +3337,41 @@ def test_client_with_default_client_info(): prep.assert_called_once_with(client_info) +def test_transport_close_grpc(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc" + ) + with mock.patch.object( + type(getattr(client.transport, "_grpc_channel")), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + @pytest.mark.asyncio -async def test_transport_close_async(): +async def test_transport_close_grpc_asyncio(): client = ErrorGroupServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", + credentials=async_anonymous_credentials(), transport="grpc_asyncio" ) with mock.patch.object( - type(getattr(client.transport, "grpc_channel")), "close" + type(getattr(client.transport, "_grpc_channel")), "close" ) as close: async with client: close.assert_not_called() close.assert_called_once() -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = ErrorGroupServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport - ) - with mock.patch.object( - type(getattr(client.transport, close_name)), "close" - ) as close: - with client: - close.assert_not_called() - close.assert_called_once() +def test_transport_close_rest(): + client = ErrorGroupServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + with mock.patch.object( + type(getattr(client.transport, "_session")), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() def test_client_ctx(): diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 9241fa39fca9..437f9b4a2921 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -24,7 +24,7 @@ import grpc from grpc.experimental import aio -from collections.abc import Iterable +from collections.abc import Iterable, AsyncIterable from google.protobuf import json_format import json import math @@ -37,6 +37,13 @@ from requests.sessions import Session from google.protobuf import json_format +try: + from google.auth.aio import credentials as ga_credentials_async + + HAS_GOOGLE_AUTH_AIO = True +except ImportError: # pragma: NO COVER + HAS_GOOGLE_AUTH_AIO = False + from google.api_core import client_options from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -62,10 +69,32 @@ import google.auth +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + + +async def mock_async_gen(data, chunk_size=1): + for i in range(0, len(data)): # pragma: NO COVER + chunk = data[i : i + chunk_size] + yield chunk.encode("utf-8") + + def client_cert_source_callback(): return b"cert bytes", b"key bytes" +# TODO: use async auth anon credentials by default once the minimum version of google-auth is upgraded. +# See related issue: https://github.com/googleapis/gapic-generator-python/issues/2107. +def async_anonymous_credentials(): + if HAS_GOOGLE_AUTH_AIO: + return ga_credentials_async.AnonymousCredentials() + return ga_credentials.AnonymousCredentials() + + # 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. @@ -315,83 +344,46 @@ def test__get_universe_domain(): @pytest.mark.parametrize( - "client_class,transport_class,transport_name", + "error_code,cred_info_json,show_cred_info", [ - (ErrorStatsServiceClient, transports.ErrorStatsServiceGrpcTransport, "grpc"), - (ErrorStatsServiceClient, transports.ErrorStatsServiceRestTransport, "rest"), + (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__validate_universe_domain(client_class, transport_class, transport_name): - client = client_class( - transport=transport_class(credentials=ga_credentials.AnonymousCredentials()) - ) - assert client._validate_universe_domain() == True - - # Test the case when universe is already validated. - assert client._validate_universe_domain() == True - - if transport_name == "grpc": - # Test the case where credentials are provided by the - # `local_channel_credentials`. The default universes in both match. - channel = grpc.secure_channel( - "http://localhost/", grpc.local_channel_credentials() - ) - client = client_class(transport=transport_class(channel=channel)) - assert client._validate_universe_domain() == True +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 = ErrorStatsServiceClient(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"] - # Test the case where credentials do not exist: e.g. a transport is provided - # with no credentials. Validation should still succeed because there is no - # mismatch with non-existent credentials. - channel = grpc.secure_channel( - "http://localhost/", grpc.local_channel_credentials() - ) - transport = transport_class(channel=channel) - transport._credentials = None - client = client_class(transport=transport) - assert client._validate_universe_domain() == True - # TODO: This is needed to cater for older versions of google-auth - # Make this test unconditional once the minimum supported version of - # google-auth becomes 2.23.0 or higher. - google_auth_major, google_auth_minor = [ - int(part) for part in google.auth.__version__.split(".")[0:2] - ] - if google_auth_major > 2 or (google_auth_major == 2 and google_auth_minor >= 23): - credentials = ga_credentials.AnonymousCredentials() - credentials._universe_domain = "foo.com" - # Test the case when there is a universe mismatch from the credentials. - client = client_class(transport=transport_class(credentials=credentials)) - with pytest.raises(ValueError) as excinfo: - client._validate_universe_domain() - assert ( - str(excinfo.value) - == "The configured universe domain (googleapis.com) does not match the universe domain found in the credentials (foo.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." - ) +@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 = ErrorStatsServiceClient(credentials=cred) + client._transport._credentials = cred - # Test the case when there is a universe mismatch from the client. - # - # TODO: Make this test unconditional once the minimum supported version of - # google-api-core becomes 2.15.0 or higher. - api_core_major, api_core_minor = [ - int(part) for part in api_core_version.__version__.split(".")[0:2] - ] - if api_core_major > 2 or (api_core_major == 2 and api_core_minor >= 15): - client = client_class( - client_options={"universe_domain": "bar.com"}, - transport=transport_class( - credentials=ga_credentials.AnonymousCredentials(), - ), - ) - with pytest.raises(ValueError) as excinfo: - client._validate_universe_domain() - assert ( - str(excinfo.value) - == "The configured universe domain (bar.com) does not match the universe domain found in the credentials (googleapis.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." - ) + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code - # Test that ValueError is raised if universe_domain is provided via client options and credentials is None - with pytest.raises(ValueError): - client._compare_universes("foo.bar", None) + client._add_cred_info_for_auth_errors(error) + assert error.details == [] @pytest.mark.parametrize( @@ -1201,25 +1193,6 @@ def test_list_group_stats(request_type, transport: str = "grpc"): assert response.next_page_token == "next_page_token_value" -def test_list_group_stats_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: - call.return_value.name = ( - "foo" # operation_request.operation in compute client(s) expect a string. - ) - client.list_group_stats() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListGroupStatsRequest() - - def test_list_group_stats_non_empty_request_with_auto_populated_field(): # This test is a coverage failsafe to make sure that UUID4 fields are # automatically populated, according to AIP-4235, with non-empty requests. @@ -1287,29 +1260,6 @@ def test_list_group_stats_use_cached_wrapped_rpc(): assert mock_rpc.call_count == 2 -@pytest.mark.asyncio -async def test_list_group_stats_empty_call_async(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - error_stats_service.ListGroupStatsResponse( - next_page_token="next_page_token_value", - ) - ) - response = await client.list_group_stats() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListGroupStatsRequest() - - @pytest.mark.asyncio async def test_list_group_stats_async_use_cached_wrapped_rpc( transport: str = "grpc_asyncio", @@ -1318,7 +1268,7 @@ async def test_list_group_stats_async_use_cached_wrapped_rpc( # instead of constructing them on each call with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1358,7 +1308,7 @@ async def test_list_group_stats_async( request_type=error_stats_service.ListGroupStatsRequest, ): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1424,7 +1374,7 @@ def test_list_group_stats_field_headers(): @pytest.mark.asyncio async def test_list_group_stats_field_headers_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as @@ -1505,7 +1455,7 @@ def test_list_group_stats_flattened_error(): @pytest.mark.asyncio async def test_list_group_stats_flattened_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1542,7 +1492,7 @@ async def test_list_group_stats_flattened_async(): @pytest.mark.asyncio async def test_list_group_stats_flattened_error_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Attempting to call a method with both a request object and flattened @@ -1655,7 +1605,7 @@ def test_list_group_stats_pages(transport_name: str = "grpc"): @pytest.mark.asyncio async def test_list_group_stats_async_pager(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1707,7 +1657,7 @@ async def test_list_group_stats_async_pager(): @pytest.mark.asyncio async def test_list_group_stats_async_pages(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1789,25 +1739,6 @@ def test_list_events(request_type, transport: str = "grpc"): assert response.next_page_token == "next_page_token_value" -def test_list_events_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_events), "__call__") as call: - call.return_value.name = ( - "foo" # operation_request.operation in compute client(s) expect a string. - ) - client.list_events() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListEventsRequest() - - def test_list_events_non_empty_request_with_auto_populated_field(): # This test is a coverage failsafe to make sure that UUID4 fields are # automatically populated, according to AIP-4235, with non-empty requests. @@ -1875,29 +1806,6 @@ def test_list_events_use_cached_wrapped_rpc(): assert mock_rpc.call_count == 2 -@pytest.mark.asyncio -async def test_list_events_empty_call_async(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_events), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - error_stats_service.ListEventsResponse( - next_page_token="next_page_token_value", - ) - ) - response = await client.list_events() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.ListEventsRequest() - - @pytest.mark.asyncio async def test_list_events_async_use_cached_wrapped_rpc( transport: str = "grpc_asyncio", @@ -1906,7 +1814,7 @@ async def test_list_events_async_use_cached_wrapped_rpc( # instead of constructing them on each call with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1945,7 +1853,7 @@ async def test_list_events_async( transport: str = "grpc_asyncio", request_type=error_stats_service.ListEventsRequest ): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -2011,7 +1919,7 @@ def test_list_events_field_headers(): @pytest.mark.asyncio async def test_list_events_field_headers_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as @@ -2086,7 +1994,7 @@ def test_list_events_flattened_error(): @pytest.mark.asyncio async def test_list_events_flattened_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -2119,7 +2027,7 @@ async def test_list_events_flattened_async(): @pytest.mark.asyncio async def test_list_events_flattened_error_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Attempting to call a method with both a request object and flattened @@ -2230,7 +2138,7 @@ def test_list_events_pages(transport_name: str = "grpc"): @pytest.mark.asyncio async def test_list_events_async_pager(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -2280,7 +2188,7 @@ async def test_list_events_async_pager(): @pytest.mark.asyncio async def test_list_events_async_pages(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -2359,25 +2267,6 @@ def test_delete_events(request_type, transport: str = "grpc"): assert isinstance(response, error_stats_service.DeleteEventsResponse) -def test_delete_events_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_events), "__call__") as call: - call.return_value.name = ( - "foo" # operation_request.operation in compute client(s) expect a string. - ) - client.delete_events() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.DeleteEventsRequest() - - def test_delete_events_non_empty_request_with_auto_populated_field(): # This test is a coverage failsafe to make sure that UUID4 fields are # automatically populated, according to AIP-4235, with non-empty requests. @@ -2441,27 +2330,6 @@ def test_delete_events_use_cached_wrapped_rpc(): assert mock_rpc.call_count == 2 -@pytest.mark.asyncio -async def test_delete_events_empty_call_async(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_events), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - error_stats_service.DeleteEventsResponse() - ) - response = await client.delete_events() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == error_stats_service.DeleteEventsRequest() - - @pytest.mark.asyncio async def test_delete_events_async_use_cached_wrapped_rpc( transport: str = "grpc_asyncio", @@ -2470,7 +2338,7 @@ async def test_delete_events_async_use_cached_wrapped_rpc( # instead of constructing them on each call with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -2510,7 +2378,7 @@ async def test_delete_events_async( request_type=error_stats_service.DeleteEventsRequest, ): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -2573,7 +2441,7 @@ def test_delete_events_field_headers(): @pytest.mark.asyncio async def test_delete_events_field_headers_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as @@ -2643,7 +2511,7 @@ def test_delete_events_flattened_error(): @pytest.mark.asyncio async def test_delete_events_flattened_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -2672,7 +2540,7 @@ async def test_delete_events_flattened_async(): @pytest.mark.asyncio async def test_delete_events_flattened_error_async(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Attempting to call a method with both a request object and flattened @@ -2684,46 +2552,6 @@ async def test_delete_events_flattened_error_async(): ) -@pytest.mark.parametrize( - "request_type", - [ - error_stats_service.ListGroupStatsRequest, - dict, - ], -) -def test_list_group_stats_rest(request_type): - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {"project_name": "projects/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = error_stats_service.ListGroupStatsResponse( - next_page_token="next_page_token_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - # Convert return value to protobuf type - return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.list_group_stats(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListGroupStatsPager) - assert response.next_page_token == "next_page_token_value" - - def test_list_group_stats_rest_use_cached_wrapped_rpc(): # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, # instead of constructing them on each call @@ -2842,6 +2670,7 @@ def test_list_group_stats_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} response = client.list_group_stats(request) @@ -2874,120 +2703,40 @@ def test_list_group_stats_rest_unset_required_fields(): ) -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_group_stats_rest_interceptors(null_interceptor): - transport = transports.ErrorStatsServiceRestTransport( +def test_list_group_stats_rest_flattened(): + client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.ErrorStatsServiceRestInterceptor(), + transport="rest", ) - client = ErrorStatsServiceClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.ErrorStatsServiceRestInterceptor, "post_list_group_stats" - ) as post, mock.patch.object( - transports.ErrorStatsServiceRestInterceptor, "pre_list_group_stats" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = error_stats_service.ListGroupStatsRequest.pb( - error_stats_service.ListGroupStatsRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = error_stats_service.ListGroupStatsResponse.to_json( - error_stats_service.ListGroupStatsResponse() - ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListGroupStatsResponse() - request = error_stats_service.ListGroupStatsRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = error_stats_service.ListGroupStatsResponse() + # get arguments that satisfy an http rule for this method + sample_request = {"project_name": "projects/sample1"} - client.list_group_stats( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], + # get truthy value for each flattened field + mock_args = dict( + project_name="project_name_value", + time_range=error_stats_service.QueryTimeRange( + period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR + ), ) + mock_args.update(sample_request) - pre.assert_called_once() - post.assert_called_once() + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + # Convert return value to protobuf type + return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} - -def test_list_group_stats_rest_bad_request( - transport: str = "rest", request_type=error_stats_service.ListGroupStatsRequest -): - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"project_name": "projects/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_group_stats(request) - - -def test_list_group_stats_rest_flattened(): - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = error_stats_service.ListGroupStatsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {"project_name": "projects/sample1"} - - # get truthy value for each flattened field - mock_args = dict( - project_name="project_name_value", - time_range=error_stats_service.QueryTimeRange( - period=error_stats_service.QueryTimeRange.Period.PERIOD_1_HOUR - ), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - # Convert return value to protobuf type - return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.list_group_stats(**mock_args) + client.list_group_stats(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -3080,46 +2829,6 @@ def test_list_group_stats_rest_pager(transport: str = "rest"): assert page_.raw_page.next_page_token == token -@pytest.mark.parametrize( - "request_type", - [ - error_stats_service.ListEventsRequest, - dict, - ], -) -def test_list_events_rest(request_type): - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {"project_name": "projects/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = error_stats_service.ListEventsResponse( - next_page_token="next_page_token_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - # Convert return value to protobuf type - return_value = error_stats_service.ListEventsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.list_events(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListEventsPager) - assert response.next_page_token == "next_page_token_value" - - def test_list_events_rest_use_cached_wrapped_rpc(): # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, # instead of constructing them on each call @@ -3239,6 +2948,7 @@ def test_list_events_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} response = client.list_events(request) @@ -3278,87 +2988,6 @@ def test_list_events_rest_unset_required_fields(): ) -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_events_rest_interceptors(null_interceptor): - transport = transports.ErrorStatsServiceRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.ErrorStatsServiceRestInterceptor(), - ) - client = ErrorStatsServiceClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.ErrorStatsServiceRestInterceptor, "post_list_events" - ) as post, mock.patch.object( - transports.ErrorStatsServiceRestInterceptor, "pre_list_events" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = error_stats_service.ListEventsRequest.pb( - error_stats_service.ListEventsRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = error_stats_service.ListEventsResponse.to_json( - error_stats_service.ListEventsResponse() - ) - - request = error_stats_service.ListEventsRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = error_stats_service.ListEventsResponse() - - client.list_events( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_events_rest_bad_request( - transport: str = "rest", request_type=error_stats_service.ListEventsRequest -): - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"project_name": "projects/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_events(request) - - def test_list_events_rest_flattened(): client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3388,6 +3017,7 @@ def test_list_events_rest_flattened(): json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} client.list_events(**mock_args) @@ -3480,43 +3110,6 @@ def test_list_events_rest_pager(transport: str = "rest"): assert page_.raw_page.next_page_token == token -@pytest.mark.parametrize( - "request_type", - [ - error_stats_service.DeleteEventsRequest, - dict, - ], -) -def test_delete_events_rest(request_type): - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {"project_name": "projects/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = error_stats_service.DeleteEventsResponse() - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - # Convert return value to protobuf type - return_value = error_stats_service.DeleteEventsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.delete_events(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, error_stats_service.DeleteEventsResponse) - - def test_delete_events_rest_use_cached_wrapped_rpc(): # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, # instead of constructing them on each call @@ -3619,6 +3212,7 @@ def test_delete_events_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} response = client.delete_events(request) @@ -3632,12 +3226,536 @@ def test_delete_events_rest_unset_required_fields(): credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_events._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("projectName",))) + unset_fields = transport.delete_events._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("projectName",))) + + +def test_delete_events_rest_flattened(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.DeleteEventsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"project_name": "projects/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project_name="project_name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + # Convert return value to protobuf type + return_value = error_stats_service.DeleteEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + + client.delete_events(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1beta1/{project_name=projects/*}/events" % client.transport._host, + args[1], + ) + + +def test_delete_events_rest_flattened_error(transport: str = "rest"): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_events( + error_stats_service.DeleteEventsRequest(), + project_name="project_name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorStatsServiceClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = ErrorStatsServiceClient( + 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 = ErrorStatsServiceClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = ErrorStatsServiceClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = ErrorStatsServiceClient(transport=transport) + assert client.transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.ErrorStatsServiceGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.ErrorStatsServiceGrpcTransport, + transports.ErrorStatsServiceGrpcAsyncIOTransport, + transports.ErrorStatsServiceRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +def test_transport_kind_grpc(): + transport = ErrorStatsServiceClient.get_transport_class("grpc")( + credentials=ga_credentials.AnonymousCredentials() + ) + assert transport.kind == "grpc" + + +def test_initialize_client_w_grpc(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc" + ) + assert client is not None + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_list_group_stats_empty_call_grpc(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: + call.return_value = error_stats_service.ListGroupStatsResponse() + client.list_group_stats(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.ListGroupStatsRequest() + + assert args[0] == request_msg + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_list_events_empty_call_grpc(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.list_events), "__call__") as call: + call.return_value = error_stats_service.ListEventsResponse() + client.list_events(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.ListEventsRequest() + + assert args[0] == request_msg + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_delete_events_empty_call_grpc(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: + call.return_value = error_stats_service.DeleteEventsResponse() + client.delete_events(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.DeleteEventsRequest() + + assert args[0] == request_msg + + +def test_transport_kind_grpc_asyncio(): + transport = ErrorStatsServiceAsyncClient.get_transport_class("grpc_asyncio")( + credentials=async_anonymous_credentials() + ) + assert transport.kind == "grpc_asyncio" + + +def test_initialize_client_w_grpc_asyncio(): + client = ErrorStatsServiceAsyncClient( + credentials=async_anonymous_credentials(), transport="grpc_asyncio" + ) + assert client is not None + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +@pytest.mark.asyncio +async def test_list_group_stats_empty_call_grpc_asyncio(): + client = ErrorStatsServiceAsyncClient( + credentials=async_anonymous_credentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListGroupStatsResponse( + next_page_token="next_page_token_value", + ) + ) + await client.list_group_stats(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.ListGroupStatsRequest() + + assert args[0] == request_msg + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +@pytest.mark.asyncio +async def test_list_events_empty_call_grpc_asyncio(): + client = ErrorStatsServiceAsyncClient( + credentials=async_anonymous_credentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.list_events), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.ListEventsResponse( + next_page_token="next_page_token_value", + ) + ) + await client.list_events(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.ListEventsRequest() + + assert args[0] == request_msg + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +@pytest.mark.asyncio +async def test_delete_events_empty_call_grpc_asyncio(): + client = ErrorStatsServiceAsyncClient( + credentials=async_anonymous_credentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + error_stats_service.DeleteEventsResponse() + ) + await client.delete_events(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.DeleteEventsRequest() + + assert args[0] == request_msg + + +def test_transport_kind_rest(): + transport = ErrorStatsServiceClient.get_transport_class("rest")( + credentials=ga_credentials.AnonymousCredentials() + ) + assert transport.kind == "rest" + + +def test_list_group_stats_rest_bad_request( + request_type=error_stats_service.ListGroupStatsRequest, +): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = mock.Mock() + json_return_value = "" + response_value.json = mock.Mock(return_value={}) + response_value.status_code = 400 + response_value.request = mock.Mock() + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + client.list_group_stats(request) + + +@pytest.mark.parametrize( + "request_type", + [ + error_stats_service.ListGroupStatsRequest, + dict, + ], +) +def test_list_group_stats_rest_call_success(request_type): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListGroupStatsResponse( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = mock.Mock() + response_value.status_code = 200 + + # Convert return value to protobuf type + return_value = error_stats_service.ListGroupStatsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + response_value.content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + response = client.list_group_stats(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListGroupStatsPager) + assert response.next_page_token == "next_page_token_value" + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_group_stats_rest_interceptors(null_interceptor): + transport = transports.ErrorStatsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ErrorStatsServiceRestInterceptor(), + ) + client = ErrorStatsServiceClient(transport=transport) + + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "post_list_group_stats" + ) as post, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, + "post_list_group_stats_with_metadata", + ) as post_with_metadata, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "pre_list_group_stats" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + post_with_metadata.assert_not_called() + pb_message = error_stats_service.ListGroupStatsRequest.pb( + error_stats_service.ListGroupStatsRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = mock.Mock() + req.return_value.status_code = 200 + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + return_value = error_stats_service.ListGroupStatsResponse.to_json( + error_stats_service.ListGroupStatsResponse() + ) + req.return_value.content = return_value + + request = error_stats_service.ListGroupStatsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = error_stats_service.ListGroupStatsResponse() + post_with_metadata.return_value = ( + error_stats_service.ListGroupStatsResponse(), + metadata, + ) + + client.list_group_stats( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + post_with_metadata.assert_called_once() + + +def test_list_events_rest_bad_request( + request_type=error_stats_service.ListEventsRequest, +): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = mock.Mock() + json_return_value = "" + response_value.json = mock.Mock(return_value={}) + response_value.status_code = 400 + response_value.request = mock.Mock() + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + client.list_events(request) + + +@pytest.mark.parametrize( + "request_type", + [ + error_stats_service.ListEventsRequest, + dict, + ], +) +def test_list_events_rest_call_success(request_type): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = error_stats_service.ListEventsResponse( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = mock.Mock() + response_value.status_code = 200 + + # Convert return value to protobuf type + return_value = error_stats_service.ListEventsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + response_value.content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + response = client.list_events(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListEventsPager) + assert response.next_page_token == "next_page_token_value" @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_events_rest_interceptors(null_interceptor): +def test_list_events_rest_interceptors(null_interceptor): transport = transports.ErrorStatsServiceRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3645,19 +3763,23 @@ def test_delete_events_rest_interceptors(null_interceptor): else transports.ErrorStatsServiceRestInterceptor(), ) client = ErrorStatsServiceClient(transport=transport) + with mock.patch.object( type(client.transport._session), "request" ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ErrorStatsServiceRestInterceptor, "post_delete_events" + transports.ErrorStatsServiceRestInterceptor, "post_list_events" ) as post, mock.patch.object( - transports.ErrorStatsServiceRestInterceptor, "pre_delete_events" + transports.ErrorStatsServiceRestInterceptor, "post_list_events_with_metadata" + ) as post_with_metadata, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "pre_list_events" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = error_stats_service.DeleteEventsRequest.pb( - error_stats_service.DeleteEventsRequest() + post_with_metadata.assert_not_called() + pb_message = error_stats_service.ListEventsRequest.pb( + error_stats_service.ListEventsRequest() ) transcode.return_value = { "method": "post", @@ -3666,22 +3788,27 @@ def test_delete_events_rest_interceptors(null_interceptor): "query_params": pb_message, } - req.return_value = Response() + req.return_value = mock.Mock() req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = error_stats_service.DeleteEventsResponse.to_json( - error_stats_service.DeleteEventsResponse() + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + return_value = error_stats_service.ListEventsResponse.to_json( + error_stats_service.ListEventsResponse() ) + req.return_value.content = return_value - request = error_stats_service.DeleteEventsRequest() + request = error_stats_service.ListEventsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = error_stats_service.DeleteEventsResponse() + post.return_value = error_stats_service.ListEventsResponse() + post_with_metadata.return_value = ( + error_stats_service.ListEventsResponse(), + metadata, + ) - client.delete_events( + client.list_events( request, metadata=[ ("key", "val"), @@ -3691,16 +3818,15 @@ def test_delete_events_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_events_rest_bad_request( - transport: str = "rest", request_type=error_stats_service.DeleteEventsRequest + request_type=error_stats_service.DeleteEventsRequest, ): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # send a request that will satisfy transcoding request_init = {"project_name": "projects/sample1"} request = request_type(**request_init) @@ -3710,179 +3836,185 @@ def test_delete_events_rest_bad_request( core_exceptions.BadRequest ): # Wrap the value into a proper Response obj - response_value = Response() + response_value = mock.Mock() + json_return_value = "" + response_value.json = mock.Mock(return_value={}) response_value.status_code = 400 - response_value.request = Request() + response_value.request = mock.Mock() req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} client.delete_events(request) -def test_delete_events_rest_flattened(): +@pytest.mark.parametrize( + "request_type", + [ + error_stats_service.DeleteEventsRequest, + dict, + ], +) +def test_delete_events_rest_call_success(request_type): client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. return_value = error_stats_service.DeleteEventsResponse() - # get arguments that satisfy an http rule for this method - sample_request = {"project_name": "projects/sample1"} - - # get truthy value for each flattened field - mock_args = dict( - project_name="project_name_value", - ) - mock_args.update(sample_request) - # Wrap the value into a proper Response obj - response_value = Response() + response_value = mock.Mock() response_value.status_code = 200 + # Convert return value to protobuf type return_value = error_stats_service.DeleteEventsResponse.pb(return_value) json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode("UTF-8") + response_value.content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + response = client.delete_events(request) - client.delete_events(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1beta1/{project_name=projects/*}/events" % client.transport._host, - args[1], - ) + # Establish that the response is the type that we expect. + assert isinstance(response, error_stats_service.DeleteEventsResponse) -def test_delete_events_rest_flattened_error(transport: str = "rest"): - client = ErrorStatsServiceClient( +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_events_rest_interceptors(null_interceptor): + transport = transports.ErrorStatsServiceRestTransport( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + interceptor=None + if null_interceptor + else transports.ErrorStatsServiceRestInterceptor(), ) + client = ErrorStatsServiceClient(transport=transport) + + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "post_delete_events" + ) as post, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "post_delete_events_with_metadata" + ) as post_with_metadata, mock.patch.object( + transports.ErrorStatsServiceRestInterceptor, "pre_delete_events" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + post_with_metadata.assert_not_called() + pb_message = error_stats_service.DeleteEventsRequest.pb( + error_stats_service.DeleteEventsRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = mock.Mock() + req.return_value.status_code = 200 + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + return_value = error_stats_service.DeleteEventsResponse.to_json( + error_stats_service.DeleteEventsResponse() + ) + req.return_value.content = return_value + + request = error_stats_service.DeleteEventsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = error_stats_service.DeleteEventsResponse() + post_with_metadata.return_value = ( + error_stats_service.DeleteEventsResponse(), + metadata, + ) - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): client.delete_events( - error_stats_service.DeleteEventsRequest(), - project_name="project_name_value", + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], ) + pre.assert_called_once() + post.assert_called_once() + post_with_metadata.assert_called_once() + -def test_delete_events_rest_error(): +def test_initialize_client_w_rest(): client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) + assert client is not None -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.ErrorStatsServiceGrpcTransport( +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_list_group_stats_empty_call_rest(): + client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - # It is an error to provide a credentials file and a transport instance. - transport = transports.ErrorStatsServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = ErrorStatsServiceClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, - ) + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.list_group_stats), "__call__") as call: + client.list_group_stats(request=None) - # It is an error to provide an api_key and a transport instance. - transport = transports.ErrorStatsServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = ErrorStatsServiceClient( - client_options=options, - transport=transport, - ) + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.ListGroupStatsRequest() - # 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 = ErrorStatsServiceClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) + assert args[0] == request_msg - # It is an error to provide scopes and a transport instance. - transport = transports.ErrorStatsServiceGrpcTransport( + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_list_events_empty_call_rest(): + client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = ErrorStatsServiceClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.list_events), "__call__") as call: + client.list_events(request=None) -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.ErrorStatsServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - client = ErrorStatsServiceClient(transport=transport) - assert client.transport is transport + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.ListEventsRequest() + assert args[0] == request_msg -def test_transport_get_channel(): - # A client may be instantiated with a custom transport instance. - transport = transports.ErrorStatsServiceGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - transport = transports.ErrorStatsServiceGrpcAsyncIOTransport( +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_delete_events_empty_call_rest(): + client = ErrorStatsServiceClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - channel = transport.grpc_channel - assert channel - -@pytest.mark.parametrize( - "transport_class", - [ - transports.ErrorStatsServiceGrpcTransport, - transports.ErrorStatsServiceGrpcAsyncIOTransport, - transports.ErrorStatsServiceRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + # Mock the actual call, and fake the request. + with mock.patch.object(type(client.transport.delete_events), "__call__") as call: + client.delete_events(request=None) + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = error_stats_service.DeleteEventsRequest() -@pytest.mark.parametrize( - "transport_name", - [ - "grpc", - "rest", - ], -) -def test_transport_kind(transport_name): - transport = ErrorStatsServiceClient.get_transport_class(transport_name)( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert transport.kind == transport_name + assert args[0] == request_msg def test_transport_grpc_default(): @@ -4467,36 +4599,41 @@ def test_client_with_default_client_info(): prep.assert_called_once_with(client_info) +def test_transport_close_grpc(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc" + ) + with mock.patch.object( + type(getattr(client.transport, "_grpc_channel")), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + @pytest.mark.asyncio -async def test_transport_close_async(): +async def test_transport_close_grpc_asyncio(): client = ErrorStatsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", + credentials=async_anonymous_credentials(), transport="grpc_asyncio" ) with mock.patch.object( - type(getattr(client.transport, "grpc_channel")), "close" + type(getattr(client.transport, "_grpc_channel")), "close" ) as close: async with client: close.assert_not_called() close.assert_called_once() -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = ErrorStatsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport - ) - with mock.patch.object( - type(getattr(client.transport, close_name)), "close" - ) as close: - with client: - close.assert_not_called() - close.assert_called_once() +def test_transport_close_rest(): + client = ErrorStatsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + with mock.patch.object( + type(getattr(client.transport, "_session")), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() def test_client_ctx(): diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index ca1f397fd44e..b8ad46b1f24b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -24,7 +24,7 @@ import grpc from grpc.experimental import aio -from collections.abc import Iterable +from collections.abc import Iterable, AsyncIterable from google.protobuf import json_format import json import math @@ -37,6 +37,13 @@ from requests.sessions import Session from google.protobuf import json_format +try: + from google.auth.aio import credentials as ga_credentials_async + + HAS_GOOGLE_AUTH_AIO = True +except ImportError: # pragma: NO COVER + HAS_GOOGLE_AUTH_AIO = False + from google.api_core import client_options from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -62,10 +69,32 @@ import google.auth +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + + +async def mock_async_gen(data, chunk_size=1): + for i in range(0, len(data)): # pragma: NO COVER + chunk = data[i : i + chunk_size] + yield chunk.encode("utf-8") + + def client_cert_source_callback(): return b"cert bytes", b"key bytes" +# TODO: use async auth anon credentials by default once the minimum version of google-auth is upgraded. +# See related issue: https://github.com/googleapis/gapic-generator-python/issues/2107. +def async_anonymous_credentials(): + if HAS_GOOGLE_AUTH_AIO: + return ga_credentials_async.AnonymousCredentials() + return ga_credentials.AnonymousCredentials() + + # 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. @@ -321,91 +350,46 @@ def test__get_universe_domain(): @pytest.mark.parametrize( - "client_class,transport_class,transport_name", + "error_code,cred_info_json,show_cred_info", [ - ( - ReportErrorsServiceClient, - transports.ReportErrorsServiceGrpcTransport, - "grpc", - ), - ( - ReportErrorsServiceClient, - transports.ReportErrorsServiceRestTransport, - "rest", - ), + (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__validate_universe_domain(client_class, transport_class, transport_name): - client = client_class( - transport=transport_class(credentials=ga_credentials.AnonymousCredentials()) - ) - assert client._validate_universe_domain() == True - - # Test the case when universe is already validated. - assert client._validate_universe_domain() == True - - if transport_name == "grpc": - # Test the case where credentials are provided by the - # `local_channel_credentials`. The default universes in both match. - channel = grpc.secure_channel( - "http://localhost/", grpc.local_channel_credentials() - ) - client = client_class(transport=transport_class(channel=channel)) - assert client._validate_universe_domain() == True +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 = ReportErrorsServiceClient(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"] - # Test the case where credentials do not exist: e.g. a transport is provided - # with no credentials. Validation should still succeed because there is no - # mismatch with non-existent credentials. - channel = grpc.secure_channel( - "http://localhost/", grpc.local_channel_credentials() - ) - transport = transport_class(channel=channel) - transport._credentials = None - client = client_class(transport=transport) - assert client._validate_universe_domain() == True - # TODO: This is needed to cater for older versions of google-auth - # Make this test unconditional once the minimum supported version of - # google-auth becomes 2.23.0 or higher. - google_auth_major, google_auth_minor = [ - int(part) for part in google.auth.__version__.split(".")[0:2] - ] - if google_auth_major > 2 or (google_auth_major == 2 and google_auth_minor >= 23): - credentials = ga_credentials.AnonymousCredentials() - credentials._universe_domain = "foo.com" - # Test the case when there is a universe mismatch from the credentials. - client = client_class(transport=transport_class(credentials=credentials)) - with pytest.raises(ValueError) as excinfo: - client._validate_universe_domain() - assert ( - str(excinfo.value) - == "The configured universe domain (googleapis.com) does not match the universe domain found in the credentials (foo.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." - ) +@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 = ReportErrorsServiceClient(credentials=cred) + client._transport._credentials = cred - # Test the case when there is a universe mismatch from the client. - # - # TODO: Make this test unconditional once the minimum supported version of - # google-api-core becomes 2.15.0 or higher. - api_core_major, api_core_minor = [ - int(part) for part in api_core_version.__version__.split(".")[0:2] - ] - if api_core_major > 2 or (api_core_major == 2 and api_core_minor >= 15): - client = client_class( - client_options={"universe_domain": "bar.com"}, - transport=transport_class( - credentials=ga_credentials.AnonymousCredentials(), - ), - ) - with pytest.raises(ValueError) as excinfo: - client._validate_universe_domain() - assert ( - str(excinfo.value) - == "The configured universe domain (bar.com) does not match the universe domain found in the credentials (googleapis.com). If you haven't configured the universe domain explicitly, `googleapis.com` is the default." - ) + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code - # Test that ValueError is raised if universe_domain is provided via client options and credentials is None - with pytest.raises(ValueError): - client._compare_universes("foo.bar", None) + client._add_cred_info_for_auth_errors(error) + assert error.details == [] @pytest.mark.parametrize( @@ -1230,27 +1214,6 @@ def test_report_error_event(request_type, transport: str = "grpc"): assert isinstance(response, report_errors_service.ReportErrorEventResponse) -def test_report_error_event_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.report_error_event), "__call__" - ) as call: - call.return_value.name = ( - "foo" # operation_request.operation in compute client(s) expect a string. - ) - client.report_error_event() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == report_errors_service.ReportErrorEventRequest() - - def test_report_error_event_non_empty_request_with_auto_populated_field(): # This test is a coverage failsafe to make sure that UUID4 fields are # automatically populated, according to AIP-4235, with non-empty requests. @@ -1320,29 +1283,6 @@ def test_report_error_event_use_cached_wrapped_rpc(): assert mock_rpc.call_count == 2 -@pytest.mark.asyncio -async def test_report_error_event_empty_call_async(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.report_error_event), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - report_errors_service.ReportErrorEventResponse() - ) - response = await client.report_error_event() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == report_errors_service.ReportErrorEventRequest() - - @pytest.mark.asyncio async def test_report_error_event_async_use_cached_wrapped_rpc( transport: str = "grpc_asyncio", @@ -1351,7 +1291,7 @@ async def test_report_error_event_async_use_cached_wrapped_rpc( # instead of constructing them on each call with mock.patch("google.api_core.gapic_v1.method_async.wrap_method") as wrapper_fn: client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1391,7 +1331,7 @@ async def test_report_error_event_async( request_type=report_errors_service.ReportErrorEventRequest, ): client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), transport=transport, ) @@ -1458,7 +1398,7 @@ def test_report_error_event_field_headers(): @pytest.mark.asyncio async def test_report_error_event_field_headers_async(): client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as @@ -1543,7 +1483,7 @@ def test_report_error_event_flattened_error(): @pytest.mark.asyncio async def test_report_error_event_flattened_async(): client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Mock the actual call within the gRPC stub, and fake the request. @@ -1582,7 +1522,7 @@ async def test_report_error_event_flattened_async(): @pytest.mark.asyncio async def test_report_error_event_flattened_error_async(): client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=async_anonymous_credentials(), ) # Attempting to call a method with both a request object and flattened @@ -1597,135 +1537,6 @@ async def test_report_error_event_flattened_error_async(): ) -@pytest.mark.parametrize( - "request_type", - [ - report_errors_service.ReportErrorEventRequest, - dict, - ], -) -def test_report_error_event_rest(request_type): - client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {"project_name": "projects/sample1"} - request_init["event"] = { - "event_time": {"seconds": 751, "nanos": 543}, - "service_context": { - "service": "service_value", - "version": "version_value", - "resource_type": "resource_type_value", - }, - "message": "message_value", - "context": { - "http_request": { - "method": "method_value", - "url": "url_value", - "user_agent": "user_agent_value", - "referrer": "referrer_value", - "response_status_code": 2156, - "remote_ip": "remote_ip_value", - }, - "user": "user_value", - "report_location": { - "file_path": "file_path_value", - "line_number": 1168, - "function_name": "function_name_value", - }, - }, - } - # The version of a generated dependency at test runtime may differ from the version used during generation. - # Delete any fields which are not present in the current runtime dependency - # See https://github.com/googleapis/gapic-generator-python/issues/1748 - - # Determine if the message type is proto-plus or protobuf - test_field = report_errors_service.ReportErrorEventRequest.meta.fields["event"] - - def get_message_fields(field): - # Given a field which is a message (composite type), return a list with - # all the fields of the message. - # If the field is not a composite type, return an empty list. - message_fields = [] - - if hasattr(field, "message") and field.message: - is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") - - if is_field_type_proto_plus_type: - message_fields = field.message.meta.fields.values() - # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types - else: # pragma: NO COVER - message_fields = field.message.DESCRIPTOR.fields - return message_fields - - runtime_nested_fields = [ - (field.name, nested_field.name) - for field in get_message_fields(test_field) - for nested_field in get_message_fields(field) - ] - - subfields_not_in_runtime = [] - - # For each item in the sample request, create a list of sub fields which are not present at runtime - # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime - for field, value in request_init["event"].items(): # pragma: NO COVER - result = None - is_repeated = False - # For repeated fields - if isinstance(value, list) and len(value): - is_repeated = True - result = value[0] - # For fields where the type is another message - if isinstance(value, dict): - result = value - - if result and hasattr(result, "keys"): - for subfield in result.keys(): - if (field, subfield) not in runtime_nested_fields: - subfields_not_in_runtime.append( - { - "field": field, - "subfield": subfield, - "is_repeated": is_repeated, - } - ) - - # Remove fields from the sample request which are not present in the runtime version of the dependency - # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime - for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER - field = subfield_to_delete.get("field") - field_repeated = subfield_to_delete.get("is_repeated") - subfield = subfield_to_delete.get("subfield") - if subfield: - if field_repeated: - for i in range(0, len(request_init["event"][field])): - del request_init["event"][field][i][subfield] - else: - del request_init["event"][field][subfield] - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = report_errors_service.ReportErrorEventResponse() - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - # Convert return value to protobuf type - return_value = report_errors_service.ReportErrorEventResponse.pb(return_value) - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.report_error_event(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, report_errors_service.ReportErrorEventResponse) - - def test_report_error_event_rest_use_cached_wrapped_rpc(): # Clients should use _prep_wrapped_messages to create cached wrapped rpcs, # instead of constructing them on each call @@ -1835,6 +1646,7 @@ def test_report_error_event_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} response = client.report_error_event(request) @@ -1860,102 +1672,19 @@ def test_report_error_event_rest_unset_required_fields(): ) -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_report_error_event_rest_interceptors(null_interceptor): - transport = transports.ReportErrorsServiceRestTransport( +def test_report_error_event_rest_flattened(): + client = ReportErrorsServiceClient( credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.ReportErrorsServiceRestInterceptor(), + transport="rest", ) - client = ReportErrorsServiceClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.ReportErrorsServiceRestInterceptor, "post_report_error_event" - ) as post, mock.patch.object( - transports.ReportErrorsServiceRestInterceptor, "pre_report_error_event" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = report_errors_service.ReportErrorEventRequest.pb( - report_errors_service.ReportErrorEventRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = ( - report_errors_service.ReportErrorEventResponse.to_json( - report_errors_service.ReportErrorEventResponse() - ) - ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = report_errors_service.ReportErrorEventResponse() - request = report_errors_service.ReportErrorEventRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = report_errors_service.ReportErrorEventResponse() - - client.report_error_event( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_report_error_event_rest_bad_request( - transport: str = "rest", request_type=report_errors_service.ReportErrorEventRequest -): - client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"project_name": "projects/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.report_error_event(request) - - -def test_report_error_event_rest_flattened(): - client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = report_errors_service.ReportErrorEventResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {"project_name": "projects/sample1"} + # get arguments that satisfy an http rule for this method + sample_request = {"project_name": "projects/sample1"} # get truthy value for each flattened field mock_args = dict( @@ -1974,6 +1703,7 @@ def test_report_error_event_rest_flattened(): json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} client.report_error_event(**mock_args) @@ -2006,12 +1736,6 @@ def test_report_error_event_rest_flattened_error(transport: str = "rest"): ) -def test_report_error_event_rest_error(): - client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - def test_credentials_transport_error(): # It is an error to provide credentials and a transport instance. transport = transports.ReportErrorsServiceGrpcTransport( @@ -2104,18 +1828,340 @@ def test_transport_adc(transport_class): adc.assert_called_once() +def test_transport_kind_grpc(): + transport = ReportErrorsServiceClient.get_transport_class("grpc")( + credentials=ga_credentials.AnonymousCredentials() + ) + assert transport.kind == "grpc" + + +def test_initialize_client_w_grpc(): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc" + ) + assert client is not None + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_report_error_event_empty_call_grpc(): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object( + type(client.transport.report_error_event), "__call__" + ) as call: + call.return_value = report_errors_service.ReportErrorEventResponse() + client.report_error_event(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = report_errors_service.ReportErrorEventRequest() + + assert args[0] == request_msg + + +def test_transport_kind_grpc_asyncio(): + transport = ReportErrorsServiceAsyncClient.get_transport_class("grpc_asyncio")( + credentials=async_anonymous_credentials() + ) + assert transport.kind == "grpc_asyncio" + + +def test_initialize_client_w_grpc_asyncio(): + client = ReportErrorsServiceAsyncClient( + credentials=async_anonymous_credentials(), transport="grpc_asyncio" + ) + assert client is not None + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +@pytest.mark.asyncio +async def test_report_error_event_empty_call_grpc_asyncio(): + client = ReportErrorsServiceAsyncClient( + credentials=async_anonymous_credentials(), + transport="grpc_asyncio", + ) + + # Mock the actual call, and fake the request. + with mock.patch.object( + type(client.transport.report_error_event), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + report_errors_service.ReportErrorEventResponse() + ) + await client.report_error_event(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = report_errors_service.ReportErrorEventRequest() + + assert args[0] == request_msg + + +def test_transport_kind_rest(): + transport = ReportErrorsServiceClient.get_transport_class("rest")( + credentials=ga_credentials.AnonymousCredentials() + ) + assert transport.kind == "rest" + + +def test_report_error_event_rest_bad_request( + request_type=report_errors_service.ReportErrorEventRequest, +): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = mock.Mock() + json_return_value = "" + response_value.json = mock.Mock(return_value={}) + response_value.status_code = 400 + response_value.request = mock.Mock() + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + client.report_error_event(request) + + @pytest.mark.parametrize( - "transport_name", + "request_type", [ - "grpc", - "rest", + report_errors_service.ReportErrorEventRequest, + dict, ], ) -def test_transport_kind(transport_name): - transport = ReportErrorsServiceClient.get_transport_class(transport_name)( +def test_report_error_event_rest_call_success(request_type): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + # send a request that will satisfy transcoding + request_init = {"project_name": "projects/sample1"} + request_init["event"] = { + "event_time": {"seconds": 751, "nanos": 543}, + "service_context": { + "service": "service_value", + "version": "version_value", + "resource_type": "resource_type_value", + }, + "message": "message_value", + "context": { + "http_request": { + "method": "method_value", + "url": "url_value", + "user_agent": "user_agent_value", + "referrer": "referrer_value", + "response_status_code": 2156, + "remote_ip": "remote_ip_value", + }, + "user": "user_value", + "report_location": { + "file_path": "file_path_value", + "line_number": 1168, + "function_name": "function_name_value", + }, + }, + } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = report_errors_service.ReportErrorEventRequest.meta.fields["event"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["event"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["event"][field])): + del request_init["event"][field][i][subfield] + else: + del request_init["event"][field][subfield] + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = report_errors_service.ReportErrorEventResponse() + + # Wrap the value into a proper Response obj + response_value = mock.Mock() + response_value.status_code = 200 + + # Convert return value to protobuf type + return_value = report_errors_service.ReportErrorEventResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + response_value.content = json_return_value.encode("UTF-8") + req.return_value = response_value + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + response = client.report_error_event(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, report_errors_service.ReportErrorEventResponse) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_report_error_event_rest_interceptors(null_interceptor): + transport = transports.ReportErrorsServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ReportErrorsServiceRestInterceptor(), + ) + client = ReportErrorsServiceClient(transport=transport) + + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ReportErrorsServiceRestInterceptor, "post_report_error_event" + ) as post, mock.patch.object( + transports.ReportErrorsServiceRestInterceptor, + "post_report_error_event_with_metadata", + ) as post_with_metadata, mock.patch.object( + transports.ReportErrorsServiceRestInterceptor, "pre_report_error_event" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + post_with_metadata.assert_not_called() + pb_message = report_errors_service.ReportErrorEventRequest.pb( + report_errors_service.ReportErrorEventRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = mock.Mock() + req.return_value.status_code = 200 + req.return_value.headers = {"header-1": "value-1", "header-2": "value-2"} + return_value = report_errors_service.ReportErrorEventResponse.to_json( + report_errors_service.ReportErrorEventResponse() + ) + req.return_value.content = return_value + + request = report_errors_service.ReportErrorEventRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = report_errors_service.ReportErrorEventResponse() + post_with_metadata.return_value = ( + report_errors_service.ReportErrorEventResponse(), + metadata, + ) + + client.report_error_event( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + post_with_metadata.assert_called_once() + + +def test_initialize_client_w_rest(): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + assert client is not None + + +# This test is a coverage failsafe to make sure that totally empty calls, +# i.e. request == None and no flattened fields passed, work. +def test_report_error_event_empty_call_rest(): + client = ReportErrorsServiceClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - assert transport.kind == transport_name + + # Mock the actual call, and fake the request. + with mock.patch.object( + type(client.transport.report_error_event), "__call__" + ) as call: + client.report_error_event(request=None) + + # Establish that the underlying stub method was called. + call.assert_called() + _, args, _ = call.mock_calls[0] + request_msg = report_errors_service.ReportErrorEventRequest() + + assert args[0] == request_msg def test_transport_grpc_default(): @@ -2667,36 +2713,41 @@ def test_client_with_default_client_info(): prep.assert_called_once_with(client_info) +def test_transport_close_grpc(): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="grpc" + ) + with mock.patch.object( + type(getattr(client.transport, "_grpc_channel")), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + @pytest.mark.asyncio -async def test_transport_close_async(): +async def test_transport_close_grpc_asyncio(): client = ReportErrorsServiceAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", + credentials=async_anonymous_credentials(), transport="grpc_asyncio" ) with mock.patch.object( - type(getattr(client.transport, "grpc_channel")), "close" + type(getattr(client.transport, "_grpc_channel")), "close" ) as close: async with client: close.assert_not_called() close.assert_called_once() -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = ReportErrorsServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport - ) - with mock.patch.object( - type(getattr(client.transport, close_name)), "close" - ) as close: - with client: - close.assert_not_called() - close.assert_called_once() +def test_transport_close_rest(): + client = ReportErrorsServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + with mock.patch.object( + type(getattr(client.transport, "_session")), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() def test_client_ctx(): From 6c5b6a97c28a780f6d62f92124b1936f304d4b17 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Mon, 10 Mar 2025 10:29:12 -0400 Subject: [PATCH 452/467] chore: remove unused files (#556) * chore: remove unused files * remove post processing for .kokoro/docs --- .../.github/.OwlBot.lock.yaml | 4 +- .../.kokoro/docker/docs/Dockerfile | 89 --- .../.kokoro/docker/docs/requirements.in | 2 - .../.kokoro/docker/docs/requirements.txt | 297 ---------- .../.kokoro/docs/common.cfg | 86 --- .../.kokoro/docs/docs-presubmit.cfg | 28 - .../.kokoro/docs/docs.cfg | 1 - .../.kokoro/publish-docs.sh | 58 -- .../.kokoro/release/common.cfg | 68 --- .../.kokoro/release/release.cfg | 1 - .../.kokoro/requirements.in | 11 - .../.kokoro/requirements.txt | 537 ------------------ .../google-cloud-error-reporting/owlbot.py | 2 +- 13 files changed, 3 insertions(+), 1181 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile delete mode 100644 packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in delete mode 100644 packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt delete mode 100644 packages/google-cloud-error-reporting/.kokoro/docs/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/docs/docs.cfg delete mode 100755 packages/google-cloud-error-reporting/.kokoro/publish-docs.sh delete mode 100644 packages/google-cloud-error-reporting/.kokoro/release/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/release/release.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/requirements.in delete mode 100644 packages/google-cloud-error-reporting/.kokoro/requirements.txt diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index 3f7634f25f8e..c631e1f7d7e9 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:f016446d6e520e5fb552c45b110cba3f217bffdd3d06bdddd076e9e6d13266cf -# created: 2025-02-21T19:32:52.01306189Z + digest: sha256:5581906b957284864632cde4e9c51d1cc66b0094990b27e689132fe5cd036046 +# created: 2025-03-05 diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile b/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile deleted file mode 100644 index e5410e296bd8..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/Dockerfile +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright 2024 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 ubuntu:24.04 - -ENV DEBIAN_FRONTEND noninteractive - -# Ensure local Python is preferred over distribution Python. -ENV PATH /usr/local/bin:$PATH - -# Install dependencies. -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - apt-transport-https \ - build-essential \ - ca-certificates \ - curl \ - dirmngr \ - git \ - gpg-agent \ - graphviz \ - libbz2-dev \ - libdb5.3-dev \ - libexpat1-dev \ - libffi-dev \ - liblzma-dev \ - libreadline-dev \ - libsnappy-dev \ - libssl-dev \ - libsqlite3-dev \ - portaudio19-dev \ - redis-server \ - software-properties-common \ - ssh \ - sudo \ - tcl \ - tcl-dev \ - tk \ - tk-dev \ - uuid-dev \ - wget \ - zlib1g-dev \ - && add-apt-repository universe \ - && apt-get update \ - && apt-get -y install jq \ - && apt-get clean autoclean \ - && apt-get autoremove -y \ - && rm -rf /var/lib/apt/lists/* \ - && rm -f /var/cache/apt/archives/*.deb - - -###################### Install python 3.10.14 for docs/docfx session - -# Download python 3.10.14 -RUN wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz - -# Extract files -RUN tar -xvf Python-3.10.14.tgz - -# Install python 3.10.14 -RUN ./Python-3.10.14/configure --enable-optimizations -RUN make altinstall - -ENV PATH /usr/local/bin/python3.10:$PATH - -###################### Install pip -RUN wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ - && python3.10 /tmp/get-pip.py \ - && rm /tmp/get-pip.py - -# Test pip -RUN python3.10 -m pip - -# Install build requirements -COPY requirements.txt /requirements.txt -RUN python3.10 -m pip install --require-hashes -r requirements.txt - -CMD ["python3.10"] diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in deleted file mode 100644 index 586bd07037ae..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.in +++ /dev/null @@ -1,2 +0,0 @@ -nox -gcp-docuploader diff --git a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt deleted file mode 100644 index a9360a25b707..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/docker/docs/requirements.txt +++ /dev/null @@ -1,297 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --allow-unsafe --generate-hashes requirements.in -# -argcomplete==3.5.3 \ - --hash=sha256:2ab2c4a215c59fd6caaff41a869480a23e8f6a5f910b266c1808037f4e375b61 \ - --hash=sha256:c12bf50eded8aebb298c7b7da7a5ff3ee24dffd9f5281867dfe1424b58c55392 - # via nox -cachetools==5.5.0 \ - --hash=sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 \ - --hash=sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a - # via google-auth -certifi==2024.12.14 \ - --hash=sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 \ - --hash=sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db - # via requests -charset-normalizer==3.4.1 \ - --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ - --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ - --hash=sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a \ - --hash=sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294 \ - --hash=sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b \ - --hash=sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd \ - --hash=sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601 \ - --hash=sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd \ - --hash=sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4 \ - --hash=sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d \ - --hash=sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2 \ - --hash=sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313 \ - --hash=sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd \ - --hash=sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa \ - --hash=sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8 \ - --hash=sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1 \ - --hash=sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2 \ - --hash=sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496 \ - --hash=sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d \ - --hash=sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b \ - --hash=sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e \ - --hash=sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a \ - --hash=sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4 \ - --hash=sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca \ - --hash=sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78 \ - --hash=sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408 \ - --hash=sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5 \ - --hash=sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3 \ - --hash=sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f \ - --hash=sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a \ - --hash=sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765 \ - --hash=sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6 \ - --hash=sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146 \ - --hash=sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6 \ - --hash=sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9 \ - --hash=sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd \ - --hash=sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c \ - --hash=sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f \ - --hash=sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545 \ - --hash=sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176 \ - --hash=sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770 \ - --hash=sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824 \ - --hash=sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f \ - --hash=sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf \ - --hash=sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487 \ - --hash=sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d \ - --hash=sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd \ - --hash=sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b \ - --hash=sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534 \ - --hash=sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f \ - --hash=sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b \ - --hash=sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9 \ - --hash=sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd \ - --hash=sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125 \ - --hash=sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9 \ - --hash=sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de \ - --hash=sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11 \ - --hash=sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d \ - --hash=sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35 \ - --hash=sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f \ - --hash=sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda \ - --hash=sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7 \ - --hash=sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a \ - --hash=sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971 \ - --hash=sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8 \ - --hash=sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41 \ - --hash=sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d \ - --hash=sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f \ - --hash=sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757 \ - --hash=sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a \ - --hash=sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886 \ - --hash=sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77 \ - --hash=sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76 \ - --hash=sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247 \ - --hash=sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85 \ - --hash=sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb \ - --hash=sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7 \ - --hash=sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e \ - --hash=sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6 \ - --hash=sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037 \ - --hash=sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1 \ - --hash=sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e \ - --hash=sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807 \ - --hash=sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407 \ - --hash=sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c \ - --hash=sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12 \ - --hash=sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3 \ - --hash=sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089 \ - --hash=sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd \ - --hash=sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e \ - --hash=sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00 \ - --hash=sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616 - # via requests -click==8.1.8 \ - --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \ - --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a - # via gcp-docuploader -colorlog==6.9.0 \ - --hash=sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff \ - --hash=sha256:bfba54a1b93b94f54e1f4fe48395725a3d92fd2a4af702f6bd70946bdc0c6ac2 - # via - # gcp-docuploader - # nox -distlib==0.3.9 \ - --hash=sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 \ - --hash=sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403 - # via virtualenv -filelock==3.16.1 \ - --hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \ - --hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435 - # via virtualenv -gcp-docuploader==0.6.5 \ - --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \ - --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea - # via -r requirements.in -google-api-core==2.24.0 \ - --hash=sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9 \ - --hash=sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf - # via - # google-cloud-core - # google-cloud-storage -google-auth==2.37.0 \ - --hash=sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00 \ - --hash=sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0 - # via - # google-api-core - # google-cloud-core - # google-cloud-storage -google-cloud-core==2.4.1 \ - --hash=sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073 \ - --hash=sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61 - # via google-cloud-storage -google-cloud-storage==2.19.0 \ - --hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \ - --hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2 - # via gcp-docuploader -google-crc32c==1.6.0 \ - --hash=sha256:05e2d8c9a2f853ff116db9706b4a27350587f341eda835f46db3c0a8c8ce2f24 \ - --hash=sha256:18e311c64008f1f1379158158bb3f0c8d72635b9eb4f9545f8cf990c5668e59d \ - --hash=sha256:236c87a46cdf06384f614e9092b82c05f81bd34b80248021f729396a78e55d7e \ - --hash=sha256:35834855408429cecf495cac67ccbab802de269e948e27478b1e47dfb6465e57 \ - --hash=sha256:386122eeaaa76951a8196310432c5b0ef3b53590ef4c317ec7588ec554fec5d2 \ - --hash=sha256:40b05ab32a5067525670880eb5d169529089a26fe35dce8891127aeddc1950e8 \ - --hash=sha256:48abd62ca76a2cbe034542ed1b6aee851b6f28aaca4e6551b5599b6f3ef175cc \ - --hash=sha256:50cf2a96da226dcbff8671233ecf37bf6e95de98b2a2ebadbfdf455e6d05df42 \ - --hash=sha256:51c4f54dd8c6dfeb58d1df5e4f7f97df8abf17a36626a217f169893d1d7f3e9f \ - --hash=sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa \ - --hash=sha256:62f6d4a29fea082ac4a3c9be5e415218255cf11684ac6ef5488eea0c9132689b \ - --hash=sha256:6eceb6ad197656a1ff49ebfbbfa870678c75be4344feb35ac1edf694309413dc \ - --hash=sha256:7aec8e88a3583515f9e0957fe4f5f6d8d4997e36d0f61624e70469771584c760 \ - --hash=sha256:91ca8145b060679ec9176e6de4f89b07363d6805bd4760631ef254905503598d \ - --hash=sha256:a184243544811e4a50d345838a883733461e67578959ac59964e43cca2c791e7 \ - --hash=sha256:a9e4b426c3702f3cd23b933436487eb34e01e00327fac20c9aebb68ccf34117d \ - --hash=sha256:bb0966e1c50d0ef5bc743312cc730b533491d60585a9a08f897274e57c3f70e0 \ - --hash=sha256:bb8b3c75bd157010459b15222c3fd30577042a7060e29d42dabce449c087f2b3 \ - --hash=sha256:bd5e7d2445d1a958c266bfa5d04c39932dc54093fa391736dbfdb0f1929c1fb3 \ - --hash=sha256:c87d98c7c4a69066fd31701c4e10d178a648c2cac3452e62c6b24dc51f9fcc00 \ - --hash=sha256:d2952396dc604544ea7476b33fe87faedc24d666fb0c2d5ac971a2b9576ab871 \ - --hash=sha256:d8797406499f28b5ef791f339594b0b5fdedf54e203b5066675c406ba69d705c \ - --hash=sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9 \ - --hash=sha256:e2806553238cd076f0a55bddab37a532b53580e699ed8e5606d0de1f856b5205 \ - --hash=sha256:ebab974b1687509e5c973b5c4b8b146683e101e102e17a86bd196ecaa4d099fc \ - --hash=sha256:ed767bf4ba90104c1216b68111613f0d5926fb3780660ea1198fc469af410e9d \ - --hash=sha256:f7a1fc29803712f80879b0806cb83ab24ce62fc8daf0569f2204a0cfd7f68ed4 - # via - # google-cloud-storage - # google-resumable-media -google-resumable-media==2.7.2 \ - --hash=sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa \ - --hash=sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0 - # via google-cloud-storage -googleapis-common-protos==1.66.0 \ - --hash=sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c \ - --hash=sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed - # via google-api-core -idna==3.10 \ - --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ - --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 - # via requests -nox==2024.10.9 \ - --hash=sha256:1d36f309a0a2a853e9bccb76bbef6bb118ba92fa92674d15604ca99adeb29eab \ - --hash=sha256:7aa9dc8d1c27e9f45ab046ffd1c3b2c4f7c91755304769df231308849ebded95 - # via -r requirements.in -packaging==24.2 \ - --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ - --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f - # via nox -platformdirs==4.3.6 \ - --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \ - --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb - # via virtualenv -proto-plus==1.25.0 \ - --hash=sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961 \ - --hash=sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91 - # via google-api-core -protobuf==5.29.3 \ - --hash=sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f \ - --hash=sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7 \ - --hash=sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888 \ - --hash=sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620 \ - --hash=sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da \ - --hash=sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252 \ - --hash=sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a \ - --hash=sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e \ - --hash=sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107 \ - --hash=sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f \ - --hash=sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84 - # via - # gcp-docuploader - # google-api-core - # googleapis-common-protos - # proto-plus -pyasn1==0.6.1 \ - --hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 \ - --hash=sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.4.1 \ - --hash=sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd \ - --hash=sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c - # via google-auth -requests==2.32.3 \ - --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ - --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 - # via - # google-api-core - # google-cloud-storage -rsa==4.9 \ - --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ - --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 - # via google-auth -six==1.17.0 \ - --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ - --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 - # via gcp-docuploader -tomli==2.2.1 \ - --hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \ - --hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \ - --hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \ - --hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \ - --hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \ - --hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \ - --hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \ - --hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \ - --hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \ - --hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \ - --hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \ - --hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \ - --hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \ - --hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \ - --hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \ - --hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \ - --hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \ - --hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \ - --hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \ - --hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \ - --hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \ - --hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \ - --hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \ - --hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \ - --hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \ - --hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \ - --hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \ - --hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \ - --hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \ - --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ - --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ - --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 - # via nox -urllib3==2.3.0 \ - --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ - --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d - # via requests -virtualenv==20.28.1 \ - --hash=sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb \ - --hash=sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329 - # via nox diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg deleted file mode 100644 index b53153fe1f64..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/docs/common.cfg +++ /dev/null @@ -1,86 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-lib-docs" -} -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/publish-docs.sh" -} - -env_vars: { - key: "STAGING_BUCKET" - value: "docs-staging" -} - -env_vars: { - key: "V2_STAGING_BUCKET" - # Push google cloud library docs to the Cloud RAD bucket `docs-staging-v2` - value: "docs-staging-v2" -} - -# It will upload the docker image after successful builds. -env_vars: { - key: "TRAMPOLINE_IMAGE_UPLOAD" - value: "true" -} - -# It will always build the docker image. -env_vars: { - key: "TRAMPOLINE_DOCKERFILE" - value: ".kokoro/docker/docs/Dockerfile" -} - -# Fetch the token needed for reporting release status to GitHub -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "yoshi-automation-github-key" - } - } -} - -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "docuploader_service_account" - } - } -} - - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg deleted file mode 100644 index 6d7b518629af..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/docs/docs-presubmit.cfg +++ /dev/null @@ -1,28 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "STAGING_BUCKET" - value: "gcloud-python-test" -} - -env_vars: { - key: "V2_STAGING_BUCKET" - value: "gcloud-python-test" -} - -# We only upload the image in the main `docs` build. -env_vars: { - key: "TRAMPOLINE_IMAGE_UPLOAD" - value: "false" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/build.sh" -} - -# Only run this nox session. -env_vars: { - key: "NOX_SESSION" - value: "docs docfx" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/docs/docs.cfg b/packages/google-cloud-error-reporting/.kokoro/docs/docs.cfg deleted file mode 100644 index 8f43917d92fe..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/docs/docs.cfg +++ /dev/null @@ -1 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh b/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh deleted file mode 100755 index 4ed4aaf1346f..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/publish-docs.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# Copyright 2024 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 -# -# https://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. - -set -eo pipefail - -# Disable buffering, so that the logs stream through. -export PYTHONUNBUFFERED=1 - -export PATH="${HOME}/.local/bin:${PATH}" - -# build docs -nox -s docs - -# create metadata -python3.10 -m docuploader create-metadata \ - --name=$(jq --raw-output '.name // empty' .repo-metadata.json) \ - --version=$(python3.10 setup.py --version) \ - --language=$(jq --raw-output '.language // empty' .repo-metadata.json) \ - --distribution-name=$(python3.10 setup.py --name) \ - --product-page=$(jq --raw-output '.product_documentation // empty' .repo-metadata.json) \ - --github-repository=$(jq --raw-output '.repo // empty' .repo-metadata.json) \ - --issue-tracker=$(jq --raw-output '.issue_tracker // empty' .repo-metadata.json) - -cat docs.metadata - -# upload docs -python3.10 -m docuploader upload docs/_build/html --metadata-file docs.metadata --staging-bucket "${STAGING_BUCKET}" - - -# docfx yaml files -nox -s docfx - -# create metadata. -python3.10 -m docuploader create-metadata \ - --name=$(jq --raw-output '.name // empty' .repo-metadata.json) \ - --version=$(python3.10 setup.py --version) \ - --language=$(jq --raw-output '.language // empty' .repo-metadata.json) \ - --distribution-name=$(python3.10 setup.py --name) \ - --product-page=$(jq --raw-output '.product_documentation // empty' .repo-metadata.json) \ - --github-repository=$(jq --raw-output '.repo // empty' .repo-metadata.json) \ - --issue-tracker=$(jq --raw-output '.issue_tracker // empty' .repo-metadata.json) - -cat docs.metadata - -# upload docs -python3.10 -m docuploader upload docs/_build/html/docfx_yaml --metadata-file docs.metadata --destination-prefix docfx --staging-bucket "${V2_STAGING_BUCKET}" diff --git a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg b/packages/google-cloud-error-reporting/.kokoro/release/common.cfg deleted file mode 100644 index e0de520f20e1..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/release/common.cfg +++ /dev/null @@ -1,68 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" -} -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/release.sh" -} - -# Fetch PyPI password -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "google-cloud-pypi-token-keystore-2" - } - } -} - -# Tokens needed to report release status back to GitHub -env_vars: { - key: "SECRET_MANAGER_KEYS" - value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" -} - -# Store the packages we uploaded to PyPI. That way, we have a record of exactly -# what we published, which we can use to generate SBOMs and attestations. -action { - define_artifacts { - regex: "github/python-error-reporting/**/*.tar.gz" - strip_prefix: "github/python-error-reporting" - } -} - - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### diff --git a/packages/google-cloud-error-reporting/.kokoro/release/release.cfg b/packages/google-cloud-error-reporting/.kokoro/release/release.cfg deleted file mode 100644 index 8f43917d92fe..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/release/release.cfg +++ /dev/null @@ -1 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.in b/packages/google-cloud-error-reporting/.kokoro/requirements.in deleted file mode 100644 index fff4d9ce0d0a..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.in +++ /dev/null @@ -1,11 +0,0 @@ -gcp-docuploader -gcp-releasetool>=2 # required for compatibility with cryptography>=42.x -importlib-metadata -typing-extensions -twine -wheel -setuptools -nox>=2022.11.21 # required to remove dependency on py -charset-normalizer<3 -click<8.1.0 -cryptography>=42.0.5 diff --git a/packages/google-cloud-error-reporting/.kokoro/requirements.txt b/packages/google-cloud-error-reporting/.kokoro/requirements.txt deleted file mode 100644 index 9622baf0ba38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/requirements.txt +++ /dev/null @@ -1,537 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --generate-hashes requirements.in -# -argcomplete==3.4.0 \ - --hash=sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5 \ - --hash=sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f - # via nox -attrs==23.2.0 \ - --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ - --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 - # via gcp-releasetool -backports-tarfile==1.2.0 \ - --hash=sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34 \ - --hash=sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991 - # via jaraco-context -cachetools==5.3.3 \ - --hash=sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945 \ - --hash=sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105 - # via google-auth -certifi==2024.7.4 \ - --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ - --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 - # via requests -cffi==1.16.0 \ - --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ - --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ - --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ - --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \ - --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \ - --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \ - --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \ - --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \ - --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \ - --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \ - --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \ - --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \ - --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \ - --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \ - --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \ - --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \ - --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \ - --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \ - --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \ - --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \ - --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \ - --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \ - --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \ - --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \ - --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \ - --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \ - --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \ - --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \ - --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \ - --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \ - --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \ - --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \ - --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \ - --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \ - --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \ - --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \ - --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \ - --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \ - --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \ - --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \ - --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \ - --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \ - --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \ - --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \ - --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \ - --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \ - --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \ - --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \ - --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \ - --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ - --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ - --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 - # via cryptography -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f - # via - # -r requirements.in - # requests -click==8.0.4 \ - --hash=sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1 \ - --hash=sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb - # via - # -r requirements.in - # gcp-docuploader - # gcp-releasetool -colorlog==6.8.2 \ - --hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \ - --hash=sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33 - # via - # gcp-docuploader - # nox -cryptography==42.0.8 \ - --hash=sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad \ - --hash=sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583 \ - --hash=sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b \ - --hash=sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c \ - --hash=sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1 \ - --hash=sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648 \ - --hash=sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949 \ - --hash=sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba \ - --hash=sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c \ - --hash=sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9 \ - --hash=sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d \ - --hash=sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c \ - --hash=sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e \ - --hash=sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2 \ - --hash=sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d \ - --hash=sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7 \ - --hash=sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70 \ - --hash=sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2 \ - --hash=sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7 \ - --hash=sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14 \ - --hash=sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe \ - --hash=sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e \ - --hash=sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71 \ - --hash=sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961 \ - --hash=sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7 \ - --hash=sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c \ - --hash=sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28 \ - --hash=sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842 \ - --hash=sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902 \ - --hash=sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801 \ - --hash=sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a \ - --hash=sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e - # via - # -r requirements.in - # gcp-releasetool - # secretstorage -distlib==0.3.8 \ - --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ - --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 - # via virtualenv -docutils==0.21.2 \ - --hash=sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f \ - --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 - # via readme-renderer -filelock==3.15.4 \ - --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ - --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 - # via virtualenv -gcp-docuploader==0.6.5 \ - --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \ - --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea - # via -r requirements.in -gcp-releasetool==2.0.1 \ - --hash=sha256:34314a910c08e8911d9c965bd44f8f2185c4f556e737d719c33a41f6a610de96 \ - --hash=sha256:b0d5863c6a070702b10883d37c4bdfd74bf930fe417f36c0c965d3b7c779ae62 - # via -r requirements.in -google-api-core==2.19.1 \ - --hash=sha256:f12a9b8309b5e21d92483bbd47ce2c445861ec7d269ef6784ecc0ea8c1fa6125 \ - --hash=sha256:f4695f1e3650b316a795108a76a1c416e6afb036199d1c1f1f110916df479ffd - # via - # google-cloud-core - # google-cloud-storage -google-auth==2.31.0 \ - --hash=sha256:042c4702efa9f7d3c48d3a69341c209381b125faa6dbf3ebe56bc7e40ae05c23 \ - --hash=sha256:87805c36970047247c8afe614d4e3af8eceafc1ebba0c679fe75ddd1d575e871 - # via - # gcp-releasetool - # google-api-core - # google-cloud-core - # google-cloud-storage -google-cloud-core==2.4.1 \ - --hash=sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073 \ - --hash=sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61 - # via google-cloud-storage -google-cloud-storage==2.17.0 \ - --hash=sha256:49378abff54ef656b52dca5ef0f2eba9aa83dc2b2c72c78714b03a1a95fe9388 \ - --hash=sha256:5b393bc766b7a3bc6f5407b9e665b2450d36282614b7945e570b3480a456d1e1 - # via gcp-docuploader -google-crc32c==1.5.0 \ - --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ - --hash=sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876 \ - --hash=sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c \ - --hash=sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289 \ - --hash=sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298 \ - --hash=sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02 \ - --hash=sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f \ - --hash=sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2 \ - --hash=sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a \ - --hash=sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb \ - --hash=sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210 \ - --hash=sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5 \ - --hash=sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee \ - --hash=sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c \ - --hash=sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a \ - --hash=sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314 \ - --hash=sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd \ - --hash=sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65 \ - --hash=sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37 \ - --hash=sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4 \ - --hash=sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13 \ - --hash=sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894 \ - --hash=sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31 \ - --hash=sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e \ - --hash=sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709 \ - --hash=sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740 \ - --hash=sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc \ - --hash=sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d \ - --hash=sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c \ - --hash=sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c \ - --hash=sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d \ - --hash=sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906 \ - --hash=sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61 \ - --hash=sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57 \ - --hash=sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c \ - --hash=sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a \ - --hash=sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438 \ - --hash=sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946 \ - --hash=sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7 \ - --hash=sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96 \ - --hash=sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091 \ - --hash=sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae \ - --hash=sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d \ - --hash=sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88 \ - --hash=sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2 \ - --hash=sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd \ - --hash=sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541 \ - --hash=sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728 \ - --hash=sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178 \ - --hash=sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968 \ - --hash=sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346 \ - --hash=sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8 \ - --hash=sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93 \ - --hash=sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7 \ - --hash=sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273 \ - --hash=sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462 \ - --hash=sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94 \ - --hash=sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd \ - --hash=sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e \ - --hash=sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57 \ - --hash=sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b \ - --hash=sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9 \ - --hash=sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a \ - --hash=sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100 \ - --hash=sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325 \ - --hash=sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183 \ - --hash=sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556 \ - --hash=sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4 - # via - # google-cloud-storage - # google-resumable-media -google-resumable-media==2.7.1 \ - --hash=sha256:103ebc4ba331ab1bfdac0250f8033627a2cd7cde09e7ccff9181e31ba4315b2c \ - --hash=sha256:eae451a7b2e2cdbaaa0fd2eb00cc8a1ee5e95e16b55597359cbc3d27d7d90e33 - # via google-cloud-storage -googleapis-common-protos==1.63.2 \ - --hash=sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945 \ - --hash=sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87 - # via google-api-core -idna==3.7 \ - --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ - --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 - # via requests -importlib-metadata==8.0.0 \ - --hash=sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f \ - --hash=sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812 - # via - # -r requirements.in - # keyring - # twine -jaraco-classes==3.4.0 \ - --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ - --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 - # via keyring -jaraco-context==5.3.0 \ - --hash=sha256:3e16388f7da43d384a1a7cd3452e72e14732ac9fe459678773a3608a812bf266 \ - --hash=sha256:c2f67165ce1f9be20f32f650f25d8edfc1646a8aeee48ae06fb35f90763576d2 - # via keyring -jaraco-functools==4.0.1 \ - --hash=sha256:3b24ccb921d6b593bdceb56ce14799204f473976e2a9d4b15b04d0f2c2326664 \ - --hash=sha256:d33fa765374c0611b52f8b3a795f8900869aa88c84769d4d1746cd68fb28c3e8 - # via keyring -jeepney==0.8.0 \ - --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ - --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 - # via - # keyring - # secretstorage -jinja2==3.1.4 \ - --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ - --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d - # via gcp-releasetool -keyring==25.2.1 \ - --hash=sha256:2458681cdefc0dbc0b7eb6cf75d0b98e59f9ad9b2d4edd319d18f68bdca95e50 \ - --hash=sha256:daaffd42dbda25ddafb1ad5fec4024e5bbcfe424597ca1ca452b299861e49f1b - # via - # gcp-releasetool - # twine -markdown-it-py==3.0.0 \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb - # via rich -markupsafe==2.1.5 \ - --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ - --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ - --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ - --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ - --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ - --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ - --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ - --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ - --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ - --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ - --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ - --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ - --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ - --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ - --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ - --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ - --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ - --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ - --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ - --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ - --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ - --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ - --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ - --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ - --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ - --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ - --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ - --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ - --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ - --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ - --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ - --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ - --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ - --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ - --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ - --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ - --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ - --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ - --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ - --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ - --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ - --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ - --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ - --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ - --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ - --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ - --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ - --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ - --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ - --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ - --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ - --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ - --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ - --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ - --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ - --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ - --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ - --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ - --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ - --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 - # via jinja2 -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba - # via markdown-it-py -more-itertools==10.3.0 \ - --hash=sha256:e5d93ef411224fbcef366a6e8ddc4c5781bc6359d43412a65dd5964e46111463 \ - --hash=sha256:ea6a02e24a9161e51faad17a8782b92a0df82c12c1c8886fec7f0c3fa1a1b320 - # via - # jaraco-classes - # jaraco-functools -nh3==0.2.18 \ - --hash=sha256:0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164 \ - --hash=sha256:14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86 \ - --hash=sha256:19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b \ - --hash=sha256:34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad \ - --hash=sha256:36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204 \ - --hash=sha256:3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a \ - --hash=sha256:42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200 \ - --hash=sha256:5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189 \ - --hash=sha256:6955369e4d9f48f41e3f238a9e60f9410645db7e07435e62c6a9ea6135a4907f \ - --hash=sha256:7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811 \ - --hash=sha256:8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844 \ - --hash=sha256:94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4 \ - --hash=sha256:a7f1b5b2c15866f2db413a3649a8fe4fd7b428ae58be2c0f6bca5eefd53ca2be \ - --hash=sha256:c8b3a1cebcba9b3669ed1a84cc65bf005728d2f0bc1ed2a6594a992e817f3a50 \ - --hash=sha256:de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307 \ - --hash=sha256:f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe - # via readme-renderer -nox==2024.4.15 \ - --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ - --hash=sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f - # via -r requirements.in -packaging==24.1 \ - --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ - --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 - # via - # gcp-releasetool - # nox -pkginfo==1.10.0 \ - --hash=sha256:5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297 \ - --hash=sha256:889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097 - # via twine -platformdirs==4.2.2 \ - --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ - --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 - # via virtualenv -proto-plus==1.24.0 \ - --hash=sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445 \ - --hash=sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12 - # via google-api-core -protobuf==5.27.2 \ - --hash=sha256:0e341109c609749d501986b835f667c6e1e24531096cff9d34ae411595e26505 \ - --hash=sha256:176c12b1f1c880bf7a76d9f7c75822b6a2bc3db2d28baa4d300e8ce4cde7409b \ - --hash=sha256:354d84fac2b0d76062e9b3221f4abbbacdfd2a4d8af36bab0474f3a0bb30ab38 \ - --hash=sha256:4fadd8d83e1992eed0248bc50a4a6361dc31bcccc84388c54c86e530b7f58863 \ - --hash=sha256:54330f07e4949d09614707c48b06d1a22f8ffb5763c159efd5c0928326a91470 \ - --hash=sha256:610e700f02469c4a997e58e328cac6f305f649826853813177e6290416e846c6 \ - --hash=sha256:7fc3add9e6003e026da5fc9e59b131b8f22b428b991ccd53e2af8071687b4fce \ - --hash=sha256:9e8f199bf7f97bd7ecebffcae45ebf9527603549b2b562df0fbc6d4d688f14ca \ - --hash=sha256:a109916aaac42bff84702fb5187f3edadbc7c97fc2c99c5ff81dd15dcce0d1e5 \ - --hash=sha256:b848dbe1d57ed7c191dfc4ea64b8b004a3f9ece4bf4d0d80a367b76df20bf36e \ - --hash=sha256:f3ecdef226b9af856075f28227ff2c90ce3a594d092c39bee5513573f25e2714 - # via - # gcp-docuploader - # gcp-releasetool - # google-api-core - # googleapis-common-protos - # proto-plus -pyasn1==0.6.0 \ - --hash=sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c \ - --hash=sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.4.0 \ - --hash=sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6 \ - --hash=sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b - # via google-auth -pycparser==2.22 \ - --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ - --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc - # via cffi -pygments==2.18.0 \ - --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ - --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a - # via - # readme-renderer - # rich -pyjwt==2.8.0 \ - --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ - --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 - # via gcp-releasetool -pyperclip==1.9.0 \ - --hash=sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310 - # via gcp-releasetool -python-dateutil==2.9.0.post0 \ - --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ - --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 - # via gcp-releasetool -readme-renderer==44.0 \ - --hash=sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151 \ - --hash=sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1 - # via twine -requests==2.32.3 \ - --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ - --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 - # via - # gcp-releasetool - # google-api-core - # google-cloud-storage - # requests-toolbelt - # twine -requests-toolbelt==1.0.0 \ - --hash=sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6 \ - --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 - # via twine -rfc3986==2.0.0 \ - --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ - --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c - # via twine -rich==13.7.1 \ - --hash=sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222 \ - --hash=sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432 - # via twine -rsa==4.9 \ - --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ - --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 - # via google-auth -secretstorage==3.3.3 \ - --hash=sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77 \ - --hash=sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 - # via keyring -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via - # gcp-docuploader - # python-dateutil -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via nox -twine==5.1.1 \ - --hash=sha256:215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997 \ - --hash=sha256:9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db - # via -r requirements.in -typing-extensions==4.12.2 \ - --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ - --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 - # via -r requirements.in -urllib3==2.2.2 \ - --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ - --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 - # via - # requests - # twine -virtualenv==20.26.3 \ - --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ - --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 - # via nox -wheel==0.43.0 \ - --hash=sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85 \ - --hash=sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81 - # via -r requirements.in -zipp==3.19.2 \ - --hash=sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19 \ - --hash=sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c - # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -setuptools==70.2.0 \ - --hash=sha256:b8b8060bb426838fbe942479c90296ce976249451118ef566a5a0b7d8b78fb05 \ - --hash=sha256:bd63e505105011b25c3c11f753f7e3b8465ea739efddaccef8f0efac2137bac1 - # via -r requirements.in diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 47e5271902cc..0f85138849f9 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -79,7 +79,7 @@ # -------------------------------------------------------------------------- # add shared environment variables to test configs -tracked_subdirs = ["continuous", "presubmit", "samples", "docs"] +tracked_subdirs = ["continuous", "presubmit", "samples"] for subdir in tracked_subdirs: for path, subdirs, files in os.walk(f".kokoro/{subdir}"): for name in files: From 17975bbd06f3f9cfbf3f00c6628ee46bb75e3c97 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Mon, 10 Mar 2025 10:47:10 -0400 Subject: [PATCH 453/467] chore: Delete .kokoro/release.sh (#559) --- .../.kokoro/release.sh | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100755 packages/google-cloud-error-reporting/.kokoro/release.sh diff --git a/packages/google-cloud-error-reporting/.kokoro/release.sh b/packages/google-cloud-error-reporting/.kokoro/release.sh deleted file mode 100755 index 0b4837926271..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/release.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -# Copyright 2024 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 -# -# https://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. - -set -eo pipefail - -# Start the releasetool reporter -python3 -m pip install --require-hashes -r github/python-error-reporting/.kokoro/requirements.txt -python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script - -# Disable buffering, so that the logs stream through. -export PYTHONUNBUFFERED=1 - -# Move into the package, build the distribution and upload. -TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google-cloud-pypi-token-keystore-2") -cd github/python-error-reporting -python3 setup.py sdist bdist_wheel -twine upload --username __token__ --password "${TWINE_PASSWORD}" dist/* From 4834fd4c035c07454c054521c73ed7c074da09f5 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Mon, 17 Mar 2025 11:05:22 -0400 Subject: [PATCH 454/467] fix: Allow Protobuf 6.x (#557) Co-authored-by: ohmayr --- packages/google-cloud-error-reporting/setup.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index d3f038a78c47..bed18b8b3a7c 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -38,14 +38,14 @@ release_status = "Development Status :: 5 - Production/Stable" dependencies = [ - "google-cloud-logging>=1.14.0, <4.0.0dev", + "google-cloud-logging>=1.14.0, <4.0.0", # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 - "google-auth >= 2.14.1, <3.0.0dev,!=2.24.0,!=2.25.0", - "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", - "proto-plus >= 1.22.0, <2.0.0dev", - "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", - "protobuf>=3.20.2,<6.0.0dev,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", + "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "google-api-core[grpc] >= 1.34.0, <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.*", + "proto-plus >= 1.22.0, <2.0.0", + "proto-plus >= 1.22.2, <2.0.0; python_version>='3.11'", + "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", ] url = "https://github.com/googleapis/python-error-reporting" From 40b7836fad1ad9d7e03cee3445692fb06cd65d75 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 19 Mar 2025 09:35:23 -0400 Subject: [PATCH 455/467] chore: Update gapic-generator-python to 1.23.6 (#563) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to 1.23.6 PiperOrigin-RevId: 738170370 Source-Link: https://github.com/googleapis/googleapis/commit/3f1e17aa2dec3f146a9a2a8a64c5c6d19d0b6e15 Source-Link: https://github.com/googleapis/googleapis-gen/commit/9afd8c33d4cae610b75fa4999264ea8c8c66b9d2 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiOWFmZDhjMzNkNGNhZTYxMGI3NWZhNDk5OTI2NGVhOGM4YzY2YjlkMiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../google/cloud/errorreporting_v1beta1/__init__.py | 2 +- .../google/cloud/errorreporting_v1beta1/services/__init__.py | 2 +- .../services/error_group_service/__init__.py | 2 +- .../services/error_group_service/async_client.py | 2 +- .../services/error_group_service/client.py | 2 +- .../services/error_group_service/transports/__init__.py | 2 +- .../services/error_group_service/transports/base.py | 2 +- .../services/error_group_service/transports/grpc.py | 2 +- .../services/error_group_service/transports/grpc_asyncio.py | 2 +- .../services/error_group_service/transports/rest.py | 2 +- .../services/error_group_service/transports/rest_base.py | 2 +- .../services/error_stats_service/__init__.py | 2 +- .../services/error_stats_service/async_client.py | 2 +- .../services/error_stats_service/client.py | 2 +- .../services/error_stats_service/pagers.py | 2 +- .../services/error_stats_service/transports/__init__.py | 2 +- .../services/error_stats_service/transports/base.py | 2 +- .../services/error_stats_service/transports/grpc.py | 2 +- .../services/error_stats_service/transports/grpc_asyncio.py | 2 +- .../services/error_stats_service/transports/rest.py | 2 +- .../services/error_stats_service/transports/rest_base.py | 2 +- .../services/report_errors_service/__init__.py | 2 +- .../services/report_errors_service/async_client.py | 2 +- .../services/report_errors_service/client.py | 2 +- .../services/report_errors_service/transports/__init__.py | 2 +- .../services/report_errors_service/transports/base.py | 2 +- .../services/report_errors_service/transports/grpc.py | 2 +- .../services/report_errors_service/transports/grpc_asyncio.py | 2 +- .../services/report_errors_service/transports/rest.py | 2 +- .../services/report_errors_service/transports/rest_base.py | 2 +- .../google/cloud/errorreporting_v1beta1/types/__init__.py | 2 +- .../google/cloud/errorreporting_v1beta1/types/common.py | 2 +- .../cloud/errorreporting_v1beta1/types/error_group_service.py | 2 +- .../cloud/errorreporting_v1beta1/types/error_stats_service.py | 2 +- .../cloud/errorreporting_v1beta1/types/report_errors_service.py | 2 +- ...ing_v1beta1_generated_error_group_service_get_group_async.py | 2 +- ...ting_v1beta1_generated_error_group_service_get_group_sync.py | 2 +- ..._v1beta1_generated_error_group_service_update_group_async.py | 2 +- ...g_v1beta1_generated_error_group_service_update_group_sync.py | 2 +- ...v1beta1_generated_error_stats_service_delete_events_async.py | 2 +- ..._v1beta1_generated_error_stats_service_delete_events_sync.py | 2 +- ...g_v1beta1_generated_error_stats_service_list_events_async.py | 2 +- ...ng_v1beta1_generated_error_stats_service_list_events_sync.py | 2 +- ...eta1_generated_error_stats_service_list_group_stats_async.py | 2 +- ...beta1_generated_error_stats_service_list_group_stats_sync.py | 2 +- ..._generated_report_errors_service_report_error_event_async.py | 2 +- ...1_generated_report_errors_service_report_error_event_sync.py | 2 +- .../scripts/fixup_errorreporting_v1beta1_keywords.py | 2 +- packages/google-cloud-error-reporting/tests/__init__.py | 2 +- packages/google-cloud-error-reporting/tests/unit/__init__.py | 2 +- .../google-cloud-error-reporting/tests/unit/gapic/__init__.py | 2 +- .../tests/unit/gapic/errorreporting_v1beta1/__init__.py | 2 +- .../gapic/errorreporting_v1beta1/test_error_group_service.py | 2 +- .../gapic/errorreporting_v1beta1/test_error_stats_service.py | 2 +- .../gapic/errorreporting_v1beta1/test_report_errors_service.py | 2 +- 55 files changed, 55 insertions(+), 55 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py index f2c069f901f6..e6ff221d1bf1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py index 8f6cf068242c..cbf94b283c70 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py index 7adebfc3c86f..1e8d42ee7dc1 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index c4c8feaea447..d93e9a46ff0c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index d4b2a29b51b9..f84c28aba136 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py index ee3446ba0814..f02ba22b2b12 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 52b03cea977d..0fec28901986 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 3d24d3eb1385..cb308ce02344 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index 24e5f0ebe134..f3186e6161b2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py index 80bba4e5ed57..078a817df545 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest_base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest_base.py index 0668d9acd551..f4330f976dd9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest_base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest_base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py index a31a509a9f79..e04db91bb5e9 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 3b804ae47108..389c161b6dc0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 6f67b82230b0..84a75273e7c7 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py index 277a4112ff63..190fecd9f397 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/pagers.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py index 69c4f43c7c18..8f452e4564ca 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 2ca8391cdd7f..bb733a491f23 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 08a27874628e..fd240316360b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index 7085b89b88a8..a62116455ee0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py index 11a6cdd9113b..e3c053d8f8df 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest_base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest_base.py index cd1c2a0f2a9c..77269984b100 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest_base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest_base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py index d9e40c582be5..2e3c13225231 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 76e85eed4a0b..e58ed221a8e5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index aa9f01e88830..31c8163df3e5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py index bf8256bc40bb..83aa46c6f70c 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 9bb43400f6bb..b22d3ac0f992 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index e9cf45f35de6..9f5f302ef4f2 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 609b0be29dfe..18f942cec5d0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py index b6120041ff89..682387e2378e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest_base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest_base.py index 61e2fbf190f7..f649584141ab 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest_base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest_base.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py index 42ab63d453bd..4acdb9a153c6 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py index 1278fa58080b..84320a89ed33 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/common.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py index cfd82fa7957b..be1267683b5e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py index 93158ab50be3..0285d9a80406 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/error_stats_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index 87c1b14dcb4e..ebd3385612fb 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py index dc84897a07fe..4a0dabf5abc3 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py index e260be1fd9cf..79c76d18d660 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_get_group_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py index 62a823683d02..58a7d5b39864 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py index 7239a97f68d3..9fa53da618fb 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_group_service_update_group_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py index 4bf091380d3c..6479d3863de4 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py index 6194de2342a8..60dcebe9b9a6 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_delete_events_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py index 49f25ac77416..3b143dca51f3 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py index 99d4ca3238e2..273d4a443233 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_events_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py index 8ffdf643f40a..92ef3ed11494 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py index a696194b0caf..ed6b7f5aabdc 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_error_stats_service_list_group_stats_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py index 5dc4e264901c..b2c9d42ee4d9 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py index f75f559136a6..b413c1f6aae2 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py +++ b/packages/google-cloud-error-reporting/samples/generated_samples/clouderrorreporting_v1beta1_generated_report_errors_service_report_error_event_sync.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py index 69a5a229ffe3..60f94ffce9a1 100644 --- a/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py +++ b/packages/google-cloud-error-reporting/scripts/fixup_errorreporting_v1beta1_keywords.py @@ -1,6 +1,6 @@ #! /usr/bin/env python3 # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/__init__.py b/packages/google-cloud-error-reporting/tests/__init__.py index 8f6cf068242c..cbf94b283c70 100644 --- a/packages/google-cloud-error-reporting/tests/__init__.py +++ b/packages/google-cloud-error-reporting/tests/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/__init__.py b/packages/google-cloud-error-reporting/tests/unit/__init__.py index 8f6cf068242c..cbf94b283c70 100644 --- a/packages/google-cloud-error-reporting/tests/unit/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py index 8f6cf068242c..cbf94b283c70 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py index 8f6cf068242c..cbf94b283c70 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py index cacaa62015b5..67adff43332b 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py index 437f9b4a2921..0b1bdc25227d 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_error_stats_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py index b8ad46b1f24b..9ac7c0046596 100644 --- a/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py +++ b/packages/google-cloud-error-reporting/tests/unit/gapic/errorreporting_v1beta1/test_report_errors_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 6049c0896c2ea181a5b4395aaa94fc72b930e124 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:14:43 -0400 Subject: [PATCH 456/467] chore(python): fix incorrect import statement in README (#564) Source-Link: https://github.com/googleapis/synthtool/commit/87677404f85cee860588ebe2c352d0609f683d5d Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:023a21377a2a00008057f99f0118edadc30a19d1636a3fee47189ebec2f3921c Co-authored-by: Owl Bot --- .../google-cloud-error-reporting/.github/.OwlBot.lock.yaml | 4 ++-- packages/google-cloud-error-reporting/README.rst | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index c631e1f7d7e9..c4e82889dc81 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:5581906b957284864632cde4e9c51d1cc66b0094990b27e689132fe5cd036046 -# created: 2025-03-05 + digest: sha256:023a21377a2a00008057f99f0118edadc30a19d1636a3fee47189ebec2f3921c +# created: 2025-03-31T16:51:40.130756953Z diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index 484923c1e5dd..a1b9e25e4bf7 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -162,7 +162,7 @@ Code-Based Examples import logging - from google.cloud.translate_v3 import translate + from google.cloud import library_v1 base_logger = logging.getLogger("google") base_logger.addHandler(logging.StreamHandler()) @@ -174,7 +174,7 @@ Code-Based Examples import logging - from google.cloud.translate_v3 import translate + from google.cloud import library_v1 base_logger = logging.getLogger("google.cloud.library_v1") base_logger.addHandler(logging.StreamHandler()) From c31c069dbfa9bf6ec64e403f0d5cb96ca575bd39 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Wed, 16 Apr 2025 12:47:27 -0400 Subject: [PATCH 457/467] fix: remove setup.cfg configuration for creating universal wheels (#562) --- .../google-cloud-error-reporting/setup.cfg | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/setup.cfg diff --git a/packages/google-cloud-error-reporting/setup.cfg b/packages/google-cloud-error-reporting/setup.cfg deleted file mode 100644 index 052350089505..000000000000 --- a/packages/google-cloud-error-reporting/setup.cfg +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# -# 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 -# -# https://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. - -# Generated by synthtool. DO NOT EDIT! -[bdist_wheel] -universal = 1 From da679dd2334d35c50b1d5beced0d023d97308c64 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 10:07:05 -0700 Subject: [PATCH 458/467] chore: Update gapic-generator-python to 1.24.0 (#565) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to 1.24.0 PiperOrigin-RevId: 747419463 Source-Link: https://github.com/googleapis/googleapis/commit/340579bf7f97ba56cda0c70176dc5b03a8357667 Source-Link: https://github.com/googleapis/googleapis-gen/commit/e8997ec5136ecb6ed9a969a4c2f13b3ab6a17c12 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZTg5OTdlYzUxMzZlY2I2ZWQ5YTk2OWE0YzJmMTNiM2FiNmExN2MxMiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../error_group_service/transports/grpc.py | 3 +-- .../error_stats_service/transports/grpc.py | 3 +-- .../report_errors_service/transports/grpc.py | 3 +-- .../testing/constraints-3.13.txt | 15 ++++++++++----- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index cb308ce02344..8bfab8f0f457 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -71,12 +71,11 @@ def intercept_unary_unary(self, continuation, client_call_details, request): f"Sending request for {client_call_details.method}", extra={ "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorGroupService", - "rpcName": client_call_details.method, + "rpcName": str(client_call_details.method), "request": grpc_request, "metadata": grpc_request["metadata"], }, ) - response = continuation(client_call_details, request) if logging_enabled: # pragma: NO COVER response_metadata = response.trailing_metadata() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index fd240316360b..9bcb9106545e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -70,12 +70,11 @@ def intercept_unary_unary(self, continuation, client_call_details, request): f"Sending request for {client_call_details.method}", extra={ "serviceName": "google.devtools.clouderrorreporting.v1beta1.ErrorStatsService", - "rpcName": client_call_details.method, + "rpcName": str(client_call_details.method), "request": grpc_request, "metadata": grpc_request["metadata"], }, ) - response = continuation(client_call_details, request) if logging_enabled: # pragma: NO COVER response_metadata = response.trailing_metadata() diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 9f5f302ef4f2..023d0f0f4f3b 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -70,12 +70,11 @@ def intercept_unary_unary(self, continuation, client_call_details, request): f"Sending request for {client_call_details.method}", extra={ "serviceName": "google.devtools.clouderrorreporting.v1beta1.ReportErrorsService", - "rpcName": client_call_details.method, + "rpcName": str(client_call_details.method), "request": grpc_request, "metadata": grpc_request["metadata"], }, ) - response = continuation(client_call_details, request) if logging_enabled: # pragma: NO COVER response_metadata = response.trailing_metadata() diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.13.txt b/packages/google-cloud-error-reporting/testing/constraints-3.13.txt index ed7f9aed2559..c20a77817caa 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.13.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.13.txt @@ -1,6 +1,11 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. +# We use the constraints file for the latest Python version +# (currently this file) to check that the latest +# major versions of dependencies are supported in setup.py. # List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf +# Require the latest major version be installed for each dependency. +# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", +# Then this file should have google-cloud-foo>=1 +google-api-core>=2 +google-auth>=2 +proto-plus>=1 +protobuf>=6 From b624a6ae0aeb1c9d0df7906d1291b64c72357e94 Mon Sep 17 00:00:00 2001 From: Kevin Zheng <147537668+gkevinzheng@users.noreply.github.com> Date: Mon, 28 Apr 2025 15:45:42 -0400 Subject: [PATCH 459/467] fix: require proto-plus >= 1.25.0 for Python 3.13 (#567) --- packages/google-cloud-error-reporting/setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index bed18b8b3a7c..530e3c7f1ff5 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -45,6 +45,7 @@ "google-api-core[grpc] >= 1.34.0, <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.*", "proto-plus >= 1.22.0, <2.0.0", "proto-plus >= 1.22.2, <2.0.0; python_version>='3.11'", + "proto-plus >= 1.25.0, <2.0.0dev; python_version>='3.13'", "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", ] url = "https://github.com/googleapis/python-error-reporting" From bda559e4bce12891026088e86bc8c1a935b5abea Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 21 May 2025 06:42:36 -0400 Subject: [PATCH 460/467] chore: Update gapic-generator-python to 1.25.0 (#568) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Update gapic-generator-python to 1.25.0 PiperOrigin-RevId: 755914147 Source-Link: https://github.com/googleapis/googleapis/commit/97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5 Source-Link: https://github.com/googleapis/googleapis-gen/commit/a9977efedc836ccece1f01d529b0315e1efe52ad Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYTk5NzdlZmVkYzgzNmNjZWNlMWYwMWQ1MjliMDMxNWUxZWZlNTJhZCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../services/error_group_service/async_client.py | 4 ++++ .../services/error_group_service/client.py | 3 +++ .../services/error_group_service/transports/base.py | 4 ++++ .../services/error_group_service/transports/rest.py | 4 ++++ .../services/error_stats_service/async_client.py | 4 ++++ .../services/error_stats_service/client.py | 3 +++ .../services/error_stats_service/transports/base.py | 4 ++++ .../services/error_stats_service/transports/rest.py | 4 ++++ .../services/report_errors_service/async_client.py | 4 ++++ .../services/report_errors_service/client.py | 3 +++ .../services/report_errors_service/transports/base.py | 4 ++++ .../services/report_errors_service/transports/rest.py | 4 ++++ 12 files changed, 45 insertions(+) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py index d93e9a46ff0c..3e9cf7376341 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/async_client.py @@ -37,6 +37,7 @@ from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf try: @@ -547,5 +548,8 @@ async def __aexit__(self, exc_type, exc, tb): gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + __all__ = ("ErrorGroupServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py index f84c28aba136..cc4b15df7785 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/client.py @@ -45,6 +45,7 @@ from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] @@ -964,5 +965,7 @@ def __exit__(self, type, value, traceback): gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ __all__ = ("ErrorGroupServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 0fec28901986..9938eaf4ed17 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -25,6 +25,7 @@ from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf from google.cloud.errorreporting_v1beta1.types import common from google.cloud.errorreporting_v1beta1.types import error_group_service @@ -33,6 +34,9 @@ gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + class ErrorGroupServiceTransport(abc.ABC): """Abstract transport class for ErrorGroupService.""" diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py index 078a817df545..526f1d7f74d5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -23,6 +23,7 @@ from google.api_core import rest_helpers from google.api_core import rest_streaming from google.api_core import gapic_v1 +import google.protobuf from google.protobuf import json_format @@ -59,6 +60,9 @@ rest_version=f"requests@{requests_version}", ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + class ErrorGroupServiceRestInterceptor: """Interceptor for ErrorGroupService. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py index 389c161b6dc0..f588025ebc60 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/async_client.py @@ -37,6 +37,7 @@ from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf try: @@ -753,5 +754,8 @@ async def __aexit__(self, exc_type, exc, tb): gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + __all__ = ("ErrorStatsServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py index 84a75273e7c7..dd22c33b2d68 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/client.py @@ -45,6 +45,7 @@ from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] @@ -1167,5 +1168,7 @@ def __exit__(self, type, value, traceback): gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ __all__ = ("ErrorStatsServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index bb733a491f23..12f6992a565a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -25,6 +25,7 @@ from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf from google.cloud.errorreporting_v1beta1.types import error_stats_service @@ -32,6 +33,9 @@ gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + class ErrorStatsServiceTransport(abc.ABC): """Abstract transport class for ErrorStatsService.""" diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py index e3c053d8f8df..1b7a4cc55024 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -23,6 +23,7 @@ from google.api_core import rest_helpers from google.api_core import rest_streaming from google.api_core import gapic_v1 +import google.protobuf from google.protobuf import json_format @@ -58,6 +59,9 @@ rest_version=f"requests@{requests_version}", ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + class ErrorStatsServiceRestInterceptor: """Interceptor for ErrorStatsService. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index e58ed221a8e5..33c900243e20 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -37,6 +37,7 @@ from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf try: @@ -453,5 +454,8 @@ async def __aexit__(self, exc_type, exc, tb): gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + __all__ = ("ReportErrorsServiceAsyncClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 31c8163df3e5..9dc31d29c6c4 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -45,6 +45,7 @@ from google.auth.transport.grpc import SslCredentials # type: ignore from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] @@ -860,5 +861,7 @@ def __exit__(self, type, value, traceback): gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ __all__ = ("ReportErrorsServiceClient",) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index b22d3ac0f992..31f69093ba88 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -25,6 +25,7 @@ from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +import google.protobuf from google.cloud.errorreporting_v1beta1.types import report_errors_service @@ -32,6 +33,9 @@ gapic_version=package_version.__version__ ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + class ReportErrorsServiceTransport(abc.ABC): """Abstract transport class for ReportErrorsService.""" diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py index 682387e2378e..98c63125a95d 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py @@ -23,6 +23,7 @@ from google.api_core import rest_helpers from google.api_core import rest_streaming from google.api_core import gapic_v1 +import google.protobuf from google.protobuf import json_format @@ -58,6 +59,9 @@ rest_version=f"requests@{requests_version}", ) +if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER + DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + class ReportErrorsServiceRestInterceptor: """Interceptor for ReportErrorsService. From d7a0ae44a1b583dede72eb245aa50402f1f52ff5 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 23 Jun 2025 13:25:06 -0400 Subject: [PATCH 461/467] chore(main): release 1.12.0 (#553) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- .../google-cloud-error-reporting/CHANGELOG.md | 16 ++++++++++++++++ .../cloud/error_reporting/gapic_version.py | 2 +- .../errorreporting_v1beta1/gapic_version.py | 2 +- ...gle.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index c42d93fc6118..b3960c050ab4 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.11.1" + ".": "1.12.0" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index d3385b6040e9..a09f8129cc3d 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,22 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.12.0](https://github.com/googleapis/python-error-reporting/compare/v1.11.1...v1.12.0) (2025-05-21) + + +### Features + +* Add REST Interceptors which support reading metadata ([1d120c7](https://github.com/googleapis/python-error-reporting/commit/1d120c77c73b566796b32cab017a0d4cdfa28713)) +* Add support for opt-in debug logging ([1d120c7](https://github.com/googleapis/python-error-reporting/commit/1d120c77c73b566796b32cab017a0d4cdfa28713)) + + +### Bug Fixes + +* Allow Protobuf 6.x ([#557](https://github.com/googleapis/python-error-reporting/issues/557)) ([9f8faeb](https://github.com/googleapis/python-error-reporting/commit/9f8faeba223a0e1834c0750d21b5cafdee74d327)) +* Fix typing issue with gRPC metadata when key ends in -bin ([1d120c7](https://github.com/googleapis/python-error-reporting/commit/1d120c77c73b566796b32cab017a0d4cdfa28713)) +* Remove setup.cfg configuration for creating universal wheels ([#562](https://github.com/googleapis/python-error-reporting/issues/562)) ([0738c03](https://github.com/googleapis/python-error-reporting/commit/0738c03fa4321fd29c0915da2336bf77947367ae)) +* Require proto-plus >= 1.25.0 for Python 3.13 ([#567](https://github.com/googleapis/python-error-reporting/issues/567)) ([d5cd225](https://github.com/googleapis/python-error-reporting/commit/d5cd225fd71d8b54197c4f02c30d32eb8cd24dfa)) + ## [1.11.1](https://github.com/googleapis/python-error-reporting/compare/v1.11.0...v1.11.1) (2024-09-17) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index a034d27a388b..7138f2147532 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.11.1" # {x-release-please-version} +__version__ = "1.12.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index a034d27a388b..7138f2147532 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.11.1" # {x-release-please-version} +__version__ = "1.12.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index f3b984e52976..226f387990e1 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.1.0" + "version": "1.12.0" }, "snippets": [ { From afff72f4a8d54d7edb37af84207303da6e2618c6 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Wed, 12 Nov 2025 13:44:16 -0500 Subject: [PATCH 462/467] feat: Add support for Python 3.14 (#712) Towards b/375664027 --------- Co-authored-by: Owl Bot --- .../.github/.OwlBot.lock.yaml | 3 +- .../.github/sync-repo-settings.yaml | 28 --------- .../.github/workflows/lint.yml | 2 +- .../.github/workflows/unittest.yml | 4 +- .../.kokoro/samples/python3.14/common.cfg | 60 +++++++++++++++++++ .../.kokoro/samples/python3.14/continuous.cfg | 6 ++ .../samples/python3.14/periodic-head.cfg | 11 ++++ .../.kokoro/samples/python3.14/periodic.cfg | 6 ++ .../.kokoro/samples/python3.14/presubmit.cfg | 6 ++ .../CONTRIBUTING.rst | 12 ++-- .../google-cloud-error-reporting/README.rst | 2 +- .../google-cloud-error-reporting/noxfile.py | 31 +++++----- .../google-cloud-error-reporting/owlbot.py | 1 + .../google-cloud-error-reporting/pytest.ini | 9 +++ .../google-cloud-error-reporting/setup.py | 3 + .../testing/constraints-3.14.txt | 0 16 files changed, 131 insertions(+), 53 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/common.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/continuous.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic-head.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic.cfg create mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/presubmit.cfg create mode 100644 packages/google-cloud-error-reporting/testing/constraints-3.14.txt diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml index c4e82889dc81..c58733d0c826 100644 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml @@ -13,5 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:023a21377a2a00008057f99f0118edadc30a19d1636a3fee47189ebec2f3921c -# created: 2025-03-31T16:51:40.130756953Z + digest: sha256:fbbc8db67afd8b7d71bf694c5081a32da0c528eba166fbcffb3b6e56ddf907d5 diff --git a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml b/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml deleted file mode 100644 index 1ca6d9271d9c..000000000000 --- a/packages/google-cloud-error-reporting/.github/sync-repo-settings.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# https://github.com/googleapis/repo-automation-bots/tree/main/packages/sync-repo-settings -# Rules for main branch protection -branchProtectionRules: -# Identifies the protection rule pattern. Name of the branch to be protected. -# Defaults to `main` -- pattern: main - requiresCodeOwnerReviews: true - requiresStrictStatusChecks: true - requiredStatusCheckContexts: - - 'Kokoro' - - 'cla/google' - - 'Samples - Lint' - - 'Samples - Python 3.7' - - 'Samples - Python 3.8' - - 'Samples - Python 3.9' - - 'Samples - Python 3.10' - - 'Samples - Python 3.11' - - 'Samples - Python 3.12' - - 'docs' - - 'docfx' - - 'lint' - - 'unit (3.7)' - - 'unit (3.8)' - - 'unit (3.9)' - - 'unit (3.10)' - - 'unit (3.11)' - - 'unit (3.12)' - - 'cover' diff --git a/packages/google-cloud-error-reporting/.github/workflows/lint.yml b/packages/google-cloud-error-reporting/.github/workflows/lint.yml index 4866193af2a9..3ed755f0005c 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/lint.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/lint.yml @@ -12,7 +12,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: "3.8" + python-version: "3.14" - name: Install nox run: | python -m pip install --upgrade setuptools pip wheel diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml index c66b757ced2b..cc6fe2b2fdd5 100644 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] steps: - name: Checkout uses: actions/checkout@v4 @@ -45,7 +45,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: "3.8" + python-version: "3.14" - name: Install coverage run: | python -m pip install --upgrade setuptools pip wheel diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/common.cfg new file mode 100644 index 000000000000..09f706f60795 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/common.cfg @@ -0,0 +1,60 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.14" +} + +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-314" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" + + +############################################# +# this section merged from .kokoro/common_env_vars.cfg using owlbot.py + +env_vars: { + key: "PRODUCT_AREA_LABEL" + value: "observability" +} +env_vars: { + key: "PRODUCT_LABEL" + value: "error-reporting" +} +env_vars: { + key: "LANGUAGE_LABEL" + value: "python" +} + +################################################### + diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/continuous.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic-head.cfg new file mode 100644 index 000000000000..0ab001caaf12 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic.cfg new file mode 100644 index 000000000000..71cd1e597e38 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/presubmit.cfg new file mode 100644 index 000000000000..a1c8d9759c88 --- /dev/null +++ b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/CONTRIBUTING.rst b/packages/google-cloud-error-reporting/CONTRIBUTING.rst index 5307292a2a32..222b6e01461f 100644 --- a/packages/google-cloud-error-reporting/CONTRIBUTING.rst +++ b/packages/google-cloud-error-reporting/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.7, 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13 on both UNIX and Windows. + 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 and 3.14 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system-3.8 -- -k + $ nox -s system-3.14 -- -k .. note:: - System tests are only configured to run under Python 3.8. + System tests are only configured to run under Python 3.14. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local @@ -195,11 +195,11 @@ configure them just like the System Tests. # Run all tests in a folder $ cd samples/snippets - $ nox -s py-3.8 + $ nox -s py-3.14 # Run a single sample test $ cd samples/snippets - $ nox -s py-3.8 -- -k + $ nox -s py-3.14 -- -k ******************************************** Note About ``README`` as it pertains to PyPI @@ -228,6 +228,7 @@ We support: - `Python 3.11`_ - `Python 3.12`_ - `Python 3.13`_ +- `Python 3.14`_ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ @@ -236,6 +237,7 @@ We support: .. _Python 3.11: https://docs.python.org/3.11/ .. _Python 3.12: https://docs.python.org/3.12/ .. _Python 3.13: https://docs.python.org/3.13/ +.. _Python 3.14: https://docs.python.org/3.14/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/packages/google-cloud-error-reporting/README.rst b/packages/google-cloud-error-reporting/README.rst index a1b9e25e4bf7..7a401641f6ff 100644 --- a/packages/google-cloud-error-reporting/README.rst +++ b/packages/google-cloud-error-reporting/README.rst @@ -61,7 +61,7 @@ Supported Python Versions Our client libraries are compatible with all current `active`_ and `maintenance`_ versions of Python. -Python >= 3.7 +Python >= 3.7, including 3.14 .. _active: https://devguide.python.org/devcycle/#in-development-main-branch .. _maintenance: https://devguide.python.org/devcycle/#maintenance-branches diff --git a/packages/google-cloud-error-reporting/noxfile.py b/packages/google-cloud-error-reporting/noxfile.py index bc66951c2fa9..35c5330b5465 100644 --- a/packages/google-cloud-error-reporting/noxfile.py +++ b/packages/google-cloud-error-reporting/noxfile.py @@ -32,7 +32,7 @@ ISORT_VERSION = "isort==5.11.0" LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] -DEFAULT_PYTHON_VERSION = "3.8" +DEFAULT_PYTHON_VERSION = "3.14" UNIT_TEST_PYTHON_VERSIONS: List[str] = [ "3.7", @@ -42,6 +42,7 @@ "3.11", "3.12", "3.13", + "3.14", ] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", @@ -56,7 +57,7 @@ UNIT_TEST_EXTRAS: List[str] = [] UNIT_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {} -SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.8"] +SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.14"] SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [ "mock", "pytest", @@ -71,15 +72,7 @@ CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() nox.options.sessions = [ - "unit", "system", - "cover", - "lint", - "lint_setup_py", - "blacken", - "docs", - "docfx", - "format", ] # Error if a python version is missing @@ -135,7 +128,7 @@ def format(session): @nox.session(python=DEFAULT_PYTHON_VERSION) def lint_setup_py(session): """Verify that setup.py is valid (including RST check).""" - session.install("docutils", "pygments") + session.install("docutils", "pygments", "setuptools") session.run("python", "setup.py", "check", "--restructuredtext", "--strict") @@ -175,7 +168,12 @@ def install_unittest_dependencies(session, *constraints): def unit(session, protobuf_implementation): # Install all test dependencies, then install this package in-place. - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): + if protobuf_implementation == "cpp" and session.python in ( + "3.11", + "3.12", + "3.13", + "3.14", + ): session.skip("cpp implementation is not supported in python 3.11+") constraints_path = str( @@ -375,7 +373,7 @@ def docfx(session): ) -@nox.session(python="3.13") +@nox.session(python=DEFAULT_PYTHON_VERSION) @nox.parametrize( "protobuf_implementation", ["python", "upb", "cpp"], @@ -383,7 +381,12 @@ def docfx(session): def prerelease_deps(session, protobuf_implementation): """Run all tests with prerelease versions of dependencies installed.""" - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): + if protobuf_implementation == "cpp" and session.python in ( + "3.11", + "3.12", + "3.13", + "3.14", + ): session.skip("cpp implementation is not supported in python 3.11+") # Install all dependencies diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index 0f85138849f9..c45fc6bfb757 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -56,6 +56,7 @@ cov_level=100, microgenerator=True, versions=gcp.common.detect_versions(path="./google", default_first=True), + default_python_version="3.14" ) s.move( templated_files, diff --git a/packages/google-cloud-error-reporting/pytest.ini b/packages/google-cloud-error-reporting/pytest.ini index 4166e729561a..4b0c3a7559b5 100644 --- a/packages/google-cloud-error-reporting/pytest.ini +++ b/packages/google-cloud-error-reporting/pytest.ini @@ -13,3 +13,12 @@ filterwarnings = ignore:get_mtls_endpoint_and_cert_source is deprecated.:DeprecationWarning # Remove warning once the minium supported version of google-cloud-logging is 2.x.x ignore:.*Create unlinked descriptors is going to go away. Please use get/find descriptors from generated code or query the descriptor_pool.*:DeprecationWarning + # Remove tests for `credentials_file` once support for `credentials_file` is removed in `google-auth` + ignore:The `credentials_file` argument is deprecated because of a potential security risk:DeprecationWarning + # Remove after support for Python 3.8 is dropped + ignore:You are using a non-supported Python version \(3\.8:DeprecationWarning + ignore:You are using a non-supported Python version \(3\.8:FutureWarning + # Remove after support for Python 3.9 is dropped + ignore:You are using a Python version \(3\.9:FutureWarning + # Remove after support for Python 3.10 is dropped + ignore:.*You are using a Python version \(3\.10:FutureWarning diff --git a/packages/google-cloud-error-reporting/setup.py b/packages/google-cloud-error-reporting/setup.py index 530e3c7f1ff5..c80d2b25badc 100644 --- a/packages/google-cloud-error-reporting/setup.py +++ b/packages/google-cloud-error-reporting/setup.py @@ -43,6 +43,8 @@ # 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-api-core[grpc] >= 1.34.0, <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.*", + "grpcio >= 1.33.2, < 2.0.0", + "grpcio >= 1.75.1, < 2.0.0; python_version >= '3.14'", "proto-plus >= 1.22.0, <2.0.0", "proto-plus >= 1.22.2, <2.0.0; python_version>='3.11'", "proto-plus >= 1.25.0, <2.0.0dev; python_version>='3.13'", @@ -84,6 +86,7 @@ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Operating System :: OS Independent", "Topic :: Internet", ], diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.14.txt b/packages/google-cloud-error-reporting/testing/constraints-3.14.txt new file mode 100644 index 000000000000..e69de29bb2d1 From cf7eec329778358fe73b76c90902433d9a740373 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:50:58 -0500 Subject: [PATCH 463/467] fix: Deprecate credentials_file argument (#572) - [ ] Regenerate this pull request now. BEGIN_COMMIT_OVERRIDE fix: Deprecate credentials_file argument END_COMMIT_OVERRIDE fix: Deprecate credentials_file argument chore: Update gapic-generator-python to 1.28.0 PiperOrigin-RevId: 816753840 Source-Link: https://github.com/googleapis/googleapis/commit/d06cf27a47074d1de3fde6f0ca48680a96229306 Source-Link: https://github.com/googleapis/googleapis-gen/commit/a524e7310882bbb99bfe1399b18bed328979211c Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYTUyNGU3MzEwODgyYmJiOTliZmUxMzk5YjE4YmVkMzI4OTc5MjExYyJ9 BEGIN_NESTED_COMMIT feat: Add new `BACKGROUND_CHANGE_DATA_CAPTURE`, `BACKGROUND_COLUMN_METADATA_INDEX`, and `BACKGROUND_SEARCH_INDEX_REFRESH` reservation assignment types feat: Add support for creation and modification of new reservation groups feat: Add new reservation IAM policy get/set/test methods PiperOrigin-RevId: 814816863 Source-Link: https://github.com/googleapis/googleapis/commit/2193a2bfcecb92b92aad7a4d81baa428cafd7dfd Source-Link: https://github.com/googleapis/googleapis-gen/commit/b0cf5f4c4051c9ddd7990be93ae8d008789d7286 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYjBjZjVmNGM0MDUxYzlkZGQ3OTkwYmU5M2FlOGQwMDg3ODlkNzI4NiJ9 END_NESTED_COMMIT BEGIN_NESTED_COMMIT chore: Update gapic-generator-python to 1.26.2 PiperOrigin-RevId: 802200836 Source-Link: https://github.com/googleapis/googleapis/commit/d300b151a973ce0425ae4ad07b3de957ca31bec6 Source-Link: https://github.com/googleapis/googleapis-gen/commit/a1ff0ae72ddcb68a259215d8c77661e2cdbb9b02 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYTFmZjBhZTcyZGRjYjY4YTI1OTIxNWQ4Yzc3NjYxZTJjZGJiOWIwMiJ9 END_NESTED_COMMIT BEGIN_NESTED_COMMIT chore: update Python generator version to 1.25.1 PiperOrigin-RevId: 800535761 Source-Link: https://github.com/googleapis/googleapis/commit/4cf1f99cccc014627af5e8a6c0f80a3e6ec0d268 Source-Link: https://github.com/googleapis/googleapis-gen/commit/133d25b68e712116e1c5dc71fc3eb3c5e717022a Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMTMzZDI1YjY4ZTcxMjExNmUxYzVkYzcxZmMzZWIzYzVlNzE3MDIyYSJ9 END_NESTED_COMMIT --------- Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../error_group_service/transports/base.py | 5 +-- .../error_group_service/transports/grpc.py | 8 +++-- .../transports/grpc_asyncio.py | 8 +++-- .../error_group_service/transports/rest.py | 5 +-- .../error_stats_service/transports/base.py | 5 +-- .../error_stats_service/transports/grpc.py | 8 +++-- .../transports/grpc_asyncio.py | 8 +++-- .../error_stats_service/transports/rest.py | 5 +-- .../report_errors_service/async_client.py | 16 ++++----- .../services/report_errors_service/client.py | 16 ++++----- .../report_errors_service/transports/base.py | 5 +-- .../report_errors_service/transports/grpc.py | 22 ++++++------ .../transports/grpc_asyncio.py | 22 ++++++------ .../report_errors_service/transports/rest.py | 5 +-- .../types/report_errors_service.py | 34 +++++++++---------- ....devtools.clouderrorreporting.v1beta1.json | 2 +- .../testing/constraints-3.10.txt | 2 ++ .../testing/constraints-3.11.txt | 2 ++ .../testing/constraints-3.12.txt | 2 ++ .../testing/constraints-3.13.txt | 1 + .../testing/constraints-3.14.txt | 12 +++++++ .../testing/constraints-3.9.txt | 2 ++ 22 files changed, 117 insertions(+), 78 deletions(-) diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py index 9938eaf4ed17..e079b904ebc0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/base.py @@ -68,9 +68,10 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py index 8bfab8f0f457..c208fdefa7d0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc.py @@ -152,9 +152,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. This argument is ignored if a ``channel`` instance is provided. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is ignored if a ``channel`` instance is provided. + This argument will be removed in the next major version of this library. scopes (Optional(Sequence[str])): A list of scopes. This argument is ignored if a ``channel`` instance is provided. channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]): @@ -287,9 +288,10 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py index f3186e6161b2..bc8d9be08f97 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/grpc_asyncio.py @@ -149,8 +149,9 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. @@ -201,9 +202,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. This argument is ignored if a ``channel`` instance is provided. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is ignored if a ``channel`` instance is provided. + This argument will be removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py index 526f1d7f74d5..ecbebae360d3 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_group_service/transports/rest.py @@ -239,9 +239,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if ``channel`` is provided. This argument will be + removed in the next major version of this library. scopes (Optional(Sequence[str])): A list of scopes. This argument is ignored if ``channel`` is provided. client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py index 12f6992a565a..7cc2de514e0f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/base.py @@ -67,9 +67,10 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py index 9bcb9106545e..244aba2ddac5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc.py @@ -152,9 +152,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. This argument is ignored if a ``channel`` instance is provided. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is ignored if a ``channel`` instance is provided. + This argument will be removed in the next major version of this library. scopes (Optional(Sequence[str])): A list of scopes. This argument is ignored if a ``channel`` instance is provided. channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]): @@ -287,9 +288,10 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py index a62116455ee0..892bf1e06e2a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/grpc_asyncio.py @@ -149,8 +149,9 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. @@ -201,9 +202,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. This argument is ignored if a ``channel`` instance is provided. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is ignored if a ``channel`` instance is provided. + This argument will be removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py index 1b7a4cc55024..52bde4cdbe94 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/error_stats_service/transports/rest.py @@ -308,9 +308,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if ``channel`` is provided. This argument will be + removed in the next major version of this library. scopes (Optional(Sequence[str])): A list of scopes. This argument is ignored if ``channel`` is provided. client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py index 33c900243e20..f07f862972d5 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/async_client.py @@ -314,14 +314,14 @@ async def report_error_event( Cloud Logging and can analyze log entries when all of the following are true: - - Customer-managed encryption keys (CMEK) are disabled on the - log bucket. - - The log bucket satisfies one of the following: - - - The log bucket is stored in the same project where the - logs originated. - - The logs were routed to a project, and then that project - stored those logs in a log bucket that it owns. + - Customer-managed encryption keys (CMEK) are disabled on the + log bucket. + - The log bucket satisfies one of the following: + + - The log bucket is stored in the same project where the logs + originated. + - The logs were routed to a project, and then that project + stored those logs in a log bucket that it owns. .. code-block:: python diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py index 9dc31d29c6c4..357b85b65007 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/client.py @@ -717,14 +717,14 @@ def report_error_event( Cloud Logging and can analyze log entries when all of the following are true: - - Customer-managed encryption keys (CMEK) are disabled on the - log bucket. - - The log bucket satisfies one of the following: - - - The log bucket is stored in the same project where the - logs originated. - - The logs were routed to a project, and then that project - stored those logs in a log bucket that it owns. + - Customer-managed encryption keys (CMEK) are disabled on the + log bucket. + - The log bucket satisfies one of the following: + + - The log bucket is stored in the same project where the logs + originated. + - The logs were routed to a project, and then that project + stored those logs in a log bucket that it owns. .. code-block:: python diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py index 31f69093ba88..f9599b51018e 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/base.py @@ -67,9 +67,10 @@ def __init__( credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A list of scopes. quota_project_id (Optional[str]): An optional project to use for billing and quota. diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py index 023d0f0f4f3b..2fe1f2d525aa 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc.py @@ -151,9 +151,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. This argument is ignored if a ``channel`` instance is provided. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is ignored if a ``channel`` instance is provided. + This argument will be removed in the next major version of this library. scopes (Optional(Sequence[str])): A list of scopes. This argument is ignored if a ``channel`` instance is provided. channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]): @@ -286,9 +287,10 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. @@ -343,14 +345,14 @@ def report_error_event( Cloud Logging and can analyze log entries when all of the following are true: - - Customer-managed encryption keys (CMEK) are disabled on the - log bucket. - - The log bucket satisfies one of the following: + - Customer-managed encryption keys (CMEK) are disabled on the + log bucket. + - The log bucket satisfies one of the following: - - The log bucket is stored in the same project where the - logs originated. - - The logs were routed to a project, and then that project - stored those logs in a log bucket that it owns. + - The log bucket is stored in the same project where the logs + originated. + - The logs were routed to a project, and then that project + stored those logs in a log bucket that it owns. Returns: Callable[[~.ReportErrorEventRequest], diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py index 18f942cec5d0..4f5381875af0 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/grpc_asyncio.py @@ -148,8 +148,9 @@ def create_channel( credentials identify this application to the service. If none are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. This argument will be + removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. @@ -200,9 +201,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. This argument is ignored if a ``channel`` instance is provided. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. This argument is ignored if a ``channel`` instance is provided. + This argument will be removed in the next major version of this library. scopes (Optional[Sequence[str]]): A optional list of scopes needed for this service. These are only used when credentials are not specified and are passed to :func:`google.auth.default`. @@ -351,14 +353,14 @@ def report_error_event( Cloud Logging and can analyze log entries when all of the following are true: - - Customer-managed encryption keys (CMEK) are disabled on the - log bucket. - - The log bucket satisfies one of the following: + - Customer-managed encryption keys (CMEK) are disabled on the + log bucket. + - The log bucket satisfies one of the following: - - The log bucket is stored in the same project where the - logs originated. - - The logs were routed to a project, and then that project - stored those logs in a log bucket that it owns. + - The log bucket is stored in the same project where the logs + originated. + - The logs were routed to a project, and then that project + stored those logs in a log bucket that it owns. Returns: Callable[[~.ReportErrorEventRequest], diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py index 98c63125a95d..9cebe03c5202 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/services/report_errors_service/transports/rest.py @@ -190,9 +190,10 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can + credentials_file (Optional[str]): Deprecated. A file with credentials that can be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. + This argument is ignored if ``channel`` is provided. This argument will be + removed in the next major version of this library. scopes (Optional(Sequence[str])): A list of scopes. This argument is ignored if ``channel`` is provided. client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py index ebd3385612fb..2a5072fbbc8a 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/types/report_errors_service.py @@ -91,23 +91,23 @@ class ReportedErrorEvent(proto.Message): Supported languages are Java, Python, JavaScript, Ruby, C#, PHP, and Go. Supported stack trace formats are: - - **Java**: Must be the return value of - ```Throwable.printStackTrace()`` `__. - - **Python**: Must be the return value of - ```traceback.format_exc()`` `__. - - **JavaScript**: Must be the value of - ```error.stack`` `__ - as returned by V8. - - **Ruby**: Must contain frames returned by - ```Exception.backtrace`` `__. - - **C#**: Must be the return value of - ```Exception.ToString()`` `__. - - **PHP**: Must be prefixed with - ``"PHP (Notice|Parse error|Fatal error|Warning): "`` and - contain the result of - ```(string)$exception`` `__. - - **Go**: Must be the return value of - ```runtime.Stack()`` `__. + - **Java**: Must be the return value of + ```Throwable.printStackTrace()`` `__. + - **Python**: Must be the return value of + ```traceback.format_exc()`` `__. + - **JavaScript**: Must be the value of + ```error.stack`` `__ + as returned by V8. + - **Ruby**: Must contain frames returned by + ```Exception.backtrace`` `__. + - **C#**: Must be the return value of + ```Exception.ToString()`` `__. + - **PHP**: Must be prefixed with + ``"PHP (Notice|Parse error|Fatal error|Warning): "`` and + contain the result of + ```(string)$exception`` `__. + - **Go**: Must be the return value of + ```runtime.Stack()`` `__. context (google.cloud.errorreporting_v1beta1.types.ErrorContext): Optional. A description of the context in which the error occurred. diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index 226f387990e1..ac59d81744bd 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "1.12.0" + "version": "0.0.0" }, "snippets": [ { diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.10.txt b/packages/google-cloud-error-reporting/testing/constraints-3.10.txt index ed7f9aed2559..93e6826f2af9 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.10.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.10.txt @@ -2,5 +2,7 @@ # This constraints file is required for unit tests. # List all library dependencies and extras in this file. google-api-core +google-auth +grpcio proto-plus protobuf diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.11.txt b/packages/google-cloud-error-reporting/testing/constraints-3.11.txt index ed7f9aed2559..93e6826f2af9 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.11.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.11.txt @@ -2,5 +2,7 @@ # This constraints file is required for unit tests. # List all library dependencies and extras in this file. google-api-core +google-auth +grpcio proto-plus protobuf diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.12.txt b/packages/google-cloud-error-reporting/testing/constraints-3.12.txt index ed7f9aed2559..93e6826f2af9 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.12.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.12.txt @@ -2,5 +2,7 @@ # This constraints file is required for unit tests. # List all library dependencies and extras in this file. google-api-core +google-auth +grpcio proto-plus protobuf diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.13.txt b/packages/google-cloud-error-reporting/testing/constraints-3.13.txt index c20a77817caa..1e93c60e50aa 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.13.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.13.txt @@ -7,5 +7,6 @@ # Then this file should have google-cloud-foo>=1 google-api-core>=2 google-auth>=2 +grpcio>=1 proto-plus>=1 protobuf>=6 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.14.txt b/packages/google-cloud-error-reporting/testing/constraints-3.14.txt index e69de29bb2d1..1e93c60e50aa 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.14.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.14.txt @@ -0,0 +1,12 @@ +# We use the constraints file for the latest Python version +# (currently this file) to check that the latest +# major versions of dependencies are supported in setup.py. +# List all library dependencies and extras in this file. +# Require the latest major version be installed for each dependency. +# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", +# Then this file should have google-cloud-foo>=1 +google-api-core>=2 +google-auth>=2 +grpcio>=1 +proto-plus>=1 +protobuf>=6 diff --git a/packages/google-cloud-error-reporting/testing/constraints-3.9.txt b/packages/google-cloud-error-reporting/testing/constraints-3.9.txt index ed7f9aed2559..93e6826f2af9 100644 --- a/packages/google-cloud-error-reporting/testing/constraints-3.9.txt +++ b/packages/google-cloud-error-reporting/testing/constraints-3.9.txt @@ -2,5 +2,7 @@ # This constraints file is required for unit tests. # List all library dependencies and extras in this file. google-api-core +google-auth +grpcio proto-plus protobuf From 0783a8c8ff99cce7c4f495d492852ad8c76a66f0 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:55:53 -0500 Subject: [PATCH 464/467] chore(main): release 1.13.0 (#713) :robot: I have created a release *beep* *boop* --- ## [1.13.0](https://github.com/googleapis/python-error-reporting/compare/v1.12.0...v1.13.0) (2025-11-12) ### Features * Add support for Python 3.14 ([#712](https://github.com/googleapis/python-error-reporting/issues/712)) ([e8b4762](https://github.com/googleapis/python-error-reporting/commit/e8b4762d289755377acb7c69744a347fbe6651d6)) ### Bug Fixes * Deprecate credentials_file argument ([f86c964](https://github.com/googleapis/python-error-reporting/commit/f86c964200cc16488e46fdd95ad78e7975760b53)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .../.release-please-manifest.json | 2 +- packages/google-cloud-error-reporting/CHANGELOG.md | 12 ++++++++++++ .../google/cloud/error_reporting/gapic_version.py | 2 +- .../cloud/errorreporting_v1beta1/gapic_version.py | 2 +- ..._google.devtools.clouderrorreporting.v1beta1.json | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json index b3960c050ab4..5c63354e2d3e 100644 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ b/packages/google-cloud-error-reporting/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.12.0" + ".": "1.13.0" } diff --git a/packages/google-cloud-error-reporting/CHANGELOG.md b/packages/google-cloud-error-reporting/CHANGELOG.md index a09f8129cc3d..9f9a8318fc00 100644 --- a/packages/google-cloud-error-reporting/CHANGELOG.md +++ b/packages/google-cloud-error-reporting/CHANGELOG.md @@ -4,6 +4,18 @@ [1]: https://pypi.org/project/google-cloud-error-reporting/#history +## [1.13.0](https://github.com/googleapis/python-error-reporting/compare/v1.12.0...v1.13.0) (2025-11-12) + + +### Features + +* Add support for Python 3.14 ([#712](https://github.com/googleapis/python-error-reporting/issues/712)) ([e8b4762](https://github.com/googleapis/python-error-reporting/commit/e8b4762d289755377acb7c69744a347fbe6651d6)) + + +### Bug Fixes + +* Deprecate credentials_file argument ([f86c964](https://github.com/googleapis/python-error-reporting/commit/f86c964200cc16488e46fdd95ad78e7975760b53)) + ## [1.12.0](https://github.com/googleapis/python-error-reporting/compare/v1.11.1...v1.12.0) (2025-05-21) diff --git a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py index 7138f2147532..1fc1b24be126 100644 --- a/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/error_reporting/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.12.0" # {x-release-please-version} +__version__ = "1.13.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index 7138f2147532..1fc1b24be126 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.12.0" # {x-release-please-version} +__version__ = "1.13.0" # {x-release-please-version} diff --git a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json index ac59d81744bd..1d7725315ae9 100644 --- a/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json +++ b/packages/google-cloud-error-reporting/samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-error-reporting", - "version": "0.0.0" + "version": "1.13.0" }, "snippets": [ { From dfeed55b757f3cf7d4662aefad0a086afe7f6964 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Wed, 12 Nov 2025 16:01:05 -0500 Subject: [PATCH 465/467] chore(librarian): onboard to librarian (#715) Towards https://github.com/googleapis/librarian/issues/2459 --- packages/google-cloud-error-reporting/.flake8 | 15 +- .../.github/.OwlBot.lock.yaml | 16 - .../.github/.OwlBot.yaml | 26 - .../.github/auto-approve.yml | 3 - .../.github/release-please.yml | 9 - .../generator-input/.repo-metadata.json | 18 + .../.librarian/generator-input/noxfile.py | 487 ++++++++++++++++++ .../.librarian/generator-input/owlbot.py | 76 +++ .../.librarian/generator-input/setup.py | 99 ++++ .../.librarian/state.yaml | 42 ++ .../.release-please-manifest.json | 3 - .../google-cloud-error-reporting/MANIFEST.in | 13 +- .../docs/README.rst | 198 ++++++- .../docs/_templates/layout.html | 4 +- .../errorreporting_v1beta1/gapic_version.py | 2 +- .../google-cloud-error-reporting/owlbot.py | 25 +- .../release-please-config.json | 24 - 17 files changed, 938 insertions(+), 122 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml delete mode 100644 packages/google-cloud-error-reporting/.github/.OwlBot.yaml delete mode 100644 packages/google-cloud-error-reporting/.github/auto-approve.yml delete mode 100644 packages/google-cloud-error-reporting/.github/release-please.yml create mode 100644 packages/google-cloud-error-reporting/.librarian/generator-input/.repo-metadata.json create mode 100644 packages/google-cloud-error-reporting/.librarian/generator-input/noxfile.py create mode 100644 packages/google-cloud-error-reporting/.librarian/generator-input/owlbot.py create mode 100644 packages/google-cloud-error-reporting/.librarian/generator-input/setup.py create mode 100644 packages/google-cloud-error-reporting/.librarian/state.yaml delete mode 100644 packages/google-cloud-error-reporting/.release-please-manifest.json mode change 120000 => 100644 packages/google-cloud-error-reporting/docs/README.rst delete mode 100644 packages/google-cloud-error-reporting/release-please-config.json diff --git a/packages/google-cloud-error-reporting/.flake8 b/packages/google-cloud-error-reporting/.flake8 index 32986c79287a..90316de21489 100644 --- a/packages/google-cloud-error-reporting/.flake8 +++ b/packages/google-cloud-error-reporting/.flake8 @@ -1,28 +1,29 @@ # -*- coding: utf-8 -*- -# -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# 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. - -# Generated by synthtool. DO NOT EDIT! +# [flake8] +# TODO(https://github.com/googleapis/gapic-generator-python/issues/2333): +# Resolve flake8 lint issues ignore = E203, E231, E266, E501, W503 exclude = - # Exclude generated code. - **/proto/** + # TODO(https://github.com/googleapis/gapic-generator-python/issues/2333): + # Ensure that generated code passes flake8 lint **/gapic/** **/services/** **/types/** + # Exclude Protobuf gencode *_pb2.py # Standard linting exemptions. diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml deleted file mode 100644 index c58733d0c826..000000000000 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.lock.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# 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. -docker: - image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:fbbc8db67afd8b7d71bf694c5081a32da0c528eba166fbcffb3b6e56ddf907d5 diff --git a/packages/google-cloud-error-reporting/.github/.OwlBot.yaml b/packages/google-cloud-error-reporting/.github/.OwlBot.yaml deleted file mode 100644 index 18f04683c7b3..000000000000 --- a/packages/google-cloud-error-reporting/.github/.OwlBot.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2021 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. - -docker: - image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - -deep-remove-regex: - - /owl-bot-staging - -deep-copy-regex: - - source: /google/devtools/clouderrorreporting/(v.*)/.*-py/(.*) - dest: /owl-bot-staging/$1/$2 - -begin-after-commit-hash: b06c9034cfcbce180ba732d03be6526e5c8ea1bc - diff --git a/packages/google-cloud-error-reporting/.github/auto-approve.yml b/packages/google-cloud-error-reporting/.github/auto-approve.yml deleted file mode 100644 index 311ebbb853a9..000000000000 --- a/packages/google-cloud-error-reporting/.github/auto-approve.yml +++ /dev/null @@ -1,3 +0,0 @@ -# https://github.com/googleapis/repo-automation-bots/tree/main/packages/auto-approve -processes: - - "OwlBotTemplateChanges" diff --git a/packages/google-cloud-error-reporting/.github/release-please.yml b/packages/google-cloud-error-reporting/.github/release-please.yml deleted file mode 100644 index e9a4f0085128..000000000000 --- a/packages/google-cloud-error-reporting/.github/release-please.yml +++ /dev/null @@ -1,9 +0,0 @@ -releaseType: python -handleGHRelease: true -manifest: true -# NOTE: this section is generated by synthtool.languages.python -# See https://github.com/googleapis/synthtool/blob/master/synthtool/languages/python.py -branches: -- branch: v0 - handleGHRelease: true - releaseType: python diff --git a/packages/google-cloud-error-reporting/.librarian/generator-input/.repo-metadata.json b/packages/google-cloud-error-reporting/.librarian/generator-input/.repo-metadata.json new file mode 100644 index 000000000000..e032093f28f6 --- /dev/null +++ b/packages/google-cloud-error-reporting/.librarian/generator-input/.repo-metadata.json @@ -0,0 +1,18 @@ +{ + "name": "clouderrorreporting", + "name_pretty": "Error Reporting", + "product_documentation": "https://cloud.google.com/error-reporting", + "client_documentation": "https://cloud.google.com/python/docs/reference/clouderrorreporting/latest", + "issue_tracker": "https://issuetracker.google.com/savedsearches/559780", + "release_level": "preview", + "language": "python", + "library_type": "GAPIC_COMBO", + "repo": "googleapis/python-error-reporting", + "distribution_name": "google-cloud-error-reporting", + "api_id": "clouderrorreporting.googleapis.com", + "requires_billing": false, + "codeowner_team": "@googleapis/api-logging @googleapis/api-logging-partners", + "default_version": "v1beta1", + "api_shortname": "clouderrorreporting", + "api_description": "counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management interface displays the results with sorting and filtering capabilities. A dedicated view shows the error details: time chart, occurrences, affected user count, first and last seen dates and a cleaned exception stack trace. Opt-in to receive email and mobile alerts on new errors." +} diff --git a/packages/google-cloud-error-reporting/.librarian/generator-input/noxfile.py b/packages/google-cloud-error-reporting/.librarian/generator-input/noxfile.py new file mode 100644 index 000000000000..35c5330b5465 --- /dev/null +++ b/packages/google-cloud-error-reporting/.librarian/generator-input/noxfile.py @@ -0,0 +1,487 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2024 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 +# +# https://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. + +# Generated by synthtool. DO NOT EDIT! + +from __future__ import absolute_import + +import os +import pathlib +import re +import shutil +from typing import Dict, List +import warnings + +import nox + +FLAKE8_VERSION = "flake8==6.1.0" +BLACK_VERSION = "black[jupyter]==23.7.0" +ISORT_VERSION = "isort==5.11.0" +LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] + +DEFAULT_PYTHON_VERSION = "3.14" + +UNIT_TEST_PYTHON_VERSIONS: List[str] = [ + "3.7", + "3.8", + "3.9", + "3.10", + "3.11", + "3.12", + "3.13", + "3.14", +] +UNIT_TEST_STANDARD_DEPENDENCIES = [ + "mock", + "asyncmock", + "pytest", + "pytest-cov", + "pytest-asyncio", +] +UNIT_TEST_EXTERNAL_DEPENDENCIES: List[str] = [] +UNIT_TEST_LOCAL_DEPENDENCIES: List[str] = [] +UNIT_TEST_DEPENDENCIES: List[str] = [] +UNIT_TEST_EXTRAS: List[str] = [] +UNIT_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {} + +SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.14"] +SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [ + "mock", + "pytest", + "google-cloud-testutils", +] +SYSTEM_TEST_EXTERNAL_DEPENDENCIES: List[str] = [] +SYSTEM_TEST_LOCAL_DEPENDENCIES: List[str] = [] +SYSTEM_TEST_DEPENDENCIES: List[str] = [] +SYSTEM_TEST_EXTRAS: List[str] = [] +SYSTEM_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {} + +CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() + +nox.options.sessions = [ + "system", +] + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def lint(session): + """Run linters. + + Returns a failure if the linters find linting errors or sufficiently + serious code quality issues. + """ + session.install(FLAKE8_VERSION, BLACK_VERSION) + session.run( + "black", + "--check", + *LINT_PATHS, + ) + session.run("flake8", "google", "tests") + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def blacken(session): + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + session.run( + "black", + *LINT_PATHS, + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def format(session): + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run( + "isort", + "--fss", + *LINT_PATHS, + ) + session.run( + "black", + *LINT_PATHS, + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def lint_setup_py(session): + """Verify that setup.py is valid (including RST check).""" + session.install("docutils", "pygments", "setuptools") + session.run("python", "setup.py", "check", "--restructuredtext", "--strict") + + +def install_unittest_dependencies(session, *constraints): + standard_deps = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_DEPENDENCIES + session.install(*standard_deps, *constraints) + + if UNIT_TEST_EXTERNAL_DEPENDENCIES: + warnings.warn( + "'unit_test_external_dependencies' is deprecated. Instead, please " + "use 'unit_test_dependencies' or 'unit_test_local_dependencies'.", + DeprecationWarning, + ) + session.install(*UNIT_TEST_EXTERNAL_DEPENDENCIES, *constraints) + + if UNIT_TEST_LOCAL_DEPENDENCIES: + session.install(*UNIT_TEST_LOCAL_DEPENDENCIES, *constraints) + + if UNIT_TEST_EXTRAS_BY_PYTHON: + extras = UNIT_TEST_EXTRAS_BY_PYTHON.get(session.python, []) + elif UNIT_TEST_EXTRAS: + extras = UNIT_TEST_EXTRAS + else: + extras = [] + + if extras: + session.install("-e", f".[{','.join(extras)}]", *constraints) + else: + session.install("-e", ".", *constraints) + + +@nox.session(python=UNIT_TEST_PYTHON_VERSIONS) +@nox.parametrize( + "protobuf_implementation", + ["python", "upb", "cpp"], +) +def unit(session, protobuf_implementation): + # Install all test dependencies, then install this package in-place. + + if protobuf_implementation == "cpp" and session.python in ( + "3.11", + "3.12", + "3.13", + "3.14", + ): + session.skip("cpp implementation is not supported in python 3.11+") + + constraints_path = str( + CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" + ) + install_unittest_dependencies(session, "-c", constraints_path) + + # TODO(https://github.com/googleapis/synthtool/issues/1976): + # Remove the 'cpp' implementation once support for Protobuf 3.x is dropped. + # The 'cpp' implementation requires Protobuf<4. + if protobuf_implementation == "cpp": + session.install("protobuf<4") + + # Run py.test against the unit tests. + session.run( + "py.test", + "--quiet", + f"--junitxml=unit_{session.python}_sponge_log.xml", + "--cov=google", + "--cov=tests/unit", + "--cov-append", + "--cov-config=.coveragerc", + "--cov-report=", + "--cov-fail-under=0", + os.path.join("tests", "unit"), + *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, + ) + + +def install_systemtest_dependencies(session, *constraints): + # Use pre-release gRPC for system tests. + # Exclude version 1.52.0rc1 which has a known issue. + # See https://github.com/grpc/grpc/issues/32163 + session.install("--pre", "grpcio!=1.52.0rc1") + + session.install(*SYSTEM_TEST_STANDARD_DEPENDENCIES, *constraints) + + if SYSTEM_TEST_EXTERNAL_DEPENDENCIES: + session.install(*SYSTEM_TEST_EXTERNAL_DEPENDENCIES, *constraints) + + if SYSTEM_TEST_LOCAL_DEPENDENCIES: + session.install("-e", *SYSTEM_TEST_LOCAL_DEPENDENCIES, *constraints) + + if SYSTEM_TEST_DEPENDENCIES: + session.install("-e", *SYSTEM_TEST_DEPENDENCIES, *constraints) + + if SYSTEM_TEST_EXTRAS_BY_PYTHON: + extras = SYSTEM_TEST_EXTRAS_BY_PYTHON.get(session.python, []) + elif SYSTEM_TEST_EXTRAS: + extras = SYSTEM_TEST_EXTRAS + else: + extras = [] + + if extras: + session.install("-e", f".[{','.join(extras)}]", *constraints) + else: + session.install("-e", ".", *constraints) + + +@nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS) +def system(session): + """Run the system test suite.""" + constraints_path = str( + CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" + ) + system_test_path = os.path.join("tests", "system.py") + system_test_folder_path = os.path.join("tests", "system") + + # Check the value of `RUN_SYSTEM_TESTS` env var. It defaults to true. + if os.environ.get("RUN_SYSTEM_TESTS", "true") == "false": + session.skip("RUN_SYSTEM_TESTS is set to false, skipping") + # Install pyopenssl for mTLS testing. + if os.environ.get("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") == "true": + session.install("pyopenssl") + + system_test_exists = os.path.exists(system_test_path) + system_test_folder_exists = os.path.exists(system_test_folder_path) + # Sanity check: only run tests if found. + if not system_test_exists and not system_test_folder_exists: + session.skip("System tests were not found") + + install_systemtest_dependencies(session, "-c", constraints_path) + + # Run py.test against the system tests. + if system_test_exists: + session.run( + "py.test", + "--quiet", + f"--junitxml=system_{session.python}_sponge_log.xml", + system_test_path, + *session.posargs, + ) + if system_test_folder_exists: + session.run( + "py.test", + "--quiet", + f"--junitxml=system_{session.python}_sponge_log.xml", + system_test_folder_path, + *session.posargs, + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def cover(session): + """Run the final coverage report. + + This outputs the coverage report aggregating coverage from the unit + test runs (not system test runs), and then erases coverage data. + """ + session.install("coverage", "pytest-cov") + session.run("coverage", "report", "--show-missing", "--fail-under=100") + + session.run("coverage", "erase") + + +@nox.session(python="3.10") +def docs(session): + """Build the docs for this library.""" + + session.install("-e", ".") + session.install( + # We need to pin to specific versions of the `sphinxcontrib-*` packages + # which still support sphinx 4.x. + # See https://github.com/googleapis/sphinx-docfx-yaml/issues/344 + # and https://github.com/googleapis/sphinx-docfx-yaml/issues/345. + "sphinxcontrib-applehelp==1.0.4", + "sphinxcontrib-devhelp==1.0.2", + "sphinxcontrib-htmlhelp==2.0.1", + "sphinxcontrib-qthelp==1.0.3", + "sphinxcontrib-serializinghtml==1.1.5", + "sphinx==4.5.0", + "alabaster", + "recommonmark", + ) + + shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) + session.run( + "sphinx-build", + "-W", # warnings as errors + "-T", # show full traceback on exception + "-N", # no colors + "-b", + "html", + "-d", + os.path.join("docs", "_build", "doctrees", ""), + os.path.join("docs", ""), + os.path.join("docs", "_build", "html", ""), + ) + + +@nox.session(python="3.10") +def docfx(session): + """Build the docfx yaml files for this library.""" + + session.install("-e", ".") + session.install( + # We need to pin to specific versions of the `sphinxcontrib-*` packages + # which still support sphinx 4.x. + # See https://github.com/googleapis/sphinx-docfx-yaml/issues/344 + # and https://github.com/googleapis/sphinx-docfx-yaml/issues/345. + "sphinxcontrib-applehelp==1.0.4", + "sphinxcontrib-devhelp==1.0.2", + "sphinxcontrib-htmlhelp==2.0.1", + "sphinxcontrib-qthelp==1.0.3", + "sphinxcontrib-serializinghtml==1.1.5", + "gcp-sphinx-docfx-yaml", + "alabaster", + "recommonmark", + ) + + shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) + session.run( + "sphinx-build", + "-T", # show full traceback on exception + "-N", # no colors + "-D", + ( + "extensions=sphinx.ext.autodoc," + "sphinx.ext.autosummary," + "docfx_yaml.extension," + "sphinx.ext.intersphinx," + "sphinx.ext.coverage," + "sphinx.ext.napoleon," + "sphinx.ext.todo," + "sphinx.ext.viewcode," + "recommonmark" + ), + "-b", + "html", + "-d", + os.path.join("docs", "_build", "doctrees", ""), + os.path.join("docs", ""), + os.path.join("docs", "_build", "html", ""), + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +@nox.parametrize( + "protobuf_implementation", + ["python", "upb", "cpp"], +) +def prerelease_deps(session, protobuf_implementation): + """Run all tests with prerelease versions of dependencies installed.""" + + if protobuf_implementation == "cpp" and session.python in ( + "3.11", + "3.12", + "3.13", + "3.14", + ): + session.skip("cpp implementation is not supported in python 3.11+") + + # Install all dependencies + session.install("-e", ".[all, tests, tracing]") + unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES + session.install(*unit_deps_all) + system_deps_all = ( + SYSTEM_TEST_STANDARD_DEPENDENCIES + SYSTEM_TEST_EXTERNAL_DEPENDENCIES + ) + session.install(*system_deps_all) + + # Because we test minimum dependency versions on the minimum Python + # version, the first version we test with in the unit tests sessions has a + # constraints file containing all dependencies and extras. + with open( + CURRENT_DIRECTORY + / "testing" + / f"constraints-{UNIT_TEST_PYTHON_VERSIONS[0]}.txt", + encoding="utf-8", + ) as constraints_file: + constraints_text = constraints_file.read() + + # Ignore leading whitespace and comment lines. + constraints_deps = [ + match.group(1) + for match in re.finditer( + r"^\s*(\S+)(?===\S+)", constraints_text, flags=re.MULTILINE + ) + ] + + session.install(*constraints_deps) + + prerel_deps = [ + "protobuf", + # dependency of grpc + "six", + "grpc-google-iam-v1", + "googleapis-common-protos", + "grpcio", + "grpcio-status", + "google-api-core", + "google-auth", + "proto-plus", + "google-cloud-testutils", + # dependencies of google-cloud-testutils" + "click", + ] + + for dep in prerel_deps: + session.install("--pre", "--no-deps", "--upgrade", dep) + + # Remaining dependencies + other_deps = [ + "requests", + ] + session.install(*other_deps) + + # Print out prerelease package versions + session.run( + "python", "-c", "import google.protobuf; print(google.protobuf.__version__)" + ) + session.run("python", "-c", "import grpc; print(grpc.__version__)") + session.run("python", "-c", "import google.auth; print(google.auth.__version__)") + + session.run( + "py.test", + "tests/unit", + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, + ) + + system_test_path = os.path.join("tests", "system.py") + system_test_folder_path = os.path.join("tests", "system") + + # Only run system tests if found. + if os.path.exists(system_test_path): + session.run( + "py.test", + "--verbose", + f"--junitxml=system_{session.python}_sponge_log.xml", + system_test_path, + *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, + ) + if os.path.exists(system_test_folder_path): + session.run( + "py.test", + "--verbose", + f"--junitxml=system_{session.python}_sponge_log.xml", + system_test_folder_path, + *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, + ) diff --git a/packages/google-cloud-error-reporting/.librarian/generator-input/owlbot.py b/packages/google-cloud-error-reporting/.librarian/generator-input/owlbot.py new file mode 100644 index 000000000000..76977bebf44d --- /dev/null +++ b/packages/google-cloud-error-reporting/.librarian/generator-input/owlbot.py @@ -0,0 +1,76 @@ +# Copyright 2022 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 +import os +from pathlib import Path +import shutil + +import synthtool as s +import synthtool.gcp as gcp +from synthtool.languages import python + +# ---------------------------------------------------------------------------- +# Copy the generated client from the owl-bot staging directory +# ---------------------------------------------------------------------------- + +clean_up_generated_samples = True + +# Load the default version defined in .repo-metadata.json. +default_version = json.load(open(".repo-metadata.json", "rt")).get("default_version") + +for library in s.get_staging_dirs(default_version): + if clean_up_generated_samples: + shutil.rmtree("samples/generated_samples", ignore_errors=True) + clean_up_generated_samples = False + + s.move( + [library], + excludes=[ + "docs/index.rst", + "google/cloud/errorreporting/", + "setup.py", + "testing/constraints-3.7.txt", + "testing/constraints-3.8.txt", + "noxfile.py", + ], + ) +s.remove_staging_dirs() + +# ---------------------------------------------------------------------------- +# Add templated files +# ---------------------------------------------------------------------------- + +templated_files = gcp.CommonTemplates().py_library( + cov_level=100, + microgenerator=True, + versions=gcp.common.detect_versions(path="./google", default_first=True), +) +s.move( + templated_files, + excludes=[ + ".coveragerc", + ".github/**", + ".kokoro/**", + "docs/conf.py", + "docs/index.rst", + "testing/constraints-3.7.txt", + ], +) + +python.py_samples(skip_readmes=True) + +# run format session for all directories which have a noxfile +for noxfile in Path(".").glob("**/noxfile.py"): + s.shell.run(["nox", "-s", "blacken"], cwd=noxfile.parent, hide_output=False) diff --git a/packages/google-cloud-error-reporting/.librarian/generator-input/setup.py b/packages/google-cloud-error-reporting/.librarian/generator-input/setup.py new file mode 100644 index 000000000000..c80d2b25badc --- /dev/null +++ b/packages/google-cloud-error-reporting/.librarian/generator-input/setup.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 io +import os + +import setuptools # type: ignore + +package_root = os.path.abspath(os.path.dirname(__file__)) + +name = "google-cloud-error-reporting" + + +description = "Google Cloud Error Reporting API client library" + +version = {} +with open( + os.path.join(package_root, "google/cloud/error_reporting/gapic_version.py") +) as fp: + exec(fp.read(), version) +version = version["__version__"] + +if version[0] == "0": + release_status = "Development Status :: 4 - Beta" +else: + release_status = "Development Status :: 5 - Production/Stable" + +dependencies = [ + "google-cloud-logging>=1.14.0, <4.0.0", + # Exclude incompatible versions of `google-auth` + # See https://github.com/googleapis/google-cloud-python/issues/12364 + "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "google-api-core[grpc] >= 1.34.0, <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.*", + "grpcio >= 1.33.2, < 2.0.0", + "grpcio >= 1.75.1, < 2.0.0; python_version >= '3.14'", + "proto-plus >= 1.22.0, <2.0.0", + "proto-plus >= 1.22.2, <2.0.0; python_version>='3.11'", + "proto-plus >= 1.25.0, <2.0.0dev; python_version>='3.13'", + "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", +] +url = "https://github.com/googleapis/python-error-reporting" + +package_root = os.path.abspath(os.path.dirname(__file__)) + +readme_filename = os.path.join(package_root, "README.rst") +with io.open(readme_filename, encoding="utf-8") as readme_file: + readme = readme_file.read() + +packages = [ + package + for package in setuptools.find_namespace_packages() + if package.startswith("google") +] + +setuptools.setup( + name=name, + version=version, + description=description, + long_description=readme, + author="Google LLC", + author_email="googleapis-packages@google.com", + license="Apache 2.0", + url=url, + classifiers=[ + release_status, + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Operating System :: OS Independent", + "Topic :: Internet", + ], + platforms="Posix; MacOS X; Windows", + packages=packages, + python_requires=">=3.7", + install_requires=dependencies, + include_package_data=True, + zip_safe=False, +) diff --git a/packages/google-cloud-error-reporting/.librarian/state.yaml b/packages/google-cloud-error-reporting/.librarian/state.yaml new file mode 100644 index 000000000000..b4a06d7ea840 --- /dev/null +++ b/packages/google-cloud-error-reporting/.librarian/state.yaml @@ -0,0 +1,42 @@ +image: us-central1-docker.pkg.dev/cloud-sdk-librarian-prod/images-prod/python-librarian-generator@sha256:ce48ed695c727f7e13efd1fd68f466a55a0d772c87b69158720cec39965bc8b2 +libraries: + - id: google-cloud-error-reporting + version: 1.13.0 + last_generated_commit: cf0434f4bd20618db60ddd16a1e7db2c0dfb9158 + apis: + - path: google/devtools/clouderrorreporting/v1beta1 + service_config: clouderrorreporting_v1beta1.yaml + source_roots: + - . + preserve_regex: [] + remove_regex: + - ^google/cloud/errorreporting_v1beta1 + - ^docs/_static + - ^docs/_templates + - ^docs/errorreporting_v1beta1 + - ^docs/multiprocessing.rst + - ^docs/conf.py + - ^docs/README.rst + - ^docs/summary_overview.md + - ^tests/unit/gapic + - ^tests/__init__.py + - ^tests/unit/__init__.py + - ^.coveragerc + - ^.flake8 + - ^.pre-commit-config.yaml + - ^.repo-metadata.json + - ^.trampolinerc + - ^LICENSE + - ^MANIFEST.in + - ^README.rst + - ^SECURITY.md + - ^mypy.ini + - ^noxfile.py + - ^owlbot.py + - ^renovate.json + - ^samples/generated_samples + - ^scripts/fixup_ + - ^setup.py + - ^testing/constraints-3.9 + - ^testing/constraints-3.1 + tag_format: v{version} diff --git a/packages/google-cloud-error-reporting/.release-please-manifest.json b/packages/google-cloud-error-reporting/.release-please-manifest.json deleted file mode 100644 index 5c63354e2d3e..000000000000 --- a/packages/google-cloud-error-reporting/.release-please-manifest.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - ".": "1.13.0" -} diff --git a/packages/google-cloud-error-reporting/MANIFEST.in b/packages/google-cloud-error-reporting/MANIFEST.in index d6814cd60037..dae249ec8976 100644 --- a/packages/google-cloud-error-reporting/MANIFEST.in +++ b/packages/google-cloud-error-reporting/MANIFEST.in @@ -1,25 +1,20 @@ # -*- coding: utf-8 -*- -# -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# 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. - -# Generated by synthtool. DO NOT EDIT! +# include README.rst LICENSE -recursive-include google *.json *.proto py.typed +recursive-include google *.py *.pyi *.json *.proto py.typed recursive-include tests * global-exclude *.py[co] global-exclude __pycache__ - -# Exclude scripts for samples readmegen -prune scripts/readme-gen diff --git a/packages/google-cloud-error-reporting/docs/README.rst b/packages/google-cloud-error-reporting/docs/README.rst deleted file mode 120000 index 89a0106941ff..000000000000 --- a/packages/google-cloud-error-reporting/docs/README.rst +++ /dev/null @@ -1 +0,0 @@ -../README.rst \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/docs/README.rst b/packages/google-cloud-error-reporting/docs/README.rst new file mode 100644 index 000000000000..7a401641f6ff --- /dev/null +++ b/packages/google-cloud-error-reporting/docs/README.rst @@ -0,0 +1,197 @@ +Python Client for Error Reporting API +===================================== + +|preview| |pypi| |versions| + +`Error Reporting API`_: counts, analyzes and aggregates the crashes in your running cloud services. A centralized error management interface displays the results with sorting and filtering capabilities. A dedicated view shows the error details: time chart, occurrences, affected user count, first and last seen dates and a cleaned exception stack trace. Opt-in to receive email and mobile alerts on new errors. + +- `Client Library Documentation`_ +- `Product Documentation`_ + +.. |preview| image:: https://img.shields.io/badge/support-preview-orange.svg + :target: https://github.com/googleapis/google-cloud-python/blob/main/README.rst#stability-levels +.. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-error-reporting.svg + :target: https://pypi.org/project/google-cloud-error-reporting/ +.. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-error-reporting.svg + :target: https://pypi.org/project/google-cloud-error-reporting/ +.. _Error Reporting API: https://cloud.google.com/error-reporting +.. _Client Library Documentation: https://cloud.google.com/python/docs/reference/clouderrorreporting/latest/summary_overview +.. _Product Documentation: https://cloud.google.com/error-reporting + +Quick Start +----------- + +In order to use this library, you first need to go through the following steps: + +1. `Select or create a Cloud Platform project.`_ +2. `Enable billing for your project.`_ +3. `Enable the Error Reporting API.`_ +4. `Set up Authentication.`_ + +.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project +.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project +.. _Enable the Error Reporting API.: https://cloud.google.com/error-reporting +.. _Set up Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html + +Installation +~~~~~~~~~~~~ + +Install this library in a virtual environment using `venv`_. `venv`_ is a tool that +creates isolated Python environments. These isolated environments can have separate +versions of Python packages, which allows you to isolate one project's dependencies +from the dependencies of other projects. + +With `venv`_, it's possible to install this library without needing system +install permissions, and without clashing with the installed system +dependencies. + +.. _`venv`: https://docs.python.org/3/library/venv.html + + +Code samples and snippets +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Code samples and snippets live in the `samples/`_ folder. + +.. _samples/: https://github.com/googleapis/python-error-reporting/tree/main/samples + + +Supported Python Versions +^^^^^^^^^^^^^^^^^^^^^^^^^ +Our client libraries are compatible with all current `active`_ and `maintenance`_ versions of +Python. + +Python >= 3.7, including 3.14 + +.. _active: https://devguide.python.org/devcycle/#in-development-main-branch +.. _maintenance: https://devguide.python.org/devcycle/#maintenance-branches + +Unsupported Python Versions +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Python <= 3.6 + +If you are using an `end-of-life`_ +version of Python, we recommend that you update as soon as possible to an actively supported version. + +.. _end-of-life: https://devguide.python.org/devcycle/#end-of-life-branches + +Mac/Linux +^^^^^^^^^ + +.. code-block:: console + + python3 -m venv + source /bin/activate + pip install google-cloud-error-reporting + + +Windows +^^^^^^^ + +.. code-block:: console + + py -m venv + .\\Scripts\activate + pip install google-cloud-error-reporting + +Next Steps +~~~~~~~~~~ + +- Read the `Client Library Documentation`_ for Error Reporting API + to see other available methods on the client. +- Read the `Error Reporting API Product documentation`_ to learn + more about the product and see How-to Guides. +- View this `README`_ to see the full list of Cloud + APIs that we cover. + +.. _Error Reporting API Product documentation: https://cloud.google.com/error-reporting +.. _README: https://github.com/googleapis/google-cloud-python/blob/main/README.rst + +Logging +------- + +This library uses the standard Python :code:`logging` functionality to log some RPC events that could be of interest for debugging and monitoring purposes. +Note the following: + +#. Logs may contain sensitive information. Take care to **restrict access to the logs** if they are saved, whether it be on local storage or on Google Cloud Logging. +#. Google may refine the occurrence, level, and content of various log messages in this library without flagging such changes as breaking. **Do not depend on immutability of the logging events**. +#. By default, the logging events from this library are not handled. You must **explicitly configure log handling** using one of the mechanisms below. + +Simple, environment-based configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To enable logging for this library without any changes in your code, set the :code:`GOOGLE_SDK_PYTHON_LOGGING_SCOPE` environment variable to a valid Google +logging scope. This configures handling of logging events (at level :code:`logging.DEBUG` or higher) from this library in a default manner, emitting the logged +messages in a structured format. It does not currently allow customizing the logging levels captured nor the handlers, formatters, etc. used for any logging +event. + +A logging scope is a period-separated namespace that begins with :code:`google`, identifying the Python module or package to log. + +- Valid logging scopes: :code:`google`, :code:`google.cloud.asset.v1`, :code:`google.api`, :code:`google.auth`, etc. +- Invalid logging scopes: :code:`foo`, :code:`123`, etc. + +**NOTE**: If the logging scope is invalid, the library does not set up any logging handlers. + +Environment-Based Examples +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Enabling the default handler for all Google-based loggers + +.. code-block:: console + + export GOOGLE_SDK_PYTHON_LOGGING_SCOPE=google + +- Enabling the default handler for a specific Google module (for a client library called :code:`library_v1`): + +.. code-block:: console + + export GOOGLE_SDK_PYTHON_LOGGING_SCOPE=google.cloud.library_v1 + + +Advanced, code-based configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also configure a valid logging scope using Python's standard `logging` mechanism. + +Code-Based Examples +^^^^^^^^^^^^^^^^^^^ + +- Configuring a handler for all Google-based loggers + +.. code-block:: python + + import logging + + from google.cloud import library_v1 + + base_logger = logging.getLogger("google") + base_logger.addHandler(logging.StreamHandler()) + base_logger.setLevel(logging.DEBUG) + +- Configuring a handler for a specific Google module (for a client library called :code:`library_v1`): + +.. code-block:: python + + import logging + + from google.cloud import library_v1 + + base_logger = logging.getLogger("google.cloud.library_v1") + base_logger.addHandler(logging.StreamHandler()) + base_logger.setLevel(logging.DEBUG) + +Logging details +~~~~~~~~~~~~~~~ + +#. Regardless of which of the mechanisms above you use to configure logging for this library, by default logging events are not propagated up to the root + logger from the `google`-level logger. If you need the events to be propagated to the root logger, you must explicitly set + :code:`logging.getLogger("google").propagate = True` in your code. +#. You can mix the different logging configurations above for different Google modules. For example, you may want use a code-based logging configuration for + one library, but decide you need to also set up environment-based logging configuration for another library. + + #. If you attempt to use both code-based and environment-based configuration for the same module, the environment-based configuration will be ineffectual + if the code -based configuration gets applied first. + +#. The Google-specific logging configurations (default handlers for environment-based configuration; not propagating logging events to the root logger) get + executed the first time *any* client library is instantiated in your application, and only if the affected loggers have not been previously configured. + (This is the reason for 2.i. above.) diff --git a/packages/google-cloud-error-reporting/docs/_templates/layout.html b/packages/google-cloud-error-reporting/docs/_templates/layout.html index 6316a537f72b..95e9c77fcfe1 100644 --- a/packages/google-cloud-error-reporting/docs/_templates/layout.html +++ b/packages/google-cloud-error-reporting/docs/_templates/layout.html @@ -20,8 +20,8 @@ {% endblock %}
-
- As of January 1, 2020 this library no longer supports Python 2 on the latest released version. +
+ As of January 1, 2020 this library no longer supports Python 2 on the latest released version. Library versions released prior to that date will continue to be available. For more information please visit Python 2 support on Google Cloud.
diff --git a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py index 1fc1b24be126..4cccf7714f7f 100644 --- a/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py +++ b/packages/google-cloud-error-reporting/google/cloud/errorreporting_v1beta1/gapic_version.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py index c45fc6bfb757..76977bebf44d 100644 --- a/packages/google-cloud-error-reporting/owlbot.py +++ b/packages/google-cloud-error-reporting/owlbot.py @@ -38,12 +38,12 @@ s.move( [library], excludes=[ - "**/gapic_version.py", "docs/index.rst", "google/cloud/errorreporting/", "setup.py", "testing/constraints-3.7.txt", "testing/constraints-3.8.txt", + "noxfile.py", ], ) s.remove_staging_dirs() @@ -56,14 +56,14 @@ cov_level=100, microgenerator=True, versions=gcp.common.detect_versions(path="./google", default_first=True), - default_python_version="3.14" ) s.move( templated_files, excludes=[ ".coveragerc", - ".github/release-please.yml", - ".github/auto-label.yaml", + ".github/**", + ".kokoro/**", + "docs/conf.py", "docs/index.rst", "testing/constraints-3.7.txt", ], @@ -74,20 +74,3 @@ # run format session for all directories which have a noxfile for noxfile in Path(".").glob("**/noxfile.py"): s.shell.run(["nox", "-s", "blacken"], cwd=noxfile.parent, hide_output=False) - -# -------------------------------------------------------------------------- -# Modify test configs -# -------------------------------------------------------------------------- - -# add shared environment variables to test configs -tracked_subdirs = ["continuous", "presubmit", "samples"] -for subdir in tracked_subdirs: - for path, subdirs, files in os.walk(f".kokoro/{subdir}"): - for name in files: - if name == "common.cfg": - file_path = os.path.join(path, name) - s.move( - ".kokoro/common_env_vars.cfg", - file_path, - merge=lambda src, dst, _,: f"{dst}\n{src}", - ) diff --git a/packages/google-cloud-error-reporting/release-please-config.json b/packages/google-cloud-error-reporting/release-please-config.json deleted file mode 100644 index 27b697b95541..000000000000 --- a/packages/google-cloud-error-reporting/release-please-config.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "packages": { - ".": { - "release-type": "python", - "extra-files": [ - "google/cloud/error_reporting/gapic_version.py", - "google/cloud/errorreporting_v1beta1/gapic_version.py", - { - "type": "json", - "path": "samples/generated_samples/snippet_metadata_google.devtools.clouderrorreporting.v1beta1.json", - "jsonpath": "$.clientLibrary.version" - } - ] - } - }, - "release-type": "python", - "plugins": [ - { - "type": "sentence-case" - } - ], - "initial-version": "0.1.0" -} From b2b98a9351b57209ad9294f1493bb96745043750 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Mon, 24 Nov 2025 22:44:07 +0000 Subject: [PATCH 466/467] Trigger owlbot post-processor --- .../google-cloud-error-reporting/google-cloud-error-reporting.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 owl-bot-staging/google-cloud-error-reporting/google-cloud-error-reporting/google-cloud-error-reporting.txt diff --git a/owl-bot-staging/google-cloud-error-reporting/google-cloud-error-reporting/google-cloud-error-reporting.txt b/owl-bot-staging/google-cloud-error-reporting/google-cloud-error-reporting/google-cloud-error-reporting.txt new file mode 100644 index 000000000000..e69de29bb2d1 From 72e4c8a44772d1f9a9a8a57c7b63686090a6d263 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Mon, 24 Nov 2025 22:44:14 +0000 Subject: [PATCH 467/467] build: google-cloud-error-reporting migration: adjust owlbot-related files --- .../.github/CODEOWNERS | 12 - .../.github/CONTRIBUTING.md | 28 - .../.github/ISSUE_TEMPLATE/bug_report.md | 43 -- .../.github/ISSUE_TEMPLATE/feature_request.md | 18 - .../.github/ISSUE_TEMPLATE/support_request.md | 7 - .../.github/PULL_REQUEST_TEMPLATE.md | 7 - .../.github/auto-label.yaml | 19 - .../.github/blunderbuss.yml | 20 - .../.github/flakybot.yaml | 15 - .../.github/header-checker-lint.yml | 15 - .../.github/release-trigger.yml | 2 - .../.github/snippet-bot.yml | 0 .../.github/workflows/docs.yml | 38 -- .../.github/workflows/lint.yml | 25 - .../.github/workflows/unittest.yml | 61 --- .../.kokoro/build.sh | 60 --- .../.kokoro/common_env_vars.cfg | 19 - .../.kokoro/continuous/common.cfg | 47 -- .../.kokoro/continuous/continuous.cfg | 1 - .../.kokoro/continuous/prerelease-deps.cfg | 7 - .../.kokoro/populate-secrets.sh | 43 -- .../.kokoro/presubmit/common.cfg | 47 -- .../.kokoro/presubmit/prerelease-deps.cfg | 7 - .../.kokoro/presubmit/presubmit.cfg | 1 - .../.kokoro/samples/lint/common.cfg | 53 -- .../.kokoro/samples/lint/continuous.cfg | 6 - .../.kokoro/samples/lint/periodic.cfg | 6 - .../.kokoro/samples/lint/presubmit.cfg | 6 - .../.kokoro/samples/python3.10/common.cfg | 59 --- .../.kokoro/samples/python3.10/continuous.cfg | 6 - .../samples/python3.10/periodic-head.cfg | 11 - .../.kokoro/samples/python3.10/periodic.cfg | 6 - .../.kokoro/samples/python3.10/presubmit.cfg | 6 - .../.kokoro/samples/python3.11/common.cfg | 59 --- .../.kokoro/samples/python3.11/continuous.cfg | 6 - .../samples/python3.11/periodic-head.cfg | 11 - .../.kokoro/samples/python3.11/periodic.cfg | 6 - .../.kokoro/samples/python3.11/presubmit.cfg | 6 - .../.kokoro/samples/python3.12/common.cfg | 59 --- .../.kokoro/samples/python3.12/continuous.cfg | 6 - .../samples/python3.12/periodic-head.cfg | 11 - .../.kokoro/samples/python3.12/periodic.cfg | 6 - .../.kokoro/samples/python3.12/presubmit.cfg | 6 - .../.kokoro/samples/python3.13/common.cfg | 60 --- .../.kokoro/samples/python3.13/continuous.cfg | 6 - .../samples/python3.13/periodic-head.cfg | 11 - .../.kokoro/samples/python3.13/periodic.cfg | 6 - .../.kokoro/samples/python3.13/presubmit.cfg | 6 - .../.kokoro/samples/python3.14/common.cfg | 60 --- .../.kokoro/samples/python3.14/continuous.cfg | 6 - .../samples/python3.14/periodic-head.cfg | 11 - .../.kokoro/samples/python3.14/periodic.cfg | 6 - .../.kokoro/samples/python3.14/presubmit.cfg | 6 - .../.kokoro/samples/python3.7/common.cfg | 59 --- .../.kokoro/samples/python3.7/continuous.cfg | 6 - .../samples/python3.7/periodic-head.cfg | 11 - .../.kokoro/samples/python3.7/periodic.cfg | 6 - .../.kokoro/samples/python3.7/presubmit.cfg | 6 - .../.kokoro/samples/python3.8/common.cfg | 59 --- .../.kokoro/samples/python3.8/continuous.cfg | 6 - .../samples/python3.8/periodic-head.cfg | 11 - .../.kokoro/samples/python3.8/periodic.cfg | 6 - .../.kokoro/samples/python3.8/presubmit.cfg | 6 - .../.kokoro/samples/python3.9/common.cfg | 59 --- .../.kokoro/samples/python3.9/continuous.cfg | 6 - .../samples/python3.9/periodic-head.cfg | 11 - .../.kokoro/samples/python3.9/periodic.cfg | 6 - .../.kokoro/samples/python3.9/presubmit.cfg | 6 - .../.kokoro/test-samples-against-head.sh | 26 - .../.kokoro/test-samples-impl.sh | 103 ---- .../.kokoro/test-samples.sh | 44 -- .../.kokoro/trampoline.sh | 28 - .../.kokoro/trampoline_v2.sh | 487 ------------------ .../.trampolinerc | 61 --- .../docs/changelog.md | 1 - .../google-cloud-error-reporting/owlbot.py | 76 --- 76 files changed, 2145 deletions(-) delete mode 100644 packages/google-cloud-error-reporting/.github/CODEOWNERS delete mode 100644 packages/google-cloud-error-reporting/.github/CONTRIBUTING.md delete mode 100644 packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/support_request.md delete mode 100644 packages/google-cloud-error-reporting/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 packages/google-cloud-error-reporting/.github/auto-label.yaml delete mode 100644 packages/google-cloud-error-reporting/.github/blunderbuss.yml delete mode 100644 packages/google-cloud-error-reporting/.github/flakybot.yaml delete mode 100644 packages/google-cloud-error-reporting/.github/header-checker-lint.yml delete mode 100644 packages/google-cloud-error-reporting/.github/release-trigger.yml delete mode 100644 packages/google-cloud-error-reporting/.github/snippet-bot.yml delete mode 100644 packages/google-cloud-error-reporting/.github/workflows/docs.yml delete mode 100644 packages/google-cloud-error-reporting/.github/workflows/lint.yml delete mode 100644 packages/google-cloud-error-reporting/.github/workflows/unittest.yml delete mode 100755 packages/google-cloud-error-reporting/.kokoro/build.sh delete mode 100644 packages/google-cloud-error-reporting/.kokoro/common_env_vars.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/continuous/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/continuous/prerelease-deps.cfg delete mode 100755 packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh delete mode 100644 packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/presubmit/prerelease-deps.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/presubmit/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/lint/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/lint/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/lint/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.10/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.11/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.12/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.13/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.14/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.7/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.8/presubmit.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/continuous.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg delete mode 100644 packages/google-cloud-error-reporting/.kokoro/samples/python3.9/presubmit.cfg delete mode 100755 packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh delete mode 100755 packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh delete mode 100755 packages/google-cloud-error-reporting/.kokoro/test-samples.sh delete mode 100755 packages/google-cloud-error-reporting/.kokoro/trampoline.sh delete mode 100755 packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh delete mode 100644 packages/google-cloud-error-reporting/.trampolinerc delete mode 120000 packages/google-cloud-error-reporting/docs/changelog.md delete mode 100644 packages/google-cloud-error-reporting/owlbot.py diff --git a/packages/google-cloud-error-reporting/.github/CODEOWNERS b/packages/google-cloud-error-reporting/.github/CODEOWNERS deleted file mode 100644 index 0738e11eea58..000000000000 --- a/packages/google-cloud-error-reporting/.github/CODEOWNERS +++ /dev/null @@ -1,12 +0,0 @@ -# Code owners file. -# This file controls who is tagged for review for any given pull request. -# -# For syntax help see: -# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax -# Note: This file is autogenerated. To make changes to the codeowner team, please update .repo-metadata.json. - -# @googleapis/yoshi-python @googleapis/api-logging @googleapis/api-logging-partners are the default owners for changes in this repo -* @googleapis/yoshi-python @googleapis/api-logging @googleapis/api-logging-partners - -# @googleapis/python-samples-reviewers @googleapis/api-logging @googleapis/api-logging-partners are the default owners for samples changes -/samples/ @googleapis/python-samples-reviewers @googleapis/api-logging @googleapis/api-logging-partners diff --git a/packages/google-cloud-error-reporting/.github/CONTRIBUTING.md b/packages/google-cloud-error-reporting/.github/CONTRIBUTING.md deleted file mode 100644 index 939e5341e74d..000000000000 --- a/packages/google-cloud-error-reporting/.github/CONTRIBUTING.md +++ /dev/null @@ -1,28 +0,0 @@ -# How to Contribute - -We'd love to accept your patches and contributions to this project. There are -just a few small guidelines you need to follow. - -## Contributor License Agreement - -Contributions to this project must be accompanied by a Contributor License -Agreement. You (or your employer) retain the copyright to your contribution; -this simply gives us permission to use and redistribute your contributions as -part of the project. Head over to to see -your current agreements on file or to sign a new one. - -You generally only need to submit a CLA once, so if you've already submitted one -(even if it was for a different project), you probably don't need to do it -again. - -## Code reviews - -All submissions, including submissions by project members, require review. We -use GitHub pull requests for this purpose. Consult -[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more -information on using pull requests. - -## Community Guidelines - -This project follows [Google's Open Source Community -Guidelines](https://opensource.google.com/conduct/). diff --git a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index fcbad57eda9b..000000000000 --- a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve - ---- - -Thanks for stopping by to let us know something could be better! - -**PLEASE READ**: If you have a support contract with Google, please create an issue in the [support console](https://cloud.google.com/support/) instead of filing on GitHub. This will ensure a timely response. - -Please run down the following list and make sure you've tried the usual "quick fixes": - - - Search the issues already opened: https://github.com/googleapis/python-error-reporting/issues - - Search StackOverflow: https://stackoverflow.com/questions/tagged/google-cloud-platform+python - -If you are still having issues, please be sure to include as much information as possible: - -#### Environment details - - - OS type and version: - - Python version: `python --version` - - pip version: `pip --version` - - `google-cloud-error-reporting` version: `pip show google-cloud-error-reporting` - -#### Steps to reproduce - - 1. ? - 2. ? - -#### Code example - -```python -# example -``` - -#### Stack trace -``` -# example -``` - -Making sure to follow these steps will guarantee the quickest resolution possible. - -Thanks! diff --git a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/feature_request.md b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 6365857f33c6..000000000000 --- a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this library - ---- - -Thanks for stopping by to let us know something could be better! - -**PLEASE READ**: If you have a support contract with Google, please create an issue in the [support console](https://cloud.google.com/support/) instead of filing on GitHub. This will ensure a timely response. - - **Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - **Describe the solution you'd like** -A clear and concise description of what you want to happen. - **Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - **Additional context** -Add any other context or screenshots about the feature request here. diff --git a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/support_request.md b/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/support_request.md deleted file mode 100644 index 995869032125..000000000000 --- a/packages/google-cloud-error-reporting/.github/ISSUE_TEMPLATE/support_request.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Support request -about: If you have a support contract with Google, please create an issue in the Google Cloud Support console. - ---- - -**PLEASE READ**: If you have a support contract with Google, please create an issue in the [support console](https://cloud.google.com/support/) instead of filing on GitHub. This will ensure a timely response. diff --git a/packages/google-cloud-error-reporting/.github/PULL_REQUEST_TEMPLATE.md b/packages/google-cloud-error-reporting/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 5884ea526e9a..000000000000 --- a/packages/google-cloud-error-reporting/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ -Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: -- [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-error-reporting/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea -- [ ] Ensure the tests and linter pass -- [ ] Code coverage does not decrease (if any source code was changed) -- [ ] Appropriate docs were updated (if necessary) - -Fixes # 🦕 diff --git a/packages/google-cloud-error-reporting/.github/auto-label.yaml b/packages/google-cloud-error-reporting/.github/auto-label.yaml deleted file mode 100644 index ccad49b4ebfb..000000000000 --- a/packages/google-cloud-error-reporting/.github/auto-label.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2022 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. -requestsize: - enabled: true -staleness: - pullrequest: true - old: 30 - extraold: 60 diff --git a/packages/google-cloud-error-reporting/.github/blunderbuss.yml b/packages/google-cloud-error-reporting/.github/blunderbuss.yml deleted file mode 100644 index d5f69b10a4ef..000000000000 --- a/packages/google-cloud-error-reporting/.github/blunderbuss.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Blunderbuss config -# -# This file controls who is assigned for pull requests and issues. -# Note: This file is autogenerated. To make changes to the assignee -# team, please update `codeowner_team` in `.repo-metadata.json`. -assign_issues: - - googleapis/api-logging - - googleapis/api-logging-partners - -assign_issues_by: - - labels: - - "samples" - to: - - googleapis/python-samples-reviewers - - googleapis/api-logging - - googleapis/api-logging-partners - -assign_prs: - - googleapis/api-logging - - googleapis/api-logging-partners diff --git a/packages/google-cloud-error-reporting/.github/flakybot.yaml b/packages/google-cloud-error-reporting/.github/flakybot.yaml deleted file mode 100644 index 2159a1bca569..000000000000 --- a/packages/google-cloud-error-reporting/.github/flakybot.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2024 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. - -issuePriority: p2 \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.github/header-checker-lint.yml b/packages/google-cloud-error-reporting/.github/header-checker-lint.yml deleted file mode 100644 index 6fe78aa7987a..000000000000 --- a/packages/google-cloud-error-reporting/.github/header-checker-lint.yml +++ /dev/null @@ -1,15 +0,0 @@ -{"allowedCopyrightHolders": ["Google LLC"], - "allowedLicenses": ["Apache-2.0", "MIT", "BSD-3"], - "ignoreFiles": ["**/requirements.txt", "**/requirements-test.txt", "**/__init__.py", "samples/**/constraints.txt", "samples/**/constraints-test.txt"], - "sourceFileExtensions": [ - "ts", - "js", - "java", - "sh", - "Dockerfile", - "yaml", - "py", - "html", - "txt" - ] -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.github/release-trigger.yml b/packages/google-cloud-error-reporting/.github/release-trigger.yml deleted file mode 100644 index c1b200964d0f..000000000000 --- a/packages/google-cloud-error-reporting/.github/release-trigger.yml +++ /dev/null @@ -1,2 +0,0 @@ -enabled: true -multiScmName: python-error-reporting diff --git a/packages/google-cloud-error-reporting/.github/snippet-bot.yml b/packages/google-cloud-error-reporting/.github/snippet-bot.yml deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/google-cloud-error-reporting/.github/workflows/docs.yml b/packages/google-cloud-error-reporting/.github/workflows/docs.yml deleted file mode 100644 index 2833fe98fff0..000000000000 --- a/packages/google-cloud-error-reporting/.github/workflows/docs.yml +++ /dev/null @@ -1,38 +0,0 @@ -on: - pull_request: - branches: - - main -name: docs -jobs: - docs: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.10" - - name: Install nox - run: | - python -m pip install --upgrade setuptools pip wheel - python -m pip install nox - - name: Run docs - run: | - nox -s docs - docfx: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.10" - - name: Install nox - run: | - python -m pip install --upgrade setuptools pip wheel - python -m pip install nox - - name: Run docfx - run: | - nox -s docfx diff --git a/packages/google-cloud-error-reporting/.github/workflows/lint.yml b/packages/google-cloud-error-reporting/.github/workflows/lint.yml deleted file mode 100644 index 3ed755f0005c..000000000000 --- a/packages/google-cloud-error-reporting/.github/workflows/lint.yml +++ /dev/null @@ -1,25 +0,0 @@ -on: - pull_request: - branches: - - main -name: lint -jobs: - lint: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.14" - - name: Install nox - run: | - python -m pip install --upgrade setuptools pip wheel - python -m pip install nox - - name: Run lint - run: | - nox -s lint - - name: Run lint_setup_py - run: | - nox -s lint_setup_py diff --git a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml b/packages/google-cloud-error-reporting/.github/workflows/unittest.yml deleted file mode 100644 index cc6fe2b2fdd5..000000000000 --- a/packages/google-cloud-error-reporting/.github/workflows/unittest.yml +++ /dev/null @@ -1,61 +0,0 @@ -on: - pull_request: - branches: - - main -name: unittest -jobs: - unit: - # TODO(https://github.com/googleapis/gapic-generator-python/issues/2303): use `ubuntu-latest` once this bug is fixed. - # Use ubuntu-22.04 until Python 3.7 is removed from the test matrix - # https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories - runs-on: ubuntu-22.04 - strategy: - matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python }} - - name: Install nox - run: | - python -m pip install --upgrade setuptools pip wheel - python -m pip install nox - - name: Run unit tests - env: - COVERAGE_FILE: .coverage-${{ matrix.python }} - run: | - nox -s unit-${{ matrix.python }} - - name: Upload coverage results - uses: actions/upload-artifact@v4 - with: - name: coverage-artifact-${{ matrix.python }} - path: .coverage-${{ matrix.python }} - include-hidden-files: true - - cover: - runs-on: ubuntu-latest - needs: - - unit - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.14" - - name: Install coverage - run: | - python -m pip install --upgrade setuptools pip wheel - python -m pip install coverage - - name: Download coverage results - uses: actions/download-artifact@v4 - with: - path: .coverage-results/ - - name: Report coverage results - run: | - find .coverage-results -type f -name '*.zip' -exec unzip {} \; - coverage combine .coverage-results/**/.coverage* - coverage report --show-missing --fail-under=100 diff --git a/packages/google-cloud-error-reporting/.kokoro/build.sh b/packages/google-cloud-error-reporting/.kokoro/build.sh deleted file mode 100755 index d41b45aa1dd0..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/build.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# Copyright 2024 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 -# -# https://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. - -set -eo pipefail - -CURRENT_DIR=$(dirname "${BASH_SOURCE[0]}") - -if [[ -z "${PROJECT_ROOT:-}" ]]; then - PROJECT_ROOT=$(realpath "${CURRENT_DIR}/..") -fi - -pushd "${PROJECT_ROOT}" - -# Disable buffering, so that the logs stream through. -export PYTHONUNBUFFERED=1 - -# Debug: show build environment -env | grep KOKORO - -# Setup service account credentials. -if [[ -f "${KOKORO_GFILE_DIR}/service-account.json" ]] -then - export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/service-account.json -fi - -# Setup project id. -if [[ -f "${KOKORO_GFILE_DIR}/project-id.json" ]] -then - export PROJECT_ID=$(cat "${KOKORO_GFILE_DIR}/project-id.json") -fi - -# If this is a continuous build, send the test log to the FlakyBot. -# See https://github.com/googleapis/repo-automation-bots/tree/main/packages/flakybot. -if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"continuous"* ]]; then - cleanup() { - chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot - $KOKORO_GFILE_DIR/linux_amd64/flakybot - } - trap cleanup EXIT HUP -fi - -# If NOX_SESSION is set, it only runs the specified session, -# otherwise run all the sessions. -if [[ -n "${NOX_SESSION:-}" ]]; then - python3 -m nox -s ${NOX_SESSION:-} -else - python3 -m nox -fi diff --git a/packages/google-cloud-error-reporting/.kokoro/common_env_vars.cfg b/packages/google-cloud-error-reporting/.kokoro/common_env_vars.cfg deleted file mode 100644 index b5c22b802bf1..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/common_env_vars.cfg +++ /dev/null @@ -1,19 +0,0 @@ - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg b/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg deleted file mode 100644 index c337b6d8293e..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/continuous/common.cfg +++ /dev/null @@ -1,47 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Download resources for system tests (service account key, etc.) -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/google-cloud-python" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" -} -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/build.sh" -} - - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/continuous/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/continuous/continuous.cfg deleted file mode 100644 index 8f43917d92fe..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/continuous/continuous.cfg +++ /dev/null @@ -1 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/continuous/prerelease-deps.cfg b/packages/google-cloud-error-reporting/.kokoro/continuous/prerelease-deps.cfg deleted file mode 100644 index 3595fb43f5c0..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/continuous/prerelease-deps.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Only run this nox session. -env_vars: { - key: "NOX_SESSION" - value: "prerelease_deps" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh b/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh deleted file mode 100755 index c435402f473e..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/populate-secrets.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# Copyright 2024 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. - -set -eo pipefail - -function now { date +"%Y-%m-%d %H:%M:%S" | tr -d '\n' ;} -function msg { println "$*" >&2 ;} -function println { printf '%s\n' "$(now) $*" ;} - - -# Populates requested secrets set in SECRET_MANAGER_KEYS from service account: -# kokoro-trampoline@cloud-devrel-kokoro-resources.iam.gserviceaccount.com -SECRET_LOCATION="${KOKORO_GFILE_DIR}/secret_manager" -msg "Creating folder on disk for secrets: ${SECRET_LOCATION}" -mkdir -p ${SECRET_LOCATION} -for key in $(echo ${SECRET_MANAGER_KEYS} | sed "s/,/ /g") -do - msg "Retrieving secret ${key}" - docker run --entrypoint=gcloud \ - --volume=${KOKORO_GFILE_DIR}:${KOKORO_GFILE_DIR} \ - gcr.io/google.com/cloudsdktool/cloud-sdk \ - secrets versions access latest \ - --project cloud-devrel-kokoro-resources \ - --secret ${key} > \ - "${SECRET_LOCATION}/${key}" - if [[ $? == 0 ]]; then - msg "Secret written to ${SECRET_LOCATION}/${key}" - else - msg "Error retrieving secret ${key}" - fi -done diff --git a/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg b/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg deleted file mode 100644 index c337b6d8293e..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/presubmit/common.cfg +++ /dev/null @@ -1,47 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Download resources for system tests (service account key, etc.) -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/google-cloud-python" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline.sh" - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" -} -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/build.sh" -} - - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/presubmit/prerelease-deps.cfg b/packages/google-cloud-error-reporting/.kokoro/presubmit/prerelease-deps.cfg deleted file mode 100644 index 3595fb43f5c0..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/presubmit/prerelease-deps.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Only run this nox session. -env_vars: { - key: "NOX_SESSION" - value: "prerelease_deps" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/presubmit/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/presubmit/presubmit.cfg deleted file mode 100644 index 8f43917d92fe..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/presubmit/presubmit.cfg +++ /dev/null @@ -1 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg deleted file mode 100644 index 3f98b56246ca..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/lint/common.cfg +++ /dev/null @@ -1,53 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "lint" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/lint/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/periodic.cfg deleted file mode 100644 index 50fec9649732..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/lint/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/lint/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/lint/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/lint/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg deleted file mode 100644 index d19172aefbc3..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/common.cfg +++ /dev/null @@ -1,59 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.10" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-310" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.10/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/common.cfg deleted file mode 100644 index d83d3eabd739..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/common.cfg +++ /dev/null @@ -1,59 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.11" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-311" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.11/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/common.cfg deleted file mode 100644 index 67d66075a14d..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/common.cfg +++ /dev/null @@ -1,59 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.12" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-312" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.12/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/common.cfg deleted file mode 100644 index e83c889e6029..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/common.cfg +++ /dev/null @@ -1,60 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.13" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-313" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.13/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/common.cfg deleted file mode 100644 index 09f706f60795..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/common.cfg +++ /dev/null @@ -1,60 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.14" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-314" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.14/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg deleted file mode 100644 index ad162db91b86..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/common.cfg +++ /dev/null @@ -1,59 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.7" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-py37" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.7/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg deleted file mode 100644 index b495960b4e71..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/common.cfg +++ /dev/null @@ -1,59 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.8" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-py38" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.8/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg deleted file mode 100644 index 01a9e9d3214b..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/common.cfg +++ /dev/null @@ -1,59 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Specify which tests to run -env_vars: { - key: "RUN_TESTS_SESSION" - value: "py-3.9" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-py39" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples.sh" -} - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" -} - -# Download secrets for samples -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "python-error-reporting/.kokoro/trampoline_v2.sh" - -############################################# -# this section merged from .kokoro/common_env_vars.cfg using owlbot.py - -env_vars: { - key: "PRODUCT_AREA_LABEL" - value: "observability" -} -env_vars: { - key: "PRODUCT_LABEL" - value: "error-reporting" -} -env_vars: { - key: "LANGUAGE_LABEL" - value: "python" -} - -################################################### - diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/continuous.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/continuous.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg deleted file mode 100644 index 0ab001caaf12..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-error-reporting/.kokoro/test-samples-against-head.sh" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg deleted file mode 100644 index 71cd1e597e38..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/presubmit.cfg b/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/presubmit.cfg deleted file mode 100644 index a1c8d9759c88..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/samples/python3.9/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh deleted file mode 100755 index e9d8bd79a644..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-against-head.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# Copyright 2024 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 -# -# https://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. - -# A customized test runner for samples. -# -# For periodic builds, you can specify this file for testing against head. - -# `-e` enables the script to automatically fail when a command fails -# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero -set -eo pipefail -# Enables `**` to include files nested inside sub-folders -shopt -s globstar - -exec .kokoro/test-samples-impl.sh diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh deleted file mode 100755 index 53e365bc4e79..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples-impl.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/bash -# Copyright 2024 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 -# -# https://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. - - -# `-e` enables the script to automatically fail when a command fails -# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero -set -eo pipefail -# Enables `**` to include files nested inside sub-folders -shopt -s globstar - -# Exit early if samples don't exist -if ! find samples -name 'requirements.txt' | grep -q .; then - echo "No tests run. './samples/**/requirements.txt' not found" - exit 0 -fi - -# Disable buffering, so that the logs stream through. -export PYTHONUNBUFFERED=1 - -# Debug: show build environment -env | grep KOKORO - -# Install nox -# `virtualenv==20.26.6` is added for Python 3.7 compatibility -python3.9 -m pip install --upgrade --quiet nox virtualenv==20.26.6 - -# Use secrets acessor service account to get secrets -if [[ -f "${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" ]]; then - gcloud auth activate-service-account \ - --key-file="${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" \ - --project="cloud-devrel-kokoro-resources" -fi - -# This script will create 3 files: -# - testing/test-env.sh -# - testing/service-account.json -# - testing/client-secrets.json -./scripts/decrypt-secrets.sh - -source ./testing/test-env.sh -export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/testing/service-account.json - -# For cloud-run session, we activate the service account for gcloud sdk. -gcloud auth activate-service-account \ - --key-file "${GOOGLE_APPLICATION_CREDENTIALS}" - -export GOOGLE_CLIENT_SECRETS=$(pwd)/testing/client-secrets.json - -echo -e "\n******************** TESTING PROJECTS ********************" - -# Switch to 'fail at end' to allow all tests to complete before exiting. -set +e -# Use RTN to return a non-zero value if the test fails. -RTN=0 -ROOT=$(pwd) -# Find all requirements.txt in the samples directory (may break on whitespace). -for file in samples/**/requirements.txt; do - cd "$ROOT" - # Navigate to the project folder. - file=$(dirname "$file") - cd "$file" - - echo "------------------------------------------------------------" - echo "- testing $file" - echo "------------------------------------------------------------" - - # Use nox to execute the tests for the project. - python3.9 -m nox -s "$RUN_TESTS_SESSION" - EXIT=$? - - # If this is a periodic build, send the test log to the FlakyBot. - # See https://github.com/googleapis/repo-automation-bots/tree/main/packages/flakybot. - if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then - chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot - $KOKORO_GFILE_DIR/linux_amd64/flakybot - fi - - if [[ $EXIT -ne 0 ]]; then - RTN=1 - echo -e "\n Testing failed: Nox returned a non-zero exit code. \n" - else - echo -e "\n Testing completed.\n" - fi - -done -cd "$ROOT" - -# Workaround for Kokoro permissions issue: delete secrets -rm testing/{test-env.sh,client-secrets.json,service-account.json} - -exit "$RTN" diff --git a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh b/packages/google-cloud-error-reporting/.kokoro/test-samples.sh deleted file mode 100755 index 7933d820149a..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/test-samples.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# Copyright 2024 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 -# -# https://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. - -# The default test runner for samples. -# -# For periodic builds, we rewinds the repo to the latest release, and -# run test-samples-impl.sh. - -# `-e` enables the script to automatically fail when a command fails -# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero -set -eo pipefail -# Enables `**` to include files nested inside sub-folders -shopt -s globstar - -# Run periodic samples tests at latest release -if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then - # preserving the test runner implementation. - cp .kokoro/test-samples-impl.sh "${TMPDIR}/test-samples-impl.sh" - echo "--- IMPORTANT IMPORTANT IMPORTANT ---" - echo "Now we rewind the repo back to the latest release..." - LATEST_RELEASE=$(git describe --abbrev=0 --tags) - git checkout $LATEST_RELEASE - echo "The current head is: " - echo $(git rev-parse --verify HEAD) - echo "--- IMPORTANT IMPORTANT IMPORTANT ---" - # move back the test runner implementation if there's no file. - if [ ! -f .kokoro/test-samples-impl.sh ]; then - cp "${TMPDIR}/test-samples-impl.sh" .kokoro/test-samples-impl.sh - fi -fi - -exec .kokoro/test-samples-impl.sh diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline.sh deleted file mode 100755 index 48f79699706e..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/trampoline.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# Copyright 2024 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. - -set -eo pipefail - -# Always run the cleanup script, regardless of the success of bouncing into -# the container. -function cleanup() { - chmod +x ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh - ${KOKORO_GFILE_DIR}/trampoline_cleanup.sh - echo "cleanup"; -} -trap cleanup EXIT - -$(dirname $0)/populate-secrets.sh # Secret Manager secrets. -python3 "${KOKORO_GFILE_DIR}/trampoline_v1.py" \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh b/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh deleted file mode 100755 index 35fa529231dc..000000000000 --- a/packages/google-cloud-error-reporting/.kokoro/trampoline_v2.sh +++ /dev/null @@ -1,487 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2024 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. - -# trampoline_v2.sh -# -# This script does 3 things. -# -# 1. Prepare the Docker image for the test -# 2. Run the Docker with appropriate flags to run the test -# 3. Upload the newly built Docker image -# -# in a way that is somewhat compatible with trampoline_v1. -# -# To run this script, first download few files from gcs to /dev/shm. -# (/dev/shm is passed into the container as KOKORO_GFILE_DIR). -# -# gsutil cp gs://cloud-devrel-kokoro-resources/python-docs-samples/secrets_viewer_service_account.json /dev/shm -# gsutil cp gs://cloud-devrel-kokoro-resources/python-docs-samples/automl_secrets.txt /dev/shm -# -# Then run the script. -# .kokoro/trampoline_v2.sh -# -# These environment variables are required: -# TRAMPOLINE_IMAGE: The docker image to use. -# TRAMPOLINE_DOCKERFILE: The location of the Dockerfile. -# -# You can optionally change these environment variables: -# TRAMPOLINE_IMAGE_UPLOAD: -# (true|false): Whether to upload the Docker image after the -# successful builds. -# TRAMPOLINE_BUILD_FILE: The script to run in the docker container. -# TRAMPOLINE_WORKSPACE: The workspace path in the docker container. -# Defaults to /workspace. -# Potentially there are some repo specific envvars in .trampolinerc in -# the project root. - - -set -euo pipefail - -TRAMPOLINE_VERSION="2.0.5" - -if command -v tput >/dev/null && [[ -n "${TERM:-}" ]]; then - readonly IO_COLOR_RED="$(tput setaf 1)" - readonly IO_COLOR_GREEN="$(tput setaf 2)" - readonly IO_COLOR_YELLOW="$(tput setaf 3)" - readonly IO_COLOR_RESET="$(tput sgr0)" -else - readonly IO_COLOR_RED="" - readonly IO_COLOR_GREEN="" - readonly IO_COLOR_YELLOW="" - readonly IO_COLOR_RESET="" -fi - -function function_exists { - [ $(LC_ALL=C type -t $1)"" == "function" ] -} - -# Logs a message using the given color. The first argument must be one -# of the IO_COLOR_* variables defined above, such as -# "${IO_COLOR_YELLOW}". The remaining arguments will be logged in the -# given color. The log message will also have an RFC-3339 timestamp -# prepended (in UTC). You can disable the color output by setting -# TERM=vt100. -function log_impl() { - local color="$1" - shift - local timestamp="$(date -u "+%Y-%m-%dT%H:%M:%SZ")" - echo "================================================================" - echo "${color}${timestamp}:" "$@" "${IO_COLOR_RESET}" - echo "================================================================" -} - -# Logs the given message with normal coloring and a timestamp. -function log() { - log_impl "${IO_COLOR_RESET}" "$@" -} - -# Logs the given message in green with a timestamp. -function log_green() { - log_impl "${IO_COLOR_GREEN}" "$@" -} - -# Logs the given message in yellow with a timestamp. -function log_yellow() { - log_impl "${IO_COLOR_YELLOW}" "$@" -} - -# Logs the given message in red with a timestamp. -function log_red() { - log_impl "${IO_COLOR_RED}" "$@" -} - -readonly tmpdir=$(mktemp -d -t ci-XXXXXXXX) -readonly tmphome="${tmpdir}/h" -mkdir -p "${tmphome}" - -function cleanup() { - rm -rf "${tmpdir}" -} -trap cleanup EXIT - -RUNNING_IN_CI="${RUNNING_IN_CI:-false}" - -# The workspace in the container, defaults to /workspace. -TRAMPOLINE_WORKSPACE="${TRAMPOLINE_WORKSPACE:-/workspace}" - -pass_down_envvars=( - # TRAMPOLINE_V2 variables. - # Tells scripts whether they are running as part of CI or not. - "RUNNING_IN_CI" - # Indicates which CI system we're in. - "TRAMPOLINE_CI" - # Indicates the version of the script. - "TRAMPOLINE_VERSION" -) - -log_yellow "Building with Trampoline ${TRAMPOLINE_VERSION}" - -# Detect which CI systems we're in. If we're in any of the CI systems -# we support, `RUNNING_IN_CI` will be true and `TRAMPOLINE_CI` will be -# the name of the CI system. Both envvars will be passing down to the -# container for telling which CI system we're in. -if [[ -n "${KOKORO_BUILD_ID:-}" ]]; then - # descriptive env var for indicating it's on CI. - RUNNING_IN_CI="true" - TRAMPOLINE_CI="kokoro" - if [[ "${TRAMPOLINE_USE_LEGACY_SERVICE_ACCOUNT:-}" == "true" ]]; then - if [[ ! -f "${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json" ]]; then - log_red "${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json does not exist. Did you forget to mount cloud-devrel-kokoro-resources/trampoline? Aborting." - exit 1 - fi - # This service account will be activated later. - TRAMPOLINE_SERVICE_ACCOUNT="${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json" - else - if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then - gcloud auth list - fi - log_yellow "Configuring Container Registry access" - gcloud auth configure-docker --quiet - fi - pass_down_envvars+=( - # KOKORO dynamic variables. - "KOKORO_BUILD_NUMBER" - "KOKORO_BUILD_ID" - "KOKORO_JOB_NAME" - "KOKORO_GIT_COMMIT" - "KOKORO_GITHUB_COMMIT" - "KOKORO_GITHUB_PULL_REQUEST_NUMBER" - "KOKORO_GITHUB_PULL_REQUEST_COMMIT" - # For FlakyBot - "KOKORO_GITHUB_COMMIT_URL" - "KOKORO_GITHUB_PULL_REQUEST_URL" - ) -elif [[ "${TRAVIS:-}" == "true" ]]; then - RUNNING_IN_CI="true" - TRAMPOLINE_CI="travis" - pass_down_envvars+=( - "TRAVIS_BRANCH" - "TRAVIS_BUILD_ID" - "TRAVIS_BUILD_NUMBER" - "TRAVIS_BUILD_WEB_URL" - "TRAVIS_COMMIT" - "TRAVIS_COMMIT_MESSAGE" - "TRAVIS_COMMIT_RANGE" - "TRAVIS_JOB_NAME" - "TRAVIS_JOB_NUMBER" - "TRAVIS_JOB_WEB_URL" - "TRAVIS_PULL_REQUEST" - "TRAVIS_PULL_REQUEST_BRANCH" - "TRAVIS_PULL_REQUEST_SHA" - "TRAVIS_PULL_REQUEST_SLUG" - "TRAVIS_REPO_SLUG" - "TRAVIS_SECURE_ENV_VARS" - "TRAVIS_TAG" - ) -elif [[ -n "${GITHUB_RUN_ID:-}" ]]; then - RUNNING_IN_CI="true" - TRAMPOLINE_CI="github-workflow" - pass_down_envvars+=( - "GITHUB_WORKFLOW" - "GITHUB_RUN_ID" - "GITHUB_RUN_NUMBER" - "GITHUB_ACTION" - "GITHUB_ACTIONS" - "GITHUB_ACTOR" - "GITHUB_REPOSITORY" - "GITHUB_EVENT_NAME" - "GITHUB_EVENT_PATH" - "GITHUB_SHA" - "GITHUB_REF" - "GITHUB_HEAD_REF" - "GITHUB_BASE_REF" - ) -elif [[ "${CIRCLECI:-}" == "true" ]]; then - RUNNING_IN_CI="true" - TRAMPOLINE_CI="circleci" - pass_down_envvars+=( - "CIRCLE_BRANCH" - "CIRCLE_BUILD_NUM" - "CIRCLE_BUILD_URL" - "CIRCLE_COMPARE_URL" - "CIRCLE_JOB" - "CIRCLE_NODE_INDEX" - "CIRCLE_NODE_TOTAL" - "CIRCLE_PREVIOUS_BUILD_NUM" - "CIRCLE_PROJECT_REPONAME" - "CIRCLE_PROJECT_USERNAME" - "CIRCLE_REPOSITORY_URL" - "CIRCLE_SHA1" - "CIRCLE_STAGE" - "CIRCLE_USERNAME" - "CIRCLE_WORKFLOW_ID" - "CIRCLE_WORKFLOW_JOB_ID" - "CIRCLE_WORKFLOW_UPSTREAM_JOB_IDS" - "CIRCLE_WORKFLOW_WORKSPACE_ID" - ) -fi - -# Configure the service account for pulling the docker image. -function repo_root() { - local dir="$1" - while [[ ! -d "${dir}/.git" ]]; do - dir="$(dirname "$dir")" - done - echo "${dir}" -} - -# Detect the project root. In CI builds, we assume the script is in -# the git tree and traverse from there, otherwise, traverse from `pwd` -# to find `.git` directory. -if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then - PROGRAM_PATH="$(realpath "$0")" - PROGRAM_DIR="$(dirname "${PROGRAM_PATH}")" - PROJECT_ROOT="$(repo_root "${PROGRAM_DIR}")" -else - PROJECT_ROOT="$(repo_root $(pwd))" -fi - -log_yellow "Changing to the project root: ${PROJECT_ROOT}." -cd "${PROJECT_ROOT}" - -# To support relative path for `TRAMPOLINE_SERVICE_ACCOUNT`, we need -# to use this environment variable in `PROJECT_ROOT`. -if [[ -n "${TRAMPOLINE_SERVICE_ACCOUNT:-}" ]]; then - - mkdir -p "${tmpdir}/gcloud" - gcloud_config_dir="${tmpdir}/gcloud" - - log_yellow "Using isolated gcloud config: ${gcloud_config_dir}." - export CLOUDSDK_CONFIG="${gcloud_config_dir}" - - log_yellow "Using ${TRAMPOLINE_SERVICE_ACCOUNT} for authentication." - gcloud auth activate-service-account \ - --key-file "${TRAMPOLINE_SERVICE_ACCOUNT}" - log_yellow "Configuring Container Registry access" - gcloud auth configure-docker --quiet -fi - -required_envvars=( - # The basic trampoline configurations. - "TRAMPOLINE_IMAGE" - "TRAMPOLINE_BUILD_FILE" -) - -if [[ -f "${PROJECT_ROOT}/.trampolinerc" ]]; then - source "${PROJECT_ROOT}/.trampolinerc" -fi - -log_yellow "Checking environment variables." -for e in "${required_envvars[@]}" -do - if [[ -z "${!e:-}" ]]; then - log "Missing ${e} env var. Aborting." - exit 1 - fi -done - -# We want to support legacy style TRAMPOLINE_BUILD_FILE used with V1 -# script: e.g. "github/repo-name/.kokoro/run_tests.sh" -TRAMPOLINE_BUILD_FILE="${TRAMPOLINE_BUILD_FILE#github/*/}" -log_yellow "Using TRAMPOLINE_BUILD_FILE: ${TRAMPOLINE_BUILD_FILE}" - -# ignore error on docker operations and test execution -set +e - -log_yellow "Preparing Docker image." -# We only download the docker image in CI builds. -if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then - # Download the docker image specified by `TRAMPOLINE_IMAGE` - - # We may want to add --max-concurrent-downloads flag. - - log_yellow "Start pulling the Docker image: ${TRAMPOLINE_IMAGE}." - if docker pull "${TRAMPOLINE_IMAGE}"; then - log_green "Finished pulling the Docker image: ${TRAMPOLINE_IMAGE}." - has_image="true" - else - log_red "Failed pulling the Docker image: ${TRAMPOLINE_IMAGE}." - has_image="false" - fi -else - # For local run, check if we have the image. - if docker images "${TRAMPOLINE_IMAGE}:latest" | grep "${TRAMPOLINE_IMAGE}"; then - has_image="true" - else - has_image="false" - fi -fi - - -# The default user for a Docker container has uid 0 (root). To avoid -# creating root-owned files in the build directory we tell docker to -# use the current user ID. -user_uid="$(id -u)" -user_gid="$(id -g)" -user_name="$(id -un)" - -# To allow docker in docker, we add the user to the docker group in -# the host os. -docker_gid=$(cut -d: -f3 < <(getent group docker)) - -update_cache="false" -if [[ "${TRAMPOLINE_DOCKERFILE:-none}" != "none" ]]; then - # Build the Docker image from the source. - context_dir=$(dirname "${TRAMPOLINE_DOCKERFILE}") - docker_build_flags=( - "-f" "${TRAMPOLINE_DOCKERFILE}" - "-t" "${TRAMPOLINE_IMAGE}" - "--build-arg" "UID=${user_uid}" - "--build-arg" "USERNAME=${user_name}" - ) - if [[ "${has_image}" == "true" ]]; then - docker_build_flags+=("--cache-from" "${TRAMPOLINE_IMAGE}") - fi - - log_yellow "Start building the docker image." - if [[ "${TRAMPOLINE_VERBOSE:-false}" == "true" ]]; then - echo "docker build" "${docker_build_flags[@]}" "${context_dir}" - fi - - # ON CI systems, we want to suppress docker build logs, only - # output the logs when it fails. - if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then - if docker build "${docker_build_flags[@]}" "${context_dir}" \ - > "${tmpdir}/docker_build.log" 2>&1; then - if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then - cat "${tmpdir}/docker_build.log" - fi - - log_green "Finished building the docker image." - update_cache="true" - else - log_red "Failed to build the Docker image, aborting." - log_yellow "Dumping the build logs:" - cat "${tmpdir}/docker_build.log" - exit 1 - fi - else - if docker build "${docker_build_flags[@]}" "${context_dir}"; then - log_green "Finished building the docker image." - update_cache="true" - else - log_red "Failed to build the Docker image, aborting." - exit 1 - fi - fi -else - if [[ "${has_image}" != "true" ]]; then - log_red "We do not have ${TRAMPOLINE_IMAGE} locally, aborting." - exit 1 - fi -fi - -# We use an array for the flags so they are easier to document. -docker_flags=( - # Remove the container after it exists. - "--rm" - - # Use the host network. - "--network=host" - - # Run in priviledged mode. We are not using docker for sandboxing or - # isolation, just for packaging our dev tools. - "--privileged" - - # Run the docker script with the user id. Because the docker image gets to - # write in ${PWD} you typically want this to be your user id. - # To allow docker in docker, we need to use docker gid on the host. - "--user" "${user_uid}:${docker_gid}" - - # Pass down the USER. - "--env" "USER=${user_name}" - - # Mount the project directory inside the Docker container. - "--volume" "${PROJECT_ROOT}:${TRAMPOLINE_WORKSPACE}" - "--workdir" "${TRAMPOLINE_WORKSPACE}" - "--env" "PROJECT_ROOT=${TRAMPOLINE_WORKSPACE}" - - # Mount the temporary home directory. - "--volume" "${tmphome}:/h" - "--env" "HOME=/h" - - # Allow docker in docker. - "--volume" "/var/run/docker.sock:/var/run/docker.sock" - - # Mount the /tmp so that docker in docker can mount the files - # there correctly. - "--volume" "/tmp:/tmp" - # Pass down the KOKORO_GFILE_DIR and KOKORO_KEYSTORE_DIR - # TODO(tmatsuo): This part is not portable. - "--env" "TRAMPOLINE_SECRET_DIR=/secrets" - "--volume" "${KOKORO_GFILE_DIR:-/dev/shm}:/secrets/gfile" - "--env" "KOKORO_GFILE_DIR=/secrets/gfile" - "--volume" "${KOKORO_KEYSTORE_DIR:-/dev/shm}:/secrets/keystore" - "--env" "KOKORO_KEYSTORE_DIR=/secrets/keystore" -) - -# Add an option for nicer output if the build gets a tty. -if [[ -t 0 ]]; then - docker_flags+=("-it") -fi - -# Passing down env vars -for e in "${pass_down_envvars[@]}" -do - if [[ -n "${!e:-}" ]]; then - docker_flags+=("--env" "${e}=${!e}") - fi -done - -# If arguments are given, all arguments will become the commands run -# in the container, otherwise run TRAMPOLINE_BUILD_FILE. -if [[ $# -ge 1 ]]; then - log_yellow "Running the given commands '" "${@:1}" "' in the container." - readonly commands=("${@:1}") - if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then - echo docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" "${commands[@]}" - fi - docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" "${commands[@]}" -else - log_yellow "Running the tests in a Docker container." - docker_flags+=("--entrypoint=${TRAMPOLINE_BUILD_FILE}") - if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then - echo docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" - fi - docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" -fi - - -test_retval=$? - -if [[ ${test_retval} -eq 0 ]]; then - log_green "Build finished with ${test_retval}" -else - log_red "Build finished with ${test_retval}" -fi - -# Only upload it when the test passes. -if [[ "${update_cache}" == "true" ]] && \ - [[ $test_retval == 0 ]] && \ - [[ "${TRAMPOLINE_IMAGE_UPLOAD:-false}" == "true" ]]; then - log_yellow "Uploading the Docker image." - if docker push "${TRAMPOLINE_IMAGE}"; then - log_green "Finished uploading the Docker image." - else - log_red "Failed uploading the Docker image." - fi - # Call trampoline_after_upload_hook if it's defined. - if function_exists trampoline_after_upload_hook; then - trampoline_after_upload_hook - fi - -fi - -exit "${test_retval}" diff --git a/packages/google-cloud-error-reporting/.trampolinerc b/packages/google-cloud-error-reporting/.trampolinerc deleted file mode 100644 index 0080152373d5..000000000000 --- a/packages/google-cloud-error-reporting/.trampolinerc +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright 2024 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. - -# Add required env vars here. -required_envvars+=( -) - -# Add env vars which are passed down into the container here. -pass_down_envvars+=( - "NOX_SESSION" - ############### - # Docs builds - ############### - "STAGING_BUCKET" - "V2_STAGING_BUCKET" - ################## - # Samples builds - ################## - "INSTALL_LIBRARY_FROM_SOURCE" - "RUN_TESTS_SESSION" - "BUILD_SPECIFIC_GCLOUD_PROJECT" - # Target directories. - "RUN_TESTS_DIRS" - # The nox session to run. - "RUN_TESTS_SESSION" -) - -# Prevent unintentional override on the default image. -if [[ "${TRAMPOLINE_IMAGE_UPLOAD:-false}" == "true" ]] && \ - [[ -z "${TRAMPOLINE_IMAGE:-}" ]]; then - echo "Please set TRAMPOLINE_IMAGE if you want to upload the Docker image." - exit 1 -fi - -# Define the default value if it makes sense. -if [[ -z "${TRAMPOLINE_IMAGE_UPLOAD:-}" ]]; then - TRAMPOLINE_IMAGE_UPLOAD="" -fi - -if [[ -z "${TRAMPOLINE_IMAGE:-}" ]]; then - TRAMPOLINE_IMAGE="" -fi - -if [[ -z "${TRAMPOLINE_DOCKERFILE:-}" ]]; then - TRAMPOLINE_DOCKERFILE="" -fi - -if [[ -z "${TRAMPOLINE_BUILD_FILE:-}" ]]; then - TRAMPOLINE_BUILD_FILE="" -fi diff --git a/packages/google-cloud-error-reporting/docs/changelog.md b/packages/google-cloud-error-reporting/docs/changelog.md deleted file mode 120000 index 04c99a55caae..000000000000 --- a/packages/google-cloud-error-reporting/docs/changelog.md +++ /dev/null @@ -1 +0,0 @@ -../CHANGELOG.md \ No newline at end of file diff --git a/packages/google-cloud-error-reporting/owlbot.py b/packages/google-cloud-error-reporting/owlbot.py deleted file mode 100644 index 76977bebf44d..000000000000 --- a/packages/google-cloud-error-reporting/owlbot.py +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright 2022 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 -import os -from pathlib import Path -import shutil - -import synthtool as s -import synthtool.gcp as gcp -from synthtool.languages import python - -# ---------------------------------------------------------------------------- -# Copy the generated client from the owl-bot staging directory -# ---------------------------------------------------------------------------- - -clean_up_generated_samples = True - -# Load the default version defined in .repo-metadata.json. -default_version = json.load(open(".repo-metadata.json", "rt")).get("default_version") - -for library in s.get_staging_dirs(default_version): - if clean_up_generated_samples: - shutil.rmtree("samples/generated_samples", ignore_errors=True) - clean_up_generated_samples = False - - s.move( - [library], - excludes=[ - "docs/index.rst", - "google/cloud/errorreporting/", - "setup.py", - "testing/constraints-3.7.txt", - "testing/constraints-3.8.txt", - "noxfile.py", - ], - ) -s.remove_staging_dirs() - -# ---------------------------------------------------------------------------- -# Add templated files -# ---------------------------------------------------------------------------- - -templated_files = gcp.CommonTemplates().py_library( - cov_level=100, - microgenerator=True, - versions=gcp.common.detect_versions(path="./google", default_first=True), -) -s.move( - templated_files, - excludes=[ - ".coveragerc", - ".github/**", - ".kokoro/**", - "docs/conf.py", - "docs/index.rst", - "testing/constraints-3.7.txt", - ], -) - -python.py_samples(skip_readmes=True) - -# run format session for all directories which have a noxfile -for noxfile in Path(".").glob("**/noxfile.py"): - s.shell.run(["nox", "-s", "blacken"], cwd=noxfile.parent, hide_output=False)