From 37a89ce74e2947c85da00025540a61ac20a38ae5 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Wed, 5 Oct 2016 09:56:04 -0700 Subject: [PATCH 01/94] Add new "quickstart" samples [(#547)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/547) --- samples/snippets/quickstart.py | 44 +++++++++++++++++++++++++++++++ samples/snippets/requirements.txt | 1 + 2 files changed, 45 insertions(+) create mode 100644 samples/snippets/quickstart.py create mode 100644 samples/snippets/requirements.txt diff --git a/samples/snippets/quickstart.py b/samples/snippets/quickstart.py new file mode 100644 index 00000000..ad543676 --- /dev/null +++ b/samples/snippets/quickstart.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +# 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. + + +def run_quickstart(): + # [START translate_quickstart] + # Imports the Google Cloud client library + from google.cloud import translate + + # Your Translate API key + api_key = 'YOUR_API_KEY' + + # Instantiates a client + translate_client = translate.Client(api_key) + + # The text to translate + text = 'Hello, world!' + # The target language + target = 'ru' + + # Translates some text into Russian + translation = translate_client.translate(text, target_language=target) + + print('Text: {}'.format(text)) + print('Translation: {}'.format( + translation['translatedText'].encode('utf-8'))) + # [END translate_quickstart] + + +if __name__ == '__main__': + run_quickstart() diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt new file mode 100644 index 00000000..1f8e21a1 --- /dev/null +++ b/samples/snippets/requirements.txt @@ -0,0 +1 @@ +google-cloud-translate==0.20.0 From e3ef3dfa2fd5204351abd073d47efb29d88e7e74 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Wed, 12 Oct 2016 10:48:57 -0700 Subject: [PATCH 02/94] Quickstart tests [(#569)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/569) * Add tests for quickstarts * Update secrets --- samples/snippets/quickstart.py | 7 +++-- samples/snippets/quickstart_test.py | 40 +++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 samples/snippets/quickstart_test.py diff --git a/samples/snippets/quickstart.py b/samples/snippets/quickstart.py index ad543676..51ab697c 100644 --- a/samples/snippets/quickstart.py +++ b/samples/snippets/quickstart.py @@ -27,16 +27,15 @@ def run_quickstart(): translate_client = translate.Client(api_key) # The text to translate - text = 'Hello, world!' + text = u'Hello, world!' # The target language target = 'ru' # Translates some text into Russian translation = translate_client.translate(text, target_language=target) - print('Text: {}'.format(text)) - print('Translation: {}'.format( - translation['translatedText'].encode('utf-8'))) + print(u'Text: {}'.format(text)) + print(u'Translation: {}'.format(translation['translatedText'])) # [END translate_quickstart] diff --git a/samples/snippets/quickstart_test.py b/samples/snippets/quickstart_test.py new file mode 100644 index 00000000..5914cb5a --- /dev/null +++ b/samples/snippets/quickstart_test.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# 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. + +from google.cloud import translate +import mock +import pytest + +import quickstart + + +@pytest.fixture +def mock_client(cloud_config): + original_client_ctor = translate.Client + + def new_client_ctor(api_key): + # Strip api_key argument and replace with our api key. + return original_client_ctor(cloud_config.api_key) + + with mock.patch( + 'google.cloud.translate.Client', + side_effect=new_client_ctor): + yield + + +def test_quickstart(mock_client, capsys): + quickstart.run_quickstart() + out, _ = capsys.readouterr() + assert u'Привет мир!' in out From 73e12f060e77085c4e3d77564ddea855ada4684a Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Wed, 12 Oct 2016 12:13:45 -0700 Subject: [PATCH 03/94] Add translate samples [(#574)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/574) --- samples/snippets/README.md | 64 +++++++++++++++++ samples/snippets/snippets.py | 116 ++++++++++++++++++++++++++++++ samples/snippets/snippets_test.py | 42 +++++++++++ 3 files changed, 222 insertions(+) create mode 100644 samples/snippets/README.md create mode 100644 samples/snippets/snippets.py create mode 100644 samples/snippets/snippets_test.py diff --git a/samples/snippets/README.md b/samples/snippets/README.md new file mode 100644 index 00000000..55aa8431 --- /dev/null +++ b/samples/snippets/README.md @@ -0,0 +1,64 @@ +Google Cloud Platform logo + +# Google Translate API Python Samples + +With the [Google Translate API][translate_docs], you can dynamically translate +text between thousands of language pairs. + +[translate_docs]: https://cloud.google.com/translate/docs/ + +## Table of Contents + +* [Setup](#setup) +* [Samples](#samples) + * [Translate](#translate) + +## Setup + +You will need to enable the Translate API and acquire and API key. See the +[documentation][translate_docs] for details on how to do this. + +Install dependencies: + + virtualenv env + source env/bin/activate + pip install -r requirements.txt + +## Samples + +### Translate + +View the [documentation][translate_docs] or the [source code][translate_code]. + +__Usage:__ `python snippets.py --help` + +``` +usage: snippets.py [-h] + api_key + {detect-language,list-languages,list-languages-with-target,translate-text} + ... + +This application demonstrates how to perform basic operations with the +Google Cloud Translate API + +For more information, the documentation at +https://cloud.google.com/translate/docs. + +positional arguments: + api_key Your API key. + {detect-language,list-languages,list-languages-with-target,translate-text} + detect-language Detects the text's language. + list-languages Lists all available langauges. + list-languages-with-target + Lists all available langauges and localizes them to + the target language. Target must be an ISO 639-1 + language code. + translate-text Translates text into the target language. Target must + be an ISO 639-1 language code. + +optional arguments: + -h, --help show this help message and exit +``` + +[translate_docs]: https://cloud.google.com/translate/docs +[translate_code]: snippets.py diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py new file mode 100644 index 00000000..1b5cad92 --- /dev/null +++ b/samples/snippets/snippets.py @@ -0,0 +1,116 @@ +#!/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. + +"""This application demonstrates how to perform basic operations with the +Google Cloud Translate API + +For more information, the documentation at +https://cloud.google.com/translate/docs. +""" + +import argparse + +from google.cloud import translate + + +def detect_language(api_key, text): + """Detects the text's language.""" + translate_client = translate.Client(api_key) + + # Text can also be a sequence of strings, in which case this method + # will return a sequence of results for each text. + result = translate_client.detect_language(text) + + print('Text: {}'.format(text)) + print('Confidence: {}'.format(result['confidence'])) + print('Language: {}'.format(result['language'])) + + +def list_languages(api_key): + """Lists all available languages.""" + translate_client = translate.Client(api_key) + + results = translate_client.get_languages() + + for language in results: + print(u'{name} ({language})'.format(**language)) + + +def list_languages_with_target(api_key, target): + """Lists all available languages and localizes them to the target language. + + Target must be an ISO 639-1 language code. + See https://g.co/cloud/translate/v2/translate-reference#supported_languages + """ + translate_client = translate.Client(api_key) + + results = translate_client.get_languages(target_language=target) + + for language in results: + print(u'{name} ({language})'.format(**language)) + + +def translate_text(api_key, target, text): + """Translates text into the target language. + + Target must be an ISO 639-1 language code. + See https://g.co/cloud/translate/v2/translate-reference#supported_languages + """ + translate_client = translate.Client(api_key) + + # Text can also be a sequence of strings, in which case this method + # will return a sequence of results for each text. + result = translate_client.translate(text, target_language=target) + + print(u'Text: {}'.format(result['input'])) + print(u'Translation: {}'.format(result['translatedText'])) + print(u'Detected source language: {}'.format( + result['detectedSourceLanguage'])) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument('api_key', help='Your API key.') + subparsers = parser.add_subparsers(dest='command') + + detect_langage_parser = subparsers.add_parser( + 'detect-language', help=detect_language.__doc__) + detect_langage_parser.add_argument('text') + + list_languages_parser = subparsers.add_parser( + 'list-languages', help=list_languages.__doc__) + + list_languages_with_target_parser = subparsers.add_parser( + 'list-languages-with-target', help=list_languages_with_target.__doc__) + list_languages_with_target_parser.add_argument('target') + + translate_text_parser = subparsers.add_parser( + 'translate-text', help=translate_text.__doc__) + translate_text_parser.add_argument('target') + translate_text_parser.add_argument('text') + + args = parser.parse_args() + + if args.command == 'detect-language': + detect_language(args.api_key, args.text) + elif args.command == 'list-languages': + list_languages(args.api_key) + elif args.command == 'list-languages-with-target': + list_languages_with_target(args.api_key, args.target) + elif args.command == 'translate-text': + translate_text(args.api_key, args.target, args.text) diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py new file mode 100644 index 00000000..79843233 --- /dev/null +++ b/samples/snippets/snippets_test.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +# 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 snippets + + +def test_detect_language(cloud_config, capsys): + snippets.detect_language(cloud_config.api_key, 'Hæ sæta') + out, _ = capsys.readouterr() + assert 'is' in out + + +def test_list_languages(cloud_config, capsys): + snippets.list_languages(cloud_config.api_key) + out, _ = capsys.readouterr() + assert 'Icelandic (is)' in out + + +def test_list_languages_with_target(cloud_config, capsys): + snippets.list_languages_with_target(cloud_config.api_key, 'is') + out, _ = capsys.readouterr() + assert u'íslenska (is)' in out + + +def test_translate_text(cloud_config, capsys): + snippets.translate_text(cloud_config.api_key, 'is', 'Hello world') + out, _ = capsys.readouterr() + assert u'Halló heimur' in out From 64a0a0443b5f9d3472472ba17b4840f761b64e6f Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Tue, 25 Oct 2016 10:54:45 -0700 Subject: [PATCH 04/94] Generate most non-appengine readmes Change-Id: I3779282126cdd05b047194d356932b9995484115 --- samples/snippets/README.md | 64 ----------------- samples/snippets/README.rst | 126 +++++++++++++++++++++++++++++++++ samples/snippets/README.rst.in | 22 ++++++ 3 files changed, 148 insertions(+), 64 deletions(-) delete mode 100644 samples/snippets/README.md create mode 100644 samples/snippets/README.rst create mode 100644 samples/snippets/README.rst.in diff --git a/samples/snippets/README.md b/samples/snippets/README.md deleted file mode 100644 index 55aa8431..00000000 --- a/samples/snippets/README.md +++ /dev/null @@ -1,64 +0,0 @@ -Google Cloud Platform logo - -# Google Translate API Python Samples - -With the [Google Translate API][translate_docs], you can dynamically translate -text between thousands of language pairs. - -[translate_docs]: https://cloud.google.com/translate/docs/ - -## Table of Contents - -* [Setup](#setup) -* [Samples](#samples) - * [Translate](#translate) - -## Setup - -You will need to enable the Translate API and acquire and API key. See the -[documentation][translate_docs] for details on how to do this. - -Install dependencies: - - virtualenv env - source env/bin/activate - pip install -r requirements.txt - -## Samples - -### Translate - -View the [documentation][translate_docs] or the [source code][translate_code]. - -__Usage:__ `python snippets.py --help` - -``` -usage: snippets.py [-h] - api_key - {detect-language,list-languages,list-languages-with-target,translate-text} - ... - -This application demonstrates how to perform basic operations with the -Google Cloud Translate API - -For more information, the documentation at -https://cloud.google.com/translate/docs. - -positional arguments: - api_key Your API key. - {detect-language,list-languages,list-languages-with-target,translate-text} - detect-language Detects the text's language. - list-languages Lists all available langauges. - list-languages-with-target - Lists all available langauges and localizes them to - the target language. Target must be an ISO 639-1 - language code. - translate-text Translates text into the target language. Target must - be an ISO 639-1 language code. - -optional arguments: - -h, --help show this help message and exit -``` - -[translate_docs]: https://cloud.google.com/translate/docs -[translate_code]: snippets.py diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst new file mode 100644 index 00000000..fc4e87d0 --- /dev/null +++ b/samples/snippets/README.rst @@ -0,0 +1,126 @@ +.. This file is automatically generated. Do not edit this file directly. + +Google Translate API Python Samples +=============================================================================== + +This directory contains samples for Google Translate API. With `Google Translate API`, you can dynamically translate text between thousands of language pairs. + + + + +.. _Google Translate API: https://cloud.google.com/translate/docs + +Setup +------------------------------------------------------------------------------- + + +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?_ + +Install Dependencies +++++++++++++++++++++ + +#. Install `pip`_ and `virtualenv`_ if you do not already have them. + +#. 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 +------------------------------------------------------------------------------- + +Quickstart ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + +To run this sample: + +.. code-block:: bash + + $ python quickstart.py + + +Snippets ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + +To run this sample: + +.. code-block:: bash + + $ python snippets.py + + usage: snippets.py [-h] + api_key + {detect-language,list-languages,list-languages-with-target,translate-text} + ... + + This application demonstrates how to perform basic operations with the + Google Cloud Translate API + + For more information, the documentation at + https://cloud.google.com/translate/docs. + + positional arguments: + api_key Your API key. + {detect-language,list-languages,list-languages-with-target,translate-text} + detect-language Detects the text's language. + list-languages Lists all available languages. + list-languages-with-target + Lists all available languages and localizes them to + the target language. Target must be an ISO 639-1 + language code. See https://g.co/cloud/translate/v2 + /translate-reference#supported_languages + translate-text Translates text into the target language. Target must + be an ISO 639-1 language code. See + https://g.co/cloud/translate/v2/translate- + reference#supported_languages + + optional arguments: + -h, --help show this help message and exit + + + + +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/samples/snippets/README.rst.in b/samples/snippets/README.rst.in new file mode 100644 index 00000000..6ac89da1 --- /dev/null +++ b/samples/snippets/README.rst.in @@ -0,0 +1,22 @@ +# This file is used to generate README.rst + +product: + name: Google Translate API + short_name: Translate API + url: https://cloud.google.com/translate/docs + description: > + With `Google Translate API`, you can dynamically translate text between + thousands of language pairs. + +setup: +- auth_api_key +- install_deps + +samples: +- name: Quickstart + file: quickstart.py +- name: Snippets + file: snippets.py + show_help: true + +cloud_client_library: true From 52b7975101dc0e1046458728b12f736f60060cea Mon Sep 17 00:00:00 2001 From: Puneith Kaul Date: Mon, 14 Nov 2016 18:55:12 -0800 Subject: [PATCH 05/94] Update requirements.txt --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 1f8e21a1..ba0605c8 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==0.20.0 +google-cloud-translate==0.21.0 From 9d6a764db8089e33b16483451de652c9adaf7f21 Mon Sep 17 00:00:00 2001 From: Puneith Kaul Date: Mon, 14 Nov 2016 22:32:57 -0800 Subject: [PATCH 06/94] added model in the sample [(#650)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/650) --- samples/snippets/quickstart.py | 10 ++++++++-- samples/snippets/snippets.py | 18 +++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/samples/snippets/quickstart.py b/samples/snippets/quickstart.py index 51ab697c..bae6f501 100644 --- a/samples/snippets/quickstart.py +++ b/samples/snippets/quickstart.py @@ -24,15 +24,21 @@ def run_quickstart(): api_key = 'YOUR_API_KEY' # Instantiates a client - translate_client = translate.Client(api_key) + translate_client = translate.Client(api_key=api_key) # The text to translate text = u'Hello, world!' # The target language target = 'ru' + # MT model type `base` or `nmt` + model = translate.BASE + # Translates some text into Russian - translation = translate_client.translate(text, target_language=target) + translation = translate_client.translate( + text, + target_language=target, + model=model) print(u'Text: {}'.format(text)) print(u'Translation: {}'.format(translation['translatedText'])) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 1b5cad92..dec8d172 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -28,7 +28,7 @@ def detect_language(api_key, text): """Detects the text's language.""" - translate_client = translate.Client(api_key) + translate_client = translate.Client(api_key=api_key) # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. @@ -41,7 +41,7 @@ def detect_language(api_key, text): def list_languages(api_key): """Lists all available languages.""" - translate_client = translate.Client(api_key) + translate_client = translate.Client(api_key=api_key) results = translate_client.get_languages() @@ -55,7 +55,7 @@ def list_languages_with_target(api_key, target): Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ - translate_client = translate.Client(api_key) + translate_client = translate.Client(api_key=api_key) results = translate_client.get_languages(target_language=target) @@ -63,17 +63,20 @@ def list_languages_with_target(api_key, target): print(u'{name} ({language})'.format(**language)) -def translate_text(api_key, target, text): +def translate_text(api_key, target, text, model=translate.BASE): """Translates text into the target language. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ - translate_client = translate.Client(api_key) + translate_client = translate.Client(api_key=api_key) # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. - result = translate_client.translate(text, target_language=target) + result = translate_client.translate( + text, + target_language=target, + model=model) print(u'Text: {}'.format(result['input'])) print(u'Translation: {}'.format(result['translatedText'])) @@ -103,6 +106,7 @@ def translate_text(api_key, target, text): 'translate-text', help=translate_text.__doc__) translate_text_parser.add_argument('target') translate_text_parser.add_argument('text') + translate_text_parser.add_argument('model') args = parser.parse_args() @@ -113,4 +117,4 @@ def translate_text(api_key, target, text): elif args.command == 'list-languages-with-target': list_languages_with_target(args.api_key, args.target) elif args.command == 'translate-text': - translate_text(args.api_key, args.target, args.text) + translate_text(args.api_key, args.target, args.text, args.model) From 51c5769fad1b13818fba409a5048dfcbbfc09f71 Mon Sep 17 00:00:00 2001 From: Puneith Kaul Date: Tue, 15 Nov 2016 12:27:28 -0800 Subject: [PATCH 07/94] added with and without model separately [(#657)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/657) --- samples/snippets/quickstart.py | 6 +----- samples/snippets/snippets.py | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/samples/snippets/quickstart.py b/samples/snippets/quickstart.py index bae6f501..71e0b0b3 100644 --- a/samples/snippets/quickstart.py +++ b/samples/snippets/quickstart.py @@ -31,14 +31,10 @@ def run_quickstart(): # The target language target = 'ru' - # MT model type `base` or `nmt` - model = translate.BASE - # Translates some text into Russian translation = translate_client.translate( text, - target_language=target, - model=model) + target_language=target) print(u'Text: {}'.format(text)) print(u'Translation: {}'.format(translation['translatedText'])) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index dec8d172..46a2c335 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -63,9 +63,11 @@ def list_languages_with_target(api_key, target): print(u'{name} ({language})'.format(**language)) -def translate_text(api_key, target, text, model=translate.BASE): +def translate_text_with_model(api_key, target, text, model=translate.BASE): """Translates text into the target language. + Make sure your project is whitelisted. + Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ @@ -84,6 +86,26 @@ def translate_text(api_key, target, text, model=translate.BASE): result['detectedSourceLanguage'])) +def translate_text(api_key, target, text): + """Translates text into the target language. + + Target must be an ISO 639-1 language code. + See https://g.co/cloud/translate/v2/translate-reference#supported_languages + """ + translate_client = translate.Client(api_key=api_key) + + # Text can also be a sequence of strings, in which case this method + # will return a sequence of results for each text. + result = translate_client.translate( + text, + target_language=target) + + print(u'Text: {}'.format(result['input'])) + print(u'Translation: {}'.format(result['translatedText'])) + print(u'Detected source language: {}'.format( + result['detectedSourceLanguage'])) + + if __name__ == '__main__': parser = argparse.ArgumentParser( description=__doc__, @@ -106,7 +128,6 @@ def translate_text(api_key, target, text, model=translate.BASE): 'translate-text', help=translate_text.__doc__) translate_text_parser.add_argument('target') translate_text_parser.add_argument('text') - translate_text_parser.add_argument('model') args = parser.parse_args() @@ -117,4 +138,4 @@ def translate_text(api_key, target, text, model=translate.BASE): elif args.command == 'list-languages-with-target': list_languages_with_target(args.api_key, args.target) elif args.command == 'translate-text': - translate_text(args.api_key, args.target, args.text, args.model) + translate_text(args.api_key, args.target, args.text) From b5ddbe3caedabab66943be58f406e4664dee29fa Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Thu, 17 Nov 2016 11:29:56 -0800 Subject: [PATCH 08/94] Translate API no longer requires an API key. [(#659)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/659) --- samples/snippets/quickstart.py | 5 +---- samples/snippets/quickstart_test.py | 19 +------------------ samples/snippets/snippets.py | 29 ++++++++++++++--------------- samples/snippets/snippets_test.py | 8 ++++---- 4 files changed, 20 insertions(+), 41 deletions(-) diff --git a/samples/snippets/quickstart.py b/samples/snippets/quickstart.py index 71e0b0b3..c84ea892 100644 --- a/samples/snippets/quickstart.py +++ b/samples/snippets/quickstart.py @@ -20,11 +20,8 @@ def run_quickstart(): # Imports the Google Cloud client library from google.cloud import translate - # Your Translate API key - api_key = 'YOUR_API_KEY' - # Instantiates a client - translate_client = translate.Client(api_key=api_key) + translate_client = translate.Client() # The text to translate text = u'Hello, world!' diff --git a/samples/snippets/quickstart_test.py b/samples/snippets/quickstart_test.py index 5914cb5a..7ef89209 100644 --- a/samples/snippets/quickstart_test.py +++ b/samples/snippets/quickstart_test.py @@ -13,28 +13,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from google.cloud import translate -import mock -import pytest import quickstart -@pytest.fixture -def mock_client(cloud_config): - original_client_ctor = translate.Client - - def new_client_ctor(api_key): - # Strip api_key argument and replace with our api key. - return original_client_ctor(cloud_config.api_key) - - with mock.patch( - 'google.cloud.translate.Client', - side_effect=new_client_ctor): - yield - - -def test_quickstart(mock_client, capsys): +def test_quickstart(capsys): quickstart.run_quickstart() out, _ = capsys.readouterr() assert u'Привет мир!' in out diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 46a2c335..1288ae9f 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -26,9 +26,9 @@ from google.cloud import translate -def detect_language(api_key, text): +def detect_language(text): """Detects the text's language.""" - translate_client = translate.Client(api_key=api_key) + translate_client = translate.Client() # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. @@ -39,9 +39,9 @@ def detect_language(api_key, text): print('Language: {}'.format(result['language'])) -def list_languages(api_key): +def list_languages(): """Lists all available languages.""" - translate_client = translate.Client(api_key=api_key) + translate_client = translate.Client() results = translate_client.get_languages() @@ -49,13 +49,13 @@ def list_languages(api_key): print(u'{name} ({language})'.format(**language)) -def list_languages_with_target(api_key, target): +def list_languages_with_target(target): """Lists all available languages and localizes them to the target language. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ - translate_client = translate.Client(api_key=api_key) + translate_client = translate.Client() results = translate_client.get_languages(target_language=target) @@ -63,7 +63,7 @@ def list_languages_with_target(api_key, target): print(u'{name} ({language})'.format(**language)) -def translate_text_with_model(api_key, target, text, model=translate.BASE): +def translate_text_with_model(target, text, model=translate.BASE): """Translates text into the target language. Make sure your project is whitelisted. @@ -71,7 +71,7 @@ def translate_text_with_model(api_key, target, text, model=translate.BASE): Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ - translate_client = translate.Client(api_key=api_key) + translate_client = translate.Client() # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. @@ -86,13 +86,13 @@ def translate_text_with_model(api_key, target, text, model=translate.BASE): result['detectedSourceLanguage'])) -def translate_text(api_key, target, text): +def translate_text(target, text): """Translates text into the target language. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ - translate_client = translate.Client(api_key=api_key) + translate_client = translate.Client() # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. @@ -110,7 +110,6 @@ def translate_text(api_key, target, text): parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) - parser.add_argument('api_key', help='Your API key.') subparsers = parser.add_subparsers(dest='command') detect_langage_parser = subparsers.add_parser( @@ -132,10 +131,10 @@ def translate_text(api_key, target, text): args = parser.parse_args() if args.command == 'detect-language': - detect_language(args.api_key, args.text) + detect_language(args.text) elif args.command == 'list-languages': - list_languages(args.api_key) + list_languages() elif args.command == 'list-languages-with-target': - list_languages_with_target(args.api_key, args.target) + list_languages_with_target(args.target) elif args.command == 'translate-text': - translate_text(args.api_key, args.target, args.text) + translate_text(args.target, args.text) diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py index 79843233..434449f7 100644 --- a/samples/snippets/snippets_test.py +++ b/samples/snippets/snippets_test.py @@ -19,24 +19,24 @@ def test_detect_language(cloud_config, capsys): - snippets.detect_language(cloud_config.api_key, 'Hæ sæta') + snippets.detect_language('Hæ sæta') out, _ = capsys.readouterr() assert 'is' in out def test_list_languages(cloud_config, capsys): - snippets.list_languages(cloud_config.api_key) + snippets.list_languages() out, _ = capsys.readouterr() assert 'Icelandic (is)' in out def test_list_languages_with_target(cloud_config, capsys): - snippets.list_languages_with_target(cloud_config.api_key, 'is') + snippets.list_languages_with_target('is') out, _ = capsys.readouterr() assert u'íslenska (is)' in out def test_translate_text(cloud_config, capsys): - snippets.translate_text(cloud_config.api_key, 'is', 'Hello world') + snippets.translate_text('is', 'Hello world') out, _ = capsys.readouterr() assert u'Halló heimur' in out From a743ae0912e2d08e1560d479034d5b14030eb01d Mon Sep 17 00:00:00 2001 From: DPE bot Date: Tue, 13 Dec 2016 09:54:02 -0800 Subject: [PATCH 09/94] Auto-update dependencies. [(#715)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/715) --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index ba0605c8..db8f55ba 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==0.21.0 +google-cloud-translate==0.22.0 From a2cf9fb95fb7e3d13b48d8538924085e1dfec440 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Fri, 6 Jan 2017 09:28:45 -0800 Subject: [PATCH 10/94] Changes default model to premium [(#749)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/749) --- samples/snippets/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 1288ae9f..bd380b72 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -63,7 +63,7 @@ def list_languages_with_target(target): print(u'{name} ({language})'.format(**language)) -def translate_text_with_model(target, text, model=translate.BASE): +def translate_text_with_model(target, text, model=translate.NMT): """Translates text into the target language. Make sure your project is whitelisted. From 76c019a6f96d5b2824475500661e312815da1a4c Mon Sep 17 00:00:00 2001 From: Gus Class Date: Mon, 13 Feb 2017 16:19:55 -0800 Subject: [PATCH 11/94] Updates readme template to show credential auth instead of api key. [(#802)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/802) --- samples/snippets/README.rst | 37 ++++++++++++++++++++++++---------- samples/snippets/README.rst.in | 4 ++-- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index fc4e87d0..05067d64 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -17,17 +17,34 @@ Setup Authentication ++++++++++++++ -Authentication for this service is done via an `API Key`_. To obtain an API -Key: +Authentication is typically done through `Application Default Credentials`_, +which means you do not have to change the code to authenticate as long as +your environment has credentials. You have a few options for setting up +authentication: -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. +#. When running locally, use the `Google Cloud SDK`_ -.. _API Key: - https://developers.google.com/api-client-library/python/guide/aaa_apikeys -.. _Cloud Console: https://console.cloud.google.com/project?_ + .. code-block:: bash + + gcloud beta auth application-default login + + +#. When running on App Engine or Compute Engine, credentials are already + set-up. However, you may need to configure your Compute Engine instance + with `additional scopes`_. + +#. You can create a `Service Account key file`_. This file can be used to + authenticate to Google Cloud Platform services from any environment. To use + the file, set the ``GOOGLE_APPLICATION_CREDENTIALS`` environment variable to + the path to the key file, for example: + + .. code-block:: bash + + export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service_account.json + +.. _Application Default Credentials: https://cloud.google.com/docs/authentication#getting_credentials_for_server-centric_flow +.. _additional scopes: https://cloud.google.com/compute/docs/authentication#using +.. _Service Account key file: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount Install Dependencies ++++++++++++++++++++ @@ -77,7 +94,6 @@ To run this sample: $ python snippets.py usage: snippets.py [-h] - api_key {detect-language,list-languages,list-languages-with-target,translate-text} ... @@ -88,7 +104,6 @@ To run this sample: https://cloud.google.com/translate/docs. positional arguments: - api_key Your API key. {detect-language,list-languages,list-languages-with-target,translate-text} detect-language Detects the text's language. list-languages Lists all available languages. diff --git a/samples/snippets/README.rst.in b/samples/snippets/README.rst.in index 6ac89da1..0fe2a339 100644 --- a/samples/snippets/README.rst.in +++ b/samples/snippets/README.rst.in @@ -4,12 +4,12 @@ product: name: Google Translate API short_name: Translate API url: https://cloud.google.com/translate/docs - description: > + description: > With `Google Translate API`, you can dynamically translate text between thousands of language pairs. setup: -- auth_api_key +- auth - install_deps samples: From f4502c0bbc84ef7a81c44ad0b7530a648166effb Mon Sep 17 00:00:00 2001 From: Gus Class Date: Tue, 7 Mar 2017 14:28:45 -0800 Subject: [PATCH 12/94] Updates translate version to match speech and language. [(#843)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/843) --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index db8f55ba..7c46982b 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==0.22.0 +google-cloud-translate==0.23.0 From ba65bb2d2170e23485d22c3aaa0fecb702bc7ba9 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Tue, 4 Apr 2017 14:43:52 -0700 Subject: [PATCH 13/94] Translate update [(#886)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/886) --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 7c46982b..41d24f2a 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==0.23.0 +google-cloud-translate==0.24.0 From 4de3659942e0e6451176fe28063bf1bd6cba5af8 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Tue, 4 Apr 2017 16:08:30 -0700 Subject: [PATCH 14/94] Remove cloud config fixture [(#887)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/887) * Remove cloud config fixture * Fix client secrets * Fix bigtable instance --- samples/snippets/snippets_test.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py index 434449f7..620fffbd 100644 --- a/samples/snippets/snippets_test.py +++ b/samples/snippets/snippets_test.py @@ -18,25 +18,25 @@ import snippets -def test_detect_language(cloud_config, capsys): +def test_detect_language(capsys): snippets.detect_language('Hæ sæta') out, _ = capsys.readouterr() assert 'is' in out -def test_list_languages(cloud_config, capsys): +def test_list_languages(capsys): snippets.list_languages() out, _ = capsys.readouterr() assert 'Icelandic (is)' in out -def test_list_languages_with_target(cloud_config, capsys): +def test_list_languages_with_target(capsys): snippets.list_languages_with_target('is') out, _ = capsys.readouterr() assert u'íslenska (is)' in out -def test_translate_text(cloud_config, capsys): +def test_translate_text(capsys): snippets.translate_text('is', 'Hello world') out, _ = capsys.readouterr() assert u'Halló heimur' in out From 9fcaaf403950b0e2c04e802c899a094dcf385b95 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Fri, 14 Apr 2017 15:34:32 -0700 Subject: [PATCH 15/94] Unicode for translation --- samples/snippets/snippets.py | 6 +++++- samples/snippets/snippets_test.py | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index bd380b72..5babce8c 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -1,4 +1,6 @@ #!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + # Copyright 2016 Google, Inc. # @@ -22,6 +24,8 @@ """ import argparse +import os +import sys from google.cloud import translate @@ -97,7 +101,7 @@ def translate_text(target, text): # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. result = translate_client.translate( - text, + unicode(text, 'utf8'), target_language=target) print(u'Text: {}'.format(result['input'])) diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py index 620fffbd..138be4f0 100644 --- a/samples/snippets/snippets_test.py +++ b/samples/snippets/snippets_test.py @@ -40,3 +40,7 @@ def test_translate_text(capsys): snippets.translate_text('is', 'Hello world') out, _ = capsys.readouterr() assert u'Halló heimur' in out + +def test_translate_utf8(capsys): + text = '나는 파인애플을 좋아한다.' + snippets.translate_text('en', text) From c38796e9719acf6356836ea1fd1cb1687ea283f3 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Fri, 14 Apr 2017 15:40:00 -0700 Subject: [PATCH 16/94] Adds check for translated text --- samples/snippets/snippets_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py index 138be4f0..6235fd04 100644 --- a/samples/snippets/snippets_test.py +++ b/samples/snippets/snippets_test.py @@ -44,3 +44,5 @@ def test_translate_text(capsys): def test_translate_utf8(capsys): text = '나는 파인애플을 좋아한다.' snippets.translate_text('en', text) + out, _ = capsys.readouterr() + assert 'I like pineapple.' in out From f8932faa28dbd7a3c9f7c3aed432a4a985424277 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Fri, 14 Apr 2017 15:34:32 -0700 Subject: [PATCH 17/94] Unicode for translation --- samples/snippets/snippets.py | 3 +-- samples/snippets/snippets_test.py | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 5babce8c..235d202c 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -24,8 +24,7 @@ """ import argparse -import os -import sys + from google.cloud import translate diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py index 6235fd04..fd53bbc5 100644 --- a/samples/snippets/snippets_test.py +++ b/samples/snippets/snippets_test.py @@ -41,6 +41,7 @@ def test_translate_text(capsys): out, _ = capsys.readouterr() assert u'Halló heimur' in out + def test_translate_utf8(capsys): text = '나는 파인애플을 좋아한다.' snippets.translate_text('en', text) From a948f7366c7b9f6960303ef8e7c2f95b9bb5a13e Mon Sep 17 00:00:00 2001 From: Gus Class Date: Fri, 14 Apr 2017 15:34:32 -0700 Subject: [PATCH 18/94] Unicode for translation --- samples/snippets/snippets.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 235d202c..63da851a 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -24,6 +24,8 @@ """ import argparse +import os +import sys from google.cloud import translate From 4de577bc4e8dba65b5181a2e89016de1a882c6ec Mon Sep 17 00:00:00 2001 From: Gus Class Date: Fri, 14 Apr 2017 15:34:32 -0700 Subject: [PATCH 19/94] Unicode for translation --- samples/snippets/snippets.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 63da851a..6b39afe9 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -24,9 +24,6 @@ """ import argparse -import os -import sys - from google.cloud import translate From 2c1a51f8557502b0f0fa36a59748a18dce0bab50 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Fri, 14 Apr 2017 16:13:49 -0700 Subject: [PATCH 20/94] missing newline --- samples/snippets/snippets.py | 1 + 1 file changed, 1 insertion(+) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 6b39afe9..235d202c 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -25,6 +25,7 @@ import argparse + from google.cloud import translate From b8b38d4c1338d4f6dfee89fd3560353affbc2a15 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Mon, 17 Apr 2017 14:03:04 -0700 Subject: [PATCH 21/94] Adds six for 2/3 compatibility --- samples/snippets/snippets.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 235d202c..1901c058 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -27,6 +27,7 @@ from google.cloud import translate +from six import python_2_unicode_compatible def detect_language(text): @@ -89,6 +90,7 @@ def translate_text_with_model(target, text, model=translate.NMT): result['detectedSourceLanguage'])) +@python_2_unicode_compatible def translate_text(target, text): """Translates text into the target language. From 2f5cb8054d549d65c98fa9479d5c0d4bdef60c9b Mon Sep 17 00:00:00 2001 From: Gus Class Date: Mon, 17 Apr 2017 14:42:22 -0700 Subject: [PATCH 22/94] Changes encoding style. --- samples/snippets/snippets.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 1901c058..139b717a 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -1,6 +1,4 @@ #!/usr/bin/env python -# -*- coding: iso-8859-15 -*- - # Copyright 2016 Google, Inc. # @@ -27,7 +25,6 @@ from google.cloud import translate -from six import python_2_unicode_compatible def detect_language(text): @@ -80,7 +77,7 @@ def translate_text_with_model(target, text, model=translate.NMT): # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. result = translate_client.translate( - text, + text.decode('utf-8'), target_language=target, model=model) @@ -90,7 +87,6 @@ def translate_text_with_model(target, text, model=translate.NMT): result['detectedSourceLanguage'])) -@python_2_unicode_compatible def translate_text(target, text): """Translates text into the target language. @@ -102,7 +98,7 @@ def translate_text(target, text): # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. result = translate_client.translate( - unicode(text, 'utf8'), + text.decode('utf-8'), target_language=target) print(u'Text: {}'.format(result['input'])) From 8d85abcf397c89b39bf0d0b5bd935d6b907cc144 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Tue, 18 Apr 2017 14:40:38 -0700 Subject: [PATCH 23/94] Fix unicode --- samples/snippets/snippets.py | 15 +++++++++------ samples/snippets/snippets_test.py | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 139b717a..91aef63d 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -23,8 +23,8 @@ import argparse - from google.cloud import translate +import six def detect_language(text): @@ -74,12 +74,13 @@ def translate_text_with_model(target, text, model=translate.NMT): """ translate_client = translate.Client() + if isinstance(text, six.binary_type): + text = text.decode('utf-8') + # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. result = translate_client.translate( - text.decode('utf-8'), - target_language=target, - model=model) + text, target_language=target, model=model) print(u'Text: {}'.format(result['input'])) print(u'Translation: {}'.format(result['translatedText'])) @@ -95,11 +96,13 @@ def translate_text(target, text): """ translate_client = translate.Client() + if isinstance(text, six.binary_type): + text = text.decode('utf-8') + # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. result = translate_client.translate( - text.decode('utf-8'), - target_language=target) + text, target_language=target) print(u'Text: {}'.format(result['input'])) print(u'Translation: {}'.format(result['translatedText'])) diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py index fd53bbc5..153ee104 100644 --- a/samples/snippets/snippets_test.py +++ b/samples/snippets/snippets_test.py @@ -43,7 +43,7 @@ def test_translate_text(capsys): def test_translate_utf8(capsys): - text = '나는 파인애플을 좋아한다.' + text = u'나는 파인애플을 좋아한다.' snippets.translate_text('en', text) out, _ = capsys.readouterr() - assert 'I like pineapple.' in out + assert u'I like pineapple.' in out From 52f0cba6af047e7c37d6d5d41dca6293699eaef3 Mon Sep 17 00:00:00 2001 From: florencep Date: Thu, 20 Apr 2017 09:48:17 -0700 Subject: [PATCH 24/94] renaming of the product to Google Translation API [(#910)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/910) --- samples/snippets/README.rst.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/snippets/README.rst.in b/samples/snippets/README.rst.in index 0fe2a339..c6b27a36 100644 --- a/samples/snippets/README.rst.in +++ b/samples/snippets/README.rst.in @@ -1,11 +1,11 @@ # This file is used to generate README.rst product: - name: Google Translate API - short_name: Translate API + name: Google Translation API + short_name: Translation API url: https://cloud.google.com/translate/docs description: > - With `Google Translate API`, you can dynamically translate text between + With `Google Translation API`, you can dynamically translate text between thousands of language pairs. setup: From a697eb1ed4d4b6b48920f6bd8460a9e38c244d27 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Thu, 20 Apr 2017 10:54:19 -0700 Subject: [PATCH 25/94] Update translate readme --- samples/snippets/README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index 05067d64..db653e3b 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -1,14 +1,14 @@ .. This file is automatically generated. Do not edit this file directly. -Google Translate API Python Samples +Google Translation API Python Samples =============================================================================== -This directory contains samples for Google Translate API. With `Google Translate API`, you can dynamically translate text between thousands of language pairs. +This directory contains samples for Google Translation API. With `Google Translation API`, you can dynamically translate text between thousands of language pairs. -.. _Google Translate API: https://cloud.google.com/translate/docs +.. _Google Translation API: https://cloud.google.com/translate/docs Setup ------------------------------------------------------------------------------- From 108abe5af0419e55a0ab5b5a93cb3ba748087a08 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Thu, 27 Apr 2017 09:54:41 -0700 Subject: [PATCH 26/94] Re-generate all readmes --- samples/snippets/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index db653e3b..97480ee6 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -26,7 +26,7 @@ authentication: .. code-block:: bash - gcloud beta auth application-default login + gcloud auth application-default login #. When running on App Engine or Compute Engine, credentials are already From 16186f4205e77517b83819c654598616fefaf4b9 Mon Sep 17 00:00:00 2001 From: Bill Prin Date: Tue, 23 May 2017 17:01:25 -0700 Subject: [PATCH 27/94] Fix README rst links [(#962)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/962) * Fix README rst links * Update all READMEs --- samples/snippets/README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index 97480ee6..fe805724 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -130,11 +130,11 @@ 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: +.. _Google Cloud Client Library for Python: https://googlecloudplatform.github.io/google-cloud-python/ -.. browse the source: +.. _browse the source: https://github.com/GoogleCloudPlatform/google-cloud-python -.. report issues: +.. _report issues: https://github.com/GoogleCloudPlatform/google-cloud-python/issues From de3d7f37523f72692af5fee6ab420d0605f1083b Mon Sep 17 00:00:00 2001 From: DPE bot Date: Tue, 27 Jun 2017 12:41:15 -0700 Subject: [PATCH 28/94] 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 --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 41d24f2a..86747703 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==0.24.0 +google-cloud-translate==0.25.0 From 22402febd8e9e3599feb5336fe7c5b9fe601becf Mon Sep 17 00:00:00 2001 From: DPE bot Date: Mon, 7 Aug 2017 10:04:55 -0700 Subject: [PATCH 29/94] 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 --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 86747703..c0e0d9c6 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==0.25.0 +google-cloud-translate==1.1.0 From 0e7e947f1310d592deba85b5fba53d6eb0321c60 Mon Sep 17 00:00:00 2001 From: DPE bot Date: Tue, 29 Aug 2017 16:53:02 -0700 Subject: [PATCH 30/94] 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 --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index c0e0d9c6..8715cc0e 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==1.1.0 +google-cloud-translate==1.2.0 From 20d7d843597550fe44b12c0bcfc21b40a737de66 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Mon, 18 Sep 2017 11:04:05 -0700 Subject: [PATCH 31/94] Update all generated readme auth instructions [(#1121)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1121) Change-Id: I03b5eaef8b17ac3dc3c0339fd2c7447bd3e11bd2 --- samples/snippets/README.rst | 32 +++++--------------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index fe805724..23e89f04 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -17,34 +17,12 @@ Setup Authentication ++++++++++++++ -Authentication is typically done through `Application Default Credentials`_, -which means you do not have to change the code to authenticate as long as -your environment has credentials. You have a few options for setting up -authentication: +This sample requires you to have authentication setup. Refer to the +`Authentication Getting Started Guide`_ for instructions on setting up +credentials for applications. -#. When running locally, use the `Google Cloud SDK`_ - - .. code-block:: bash - - gcloud auth application-default login - - -#. When running on App Engine or Compute Engine, credentials are already - set-up. However, you may need to configure your Compute Engine instance - with `additional scopes`_. - -#. You can create a `Service Account key file`_. This file can be used to - authenticate to Google Cloud Platform services from any environment. To use - the file, set the ``GOOGLE_APPLICATION_CREDENTIALS`` environment variable to - the path to the key file, for example: - - .. code-block:: bash - - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service_account.json - -.. _Application Default Credentials: https://cloud.google.com/docs/authentication#getting_credentials_for_server-centric_flow -.. _additional scopes: https://cloud.google.com/compute/docs/authentication#using -.. _Service Account key file: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount +.. _Authentication Getting Started Guide: + https://cloud.google.com/docs/authentication/getting-started Install Dependencies ++++++++++++++++++++ From 0cbb423ec7678c624f6c7457154240ac57603c83 Mon Sep 17 00:00:00 2001 From: michaelawyu Date: Thu, 12 Oct 2017 10:16:11 -0700 Subject: [PATCH 32/94] 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 --- samples/snippets/README.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index 23e89f04..b4582262 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -27,7 +27,10 @@ credentials for applications. Install Dependencies ++++++++++++++++++++ -#. Install `pip`_ and `virtualenv`_ if you do not already have them. +#. 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+. From cac8c70d8180eeb8a21ae4ff8ad8b03c38855580 Mon Sep 17 00:00:00 2001 From: DPE bot Date: Wed, 1 Nov 2017 12:30:10 -0700 Subject: [PATCH 33/94] Auto-update dependencies. [(#1186)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1186) --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 8715cc0e..8baaf5bd 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==1.2.0 +google-cloud-translate==1.3.0 From 434eba0006a7ba8080f9fc728455c6d6e207029c Mon Sep 17 00:00:00 2001 From: michaelawyu Date: Fri, 3 Nov 2017 12:48:24 -0700 Subject: [PATCH 34/94] Fixed failed tests on Kokoro (Spanner + Translate) [(#1192)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1192) * Fixed failed tests on Kokoro (Spanner + Translate) * Update quickstart_test.py --- samples/snippets/snippets_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py index 153ee104..51235766 100644 --- a/samples/snippets/snippets_test.py +++ b/samples/snippets/snippets_test.py @@ -46,4 +46,4 @@ def test_translate_utf8(capsys): text = u'나는 파인애플을 좋아한다.' snippets.translate_text('en', text) out, _ = capsys.readouterr() - assert u'I like pineapple.' in out + assert u'I like pineapples.' in out From 0d514cca2921b2f9ed3cd58dbbc33cd58f096001 Mon Sep 17 00:00:00 2001 From: michaelawyu Date: Thu, 7 Dec 2017 10:34:29 -0800 Subject: [PATCH 35/94] Added "Open in Cloud Shell" buttons to README files [(#1254)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1254) --- samples/snippets/README.rst | 21 +++++++++++++++++---- samples/snippets/README.rst.in | 2 ++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index b4582262..ae63d910 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -3,6 +3,10 @@ Google Translation API 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=translate/cloud-client/README.rst + + This directory contains samples for Google Translation API. With `Google Translation API`, you can dynamically translate text between thousands of language pairs. @@ -54,6 +58,10 @@ Samples Quickstart +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +.. 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=translate/cloud-client/quickstart.py;translate/cloud-client/README.rst + + To run this sample: @@ -66,6 +74,10 @@ To run this sample: Snippets +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +.. 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=translate/cloud-client/snippets.py;translate/cloud-client/README.rst + + To run this sample: @@ -77,13 +89,13 @@ To run this sample: usage: snippets.py [-h] {detect-language,list-languages,list-languages-with-target,translate-text} ... - + This application demonstrates how to perform basic operations with the Google Cloud Translate API - + For more information, the documentation at https://cloud.google.com/translate/docs. - + positional arguments: {detect-language,list-languages,list-languages-with-target,translate-text} detect-language Detects the text's language. @@ -97,13 +109,14 @@ To run this sample: be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate- reference#supported_languages - + optional arguments: -h, --help show this help message and exit + The client library ------------------------------------------------------------------------------- diff --git a/samples/snippets/README.rst.in b/samples/snippets/README.rst.in index c6b27a36..a2483218 100644 --- a/samples/snippets/README.rst.in +++ b/samples/snippets/README.rst.in @@ -20,3 +20,5 @@ samples: show_help: true cloud_client_library: true + +folder: translate/cloud-client \ No newline at end of file From 61265f2374a5c5eac370229ed148877ce3a7fe6f Mon Sep 17 00:00:00 2001 From: DPE bot Date: Mon, 5 Mar 2018 12:28:55 -0800 Subject: [PATCH 36/94] Auto-update dependencies. [(#1377)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1377) * Auto-update dependencies. * Update requirements.txt --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 8baaf5bd..e0c34b40 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==1.3.0 +google-cloud-translate==1.3.1 From 541a3a5841ec9c43e334ff1d4b4273e6ce9f91ea Mon Sep 17 00:00:00 2001 From: chenyumic Date: Fri, 6 Apr 2018 22:57:36 -0700 Subject: [PATCH 37/94] 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) --- samples/snippets/README.rst | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index ae63d910..60018b25 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -12,7 +12,7 @@ This directory contains samples for Google Translation API. With `Google Transla -.. _Google Translation API: https://cloud.google.com/translate/docs +.. _Google Translation API: https://cloud.google.com/translate/docs Setup ------------------------------------------------------------------------------- @@ -59,7 +59,7 @@ Quickstart +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. 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=translate/cloud-client/quickstart.py;translate/cloud-client/README.rst + :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=translate/cloud-client/quickstart.py,translate/cloud-client/README.rst @@ -75,7 +75,7 @@ Snippets +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. 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=translate/cloud-client/snippets.py;translate/cloud-client/README.rst + :target: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=translate/cloud-client/snippets.py,translate/cloud-client/README.rst @@ -103,8 +103,9 @@ To run this sample: list-languages-with-target Lists all available languages and localizes them to the target language. Target must be an ISO 639-1 - language code. See https://g.co/cloud/translate/v2 - /translate-reference#supported_languages + language code. See + https://g.co/cloud/translate/v2/translate- + reference#supported_languages translate-text Translates text into the target language. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate- From 69abd4f61e252758f5e50f89d38b541256ab5592 Mon Sep 17 00:00:00 2001 From: Frank Natividad Date: Thu, 26 Apr 2018 10:26:41 -0700 Subject: [PATCH 38/94] Update READMEs to fix numbering and add git clone [(#1464)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1464) --- samples/snippets/README.rst | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index 60018b25..4935e3c8 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -31,10 +31,16 @@ credentials for applications. 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 + .. _Python Development Environment Setup Guide: + https://cloud.google.com/python/setup #. Create a virtualenv. Samples are compatible with Python 2.7 and 3.4+. @@ -103,9 +109,8 @@ To run this sample: list-languages-with-target Lists all available languages and localizes them to the target language. Target must be an ISO 639-1 - language code. See - https://g.co/cloud/translate/v2/translate- - reference#supported_languages + language code. See https://g.co/cloud/translate/v2 + /translate-reference#supported_languages translate-text Translates text into the target language. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate- From ef12fcb8571fc64405e086ce7eb77e44e64333a9 Mon Sep 17 00:00:00 2001 From: Averi Kitsch Date: Mon, 21 May 2018 11:25:34 -0700 Subject: [PATCH 39/94] Add translate region tags [(#1488)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1488) * Add region tags * Added end region tags * Linting errors fixed --- samples/snippets/snippets.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 91aef63d..b5719d23 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -28,6 +28,7 @@ def detect_language(text): + # [START translate_detect_language] """Detects the text's language.""" translate_client = translate.Client() @@ -38,9 +39,11 @@ def detect_language(text): print('Text: {}'.format(text)) print('Confidence: {}'.format(result['confidence'])) print('Language: {}'.format(result['language'])) + # [END translate_detect_language] def list_languages(): + # [START translate_list_codes] """Lists all available languages.""" translate_client = translate.Client() @@ -48,9 +51,11 @@ def list_languages(): for language in results: print(u'{name} ({language})'.format(**language)) + # [END translate_list_codes] def list_languages_with_target(target): + # [START translate_list_language_names] """Lists all available languages and localizes them to the target language. Target must be an ISO 639-1 language code. @@ -62,9 +67,11 @@ def list_languages_with_target(target): for language in results: print(u'{name} ({language})'.format(**language)) + # [END translate_list_language_names] def translate_text_with_model(target, text, model=translate.NMT): + # [START translate_text_with_model] """Translates text into the target language. Make sure your project is whitelisted. @@ -86,9 +93,11 @@ def translate_text_with_model(target, text, model=translate.NMT): print(u'Translation: {}'.format(result['translatedText'])) print(u'Detected source language: {}'.format( result['detectedSourceLanguage'])) + # [END translate_text_with_model] def translate_text(target, text): + # [START translate_translate_text] """Translates text into the target language. Target must be an ISO 639-1 language code. @@ -108,6 +117,7 @@ def translate_text(target, text): print(u'Translation: {}'.format(result['translatedText'])) print(u'Detected source language: {}'.format( result['detectedSourceLanguage'])) + # [END translate_translate_text] if __name__ == '__main__': From 294fe72408193b598628d0b661c8925c07708357 Mon Sep 17 00:00:00 2001 From: Charles Engelke Date: Mon, 22 Oct 2018 15:54:25 -0700 Subject: [PATCH 40/94] Include the comma in the translation [(#1787)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1787) --- samples/snippets/quickstart_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/quickstart_test.py b/samples/snippets/quickstart_test.py index 7ef89209..4018daa0 100644 --- a/samples/snippets/quickstart_test.py +++ b/samples/snippets/quickstart_test.py @@ -20,4 +20,4 @@ def test_quickstart(capsys): quickstart.run_quickstart() out, _ = capsys.readouterr() - assert u'Привет мир!' in out + assert u'Привет, мир!' in out From d2c3149f3b08dc7aaa16719d712aa3b346292a93 Mon Sep 17 00:00:00 2001 From: DPEBot Date: Wed, 6 Feb 2019 12:06:35 -0800 Subject: [PATCH 41/94] Auto-update dependencies. [(#1980)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1980) * Auto-update dependencies. * Update requirements.txt * Update requirements.txt --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index e0c34b40..62b23909 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-translate==1.3.1 +google-cloud-translate==1.3.3 From 7cba1514fbcf05512750e47d42273f13b5ece13c Mon Sep 17 00:00:00 2001 From: Rebecca Taylor Date: Sat, 6 Apr 2019 11:15:58 -0700 Subject: [PATCH 42/94] Translation v3beta1 samples [(#2084)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2084) * Add in progress beta snippets Change-Id: I2cd8ddc2307a8e40d56ce7e493749dc05c34d164 * Add google-cloud-storage dependency Change-Id: Iff7bc9b2c82b1e829580a3d4ad628087dbeee8be * Non-'global' location required for BatchTranslateText Change-Id: I5198aa6368a088e8f5ee295dc55a5e9e4ca8f494 * Upgrade google-cloud-translate to 1.4.0 1.4.0 includes the new v3beta1 alongside V2 Change-Id: I5adfe78ea7e78d84678db343cd84516e3d05491f * Update Translate samples You can now provide your own glossary ID The tests now run within a randomly created bucket (deleted after each test) Change-Id: I5cb2680cd0e9e43c85932a6a0dc19e6fab5008c5 * pytest.fixture for random test bucket Change-Id: I8e816ed4c95a6235347a29849044b4cab02d40a8 * flake8 spec fixes Change-Id: I4932bcf856a9498b01d9661c90c6b45ee2958ee1 * Added pytest fixture for creating glossary (WIP) Change-Id: Iddb5ecbf0eefb9efd2243dc4bc56b585102e9351 * Add assertions, remove placeholder TODOs Change-Id: If1eb20bca5bfcc87dd0652d5488b2188afa626af --- samples/snippets/README.rst | 37 +++ samples/snippets/README.rst.in | 3 + samples/snippets/beta_snippets.py | 357 +++++++++++++++++++++++++ samples/snippets/beta_snippets_test.py | 134 ++++++++++ samples/snippets/requirements.txt | 3 +- 5 files changed, 533 insertions(+), 1 deletion(-) create mode 100644 samples/snippets/beta_snippets.py create mode 100644 samples/snippets/beta_snippets_test.py diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index 4935e3c8..f5065ed4 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -121,6 +121,43 @@ To run this sample: +Beta Snippets ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +.. 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=translate/cloud-client/beta_snippets.py,translate/cloud-client/README.rst + + + + +To run this sample: + +.. code-block:: bash + + $ python beta_snippets.py + + usage: beta_snippets.py [-h] + {translate-text,batch-translate-text,detect-language,list-languages,list-languages-with-target,create-glossary,get-glossary,list-glossaries,delete-glossary,translate-with-glossary} + ... + + positional arguments: + {translate-text,batch-translate-text,detect-language,list-languages,list-languages-with-target,create-glossary,get-glossary,list-glossaries,delete-glossary,translate-with-glossary} + translate-text + batch-translate-text + detect-language + list-languages + list-languages-with-target + create-glossary + get-glossary + list-glossaries + delete-glossary + translate-with-glossary + + optional arguments: + -h, --help show this help message and exit + + + The client library diff --git a/samples/snippets/README.rst.in b/samples/snippets/README.rst.in index a2483218..ba804e74 100644 --- a/samples/snippets/README.rst.in +++ b/samples/snippets/README.rst.in @@ -18,6 +18,9 @@ samples: - name: Snippets file: snippets.py show_help: true +- name: Beta Snippets + file: beta_snippets.py + show_help: true cloud_client_library: true diff --git a/samples/snippets/beta_snippets.py b/samples/snippets/beta_snippets.py new file mode 100644 index 00000000..7cd94aed --- /dev/null +++ b/samples/snippets/beta_snippets.py @@ -0,0 +1,357 @@ +# 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 argparse + + +def translate_text(project_id, text): + # [START translate_translate_text_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = YOUR_PROJECT_ID + # text = 'Text you wish to translate' + location = 'global' + + parent = client.location_path(project_id, location) + + response = client.translate_text( + parent=parent, + contents=[text], + mime_type='text/plain', # mime types: text/plain, text/html + source_language_code='en-US', + target_language_code='sr-Latn') + + for translation in response.translations: + print('Translated Text: {}'.format(translation)) + # [END translate_translate_text_beta] + + +def batch_translate_text(project_id, input_uri, output_uri): + # [START translate_batch_translate_text_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = YOUR_PROJECT_ID + # input_uri = 'gs://cloud-samples-data/translation/text.txt' + # output_uri = 'gs://YOUR_BUCKET_ID/path_to_store_results/' + location = 'us-central1' + + parent = client.location_path(project_id, location) + + gcs_source = translate.types.GcsSource(input_uri=input_uri) + + input_config = translate.types.InputConfig( + mime_type='text/plain', # mime types: text/plain, text/html + gcs_source=gcs_source) + + gcs_destination = translate.types.GcsDestination( + output_uri_prefix=output_uri) + + output_config = translate.types.OutputConfig( + gcs_destination=gcs_destination) + + operation = client.batch_translate_text( + parent=parent, + source_language_code='en-US', + target_language_codes=['sr-Latn'], + input_configs=[input_config], + output_config=output_config) + + result = operation.result(90) + + print('Total Characters: {}'.format(result.total_characters)) + print('Translated Characters: {}'.format(result.translated_characters)) + # [END translate_batch_translate_text_beta] + + +def detect_language(project_id, text): + # [START translate_detect_language_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = YOUR_PROJECT_ID + # text = 'Text you wish to translate' + location = 'global' + + parent = client.location_path(project_id, location) + + response = client.detect_language( + parent=parent, + content=text, + mime_type='text/plain') # mime types: text/plain, text/html + + for language in response.languages: + print('Language Code: {} (Confidence: {})'.format( + language.language_code, + language.confidence)) + # [END translate_detect_language_beta] + + +def list_languages(project_id): + # [START translate_list_codes_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = YOUR_PROJECT_ID + location = 'global' + + parent = client.location_path(project_id, location) + + response = client.get_supported_languages(parent) + + print('Supported Languages:') + for language in response.languages: + print('Language Code: {}'.format(language.language_code)) + # [END translate_list_codes_beta] + + +def list_languages_with_target(project_id, display_language_code): + # [START translate_list_language_names_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = YOUR_PROJECT_ID + # display_language_code = 'is' + location = 'global' + + parent = client.location_path(project_id, location) + + response = client.get_supported_languages( + parent=parent, + display_language_code=display_language_code) + + print('Supported Languages:') + for language in response.languages: + print('Language Code: {}'.format(language.language_code)) + print('Display Name: {}\n'.format(language.display_name)) + # [END translate_list_language_names_beta] + + +def create_glossary(project_id, glossary_id): + # [START translate_create_glossary_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = 'YOUR_PROJECT_ID' + # glossary_id = 'glossary-id' + location = 'us-central1' # The location of the glossary + + name = client.glossary_path( + project_id, + location, + glossary_id) + + language_codes_set = translate.types.Glossary.LanguageCodesSet( + language_codes=['en', 'es']) + + gcs_source = translate.types.GcsSource( + input_uri='gs://cloud-samples-data/translation/glossary.csv') + + input_config = translate.types.GlossaryInputConfig( + gcs_source=gcs_source) + + glossary = translate.types.Glossary( + name=name, + language_codes_set=language_codes_set, + input_config=input_config) + + parent = client.location_path(project_id, location) + + operation = client.create_glossary(parent=parent, glossary=glossary) + + result = operation.result(timeout=90) + print('Created: {}'.format(result.name)) + print('Input Uri: {}'.format(result.input_config.gcs_source.input_uri)) + # [END translate_create_glossary_beta] + + +def list_glossaries(project_id): + # [START translate_list_glossary_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = 'YOUR_PROJECT_ID' + location = 'us-central1' # The location of the glossary + + parent = client.location_path(project_id, location) + + for glossary in client.list_glossaries(parent): + print('Name: {}'.format(glossary.name)) + print('Entry count: {}'.format(glossary.entry_count)) + print('Input uri: {}'.format( + glossary.input_config.gcs_source.input_uri)) + for language_code in glossary.language_codes_set.language_codes: + print('Language code: {}'.format(language_code)) + # [END translate_list_glossary_beta] + + +def get_glossary(project_id, glossary_id): + # [START translate_get_glossary_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = 'YOUR_PROJECT_ID' + # glossary_id = 'GLOSSARY_ID' + + parent = client.glossary_path( + project_id, + 'us-central1', # The location of the glossary + glossary_id) + + response = client.get_glossary(parent) + print('Name: {}'.format(response.name)) + print('Language Pair:') + print('\tSource Language Code: {}'.format( + response.language_pair.source_language_code)) + print('\tTarget Language Code: {}'.format( + response.language_pair.target_language_code)) + print('Input Uri: {}'.format( + response.input_config.gcs_source.input_uri)) + # [END translate_get_glossary_beta] + + +def delete_glossary(project_id, glossary_id): + # [START translate_delete_glossary_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = 'YOUR_PROJECT_ID' + # glossary_id = 'GLOSSARY_ID' + + parent = client.glossary_path( + project_id, + 'us-central1', # The location of the glossary + glossary_id) + + operation = client.delete_glossary(parent) + result = operation.result(timeout=90) + print('Deleted: {}'.format(result.name)) + # [END translate_delete_glossary_beta] + + +def translate_text_with_glossary(project_id, glossary_id, text): + # [START translate_translate_text_with_glossary_beta] + from google.cloud import translate_v3beta1 as translate + client = translate.TranslationServiceClient() + + # project_id = 'YOUR_PROJECT_ID' + # glossary_id = 'GLOSSARY_ID' + # text = 'Text you wish to translate' + location = 'us-central1' # The location of the glossary + + glossary = client.glossary_path( + project_id, + 'us-central1', # The location of the glossary + glossary_id) + + glossary_config = translate.types.TranslateTextGlossaryConfig( + glossary=glossary) + + parent = client.location_path(project_id, location) + + result = client.translate_text( + parent=parent, + contents=[text], + mime_type='text/plain', # mime types: text/plain, text/html + source_language_code='en', + target_language_code='es', + glossary_config=glossary_config) + + for translation in result.translations: + print(translation) + # [END translate_translate_text_with_glossary_beta] + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + + subparsers = parser.add_subparsers(dest='command') + + translate_text_parser = subparsers.add_parser( + 'translate-text', help=translate_text.__doc__) + translate_text_parser.add_argument('project_id') + translate_text_parser.add_argument('text') + + batch_translate_text_parser = subparsers.add_parser( + 'batch-translate-text', help=translate_text.__doc__) + batch_translate_text_parser.add_argument('project_id') + batch_translate_text_parser.add_argument('gcs_source') + batch_translate_text_parser.add_argument('gcs_destination') + + detect_langage_parser = subparsers.add_parser( + 'detect-language', help=detect_language.__doc__) + detect_langage_parser.add_argument('project_id') + detect_langage_parser.add_argument('text') + + list_languages_parser = subparsers.add_parser( + 'list-languages', help=list_languages.__doc__) + list_languages_parser.add_argument('project_id') + + list_languages_with_target_parser = subparsers.add_parser( + 'list-languages-with-target', help=list_languages_with_target.__doc__) + list_languages_with_target_parser.add_argument('project_id') + list_languages_with_target_parser.add_argument('display_language_code') + + create_glossary_parser = subparsers.add_parser( + 'create-glossary', help=create_glossary.__doc__) + create_glossary_parser.add_argument('project_id') + create_glossary_parser.add_argument('glossary_id') + + get_glossary_parser = subparsers.add_parser( + 'get-glossary', help=get_glossary.__doc__) + get_glossary_parser.add_argument('project_id') + get_glossary_parser.add_argument('glossary_id') + + list_glossary_parser = subparsers.add_parser( + 'list-glossaries', help=list_glossaries.__doc__) + list_glossary_parser.add_argument('project_id') + + delete_glossary_parser = subparsers.add_parser( + 'delete-glossary', help=delete_glossary.__doc__) + delete_glossary_parser.add_argument('project_id') + delete_glossary_parser.add_argument('glossary_id') + + translate_with_glossary_parser = subparsers.add_parser( + 'translate-with-glossary', help=translate_text_with_glossary.__doc__) + translate_with_glossary_parser.add_argument('project_id') + translate_with_glossary_parser.add_argument('glossary_id') + translate_with_glossary_parser.add_argument('text') + + args = parser.parse_args() + + if args.command == 'translate-text': + translate_text(args.project_id, args.text) + elif args.command == 'batch-translate-text': + batch_translate_text( + args.project_id, args.gcs_source, args.gcs_destination) + elif args.command == 'detect-language': + detect_language(args.project_id, args.text) + elif args.command == 'list-languages': + list_languages(args.project_id) + elif args.command == 'list-languages-with-target': + list_languages_with_target(args.project_id, args.display_language_code) + elif args.command == 'create-glossary': + create_glossary(args.project_id, args.glossary_id) + elif args.command == 'get-glossary': + get_glossary(args.project_id, args.glossary_id) + elif args.command == 'list-glossaries': + list_glossaries(args.project_id) + elif args.command == 'delete-glossary': + delete_glossary(args.project_id, args.glossary_id) + elif args.command == 'translate-with-glossary': + translate_text_with_glossary( + args.project_id, args.glossary_id, args.text) diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py new file mode 100644 index 00000000..f7099a27 --- /dev/null +++ b/samples/snippets/beta_snippets_test.py @@ -0,0 +1,134 @@ +# 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 os +import pytest +import uuid +import beta_snippets +from google.cloud import storage + +PROJECT_ID = os.environ['GCLOUD_PROJECT'] + + +@pytest.fixture(scope='function') +def bucket(): + """Create a temporary bucket to store annotation output.""" + bucket_name = str(uuid.uuid1()) + storage_client = storage.Client() + bucket = storage_client.create_bucket(bucket_name) + + yield bucket + + bucket.delete(force=True) + + +@pytest.fixture(scope='session') +def glossary(): + """Get the ID of a glossary available to session (do not mutate/delete).""" + glossary_id = 'must-start-with-letters-' + str(uuid.uuid1()) + beta_snippets.create_glossary(PROJECT_ID, glossary_id) + + yield glossary_id + + try: + beta_snippets.delete_glossary(PROJECT_ID, glossary_id) + except Exception: + pass + + +@pytest.fixture(scope='function') +def unique_glossary_id(): + """Get a unique ID. Attempts to delete glossary with this ID after test.""" + glossary_id = 'must-start-with-letters-' + str(uuid.uuid1()) + + yield glossary_id + + try: + beta_snippets.delete_glossary(PROJECT_ID, glossary_id) + except Exception: + pass + + +def test_translate_text(capsys): + beta_snippets.translate_text(PROJECT_ID, 'Hello world') + out, _ = capsys.readouterr() + assert 'Zdravo svet' in out + + +def test_batch_translate_text(capsys, bucket): + beta_snippets.batch_translate_text( + PROJECT_ID, + 'gs://cloud-samples-data/translation/text.txt', + 'gs://{}/translation/BATCH_TRANSLATION_OUTPUT/'.format(bucket.name)) + out, _ = capsys.readouterr() + assert 'Total Characters: 13' in out + assert 'Translated Characters: 13' in out + + +def test_detect_language(capsys): + beta_snippets.detect_language(PROJECT_ID, 'Hæ sæta') + out, _ = capsys.readouterr() + assert 'is' in out + + +def test_list_languages(capsys): + beta_snippets.list_languages(PROJECT_ID) + out, _ = capsys.readouterr() + assert 'zh-CN' in out + + +def test_list_languages_with_target(capsys): + beta_snippets.list_languages_with_target(PROJECT_ID, 'is') + out, _ = capsys.readouterr() + assert u'Language Code: sq' in out + assert u'Display Name: albanska' in out + + +def test_create_glossary(capsys, unique_glossary_id): + beta_snippets.create_glossary(PROJECT_ID, unique_glossary_id) + out, _ = capsys.readouterr() + assert 'Created' in out + assert PROJECT_ID in out + assert unique_glossary_id in out + assert 'gs://cloud-samples-data/translation/glossary.csv' in out + + +def test_get_glossary(capsys, glossary): + beta_snippets.get_glossary(PROJECT_ID, glossary) + out, _ = capsys.readouterr() + assert glossary in out + assert 'gs://cloud-samples-data/translation/glossary.csv' in out + + +def test_list_glossary(capsys, glossary): + beta_snippets.list_glossaries(PROJECT_ID) + out, _ = capsys.readouterr() + assert glossary in out + assert 'gs://cloud-samples-data/translation/glossary.csv' in out + + +def test_translate_text_with_glossary(capsys, glossary): + beta_snippets.translate_text_with_glossary( + PROJECT_ID, glossary, 'directions') + out, _ = capsys.readouterr() + assert 'direcciones' in out + + +def test_delete_glossary(capsys, unique_glossary_id): + beta_snippets.create_glossary(PROJECT_ID, unique_glossary_id) + beta_snippets.delete_glossary(PROJECT_ID, unique_glossary_id) + out, _ = capsys.readouterr() + assert PROJECT_ID in out + assert 'us-central1' in out + assert unique_glossary_id in out diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 62b23909..318e3485 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1,2 @@ -google-cloud-translate==1.3.3 +google-cloud-translate==1.4.0 +google-cloud-storage==1.14.0 From 458c33ad1ae42ccdcb324dac5d696b97e188f287 Mon Sep 17 00:00:00 2001 From: Elizabeth Crowdus Date: Thu, 8 Aug 2019 15:40:18 -0700 Subject: [PATCH 43/94] fixing translate-with-glossary bug [(#2323)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2323) --- samples/snippets/beta_snippets.py | 2 +- samples/snippets/beta_snippets_test.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/snippets/beta_snippets.py b/samples/snippets/beta_snippets.py index 7cd94aed..0f8a423c 100644 --- a/samples/snippets/beta_snippets.py +++ b/samples/snippets/beta_snippets.py @@ -269,7 +269,7 @@ def translate_text_with_glossary(project_id, glossary_id, text): target_language_code='es', glossary_config=glossary_config) - for translation in result.translations: + for translation in result.glossary_translations: print(translation) # [END translate_translate_text_with_glossary_beta] diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index f7099a27..56534c6c 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -120,9 +120,9 @@ def test_list_glossary(capsys, glossary): def test_translate_text_with_glossary(capsys, glossary): beta_snippets.translate_text_with_glossary( - PROJECT_ID, glossary, 'directions') + PROJECT_ID, glossary, 'account') out, _ = capsys.readouterr() - assert 'direcciones' in out + assert 'cuenta' in out def test_delete_glossary(capsys, unique_glossary_id): From 59fbf2561db5a461dea7d86bdb92dc406b2d5379 Mon Sep 17 00:00:00 2001 From: Elizabeth Crowdus Date: Mon, 12 Aug 2019 08:47:07 -0700 Subject: [PATCH 44/94] Translate beta samples fix [(#2327)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2327) * fixing translate-with-glossary bug * tests passing * reverting to python3 compatibility * snippets test fix --- samples/snippets/beta_snippets_test.py | 2 +- samples/snippets/snippets_test.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index 56534c6c..265fb986 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -63,7 +63,7 @@ def unique_glossary_id(): def test_translate_text(capsys): beta_snippets.translate_text(PROJECT_ID, 'Hello world') out, _ = capsys.readouterr() - assert 'Zdravo svet' in out + assert 'Zdravo svet' in out or 'Pozdrav svijetu' in out def test_batch_translate_text(capsys, bucket): diff --git a/samples/snippets/snippets_test.py b/samples/snippets/snippets_test.py index 51235766..6d63759d 100644 --- a/samples/snippets/snippets_test.py +++ b/samples/snippets/snippets_test.py @@ -46,4 +46,4 @@ def test_translate_utf8(capsys): text = u'나는 파인애플을 좋아한다.' snippets.translate_text('en', text) out, _ = capsys.readouterr() - assert u'I like pineapples.' in out + assert u'I like pineapple' in out From 59be81da8b500898e2c0ddd745465763247f25f8 Mon Sep 17 00:00:00 2001 From: Elizabeth Crowdus Date: Mon, 19 Aug 2019 11:19:33 -0700 Subject: [PATCH 45/94] Using glossaries with tts and vision tutorial sample code [(#2325)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2325) * fixing translate-with-glossary bug * initial commit * adding resources * adding more resources * glossary accomodates upper case words * finished hybrid glossaries tutorial sample code * Revert "fixing translate-with-glossary bug" This reverts commit 6a9f7ca3f68239a862106fcbcd9c73649ce36c77. * lint fix for tests. TODO src lint fix * lint * it's the final lint-down * adding README * implementing @nnegrey's feedback * lint * lint * extracting files from cloud-client * lint comment test * fixing comments per @beccasaurus * removing redundant directory * implementing @nnegrey's feedback * lint * lint * handling glossary-already-exists exception * lint * adding ssml functionality * fixing imports per @nnegrey * fixed import comment * more specific exceptions import * removing period from copyright --- samples/snippets/hybrid_glossaries/README.rst | 97 +++++++ .../snippets/hybrid_glossaries/README.rst.in | 22 ++ .../hybrid_glossaries/hybrid_tutorial.py | 249 ++++++++++++++++++ .../hybrid_tutorial_tests.py | 122 +++++++++ .../hybrid_glossaries/requirements.txt | 3 + .../resources/bistro_glossary.csv | 13 + .../hybrid_glossaries/resources/example.png | Bin 0 -> 11207 bytes .../resources/expected_standard_text.mp3 | Bin 0 -> 20160 bytes .../resources/non_standard_format.png | Bin 0 -> 138990 bytes .../resources/non_standard_format.txt | 30 +++ .../resources/standard_format.jpeg | Bin 0 -> 2226018 bytes .../resources/standard_format.txt | 2 + 12 files changed, 538 insertions(+) create mode 100644 samples/snippets/hybrid_glossaries/README.rst create mode 100644 samples/snippets/hybrid_glossaries/README.rst.in create mode 100644 samples/snippets/hybrid_glossaries/hybrid_tutorial.py create mode 100644 samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py create mode 100644 samples/snippets/hybrid_glossaries/requirements.txt create mode 100644 samples/snippets/hybrid_glossaries/resources/bistro_glossary.csv create mode 100644 samples/snippets/hybrid_glossaries/resources/example.png create mode 100644 samples/snippets/hybrid_glossaries/resources/expected_standard_text.mp3 create mode 100644 samples/snippets/hybrid_glossaries/resources/non_standard_format.png create mode 100644 samples/snippets/hybrid_glossaries/resources/non_standard_format.txt create mode 100644 samples/snippets/hybrid_glossaries/resources/standard_format.jpeg create mode 100644 samples/snippets/hybrid_glossaries/resources/standard_format.txt diff --git a/samples/snippets/hybrid_glossaries/README.rst b/samples/snippets/hybrid_glossaries/README.rst new file mode 100644 index 00000000..2c986654 --- /dev/null +++ b/samples/snippets/hybrid_glossaries/README.rst @@ -0,0 +1,97 @@ +.. This file is automatically generated. Do not edit this file directly. + +Google Translation API 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=/README.rst + + +This directory contains samples for Google Translation API. With `Google Translation API`, you can dynamically translate text between thousands of language pairs. + + + + +.. _Google Translation API: https://cloud.google.com/translate/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 +------------------------------------------------------------------------------- + +Using glossaries with vision and text-to-speech ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +.. 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=/hybrid_tutorial.py,/README.rst + + + + +To run this sample: + +.. code-block:: bash + + $ python hybrid_tutorial.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/samples/snippets/hybrid_glossaries/README.rst.in b/samples/snippets/hybrid_glossaries/README.rst.in new file mode 100644 index 00000000..882f3666 --- /dev/null +++ b/samples/snippets/hybrid_glossaries/README.rst.in @@ -0,0 +1,22 @@ + + +# This file is used to generate README.rst + +product: + name: Google Translation API + short_name: Translation API + url: https://cloud.google.com/translate/docs + description: > + With `Google Translation API`, you can dynamically translate text between + thousands of language pairs. + +setup: +- auth +- install_deps + +samples: +- name: Using glossaries with vision and text-to-speech + file: hybrid_tutorial.py + +cloud_client_library: true + diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py new file mode 100644 index 00000000..be73960f --- /dev/null +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py @@ -0,0 +1,249 @@ +# 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. + + +# [START translate_hybrid_imports] +import io +import os +import html + +# Imports the Google Cloud client libraries +from google.api_core.exceptions import AlreadyExists +from google.cloud import translate_v3beta1 as translate +from google.cloud import vision +from google.cloud import texttospeech +# [END translate_hybrid_imports] + + +# [START translate_hybrid_project_id] +# extract GCP project id +PROJECT_ID = os.environ['GCLOUD_PROJECT'] +# [END translate_hybrid_project_id] + + +# [START translate_hybrid_vision] +def pic_to_text(infile): + """Detects text in an image file + + ARGS + infile: path to image file + + RETURNS + String of text detected in image + """ + + # Instantiates a client + client = vision.ImageAnnotatorClient() + + # Opens the input image file + with io.open(infile, 'rb') as image_file: + content = image_file.read() + + image = vision.types.Image(content=content) + + # For dense text, use document_text_detection + # For less dense text, use text_detection + response = client.document_text_detection(image=image) + text = response.full_text_annotation.text + + return text + # [END translate_hybrid_vision] + + +# [START translate_hybrid_create_glossary] +def create_glossary(languages, project_id, glossary_name, glossary_uri): + """Creates a GCP glossary resource + Assumes you've already manually uploaded a glossary to Cloud Storage + + ARGS + languages: list of languages in the glossary + project_id: GCP project id + glossary_name: name you want to give this glossary resource + glossary_uri: the uri of the glossary you uploaded to Cloud Storage + + RETURNS + nothing + """ + + # Instantiates a client + client = translate.TranslationServiceClient() + + # Designates the data center location that you want to use + location = 'us-central1' + + # Set glossary resource name + name = client.glossary_path( + project_id, + location, + glossary_name) + + # Set language codes + language_codes_set = translate.types.Glossary.LanguageCodesSet( + language_codes=languages) + + gcs_source = translate.types.GcsSource( + input_uri=glossary_uri) + + input_config = translate.types.GlossaryInputConfig( + gcs_source=gcs_source) + + # Set glossary resource information + glossary = translate.types.Glossary( + name=name, + language_codes_set=language_codes_set, + input_config=input_config) + + parent = client.location_path(project_id, location) + + # Create glossary resource + # Handle exception for case in which a glossary + # with glossary_name already exists + try: + operation = client.create_glossary(parent=parent, glossary=glossary) + operation.result(timeout=90) + print('Created glossary ' + glossary_name + '.') + except AlreadyExists: + print('The glossary ' + glossary_name + + ' already exists. No new glossary was created.') + # [END translate_hybrid_create_glossary] + + +# [START translate_hybrid_translate] +def translate_text(text, source_language_code, target_language_code, + project_id, glossary_name): + """Translates text to a given language using a glossary + + ARGS + text: String of text to translate + prev_lang: language of input text + new_lang: language of output text + project_id: GCP project id + glossary_name: name you gave your project's glossary + resource when you created it + + RETURNS + String of translated text + """ + + # Instantiates a client + client = translate.TranslationServiceClient() + + # Designates the data center location that you want to use + location = 'us-central1' + + glossary = client.glossary_path( + project_id, + location, + glossary_name) + + glossary_config = translate.types.TranslateTextGlossaryConfig( + glossary=glossary) + + parent = client.location_path(project_id, location) + + result = client.translate_text( + parent=parent, + contents=[text], + mime_type='text/plain', # mime types: text/plain, text/html + source_language_code=source_language_code, + target_language_code=target_language_code, + glossary_config=glossary_config) + + # Extract translated text from API response + return result.glossary_translations[0].translated_text + # [END translate_hybrid_translate] + + +# [START translate_hybrid_tts] +def text_to_speech(text, outfile): + """Converts plaintext to SSML and + generates synthetic audio from SSML + + ARGS + text: text to synthesize + outfile: filename to use to store synthetic audio + + RETURNS + nothing + """ + + # Replace special characters with HTML Ampersand Character Codes + # These Codes prevent the API from confusing text with + # SSML commands + # For example, '<' --> '<' and '&' --> '&' + escaped_lines = html.escape(text) + + # Convert plaintext to SSML in order to wait two seconds + # between each line in synthetic speech + ssml = '{}'.format( + escaped_lines.replace('\n', '\n')) + + # Instantiates a client + client = texttospeech.TextToSpeechClient() + + # Sets the text input to be synthesized + synthesis_input = texttospeech.types.SynthesisInput(ssml=ssml) + + # Builds the voice request, selects the language code ("en-US") and + # the SSML voice gender ("MALE") + voice = texttospeech.types.VoiceSelectionParams( + language_code='en-US', + ssml_gender=texttospeech.enums.SsmlVoiceGender.MALE) + + # Selects the type of audio file to return + audio_config = texttospeech.types.AudioConfig( + audio_encoding=texttospeech.enums.AudioEncoding.MP3) + + # Performs the text-to-speech request on the text input with the selected + # voice parameters and audio file type + response = client.synthesize_speech(synthesis_input, voice, audio_config) + + # Writes the synthetic audio to the output file. + with open(outfile, 'wb') as out: + out.write(response.audio_content) + print('Audio content written to file ' + outfile) + # [END translate_hybrid_tts] + + +# [START translate_hybrid_integration] +def main(): + + # Photo from which to extract text + infile = 'resources/example.png' + # Name of file that will hold synthetic speech + outfile = 'resources/example.mp3' + + # Defines the languages in the glossary + # This list must match the languages in the glossary + # Here, the glossary includes French and English + glossary_langs = ['fr', 'en'] + # Name that will be assigned to your project's glossary resource + glossary_name = 'bistro-glossary' + # uri of .csv file uploaded to Cloud Storage + glossary_uri = 'gs://cloud-samples-data/translation/bistro_glossary.csv' + + create_glossary(glossary_langs, PROJECT_ID, glossary_name, glossary_uri) + + # photo -> detected text + text_to_translate = pic_to_text(infile) + # detected text -> translated text + text_to_speak = translate_text(text_to_translate, 'fr', 'en', + PROJECT_ID, glossary_name) + # translated text -> synthetic audio + text_to_speech(text_to_speak, outfile) + # [END transalte_hybrid_integration] + + +if __name__ == '__main__': + main() diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py new file mode 100644 index 00000000..bdd8251b --- /dev/null +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py @@ -0,0 +1,122 @@ +# 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 filecmp +import os +import sys + +from hybrid_tutorial import pic_to_text +from hybrid_tutorial import create_glossary +from hybrid_tutorial import translate_text +from hybrid_tutorial import text_to_speech + + +PROJECT_ID = os.environ['GCLOUD_PROJECT'] + + +# VISION TESTS + + +def test_vision_standard_format(): + + expected_text = 'This is\na test!\n' + alt_expected_text = 'This\nis\na test!\n' + + # Generate text using Vision API + text = pic_to_text('resources/standard_format.jpeg') + + assert (text == expected_text) or (text == alt_expected_text) + + +def test_vision_non_standard_format(): + + # Generate text + text = pic_to_text('resources/non_standard_format.png') + + # Read expected text + with open('resources/non_standard_format.txt') as f: + expected_text = f.read() + + assert text == expected_text + + +# TRANSLATE TESTS + + +def test_create_and_delete_glossary(): + sys.path.insert(1, '../') + from beta_snippets import delete_glossary + + languages = ['fr', 'en'] + glossary_name = 'test-glossary' + glossary_uri = 'gs://cloud-samples-data/translation/bistro_glossary.csv' + + # create_glossary will raise an exception if creation fails + create_glossary(languages, PROJECT_ID, glossary_name, + glossary_uri) + + # Delete glossary so that future tests will pass + # delete_glossary will raise an exception if deletion fails + delete_glossary(PROJECT_ID, glossary_name) + + +def test_translate_standard(): + + expected_text = 'Hello' + + text = translate_text('Bonjour', 'fr', 'en', PROJECT_ID, + 'bistro-glossary') + + assert text == expected_text + + +def test_translate_glossary(): + + expected_text = 'I eat goat cheese' + input_text = 'Je mange du chevre' + + text = translate_text(input_text, 'fr', 'en', PROJECT_ID, + 'bistro-glossary') + + assert text == expected_text + + +# TEXT-TO-SPEECH TESTS + + +def test_tts_standard(capsys): + outfile = 'resources/test_standard_text.mp3' + expected_outfile = 'resources/expected_standard_text.mp3' + textfile = 'resources/standard_format.txt' + + with open(textfile, 'r') as f: + text = f.read() + + text_to_speech(text, outfile) + + # Assert audio file generated + assert os.path.isfile(outfile) + + # Assert audio file generated correctly + assert filecmp.cmp(outfile, + expected_outfile, + shallow=True) + + out, err = capsys.readouterr() + + # Assert success message printed + assert 'Audio content written to file ' + outfile in out + + # Delete test file + os.remove(outfile) diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt new file mode 100644 index 00000000..29c4261a --- /dev/null +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -0,0 +1,3 @@ +google-cloud-translate==1.4.0 +google-cloud-vision==0.35.2 +google-cloud-texttospeech==0.4.0 \ No newline at end of file diff --git a/samples/snippets/hybrid_glossaries/resources/bistro_glossary.csv b/samples/snippets/hybrid_glossaries/resources/bistro_glossary.csv new file mode 100644 index 00000000..99b45144 --- /dev/null +++ b/samples/snippets/hybrid_glossaries/resources/bistro_glossary.csv @@ -0,0 +1,13 @@ +fr,en, +chevre,goat cheese, +Chevre,Goat cheese, +chèvre,goat cheese, +Chèvre,Goat cheese, +crème brulée,crème brulée, +Crème brulée,Crème brulée, +Crème Brulée,Crème Brulée, +bouillabaisse,fish stew, +Bouillabaisse,Fish stew, +steak frites,steak with french fries, +Steak frites,Steak with french fries, +Steak Frites,Steak with French Fries, diff --git a/samples/snippets/hybrid_glossaries/resources/example.png b/samples/snippets/hybrid_glossaries/resources/example.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ac25ab053bcf3e5216798ffd87987f093bfec7 GIT binary patch literal 11207 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 z z37$OXcfs0I#?KarSY^9oSxFuTjmM$jBsC{f{aFLO)zQlV4Q76HRDljg3zJOcX-ihf zlra;{!T!k9<0nEzDOCxT`pJcoBqLg^adM*20%fX5siFz3Yb}LU z1e0kCQ$iPuSL^cihr!8Z67|7_7=IW03G=KQn(P}1X5l$RoDyS;8JH!!T%*nZPFmqu zhPV+SHHulT!_h>i z*rQx}G@$tU0_~=xmok@HWo~B9*qSw^!ieX3WIG&l!H{n=d64O`%i1?&>XmmsFJN;b z%7Hu~ljM4>_*b2dTJ7w8btQmXkPAx&$kRYQWr$qwEJ%@5^d8I{L?O&D3KQ`GX*@k! zb`qg0wQg=aD^oO#WcyRDu%7t7oB){Ifq|ZhMYBda0n1goR*qDdKy>wBi6(g*?yeM-y?O}U;-YJ$_;z##X?O(YS?I+HEUoAdzxPdiB zgH%;%Wl?DupR=Mhwv`yfsbTP!4wNhlV&wqHQ>1@6(aSuqDOKex>Hgkr$)I!-5Xv7> z?b=j&)})8oxhn+bO!dZ5d#qlT{bp-vz!22%8M5#@AnvckmvHL5++)hsR0(h8-(tln z*J#JCQ?5IQ-g~BVb-tvzY4y}7BNEE^-~DRMU*&dsF~3*{*49_GE~GjEn$Av?adP75 zIcZhac{d*4%_?cv%$C5?z&qtXLyAMWQKdfVIqFDDk@mc+0-s*?u3`XiKcO_zVD%>s zZx)^R(WAgf%^p&=tZ;);q$Qp(40X-ZZ%OV6`)6WpP}x;TlyG-5shpC@HA)km*5Pw% zO4L1L@vLR3$2QLWVld>s@-EJq_2QL8PA?g^~XHXUyw? zjes#7AzxcTJi75WV1idhmkAQZN;2N|CI*wLF;YoC4zPgdgm9<>R76E&%9Fipb@AJu z0+j1e&mUO?E)E!!_3v8e5+d=A@I=#CGDoK?Cc>&A6;14(p{fWRO4mJ zC;#tMOm(8s+N@DsA=KlgKYoi!CC=avc1Nu?Q&GA>OXGQPQ5Tx6k|nZmAgQnRk}5^n z9dS(`$^CbWtEsQJD!+5DQY1wO&(C*Mn%+}E>lXhu18;oHk07Ue0P@XtpO?!44!`Z7 zqdF%Z#P13E2Gk;#SMk_Y>7Z_&3uhg(K-b z_jK})(1-4;NE!OH;viGX=v{6hXZY#*FOvN)U7r4tXEV2M=(^$0887y~FQ`EkCugLt zy|Kd<;XkVRL=o(wJF!=nt+%mEEf?yijI6?ZW6H+J^Tit*9}~KoG>pz8sS2!}ZnJ9A zae|6*kRSwjs$DvcV{y9Q1-k3g`Ra2q#dDd3S+eQxrW5-lbVXz>j^^zFzsF%2KPKm) zuLt;ISWd9_4ri1_z)(xR^E$}Onsq$wT*m)dri6?`)^aiJ?|Zh+@@ek2kIj~U;bnrD z@q_LTJA(1bY7rEC`g-?$u^BSTCZ|~Gs3{ZuR!>Htz&{PU7`b}Y$(+aV3 z5^dlvj!eJsBNt7TPyk>}L==?Qp>}6f?_2Qu0uJ4V)7La-WjkusALSe zkKesaL*e&~hOQ&g#wV;H6<3t8M6V(X7-}Mmnv7kUNH-N!*@pf8hulxSe>fw`AZD>nqm8W%GE3`U>IQ^)+zWcU(#8)_HcvC5r zTGOemY}$?nsLkzszwTjxB3589rt-t2FtEz$xvI1n{}OrSif2`5cw{xZxpHMNbyZW% zf@$zwY#8d|IFDdntYWY40C9w@VCeOZ$b)oc)6n0Jx5&-T&}d~7E9>Fj+vy_(d0r0G4xaS+ zOmHVD%bHaK^cbyhZn6X^I4r4eC3r&><0;)~z&DGK{MN6(1b!u<` z4z3M?1j0z%sa`oXNkqOQBvm{7egQJo-I}5B*0yo^Ava$KA7WiW^jFZL6cAQ%FN!7! z6Bbi~(gJz+pR}i`aM5z54EXC>l_y0|9WR|gzzkYn1o!AH8$2PPWwpqM82jd36W5i` zBaC{#I(7S49%1!=q)hn?2&FcVanv$%xT3G=O-~Qb@@-19+3r$$?D)L>E%*! z>0Qss8OirbbesGudQy)dfVhl%w5$b=PS$JNBB&e7lL?TsVhK&tSs_d3k5mk`r=>P{ zSU}~CteT0Uo$Z)@c)8cyS#Ccvc+gzrT%#&fBWqak>TicpOfIS!Kk*}0+EFL;kiG{Xwd+@vaob?FI2^43%Xh8w%T*^9=QhvlIkU1GaA_o0I$5v1~+#ecOjJ=mV^rmXsnye7H>>(|2EYWYNF<9hcmH$JvP!no9~RqWg^b ze>aHVco=q|XW|acw}OAQcbh#SaHE35i6gE){<@UO7VEc60uX*g-}zct`?D$t=| zmkz7FXD*RhQeK zxaftks3ON1vDj@qwo|X_vW0W)o;1tFToXG6z~nF0bW5Vq#;9F}WQhR99|D8DM7e_E zN+4G5re^iMt4U$h(pGAeveD&3;z*a?ktb(ct00mTnLsr)B6+*4Gfq6&SZOD6w#w6_ zTZpec_cq+*uT_poj;0wdE{z%vHr_{)8!w7M=7N!#`_W&$z_!Tv3ow+wpT|!bMKo2w z4>N!RD&Y3;Hs|}#@dDpDP_2!kRuY11RCf>B=p;BV)3d;@;Fp?RR2>t<=x(Wglm0mPY*=Sph@V(DCEuF zB@mE$krA!>uv8zAI$h@rXa~0QAMKRi(EeohUguv=bZ9VBU-hn8Z2PGWQlaD zieh!fVWPprGu@~G>N0q+@=t>D z#0IY;|61E;QfUhlZ2gHp3mR3~G!Lt@%9xcBe?w8xq9=dhNY3E){t^_8MaR&EkP>CM zmxV0!PLLX`JOjQlH}FKo@VqmVIm_}0(>8#`qT8U;d*$IAj*`35Y-%U$8Gi^y99Ofo zlu<1HEn~VZGUIf@=!rlNPVeXAj1aX8`$I@VdVb+w`iXA2?5Pm#Ixn_el6F|EuYObQq&s!;}zkLVx z7+jF%@js&05A|v(LPvzs1j}+qu`(=a^otLtr+7Ov4#PecL*FZ=|KObo%$aRu&IvYc zJT#FYx>W)I?-l;31rW32t0{t$lrwEGnTNsGuz1Y5FGSYGGjW9vXnCOc2gLtp%JJVQ z{r^1J4WgsoQC7&!6L5&Wyq@Bn9C@An>HoH5EC!5F>^wc-dCa&zX#0-pEm(%Hs{AgcPIXJ)# znD;mlVrERY+IdXZeN~07H_1O%*q%&>_^4MG7%j#*enq%5jp?-LU3gn>X9k?)9*m)b zLgR#=en69?CdWkjPnG@hPgPENqhUj1TBe!3vp~|Tn_sA5@HqA_iVNj&Wxp6kpg-cS z(ycS-=N}uO-gtKRonnvHtslYy$!)F&tj2}?G>GL30e+SnEaPPi5dbNfoAkSlwDA?& zj8)yxH{lXFoq;I5*2>{ZCQR$|IQ8?)occa&fuW0mMZoJmv9g~Pa}z-R7T7uKZ~#CB zHL@0`{XJfDdgiXuPTsW7=-eLAY*o!o$+$=Nc!Ew9Nq5vM$%4w zfDXca)Hs7n7+c%QdgZbAxQbC%%$z`8uA)7Pa%bSOe!UYmfES)Ivsqp9d@RK0ERN;i z@kz1ZbXhv~9sChkI$2^~49axvv*znMK3Ui6p&TuQQOgpM2(z|<()rp|cW)3%O3m&b z^BZx}BX!vtBqjDAgwHyIPh7kva*}r7bbsLomnkrc4RI6weIJ$nBsXCM{pPfXAFU9f z4l9cE_xCT7L>lJj*Ua=z%imGcW3B09^^oUwn{Cuj2=PYEKpC?m-}1q`pA^NhD*65# zD(Y&rUi`r&kLCpF^O0;T5#qc>-%VhI1HttA`f7Tp1DeaOSH`Ul^j?S~el?}f z6}mlcG|zUS%HOgIYihzm@(hqxS1JDLyn;`c&i4_{nm`zPD>`bc<$a07#>i$WP8;cY^V1;B}O_OI0>k>oWluNyOk@v zvMG=7vwF>fSFxJG1o+pI)0Lh*HZ@c1F~aCfd*6y1&xa^1TU`mo3>F6<7pYbcqJ!nM zY`*F{&S0B_%OyFIbyTz+47zS2cRf_i#VjZI8S_=$Z7vyM&QtM=$Tmn?3>>3{m7VC^q4 zdM$~ib0;**Y1g{;xlSBpnWD!YXkz02Of)oFo@VUISG$NaoUAhUk^}Y=dw$qa<0#gr zAF>H+U!?o!jntOUeP^>jep+4*-@&H-W?rFE6tcc{t=+C@$M5k+7@%hI&+heE)T^zl zXdOqFr*5raK8-ig4Zymut9*D9yPHN$sNCcJNqZ~9px)L*S)-d332f=1p#_qR6lT2m zzAd(nj(_nQ!GA9k`{x20prFno6|nZvD`o-$mpbg$XTMhgitmleMefJk#)>$K@khwr}8 zz3F zqU@$rBgFFvghzAzXwi6LC?FjNG||q@gxK`UMn-o;cq~sxDIMl97Tfn)z{I{rLB(7lF(T7uJuJl*l<9j0yaD zp=*rS;PqM^gNM+*r=upgS#NEb#E1ib74{C`XUc{k!J=~?OpzpDd%W#3T#h)rQ5KSd z8|!rtpr`eJv^I1?W;!t-NiZRWjnNEQm|fWXxaM|tu5+PYLlLRsFs`@nAPNN7t)M|{I0izG*Q(iQ`m zivcku!TA-NNf@l=1sobh=sSCTH;-V*(-3Q`l#0yCZ;|mokrs~0K-DVG+e2jkSqy%L zi2U|K9^Q#XkB&1In^S?wrlm{WfAiHVe@t0QSyzN;Z@a~CpSg`BYqsggYM2{Rhw|9% z(H82UYujifCl}k;zrdy4wsfGlEHY4aqsdF!B956oztQ+qp_hR_Up#Mu{0I&yF#pVA j{8#De{~)P7e}y|s(J+f8-D7_%#RW)zRS>TdH4OM)Mxo_* literal 0 HcmV?d00001 diff --git a/samples/snippets/hybrid_glossaries/resources/expected_standard_text.mp3 b/samples/snippets/hybrid_glossaries/resources/expected_standard_text.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c731fbd787d3c1fd38d9bce749174d42097d8951 GIT binary patch literal 20160 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�dw@jIA}60uH}U512OV|r3bAc^ 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

  • 2_^)PyNj~VsxIk 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

    Iy%1l023^7IvM_Ot>326JD4 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 literal 0 HcmV?d00001 diff --git a/samples/snippets/hybrid_glossaries/resources/non_standard_format.txt b/samples/snippets/hybrid_glossaries/resources/non_standard_format.txt new file mode 100644 index 00000000..8a6e3c11 --- /dev/null +++ b/samples/snippets/hybrid_glossaries/resources/non_standard_format.txt @@ -0,0 +1,30 @@ +MENU +Google Cloud Bistro +SALADS +SANDWICHES +GCP Green Salad +Fresh Greens +$5 +Kubernetes Sandwich +ham and cheese sandwich +$10 +Cloud Caprese +Mozzarella, tomatoes, basil, +balsamic reduction +$8 +Dialogflow Panini +chicken, pesto, and +mozzarella panini +$10 +Firebase Fruit Salad +watermelon, honeydew melon, +and pineapple +Compute Engine Burger +quarter-pound burger with +cheddar cheese +$10 +$6 +BigQuery BLT +bacon, lettuce, and tomato +sandwich +$10 diff --git a/samples/snippets/hybrid_glossaries/resources/standard_format.jpeg b/samples/snippets/hybrid_glossaries/resources/standard_format.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f985a540dad9ba06d43afcc60c691c895d5408a3 GIT binary patch literal 2226018 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

    NioS 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 z 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%0DGK{mD*ZsItHU`qRK$q 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 z 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 z‰(^J8o2!bofuRhbU6#0q)$phwM6rQ~P73`i4`0eoN(8VOl8@McIk+!b~ZVH}9 zwNg&^u%^#N)IJ?(dMAb?vC*P2gbgbWSnvral6m8&b6=l+AJHs)Y2)i*VZPW)D;Xk? zVT!29Rsi4-22VKco|X2;iT*Ztbu{4Vxue0!QlvVO_2_HnZ}?aq2(i^C*C4iz+F9Fn z{PUCP$pgM{C|!b=ndd(ow0p0Hx{sZ0XC%?8d9iI7+^fqlVbN3$Pf=dW`#yYe(Y22c z+iJ@cjRb&#+jjbnLtuS|yOHDMq-Ub9OfMM#cjmo1?(W|}@Z`VS3-U)FB=!T2hpl<%!(WIV71y<8(KJRk zO)RSl5HR87Uykm;dt7&4DM3s^Gx$&dMJ}&SEjcs+| zK^TqaNN0{s`>=V+?IRfgj(g&_eiZnkZD!du4O}?3m6VX#EYX}ELG{gjf$=NhkA?h1 zS9mNCj3_wH(~wCWdFH-T@ehZ!ohw!rmK;EM8+iG&GyA-RgE@<^6&|8a0YXc zj#2<~8ehrCU^uE`9grMG35J)V!&p5#M_T*?o;t4;q4EHnd z69CxVkfinruLAg`;|)*7 zUN4mCcB^htmMB;N9IBofiR;|+(*Peq;J&9pP}A1oQ6uQPKZ|MMy(P6RLQmaW0LS>7 z9>5MyY*)_yEclZb#NAE2O^5qTK%@{z!Jaryc8)jzoS$Q!wW{6|eNx;msV>DM41>OS z$UJ{9%C|f>@T0?C9@E|(F+8y&5?r0nmh~sF=qpIeOCvkJhtK*S#T&l{_=?#)O7k=g zCK*?jL?@Qpz-)K#*A?!bG4TcaYEWP45ov4z|-<$y9lUf(c0p8o)aZuochcF{ab z;y*t11?$_7GZGvo3Bkx6Mse%zE3^2)@aI<2d_8Y-q$(rXxDp^Z1}(S&0OJaA$6;B$ z32w~s-8bP5ui^`XuKlm<;ye(jy+J&jrd%U3oz6h+ae?}E zuQm8JCZVaxZ>L-W(H6skIRpGF)BY@JdQN~6duY|9WXT}%IpBVsX+|vB$=LAUh&~U~ zbsN;wE}WK!?y%@o_4#v;@Telyw74yx)8j+6Kv1N1AI`kP#@-uYo@@mCalrMjl)fzZYF`ZNjJ7s%7i<}r25g^hp>RDo=Dw5oCkCti zgKMhZs`=BL$%ZOS++CfKt(P|QJnm_z&Xb_&3i|H{9B;>MDUC{--ex(-6I7O0J14w2`iI; z4HJ#GHA`DF)wK^FSlzMOe82Wd1d92i$C?Cp{vv-6#V0cajgh|Z$}zZl9Dkl`wr_+V zX}h-8BE9|mE&JffpE0|Uf;QxF-}J115b6FPm&8L%y0LHU@>Nz?e|aHe+@K#Q9Oow- zQ)_<6|%RCvyYH%zz3&aPyV$_ zd$5eIwK1+D{>-|K-3Q1yKB1TZ_(fGpI6P`Zw^8P&hPovNU%_28pHkd%=1PdTpQX zql_FWIbwZz0PB7w_>tmR^oi`Hf#j8gx}gy+)!Z`2fsi;E=ciiT_}yt0kBA}F zG_+$jJcVt!JY@W*)05Zw*LU#a#9FqGVGNhCuKuM+`G(2nr=e=v1e#X; zCUi#_+O3bv^RJA*;au5xd&d_V_N5q#_2lya-MB@c;ZxiZ*1m=Khw-hn7dnU81>}-A z1T%zH1oO@hLC|CBYv-%4iP~q3yjJm+Rx7nsj19Yv0u#nh^fZ(#iG+2!Iqh=qUhz+j zrqZo;!)tD#3rK!eVlsAt^~d2|1;>CjzYKkwSJSV&u^w7qeNJ(t{EAZ0LFN3IxrdPfBMyMwe>36o=fAe zi+1{L;~5$fWTpa>D;NoJrgzds@5>I4*^Ya<5;fZgU<~nSUU};+@7P~uS)kXidQ=Qr-!ul(5Q;NoJe* z0Tqj5scxh2spYbmrU`@o+HqZEH5j|G_tNv z*#|1400KeUJqI=SmyGOmhSR3HSVDwS+n0g}86W(xxm`78)3AXU9#28vA6oQn6T}vJ_lDl??qxEwACUa46dV9auaC4} zh%nzvHkE3?ll|PDPj1-7de?;QMW&f>*LML(8TpU+{uPW>jlB%775H0J@fFpj&Yo1p z&4O2|f^)cbAP%Fir@yawFTq-VnU&NXWi9f8MmRiU-y~P(#=on0)?H%rU((u5KGGSP zVk;(m?X7^@eH)w%bUyrj)9{nx9-HD@MZeTAC$-v=FYuNiF*|xL1~#0N&1mD)C88;O zME#v~tILzA+0NFb)T^XRki?D{=QzOZI@iWJ_w4Jb%dN$v+sqhjA*BNm=RA^6P2Y`v ztN#GPVWIe%?oBSxmXXl6Anm~5{M`ZPft=Tj{7}*DJTu|x?jnpkGVB9(GFa^czDXvX zIN9BohM&Bmao@4Ggf2WC@!vr3)9O$gNu_dOX?(I-BX2D?4DLI+E&yYN;=gm}Sp37k zC6|N72jySS$Lx!13?Co#D}>TzzPpCu&+hm!ros!I-BvO~oE(r3QZRp@hhY?Gmw7S} zGCT8G)_Nanl`nA==5-h%s7MTrfI4%{Uy@RZw5TK=^$NR4-!KCskOf3(>!Iwe>}KIP zayoXX9TrjvJaw%%Dx07qazb!69kep_5OTuJN)kTr5o3_&uW?Se zjIyrA;C?kU!J>tOuKaWq`&ec2xm~1=0X-^j(Ge+>Bwdk&VZbz!B+Cm*pLG1A)`{7p zRx=I6b`@gT9^j~QLKWjY5Iw=C2d#xo*v~NB2*jD|>sBC+WDg$F26!jZwv>q3l0^l3 zdWw#8NR&40cjl5^4J<&uX;s=cV!7Q?8Rn3AWDI)$09x9fWZs1faZo&^z zNCAX4?may*R^-STCm_?2VKNsPJa7#(nVq-eARo|CD;gQIOXR}Mk9u@hDAFW*3EVzo z=~BCHa%5cN`BX58ceJMfb{OV}AvY_JmL!XDLAd__DuziB5Ic14J7%UcNp2V_@cqqZ zOA_2KmaWMAjY~~EOOt&?o_L+ailvpfC(@&YY?lChtH`L}kIDylI2>Z1EWT2ZM=Us@ zqEouiwgarjX6W@s_D6}vM+|T==~l$DtYKH@_NsBTo0>`Z?7vEhFe)I40g@r}lg@ag zhEX(bfPC3J57wn!?IW*NImbB^)3h&?oM*j2yFoa{ zd(nMN)b7Q&+Z!JzIL=LHJic+x2|>@}P0Gj*o=E`XX*CYn6d0lVr;;lvyJ`@!cONpx zC+`&P`pQ;4;808K~P4&cv9Hg#_Q%w!!HX}7jsy>Zd|p7D}-}%kiCbm z){EI)oi->q`@nT0)O{(JGeQ_b=W8BnuK7ISEO;e&Q|($RirSGT?p(W=tYgkzQDx;^RLli4< zBJOMk>7Pod#@h!f3x|eP2&04;1obs$*tF3uPfCcukxFBWqjxm}B(`?D_hc_c6w+j? zqpH)bEIhNg0qs<;&6T-gR5JDlwPxG2@voRO^K**Tj>g(ZJjqU7xjE_$Io%7FTa~P> ztd|!%hXbdjH7wC(dz|DqueYT(R03}*B;kA3OV6k+%O*1y*V3?*o7lS=Q(Q#gs;O08 zr~1<)Xr+y3i>65Cm>iH383(TwJaDS94bXN2j%!HWXu|eniy(zUD8Tlh*(LOwW@4aq z6{xYQC}#s0;8k15wF^rY+U6UoB9QMn| zl{ooShZr~@smMQtHkVONXjuC}8HqZ#=~GEX4XqEw1P!{++b{{U;5@FrZZ zYKB)Tu>>TnN`*P^PTtX>0Ceg*)BL%WgvOgJ@%buIOSwFOR;0QLQ3%U@;lVz&1ov~J zg>I**6{3N5Fe4cCru~W4w-cQ5D3WZ=pHGa}hGA*|!YYxJ*?d@iewaVo~_VnWw zY0xTwrzWmY9rUqVQ`C~uAiV9(XItKxBofERrEc6>MRpWy#~hz}iY)@t-7;nQy*R~8 zcNLpL`KxxT<_wT?(;U+#vz?`Aqxnc&gX(=NMjLS$4V;nFK9w_m@P@$*D^~0Zfpy3bApL*0njUjfEb_XDumI~V~X(IXLM>%<)K!AU}B$)!&a6GGY$8+nN!nL-#^IlQ&GiT_3`qiqM#o;4( z11BFZ00Y{rM|o=t2rZKb`qf4&a;>388ym?$5->y46{T@u1QF+}8c7(mq=v!%zO|Ei zZ+tZM`&C7?isEIJlx-vuDl5mG(@O%gAuM=a z^*rdLZIJ;xq>yY4g&*hqnr7sU0+Yg=;<@O&iDy=noGq=NwSp!?P;r(i^5@{3M zU0RS69sNI@Jhil6yxFx>a&uVs>Qoqq%I6(AXa4}LS~izv2(vfN!=8G54L?vrr7$if ziXz9RJ$|{W_g0h70-~|q*B!o`R-~7(U#iI=3P9s;LH;#T=TnZ(A#kymWg$ZM`qQ?g zxFYY_q)T|>2LNLu(;l@I#k6fU_?Q4VqAfx0WBuX)#BsHc9RzWy!I&34azG{X9g-lo*P6Mbu{9xH5Ao|DYl+f^AW;EKJh2~^`{uw=uB;};LJA15AdFIQ*MS? z)f9urHBuQ2Od}XP_4cbWq9T`tc`Q9Bvkh)REE|w4j7lqUp4CR?SmANFl5@ps+({>r z112$0Lj}FTQsWps>8V&xMRHPcw+EbaRT4vLL@0(#o=NLh+5;S?a-0sC?kb$JB(5Pt zf;*0)iAl3QTNaurRwkAsg#IB(8GyoBB+DLfX=EvGo3ps|BmV%cL@+C$AY(miG}*5+ zL=w$$D}__WDbOThMl%8!`qY<}&1g}vf=?N$*V5aKrMP3#sl7EZb1yizf)cpSdsRSV zl?%-fJ9u6>suEo`!5}?*R;8A13hzAQp{Ev&bg_QkIQ)&VuG|X0YYcHAl^5pgRP8P9 z5=Ndwh@0gep#3W9OAJGXImcQf9Zdb7Vnmu_8>u@@S4R2AnezoakxYW(Ig1WGvrkBZ zGs%!c4nXftD^lYd2_zxp62`dO$n-w+vx~clvJ@(gahjGX);vP}2RNw|JGqfg-1PRP zeRL*LW^k0pa1oG|ZULoh=-NWFjBMx+t!o>31Z>LRL*MYOW(!ew43avPm+BTtop$<0uk_vg!i zf`E*lTvWnViX(-=%~V#2ztyQ+o_@66nwmwTd)cuT>CWE7{*{$_Lnw_HfS`2hYW|}P zpa?+PtVR#{^{T6G+rlyXxWz)Ax(ab5)1pi3WpcR5{x7c;ydv@r0}+aJX(S1Vv7Wy5 zTHwzo-5Xe*^`)Nd5@`@hsVNTm81K@nTG^yxK!@cAAbV7j34?74a5|CBX;N8Z{lcKy zJ$lr&)QHCHwFHrcL{q}miK9z@-LK7_K_2y)6l}yM3g@L2DUUU zShigN$Q}J^ea{|U&nLA}fu@>bs@rkY3XWkVzE|&&-mXdRHtfg9k~HEZBX)CF1%wEM z#rMhis+1GksNP5Kan~G=#;h#H6*4j0PpwLty@-m`ul8kzPbGn0;>hSdX@1;_uCQd0 z)c*iVmRp%7bjVd-rgQ##RZDqHvO93Af=+#?i`KB+sd;!>(>?1n~Oc(TexG? z*CD-4&f;RVeA9Zh9J~NN0>X9jb?)YLR9^5LlZa`qfC`SmFvsK|N~U*^v|wYI$_In%J=$ zLjhl|k}|!5!(h(X&Q8zCh?doj9boG)bj$7z#P_2Mja# z3VAZi^27!QCq1f!6QnP&gPc;6aP9lNsOwgf=vfq^SP`yR6Wartn%2(l<^tb!o2GgS znl_R(DCZ)rN2o%JCY;um;z>v+ryV~ZdSq}*ZwPiIhNPDH(D_mw z(f6y@R}n>OJg=A#J^B80`9|Q;L`d$LP;ffcLK-IybB@(*3;BCcjP=D|zJ$Vb-L<|_I#g2KhmAoUPvcoK+p{>F6Z3b^`Rh-Sl*mM5Y3YpT6z`>tR98b) zZnOTZ^ZpfLISC)U9top9#8r0 zQr(@3LR~&*^NvRt!1eW{w!D%^iZYej#1rd|^`~$mjs_AAM2$dQv(q zyxwO4eQPdDxlDv(0G>0~6{!TyVkt8GwS%8V7wlPkt*ho0&PU;jr6ITxi9o`dl3R;# z0F-S}$i+o#d2MkhwcWI1Jo|lW)kMf~zUDcfQS%rx721AKJu2H>%_M&~BiBBa()o75 z0B|}M}{J^ZYtzpd(@&l&62qb z+O}u7gfNMt=rfVnR(!^&%u6P=k*1M}Bydk^p48b~MA9A~pUhM*cN0W6gOb=dsTr){ zm7rC^k(~R}Qo7K|uB98qd!+j_l5yM|ezcK1HfpfSH!eoe?mg-$H^>Xc!mAK*_2b^H zlLI+WK2c5VYff4Ynn>+kid9&kvMg}^-GrnQiXzGTXg`O>}1R&P^MXw^3Y3oceoGrOAoBwO*b33aftvQpM(661&H5rzEBpfRvH?MnC1nb{TPiUT*7DaLsx)}cwQk$jkebzkCcwN%3LPGrx@ zJ!&bp1yziEu5q5g`WmliuB4>dsU`Ulg4|-OTIvwDnAal6V}H=X{oo8QP2RqjMZ^}3oAxq^9%Pq7ai)mTeZAKG0^ul5`wWRDCBZT zpwUE~rhEXav<|gT?ZVyP%>}YDJuyy~?NURB`9HdP{&fN)DE;Ds#9)tl$*zNO>O}?Q zw=BjifDR6L#b{eb^0A6v;^=ES+|9hgqdSive_v|cMuHRba^s4mjNEiFn%aA7q8H`^ zwOvcYCLobYw^7Fge~no;LNd>^lkL{4t^1_p;1prdj&ti*9Ug;7j&U*!u2-CJPfx8z zFC-{ZC)(b=l9YgN~T`RMgZGzQ)9tmm)2>;C1(=EV5m} z<-~A%)Rz{_kcfaS#!09wZ6*_v0P_3P*{uRiy$i5F>jv?hujyIyOc8d-I@aqmEN;CN z@DFkAT;#1BWbYfDj{fyBnncRh7GSZR z@#UAPK9sSMD;LjkilYwZj7M;IZn^1KAhuP>LN=bh)iRP|yIU77L?R%~&$z003j*3^ z+!7nEM?+4RPhFu|jElG)dV|`hk~Otc3JjJR$?Z)VLO0c!cBI0kTn5kSNi445g(r$) zyU67mjCH9aKsjPL^`$oKX8R0|Fd`m#%$Yw*d~hI}&3*yu4L4#Wx$HeE##UwA8>dlD zEm&xLt!@g(AL42hxrP>Kh}=DDu{P@F7b7RPf2~@&vz0B??aK88ZvOx#n@Q*%V*~)F znHq80kk2H5nOGnLJoKp=8K7_zIBt3LsAh3KQZbS^K7yT+RzW-1N0R29 zYkOdFhiT6krLmMOI#{Mj7<0E6`qeme#f2yN1SrELy6@zYcJwfL#xX<_l!qobBG%WlrTX4OF1%3okrfL2=)jT;Q@=rW>5^k0Gc_d~zEC&ib zhabwdVDkJp>?Q#tZ!%i01;`ILj2wP}(jelzhSDOsS1fR_3k;$(`j_G88+shD@ z)DXaq4h>Md)Y8J=>^D!kLy@>2xt@fRQ)#+(p{m|}nHy-vcMJkR{{SBKF8i8CLCJNg zZ4y{p5&^>mINMU|di9@%;cLxYhh!N5oNo6S=M}YU;|&HY$ut`nTwKCRx5@%!b-^b- z+=}^g_Kei!(?nNtAq^@R*<(G&%n2Udd7(x16wY7ApB3*R)yP>Mc&;+b9AuFXV56S@ z0Oy+L^zVpJY7Z5bqFOfP+k#YW=Lfz`c)y2+sjO=8m6S^yidjfpV1e({A75&_tm(R* zpLRi%$kLPMV0ZqMU#l{U*F)btOXK5ZqrQ`*$~Rs@RSKMexN#uHd0xQ&H5bCq4^ARW z{Z@9okx3=o0L*;|7#;g|uLJO=pLaY{EyNFq-vN#}JwX}m&3zy6!^Sq+ex)CWHAPMG zl42@{arF#Az{jt>bVci7soh-7_=l`XrQeM{6P@fEXc!8G zE`cnq_kqsG9XRSet0kj%CY!z0kI>B%!U+otz?l*233_$0fdb8mTTE}1H#^|j33p$i7 zfu8-j{*;}T!)r|mb&nifYu*sMcw_rBO%cZ7k{9^4@-j%^8u8B#d`#3dd0?^BZAA7t z5xO}8%gO%$SQ!1|{or`7r~F&t%_`$YkL-Uc$IuLNF^+4;;P`o@UPB@nh&1V}?9$^&ji72HxNHLX$znJRbI_c09qPx6{u)|%#@rSRi5mvOC?t{4 zn&%|dg_#h{%;j(i?s44xYv~^f>+IS+v~t+Arc4%cFas~$CnG=odcsSq9ItC5$~-UO z#PE!X_MOtKDX@swjoz#|Dm&*rd)2)}TT5{zy}RQlEI(eg?3X6q+2x(lS)~Vld-`;* zl)QPZPj7to`don&6P6<<++&U^V6`UlX`=R<;j2v-Rg&rxx;YzjDFA@SAh6>(IX>0V z+;}5K@dC4XO54uwn>>9FucdOI4}3>^e>Aq5lm%l`ut?nG;GQ@G734V<8KN5T}@SlmbPwic1(g|Hjk>rqNj~zh#1$bYGUq`XK^1L|AVaCwB?F1Zm zH5nz%Q0AY@<Kc2r_&cME83T@-a(}~$k7loN z)8)O6rq1P{on05?Jx^0vzZHCCX`*RXF~PN^y^x}_ebvD3I`iwm7_Tt!&yMvQ&00Gx zMm>g8_qt(yht|D2R`_M7c-HpcTW5S*1_gLKi5zj)gUH2NU4xY-dH36|b&!^~M{B46 z?Hvg3Rs2)pi_ZyYs5Ha6;m!jdR1w!dU&_9O@V|w0tvgMXZeiSG-~-eF+@9vV&sFf} zh5SXRO(Z`rkl%F<2651-&N^nLH*+^V4s+q(j5UpF!b{D0K$mg(lmHoVoPaZrrF&0> z?jzRj9U~yZoE&z~Z2tgC@+|y0C)~cj^9cXv)HR$U7d!lq(gD0i&%yPM|T}-#r%Kb&j@I`G`eSsc(##DZrI$z za6fmBa(E*-#dn&|jU~zTlOCC28xoI=lb_1qQTKIeRoR?Cw(-T{~^Q5wZP~l@6 zky=la38(Fe z(|kpzJ>{LKjF2OLm#=;grG9z*I`F=s;wckczD0#CkIsjk#E(z$ucP&!iErT_4IMK} zkSl+xQZtzNIl%SfyDhR*#`gXRLlv_t&T@RR!vJRofz#<%{0FV-+Vn>L z`T3vbRU7~Z8TGHuoBcz?x~97>q9m5$7CCL_mLLAQ`Xk{tj5S*wGU6+?W(xU)1t$X^ zFg?97PMi~BsT8$7)YtW^?LSLn3KwJ_FH@X-E5{;h{{RwC_B;LglRGy501khZbow8U z?EFuprj}Ly)IX0Lao0YT>V6B-A&TWZ)CT|)#!o%zHD*Gy)t?<|9}K)z;hkE0$)J&8 zCwx+_TPd7j&OZ0I_}63Mj{s{oTeWNC3Rs4XL!VB#?O$zplUDG}ou}Bfd6wI0C+8fu z)2?gD;nlS3>y}MEMR?SamFd%tJ5ZXre9G5M`E$m4-nrquPTxtqiP2nd^HgKZ!TY^& zgU@`{J{bZ;T=wg?HW{CWLNf%Bn|-t^}+9o z^L52AQKMktShDxW9=X8iO?(ggR(N;B8dr_S#|i=fNKgm^8RX#C)&Bsq*TMe)6IKY95%d6f?c1Q#v zKO}p4?E|iQbNN@$pBDAc6KR+6Y5HBUlGKLtB>{=yh#1EmG1k03Me*D^XxH@1cajUK z7Bn7To0dPuRe4qV@k?z2H5SK*{7LaA_TIf0hOQXHX8~6E6fwx>l|HA8_OGqJ8|m6k zqoTFPn$lp$)^+H^&RZ@a7!o#l$N*y_1LflbwS8gXr2hbf zYs1MdvxJHSP|VCeMd+Zhm?&xp0Tv^z=lYerPNgRJYXEVTs|;wN&bjq>bcmBu}|$FJvHKZd>~>0Tj~RuId*nLuw; zI6XQ8+t$4jcarH^(m6y%MLTKM-G5DsM`pH@GBX4y58el<$F@7y zA@H&tBUgY;ZKv##Fg)F$jpPyoXT47!z>gJpkHmKun&tYYof~Y8V*|`?H)OY_SYY7v zAoj=9-VX3Kjo_^%ZR`%_QHEl2PC92l%8GJJL{e=^#~Ur8JPi`YQYRQ7^Pb+_YtHna z1Ncu$)!SFMvx+N>;5b|y4mdwfE9o~#N=bC+83zOpL&vZ3ublj2JarUm)7 z97x$cKp+e#`t+}Xo7U+0gzkAa#Qy*tj}Gezq1!7-aTJP@M&Pd9-9}FYfOCQP;=J$2 z8h?tfEMe6&nBGLm*kUD|XV3wI_4TgP#NHwQ0EMBf#j0PdNWEg(zcgT+w*F37p1lY2 zucbUQY2eQd_&U;kLh>YyxQ;SLPf_wOryaPe=4(>o-l+JW;0^q~8}XFZTIvgS5g8?b zu4E2bMr6+^!6zTZ+P^|9wEJyE9$Qw-PNy4sckSz63;aU1wzu)T{wMIDefqIT=2XI| zk_FotowLJ*;B*)OdS~e$g*p$4wA%%rQu9>Ye)IHF4f;;|I=gFu*>?ON>v8nI+bf&e~#VDP3ihL5DF_I~*o#9j@vMUrrpJBnr zZ%THD@Z-XEdg9A+qT*lzg5Yi#_W)w7MdJblP}ss=G+&v=L+OuN;4U?v5J}?bF0IK+ za@*wua&gAbQJxM(HwR(VQA<Ps+Aa0nQDF<#oB8cyE97~ zI-nfjK0Ee2SEG2g?q3HPY^@wgJ8_KipI>q5UQzKU#~OW)hkjOnGs`Xaw(_{{IVU~8 zrF2DEYD^(_W5WDT;$3e;)+duqxO9x4FXbG7ex3VsUYX%9huY7?JqiB+wQeMZ&=Cyd z4J1b$)Z?E*c>33hT1kJci)(urMa{*)53#Zlv(L=@fIWNH=nufXBg9E+@n75KCo1tu z7a3A9f=5%4?^wyTbQK>iiJl|izk~YEhx|Q0o8pW4E+(0Y6FvcC9q^}bQSHZW)wl4c z;6iw#QPgME<}Ym)Ba94Txz6V4fxy7}`&ZPT5c~zGU+JwrmdDH)COqKd(Q7N=Plfd_ z3=<}ztrwftAlb-0H*<`R)hXy?=h)*lKiR(S^s`y&@ujp$g9AiMGJ%Y5-GTX68Ef!{ z#@0r(VfKjgjjT5h$2Il+#ht?3w%ws57+_CtrEwa?y`P1j?bCwcj{~(+NY<6_W9RFo zzwnL3cH3PP3`RDPIL0tBUr%^G?^D%uxQ3{O0bZEv_4?KifP8hOc=q~zGD~7EU?j3I z%82u{5ZxG))O8<9`UX2qHrGsP89;yG0D4tH1z5GQ;r{>>{vSc&O%7P?+`vFAFm{GG zI0uirpH6tMggzbq&%P?~$HY6Y8`}s{8J}>=vlU;u;3?`@eAzw80|T1--ttXiO*ZD^ zQf3jzenHp{*gmJyyc5JXo-myarifY**~UpA9FdG1nsb$heunppye|ihtl-o9K>|$` zw2Lfdxx+7TJ7f|Mv9EFP{q44$r67rwBOfWo2TJfu`=1sc49Ohqmim~74X_ZQ@r;0T zf_mee8sh#F_@_{VT5Aszi5@FhzWai}xF7<~e~YiKYd>h+tTelyQER>;T`+yE512ab zV}XI!pGxyxJK`^c{8@G;)0jqi`6R~XBZ5F2;CBAC55*g=59?kYnp=6%Q)cE0*!fqJ z&lngS^Ix4m51`fjLE_upbHnP!D>=+1RFSwG;~?^L!LFWLtxY3F=iMI@J|6f#U7kH( zT(=XYsabFiKh>Sse&upGAD?>k{{V!(BJhWcw0ql46nRoxF!>b%3}d(Q$9!j=we#k! z<9mHONna26j@hGoh|Eux!r+V?k@EsaOnr03duPEf2k6>3eRkK%gY7^G0Ld&@?wp@M zYbowT;b(KjJ~DVOLA&^aX{=1Rp58Z&4Kkt)7O@0^fp!~8AbJsK@|Op2klkgULPJ%xK$ivA$#z8=v`no5}x6$^l)0~~H0 z`hP0PyO~y6=y;FB&xV@ZI+vZKzQBM4j1>w-d2Zc5rxoYA$<{Ql3QQw*N#au5SNMn> zGlSpKyFD-B2D##!u?*%(h|e2O7|G;;$Kzg=p=nxfvm3#FpmirBBaX+~h-fEk9(nKy zyiH?#`lhtZu+I+clbjQbDbFLhs1?0 zv6kRNrOL=5U8W^CQZnf=S61+>KT-+s`xM>RS8?(^#Bl52ZweiK* ziT?oNf2E^EZ|0B^PDmr1WOI(*^?Ov(W7jXgwc1u$+yRn!`T%$pa+Bz3Z3_B_h9mJA z42W2R)p*CfeHq}3n?D6;5NS_0?*vI1EJBQdfKS&S{bAC%KM%p9>GrY1B+8Sr=V>@3 z4y1bn*A+uw@I8mbTeKFls?87xvM3S&Gmr?#&*l%kVyao0OH)V1w(;v1Yv!{2{{S}c z;m5J`;;d*B!Kdm=r`z2sms|uG*-D{tK92_k@23XrdjK79Wwm`n7|-EKzmo! z{{XX&i*MmAG16tBK2XV#!Cp1h zCebf;{h|j}A~qY*fenW40}i9oo7i$|sn2-F<93_jO*J*0Mi!FFLJ?R7ARH1h6lVt< z9tM83@+G&&_%+WLwX`RxxKo3 zX&fvrerEpwYZ(LbucL%<#b)>TCOF1jk3bKvx$R$^-WTw{i}c?Z>DCuAeVQqx%*;+z zP<`NgbimGd&szG2#D5fYi;uK;OHCxO{nwhOAdtM{sQ&;tr5*Jgso5TV;+xF};x@RN zkA^RqmIo;kgOH3qR@{VS6YK0N+;2Q9c?W?fpHGZj>cTw6Gqe^1k@)>HpGx`n;m3pY zj}Ge%eQ9yHz7(!_`kr|{mGp{ z1nGC0&xdV(*(?fNAq;kd-{l!N9Gr9<^saCAQq@1;=blH8PvE>{h(DFg$zVy>34W!*6_}&2p;lhYQCC-v`suyu)Akd3oTU4Zn;mF68oj zrE?fi6q4K==aZAiu&>gO6Zkhx)X|mDJV5dY{{TE!op{s3nr^@0*6{ACiuSAm`DdZq z_fHr-{9VX;R7zArB6K45(Z^u`B$z0P@|k@n#%Zt;ybGiRy$2HK@6Z|WM_U4 zL+A}&mlq?w&mQ={;8`c}91Uq`7*80IDHAN)<2Ym~*B^9)?~hvg3MjR$55ft3a0*>{ zBZVI+Y-I2_09RQ0hK(PGqSmi1To{vaGe%XFhf<*OaoWCQ*S<8*;%y@9!?MfvdF2?& zIo}g!g;wJ^@Ac_f)Qz5pO*nICV|ah|lwDF=yFE_rq=MA8OsKI&z%j@{g?8tGk)Al> zy3Y^%MerAhZobP5k$bZMTKTkTJCtP;$x$>7I8UeRu-2Nn1vA#U!*pPAu-c zD;$p%f(e=?WZp+4f-|0jw;1Enx$hk5-X@+D)HHcgI3&zX4#Lja1e|v1>(AG-J`UUX zM^;%PO-kDHQ%IKK(iu0aMEx0C?y>&x9IkM2UZXFK{6A-TCW{*8SQzei7+B5$0dv%l zN#m#MQx)9O7ipu(tvnvbK#mKQWs*eP`?{+hGBePMZ-hKWq4-l=J{XB)63jRJh|Iiy zc#h-)*1b=}y3UKIXpOCEGX#!3xfnTZ#{d8_N%j@54VQ%=(yaA+LW>>jYa%lYGmgQt z&U4frbJn!wWNMk|`cAzDi>8b9wgZjC56>t1)+dO3Qzwa_FmS4Q!jO5#9Mx+bVi?tJ zpkp8%=1}(zP0(+@Ij)}J|x*{kf17M2v+2m=|;KN`ZMA9L-p_Pw5l4D9kKD!AsFOIw9hVV>aCoFgLb`@@>e zo*<=|{J?s1M=M9G9_*14d3Q~plyoDlM9(0Mpd9}IS~EYF$-t+zyvhSH&U*7u-lWPm zcPUEJs(DH~W~+I##D+ox6~=Q`Nd^3oocBJJT&IEL0E_@vzc3h4Kg@~m}GAKGfa$?V5H+GB;&0Y z24LVsI2}c2bl6-aD~uz2!l8yIRWf9sdXi!iJ_laD)Yv0+hhp^g^rs!klrNyf45tKj zpg@t_dCu8va0g6(jZY%HLu(A@kZPHN;v%L-4<2*wD*1J|C1O@*nTaCa9tRbCs9~~C;py6$ z_E@BRGUF8XcO8+>>T@)Zv%*MVe+sFiLp0CkNDm!z(zd6X%g*~Nj((V}l~^sI`6Ix` zPw}EVgjS?@M3XXbtLsFUQHNH9{J+ktN|D@w9!?1TD7mwS6i|fm{53LbVx_Lcv#>mq zv>#9FRpO3MD}2kesmRBAMs<$Wl2OyQsH)cY5-2EGk?Bn|fhHyO6kW-W20jSwQwd@)?v)O6-<(pB8%^?O+#Z#gs9j2ugkA@wT12#q zR~o7$VHG!R=Zd5DhPgYrT3tSPi$3+q#}#rz7Tm7~Kb372ppr@~42cb_s~8NDjav=U7lGAUA|0iK^x zMVv1jCFL3PG~sn5aQQI&xH+lzYT(+i;RK-KQ`3%pX^x`Y5)UW0y;O%)c=w++s5I{j(5 zI~3K7kqjusP-mWL5e$bsfI51NRJ#@?*o2IZDgpk8OGzhR;ii_P%ei&hR#igefxyi^ z7$jK&$furiY6ET@teF`nAPTt4G}9k7@#tuiXr&ffc$_JfpBs1!QKamu04Fsb&nee` z%m-Rl33HJd+m1)m(uk|O1+^wisgVeAf_fTq$UMEoZevk=@Q)~RzNVV)6@sTUMiyd8 z+*sXFi364GS3c6H+qMy&Pp8(1?L>r?9JgH4MZN5KfU=bbgY8t;QjHY3E`uYAfe!aM z7zd};n=yFfF`)D#6_)pH3*#BA(s$H%?peFE>iNZF#HC~k4oi0HR_--qYgR@c;MENp zNX^-~2XG654tPJ(smD_$o%A+cAxN_l;Qs)PR-f&L10l{wr*TtWTqZU}_o=q`Hw_}g z$y3yJ;{f_V1;5s*tu-5s#=;50s*-z?O}Eq%c}Y1QQNYOH`{K4%H$v`ktBh57XNlEB zVL)EIb6J&sg-^5_sP-{pr1T@ED)Rl3Gv_-DsK(rNJ*u>tfP&qmg+4~WII3~&n0>8| zGe{RxMQ2i`R#J1$D2jQUiCsv?LDH&5vo!wzyBm{l6{8G{C1_<_ZRlyn=2BNHUtdo( zp@9^rbI7UfB91r}Bp{K4QabNajnMb^s?fs}A+yNz_O6KOxi&OzZlxt+wBb(%skw5@ zsnm6-Eaxy5c^9V&r?nRMLU$pQq0Ted)8;Ke(R-p1R3DoiD?VNGNTdC%)rN~?o1|QU z=}R2uHZ8N|Ju_Lmu{b;ESRP{qDbat=HFDlrZZjO;C|}mGp)*0byER-{l4y&@2*+-N z@U4_=K0&HxsPaNGx<_B&_L$3+Ey|!e1uN^-qliT zSs}SY5*!}5=C8+@=leR4$r#RiRI@mVuRAOc9{GD-#* zHUK1^qaCqZG8m&$k@4$X{E05{FeI*Vnj{Slj%oI+eqMRWKI5e-3#Vf&id5&1r>!w$ zeBc9H5jN!6!i;h6M>j&6u}%o?*;(Yz2OyrEY0NGjGSfbNG1nDq%(+4l2H<$X;B!@` z43Y%{B~L!o^kggE<`BP{;^nQQT$CK=`PKNON3~X%`9;nEZZrAT)7*Wc5Jv@jV}L6f z;@T^OFLb;19EHU`RE^;!YY8MQj>(P?;QJboyIWiNuyc=JTA>t+6i(dW^NM}E#^h~L z^3_vIsf|lo$eYT(x(jYR|R?`>V}F=wNk7#syVaT$dz^A7_df{(OK)#Vm763i(m}))i&iDItwy z>IX`@aPcjY#}a@~JE)8`B|Ge9#Ji&{xMX(rt5HnorE$hORzKQf5^Z90pGwk_QZN;I z@mI{OTvdsrEFj-*yIb|CT2&0cX&7vEsFQSZAdqAERhb^?ClW*e+x%F`{EbgFgtrh* z&Y6sogVvx^aWpL8ahw7=;;gKJ&y^U+Je+#cHN22AC_gCViq2BkK}ow5qts;s?2<7c z9tA}!H=L#*ao-$%bzyBIdE}M3W6*jEm_!~xgDL>~#20UdqoG?vD03v#r&Y!HDO@()^`-}f?krFw7=aZ`&xj?y_f zQON9SvbwBH!+A#L5(5Nc^iPh~FTRr>{)anBk7pZ*WfT=7jYWpK^J13GjD( zs5=_J09CUSN`6=3sznOj&A8)esi(Jvm69{J9jaPw=n$QmRlKH`ZqikIpIVA0U_8(X z=Cfs*RFFm(ec%WcuN$?qVfgf?VK=SGAerPIbm{V`>HTPP3@Sl_0uX50N1UZxD2cSJU^{9{rl;;^7)J-(AN@Q=kKZJCpidf8n zToG8yMs0IV5WLMKV{-+hoXNKt`Kqa&TW}?ekaN^kwF2einB-@i^sQq%q4coWEm>U2 zAw2VnryIN69msMziq&F7rK2T}Q=eKfDl$x|%V#+6?^UDF#j>8)N{OyM$SfXD?JARkvv{;n*~NH2{9qgbDFjGNx~N& zHhKzx+Dj4#l>EcDYSJ?36;tRSSfRj-WFDfXb&BCdw#}nC$@b=(4ZM>k4p-3Ptcxb{ znIt*%A5Qu8sBB8<8IsQ%PGM3qyki|HsvbX=0OG9KX;6?}a6kt>^`sIRiCkj`iXpi& z*vpPM6nVsMJz0IvN^~(t<^~6AZU@(oO0zV7XOs6}@;M+5rM}U zB9qEUloc4sr$;+mqb#3venz5Mppl3}&}W|15h-*e5QPO}=zV)rCu?MlV;r#SR3)Bw z0S0>GKj*bq+9OdUgE*klnQ!e#IgN08=bDlSnpI{egZWl$%-I7N&tF>8wwdkX5i$Tc z;8U>q$Q}0)BA^Y(KDAfQnR1xNHFQFL(98x2=qk!Aaz+g6f)5o@i%hu9GNIbGtWPXC zs&^MMNJX$*JB$X$LtPXhWz2FW)g28o>KMhqlrJ4~OOcD0v4oa)CIW%5;A3}QeQMbA zVYft|=3p?y3<7)cR;0L)f)sLi$>~nGwJ|D(W0B1%M%xu)jImrq>UuAyde4^D=H%^{ z<@{>-xMgs1O6LdL6*NwbD0UcJAI_paW^vxcLfM)#9Dj6lHAv~Qd5a)!I-h#fmRR=r zG4yY}Rpj1^ut0D+b6Q0tXwZG0GP_)r!8Ib`qzl(*!1_|$M1h9Gk?qomoES{8nE2<4M;9Mrp9zEx`&#i8?v+nv40tq7)xvBn5F z0+5?+K?Jb@xbcrq!?ij&VTcq(9%6T?mZn_k5NcNvGX_D){VOImRE*0mSPr7KZdpME zh{@n!=AecmqjzdiPTH1{3_Qsde^<$Zxtm2Q?xH z83>eo++)-lX5lr6(4JP6?3|FBi#L@uhYx zxcBrPwX<;UvxdROGDoc_kvS%aW49+T$k#t!6`~+?(`ZKXL|t99FD~@VQmv+LML!M8-E(L>^a`r3l?8 zVV)@wOlgVN=f@+pXriMhAc8y8PaH}bK2CZ1RVC2cDXk3L&lug1RGtB?Sgt(TM+9vZ zoA!8oz<1?EYDR5S2%CeC$cmXGKBMMP%2m1UGg-LW0FgG}ahlMYLAZHG8O~O-E>c;e z+@z}^?^;GlElQiZu_Qt{e{jq4`_`&K_p@~*NN}iQzx$cizf!KN`5#spYCN;DRYd>t+&&+nFyI7&dg^CJS-$0DSG%0M!?Jc@E?QGFPwuQV-z_c8g?6sd0}Ve_EQeF3K% zk0mxn2q&#svv}luRSRtd`_(I?P3mpelT5dcSP&9-5$b8nFlj=S!;i{@DN9WXk}Ga0#z^nl zk_eX0aU|?8dSS?BIXA9b`UHNjt-@?T89eAvesHw?2Q@^ceFES>JcLW$$x#{$# zDS2?{Gskh;@u}q)h%9FUoNUaLo$Ok$j#%Yp2MR|t_9dLVzH!i05XmdV z94RZv$o8j1L}V3Au;@)(Vv{t3>ON$4LPG7&Ls_o|=~g}8T=lIPFQ<6+$N?VRs=SgC zN6Uf-UiEXPw<*|FunXrHYl$ zUjEf)-qI*g#-!t}NzW(iRVTACM#Ts$+~?Mk*5+GuEpR?ssVzffTfF`8jyRVrIsCop z@hq4O!#U!s%Q~Ol+l-?OliIV=?Yzy~jw?3#cMfi*u>vOAMl;YFnrUYMDLn`2RDRbC z=vF>hboQnQgDVMJ4z#)S8h6nX$i^_DQJvJ8VIIfF9sT`kn$ML}o=0E8qSS7rjf287 zpH4Wci(7=Hpv$%`F2x5ONv7fik7-U%dSYG6eQ=Sm#s~Q|ZYhwnTS}l2-2VVdC#teD z<*`;cw!ZF!Q{0sUXvsZl%gt=<~v@rRyoCYL)DCM@{b0SeOaICn;H6$ie zD@MbBD$$#2Z*FRdntb6D;PQTyp=KQB)D|(^sABjl{&84-BDJ%VPMY3mjM2KXlm~89 zj(P3%?NZxL?HNdk=dESyk9!W2Jh2_DsNCn+){%V(uN2Yzt$c0LZ~Q&+zV}aPV;*G6 zo8vvf0}Ociv4ZCv>R%kkbEf!G;^rA!&y_r=Ty#R*1_z!;C3|FIzM=S+;JXPtX?v+^ zOeJwMGcIrgDZxE^2L@r`pc<1d4s z4}4vD;~{-_IRHNAJGVTWPICDp9Q&VY{RPt=>fR5tT{sef@`0Qjd)I>LM^e$W_~f@x zlB(^;sBWW*%+fw8-&%Oi4Hr0Is4j=U|V>T&4zlgM33j5{t7i1#PIZaJ%Zzm2>h;oGrmd-AiW z!RP@e01{7A?VM1NGgtH@@YllYT^_<)>z4B*o1^U+P&mT(!SC9p*1iyE*Vd70j>gs4 z<0^1mjxfQp0OzQ#mQNaK*ET6l8vW9HfyHq@5PT%st(kbPJhoHwvhYfG2cBy#mnQ8t&F>EUL$%gmnt7x9 zBLH?n$Ai~vD`01*BD{0^2gEa9+_W%Bcp1x<1B1?b^cWRWP56D{1#3+&NV{v#FqUa< z7$}Gg50e9@UO73hqaczW2k0vW%)6ttTr->k?0-^8{AxMLy^ksI=ZvlG^vNtGiTB62 zjl*jDe8;!pU9N$vUh5WOC)}-{xS-?#*YMA!aQ-&&mW?_`apmu}Bj*F}hR+-lI34NV z4t!{rekzK}+vSQ(ha;SfagWn9J0zKLw&%RtYqPDZS?U0)E(YQ{jyd-^?kkw_Uad8q zqcxnSH&K;ijt5-e@$5x&R9SP*~ir{t6 zhcI}a-Z<_y#|+rs6!DUJfO=Oj+HZ$E1r)j*cWp8zc8Lfs26}J+{&g+3iGxdYeEVhb zFUCG4)ovu!?vlphX>hT`0;)tl>I~$Z=RD-|&3k?ChxE(MIy(bt9HQWf8e%Zz{fOiP z>7Gq|>Ea)VJ|EKjaRAk=({h5oV&s+13X-dzr#&n0-wImklK5^Te2QfV4h{$hs4H6C zUdXx0qeFklYQ8-#57 z5;5#Wefi^`8~ArX(15xM(UmOBJ21`$-lY0h#D5pONbBJVwVf_g6U&W_&IvqY)MvM$ zt5ol)3Ad^{4~Kp!)HS_DG@W`tZw^FYvV~N~@RE6AP5|WnYCU`4wzGMyNjyYY+seg~ zSs8e7&O*k=1M7tAqq+V{oNM=iWD z?vCYrxYKqvVUEPsM~a?T(XC%_hF;%%p^%E`#x(}7UkmZlPoi+Xj; z7BLv*0r(mJ0PEKYQ{ebwOK3i-Ms z>On%4U)>-(LB{|eO7Q;x7TUq6Yja)d5B6yhfIHi2k~sNE;N*-9SD<)n;)eYu3rHdk zVgPMJ-xxU^M>wqy7JMYsJ|}2Pb8E6Y*jPy#$(%?>Z40&8O0{_H@qG3 zHsV=VNRo9ZUlA4oKpmF=4!l=UrTi+3#2zJ^#J(bLwV_b4`M-D^V66ERpr)`Jtx9x^f0zXRNU ze)Xp}#YkXOp3XH(T!2(?c<3?DAN^|9J&>H6-3{=*hk4;cbv67b@*@7{p4k2_ocA@c z7sPKK!Q#y-*GsiYt>5L9S0gIq0>u9SvD9(_^sD|K)wJ&wTs6xmXq+;foSb{tz394S zkB96~>Gtu&tUC7~^YuMVOMMBlvGM-^#~o|NCt8a3*i9FoBF7v&m3$16p!)4O#d-(B z?J{eP4h!3~k{gFixRVNV>BnJS`LF6)bkVJ?@+^S!w~n>sz9H8pmO%}Y`CM%S8$biP z(y1SGxJN^jkKp2KI?C!dfH{&wER2`{Hh3T(TKd)3!hRI+>`~7ocJaj+UD9D$kKxqk z(!8_5n&_~%CjHc)`^R_P_RrG18{*f9q4D0m40;XR%MF&`@(=(IkOIVet_E}c?s>p9 zF;>*oMW%Wlt>XA^B$G~!LoV!Np55_Y1Mve-gG#wK;vziHn{x02XV;E<)`o{{d@X1$ zug{+%0!wbo70(=#*nYL>S{3e%<7=IRCKwzEp_($dCnJF19!7Z|{d%U=tc2oj{5bJk zy03@rrMZQmRzgCYo)ql|pHMSfUN_N3xuc7#MJ7m&kV<^~m1*YW~dB^xG?TTez69Wsd?WzjXv-r^vB~}!d`0@wkxUXU}Xp(9*3SYUrTsCI~`L`7w-zj zJ*zKJYoX^lkBV(%V9uK+VlotPzW)HFbTIgvSFlKy z-3Gz|Q_oLNsjoD*)oeU7aGImWWh8BEoDdKB#d@EFyj`LAu3zlP5o3LU_MR9ne=Z62 zsd|RD(DF}+-afn1pJISob=u5%V7cj!O4#^S@#1$6qw1v^J7KmWtBG;cmOToN+ zny9ulCY_I@G@lw+_`6hj<+m`yxb0TM0y+=GkISWY+NInQ*%NG{D8c{~00$g&ubjTo zJ%lnCl&q)@6n*6*)2}t+x`)JXi}GDhr&!rtUXr6RNQI=05T0|?l1>RZCy#1-$j&QM z>btF8&rc1I3!a1PUMb_1Ul1c{H<)N-#!!>AgX$~hUmARE*X(a>qPsKOv}!}9#UQS5 zcLRb?q3g$5PX+uabBt8KLmJh#nxsETSc9OtB02$t1;SL2t7c~1~7V852$#@ zR@1Fqh)H+MqfIq|oMt@JWBeXdg5_egf0*~@)8aZu!+QEz5?CxU(u z=)MA3tu3cAiCrWr-4)aOzJuGId9I&VvAT-xO;F5smB7XU1G8KO~gs5zs|$=E7JgV z{{Z!x^z9c}xYjKe^4Wxu%DaZr3ggrf*1k~jK8U_C&?28rl-kWF$|dOQwDLW1xM2HN zLGb48`{Boj8Xf!HR}u$e{Dr|IKcA&zIr5GZOMyZsg|S!5o4(AP`1# z$>Z=f;U5@0Gp6e|&8$SZX&-apu)yO00fIYnYvfI9#daF^#3(MB;&_d`ggZp+hEfhe zEHi!j@EhpkWiL6?mCPacl0vzSO zZumdSzdfr>!uCE^lhf4s!@<7>^;L~*wTqInLf9=De2fA4vZtJ$$Mmg_jo%G*6wqPS zbVea9L08M+_BrQh#yB7x=hu$o=&gUndLM>#s3digN#$S;6qUj1NzMnb&QHB{`Yq3f z{9B=)wJONC!)`n&AdKMm#bXyOE^8Fg`JeEj9cgYZEcGl)0+A$ZjnB7`80YU2eXs`@ z>tCmOKZ&%tbhz4BkzG^`qXTXS0AmC4;=H~KUjuk&Ixd_dMUU<;2Wa#jg14I1-w$)9 zF63nI)Bga~RGEB>bIAO6;d?E2Tzk3amE?2sFA;C}OuMP0` zhCDs4Filoxy_DeNegOj=RZk<-5=DCJcxKa0)FGB;+F&`xaJbLmT3uYmq*?C14Apf= zqZ4WXU??DS*S8(3H^yHPZTu}1msbFR62v46sTK7+)UrWl4@*Ek0!9sdCO z_4Q_lWpOQtEDUY{AdjVdtMKdLUXh^dk$8$w;z-ewJhnjIMotfW3|FyhemB%K{hD^1 zr*UBzJw`wMUzJ4Hk!`3R(SKZcL9k=lV!upa8>dMC;91wB{_XfQkv>iUy48))j)DGv?ubx{W z#XFyx-v|B@$>7T)p=)U*k}GCqWAZG6sZue)z|SObE8Bcos`!h*{tda+{2v-ib84aC zj!cy*7;gXqGIs9AzhhpP<93G0jLJY!%X;8flu*ur^_2^T#~h}eQohK#Cp;2rKgJg7Q+r&Nurbu*vA6{J^OyO=idY`_5T2i8pYTA zB`RJBLbPE)!6T^0_kH{Htg9a%X}|D;!uo@KkRS@`-^Anqa0%&?ihqVaCF%YXc;fK8 z7+ip)BN9hI26NEhWM`Ujf_pK=B<_8cEw6+0ZAEWwZJ@Qf5t!J-h>XfeCp$pTLHSoR zulSxTh&-(uEW3A>Pvqf>2hTq&QIOR>NDT#T@A$2 z-0Lw*Z*PcWQMrflW4OmWS3~04+a%K#SYlN;z+y3gIpY$K#>?F=#79W7 zv)wWvEx#dtZkQvFsO$8u3j5+j+RlS-Wos(Ib2j058jggV4Y};Ylj-YS_r#9@+Wb=0 zBW((0w$$VK1cZ|suU*WG$v)?{Ys~F`XTKZhdYFe%nk)HdBMod=6#)I*I2awt&T?_- zP?@|Yu8~7u)OCF~!uJ+;1j_+a<{S9*Kc9%T}HpJXr2Po zAd}77v91_!F}EGPPI&z*-t_%n!@7--g4FEC04VBD)84**_{Z?pd!4pJ_lY`}>*#tO zIIPs}?#z{2+UFcTJ*CrmaY{U{_&o=1nXimKKKy9$6}O8lWw&RJCnw4M<6-bX}?ej>mPwy&x-t8rdewqDTGCFA!PwolqxF_Hv&#c!8!N*{r6wLv9h#l zdE+ht=yS;FgZ!)JJqO1N;6=5w4dq1OMqLLO0~yCAyIoV_e}^unT`6un`-!j#7%Ioq zHhKIjIY!1Zk7L*TFRFMR!x8BgV$x|;Da)59+bm8!`R28}OADO}c=TeaGvMcuz&!Kx z&3xT)qBYi|Z+R0IXkU7dLOzw;U-;%N8%%p^(ixZl7@mW@H3rbqeMo#Q;(LD&%X2od zB!#0!2^y~A?nfCXpa-x209w9%@o$GUzZ_jpb2F+;?YM5sD*Xn3t$K~T`e%%wxzqG% z#8aZ+$jWx1U~oowKZj2A&kgDN&xM0pYWGmh2n7-qP+9)~+i3{h$3VHj>(6IoiB?8u z!@UhO3wwVEc#Bg>?jLhTyFeiU$pZr<4E1h6tKS|x1n=R<^(_inOF-k~jj*hz?-B=G zV~lkAXB=;Xz8LCDt1`puw77=cJ5ucI8r)y;HmZN+M)4wuP&{peV#V+9ANe5@b|Ae)Vv#L z`Z$i@VB@|41f1Y~PCm5Z4x~D9vGjk#Z;97FFYscm!pQEawVGeNf7v}cdwzMZGuE~3 zTS9qmWVK;#gbz4!qjvxv{PwQ9!%$r4z8wvCfJ&>E%JM(EVNgS z_H;*vXx9g9n|KYLgk&Godeurj4VAV>p4fOA8~*?h#p5e`=@NONK+2@;Db!(s<2fOQ zIURapz0UeOJwHeLP5C@7bJsQSH-h|E;;kCyTN}l9khy8FNi8CPIt~JieGO}P>*A-3 zyj^i0hHYY!0cxdijCVL8B!FnL^)gP&~k$4uWY`W5Wf=SiykK)mtqhQ7k( zQbV=yzcv&Dg&xB-;yNFJd_$vOf5JgE#?&w6#ImW&=c(E`9S9x$s)mK|$H%umD7Ue^ zzf-5lFmxm3F{(CJJSZEu;1YhPrF*ZAd^6%*9^M^E5^2r3E?PA^RCFAU{{TQp_U{ix zV)oeG@%55N;M?S#WO(C%nGz)o>wf3x<@JM^Ayi`C zObl>TmpJEWDl?PQ)Ys@%ljF+)rwd!fCPo2Dk`DxT^{rbw{Spa2(K%Q_`GDvL;0;P; zIV74ftt=qX=M!C$fmdcd* zQzISlYF`{l;f;4emLS4oC?SeH3q8X5Uq@xaar&o#?eI zdvvVhsFRMzxZZqdXoJ`mA&v%EFCBoV+Kp!Kg@ zx%d?yi1j0^THZ-#1UqvY0L9q<01#u)3}+ZQC$=lk{D1Ja+V=4+HR#9L#~bs9`mYD^ z6{KRURHV8c9+UB|@OW~{J2o3-Icxx1*OEK)iuGM5N6>sjJ->+c=p&NlO1i%08$zAR z4hRGuNe4Yh=O(^vz1I8{p^IyHA&KFEQ6mwIkCb2*VV-?S?ew@- z2b=_%l#R#<19B!lVc7Q>9Y%2CgGPJb#6J*Pc#6&R^2$I2jPeNsps$ASz8`A3r;6dR z@cTyr4Y~I-90BuXv6IwRr-wXof2--zTIzQPd*oydqyxqWZ~nbl@bq)s_^F&s=o&qY zpn^8`VcfTGVcN5(*20svi1M9ZucZ7(Wo)`Qj>Zrpix^cLXQu#gD%6tL>5RIw^Mm$qZ8Jpidr55+ zu#$}oThnTuyN(Y$<2m)|Uv1oYPrw^CeW7r8AY+k{gUu;4Z_U{2^>2jwCx~^K zuXRmLr?5rcZ47*Q5|E%Ww&F4{PfQ&1(zt&Z{6ALF;n15=xJyNlNg+lG%-uJFqlU*B z7_2Awt0sjcnn{p>84AZ4=i9k8#(YNcKa90lptaIuF~V3Dkx%al>9w=Mt~vG39Cx>3 z`7W%_rt}{X=(cQ@x6?1~zU-vszY;hD)by`xyzw57X%&X48>G=IWr*Z3!3U?kd~4v} z4QhTbOMMFBHxWccMq!=UIqU0=dgq^d`gYgC7CsBpBGGl3H;_O=zznZ!5r9bc10Iy5 zt+CNfT2?-o_&W`^iF|pcc!N(nk{f`^s&K5!o)3I;kzc0w%Nan3dBCsCzk#q}cD~0k=H`BS@Y}E;El>(hBFJWLH#arP?|k^!Z_BZKU9eSDeWhZG=^8iI~K! z8I?!DBQ5MZITSXw@R$i;lKkUzqMPB%4FX$CC^;{0G^bxji?od(MKb(ZE146 z^0Z;2gMvk7rdb4X41?D^)!3p*cn$MsrC63Ufi@`ljWrc;xQh*wOcrhXXhkP+1L;d5F_1wc;m!^Z_|}|?c5jGd2RW=S-M!;V z{{Vb-{3{7f_Xg}}HlC4&QhNGUb<}fMA2W7W9Xr;51U_WRC#7fVQ}7YG9u8^3&D;$2 zX}zgi zFu<_Ld13shwLxgOly2NA2UfYCa~yy_N}b+@P9>yxS7^=%sNI${cTu}>&T4^1^GdJX z>Calyxjt2nAm<%N_)?sEnkQ|HjY4=9FFH))+upOcTF&V$yRzVN4)xRNA)CN<$kK@~1mCP>w5jgk$=8SW~sry7r) zxpBo-iWZeT$$nkE39V>t(KDDm|H!^M$VQ(@I7XFg{L zy(=esk+aa#olKuAa^t7aRTXj$G0&w>Z+YjE;Af5xy-;_RB{DK~{Hmij)TG+nv2i>x zLJ95qR$IbkPd$27hVq;SlwkG8_|i=rhCki>p!BUHG}#iLLMK`N$+~93j((MdhHd+K z+TH5Ei8V>AwBqjS79o}=wkw^|bzN36eBM?02imfJVI7XL(ia7{awHEg77e=R;nW0Gncc2;&V zwl*-DsC!3)jrDh~pz?7q@87g~sbG$dmft4&-aYMnk?TXlACdZTe0PB6S0(z}-JWZFjI-!(y*;!vZHtxk=U zrnW0AqBjsZ&02*FSRK7(jrra`*Ou zUtnX$CavjcJh36cIp&UQXhe0ns&1NA#4X1{Y8fL?yGop%n5_cvv!bp8F~%vT+CwuI z`>VxNXL6%{r$2dO42rHkUaX_}8q~3}g3j5>54>~gew8EG?%gUm$?SV$(xrr}I>Ll! z9M-lIPWl!8%9B3&p3sc3haWEnpuM+|M#x_tm7`Ye z&MJkZO0Jv#0M)7avCsJxb)j{UV^Rh>{uNy!k}^U!9)_G&q&>^Jgi*~P`zhHTKJEb+ z9)q#;KcV8Nh@HVjUMkqMkhh!;7ZsriSWr5SbBfm2&{2H{E4)^57G4lw5B{|tdd(R! z$Jeb*G^RbMM;`T;AO=ja{0B-lH08M*(mEB44waz=w3nYE3?97Jd_)%;daq2?i)X!C zljZ!l8RCbrn@KXtX;L9Acz$K+#}uEtXv0MwFnQ0lO*O^TfEVG9dWscc7ToYp>rUcs z$Y+?70@>hjMLRxjS$PZF-j!|RKz5#Lj_ZggF(=(_z3Db9mTlVQGVZ@A;Cj}OoCsPr zPpxEJTU^B0gr0i)RIPJ7W6K{f9lyO-86w(bjF7W~7t6;_Z(6Yx)DowakaqR;s)>t? z86zpTp*2{?Y9v_}FdTOS^Qz|7#KG%hp_fsyhCch0af+jDt$n44l}KUteF&_HN>6ZL z7%z@HRqGuz!MaJ0%i6J(t|umG+t0ftIX!Vec;=Y9H$8=Avw14=+LFZZsw#!LTqMD> z)Ew3H99`9!(@fH#*uxunA6lT%%MHE??|1pS_RUndzqxCO<6uZUX0#XyNn$xCip|9~ zXt%H|lC!J0#?O9g&A!MXX%GNd@_lPPrpO5Gf+|^xgij!34ha6Wr8tV(kD0ojy~Si* zI-+?*_RUP}?&On&#xYb(FzrUTC7pN}KhBejOl@6Qb-Or$UO%7fRu!(pd6N(eb{zn# zr2<(UfMg8R2$HlycHwc6no+YelOGk@Ey0aB82qZT-^&ftM&KCS9G>~A)5~=lk0k>! z>N-?H3#lS6Fxqp9(Lo_5(V(sdWkvyU(A20vL*`+N4!)HPZl>9R8-U}Arm~2jG25tN zj40{0rs?R;ntNT5OB}5)mW!Ro^sPvtf-7RPh739Z(yUlrM5kM1{M1w+kb3jdi|RUS zK`hUd`Hvat&0IGOr)Xc8QzEssg|~o4?)j*$Z#Kkyum`0m?r7%v6zH%}4X&FN6@E|`}pTcsw%i0&2) zD2x)ry>7KiCrsn09+;z=;cFvC z<&k6aUB-K4)=S7#ZX=~VZN{KX1y0pH{Y5rgaudi?kSRG|LL~uhU5uMojP*4%al;!K zBN@lzS@A_YfuWbzj2_j{*=dbs7}zq$vGk^*nNX(M7}8pW^Vv>L0rtu0}qN{XX zb5|!w9yM*4Bd;AQto~%oB0=(j^vz1_Dv@aowjw!%pTb99YPB@T9Ll{tF;!!GNR^=~ zOLnJ+Qn=gHQ|V$`vM{bR+iR<|yp`D!Bb)<(M{s?QO6cXDJCqVeHiqe%tsR^!#LRM_ zX9k+W-T;MuZ<~Qhy(}FGmoXnIRpELXvkQxsJBC0!R5QgKza!;|#a+0T-qzeAjl2p> zx@fC$Y>RTGc+XmNa3s5dPrK5iX~6|1I1Bny(8iIo%Ge3e z)Df3RGD!`d)n5KZNPt$s^s8{vGykM{ys9R~)i zz9L=WvU_tx5=2Un>7`#UWATcGWVdHlw$Dy`55lVwvbz$TfzP%nA&!09!tGwvuVy9#@=7aB-3Jtu)5mu=%^x61AI+q!3rR8KT`mM(m0<-wx(HcdGMm zop!{2;Nq^@q+uP9NSeyi@>Q@v2nJ{&WOkm`Kf|9=C0ewW?{P|4%G?TLB=qBDipnjDg2OdN9R}Fw?e^3T$;43^#vOo+Fde9<*3g%#w(x< ziw5Qcr*B%v!E$zR!mP%8#cOs`g&ZGxhq#nFm7;TTxs&DF>+M$+A((?cN7IffIAMl3 z-_9Q=Q%G(jRl_bp=toLU8fXt9?w6wg=@-W_AYQ`mbY4QsT(2Zeg~6ml5^N zW!v0B?#~l$IqO!gZPMfYIG>PJK^#yhFpb-}^ro&WT)i0=DBfpMbImJUn4|L7o!oQ$ z>Wp#2B>wsYP7cT-$}6LVqeUk@Tx_{GVQ8Gbr_Ntz>9;PIsUahsg6k=axxdV z_Nub^b}S$S65hS(Wwv?YHqbGQHz#i#cl_x=_9e0RX$|yG1=u1d`A$9RDddqM7Vzg{ z;4XULRE%SaB(;Tp?-@S6ywp+4GB8<&FnASQt?nGjD;hBFc$Pvj^{ar|fI%29*EN#z zm2Kplj(}66xV(;{%R*(P-PB0An3bb62EDu9-;VADv363Lpu9 z!_uZQv(%F|XWcN|+zzBvkWCuK(8PCh!Kzn~J=+s%IUPo8KG`M!##pN^dR24WYFZm5 z5hhhXdCoCc<#~LziIn9|4Q5-oED~1z;N%>1^s6D~l2N?uW8D7$p7dWrWwBhNATVv~ z&VIFWD_G%)L|EPVR(M;1BQ(u`PfBC%cE_pU=cYKIq_i}yp}02T(YBC5>)apnnxQ?T zT~4>oFwyj0Fi7>Q>u~YFRfga?`s3EBM%NO;2T2YdLe&pGt(Pd7IC zcwC*)oK`ZAM#^iUO6Aco+2^pT?DO0WiNQ4v>$jV9aqf?HGEelaJ9G&#jnB+^$F*Em zghn07t=?3Oo7Edvr~d$6vb7aQZ{6qS=~}m!O|#1>lfbIzRhTpL^`~LUC83|CK_m`j z9E0mylS?GX0QpF%I7@2aJ#%P$bCVJ5oVqUuwEQs(UggEb>^?Bzz6sX!7vW?8qD!wuRsQ%qG%tk=F zPeD|jw;h@#mg#JA`!|nDb-Tm6rkI_NV}QEB;KIs9XRh-Ofy=QaCZj%DcF!> z3(~H=+pWLZk0bS>F+k|p%XxaSUTO)ZmIN&c&h9Z&$#8-|Htr{{pv7j9Ez6S%?FWNY z_t2Q9doyy~5=fJBb5&NrS-b5}s(OL?RV#f;TN2jtbF_j8>yLW8H71%yGNB--z&}>7fjKe7{TI*0n;)uwe4}AD68sPRN+=p;G6}hX<)WeQPkfE3tluu>Q4f<;x*ho8|*J z_o!hrJUbaP&tFek&Bo}{+22ycazM?z@Tc*rcSNt57T-dru?N%qD@a8Jv}8@l>z{g| zv1U^=CvaXWqYW%!%dVuheq>f2TW4lYJwZIxcotu@1Sj*U_y|1AjiZ6urh)dv(m27+ z7MxXueJnvDi)jpMI47LaTwEo(WQ=;%S!H#9GEtBPRf6qx7>*Qxt%ILYPNhu(&tl8Y z(lQiM0UYA1%M_~#olicMY79f4Fc1#_{b-Kb;z=8D0x`n+pL)ef4l(Fju!eVs6R8}7 z`BOCsL@TjDY<0(a&|8Tifo+*iM-@RXAc}7;d>r=gRnCUumgG@P(!;$}fOr7#Mk;Ai z(ls&6GD_zJa4H$uOvV^N80U=f^{6Fw-XXYBa5z8XS9TIwXi&LZnC;apMnP^zJZ7xe zSj*+&;Y#P$tyxWNZx~Y<5*8(x_w?h^t=wHrEP+&fqoM6lJ#;IVO-9>W`DKxpJA3<6 zWcxWK+~u)=ew9{9?!4AuMlsDm(Z7Cus$6u?hU_|3v}uY&`Cv1QaZt|bEP){z9SI%1 zs#{0{t31oJo}RSJc%p*P#50gj>sL%3+6!fDu^f|(9<^fNBHa*1><)2Jz^dQ7bAj5Y zfEXk#jE?!Kn|9DqX_aGP8vu!%`ig>fXNW0Y6y~kZD!y9W40axso+sMnbI2TuO_HLo zVx-qQNQ9}*dXCj<-Q@?*A2Jb)dJ1oz#X}Suv5fl~kZ)9BZSoK@Ju+&xGqt2xjELq_ zFUnsbao^b0U1Ap+Yli|rK~Rm+iQoc#GuEsrHxQ#slF@V~sp|TxY1U@?Wh}6Q-<3AU zR$lFo7)!Eg-y*%_&d|xo=hAmE;U#+*hdUT9kJ`4MesJ=gBBs zs~?zTHO=;d{yD5@ipu%r`!v9R|T1e5+7fw>66WOI$~-*6Vew>)umL4 zn}SFq9)y~Nmd7TKQ_pTZOR3s;)akllX>I3}hE)V@2caIry?Z^+*z|oqU1dfZOcp9J zxro5e=qt?h?;CheP4Nr1o~dxiN1G`f80P^`KmBU-&-h6$?^N4CY@>pB8Nv0e>h38) z?0kje8=>MK5B(U`zPoVa$Z^if8UZbhnTeQyYvtlXbKCInA^!iuV zIzNFdtaYoMXw4+E-mWBo;gdXk!;I%>1FitC67l!K4SM5RxYaBzAzN7=_ghcQbKRF8 zDbE8OVy-hmCv~CHcxOV>H4g}`jcD&A(jmycn-@&@Zw%d^0nm2i4sx_YQX%>7{E9q0O!++&(|~?9d`BXWx3nW?=~Ec z4@`cv`PnzN=eK+?ztTKMVr{f(50wuMo;!5|(zX0$;Lq*5c{ICue1vd$Ol|;U*1Xrl zx^0((qVqI2WGprVk$|V3J8{~fm&e+cjQ3Mrx7wuk&yk2MsKxg62(dV70I$xA@d$()vM6CQ)>UR7=4?QYC{n_9Quk&q=D zc8~VB&VIGhY5qNi-u+>>Ko@Y~cq8lUTe#g>8MOY%_C?mcb9MfR{HWv)>MMZ%0EA;p zvC+kqgdb*(4kJ}OW0R6OBVfbZ;2R=5573Bk^FD1Ubd($H0YjL8TLa61eRmhf!j6ocf;Qb>h{`vY2p}s ziGcm=U6Vb5?s3$1tmUSGC|MUY4-f4n)3eu6Khs} z9Us~jeHXD(TO!XQ1 zRF=OCd@tf{0C<1IKRJ&aD*{v9M}Ndug7~B2=ZUQRMROjXC|hM#0|PuBeZFDX^{++n zCZsh#2%i$^)9$=>C~|#HKymAiYiAoR4C1WMZ@Td3!%qTP8_P>*?L$ zXM#<67KiauOz{@AEv1XRmhb{ZvV6Pncq%%PUJvn0#rnPdl=?hHyvVRy87#!`>POS+ zYsh{c>l)3*p>w9$z~biLYKXcVl&-AjczP_9Dp)NLFb^yl!bSo|AdZ?0VGwv)S~lFU9_{sdzHbI0pkcAc%X zGn=bv8O^+z1Fq!27KYb_GeD;vTAlO!Sg z&IbgK_D6c={4?XG@hFwFs8|S`02t>hkG<{Rk4|%5Y4P7h@fVG}KM1q)ZHzM^GDJRd ziIcO}=0At7M+X$+vmB~vb9=%1ZJq0#VigSpysEDuPJdeW%?HEZ+cG8KTuBRbBlRBj z;reBkyQXL(`!3ngwi;;32gzavKvC3=oL9VfEj&RLtao$#r)VTM1Ch>0ueVWH)sop1 z+Ik+yo)?2zu}ghTKx`Bl0f8Rlr#^?Ze6{gQ_FV8_(B!_;p=h;%g;NxTU;rH8sU1l5 z;2d@sucx%lY<;K8xR5T^1#|rkZupw|(mg5Wx?v#NTi+jrQf(_Uo-W#>@|#A{d@behd_1NY?xWr#U`inS ztFfCo>EEIC;Lv$; z$IYH_-N)9vlgIx661)N6X(RBSknlbHpp}jyMsN-UjsXMcPI(v{^XUE-@vftJr(9b~ z-fWHz!P_T*3I6~J`G3V9vsa0{MdH)qyP4*A_=5X!gYTB(6TZoa3#0qv7upyn3&fD9o}+geo#ddti3; zHN0MgIW3R1J|F1T8fE%iTp>2&_&5O<`>F;8KDj>luUGLe#P1H-&jq|e%D(||&m3gr zjs?E&+$&yO3>IvR$78E_(@35e z^{aWrMk03y>4V20o-^Au#$NdQO7S!;2AaTJq0dYWqmKP^n)01aTU}FE{>HUJ%zkFa z+$uXZI_I@*_&?$9rTxEqsY!7hR?c$-X`eHI01OD)7pdUqwJFP)SZOob^j#in{{Rk2 zH2DcCvJ!fc$Uft~E9MfKhH~x6^2XuE zt`ELz%{*V>`>z&xvT5ohnTQ}aLI~t@&{V@j#^km&{4?UMF6#AAtE=P97hRw1wvH8uz!?LNZfh%3(+tDyAM?x~obo_EgWuM&N$yN) zT1U^#ec^3s9>Bz|%s%1j4m$k?ewD^+8ce+^PR1aybs~W9`!=YQ;%NMzq7SslO$g$ROoSxoO8x;-la*SUUpmfL-D)C z{w29O7N=<**a9e#5tJ3>etfaPIO7~1co?s)?YuP>p=j4Ke6HYy^*;6Tmb;|bcqYX) zT@nR|KP`Yb;~@SYrFVZ0zB1fvUm+G#f?dx@l( zTwtg;Ir@xru1in&do17aGW$abi+%MZF;DKdJo8(=FV^*aOuFs}bCJeHa-JO2^_Zkx zI%|XFASL+l(_X8SX&+O+VoVn{d|<-dJ0L ztT!Z#y!RLf^X9&-@o$B^9pd|Di&+ECo8%=)1b{*62sPCFKlp8;_+va00ZmOwQ@JhbEsaTSx$Vi3k|0uAaS2+%1X~c zQ@cJU_}0EG@b8FT%fn&hoMFU+AqZph1@|3*{Oj8OA8Iq}eh-K3FtWUZlOQ-ea#WMg zJ^E(8iEj<8vcYja89*C}0G-`GD(3uCr0BjA2^G2hNp_3e*dmCJa? z;*H*urQTfYF%LE~lAJ1T9CRl=GJBfkJ{`A+J|y18*1?j&0W(T5m2Pk_+?<{`AJ(&J zFpWD|oX^6q3Y{;-Cr)P*O(+m;9TXB7iu2DSsq0^I>pBjfY2lG;cAjh-0y1?{oiImw z%+dZ4L8j`5ThSmUWZKxk8*$0O9nXGi)o(PLJ#$VLI=V89Wt28K^dx^uscxB2zdg_Y z(CsWVEo;X%#!#}pI8di{a6j7Q{{Wu#^?$=JhVW=U5?Q=wa|WL171T{ALIyZqa0_RE zI+MWX6|tdse@W10NbT5U4i`N!-#u%A__KR*t(`(}mW6;EpP2Q*ABB7!StjhyoKlUn zJ&J+OGr8y6_MA52H3_+v@6m&9Htx^!3u;s+(T>3}j%psq8)e;zG-QK?Pg?Jfp` zY57r(PQW=WkGe;tdiRMw5W}wcHEgE7Ww_bAC{S3q7n17F zGfZS`xhsQ`bAofzn$5{X$!VdZmKE_*%8)SKi;iMQC9e*5juaG=pXW~sq!&2Vp z_VV1j08DY@xnEUL_qpxqU#0f8ejL8Dce{c)lngRB2b>_Gex_DE76kx( z)c)%FeieMkx^JpKJbncDH{u?vFxM{Ze3coGV-hC-95?Pr&Uori&>H;*)jkbs7hW1> zx{;$}9}SR5J+e=H^Iflk{0`n1*4fl;kpBP<1_K^*$9mH7FOCyMy_ZXrhjKDij}5zw zetc4r>_pmb?D!*1(`~fPTIWew+U8hE48(10gN%`nZ(8bfKMz=2YAt-9c)sS&I-b9t zYoYj~Eyj_59==n`wVRg!ebPrChCh{B(JT{H)BgapA_WAX6+OuHtrAO9D=A!y#M-Zq zbm*Xm!%VV86XIBS4(d)mRwM(A^dx%z?=$om@6$Q2oIF?YKU?r= zad8l44p9}9@G?N@oaY}(=)51|NqlwX+h6Tj@ONXU9P#P+(w5?M`k!X${yfuk_7UmM zBqeeQ>Q~nlYA+lu+|3&k^N##;URkDSvFUb5(kAv^1gEYCVeMQD`iF?W;U)53Arv99 z%%q+&F^uCU6+E`ooo;)+ub{=Q#6~x6A2IENUnO{-;MS|IYP0_U!Zp4!?YD4J#ZY57 z8Q_pOHR`_KH&4>gzLj~RG-OS+EwR7P^(8Anz3^~udxu($B9#28vD zjk2O0%H2w`^c?!uO}jD0JD(HlI>nccE*>o+Oj$ltUMDRpouhFF13rSi)5IEGy!Nb&7a$#>vHnGTDe-GW z@mox(r^V)i!DA4U@~G-a803B*r6s1QrAp6pqxc`9c)R;HOYKlbZVp1YZN=1b72DBs zg+2QFS7WJsOV)Jn6Ikg@07zoEQ!9c??l{^z00HfspI+53fG5B3mw?{WP*(FKD6u1T zC;`hJha)}f#PvJ2zwv}OSFXzv$Q*ILn#vz$N(0j* zck6-pR;mcfQC86W@4EQw;{7f;VAkGAY@JL^8V1-|j~N4kbC3z_NY6Fvp9s7KV{xX* zticl-tw0%NQaU?w0LP|r-+|V=xAupzy7*P2CDxs4Bv~C}X@@9;o_7w!{{RafGsjx# ze`DW?TDGa;y+O5`g_6P>EwF)r+smm@v;n!hlh|XnYiZlLvr*+eZf}Gdwx@J$wFB~; z@}%K$=nZ+gd@%7Yo8nnS@sS0r-?(?%yJk7YI_Egf2c><9r}(|DwUciw8%t+-8TokQ z9eSGK{x^8;KL&VyY4n#^ucuwM@-lAcu(3f4le=PoJ9Ecwm7Vb?!xviitG`W?$@17TxqL8Sc_X)B`qG-Z6ONjj znwFV;ug?{xp&rXABRQFfB!j^iJml3Ie}cXM@UD?}CWRRgC=UK>8CgOM@H+JyzNF%} z^kZRZp<7u`bY-3_hAiB%^{!{bdVh)K)U^wFX7enBtW_B2_eYR75Ho?s2_*a0Z8f7c zgmpeB*F1CMZwPp@8>=W?tY$wjE6D|b#tFb>J-z<`E{Ec0im&`rrCDCYw-AXr!8>9s z-9G90{Q)@k>TB)kym{ayx|c<`h9-_ij7u&6W@xxWo~^VDb>MN+ubzBl@IIHT=<(}b z8MaCO%tXPW-GZa23ZpDe1}j+3T}?SvkDh)r_?qLzKM3vgD_P~Xc!j)W<8up!3$&0_ z@-zH7kPC+6#b2j|wIn@Y6tUxy}yTNsRF z28sA&b;AsfqX&_mwQJ!Fk!fBc`yoOaW4Chx0}u%fxN*SE6(sFq54SD6E#Uh?mRejw zCBO{h1)C@MnDTk`=BoJf!@6#Vpq)ccwnb>r{nZBU(KdmA{ULi0gGlIQEbiOF@ z635{4r&!0Cqlk^t9PT5Lk~#{AJ3BL0?V>&|(7b1?U27&0YRC$fa@pF74|CUX^!oE% zO^1i|9eczNsLOCSI|kk{y8{>=!xhcz{{ZljO=&g#y|xU?xR3ze0LFR$064E5@K47b zOT*gqdLFd_k~@bH#!+zVlYzkd!##bois)+SyFN>wS9q2UXTe&|pQxm?jd z23`+-y(`kLzBp;umhyOSNrpFRVR0m{l5*-t$Obm!oaCJG^skV9AvcNjjZ^zUW|COn z?h*Gwo=W5Ej0)cH55w(GSGkJiquFr$mnQ%y?T=RU=}Jj0%jIiwEkj7u?z}|>8rt~VQ22&pmRD%!`Mj(W(gDdEdj-ZwA6l91p-Cww&!IdG;EiKhU9wKn ziI)o*KQAO;lb$%^)0*tGf7$A5Eny?MwvX)L_qbQ!5y%{K)b#0(!o9Og@m`1F9VR<% zN+6QQAIzWt$0r#X#&PMK)&l%UySOi@=*MI2WdcvT$m&P6WhAb1^6RbbX7rR3nZJTPMl^Ns& z027`$702p&zl!AXNYm`?@og)zs|8|4%>Cn#03c)>W4G5xNo;gka_D_O4z$awt&O?c zkC2SwGR0ybw0Xj_43W8%_9v&cWjmQg>uVnp^;w5mIe#y&B?>ykQFzk)swc#Fb5EYvj(M^Z9Ddv^CmGP!Ne zc^mVRI{}Z=0D9kvyfNWRhJtI-Vx5=(K?%HrlDO}l{lMu}7pbbY=^vl}00w+3<9`!; zLc7r~EuK3|61%6E6-EvG9FF}!UVfGOui!7)^TRxA*S6piKo1|vc;tp(PIx`~b6n?x zd@o{|x`3z(+zvC5Ue3DJ^j3l!SxjoDk;wcFI+i2ZYpKq7=fb)+izU218;w!j#z`lP z^yZzf-VGPRrM$52n9r|0PrYj0GF-HCTsSPp103SGza39Ln;ddTa}(rqoFB%a>7myc zc0PZ5>AYEIaU}6Qvnw!EkP*FdM&a$pxLTk$t7# z-ZIY01bHk6Er2=W`B%+){{WBmyI&Vv>6%nhyl_rLe<3ZiKQ8QXlh3w0kCSW|mkZ2QJS8$H43IRd=K-^QLi z)3xpXAZ8YC{{Sq;0-ipZ&peN6^&LhXS6q!QG_>;2;N*}F4|=IIv@S1QPhs%WX*y#A zXrXb)DgXoNim&k(MYi$p_Iq4hJ-^sz69z`XJajzs&MV10OZ~f|_pb2>Xnw|V9tP3Z9C2TaAF`js?Kj7MBGC0~YdKa6>0)b9DvvRh z$pMH`Kpwd@`$ejYdst%-fx@o*bk9OF-lLOSpJSJ66AR0aVJtpo>5kP->ec+eHZX9# zD(uQ7Q6yt;wrVH3CNC#uan#j8w9jKhJNrolTZ)~hq3$axb&_y)5~@y4JJsndLubp$ z-f}?gN^RtiXi<%$no0C!MHQut+AxWK4_ai3;l6I-iAiTWk8ZS^oGuT{I~q#mwa|U7 zvP8`7&PU2UDH-H{-Ja)zNUY%D*X5zv1MWkE+dTy|n$#CzuRB1SpQ6?!_PalpVu>;; z?2Yo22Y5V_T-1|pm?NlOd-_nK@2H-}UH-2f?j4g(R>+N!D`B*?hW8LMjwM{kKq%J-(*!n1K3WO0nvQl`qNhb)aA(78G2dydu5 z>RNNi`<0Fx-=%aHdo15>dFV4(>2otV2P`U5wus5Tg*#h+A;d0A5n4fh&I@nJCpbO7 z`qYXi@>*71xcjvqor`}p`6Jifw1(vp$qbVyl#FAwRB`*yEPS;D7jDfWx%qmJrCp5( zLo8hT8qRTj29mvqqiCQ~SY@+NNilUfIL}Isc_s74_4$41xP?M_tM^Yhq14jD(_9lU-Z9^r zv?VjhS&jf4RdTBm-*Xo3)T|`kvJwzx!c>;o$O0ZZZ_srXpRm_^ailh z$RrT5=YOSMyNy+R?Clw%%!hFy(xiN!oe<@@$@Z*Omh$3f zX_Sb@Hs`OuALsg1+fpS2dH(>3rH=0EIHp6-%bv&B`&VP7>BdNvdW9IyJ9|}`G!(eF zN#~C$ISfCoZ9^n*p+p~ZrYLJ$2`=QWB!by(*Odc+dm71xX0~RQWxxjmJ?l_jJcko> z9Wz-sOBK=D;O!VAp5lwN%^ZyZZ5J0#09PFVtXcBgN%U@{xm@(hu!jPj!yh8!L~m82qxlyxdJ z23x{7ke_{SLST^~d{hZx39Va%=xAmk2nP9tfKjjtH(mGZ}odsXIz4%0G{ z!20ou!-7*hm_SG!{c7yDGsp}mFjs?`hY={3&AYStK;?e5QDRhfw~eNYlAs1Wilmjb75f=^ zG0b-4p2YK4BYU4HtDF<+de&v!(gObgXI;zXdKoRrV4f(~V|?eaH2}D8Gkj`( zT8U9&1If;PYfcFFIV{0n8?jj@W>QTRUK?oSGTU!Z-`-+QPhP#VSD=O+g_z{ypYf(- z2#d_QE8C?~xwp5yIm;^Gk?&NVwkw*?Q)oJfw+>YItmz}W04=*=6yyx|Khmk&%_rIX zoDdWPn$?bQ$|5U+jw)MelQ(URK@eL-d9Ymd$2C=tvo>Y!rI9~OoW|q%yxtj*FH0DiecUc%I10{WHLRq1KOn=>{AxU*2 zNRr?EV`R`478_I?DbM3o=W!-Da;s^FmKyJw%FMHHnB3wBzemT392t zdF~I+ISMMQU`D=Tf(1&7w=tQzf!2h^qu8c38D>>g7|$dT)83|=i4sORW$#w*Z6Qd~ z;xCku(2N?-c><3&CyvzFqgoSBe+=>9sRBL;J?RKYV@!fG_kHU$O0rL|{Jjop^s^|H zUBP0Q$0q~ws*HM=q|>n^k7)#7X`Ere`FN-4_mf`6QF`^}sufLA<6~wqn&=_0k4{|M z{omK|sY_ckZc-gO)@vJy1^TH$%C%-qsOj_ENe#0S;F3lNBeh%9?p!WG$@i{p?ynTA zQ6@9oR<1f|LY1^P?UwD+_p7x*;MDhGLx;B*BB5q+7S()^2S5F4hFPZ&Z6J*Q08aIq zj-x|nw~3<+9B<OIBF5Q$FR3qU2_)%Luj%vW~rewWFsku!qYB1F6TY zRlD-qTy89&@sUH0mp7*c)U^+j1Ou}H*XvYP(n*}M;|0?@Z5%SejHoK}6i zdD66Ujz5(W-6g(NGxKykaZ*?b6d7=N$TZ`ArF%BnrM4c&IP|N}BqA@}fuE;J#XykB z=BUe7gT$EgGmzZv_omYqBU%pgV7SSYs`ays+) zRI)(|z{)so#-~?UkRcpntyMB4cN`8e*0N?(i+dTx5*Jj)PrXWAS@M9AIII3mt<#BQ zBPw%_hOXSLxs7DEUAZ_uw1P2qFk`%ib=?U(a7U$9c8z-z6lAifR%~Y#QBhG^ zFr<<@^v`PAoGkSpI<<_~DG^=W3CH7F4<_Xn$_d9)+nSE$5ulDJ!7e`YdYWmtme_o% za(Lp2Q&$`nw;@~MXx>b@RT(6YN`&2+ZbWedwwXL@=58Z#JoD2OLPe|j+$cYl5{Gj( z^)!}ehEM<``c>GkCdg7c)K>{`iyIsq@-a_Dk(f%{VzF+_(lSiEp>4(^@5!p~3K#kE z3sk}Y;lgAI0bTNvaVqokD9^yUdHxbu75%_hg)2G=ZGLyBxty+7dZMsAseEn;i zy1kNlHZmQft~v^+?Q&-;mtvoEfu$KO*mbML;RS?>Po+?T%WfuC=smD1MVL(?gbm?- z_Ii7BT0vdvC9Z;*a+z_*p%teUsPaUtqv`2Yk|Nm8&Cg#?rD({^i{&8t(I^zsy_r$U z4tjc4bLtk;+zU1t`uC}>QszIM6L%cdC?SRA7qcMq5F9b<&0#B!Ehl44qGQWXyYJLh zNNwg)a!DP@>sxIlsf*0AZRepl!2N1i86{9=>N?`74rs3yAdCCPrJdIcB%>sBqfb+)F&0JAr^l0~Ml=QTsyVcdg~Ii~!#CLfvi->1FHN+|`RTL&The+N>_X zO96ln6r{SdIlV44vydNX1RjQvm1Z)y*^lW{Gkn1#IVaY$B$CdNg+mB z7om{@7jd~;rfK3;WoX6_j+v@iicCilz)`_8l0zX2&T-#A&XiuGX_F+<#Kt8DH9Mr2 zk$|c5`_)*`gv#VP)b_VBt1=+z&V6aN_B4iugb{6wKzQ}2{G}wT@;eHzaXZLYcL&=& zeQFoE*($`RCAg_fiAmhN=^DtP2GBUDhD_d59mlt9Vy3!|c($p=7o3WPLpL)D*Ma<>U0EdiGG+7(AV`&F8nD#1p0fCMuD~`2r z!w?=wY>+dLdaZKtz;?yR_o*!8c{0kN@r+eNvJ2T*Y*ykp{Nu~7ry0#dXsz~$kdS+49Mh5}{frT|B4mhhj-HhqQoPJ#P8f{VqoZ3uNdx8l>9I#| z3arXWX8bBr=v;0uktDGqMmDg=G)TzKEpm4rzQ(2V3o+|eCXm8Nw_LV!liH?Q52(YY zCh+|V{{Rr{QatUyV*(FzQds%dYqo5HI3!isBZU}(GTo}FwApqu=CxaY-y>&sIHgDP z5UeNe9#8ll{d-imu(Xl>?YeZ$QI)S^vL0bnkmDe70rsZWrc-S_30SMJN&2r!Yaxe>s)c3b z);+BA%_rIsN}TjHq-2u?RAHFsCWkBNjjooYOe|!_ksiqx_>X_Wof>&_EI8cEGyeeB ztjn2QBrJ>fd94Mwx0ED>cFYF{zAF@%x{aBW&B0!Vn$wp?h;Y8AlS?QukVxkpX@ruQ z1asTHT{Ya=>cfO0R1v2G)6i6l6hc88F6ABR@sBDD=jQKA6RWrcao;q^zfvi5+e@|r zPm}}3I*-PmbQ0Y$0pqqR)wxeGqedK_p4FV_Ug?!jE83NU&etimv`&80JfAS_TQTh+ zS{#AgpK8W^Pr)lsTdoUx)oaB?mB(0!w-$Gl6;1?VA0L#$& z1L;xu%JF5!;tvLxvZnLKdBM#wobAG{Up@Gwq^>E&Y=~wrGnbKw9Ze;;aEyz{JcCv@ zmO!&cL1XFuc&h?9q942Z)i6rhGb-#)5F}&}G5FU-X|&nKu`V*XCAc{Q(zE6*xJlR8 z(yW2d$q~a7z%)sNdRUf5x3*t3S99~0^c34xvKBKI1+VbQL_w zYJ`@9+8;2G{0~Z+7}ZLI9R*T`?*WkW_3u{gt><;z<6sAmTD7T8rh}$-U>Q`B4S(@ZV#O_|L=~oN_ zG*Au$AJUm7*yKK1kUdX&cP=jb4~_}0C)`^hduM@KV@@k4o48`Ai+Q5?6#ec^Sc2l~ zCI>r}N9#`ZR|=hrw^2x#ng+m8z#q@nv$rfmeEAt2derVEob3z(4&CY|jj@S%QB!-E z>PiKzs2dx3AQHpedQ!*a$jn@oKr>X{IF)`(;M68Ha$;a(1Y)Wx>~>|yWR7Kc@(Ab$ zw`!>%`!sk%#(5owtw{~6P!YaNusmb>)5wlSG2^F0Lt5%mi)hq>Xr3%Y06m3Po(D)g z#>*8o2#3hbnc6$k8uBJhsKnHSY8j+|Bo1+& zm7LdJbmkW7J9nzSf=IsvlrDNL-&V=c!X*sWG601+wN zr}L=%i;pWk2tUrBFLI#DEWS)aJQDu3N>nc@h5P2OJaWW$xfuRc4YV>zb|q2ruO^aq z9Oq@ifJu#xTr_lNI;oYzS#zcG?hK_9JSUfjzp;G&!-KaEz6iuWAw z!3v0!WDa<&=Xg=@qO3bfEP>Qvg;x2Z48UY}t5ZpnRy_v893$poj0$YG%@nI0zUCxg zI5nqnbQwfV*VdF)rqY|(&HG}?rZ(?Sw)A4+Y*TiOq^LYUlh$E|1^<0N}BdBNkQWnBh)#AEkqHFG_B4URdy z+%o`xbKb3_hBd@MupKELJ@Y#Qj1R)6GBkF`h@i85?`qGM%+@bKvows0#xd5YW(cGg zFUzk(S}l3L5{{q{D+=ln!@&UkYJzrXveQUx$9mT;{8`g&?fV3wD_cO;n-sVQ~Se$OZp1l zsqom;xwSUDBcS-dRn-35I!6tHeb(GWrGe?Q0|VbY)enr{3Vc=LTN`h%U0gu+EM;#a z2YTb~o!oopAEkQ-hkQhqS_<9jFgb!S9QCaE)sHp1YGL>v!E)GZaBDiGD;#@1SO^42N#Tg-aqnKqt$4>t z@VOprMOs1z2VQ#PwRhS*tP zc_Y4h0qb0)owQyIRXXyqEse~)bI{}0{3(7WX^G-b4z8_e>nzIawHSegC!P;e>+PIW z@~*;B>(GM#0L4c4!gE|s-b4}&o@P(Vdj7cQ{436U2dn*}_4knG?T3~|0N>N8>5*OL zou}FBeieTY#2CD(vPAhwQb#3ok&)WC-wSB>KMy=mntrzmm}bJ;l0)n#`^0>zaqI1l zqLoS6SXRC6WBft!{-LC6tDxASNf4;SgoN5TAy{`H;2wgzy;H%{`08sbyNRWS)gmDI zewrn(yr;#UKGD26rd+a03Py~c zTJ!*nU=MFf71}FZ(Zy-{SBHEDb2r%_ji!~qbj|^2)ZlDVPXn*Ld*#22MZSsV+9q&= zDV%55n)qwsrippt4O&fQ?#?M|-%FrOPUHgthE`0D zNXKE)uE}2HHqR;e!{c2qRe0pmVrXU#USPl-;0$Bj4{ERQi{Z|t@do9!MK2@@KsX>3 zBy=GA3hVXXhgRCv!bqoX?ssrDf_WgGG6x`gSJpoWbWa6%D@R=?!|Z&+gFDE`06l01f1j6zLYw=TD}qm!w!I+e!N%A zo)tH`UYi_Oxsiv;3iWKB2|m^9eiYYqOKblCvRq1{c}Cy~!1;QQO#OQH%_%2gwssyd zxzy}5O}29EoPFGkjPxBj@7Rj@c=#{G`mXskyMr&7a_YP($>)mtOT?PRtL|3}%ADt} z52)+Xyr;zeD7mrIqKi&eW>TcH54;C#gPPBqp)qOcbJucq2 z$2(zvp-E*Lktm6tK00m2PI?3B-_p8ogclL&ULF_n0*=S#&vW!WJ*&`l8T==Aa=KTD zh}z)bw@=6XYU4JHX05UK+u@xzT=6f&qor#W?H--9;f#0(XdIUH$v(N`rF|*mNOa!@ zcy2MJF<7EskyLe%ebd0sduRFA+xnM>{10Vo{gt6v!m!HzVJHX6eN+3O^T6ZUysP3j z!M!J3w2Jv87Lq~tr6YDCA2Ve#GyYFF#c3(qa$_dl&(7bqX|q{fYL|=tpCbkg&4vVY z+vq)gdUUUE{h0ON3hG+!t7)s-C-$YxAym2pmIs$cCz4c=kH;KlyF2fOUk-1y=@R1J zIc7)6m4Q-7>(RP?HRHbrCbrPNBMW;7ls($KaWjCUWlXZ)^>!bBvLJkLT-9k&S1ikCuE9 zt?L^0tjQBFw3%2oMt5g8B>s6AuU3!1b|~WB({LFKcOS!!_^+Q+#ySs$A{P2IqG^nt zTN9YTZP>w6&~cHDJ?hT2uK1r#NAW^kl`H^vjf#ODau?iZwQVRj8zE7rwa=}*5#WKM z>SbncG7ZL4wYL2IFnzoJl^?{NR!t|#TNuMD%&6l8g#`L!WS)cE*UbJJ{h_rOH1xWa z)#hWdOx!6M9H?GN?Vsmf<9N@nL2Is~`H4AJXr)$7-1C(qqSNIT?5OIcqvI-AdV$wHE9T!2_>aRHJ?)*IzamHH z6Xot;2RstqiU}ERgS~o%kHlXAF^)Y`P=!E5C|I4lUA8G)WSp=gIP855a@42qXje0} z&zvs)Ao%A~)L~6M9#r3wtff#sdth|*IrOh{(si9?_rvmBYjQHqj!~l^^Z;Ov*z3?@ zx=$Bt-W<_1d37y6VT>?oFmZwRcK~|*2VQH#G%t%9My|8t4yZ^hKJEuYj=YY?y(vcM zk5ixcnH{&<;na{9aG-$0AZ~%?JgsQKs#hC3~mP}X$J&zY*C(8Nyh_l|$Mr<`$AruIh4+@&3N!?sp>Gum4$k}Q}TF}s}g1F-b21HxYoH0f{K zQl7|K+#~-03lMNI=yA>~uD0=Zr+%MjFglWZ zel?SW=wmqAS|12}Lb>s7fQhf%29+L7vNEp17=lL~GJ6g_^%@$1#poC_#=vkO&8<7&ttN;k;k)=fnD6g+=sM zO9KFeGczd|>ewfebI7i^w6tLcpTv77fxaNit@)9pd*j>`XQETx-p!Dbw8=O>?U=U(Nm_zF#HO%iFhCK-t25s}|G z>DQ%8TG7O3_J+Hwa02)E% zzPA$D-7Ui+Tkz+~o^f zpYm$=!~X!-!^GMLiIYU>o1tZ8DlY$0$rjy~VE5o`S z)uDeaE+uJWLB`TlDIE3A&~yG3@gI%trnm7_lj*)>Zvzt$CzQu^Zs*sv5ssxwF6Zi& zwWV2V+6bAkA`GuwZ6o4bsYy<)HIzsAr!WAl!xU3RR%c6a(i)IFM~W=;%!^O z#bKIBOAnarE0f#~#1p|I`c^-Neje(&rnzzAO>mGd)tX)S#7)3N7(9$|o`d=C2-(=u z9%jCe@mluc@@LhFbe%@X%78-*?&r6^@~*#F@q9W~pZ%ey1bdCU{I)sVrx`zh?_MY4 zEdiSQ`#(jt@@~Q2tfZ&}baHcm+2{^GTIe+I3hLfD(CsGFL9)1DLl$0S^2uD0*c@bI zuTjMk)X&-LbClNpF5O*SxwfjzLD^U#|tkJ`MNco#A!MxB^v7N>Uy7tE-a(o zJdwOG#^Zs|6Wi9YwzeTOO?TppTWyx{o?De9V`;CHek*vl#Ig8@U0T}8w)Wr!byj7V zz6&!DFrjgU9G?C7tKn;J5a>5)2CZ=K8$L*8XTZk*G3)iOskB{N!g6U7L#)XJep-fP zCnSId2nUjR;{)D?t#c;rsq;sNz6JOr;--?C_l#g^#HqS949KEP;F3Gz1EKVMrp2dPHpGNr?HoytnA}NFql^+s>r+SKO&-U?!E{KxxKJM|ATiG;2kLwC>s*G3 z@!EUYBC)#CuI!5B$>y|dcpU8raru$?(Hd&SDe8}|bbBbGf#b9TXdLiA9R3x{TxlA7 z_fAOTt_KzJF1Pzd%Vh4FUSoL<1bs7*3E8h)+4o77#w<6!31G0~T}_Z<)AUbCV2_V&pk zzjgB3Md*KokwxsAM$(dcBkjFn`fWDJwHqtN{ zEYC61GeHn=heYj)Rh5xA8vo0DLbNRwy$&87vgjp z%08n22_a4gJTMsg_5OA6zlg82{R76b_=8amCHr7T3$rfL-2f*FK7+5+*VB4jdVZR( zc%UR`cn1dn_CB=@=Y%{N<1KYONo@)nh*T@_!Rg5djPXg{+7gki;Om=T7-&N3zf$;wT!`~RS!L4dCyimrQ1Zjhp{`MJ9PIHsj z7#-`;d_(YOMDUG~T@xkbaNEyZ@ty|*pvP+TDSST-_V`)9=dC~AH;)TfW^ zGrWR4x82IJ_YIExa7AUy(1_F2`pU<_`cH}4El%wfQGuuTQ1|l{p2^`}f^v_)9BZ~4L5Bz4E!l`4T%Nm<@QL%RwBaU{d$;M89m3=n% z33G0;Tz$zDGM?Owf-~(-PR&G@7L|_#)HF+}^hLJ6oXK#|biJAjuk$ zw;Yl^KBu*OcViB#W2#9Op%{fz=2N>Po|ry^rFI&}#NQTO*+Zw;+lDd$xyd1vdf@Sz z@(+mDy1MBm=5{fxV{_x2jPu8OtLtLax-+iRykmKP;#e&W$PvdT$4}wNJw`B2NbB5m z>tCh57VyQTu9+0DFqq32c6GqO$2@i7zXrSqsp~!<@k_3o1mZZG21N(=ZJYwx?0Ms! zo`SzsG|z|{g|>rjrL2R@b;3qY9hx-D5uSJeliT#C%dW(zE1qrfXI<1ZpB2eAl1s-S z!6!W6;2d`2wQ;&njN-qzRKKzYLf9;O4#a!bwwWaUE!L*iuia&e7m_u=A&@c7)&vfC z9{&K-YgD$;Z6=GzAxOwzM*=#|oQ=cRdDr*JxB4349yky)CT#Kr)$E zQaE5xhF4L@EUW<;1ZTB*y|tIZF9^?ZHlJ$^wAa#!W-z7?n4@TBE6z`RaC_IyE&EgJ z8gy2=Hn*9jo>fI+aj_Wf`B$g|zibTCZoE^XTKJmNQo3RQ+*_ZN9Pyv?{{YshBS@xw z%dEj=;ms!Q;?CSW(nQh{7ja?~?HqIMfnSUt9Q;|Xc=uP9>c&%UfX1t_n3Tx*uumNR zS@*BoO%GhrZ}cd2yII7M#zH)iki}Sa+v-PSUnP8T_*H@lo`uW1Mp2nN@-VVK)J zRmb$t=}{MbLiR_`>#q2bHG`>Tl2^=uz{cV2>^&>ykBDCye0Lv=ZZw-VNF%vL`#UnW z;5)GmpO}zFco^;L`gN>mx;p9K+g5f<8JR?cDEq8H&d@kf>^S^u;?EcSK8wbFDP3M` zZIVE6(_;jLJPhNVr?+a=+B%mQuBUtOCqwZUjPC8U?NQn0m?<-|kc-AxFdT7@<;8x2 z-TXGN)BH0opA^chz&D({?gOC5ZsYZ@hWrt#$>9eUdUWO-pS$axr~d%2UqN1YqglN0 z(T3XcNT-*DXvpWk&A1Q%@88p!&ZAcv-1y7m2g7Y%O>K403;C0@F0scJK2X^u*n`53 zI`{hGzN+{cb^ibf7le~Zz1t1Vs^No?lgZpv_W`ha+IE|zsPffIgS4p`KdpJK zpMmUeb;Q(FNDf1JW3vok`wls(-w?H}TSC$n?$rZGp+Mh~Hy#fo{A;85O?#inQQF8k+9+K3Ur+GIhtp13OwwVP%-AD#bF}&oPJhO@?}nZ>*W1PE zE}3q(_7ld-8ZH;+9Usgf;dAU6epsx@wDTddsB93-a4xtPsMAyt8D>SS%e#FlegwvfJZnd7|+)g!2B@q z)`MxTNvz8dx4VoH7$A%W027nIJ+OHo*RbDwOYo)KvFP_ZW)msqKny${6^nO0M;P}N z@h`_8iXI{GSHxDi@bqf-w=lp*lO|Q$1ZG7FaO%YE1E~7ZB+@cb*OdCh$Nn7f=Chzn zsrZUf1*(!H0gATOJYbGaPhrXaZSX#gpxGZMO?95$7=uT+i83?#@rur~y|?ksfgQ|w zc-;o{b=pD4KQCdLzo2M|;hip4(PCpE;{fD<4?R!few8-9! zSqUU=Uf>_+QG4uMZqIt~f5!{Y5FfJmghw35GAkg)c8nb4;Ck_0J;mmg@jB6Eg5oeO zWeVz~F&&6y&PGRmnXetv{smg=`aDoEk#1!rc1m`|vpj~t+%h_Q`*U3ellwb(r{R{F zCbgsL4J1*s2_pc9F%y;P!)*Fzr@d7;#_3#qsp%GdXYkL$4`#3X{{WFs0G@C;tv?g^ zmrKxZlTDIUGEUnR5;LEF>0dv1TjHB&TjSJjasrS?@e%Ah`{KM`;?IpQ^(1Xx)H1}p zdBf)0lZD1dQ~rHwWl7x9oF%dJ-ml|pi%b6iCfZDdY-7I|$j_ng-|1e5s6DriJSFx$ zMZ|2%8a7|NrA~eN^!gKDBX}O)TbIHR>pmk*kx3t#OA(JOjD{qW)N*t9*P>ha`s>4b z8*0%e`&iMRaR)mWIbq+9)ioe=LD@5BLGUDg9@HkC?iyJn!j&T*DEf8hHP^%7ttsx` zRJM&{X^8U}j27B33H3PRn&UhJ;->KsYu!daE#(>6o>U&6kGIyn20aVJdga><0_HY} zN~;U)AwS7Amf+Ep0*$Q13Ba$(b(EI@E2xEZpdKw!}o4 z!?F2U8FZ zmo!jE<=ixEs>{j4{G{OfepT%nr;MUf(ZP_}HX*y?K1*~fA=Bx84wc~mQ&c_bG6hHLkZc5th^18^K>zZpIa#jQv2TSmCDm;DK6 zUpY4a01!Dw1Pt-W>HyC}+x9SdlG`k-4=24$3}tW!tx}K)u^p71K{*)59jdkb>W~IG-C25d%4!gf%mg*5j|FHsmbla`(r#wPasJ z^Ej0c%jy0#q^!}BvkZYumLnsCiEtaeW3w$83K})TFD9lDnAq++K^#?yV>YtvCw40e zN#zsaa{Tg7YH8ncqDV~5l#i+4AMvWrvMB44qwCVNRbp|HF`rt^lGKdH5ypGcaaYh& z(3%#J6a(_^IL$*e^V{wbfJo|UEwVt#6Xflu>?NCjZ{ zUO?~dP)BU;<%q)n00{M~rqzkV;~4w2o}n(qMiJb8{YF$8zKI6UHwPees?x;JsK)^D z#yF=4Br%BzBz7l)YT&HQ+^kZ#kY{k`9mP?e?czYHxGmPLG@ePpq=RQ2-6@BTCXB3=p`y+E7;X&u`;tO?c2~)MKa^LUr?6a7$W`u z0BVtCxQfL}ug}o>eQKD~Bj1hC0F+&8R?P6Dy&n0 z<|oE_)K^zNV~9{=p$D<1-(f>VV{L;-pf3P*te2BBY;Fd6(1z%eyR-c&rNc_#9FLZ% zOSoOw-#3uO0bGCw>r~>tx0D2lRQmDFVwI4^yBnDG8U1TH?QSf0+(DebPZ;usfsrt-I#eTD)Q)4CFw93@N8&1>5ye>Bm-{>b2s_75{=HH&qN@Ph zj+K;_rPupHeDH7pKbfgySY=Srji>8Lp}I4I03-_5j!dai zPa_!~o|QD>?{c9AY{=07iU%v-vHH|E7r+lH9N>NGpi=EfB&b2}llfKWidKz8Si$N~ zUu=D9cup+x}w?_AWvCbx{T9QHMCDN|t< z%Kk;fzv_B{nu=xllrbs^1pXDLA-RL+gyYkWYMlQ7XtcKjW%69bQ;qv4X_dT z)bt~toaBhsR^)8~=PTwtjD>rHJ^G$fun3Z6%Bl&ni|(MVq*iW7iG7^)KN z5iBqbsy`A)>5^(`wFS0_!?cy@pF>n5hagFl^fcA(5LY#=wDUYfgR}}&ffhr_C^{d0 z^+tQkgCCIt1q6O4{{XE;pqbmsX5Ef)+Nw)kML4^cW%5uFpU$eoJXb7jL!H28s@*_$ za33s;k4n!MR(3KNA>(gBQOM}g6C)JC=R8$rOL-9)N6puo z&7w8Fh1-or7l(5K2=%EgVvgz%*%<3w?d(!L&)Lgh*5;pUC9EJ94u8*TsG7noSv0>c zUp7o_?d?)|5Xg3g&taOss5>eN81ask%|mq|zF8RHFF-%7J6VxYS?Frs#I~D!q{q0X zL3upInaKmUy*BbjGI_H;;KL+fVSTBfE24-Lmg`N*%r4Q+&v7*O&l^dMatCVM(xsUg zrQpgD+mppoO%`JemnuGWIp>c2;+kh@RXn!c$0ME%B~;Ejn@@EFi~FSH9x+I>Jc;Hw zBL^5YR@!HiFSLj2lU2XAL@dhLk&RmJi(6`6k~t=2c+;WhG`EsnS!O7RQ2zjU4o9_9 zwVLAcLmKYR(nddCK9yafkq*h?~JJ9#p8o@7|UP)yXb6{&kx(ktdZH zBp=SDi(n!-!Cq=z?rklNHGgj2_jb_VGs$k~sF~xU9uu*5)!d z{Mq_qsY6{#OHD?Hc$B&>eaXk?Q3y#^bn1EhYDo!=cV~mqYVyJ!-_29Ez9}~pIj+O( z5JsXo8wC3CRpx!un`>eu2d*h25zIEI?ofd~r#;>?oBl?yjxUM}xAQ%RcQP#5JzBxBaJQq)d8#IkAT1I$i`ocewhtaVtS zklNtmBcS6Zn>1}?%3}W+GW8^A~jul{ez2j zAo_b&m7SwqlRIF6*!t5^T@HCl&dkoWhUd#BW)iyR1dJSdfBNcaEtW=B$ILmcSfaR& zW{7;mjoCf@&(ffnn5M};IXTGfPn80bwTgQN0g*5i@J(o>kE2r1xqEo(V;8%LlcwMv&xO$W=1{gpxwpn$H6+Au*!RMW7CemT88&mg4nm3KwnZv zunr1y=pGJbUmD!}dQ9d;w~f`i8p%toQHp7*IN>F|IM@j-Y=I zK_ih~zD1JP%rQ~JP~Dt3{A!~cpLTpq{j7c%_zPCLw7=JEqn^!z&unF1v@Tb6Je=<6 zM{M)ZiutI2!A`yrIz@A>MR^oyIEdS%JLHf*-H`}wp;!2noSxPE()=gzmydoqNj3a0 zE~BWK+|PF_hq!q_5;2jPi;_VkF$5eDn){DK_)X%=dp6WH?Jn#=XyOw)M9UD64D8-O z1&G1G=N0_{hw!5VMMvAV25PcgzTq;a z?0F2&9c*O)l550H!>hxgV_wa8(N6{V9?;L@eA>ZH2;0FuRsP*S0Eo zt{p5>mC^GOG45&{bWXoo){?~_UoZj~nu>W0aQSKnG^Z|vsP-$wu_VEtJdT5)_pKLO zYgmrMx>ozg*YNH1tV>9X-iV($JcC^2ORu;KAITbu? zNb*yG-mco(6m9n)bI8v$a)fSEG8y9zI-Z9W3WF5?0KHw<=RTFMb>)e75=L?wp!1U6 z+^kA7+rJfM$#p2)U+l;v@z7HmNhK&F95KrePo*~H1nIbepHevds&sVwGF?IQlj++Z z)|^$Dj;mHgEQz`kDmGAc?V8oM21I3*vc%__v28ogZX_A>!+O(JH)aH(0G_or*Fnnf zV;X3fN^#P+>=r9)X52DOX3piC$|z6+*RMXcWn-RLb}M7IG(~DOwA8lp2?A{Haa5&> zPcc_^3Y_(&jT!>5XMxa)SCe!8@L-PhO{-WhWvI)DWs#2jdem@2vY~kf6?q?p0^{e{ z#DZ!G=L~@q5;KmNrDSPM6DHC(4n}y*TZ%32U55j=tx#CvVf(YRuQ>OqVkM(7u1-4h zPnFoTi?11IeAqCUIP2b^yq95FA0^KX?V73;Lg$`+dXKFjlgS-2NYDQOu9OiGy~kQh z1Z>E>?dF{9F31vafal-wsuNu|+D6sw)Kr#^&ZLpeC%uq8?riyfTBwhK?^T*|j=|GB z`g4z^S9zvqRwL!L{r)SgSRXWf8#KD7_pVkDf9 z+2a(lY6~7!S8)TJQ>PL0CAljrNfSnc1P-+VLxmDa)OVsA@X?*)X*>Z>dzD!5$%@IV zI|)9cSI%v*&fAFSdsJRumKhvvao()kqC9?LjFHI{PO?h>05Y6(2hy%LMaADkItF6- za7g^>&{jXbZk+%Xf6DSBC3qlYR53A-;QY_m>53%DYR^&<-)BBz4t?sf+?JKtuGa2( z=AV4hNSjdMl+|XGW6W%E=|N0<(KARKNKQvepX~b=a*zPxnFZ8SDN-f)7gGXL5=Wvc1k}*7{|zjJ?W-U^uGR5dD_iDQpsX6r`1| z!CpF*CXs_|=rhea86u5On7Kc~eJXw(mT~`;~@49YLzE<(WLm4&&`kh5pPKlYn`^6)cqO&3ic^j0m6SAb%G$%f@M? zQ44KQc?YFelHVjuTbJ$WQ$+)S#s26R9<(_39NVzvjx<8C5J~5!O3e+IWzS#K`qrYX zQJvj*#w#lFM2~rmcK|rW796C_6#Gn)DxmpSf_KqEdeYijO!N8E5;)+0DwfenBX$NbN3BmR?4L7r zC%0-`y~ku`Jd;N&6eN&xeT6UD$$jiP@k;K`IYGwn^UX&zQ^6o~!Hs$PQ3RP$fq1Ba zg2Kk&*+$}O<4n?FV;m9mtre5dl^%vmF^x>KpZ>9>n&3P^ zha`3tuNtE(B!CtjjYBQ4w2fm$KQm;vfByhgPcFI=li8FSX=aKgR3itWJl5Tq+&sIy zeLs~@OGzh{OarG}pGvq=RdXiYz;Vq>zf(vnYG1gG*DVPioSM!t1#Fhuaml2+adnR~ za*X7arblZMs+29y-N~zQZCM$+mC@vh@HzLXr@ER%>5{z#EJ|RUnT9~)nrr!DLnzKG zHyd>bt!zloD!GjMb5$p}5pj*pjtQ$zItKYhay!(PkVzwhaJW;@*3g}eIR@K8(^`F^ zULT;%Lc(;9Y#=f1?OT_Ouv?3G$6lY~Sg&t(3a=Oyl;_on(|aPs(!neNHyq;x5zy5= zu|*MzHOmg1b5gP#DuKxBR#ic{%HVAr)!kb{TGGZ_HRY@ZY%>wnd*js6zKAo5D_oYPBE;IE+Q;&~8EhvsheBHQg!lN{~mHEl{lzq<#D z$h)~Q$YpGnJrsI>T59Q#v}M1w9QhF`3I<8VRh5u8lY(~~XRZY-cd4C$NGH8Dq}WVh zal58ya_DKu*2Q*LSKGJnslLk5rddk!(Dkcv$0E+W;lHS>_qPFt=ljR<%|(pSoUIVg z1RP{jcke&E83T{4O1ysXimw#wB)DL4>M5sYDQpf|0WmH@;{&}v`$A&EJQ1F`=}hwi zNxlB(YR#JK$}FJd_Tq;kn=ITpClYa!TGo#prM}h~J#+0`u+-#2v0b5T^k6uxxf^PN zqqb_3R~F>jmFjt7PKvyqJ5%A7-bh5LkO=-N%4dq_0$>RAHEwVUtZ|GW1Dcs{p;3w% zcM>d!$k@+XWRRs8uUPm({lDsQ2qiFf-l*J`tU?%vg%ac;kP z&jO{BP;>jDHshhHhs=9{8yqilRGE}gxUp_&feVcE%{uYc)=wymmh39}uhvL9oPluHBpVUGHqPY zc#1&79D&9?swnrgc^RtBbk`0QK~x<*>q_6ra@c-A#yf*oG$x8^DGbp_3X#&Fc9^%8 zx#qQHRFzvlcyuDEmGUDkDcgW~sC|T&RyH_r330#`3D~H}LBnyMOw`u*D(UhtDr%$6 zI?8zYDmjuG657PT3Ag13YGv&4WmZK3ns26p0}>Ct>rg1%QRNwB?^Vva3R1AhWN1S( zAtR`*7LS#6Cu0wo9>%NO>JfagM;^>|IHX&TmvQAsLs?v0>e`Ps@Y=CfQ@G$~{{XL5 zn@^cv?LWYJRhfzx62-yvHEhcAKR@wnjS&WLC1< zxJeK0$A3zEtj27!<&vBncdM|$2uwdUg>fC-qnROK@sY-I2tEG*3YyMKm53Pu%W`QU z!(D-u;gqaI?aywU)U9svkj1`H=~8(TiJo_3u;Xgup#HTE`?%-xW5H3>A4<0kG&D-g zisIf014P+ROn)k+;uMb8M|74=n^D-YJqoEmPSva#XL8D?3&A|~tRERc7yKi$O(<3 zgIz2?4`9A@zSP&wkTA*zfPTiQ2B9uJ&=sDFWU>659`Wx+2+u9?>#F&T51_0yK{{WsViG$)C+O&r1W4&TK88i1t z>w#J}_Sg4XP>)f4!btYG2O|V>1~H#wTq9_@W{-3=7l0UJ1wx)qJ^kvF=*--;vE{xn z@h^@(B;LSuyF^P{ISghuY(AHTWPvdS!#DN`SGChFhO1Zfbo&< zUN7RGh$c(PG|e0|7Rx5$pkUy3&vB7l9p8`duOpJ${z8iz5UK#fE^;{-&1m)yXZbZs)rOd%j*$fE^_89evtp1+lKdX}4L)~6*wWjls451>BY)V6mBCXdcP0Qd{U z)_Q1?*4U-HC^9-Z2P}O$k6QY7!2bXXtgJ!TFRmo>jsh;>A_XIoHx0nQ85zLG73s-r zbl6rFiAn*M0027h1!`JZJ^U*y3*|2FxOmAOKMIF-I+~m(j(j5wUKf{FOOGtVyM$|w zdB^9^`8A#3Jr_`iOI=rTxNbbP8El?DWBS#9jQ4P9c9B~=(fy>U*%@px9q>DVanEem zW$+?LyU-284>m+n(&T@uRyYG0J#cxWm#ZE zW~^LYAhfz$s2!k+7nQuQS;osXt--sjoI^3}_ z41n7QaskTo>-Fh_T1r|G%VW2()%44S7B=tZFc@NgsjQ3rW5Jf%t+t7(+(!)Za~mXV!)vnT1cXs3e6NRNQ) zBe~3=f)3o{9;2t>)7y@pJhBmXaW8co43Fe158)5QU3xeR-u31h2Z3~5I_6k3xFe1q^<_qR+uWSw zpIp~(ed0|^#Xb&Yvl81#nM^K3hhufe-WeT_KHaN}_;;sxvcprjvel8E2MhCOh|YNf zJf06;YH7(PD7Db^{{RR0LE*TX6l8|kzUnAB=dLk~SCf2a@Xgf_-bozB~A9SJpf@*19^GB}Q3Q2H%?;G35UM3X*+u zN;l@Xp(k_7kHq${(f-A2J8pQ{CIp2iJYbR6KS5b`z9yGQ@MERHkeh*@yh-a@H3KK!18zANe<2>c?m(R4@AykY*73loOu266!^ zdBN$9J9E~iaY^WDdp%Epd@*n0-x+Ja*qT~gJfXrXDi>IooM&%RI&}BXsQn!HZ}8_` z@Xno|7N0h08z>wc#-MEoHyrjY`2IEN9un~9hI}TUY13l?#|j4>JLjo5^{u(DUs}5o zONEXRxBz%RTFP>5*qvJ#nlFcZJipp7CfOwUPA~!i$vE}RaDFk?EpA;F%1xQ>t%kw$ z_p9C~hUZ$+FLZM6``DZ$h&nMD2adr0mGZ`srg-r9km)O9b9X*LFB0yF6!+cJjCAYM zwQGBqC|y||wecfJy^F!WW7BR;pPH;A*c6sy-HGXg&V72<&fW~Q)g!$A#WOX)yUl@rC~Yio81?m*I^*dyArPmlNebGHh3-1smFe6kNBaY#o|pu zHoci*j@DL2M$R2`>z{50Iv%6HwR{w|)Zp-P%i=TUUfeiRk)7(iV{mK@z~p3sf%qEm zPY`K3)tAJ(jVD^Pa{;(zMorG0*&K1mC%-^=H8GRsX_-nkc00Wy>q+poik7HK838N2 zjm!sO(}f2Ztt~&|Q|XtH+1tnVgEE4wPIl+97$ZDpw$s3ux}}-7)}jVB`J>;Af<1jJ zvG`Nr$b2)a%Wlp*i5L~!qbSFWZt4O4l~RtRxm!b|@D8JQsOuv3V8vI49Y*Hh41H>! z$G;n0_%a{t%UM-*DHNEMP_Sk1yyvH5_*cK!czZz8jQ4tMVi_dCk>fZ7j)daAXZXjV zTi;HXaP4M`kDL3fdBN}V8pcY@RO5D!C9u**#GNV$brL?&g)#-f2uRBgr@yUw?vL>9 z$4b(KFlQr$&qMj%qP8R|WTaa}KmJ}AYhUP%V>p?Mp+F#iB% zw7NCFaeQMJ_FJSnuu&R=&=OA>?ObM&;NJsyrtj^Vi#R9lY#;?vIa9&OKHt*4GgOYp z#c3v=c_3*Q679$g7y01y%~bH-hoac(DHJ5cip9QV$qW6{@99En`jIxy+eXkdj|b>> zmKszn_V&AxUHQO~i;#H6Hy%GK`Rn6`w0u3{4L@5(nk!Kg3=g^HJ7_-Oq+Gy4d?2n4$_@@oFvnBc}lXoh$#J%4GXwR@6E9>n$R=m>m{r5;iV<#N> zd}pnE!SKt#z5ww><~1d2n5B@j5yFl><_P3xwg(mVXN@$;^zRQ(KAQ%@vEfE>jBqjS z>}zT7V3kb|Ce?Kh68N)Qw4cKBDiz3fEwB;ok<)>|=Q!=trPaJ=@fSeS-ojgkpUaJh zMGg-nFd%b|;DeFHaeoi=jea}%W&_Jj!GaJ5)7u?!^cD17pNI6@JA1ubSdK|$xyW$r z*&Bw^BOk&D^zY47Y+~e^)WY~9@q<)rc{eVG#xvatd(17MNQ-|VBguO{)_7ZJ=n zIj7z?n!rXb6st%JbPPLSob#O4ug0$j={{oFczy=_h*0N z4KDg?yJ!;PO~KpGbDljqlaKzjUol?ISo-tAFx=_-I$L;(Up82mGs%sp><1-Rk~5Bg z)}^KY0E2F0`)-j0VPuena=9h2M&MXwbI7j{pT%1L0Ex80Wv9roOjqV)-~*1C8OJ}3 zc8ML1$TmX5(Y=h_2RvQ! zq#&0lgL|Li$5YhxHTkbAz0Z`VRWs!e0DLC6UlB*A$&+rzim(i4@}pZdpcGBxHe{X9B)l@PESg@Yb_$s$R+@xJKXs!uH^vdVMOJcF>Mz ztFiRIgZ>+6S{8u}I(%`(9BaWv3alHs#sNN_+*g!*Mb(?bmeWYlnM8kd_0Oe!5v%yy zL(se+F64;LU{z;G$Wy@|HdufF>PCBUU!6Y}z9{M5DAuE0DcKc%Wl(rwp1B7dJ66zl zMv$h`_m6(?kBhW#5$ItgeB7&qD0s>3fuH{XReD~5rN^a3F^W@}@J@e+>0bwULifch zbsg4*uGZzsU@0XJQ^#*yn)=??#df+)f<>xjC1uIp4{oPDKROcB&Z4uit2UjZ+3N>T zzJD>0mK(btO7yKG;&+EM%O<;##7Q19TMLhW&x-k{#TtF?xfs8)l;a1#Y<45sxeY7B zTAjt4Y3sg5lwnSIA-(>+YNFNbK4g!vd`IK0AL0dq+i1?kLhPB8f-(HYh3EODD2rcBe*9lW8+K~WwILFJ_oDO{lJ&k&|hWuj{{jb{J z_hMY|Pb=s+%|1q*%+tQdgKJ(6)<=tc*;u~!ELlM-$tSNq`S-7;JU#Hk&eFxz-L`S} zcMeGHUYX$!4)}jpiDi%(9T#xgK2ibaKjB(FCh?4#Y~sSs5b2BnyaDN0)R$vOyFE{Z z{xAG7mK|CT5~MLmEfB_lj5>xVryqynYoF45SK=*WKo*xX?3f!=o_THuc~NyKGX4^Twa>pHBFFrJKtg z!Zam|J_&DZ0h8!Bu5Qob9-BXiM9Zg(`R&pAYbE^lG-EZdtVNCjrMAF{I|M!z_dZg8q|$UV8P zXW_?({w-;mr=8-dQ4%-HEUXO58}B2KyH4In!99j?UuO7!PM=SeQbi4ek?rqO_}9bs z*Sc#&z(wYa7hW5mdd;_Enxy5kIXN$))GgB9+?T+?1CySdR`s`pC%29%?&2ZA3^#Sh z;aOh}JUMOQkbLR9_e$ZQYNtDzBhJio;{j-7LD9+M24+vygwEzCB^6{STgPC3i+Mt+=EiF`@;$E#>^ z{{Ud=cB=krlG01K^f+bmz!~HCv-ojeP=3w+AJug|A5w!*mw%Yawm0YG+CyU_x%4>v z>gS680B891Zxbe{tFT6Q?f?QYj)y;(=lW2c*_5Si56y20_(tDQ*G{LW#pPYj*=a!G z19HJfL7u+9rGBY=Ezxw{J3zG3Zhmn>?Q?N5*I42n(cdY6r%8agkyQk?| zEOv2=G8}RV<2?4SjJ_#a!{P6VvfM}mrR%G}iII?qo3|d^^X@)|yYJcgz9n7w8TG## zh{WaGv`_=KAUG-2w{+i}pS_Hb1!Me2pHJ3x2qBU!?D%zJGDbRJ_UqE3GP1Djbyj{N z(sf-u;CR$Svtd@}aK~|8Pvck@zO;NdMv=xrRcVoPaHVMXk zNdC3ych`Oy(>ygKy5-DqL{mGNfIa$WsqM#lr#t9q(?21!pACFU)IK6xc#}(MZo!;I z9Bz0>pCf6{8%B6NjtMpP)vmRycy-2|;wYX8GqfvVfX4)k91-p~uG_*<_VRq*qzcUd1zcn{7mx`Y<0q%N9qOXnA2U8>@n^)Xd%~AL zYP3giQIrx60bzh~$R&F7T`$A05^FmAkl$(m^FR#021(R5-TQgie(}c~iuF$ocwE@y|f~9&9TV?l6ulnchsj8o`=w15_HHltu2kDij(d6SPY&$v)otb{{W7s@mGW{p2F!F z-bEXlH#>0M2>C`x`gHcMw>0?gwFePzCmi7R%|YW0KSBP?HrG(aJmWh^x zm#5zB#P#Q)>r0_{M_BOd>Ru)i5gBhaz!?}B`LafH>b&ua^Xs3AnoX{_?{#n_ok@MY zO6NHtdJZ#MLd>YQeGhl>otB?xp`?CNtHIUBQab~V=DvE+w28b;;wQV+;t69ON|X25 zmm6{ZAC-FCUN6&pSp-Br_}uVLKnFd+@1B+Iww?vDhe%ty5`cg=5JBg+BRtg4T@lf3 z4*=B)h8z;I9cIX))+C-UKW2 zCi8$#bB|Nd*5AbI%@4!&@yBk#*_iHCKX(Hlk=LKnzGl*XFj&ds2>d;F6tT*rm1h}= zw&b2y<^ve#9Zy=-OI<}OR?zM|TjC8@!Lq%ViU@|>1GJ{%9f8}9c_8DCKb>y;KJgZi z(j>$IzwU$`&vTE~xF3wVb>EMz7T-_0-teiAFd55??EvE-0nR(|Tz`PAWALTLwx4=t zxNYRTj-xEhaz+3E0n_PGCaq*lV$x^a)|%d}EytB-5i7VZKJ<6g6``1?!Id?6${ z^gFW_)>UjaI&tcKyVp11{{Rtqc3%!aY?~93Ln-^&0Az*hit^8iz7g?Wr>n=W*{1E~ zRia`>#RDBN^(6MqDq1~EmDcCYS{H@84fsS$2kYDHS_-ffc_wOW8v1k_7@g1+}*Q<4gdOGEY>#Tg)#6F4=P1oE3RRS;Ao0@! zlUZ|FSgj9@v`gzB4|tkAF=kkyllNq9;xGnAeLXp^s=OI%ai?z9G&_yt0*(*|3^E%8 zj+}ltug~uj{4MdWlXZ9EKNw2{3RE+q$aq!8Hx|Gc;N%~Fr`4abKg3HtYr@w)5|&u* zZY-a7n;Q%m*Z`z~o^!!DJGnHZ^w{ZyV{63vdRD;n9W zpO6oj^{>Nk*`^DfGsoIm+&qmX)bT*LYy!-|L2U3q&UySR_eN-v2#i3Ic;<;qOCMj9 z$K5k7BDipP3;@MrMjkR$t_yL^ZAm5ILm{dPh(V|XNZ&l zVEcBh31vtaw4)=Y2lcGsbqcWv4&&R>oFt6yuVR0Za;gugq(xRZY}81SmTC8KkIIP= zgprbd@Fbqt6}Eunoaz`SwPg7oGLM_BjS+d*5PilRt&u=D5@;U=cmMxGt^fV-_ z7|L7j`q6tcGE0c$lb#eBr4)A&$-PcTdWz!dq%Dl%v&H0*Fb$tU=|=2MQA<+A)U&FT zQ=C>^sgg)b0o2vo^64%cty9e8ZirxmO)EPGGJ6vk&|&7t3)-Bk8sXQRbg0%FnPNVk z^#qA=1ZYbFJt$CjF3Q@J^+}}jK~Q+~siTa`7w+?u>raLd^9kkbc=X4;Ni$+lEeR+( zk};aDTQVE5m2*6nWn?@$oc>h{YBJ1$ob#O2^4b|BXGY0hxvDD^ib%Loobk7&D>ZA_ zP;TVrZ#8ppNDKK>gx5<0HV)JGN3}q!B*)7=2VyDTWx4B?Nt}44mW0Vi6n0= zk4{PS6>8NkGSOO(-2sw+!mh21aY!0cNFe_J^{YZVcq2gmX3tQ#!KR+2I27Gu5P5C) zs}#V7Q34VOz)zIxq~bxU0xjc)DEf z=t$rS)AMb<&O#6|lkHU<%;hy>3G8iFFk{0x?d|PJ{h2PzIKUsJLFUI4gregIis+J2 zfbAe{!{*PgradT0^A0;`RgNVfBQH2S`&Lcle`Hg+G6}{7Y0Z5MSxoY^ogL}8kgSWq z?rHM7>Ns4cBv?LavybOdh8KC8e$Bk7HMJtz-+twQC!xvhOD=$x@b9xbg7!6@?0lV0 zeSs;r8PBI`jSDnQZvidOBDR$e*~^98=kTh!L;}zUpYQXW_RUgu5`*qlj=`cEm~o6? z)}_1_@y5+7e7N8qfYq~iWKWYb0NnH5v!x2?$q3FltyGZgS2C%At=2!3=N^E6jc5I$ z3wb=PxgW^Y%T<<0%#wnuoDW=8`K+|rBM!=U^auQFH7!K9vpKEIW;+1EokH}7c`u_l0(wfj~ayxrQmvP)lUZb@^cK1;();Y(at*bKxm<^TBao_7qyjW3; zP=TL%r((HL%|!#g7jXphlUMC+{>+SyGD$f&>*<=7L`X3zoUrZMtNp6&sb0$r+*|{XUe}?>F&R9xF8QgX*BqtlXsk;5_mL}oy&^lL~ymkfJ~Spuf1xE zsU8s%Hy@QTts2~!m;V6ORhn(er*Bh?_UHU*U6CcOrjo-6Mp*!VYPdX>k933O1EA|v zS}8)0v+WrB-Hv-=k!O+xG0Hh7tqXle$zn&++)NxcBVku%(-%+q(aG*IdsEziRgsAv zn5!3w1jw%|6=7Rw(C%bO5xH;`c<)&Ee``016lbPOei*<%UTdh@+(^QOPhn`sltwc4@%UE%p-pHkULbeLkUnu zIPFxlb`+nPPR7BRJkY?h{o)5onpK7*+*>TX6YoxneL*J0k=h8sY0bflmiNUnk9GF*hg+IY`u(p8cV-M-MBh&-RID+*e(K064^9%P3*I0TT$87C*{uKJJtfoi6@(ac|01> zd1IS>vX)Qou>Sz-iipOy4Y)4RoO@9SiYuccxzvEPEicRO(y(paX1Og1aJsP%!qzAVWg6os8o74c<1R}J$d8(4#v{sS{HFGy{fay%;0QQ8;*I%m+ znZhTRZ7B>%#&U4D2d_U&*R4Z_@pV<>O}~+v#ZtcK-uiXbyG~KNf_HYvtAU}CHr_@- zuYx=^`)m9O*KcIf$BAuhuVahNXzq!HSN)yx1zh(Fo!;CUs^9QX4}dXSJ-m9syc{V%S{*HlDfT zt$rlxAMjMag8Gb?QRz1_{j%8zj>*xZYnfM)t0@H)KpYd2bJDy=TmJxp%U)?W_cpqB zg(keUflrkblkJeW{`&v`9eOF_uX^_Iei-J}B%#RD^U&g{#1vw=mZ$H(i1nKbR1Ip| zq|P>zfmiMI7)%j~9~s9r{If;>00o2iz2c9EJ8KJa#@^NBX4p+4#UzwlMh+7-3L{@++4wPML{3ac2-Q=mx5NI@qyGScoBVyhihFA>5v88SDq&kxc~yI5nFj3R zr~`voH=poQpW0JYv9{B!^=oT6Abs*($qI>C$KD}ZYu?_Q#6rpYTxs0NTS$(q%fXzUgy0m7-XR#Fpp&Ss3MX&KLnTUJQ^$&ZMkmBqAVGX=`$fhEQ=pix3jvJe^~onDy?A&TE84AP@*(HXqCc`*&mZVA zYLZ&ReQzVg+g%n^B^$0BZuxLI=DF_`d~xtLi)_=~>UN^q2;NJH(rDQtR2k60q?t=ZrM{PeGdUZCcKKzHBJP)!!R(!-Z8J zc%I#Bzy2lujFy$H@;KiWO7`VHx_NEB&x3M8u>KyWKZRpYm6$sYwdY?0wSN%!m*IYc zuK2J?{iybFE!Uf!?L1>-j!Emil(!rlme)e*9tM4+jC<2c1E4zMExj3i(PmDIn+G3Wez$h04M_)J$f4crWQFd_Hsc!n8keY@$2BF zhsEy!-}pOUw2M$l$euW5;XL?(Xo(|`17kj;gOOinz&u9`uQG-zqP%u~hl!j++Ede^ z{IdSQ-X!oh!Jmzg-}tLZihC_-k`|EszDD1fW*G-6qjppHvyWr_E_`Xyd>!!v;rtNk zjS{1(+(1?^k&;((FkUwBNE~sW!oQg>irx+JmxcUwaba_$%ccdnY|dgaMvgO)7+^T` z+sCK3y!b=*l=z$B&kjeS_?J|YXzd(f-y|%30w@^3#~=;?&lUY?m|PrG2&gF8pEAyeD+}E%oF{1Td;dx!l4) zRbx)Ow-8Cd1m?dQzAXH7*W$9b@lDOd(%3~P-0X13u0rN9k-O8U1MxM-d^PdciM7v( z7Ct)gw2{KL>ANzvQJV*Er_G!nsPxTuz7LK+3o2E%XjCgon^H&ir)n*3H0b2FaNc5u zByuoE`RQ4ADv(AY&m{BdUJ3gtd{MdhrSPW1Tk#7g_QkOKCHB@|o0VAm`|4&#(Bx4 zLJ>q$@1 zr?krkHj|Wu{h`&4F^qGcT-BpKNNDm( zanGe@TZe)-ibOB4_T<%wZak5`VSwMI3r09CN|FnSrzt-uc|X>qY2a1zb%-=)D#xewtg#a?`8p+Bv%zhXNC%-Nt#%4YHag&4dH!xNF~Aj9 z&$#lR9I>rbxJ~|Eeo@}5v9^Vq%H;L>`_knJBviJFR92Eeat9fyP(1Cp^%Wh~r!=sL zwgv6(ezg^koaiMjfO>k>S!`W5*t=}ftV{xJC!r&nk`FQxODI=8ef{ZgVLV8UwBxNM zszGa1Io?ldmbDxc z86*K@AwE&qQduM0xiV)Q2fs?q-s0v+)$?GtPrHIf0UQd77HNKQoDS5<+T0Z`2`kgE z;;&nCZ@-{Cjw+<}u;V-GLnh~U&R2@3W{(7AZF>%L(-m>%4Uog1T9Hgi2~pT&nwK30 zXH62_q4K^~Q-=PPNF}^V9f1d>Zm_dUMQBFS-ErLhHI%56hCsOslg&AH2AN2*z~W^b z`gW~Y?j(?{#7UNJFD=e1mD zZ8XS$Lz3r{>roeu=2hB9?!^gcJ9ZXZYeO-T70w3+vaVI#ws1o8SEj##Br#icAA7bc zqq|8U+%xa#R_uoaNdtLpk;(2V_`(9kc_WX;sr;(nFK*Q-k&bdRv~;O$Ae^iu5JMZ5 zn4F%qbxfj7om6zsYUa^e6ltU9xXGz(CAyX%*HZld0G265vnI}xT!?YE8@q~0O3bSi zOjjJ7cly>H#PbNYhTV?+s%Q(#2J@Vb!l@T4BrVm<(Pl6J2AF4f?Z9k}r>Xa;<7I$! z-cLN$N$#ZEmRyYI6sDP$#i=D}Q9&5@G?yZ9L@K~%2a(5GwH$_PV9YSxFlt%nj4+AU zEJk?fJ?Ya=W@!{=Osbnlr{_=?W}A%Q{#;TjLj#7NC5brCCauY|L%A{lrtQ#aUr<}O znsqY`!Z0?UU+~3D<-Edo5uTq)qYAPx@{V^ND$q&GltbNwn?PeNp^)U)Qt51}~g z{{Yvji6RlXxj&()8WJPKho4HLbr6M=CVhUCy{!xnDAC|e4v7PSP zS%wusKKs6ur8bcdT}!WS(T&l!B=_d6GZrJvA29FlQ9#fH@=iz`^Z8ZSRJ#^#{XM8m zs%rWYBvV4kpW^jBDjSyE-dv}ZJ$)%Aosg_kz5wZtwJPa`bn}(-#%YP$Vbfeh>J%IW z9qNG0QGV;W$Kh9&-rgAS{ITN|lJ7S53V0m_IV34ZO%0Q46GRNy2OhPRb7XCuWQBM7 z`&6Z+xIr9%xgB`pHF6Nq#-`}*$6rcbLQN&9jBa7MK3W0_p18$aVJ5(Va!*s*m8>9Z z*1J*_T;)`DKjBu26h2;h){#kS#cd4lvFy484du8XbgAzA-!R&cRk{#(sG^d4XCXOk z{D;z#=2@haPcS9G+n-vS>QhZ1`!2`d_jcnVkjh=WkPkiT@@-CLInVjQsEpfUEgJlz zJp0n>6MAS-mk0uwiDn=!K{)m2wMOw>Zac6skF8!eZpt?E>zb}wONPj&6|I6cTa5kT z+Zp-2XpYp&DMo#(j`$TcFi6d?agL^v^4b|;+}XTffZCz}~0 zIpiN&%_nj4T@Hmoa~K)_P@Y(-vpj7f zeZwPwDasv-dLUBejAJ+)=BrHZ51cqDMa=JQ0B~>zQ|vNM5x zE2yM(b|m%$bAwT|w+yQCuTxZQ2#v@;D*pgl=*z^>?L(Xj(MtLvIc{X5Ni2+~0ee)c zw-Z2NLN(VKw=N8vv#PDRCHoB331hj6Oh4T`fm*;S=Whoc zPpxMOn)V}Z%Z5{iC;EFXBZxp!uZ$DeG29%j^udQHb5h8IXh1W9dScxYRu~|bo>DE_L(P&uVmJ)?n++2 z%{0;yOt|Z~^(6ZG*AbwiN2;XL&JiQ$Z#lrvdVj=U6kW;Ud#f#|j3kg@4;cjGfx?e! z@T-k8$C}08mv5*wp=QaM02ofBD&XfQk8a(ns-?N{IMr!8A4gopb*|hJl5pgOKTd+a zfAQ~x_01~qU0%RmGT=T=S0kTpy{plF8tNLihwo%QIzx452g)|({KL1)-_teB({9M(FuoXB_=8!}Usk+{)+n27TgK4X z>Q^9S4w)Qrilgx#U-0dd{{UmoHcujr&IUH;rU}M#>s!7U)b$Sx-aeHi#!EM5k}!Mk z7{KfRBeprO7x@1G;maLT71v<~+Wt}Hi8K5iHjqv`w21_znIYdJ5C<2Z3bq1ebb-wiHBgut(1<4QL#IhAAveO__I`tBhevo^syVA5Qf>9fxJ9(fmBpHQPN(4Jt5M8{|d) z6aaO|90BiNNBEmgzO~Xtq%Ix67%Xr&>-i3q;%CO58~AtPYh4>pk_av@8CvNWovgcp z{DiPw+0GPmo=C3q#r{08olz}MnFNYlF&HF$5AvrPZAi^4oOg-5Uk8OW7;h$tQ0&<;K9YGa)-7+H<%ir*uc>3o0((!IuK|I1gA^1qi zVT=>dbC0j-_I$V3ap`Y($g#{9B}NES-o9b@b*yP3)$O%pi~?0xehQWZ6=T<&@;wcA zK0DNBc>_*=pD&n%=fJc9=T4st)b z2RxpBhQ8tWd*FCHFJ<=c5=bs@XGF$F5dc2vZtQ#ZtyYC8s~&}-_<-wh#iwghx179{ zk$~WL8SjqO+}-OQ9krI)*5+up%<8b9`Iwx52m?H1fu5eV;yxwtrmw46OBRb3=_N+P z9EIp`3w8#%kB7ewJbx2Gu50%1W%gGM5F~HhgcUi-$j?1HQc$^@N7>q~{hpm+=goka z8;AFE>FZxMd_nk?sc5=g#m$uf@f>&X zMW^a;s!niU02E=<3UYW*I#<>gkVR|Z+juRHm1-jeO7KbR&$UFIgMAMF07&?M;g;~k z-X7A~;c~w#I7tP4QP* zyM^q0RRZWQ_SM=2B&*r6xxF{k-BgF(w)11yn6ATxi#(H0noe| zt7&n~EwMND&Smof<;F9#{{XT*I@j0whr^2v2St$CSwnAc<(PzVpdY(ER1Z&T`4hlC z67hG2d|7cNj-TdRNx242N~k2MQ`lp#tz{aq*_cjhNLb|fhiR>E(*wPZ@4BEiK{@$U zjtA>rm*TsfJX(o0828GHlngV?cko}@okc7sj6|SkdvG()1Kjkky8FWV2CnhXc^q;( zE(YPp(Ek9QDbc?*+9Joz-U|5H;r$wS@Zv(&*EddMS&HpLuy9zCNF?MAG2cAbuSM}A zS+LfY+TzkP3#dMB;v0B8g1n3#dC14TcxI*W)64NV)U{?1J-mkq0CmoDjPZZz;-9|jOyd81L z+6P{~)rT&EsM<%-X`$M~JKR_h?oUub&(!yF%I+kqYGi;|J4@Pxw|kHf0G}T+{I7-k)@#wRnTc21+{&jQ2S8 zuHrduuPxpp;lpve>MMzo$$TBA#}1Voj;4LyltZFn%p!2^1?TcF#iC&MF$&{kDDaq%G0#girM4^vnzyWL?d%XGBN?{>U}HK{uSyPmG6hw zRlU2C_S)=kiKbnw0^~Obpd@_=869iQ{9&MYBjRo4o#%-yJo#*&%~d3Y+5yUXh0YHI zWR7^qKFi@toj&H)Ju^=PqTvxS!hyyQC#6&%jTBavJwHRawV1cslr&7ZTy@X*R|n!> z59>*(L#Svj6_Ng7(RLhXj_1;*X1tF6T{6|S2#yO9dXK}sZX1iMX&OnD*%flR;2d`c zy(blW7glzOqoi0|U50IEYwrgjjydC}Ope}_!t1{eejezS7TRu&VHLDiv51hUCHC$u zjl}LhF(l;jO?3Vq@vLh3yIDSAFF!B$N%!eq z$?+oE(@pS`nd0*%Wi1#d89a44uZj~<@pp>1a1L?wuaQ0v_%1CWn*RV> zD=gDS0+eHrbCP!qel^|rzsFbp8P%=ys~PeiXbuk`^1VaiS-#L$Yv$##8yLVKw?qDW(=0Ws*h(Qyiy*@= z>OC`4XUt*9o3V-F{{W1hBk<3OXVGGCZDMdR6lZU9yQwEQ!LLg2?}+R?U8Ti5iHPOo z2|A2_D*40WM}z!JsNWmSF5xCgWXy>p75N4aP!3K<1A*_}yNw3%G#?K~49vllWUCb| z&r$O5aqU`7Me2s3ZBY-$jW!F93r}IE0?RfQLO9Pn1MQrCRr61U^=(5$hAlT!jhIFP zi8&>G0LN3(zO~c!J56Ogw+2C+eBaWw7sB2hH%T?+s;~q%Ba%gB6=$((SF*YDq{qh| z9o17?vJt#0-ebp-$7tZ8<2?26^sH}*e-ZT?oe|{IqmseY7v4#Ulnmz^xzFXA`qN&w z(c`uA;EiL9{D2Zn?xm4~Ngx;tj@Ui1 z)7rKC6Y!Pnubu7>nKKZ^CdSdvKu2L;a%tZV?5ELCg+z{F^BBh6`4}ulI3~I!Q>0B} zHkt9C!d+uX@b%i;EHT+MV6jFx4Ef0bp7`h1y-Q#C*Z%+s8E*~PtaC*vE6?5vJ9Xzg z;QDb}8vg+7-D4J&J?@<(w@(v^V^?g*F~9)hoxOSIjyc6~egyb+qxg5lM^f=N+nb1o z$q4@dRy%Jas~$M%#{^K{R)xx}cRHo6xnbd$Z>%Gd+)9e3WXW)(aof1hJ*%nk<9OxF zHk!y1tP794Hn2SlG3P$raa|4Hjc&CaNwn=as76vezN&q5kL6x%u6VD-aF((TU|qpe zVggyu3ZR_l>N;4t%{tvR6*F=u;^r|$(y8+G*PJ3>^?Nc>v1s7!1%x{WXb?u*qV$@MLg=LA#f>`f7 z5=Q_oFg$(MnvANWAVFejz=?4Zur2o#895+e9FvZ?;=Vf2ycOfW z1YERwW%_D?+!>>sh}B(B%+avh!SA?kJodn^&_4#-Yq#1Fi%Zoc(v84UW`GYj<<0;t zkQXN>AoQ+U`YWO&`BDGV{U`WWs$A-bZeu=V01bc~jyvYN--sSJ@aBu*yPM5s?L?kg z3Y;^XoP4X);PoS=cn`v>o1X)C4nGagYSyy}9sI{^leqN2I8X-|93Oo14~^xs@pgqS zmv1opTMR3=Z2jfu``E!goY&`(rmlQ^RF>y&;J*;*ej$QARv(@*h7LynA46W#Yph$` z%(hV=IUgw<4lCdR zxGk|kWgw6MJu-bgzrv12o`*zRK79DO@h@NSvqx=W6=FNp_YCCmv;&dv*!@L#CWGQX z6L^nXTbsGEgyUessQQ0CNw2W{N2mB3#CJDd8`qIbM68iqBBQ#OUKtBy1_XnTP%~dR zx5MbXIjWfL=4sLax)~e=WB&4vhaaVB8aIeaIv#_rXwh7FUgjIc62&A;k^(Xcu;dVU zJbKr_x);N(E5trLo-emAkpeK10Jvph2HlI2F~J$n9f9V*Ks2u!SlvS=jWTYOfHsdz zbtB%sZ@O;|*?7iSG%YGSDV}5JN~jdPnaLy$gFl{0r5Lq)7aQK!K7;swqu6O$T4?ss zF4)j2uP22a*z$NBMwS2STe;I1lw-MaRp#vz)YeRJR#tHbNvrovV!EPEV0On>zonyPI>2ySI7SV7^kuD zYs>wgzBhQ9OaZRnAzo!b=o~~&o#X?nktl5$5HS@<371y(A#Shy4u{yges(DpOkJLa8D$Y z`d8TcW!<)>4fLNg5HZsP(zzJ~(x8r&z|Z zNEvXWg-~(8?~Hzw)NJ(~@44!6O{!`(#@$(!P=*AK-np+s@TZ7ow$u`MqyeGIudYbO zN4_g#QSfVNUKqK*(_Q3QQ-0Hi3-SSk9dK|@B=S#gE97khTh?^T;%1TL^RoHh!jseG z!0Fo*IHh9TWR=rCwzlw&kE!^oZx#5WX1bbS6(blCqGbHIaD z$r8mxOLEJ#a54rsE9eKmdiZZp_=%}_I_}ouP+A#ZYcq6d7j{NkmzWft)f8vb} zE6a@HCEB5vZr^TssB%f_TB!E9^Ris{bHH9EZ5_7FcPBdtKPXYQSFh^79z02< zS=cX!ZTHU2nM9-aY=a{nyqtbjKgDkicsk!txAA_wraOxzby*Y^CnIxZM+D$-PI214 zYSO%Kr+CxR?(YvQjMt@nrR-IVOxC{cj9 z2Wu-}<0GigPpx9oFma1a`j&5uT6Oi}=yn(ILnt7!tD!qj0AnYTdv&i(I-}fMi+G%| zQOE5pdh%=^=B0RE5r&&p*8Elwsi9TYa9&y*- zrBe8ZWvSfwCs8^yo32s^c+@ij&a0JBS0ph!0fU~E^FQpPsd(?k{wR{`Rt7s3f!E2E zie-UOpDgl7!N(o_D_3g@Q(G85J)7cp#Un3P7~0~ugCf;xkW z_kRrhGPm&WhV4^PnA~|WtZvLPxs-B9B=tV$>tAc%=oV1vvO{SSg~sipfu8*<<~?^@ zxf*rVg^X!2UBN@=IT`fyG(nXYsnvWw@g2U8smC>`0Y*K69l;eR#;=b)AJ9P2VU^61 zF8#;>Kzk!Lcqh2Q`u4A!bW8nXMBXnPmsMgida&)s^sfc+KZg8I;(c0uW6v{0pL|Gg z6m`OZ)YI7&q4c-IKaN*=#Onc=4wzc0KAY2wJdUYdrf=6>M{w2U#kwh8Z(U#PzY4W_?qBszkU%Z@R| z2tEG*rDdXi=t>sRo?E6%t!fwM(^!FkKrq9SbJ+g?pXpL~!@+IhD`>2)zjl!Q(!iX3 z2fi!p8C9^Y-zTT1ujgMr`2PS`hr{}e8dj?#JE>MpxgZiq2S4W>YNIP$l_ZtX>%JmB zC(%44@_1=pV90)0PFX<*C0D8Eu;iNg=iv>fi|!`WTf~<4YZcOw=1v(~e?s3r7?M3W z;=bMZccWZO;fStvAkqAp9%_{!41=8W+r4u)`nHuWtM*6=$hpI}emd1DqTwj+e1ENJ z8vd=~L8T?zM?Ie_<=~Q}1D-truWR^Q@E2LswXvvcGWoE=qs(%rCp|s0j@jci?bEe5fVdsTl8H;D;7$gkf9xL46#mj5qs4w*Jvqd9G7>FD)?8X_m^*nwj(vs}Q z&utO%Z^Z9`z8iv3eLSqF2Lv2#Kb}8I`IG(=JFf}&hFv#Lb%GdQVat8&AC-oGK0SS_ z?!Osd!{R$Yw@L%xh6AC`L-iH;?ePcU;@o(y)+D}EirfSyPD^u=4loHTf&O`>?Q=>~ zy43pD!+N%*;yXmtw5x#6x2Qe+4QLG`UWEpwuFCFsCEVaK_4cY?2!FElFAsTIa2{H@ zjJfLA=N$h4KJ}~dL&dhurnZ%3DwiOFLFGr|PL-bKsVmsvZN4PwnyXxBux)kA#Ukf8 z7{OLwQ=Wupn(^-#`~}mstybFmM44?AWV?;oVsXc}8RzR=e}XOaTT925R93pUY`c-1 zpIrLaeXm&R8jAgz(nAubLcDYS6;3)7oD2>Pbeb1O42CzlxDocd)3Bv9B7`zrHE z(PxDTLG$An;QQB%T57sAs>^p4BiYwzIKx-Y4)6f;7wcyhSC9Z*aJ8IH=sLr{!$=j^F)i($oB5Z9R|KtmF-oj1$l0ULAYm zO?SodPoV%Kj#H2n0_vl-PX{3L$K_u&YMw9EJP+bjk>?}IZN5=#XP$cW2aMyjOl8n- zvOd)DcDWXXriZqaET^jHp8a!N7lr(Nr|gsMb1OMJpO9FN+z!Jv^52ecyi4O9HMM&~ zCCuzg!l3QOPu&NM3=gjZy+fjWJ@JOK;P@`}NB+vVxf>*fSnqXQVYAyOs*~HVN^K>% zymqc`lHj5xg_wyDckBklm~yk*(c?QBQ%Kv+_V4x#aQb zU!q#4g?ts_-v`NO;@HQPEFv;hh%1~PfZ>iueB^Q5){6+nA1{8pC^{JF~KFcdtImtw&+0-6ADZ8FU!}6o8XvjhV418v)eVvN4D&xHvMpSgqYL4N9%a$Y&+LCNW7BJW*n4`@?>(p`0Pb)6^6dG5_MqigW=AkyW%W`De z0mo5ROo_V~IqOU!IhchRHKKxAk;|>huFB1YA1->)y=MWRBX0nERO$Z!JcrAk^jyGz zZzm;3`QnQg6v!6{qsvYORgIL~6dc>XynUp z9i&m29hOHuMk+PC8$Wab9+<58k)lF#^5cxtVscSg2i>IGMt0W2naVeo-+8&uU@ENf zHK=(*7d@1JFUF;umyqY7#Y*4kt@HDa!loPQ4RmBKr0qauqoHug#vM)lV_x zeax60k7}uLhewV>jPa4wQ*Tlt-N^2wS8*I&`WlKznK2*U1Nrx)iWu#|WyvF^b5VJ# zJezV$4%A-SgqKpS{By`hl5w{mO1Ebms=K@6CWljxEP_4hM4x6DW0e$})KHC!F}#N* z&IdvMG#I0P0nUAWD?TfObl!4|0o&HBG_J|Vq ze%z2a&mWCr-a$KEHQY)RfB@s1RJ(3F7c8MwCwE@eJ;6wFqYaL=nA_PA*@}=k1Nzk| z;J#^7o)2?LHFBl3%{itA0DPoUvPU2i?fHjsRnpPq{{UU`?ewc0YFu^a6%$&@i@ARB>T0d^vfRQYmPS(;?0-63x(AU2zh$}kixNj;(y7Rf zB@qL$PdGj5)wEGh5%L!sI+InUjLkY1<7mcvijrjxh-cZ9Bf#LfZ%#4)0M@A>kIRqC znD8payiCPPo!dqU{{TH|JHIkHa7I*gCayE?M=P;H-K?%1vah{Qeuk|@Y~Z(+IP|C6 z-aylNav|DAbK0~G)NwEofsV$GWXpk^bDX$6t7j2ggjm>;M>+MybGF#Gn-VvA)JYGp79ae_x5g>&ZbP}A?Tw5)IUI`Ti4TDv}^_lbuES!$wU4R(yhWak3{ zx$D_nwpbi5KU%Qr&fD>m=}PfQaJwZS9>?iZCRO{H(mSk3$sXon4t)h_TU)E3nnoMD zR8g!uNQe=%2hW%C=OJPc&qCI+(q_4nJ2wdGZ^jnC_7t`j%mxOnpCo6FE&8OiHb?d3B-cY(jswy-8iaT;6{LPLb^I#ra76+uNL z`&DR_mMoFesHsy|v_i4q?_Sjo%TQ&wrOzh%YTE+?FP5Z+IHb2NaC4j%%YId1 z(tWrmk<&Fdy0F^NN6N^|qmkOBjqS>hwTv_U->=rHH1kgTj|aUt%Nl~DboHek!f&Bw zNuiD{>P`W`siA0YSx(K&J!=q44DswMo^#JnYS)fii)BE#RrK##tuJ9MNOc>z6@{cf zBMweSZ%U_Zw|g4q)e9B^u1!2^HYFn;%Cw@?Cbx(iXu~1ncc-lpLgiN@R-eibcnY^+ z(wB+jEg2<;@~BRzw|60COqKh&=syEi)nzcX#jJZlKQQ8@r*axAzNsFNq_XcUIIear zc3b`AADNGSl{T$qbs$-7nEc+ozXMQP=#otsVEY|;Y;lv`t||2|m$|w7*%6Sw$nZYz zP|63{$*%Vh4ubQ$bD1wm}V zi-tG`n|Cw}L~KZM2^9^5KWBEHVn}YD*rXA%+}hX-dt*FjlU1&xlwED}P@=AQIV0Hd zQM`(%a1T7=)|!^^xWhKUeSxNsHLipq$Wn2iLsjLugy&(&=xTXWV~cgkR^T^ktM(Xe znLNMYs%hAz7rCo#V;r!o`58SIy+qo4rZX&Kq3^{;%uwx8Lk`~6VZ^%xS;#$kqV~|4 zCDijjikhyk;m-wMYx*_6+U{*2XGm1wy8*(Fa%=hfy7>3;tHi$)?Ytx7tLvY!&nb4A z-PA|sq1>^)0+5e_FhJ>mITigZi0zC536wBBm}m2^f<7gF!X5|l7PoQZeFjNwZ)CXp zNr?`~9m^>junAp+WkQZg=hnWrgK@Yz6{q#Jy3xILJS@(XHX>!d`2O)Z`MQiK^skyf;SSTZn=367ONvQjOcgmScOR#}rGG}cpX{%p zYJL}e0{Ruc-5Ee8`Bda%2W~(a`qv}i{{Z+W*TcOY*G`rR=8E>k9a+dmRx)RQ1$z_0 z$UF~0U$tdCca`DcYLnB*`FfZwV+L!T}}c`Dz%OuQMuny6&VxdF?B{|ul6K^A z^5Y*`^?f(tm%{xcM~g$7L$#U+z*Sd?TwrwIj&L{x^N(J0!BfV3B`11Na(;RpP~qy* z(X;s3@Neub6n|@<#O${>qA3acER1jy1V}PEbSwxp=n($Pz7f+rF%8~@ad&-nm04NP zV7EK=ps=g^7%6EZ(V?PLZw#Oq%b&_ZEC7O8I z@Ie_>Uz8^td-ut$PZIvbjGE=F9uu@Tv!)~wu>b;ua1f3O>JIJ!=zD)ukm&v%)9rrC zZ)+S;w>wn;9=*B6Xz5x8i4OL)wuwO?{n4J7&Pep{pIYXZjjb=>{v(D%E7>#oGV%B9 zk>QUIYZlru@T7-X)tqc&D-GqaS+^?y5eWdf!mm!p5qKN+1h(-pH;ti9d2@BTPbIg! zXo<)A)5hWkK>B0U{{UICcr(Kj+@7b#`m5ew9|Yk;k&EyqkCjA z`4oM}$Q*R^&*xTj-`JDHdQPY{OaA}`{gykqOfMzHyGs}(54wsRF5+;w1F0jue^v5H zwCtZ@J}xrXt%#$heLvUiR1G^!{*ETwBRmPcJ4jHb{8g4-Qqto8FXXB19r4+tpf2)gbWBJtZm;4jc z;!eGC+BDuBwz05{1Nn{+d8CoMZU*p!B=9rG1Df;=AN~pD@iR@dxw5g+S*@)DEGqt1 z*)72X=R1iqG0PFo&^z&8y^&mfo-;Zw;&@_vfBNcJwKa(e13mZ^&iru9FL=|5Ylfio z=4ap!gZ}{FlsbovWF9E-&Yg3m`9Xfc1-$TuBd+40w$Kky$0TqEO8YzD=lm09*T8-u zw(*~fZsXl;myX)Z2-Wg2wp9Rz9=IcpIvV{tg8o;1p?0a~k5knCbsheu>w_a?^u>Aj z{{R`Yn)GE!Nk;vazj?kJg{ae-oSSwz7<7Z9Sj4f85Cu@60IE0u0nh>3tGXaVHQbv* z^)2uIHN4Wa$IJ&HbO*I$8+5p4X})xBF<+8OZM&aNqiqb)J+sIb0vppjVxf_)Wsrm& zD@x+l+9n&2ZO%s?l~KOX)3=o#0q^TrNxj)xvCAgq8%HC6JJi2t)I>gN4bkVn1W_DP z7gZoHIdA^}U0t|$gZCS~v027i+?0$fi9D%-ImYwHrhPL`g4ur4=3@#vsr9QrXL$+1 zyjILGNrxm{$J6UrLse!>>87n?<&WA|_Hpo+#j9BLE8QXuOHsAT+qJ}wk;ISp@TuJKjPakT z&*ndfe`RCfpA1WKqZrwetI6rtePw0CDpfmQn34;iEs5PueHL zJ^*hA-RTpbGUD1~i4hJ!ZQDwQUU@jiKJmwD;(ic(CSMO*rlX|WF2)Dty9^9(fJqoV zdvnKrwfi5Xf59+*Bk9^L)~~E;nsxp3^KXvgab$Z1*67(G;HBe<{WSopn@VetI4>RtLX=Wy9xA<05(Ls$L@ z+3@D$!CwX-*DuWNaj&ttk~v6lqBdlUVFMvbjO{t(p4hL^y^9G~mpE(!2fcGTE{&u3 zPRbo8Mz%|9Xp|&zL@Q)D zgJxd7t#1#U7ieBbzH6S1no+t_hR07z*w$~QD3K{UUnJyzpYw{xwMUjsvi;HDy?ol2 zL$;fDxnxFUUGL5ZO0yNZ$fX~yI#iQFkirUcima0~au1h^YEI-%RxG3vLIg!SlaFeh zUU{yJ(y>sZYN_Zta(({*l~xNS!}+_8K;!9912lo7=m$SqBHio}N$Oj>x|UKRoNy0c zQB$vz5kVhXq>=f<%WULSSB)eQ0;4B^$6ie+{6!>cHSzNdE7Sri6-5JKQc3Go{>?h7 z$PV0&Pg=ID$m#*>-lkjG1X5*#Y+=Svy*2>be5por!w$x*IgzdwGswk7a_eh2kahQ_ zrDAGbYCK%eZW%4WX3u)cyH&eg@{hAfNXrgE$E{dF6s*!A!Styf*$7dM-N`+vv?#j{ z8=_Q?c6sL&sHp=D*v8-1v!Qf~Vu+i7?oDjU(YoOmZboxWXem3RA-7u{>~N>jqTA)k zyQn;j)Qw{$^O#xir>$9<&0&P25XA5+IY#VBy9`T^s!YC>nAdjk6rX4c=Nxyojnm=?Vi8&>VqD zI8pORc7wq0R;8`YAkrq9V9_*i^XXU-yTdRH55L#iv?oB5hmRnE)3-cR6b2cX5Z%6& zQQV2U>`HFhMleax`qhLGr_GLfW~r~1Wl~1&g0u=o^9`$kjP20_1`=f!{r9^XB2q zQ4NaN=iaKpADnm20q6CrEh1aUQZbUfJ5p$(vlMFJ$j#T(QO<|UV$|%r%R$tP zf00S%n4;S^45t_so|iMkUKsc|;Qs)HPS6M~f=SDfoSJc$R9bz8G@fqQl;KyRjs_`$ zCYC84CfI!sAO63kOu{G?Nga95^Qzx!fkP<-mFbUD(vzQ2$#)hRj0&)_?kssdF;@$! zp#%&A)~fxbR#o`}JMr|QMP>meCq3z>)K*JWTb6W)e(&YarxjicXPpRBvp)X-=dCy- zQZJIHC$?xv@`7gOt1 zcD71qCa1WY2N86~UrOiDUai5Du2L`vKBV;(Zb=GHsnT29K;vt%9l-5WVzPPOMo+kn zfuHMAMRIOn`B!e!&0dQpJ+QV3=LgoE^tkME8if1qmfzEi`cu$J5!(636`=Y<$#i9$ z^NyV>N>*7d1-Tgu(D$aA6IU>z3i6d+zO`=HBy#3<+B;S}BI+BWa6lOyI@RgpTa3Tm zVa;UIDh=3^$+~GBQ1jZf?cZdt#|8Ed|Taf$bu>h#|^g zj8>EoED-r|@^RLqhD&x;EA=_6Lh=p!Q;u&SO;oklgxnSNxX=h8=q5o$s-u<*_}?*IsJ02Ln8V`c`GlqfB>hA+z&y zT6WHd36VJ6pG`A8qB3yIH zKGmTNXdw}|QO_ckpFmMes=INt90ToAg|&h&-LVdRYOJ$cs_u~EZv)b!yq4S|Ex6q0 zsXe`^!uJ!k!W)UAn6oxVdeMSpVY?Xzo@+c?PYMoqao@FCw!Dcz+?W{TjzOz+IwG#d z&2k!26amK{TFsx&P&~qU{OaAzpFf!h&!II_?I;~`OA>!9R5^4qaV9|VARK^t(zK{0 z`GNU(T7qx2ynw&@uTjr5@{6<0&IWN#GD8~oH&MV+5K9i!_>yTFVJJr!$?H?zPS&ZuHRN^_^JMb4ncRQ}daWYvlLYTQ zD5k8*o3gQH*o%n#=@*mORdtz|GJ&+`ikId{zjiPIs*Dvsd6SXNOt-ly-I5~Q!vK+U zk=G~IwYH>@m;-Se{IV`j-p=XPqmmR5Ibhb^SEa&p7 zsb?JUyf-YtPZ?8!58+N4aa1h}We@?A$*mT<7i~2nlG!IKDSw;LRW(NvFkl8c8nrC8 z@TiD>C%sc!lq_712d!t#Z5W!irEN~cT|^?3a8FvSi5zZXg>kpPt!pgabbNi>)k!5m zA=;o3z~ZjR&AYNoJ9wo&T#dEZ-~(ExO(?92*?jh@wxE^;7bJSshm#UwLyVjPIj5vT zcG#+6j@gO^JGu}@N_dqLGURT>LZae!ET{CD(?1UUP!J7C!AIfh@<;9n)67w5h-Ko zv<#E^RqMepmLj+jj;FZKr~d%1viw_daM~oXxD6DD%D|ig2=7%+S9WJTd8;$|!uX@` z!%*=*j5RHDO;v){?s+GPBgAVAZrMc(-)QZR%-0d&)er}_zAEm#7CaC~91g<0i{gjH zofpG;)$WgONK|I>oSn?rVx(jJp2og=@TAh~S9fGQ<;oXs~~j9WcBFzv;5UNn~5#5x?BRpPAnS4c=@JnqNJ>PJj|qP~6jnAf)2{LxrQ zVsR+>NDPkH#_S%L7~`dS7sKsyQM9&1@id0+XN-_A0VJLm9-qpyi*_?f-$Umw3Vbs0 z^nNyq*%j^VV0AFb7%W|K82OA&1^^`S#{gH-J}bUkWw?h?>&FZ@}r_`z+oXrXgq zB2KdIETTcq7#=a}-x&4d>%AXPy76y^{=ulu7U?nP`B)oY?+`z_2t7Lvl>JM=7IyMQ z1nnvYBm#hO!TZMtf$#k5%rx)q?+R+cuZ=|5t$X>FS! zjEj)!MlrV^%LE$r{{V*mA(BldI~)H1Hu~};4EvMjVB8ad#~uAC&Gj)_98QDa>1^*K zd8EgbOEF>2F~Ri6t-VIWMAa?7vm?|#_#jA(9OR7l<2dPFiR1qO3~GPyja*-7lP#^o z@y;>_B!%Muk&&L+uaZ0q73H?ME}5wZO{X!Of}{^lp5LuRV|%g3Q|Qly9t_evGZe7M zfV`Y!3^OX6sbkmbI#;c`K-=Mx6p$(J$n~!q()>YhrR$JbT)x-2J2G;39=PeAo|Wi# z&n=|#8vtB77Ho5ZzJO5T*5N+qulN^K(vmrJ=ZGt}ARhk!Kz%r_>O0F>8Q>v8N9&9V z`7gq{zNdNOXw8TvR}NPP<{7~N{{WtA>^rXs!!$~=Hp1X#f$dH$#Lt&oGvwci{tbi1 z`ovd=UuCvb5HK;ubNKYHocwd}N^9RQQ_{e7Sjvc(fL|vCk6fDl57hi7`fI(#yrM;6 zzypC?R61(Jvq^HkUs6v+2h{fKR;J$I`yVL$F8CpP3=!P;k>P7~%E6YSh$1Jk{I z6J?@l*K;<8%jH`|79nEY7;vDIl5^g;=lGE8t$$(M+mZ>|(ymX?s2Rw~!Ou$3T`yA7 z^(eL5i4T`@%oKM3agaI>{=H=5uB0XJT=DM^_&e-c(T?FrM11_cG7rjE)D!7k4~{%H zt=xFN#WiI&aNoYwjwL0KD9*(PIV=G_mG=Gar>0vn>l&GfN-ogs0sKC`f}ItY_N}?q z>=g^dxrfW^>PYwgl=%{O9Z7aEqwrH+cxugTnXPTgDylk^WePaJ@6!jRTGRX`soL1Q zcd`iq=aYetOxKjj@xJ=&#Yy4&;@`Pr6NLi-*Nl4ZC$)R7zvF)mXxdy5>H+1FUWyku z_0Q*3JFQVFH_@Ik{{RYGM7!6QT=5!5a5)j@=2jTM51#ns5#GHo!9E@EXM=8}J{N*G z1Vkf5F@WHbpbpr{?fk0#x#0*reWP2pmd_p30Qn5LDt$o%?+kJ6*1C@g{2JE$GoZ_; zYW`cw%m`8Uxav-E_;%FmW^(fc1UEBTu2=7h``}~V0!uvhQ4+1FOED-bE-6VjB@R{ ziEOid2Vv79x-DYU#2WMy#eb)z?U;sae8Bw$x?eCl(`S-~9W$@d@UMcY{n`!G5 z23O>U`FQ9_>_5+X-SvLZ{W_KifasK)AJqI=Qj*p>Sd_M4Ucxmq1R*{*WM#7Tq*J$iJV0N#c zymRnw=T+8IShpploR?;PnN2d^FWHO+f^b+kKp<&JdC|=dMo& z+*i{+AMu`?W0KzWg3AwoQQZ1q8t|GS^sU~x;Y-+(9dY9ZbG1@J20`GE4`J(Ew}t*5_&U?Z5?$%~ zuy(giyHVH88NtI5!2_w_b{#9?KM=>_?PtW{ukMP%7h-3lH@L?H*T48(vF zqg%^@(UFt5bIS~z56eG=JEog9jh=_l-xNG`;g1jLXu69VmS)=;N6`8bas~!D{#D># z4z*kF8tD?Ytht&eaO?mJw4KYeb^sh;hj4I=78LcgBA~LkimyJ zJ?dWtTkF0F(!SfR-0rxULo(!$6mUV$C5a!(uXtz1x~D1$Ztyi!pTwF_utOdTmlYJ#$#v$HI$kOIIVr59iw! z4YMT($MEhQo1=6%JYe%$zX?7rTWc5hT5hLdEvmvmN!tYr5`IPp3=g5kJx@&g6WT9` zH8i-kVdSVgvN$KT4cXXHPRGe#5od?M_Cn7@P#K5r(MiInY-gTG9QVy|zXbjx_|L`H zS2}jLACd&}#yr870uC}cJU<7Mz&^G1X1(yUOxG@j?aX23jdr8-D}qSJZl<{1AHp%{ zJ|s8MTcSocDEW5sai7H2oXcwsC$Ye5qr_Je8yHox4q1m>d!IpE7m016@f=pVW!$eB zw3B?EQw4Vejf9bqt<>WOfz5q6tN7=`0^xL9U%Us-`+iXQ#@}D*?_O2nAA_DS@h6>q zqdAe(hKDSuK4u$^bDSvrds4J*Vfixe!|gKNSytSLQV;?wWZ)j2zfNn`r_{VXE~y`f zWpy{DcY+5P9FR{yaohg@tzLEEFAVFR4~ev$dE%G?S#Bc8EITWM-`sKQUOTP$lSuKF zyK|%I7e#L3DzYk)r`YGCU;udI7|&YAk?Ud6we>!w@kWuN+}gxM>K5GRYMxH+p!)Q$ z6FxQY?w_mw0AVcgIVWQP+#?Z?4muxd?R*d5yW2kxyFJvhf=CTIfK_@BxatYdC;3+k z{{RYp;rv%Vyo`u&3c?f&92Gg^9F9#~Q$a5yt?=v7Jnk5g#ZpQo;rG0&Kg(3zZ1u*TF+rTaX|})mlK4I!&WV0BqcG0?1;WU` zW|RXTI6s$9YWPp$U&8Mi$$Gk`oo+8CB+cYNa>~4t+<*#q-(sw4?pUZn zv~qG!80%j=d^^z-M$-kI%)h;6IT^?be(3tBuSRs9(gQW2B>}?`*q)iLu2z|%(du|l z#Z3pq(0GvEczKIqSmZcTyNLuaJ-Fkq=~cWjqj<+tY}_ykoXG5X$sH7Zed}jgzt^I= zlHruPvvuvs;8$&;{{U$+M3XQB0|P#_4{N46lhVl8@L$5)1iYV9oR+(qHA3x?@~^iz zC%@2o3iCgR9t(rQnvB}EpsTUK0H)?8k7nZon)^?|z8Q^dR{mz%SON9?GhSoyAHmmG z63Cb8TX6&t$UdIbMM-MIpHz<%@E*Bge`?Ab$dxdlF#zCtSE;9krq(UeNkEktWmxim zI{4efdM3T$Ep7{Y8%gE!WmQR|`Po?i0C)~Us64UY4oUA{Ps~yPT=ZSC5KW0_xGz2YVyol369)@ zxUXCRS;}La)sLJ0Dc$&wM$mgneh9$a`ICgX+U8Tp6d_}9Gn2Sc-;MQdGLvfLaLG2rk!Waj{$ zyl0G4rF#){wLOtsY#qLXJXNUt4Wwzht7_V0gU+5J7>45nfkUxzI3)vG&5js3GE^p;3 zbAq|yvtKoMr@+%|zAX{h0up@g@`ieHOLhnA=}J$q;~OTK+4xK1SA(wvv+A?QZz#wy zu_8k3@vdvc-wG@|DWFTKTE!&STQYWy z=RV7vkHebqe*@{i5!1vnU*Y0;!lTB``?f{y4oZ+aW2ST7r8jG_IQBlI*M28NuLhle zDvU?8;1B`s2>dv%$HM;r4ZJbpAllp6L@pV2t8L^d>Tq}`)Z;bbelYNL=ZSUr0O$Wf5fi$ z`RNjgBw`3_(Cxzpl`DV(4{S_?)dHK6Gu}{1&^i)SF+hkyI8A z$h{Buv5td}*EQ5j<11YwPm4~uWKK$|uRk|m^P22*9}qT^;kh*}R$bD=3%C*j0on=2 z9@Y7y@lQ?hM~j1M9t2lIa>7YcG8C!EJHvJvCwcruIK?|T1vS0TyRUvFS@>uRdy~3X z0}GBxKgfF5p?odXw8>(VR2Yq!&ukOx?s+xyPs0z{+g{UrH4V>+wHCY88~3+9U@ftV zjK-&N8$s!SK9%lX8IMh~Q>HY#glB6nLK`^er6oN@?6tc-q`cPbKeCvx1d+xMHS+eO zq*+g?%YUcHcI4#&z%8D?O6qm55XGlk%el80)R3dO#~H5x@Mp!_Um5t(bPYZxj43!> zgqP#F9XZcEIK>jElP$i8spEeLYx3p#-$2Bq#%t6!iX8<8!U$pNHqt?QQ{f z8%y-uM^Zg|^WMKiZTu`{M_a;EcO)J^EZ2$nr{Rx>>=7rk{n%UrtBs)ND&u6Y5-Lrl-m}r^C$|H%)C2 zRwp=P)95=_H{iV*KLp*8{i5apDUn0<8OB2q)N#Sb*WcefS>XLwOtlOgzVr8o-Ctv$ zTKPlbwx6$BSqqII2_zpYhUlP!hZwMJf=>}SrJKC!jIP3^ z{{ZW*BgQ(6_Zz2{Fe5o*lk)@YE975=9xrIFVwYF~-CVZzExB?J%0a-+Kpb=(GsS(e zsQ7F9XGUA=fEGL*b9Z-3!3iHySpYyAfq1CeWfWfrU@@N8{HXf|XfmXzp&~?w?0%TArVE z;kn`arITPi2n2Q=I2|kFE5SX5`(N^^ug2{39gcbIYwMec6Up-BP0Df3I#)2B1=2P9 z-?H8UA#w}t;N!kM>SK4In@t{9{{RWyo!z3$v7NA}V<46%x%EEP`C%rhCy2aI!qyi%@7QR}@;fhxw)WbjPjajkeqeUw zejrsiFNCK%DTy zu3Uk%xg7k&d-uk9tk#Uu6KUBWGeKjo=r>trZ_2b_Q$$Db*qxn#sy|J8UA6yFa=$A&)ubL>C30^QUkbUv# zNlU4uWbS#_#tl1D*EIG1&WIUMfI;h#(+9U1&(^X29BRHWT@c#q>I#M)Q2>T3$oaGB z#t7@luV=l~bo2@vYZ7_STB$wkH$h-fq>={%pJ7X%LYjBEv7~Cz*w_g&a(-6?azFaj zwv3l4pDdPcLG|{iE&MYdk(-tUh|b=Ev9+VDXnGCR{el^q6lRVw)v!1N{F=qCq&YOK zd{gn}^Tb{o@r-GpUCSiXe({z)%jKZR02TY(gOS){KK_gFcf|U^)8v=LieibMWGqN6 zCO-D%2P=+)AZM;Az6rYV55yl3&3CQZk!`T-$`oXga6-rrD%|w1Mqh`zq#EV4um$p* zvA9+Q90Br_>`r>*^!2Jz(#0yLec^3SNPS4W3-cf19ckV&_$8tEt6%>Bgr@VB^7d>$ zbN~-uudizBG~WPdx>dwFz4ZP^mGd3U6*=`M>(;q_YvT@us7-O9=w+oTz9Qf3uOBG~ zI48fSAk_181#`gl$k)OE+SsrOZVIGeoZ))sKA7uRT0g}bonujpM~Nh6bI4UaN9*tO z9@XSNDZ1C~JXkbYw=|cnwcD4%yJI6g&o%TU{{Rd14+3aVYkC~gPEeL@eQUh{{YqVb^idyol1WY+-Ul5oe8$c#EFf=p>du- z>@(M>;=YB_{0*agLh!Ud+A}l~-9j1KEv1MfkG-4|)c5*yrs?R4r|!F-KK{!Z{{V@! zKZ*_F4OVeH*LSKql zJU!r@YRt)VHQM>A^6yX;@W83qGmW?%2>0|KtkTBs2xTRdkC#4`&nP})>~fU(Zem;+ zBxKll2c9#LQo@p^=@;+~PK`FH8OAC%m<*z~UrN(Nk8v`)T5rosjt3sqNfqFi%TvMp zs>IUlK=Nebt2q&!$aA}=wF#9OE~RUQ%a(4d=~d!ZNehI>xuletTYB~Nph+MgIpg&P zqE$3An|%bHNu&9hbDp@Vo_8@7BaXcFqDc%Y(V@X^neAESE>wAh{H^MEsk^zn7KF;K zAYe{A)pHsci6=E~cJgBgobK=GSwJnUY;t7v^`b9Pw#$qNiB?mU>rI?nvV#aK+Z6@5 z$=r7V{@0~7#Lsb#vG%9Vx|4q3A(K4xq`G!4yAK`3USo36?NjoKpis*m)EIR<=YjZ8 znz-A(#B43rV(XKE)3?^C+?JPsF`rLbzR^g(bbP+`Q5qn@7w>0``qEEQI*bs^qrE&)zS2D0uaYlF9)gTFm$ zX(t;T=j0WhlfcTtP6)=_b*X)ZmGmEPjGPRPoYivC$9fC6P(}dv_7y2t7-jiE?MQ4L zipoae_r8XmHo6hZsV-wuTO~()_NrD(CFD;$@_Bn?U;x3&gYuL06?X0@ zoM3_*VFGjBhZS<|sY2pAc%(jRmN?@bF;K}0#+xEtxg(yYv;<7Qz5eK`-hKfJGtLDG zbQdWMcF~k3LCEb+K?Q_gXk)p+;eY!707|AV9w~7+#{o{&pw@`AiZaq$W zg=ZruJ!u*wbW;)cs@9iD3HvHl$ZRJh$nL2Z>qdlb%)5`YEQUaEItqQfj!9sv`B zjl@4^fP>KHpc*_)6q3BV3Jjfiy-mW znvEb=;zNcVYC7m&CpN_2YnB!*7!B-uRohj!nZ&Y>n;ivWv?$C$Bx8;`Q|wvcV$w0= z)}GH(Ii#JL(0MW=?u~w5(xSM62El$9){@=%ma7_!FI}}&BV3s#1PzR#BRfZlMvJ^4+QPBvX%a8>RiwRBf&ODVA~Dfy`l~ zJ@Ha1E!G1bKU&kW(x(IWL;wzRp5Kj2u_{QPPPhKgf<>1lobKnhpdQpjeA|pRa4N0k z?#aX~#5ZqzRF?i?{`tlLAR2Lnhp$3?N6od2&VwIH!jASv9$^_*^&HnxDtW|4$0Ie( zUwJUx1weT1Nhi3ksWc$FDLg3Y{{ZT%vOCImV{l%?d?^gL7%Pj79u7*{2_lj}{IB$Snqb>y1Si%z4& zuugJ^E83z(CT8-_6;9#oqs6teVY^gNMKms09OIEtrESK%%|?vEa85z(Res#D%41`- zM^o0N^6o#@InNbA{L6^<1?!MUy=ss&-ocf5Ngpuv9V*n*1&Bp2B=ETH{{Ysi(ZtJ$ zv5a^0s``+)GJu2S&ows%9^|s@jx&y@fGav}MdMa8CeWOd?OL|bo2f*crrhHls%f|G z^0tO2k8l3~RV&z5SFx94c-JbfQGzhsr2haqzAdMk=gwrpuS4rws@F29W>qCdG6o0a zDY7Vugia4DTE<}`H*scQ>4W^K&ke*(tUhe|dQymGjvb(u1HbstvP`3LlY`Qp=4~eQ z87P->lBd~$ttj7QVF1og&Hn)EsxRggKQ`7q>g}nLKa}9-t9Pu^wxXRa4H<2`~ zDDHYzrO2{m^CXk-&qG}MUOEF5ho03%;*L%(0r^gI>F-KQOB(XF%}FO&6UjrLN{J=O z3pZTWe76>=O2)?>uqjd5p9r5?hjfW_&55q;tfFUreKAI#d#1=d`SJ+|Xg|)fn#@WF zbI);9e5t_zu)x=SV-0mljOjfcZh{8gkARG@$%bLKu7Y&RY{&i?ga}~Rm zV#l{?g(E_R%gDuT{SHsJ;ZmQz7BYDI+;LSz?SSW=YW%khZHk^UIXIzO+K7Q=jQrsL z0FhA_l36_E%VVjm?WNOe9iy#ViOTJ^4U7-YqUmZJsFE}c#J9_y=9zJ)EW>#`8nR0> zrMoV2derk605HORjcExhXlCH=p-L+W;gwliDx;p@gW8*U40CdL&jPJT(zpW*pVq6J zDds@vdUmHY>^Vz9lo7fQv*#5!R}w5JrHdRKR84Dl8wn=`PIv;hqm8Z5NUC=pD;jWp zM{DY74e$Ay@)y_Yz9Ya-Xu6KrnjE6w$&M5 z^U|HV0(OE_8s`4nEG{C5{qEzXX)CJ6CYf`N*{bGfj!54^_3Xd8U6Fb>s9B4P<3X9JpQ$t$@iaM;Z? z7kdsGGj7__NMadWjP=hVsazzi+zgRcV7Q(!NNTdZqTs@rFX@I2i0bX&`9QCpabBr#&jvdXrC5NDa_;ecveKpXXKO z^R6b}AmM6jbQ@a)j1GkNrovuE1^N%ll%SaESdke~^MFhBBl^=CYn5^ruccO%ip<_p za69&^(oR-HP^FJ@J9<>8Yhn^3^QK7l?ZG{2+MD8`WNe}jlzLTE`$V!7al!SeWt;4< zhn$_FqE5^J5JB(0u2M}bP8rOEob=6ExVsTA%gGJGJns~sI`N~GP1cl z`+Lz~)iXdyZycMFRCcRNWp8Q-iSiqt#QIb=`gO(%%yW``vF%bMK1_|Uo(~zJq$>>l z+>R}aZIJr#D&yM-SId8xj(-tUr)8B(fH!wFdeRvTJKW@fk(zK;dIp9h(OyZ1i0yoX zgVWp|wXb(<3kgtl9jTKP*jCn^qZN#fb8t8VAd&e~7{N5YTXpJvaaN_4 z1f3XXDmH`YDw0caG}efrD7cNnAmMqbp_b+$xd+VMs_F&YXD5T&pt-qcm?SBT_cfb# z5`E0~x4L7#PG3CJ1PbMWZKZk>S~D#95tEaSDgg{kOj9r3;Nq5z5bRoj2;j+ZrtD#)Vftg%D!-W40FltNp9l~9m3upgaE za2h*P8l1i|x#>|0t;&nL9A{T=-W{sER(;flX@W=hI_LiYtx(z8+}s6O&Np&>t8m%d z#||yP45Rg@VR98B$cr-$M{i2D6U$A>&U;ibq@_Z>8@V-M5tj!i7_8I^gjy(=HpalW zE!28dlO$Hw!ARhDq>*Ds-Pew$sI9^?d2$W`%|xQFWLJ@)9QIQ%#&-^f9MN}ka?ldE zBy=C+R&61-U|a!$KU!AV5;P~1{Dn0Z^a&88O|d-BnX%9Hs?8KjG1`al9=^4CWLCp5 z{*ZSDIHl$$lS}56A zt6dUDZqZB(i}QO@O$$83gT+eHOEg|=g9S%gO{Qpq2P)^T26&;NsN6{&Lngt>^v!Ff ztQ&b5U@=+IhK-DVm1ZCHkFFXty1Ue#9NVpb8b`B$w)d8}PDL$O@; z=h~yOm(7gHKLx#eR5+`W<#E%mNBzx6OO`h>FZ_D-1rCzgp9xu z=wc)*04Op@IUrV*yDWgX1TfDOBo`)4$S_-z%@ZWaapkDmq;(#?^rdT95Xo+2ZO3Wp zjQdkwX#`)p7z5U&ySQ6u3d_kn0a%`N+c!iv9)KFCnnfaOiEgI-)JRDKlU7m&RT9X& zuQ;hJ%<&=nK>(54uRgUeo`5k>SOJWB)j4!y?m*H#!UqFypr6p^G(0}iA5(nBzB-AnWp8gA@J+&>C*HpM40Nc<|` z4^vi}v7nL^77q{=`ettYuwb^x|*AqsgMdm6N!QW52JJQ~IOD#XDdIPITG z+i)ROjTdn}>G=ZlE6ejpSw;vvR5v6{_|GfP<5mO3=N>RR=ij|i^5JPqF+6m^>-C~K zGf0*0Z6J9C#m^-UMml5OpXFP~fp%@($Tf0Ac}lyeP!H)#b|VVDSmLHiWpn(e@SuzKw{{UXDDnqm>IVyY5qhO2ZWU~|;WEAJUJym4Eo94*p z(ymJjIKTnDkEKf>LmI4UkABn?;jPG4)$Q};E_2w`se{Ih><)Oqjemt`{R5Ne(!K8kr`xl7YpVQk-Hys9@ID3 zIo_nrD3aumGAbbD7@_06LnWm4k{hSxdjZKmUrK-@TtA)x$8OYJqcuAtR4Y0MbMl^^ zxu|80ge1rF0C30CzcouTl`*z(4Oq0ATXbbno#UzPSIoMClx=dlK+-3cNfw6-On z5gf52tyP6vU~RzuH8B$8O(_I)Jkryk;n=-rY>5PtP54%2+sm*OJ$R|^r!5+yebO*T zt!LT|*3A-vy9fi*6s3FEN$a4CYZlFtF6{pRI(%Am3d_BUfzPR_n8X=hBmq@!Z_&vr zcn9<`#9st}Fyb_SBY z?o*LcP>KU0oxpb=E`GILB9>%XHsFKE$LCsGu!R|TJv~KLc!XpWJ!@MLDD^H4sSfAp zM>UlbE4hr0Jxxb(dSZ-4CUQT(9`h_Y#fC=Ym#n5%z@V9;Tvs&;c6s?~1w% zNT?=!p7`sZ@TvqRS=}&L_3cwD2|?^wmIsk{s}QT&h=-Is!n~fme>zo=LNMdy#{!3C zB;a93G)C74=2yD9%tR>UcQp(Q!8eudS6WyiOoYyQR4X)yJj6^B#yvggn@@4_0>tDJ zqz2A^4@$7H$`JE~C%so&mM%dY_s6XvyLlW3`GD*xK_IBCtP{NPvTUN`%$puwRDW8M z5b6xFji^7*G_HzNG&#jPrMRMITty-%lN=LG!1D5-5>HB+S>2-8+>z-~KqL)`l&xng zJq((65v7h8)C>XCj-1llT1h!KAHsXpnXTcIEPxzTup-5Nx>b+ND7nkDTJEM;pvou>5=CrOUY5xWO&NIEpsHoaA*MPp73M*W^H9e3EP&7J4lt!i?agkX?%e0Z{3r7L@&4cYcj7hm z{{V@AvxXS_i&t3H8RLz9X9VYe%uX2R&~(Ll74EYKf;Ue8X`bXfGQR#gHag^-?Dd-V0CQWiNJ zQhFadd_vJKwR?uX)8ldFf~&#%}0#Mtb+Pm2!*z${#ucYFy|wWuQk_cIu?;)?Wr?wON0QU;HbwOR|&5ymzQ?v z(eD!wBtP9z{6PB(rEmSKYV458V}o%Ae>on!^sS>dfzH|+8m<2ThDM=r1;_{yws0~! zbMlOz=~@~OggiI>pxU!rER&oC^Ep+=qMiZw#c;Ns5NoLt=YIXt1HY~?c@68ITJP=* z+C+ewx$vE%H{#C1>_)_}&P?lS=VdV7hjx*M{ABa8^@y3CwMm#k$NhIj(qZ#>B za#)Z?2XcC5rVNK24|njsm#5pvx{S^pmQ1EP;DOt=4r|f%?;U8m6US|RI;@i&s18Ux zXOcP&z?%4X!oDi;2iYdPxyh0;5S0Z+?y9^DWS-S$T8HBYh_xs!AhLnrn`yXdTt@Mn zletv&7{);7)0($UnMR(z@$@&3JbONsr+uat{{Tm3!<0XeJ@8Ne0A9Ru^Wv4Zy`nXQ z499xnVt6G`dz-31&jhyg% zoY38hnzpEu!8RHurGC1M*B(?#Hu8AmxyK`>J?rQX5^7!?(|kJDZ0hjEAIpK9`ww$p z82F0wP4ITFEP7&u>QOo6f8OXv9Mql>_@tODeG#B^-&?_QOu+|A%UYA*`H?Jc~Cz9#3)DmdhU zjxcMu_)qZO-@`FWsm(B+OQ0MOxWPHyw00f3^sbM^x=pMzCB@JTQ=PPk4y~y zWd8smU6!@+M@-S(beoyeV_?N0AO<)&QcnXPui;YocU927Ax9*(H;UdvZDrt-?mb5b z`PELUdk~eLrWe7DUi-kecG`Th%PK$JSu#K^)PcwyE8Dz%@s7tuy@J9dHy(I9HiTd)Jy==`E$|X&7C|Ip2;{9zI`M)tkaT5!S8b)^)Wf>|_;hHI#=KBPyf< zcpXI&vqVZOat&s~P56i5E7)#cNm@k2Kz{FG;N+gUQn04yg?1d)L3HxtRY4+x#w~IBc5y2JQ?u3Xco<-2mstN z*}&>BPt^6|iOwdfD%u^Mqw%84#O4WZcSam1mV=P41{jY_o`ah9pALADb;}5&cU(p` zu{>}Gx#vE$@i)Xz2j2WP)07RU!(u*i zcpRV4n&zo%T@!6AeI4TK?FRbm`wll*L$2eGyNsNQ@ym~g654BVYF;0m&_|Xq@wLgw z!6%@{>2Hq*_~A(CXuZ~@Q%P#eQTQ%9+ccX| zj3Fcv4hiYbKAnwg>Q)x5YAs=BRKOX|PDj@@Z%fuKFRdhL*cl`2dwUAvrPZf~{ng*( zJfQ1=_)?Qe6y%aL{3+qhT`p$1)Fm<@$N_#;3J(CScsIr$i8j{BHHM5#=>s1yHUfrD z20d_d^u>Fwm*aGYR9y;arFNA`E~DiO*YTn1ceY6euiC?17EM=Q-|u%}cBJX2Ki9yt#I7C9}7xGY*9N`c>Joq?co?(={zl z=E$4ks=S=i4s` z+aVt-oP62qpIX!SfAITDTMw}_G^`jl4{vTeaZ-4@;byyetw;TnI<1{Dqwv(&s*XRhmB4h`WurAA^79|cGm`CEcVY!S_QZN0^;*7527A(dm1 zMkLviq^awZ>s@x2typ*)PmfITmD#rv5~$1x%X(o!AY;BTE9RdPc%w$~Uy3f`@bO^< zoW4T#Rtj)iBOrp=+Ix(5tBf_doS^S?eM4k?Ff`|q#HsRf3*-}%la4>n>s&qm0K^Sz zL6#|WpEJtNBn#a-5rR2B+lx=Q1sIo?5!e_42`lrCN=ejzp7r*& zpJN`IAC)^SX^sX(d}HE$Geq!h^XXQc%j00*9MPC65jioK@%TGVxT958qC z-(la?fEnG#KG>}}Zk3FjZtQeF95oB|w4TpGXkDaCC@fR}Pd_sAyBWvyubsXXd^@?i z)|TM@>jTVbT;@eNz*QON->UQSQFm?NGY**pJo8?ArTkFR z{6#s2&0lUahZ|Uq_!;Oa-xdDBt!Z;a$8^!5feAU}@&k1o9{sE3O)Es3NWN?RPVz;Q z1MKmE!oE&famn`?>DsP7W~vJMv-JM}!;)y%77cf8F7p@yQT@}5;QQA<<6jmJ4BN*g zhXPje_Ysf@?0qxPXNvhB!`?R4bekK5c^GU_l!B@R=;wG1|xEm2g`FI0Zo&ud4hPE|)%m z1k#AEC7u*_AnyT)$>%5k0Ign7zYY8+;Xe;uTljJ);rn#Hb<~mM`L4vXF(jO1=f7TP z@FY`N%{TUGKWAQ}vB2r|$2GL4eFrF}^k-Y+JuYjh<7p!i!d17ju-c$~c_inLrE!*j z4}3l1s8Y)AQzT3CC}K07orf5&Mb|B_bsZsRVVE}M0ME>aoRE9^X1+bP_=n=Z3hQ#U zfL|_0-s>>klpP0LsS0p$-li=nE0*B-TkL(8qWmcE$A+!VzLZ!<=mQry&!OYJCYkWJ z!?rrxc$K$3(v=|Yz{;G1fsbyv{Y`m|&&B(zZ6@DT(%D_Msb!cDvT^fw%8x@yq5jaC zE~R=cZZ@Ek1ULlnM@)_m2>O~*dgyb>v)^?nZLi?_GXMkR5HZL-jdT7HHa-cuyS7-? zF*yg+;YI)qdBEi3)YdPEj;$?<-DqyUYmLj!I3xMj&arEs5;WAF+gyXrmgYy2H?qV{f zhd(cT*Pm$G%iAPF#VX!u$d#iRz~=;X_RpuiaGoi*@rB2Tq`uN7dz(D3ma}Ath#ZZ| zH(=nLlauYmZ%zc&r4)Mq0Ej$qY2a%=?S)UY7GV-ckDCXU1GxD?IPcQDlf&N>b-xqp z+Lgw&qeZ9bXr1?WsL20V0q&s2e`+7TJY}@ zc*jrh&XsW{wIB;0Ezu0TY2P-qc5`~a1H|nCxFCbwNUVl)}P=n5y7utNMfE4Su@*$y>M_(BDHib zwKbF!nfnjpOG`-G&wv6WL5;ZU*pI@zo=a7}n0($_=cqU}<(db_7`$OTaWI+Wo;|^W zgBqwDZX<==$WVUq2OSN1zJnZkyrSl1Bd;ARk?71hWS*zdx?(n&;q|zZT!mcZpX*;Z z_~+t`+H~z0bTH(FZ1L;Yp{_sUPmBCRp}`e`T|5>gL1o@B;dmg7WR6Ee+PHrR_)kOl zt)R_+e16#sE)c|iWCs}}uhSpWoD#j+rM=_Pw67lNI>o!*Fj)$M9hHMGOyJ_VO*i6I zj+v~ewgBQ)0h2h+eY}U=#0;rCV&7wWB?2S@9xV>5R_;?0Ek20?a_|iumWlemvE+--(amTYWxc zv`^iw*&iX00?dSCAZ^AOk0*?DucNK}RpHCImfFp{u&h*Pj1j@W{VP^&55szG&-T_3 zG+#2X=n3k6r~1@RDMwa0yXcRe{vv+Qk$C&Y7QQV@x!{^J0gwz4w%p}F=y@D<$4)xu z(IoKRnWf45_Aog)P`Jhgdp3>Y%`X1k{?5qdK33XtLHGR+(z(4;!zL|Vq6w>?gmH%@rRTJ5HQy_a{oX z3Xq`af4V)-wL`ioCmqgW)5OW+T}z-)HMM&KNB zLG%WuF7gKz%X7~>cdNyrVWo}UNwTYfzyq#%&pEFf)iryVbono>qW}dbkZ=hcAE&6V zxV$OheG^^MJgsGxS%KUPstfHrjDQ9R&tNfMF#gb<43kOIZY=b?D<*b?`9lMY=eHec zMq1d;&7U#&YsNkxgIx0%d7@ACnCMS!ymT4qj%)NA!CnTNR}o%MfQ*5OKI0>&sISjI zgL-xLvExe*4O}Bj8FFNF19(NtADECc*k>8;YxYx2veWc$3`J;(BY8`-5slt}A7As@ zuC%_&8ci!4q%hxD7qPvKO}Y#tDd3M!t$c6shHJkLYr|PTyND@h&|}vG{{Swv^oNZ; zA}*63*`ooR939=U>F-}Dd|STNyl-y|s)dypWmBS$Ty-Rzcc{NsH)~vXgZ?zjY{u(S zfML7z$@(7u0F8S7nd4i38AT_QyP(H8$K}-5is-)tH4hbNaB3GfqfU-88IfZy&Z7r| zxCO}1I6Zn*h-2{AgYV|kw29?HBnv0lG4*RHK3SvO14r+Pq)GJ^+v5@<(TQyG#nZo>m2$X#31Z1oz{QO8Was_=wh8 zU)ZjsLnLF2^6p_2jIougfPpRZ~B8IdyQE8Z8 z6MizqYhiPucuGm3xs(!RhaWirjk!7bdCA9o4wdrv!_OXTz82Jg)TMi*l!ajIascGE zPbB)1Yv|oGLGbfO4W_~K94}4);~v~p{wDYX4E4*8&k=ZcSGCl9EC%fS@*Hfz7$d)LZoj9r>Hagj@aX>liR&sx z-^Bj_D8Th6wPxdUJ3F65Ykn=$7&Lb>Ds12r*1lx;hvVBcw{fS;vUy;)$k`t+Z?6@V z@z2A)E7m+dy7z&DPaN^gkRyFpQApd;r%Ms8?;=k@u>3#M^M?xCbzy7{8F1$x1YmTHuA+apUTs* z`5C!mg}@+f#t0`Tt~sJ`xuurps(fMik#}ztI$gX1Frc3^KYJMHr>CZK_*aQo_>$LO z($npho3eAb^#eTP*zxtKd}FTO-Cr#C_RTs&fI@=c^Vfh+PSw&BvHL1s{muu-MmqHC z$of`NgIXgiYSKF>z8Cm6#2;kUuPqnMxA~MW%B~M*UW5b4?hkt2@dm37k)(fTs-KVr zLF_wMi1@GLyLcx>{{TX^Yw3%q*gjAIsK$W_?u0GQ_ZL*Ol}}_JmZ60501Vk=${NF z@*sgOt|lEfVTk9PVEnvwHMODY+CPc3*!)9lYGP}QHr5|96WETQ<3wr6ZfhtzXnK5p zG`AX3Jb*E7pzu`muOji+#oa?iwPn!EYd9llVYm;d7|wpRjqzPIT^GZzeWU>*sNCal zR!}_$etOr=`enWEiM4OH-$=qUf>npz9e^Vob?ePkVBVtH-JfT8FXC;_i~JnW>*5*Y zxs1a+Y`c@@7-6-u!R^O-=cCfRFQPzW)9oXN%Z$dMRA*^9#(JJdb6!uPYg$K!^;m@a zghYVbequ&{&;I~gx{YVzkHgsY`+YLjcamF{RSD%Xs3d@L#~2*vHN0u3ZZyVJ+aVNnEXR+D*c9^Gm#hvJ4pwx1mN}H*N$u6G4ZaK z;(2@{I1_%ol&H&_bgPdpA(z;8}40x94!F8<1w$+#`bDV?NkJF!}OIm1D6HN0f z9|`JT+gtR7X)VhSn;AIHJv}SaHIIR^YBR0X-0IQsv@hTH1fB*5rFvz>%(`x#XVV}7 zqCyiG01wjwymw3Z+i`QRCWke)`4{DpgEF9QIUgy{)4xoLnLBQ5;n3{X{vU+;g{8fi zP+R2;TLXdsL)@0nAE$hMN8leBYThEWk5<%e#kS(xqf@&890QZ<*P#45SCH$vr-gMC zxBGppQp*t!9IknvMK6kZCQ-*h&3U@{1=mplg^rLJCYSfseTL!2i(d!K%_+WcVf z#m9)XNUi`cIR!+Wunz<9&mU7>!SFl4SKb{GY8NW25RG!df$7(FdC${~{YF}nOHwSX zO>^+a#<#ja)ZtZ%Wg{_@&>omLAm`GqcuPRJvjXQ{j4jN4S38D5;Dg8FE7M>0h4^`= z-Twe%-CV|!AY!h>019;&Cp(DF+;yxwuMp|_%dV|whPSw1F&K5)-81NM+Od_a5uLOw zUtD6{96rzDBe?>pYBNi5ro6~wEqB#hr|9NxYGrK6h>fvY!`6fDb5Dbj@UWv$6s8F#X6UXEw(t2Y&j^e(R(Y0vr5fPnMLOyMyk9<|~yIj%7L*0Snb zqqMtBS}LrH2rQ!?#JzGyO53*h@!^jXX@gC-xesvQedWe?bqWt0es%f7f2>&E-^luf z!@r)UGv*RYFYxrndH(=CE9gImzq40}W`@r9T-BKuXPY31ZIgQfR~g7qILPGwSgj)q zYHF0Nq4qA7rC8WZ*Vgc=G{JnsftJTi`;6B1k?|8o@Sdw0>h2Ibgp4-{{UTa zei^sE(yXP??#n!Ccr0?v0LFOf^cC}0?J41ne^9fr*Yr!-Ee4-DGe)@{X=VWdK8ktA zIXFG39aO3GKUTac@iNx?UbeE+e6^9J0JAV?)qjZPbDv^3@9kfvv0c5*j8c@_l^FV0 z;BV~1ZLV90A@KtJs##=0k^`374sduJeGj)a`|yT4i&z%d{Ys*R2RX()`TXlCv+FX* z+9oB}maVuPH+spq1YoGaHKV9HMK%~?CzDlfwj(aX*V3N)9_2qXAhF-IyL$6bZMl3& z&}RU8R+C3G@`)XKbjKB4q?RI4c&TfZT)taqHJ}lVo3LBBsshh!qiG}$db*1|qj?06 zT6~EjO1@`N+Lf-1>L!RKgb&`5Pu8onOE}uck4l7xDZ$T5sP2YbnpsjT!npqcJ!+gEXm;MrKt8-2)KgD$9@45wna~zJu)-bR#&Sc%U(2CNSn4{X=YdbI18-dO}DqBLj+*_k> zZyO$@cdYc>(eID%cFj8S80L+mm!l8Tm=-u;NEhyo0rabbR|NYO5>vx4{QFgZHB8Ll z<9DyELn!8zHk{g1EVt!Qgs_Qn${IpC1*WR@uvoG>L1F6kd zlHMPNE~LRX<3JtAIe8s)U~`53!5(?7_7Z~*?E^?=VL%nE^l*BvWX zcw^ckc0R*6tjsm6pJp-d2cvy`Y0B3J1Xy`4V7K{z%|O;Kac&-el#mDu&5?f>@cH|%HL{*5B(4}U6Xq6guRUihLnxeG$cl{|ov^Pah?u7wa1 zMl(#27kPM}Dmfz@kMXA~Ld+qQ5Zy=NQ?U)|B=*qWFYhz8dVx?}#cU!9oNVZQDoGd} z{#udPW~j{~$gL3@SYs7&cVm)eoij;^pUy+qpRHNcV3VAmm!>K9FC=#3dvodNYdTAt zfpARYBBkzMDH>Yaz@mF(F^^1~nyxS3&BKy?Jt|k6$Q4_UQ|ncJ%@w??!OI-v9-vU3 zr#zA*l4Bv;j(sYX#Maj7@}5rz*EMY1BntCg9)E||@vd>!8{3bx6SU(P^%bIb&}vrL z(X*XY5c%h}I@X-9TQq`H;P4JBF4D+2A)D|uuB1T-j~ll4s9W5)u4kzsQm1m9j>4`g zU3q&ZIR~X?!!wuNjMBxa+%3$aa1{puf5x_yN{n>~=UB_er2MqW814**uUezIVx5Q> z-ggt~a0Y5Ci@2>91QyBUdJ0z3!`N$19f**e4yV$R9j_k-nY!IA@BtycD|s%m?dIys<_^kc@-*=Bvam z3{4EA5Pc}Pc@`B?xCz(NplOp3tiiK`o@!{~S(wY+eQJ*J8Z3%8D-Ln%O*eDHI;2Ut zP67HJ^`$s#sFjPQ{I+J4bl_C;?^ryyPDrG7(ESKl3Ezf z>tmmb{Tws6`Iz_ZT42cWfx-Gv@Vt^^ZUE-5HL$mf%s-VEO%4t2Q)`D2;a3F*Ak!?h z5p#x5{{T_HTWcO`2WYv58Ba!yt2>^sqvjhUjB#ka^Fo zS3@*+OswB2&Q2=!-?3(UKzYYX&AT#OtjVrzVY9Pnw-8UK2D2g(6jX>D=N$K~E0Hzk z#+6E+ezj)82;sW>IT=3m)uhO2Ugi67EHQ{!^{A#3i8kD0%f}cTpRG@G1FLS0v9mRn z_fwfipM%E~>PamG<#%BW@j-C$TCd0l8@+0jX%)OojCV-qeBmYUv>|6PyFo zdwnR9Or-8-Zdc{-03A^2@!Ch{wAeDz}BXi zS&|taH?j$u4FQGOHYy{Ig9K>t;O0mnS(rhd#9|Z5dLM z4C94wtwB2{`h^>py--3HESG5{Uw-tL*K219E_#qX>Im)UR17nL$of@1Le(`ERqmb7 ztxMR`n#Q%eCDcmDxFe~nAuiFgYxw4>Y3gkv`G)U$wQYBDyZ4+Pe+NWs#ZO%61no@S$9C{Q?X{pR1aCdh#(*2m&M6jH0{jILD=FUlzH2l635UtxJP6g_6*y(w%}LK5q3|>Gvo?Hih)>PH+5jC%V2O6WQB+cI-UNvB>r|uBh28ZV`}>0Nf>#wITg_(>o$}o= zinD1VKuH5}Cydm(jI9m68GZTfRG_ysj9U|jbX9+tu1M>F(**SVDrg{**tCG>>sZ<> z@m;eN>Nqu~gEP4J_VP;EtgcA+J z7~X0Vxr%z(44&#aBUt4mA6lY5&f^0hjzKi6i!|@El^p(6M%&G~bA|a&0;%4{oQCe7 zYPj={%mqn$uQZ0(0(u&LnPU1>4ASynxb&?O<6(7O$Fh#Jo~vRSS12X3THBrZA6kL~ z9EeQCxUGa?B7XE_uS%sU5<myLdHvFDYU34|75c z#6btzpBm2!h-G3y{#0pl`NWKI-md+eJlj|t{{Sl0N4Ta#nKpS!c82Rth94z}J^PB0 z}a?PXLGM`3Zu$h_+?*+QI5=L*S0h!~y)&NqsA7~z-DOR z#JQ{U3B;JjmVVRKyjNIuR0B!7iiwBINso!*)4 zNjp1=_GP(Q!jTg0RXN31HqUZA*EBdrMvZLLi7MtEKrfjbTlwM8sw zw&0=mryJQ`HjWOY<06>oVnGW0*z2EDLo>5$Lab#i6uS z0oc_YJq^Gy1Pj4GfU63z#UIKx=czS4N{^8go_6di;RmG(>nf>HjlFYLT453d#|NDI zQ1Ys$$~ZmhoNR>Mgd{75#yzSw+DKLF?N#QA=49O&3O!F>%AE`nqX`o%L8xxUrZ~U~ zH=Z_;#yi#@l|Px0_c|Y8Te73gF=<$W-E+=yS+`K!OyV1GcJsQWwYcCOvQ3|$7-!|mnmk@NAo#c z0!}&gBceApKUC0$DZms)jutwQ02=UocF1c zFF9NgIT;3q$8$dFa?FyeVCSEI!lp^&lm?R|4svQgvaFEq{^6=lTu~zQ#9X2zu zcQc-t&*OnmiiB)K+_`akz|vas@WD939OcHH09b81|-lx0{C5 zJ6F9?Sf!2d`NlXE(P`Ic8_IL??amLVrOD90B3Nd4$(O%iYK8uzJZdD3cVOe`nv&!9 zk_TVA*0L@xJl5X`#yc8vhe2~#yXGbAUS+`P{OV}qSpaDG3(aCY(hGhv-k^1@%X@Y) zCzw34ago8rT8*_2G)FYdNMGmeNoy#VadjYftNuhDVcqjKKb1n}AfzglBcP~S=v_9* zrd@y)U=OV}5SJm8XCQLNtw!*nh&+ep2fba>o6C%pT!Yr8QPRbzXhF6}BL(`ef2~Oj zz$kag8Ryu0dYZj9)=wb@7>xZZIw+w=`#T){YGZLn%%vuxrb1y-6dZF-n8_msRv=@5 zYE6*ADag+~#Y*s`vZ+qqo|S7&4CAA@muYJRNJN?4yC>ZL0EJ&^y#5m)4#J;tY7z3B z57++y)lW#1_BR&LkW1 zIUa_hQn1t1SeAAml?tThw3b$iW4LCi-c2OdVpQR?fCq1_M+^CJZMplyp`_-z50_mH zMZ1dSu`2SX>4WV;!wV}1QZvnR_Y%#LZNVi^2iCWtyShkx*G=q$Bx9Q14U-upAhmfB zl^<`RZfiN!qCQz{?dzJ+mg*?b%Krewc=YDE`-y;X5ahQ^_oXz_xYe1d8m{s4eFkb+ zm5|Aq0|Izng;2O+h$V0GX|e5{@VUk_N~9PX8K9!*Iq--KnjM5Y$R=b+zqg#F7GLMt-?rI>@I8i9c z?~huNNYUIe<-bab+%mB-5&%8UPHEcPnN;4zzp<*-oIOE7;poT%g9KD9>DIpw(6 zqjL4;le5siM)W$EZ5AtkF&qM*<369(t8ZVt!yt93;{`u+FypcJsN{+m%OZ1=PBBJR zQ$>53g0A?!=pAXQL5X(cuX9VZiPaen%=5)bcIXk13=c{k99!Z4LOWg3R5^4>M8Kg za1cU4Eu7^409u8nSj+A}r1DR#E=%rY-L)RmS%?Hu4azzZ)|{SNsdQ7b9+|3fsLz=q z^f|3RFb$-h2VvTyZO5ZVd~azw0)sg9?M%dx+%ho6I#r1h)e*LW8TnIGjMEu}ZrI0R zMXs!Z60tv!Vw>$39OtcTz}j>&unUsIHI&E9a~y5CdxO*e0M$s>0!c)KbmJm~?6ef# zrPsfSovn7{Hw0she=5kn6Qe3Z*cGE?AP$WlX1B4KqooqIHr}EJl%~6#6f(bNFUxEX|bg0<>WX_ zaqsU@OJ>E3G37?!K9xJ~k|474>5pns?8cRy#6*~e2ZbHYK`E1PMLSe+ik@jCAVg0F zt1NOt=2zu?D_VA7(|ZvIaQ;x_9+fQ!N6rFALpfJ_|Df*J`uc+PI4|Jwvkt60VR-wfO0;W=}1xI1(cT~)2(56+f=@? z@U-S4@lUatHiFH$MnJ&llYvFuwll;pbpCrjCVVc@yhk<0=_QGbtZ;-Jwn)xM>7Gv< z*PGk?C$-Y7V$-irof0S;n+JLI#{dD-73}stB9mFUxVyMjiNls~1_5$;80tCAFNtqO zmX9^lCR`~hF`RMN@UCi?y^--4mw8zH^VR+u-RQn7ziVwXY-=|BM1-p;861K05<26* z6}_wKUM#ajY2J8a`~Fm!;YXwoj(7qnmt~9%C zPR@Vc%Nb*AGq|AVBN-y|}crytuiO&5kXt80ASF$?9|0n&muCtlL^?_e-d4CN4fxxHlOG{{Yuq zC6B~^6vt%_rK8$!w+^{tcCsSe-S-LY~+Ib7LTll@J<{yln47S#Mb7&5!EVEn2 zPm_f)syC-Rp5DDHDMrR~w#@b2GV@A?#ycBmBWUxu4Wn-Cw74S*{YM_-n)%~J)4WE~P2v@qv2h~HCj@Tv9B@bFRX#9V9Wm|n$Qh)V zMjxE<&N2^1KE20U^ndtS-VD-wA8)5=rdg**)h1SqDywbD029x)IODZ+$|)-vx22Lg zE6)z-{x^y%3!|~^+%|9yLF&Il>}#acya(Y=2i*uIbhJlc%jT6-4nK)YV+Fbq(~gzl z{{RjCDcb8d^G9(H+2vAQk02D#%zI;WT_>xI3;+5OTVCcC!bJGeB zCmpj(ku+f{Z8n+u2jMS>{tt^xp5bp|nQXAEB5lkV=c4xju-Zk*|i?sReZWUaU z>4W(i{PxnkC*nO*!!d?cjokT!gUDq+D;x|CFbAb|z72c#)fYePbc0N|aV<2g0**Td~)JRh&YG0ak1 z0P87ll|yhq85u2}Ij_)*JyCS{P1KAGN-%cwj@>KGd}-hf6U4Wl@Q}wGaj_fRlmuZ% ze}C&z)4hzPD`?9yc=FrD)(>l;ZcBv)VM0{N>ARjY_4KY^!*F=KYR_%rF(Sbr-oTHP zvYclFzA^#nit^6_XkIk%=ZS=(7kg%y;!=bw?)i49JwQD|o)233t6A|ChKr@O_2>am z0W&soxa0YpRarzSrE)Zi#wHQP7+{}t5KcY$ubDn4{92k16~o~O?EK3aV)G=E3}1Sl zfMW$QgOGSU8tEeV&!pPx;bxUZsU;df3E9USA93$qMdMG1{vFk|5w1bCi~z&DrpF4+ z(~uhnf=B0CMLwpykFo6j7x3`A%>?a-c9_-vBWj_pfi)JYS+{w_-x2 zq(vDE&&!dJIs9-bbFGd=B$)jnG~G5yEN)N+BYtty9V+zRA<=9adu>`phDg|CN%D?H zM?U%bQfhkt0Eacb7~NQ6DK>_3!wkK^&!v2I@r}G&e`_pIA(=>AfKFXO$lH#1APi9A znlD?QM);&?{wb0#v&tk`#^6-$QX9TO!S7y1nyAsdN-QlR-5h@_5~V0Bqm zzYqA|!_fKKn}T@NO2?4` zhPEzP_{%_fL|1byu}%pYz|TFor3X*ebt7$QaS@hIa?O%J<16c5BKYT2)HJPmbW5l5 z-PkIV{{Srk9akC7Fn=oOd_ALFcu!K3#QKAn3;?qvpC}GF83&Mm3a&)ehSrux(oOK= zP}A?y&1OFqPS5gwI|t=$;#}_4;X4T+EI!b6;>$E4S+WG zJbGiTPZY0xrH9kVfA@R(R}JHha!K_#ke|AcOI;rdO`tikcx-PG)=^-@emD%x- z6?wty!0*jed3ugc`x&1Sd~M@T2x#vOg_)8`6@iyIbYebTsf;#H2cPH1n)nOi&Hn(z zpAXz=I;>4=e+F%?BP)-cN6)oSBd$JRIq95czQ>=yaCoN1DD^cYe6N$kWOK=_>yL$+ zZk?mcsV>tv8Oo?!+S2m_Ok!~9G}TAIbl=zWXe8>4SyCbPVL^~gm78&r1B)MuYs)$vb{ zmeAtSmwFw+y%_%hO7On~c*{(`(%`Wy;z>YYryR3#d)IM&@ZxP;nL~vulZN;7_p6MN zq?U#bw>7WCQyjX)Ya_>ytOnhsv7B?pa56oGc}Iyp9sdBrJuJ7H17ap4L+$1&rL$_{dWN|)h>g|xpNTU=}2Db^;tx+f7qu@EU` z#`1YM8NdS{TJwJpX}aIUY1&T?L}EY-8L&VbK{zA~jP~`fNccPO=fswt92&TgCCjrR z-@9lrlZ@bJ=Hs`2O0I1ZG*3@6)4Vm{ZwmMyPoCo8!(2!Hr_3bnLB;Lf?&l8K%M3nbC{Wruz%F$;_W!xPV6a@edgC3{Q z3a{Z^9_PYVqTX4I%NJIB_w?(JYBxijKF79cw%SgKr6e%hDh3Lq0gjvup0(s375oh! ziS&^*oRSNW;3y0N>~Fo1kES`|y`REOr1+=LjU`rS0Fa>kc_*j8TEg+;TWQb-vvIg& z6$7a2o+&zVT90LO;Xe{X;(rQ7C5(+CEx8RMr_Kn*K^Vw5`te+bmEz4?P`j2}fTG%W zSrj_+83P0^c^U81n);$^cJUpsNFxSk%8cV69y9%Fq4+y#Yb;YqaNreXnhY`O!^2rjVNIbDkgYy@!e;-wdyqcH%$a+;hV=59#>Vd;b6k47yFT%W4c5#^#5( z?~I-gVO<8B6^Di_VbbkFK@?*E0k^(RKBU(}dE%WSD+{eLt|K#)Do{G_Lc@%YY=es0 zP`MJ6c4xv@AKSXWi!UI&xO9rrV-mwN5>x^5k&KQZuKbnyk;~l~nnN#ubl$&mC)=*E~4B5Y?AoyO4PajBNzTxMSr9 zBaSoPoL0IawH?pBd|P>EccHXagl;$`m(%NCm>&_mO>3w4#$75XkrDzH>9d#L+XLT# zdym5h-n8$GHw)ow&06U{cOATrrcCbWa5fJ8Fe~OSh1SX9A0IZY;<$ywY9>h;h#Lfl zovu1AM?!nxbu|`i-U@9i-1-mVAH#nW-~1!HgTW6Rn!+Sa0&l`dJjE@B#z7J19g7Z5 zE5rOJ;I9#Q8$xM3Zy;%k`QIqw0(oRC3EXp%2;(10`~LtJeH9AFN3_OB`U zmw(~g%>rv>3oqIf#=%cGIT;?fJw+y-=5poK=sq0y^GzBZtQv>SgvR*~053utJmg}y zzlq-(Gz}wJ7Bb7`xNu~^C3X&eQ^tKU*PQy-nD_(1y4Bq0NYoq3uqV&K&qT)_z>~=Q z_^yM-{{RY)iteJ1P1`D&7A4$%RV3$eBRB((sG(KvG}3w+UktoK7sQK;nJyxhHU#a; z;R5H3H%;E(TKikVJ|EI;ARlQ!NsnR3_r3Z|xr$ ztX>>|!)VGkAQ(k)_nAP)CcCXK;3tQ*djz%;9X@HJ!`#Fd%rA}{?gSD$0x|7deiite zq-*-o(IDGP&{{Vz@PgI5^i^x$30b+~;!l1~&F76Ho&GH|W$3elz>5BEu zby({&T4>@_v$kTp*lb2%ery4bGt<`@t_H`&_ObY>G^=o4M|DlafD17IC>==WliIX$ z(#J(OHtv0~@W)Bf{vUV-&c-!cnN~fs%d`fOvQIeVft)T$AXmHmJlDJvccNWBr*|Et z=a>Slqz{n&+;qu3{W$fm3&Z+0ogaoG{@HD_mET>zLlsQ!mr?B`HZ}9CJ;vX@E%${K^K?}g)K$>Stwm&0<>n}BpBD89E#Q?bo^mg|xY)xs<|SG%csSg85<%lNsXX@F`^&_djMo#i`kbar;AEb> z{{Sl0)2(HP!?S8SQ>d6D7?k8?fZ!4`Mr-7668ursW!0zCpE!4tO1p zdi2X*AL=%G8pmou^ANJgIZ#0B%~g^`si&f5hLhnPU&UI#_K%4-VnM=&!xhd~k&KMj z)m{(q&XJ<3L3BX2$IMSmE;%QycyGhs8(Zqpz0R^RD>H0J$or!J7UzOac*g_Qy>n2R zwGA#vtxpaB!99JAV-zW^3h(ig!}>Rht}XP{U$e&BR!47^M8^ak*w1t8+PqW6{{R+e z_=)4YeKSKaTt{&1lBsM6)jIs$8-Py(2iCkZ#lH@ID1Ei(iDFn(mUWI&K@M;gat1*B z`QyEKKZ&h1%?L&;Z02bW2y{{xj!xF&JOhk+RjDLpN)KBft=|s3J>fqI+$HdcMK}ix zhmWc3$K2Pr%j3HVEoECFoxFW(@|#8Rwz;DC76rU{UglOwm`LrrXRvNUk&Xuy?YRhREOWS?=5YKbJZDW-d7x8aNb02P^MfM5b}0m;X&y=Llqzl8o3>B_z$ zc%o?#va6iP`)~+FCoI`G01p2Eg)fD?Z#RZ*4BDK_F*yNGUA=kZhR;s5@z3oC@h?H~ zZ;dpl7)|z=T&kR4VpdVcc+Nlqm9C0$KSWnpwbeW=adYA15)lbl)EsVNG6s8f>)O9Q zG;a?4O7WkJr_|!Lk~TF~94^!`7T6nGPwEZ;S+~6rw$>?n@YjycpM9mta9A^DO~?V0qoZJg z*#u*fdVAO3-wb>qXQtf?X%y~u0iTn&9y#;^z4yd^7x3xP{KE`lD||S1;|vJEQhDpx zRJro*Ys}L>Fnm|2>pBXg8e}YQr8tF84qrF`0oRj^cdqxt4JD;m7D)uC z5lAb`oH<;Ma5*^Z(wm*tkg6t`;aB?C{3DSQeI^D6Q}5cmPgMAcqImDcFX3y8f3!zx z1hKm=<;ccQ8NpIOQ~Zr}zYt0BriyQ@knD`|5OM=_9C4iX?Ot8*Tfw)<;$f;?##1Ip z9wflZoM5pz=)fM`D$+>>&$xUdVxPlt{i;kbUIFSbI32qI$KhWk{7&${i!8MV)HIj_ zq|VI64}@*7Pma-;k1jZ|k@Okq_*VfJiu7GhNiI|$B0T3KEC?CK26?RM zyE0Yoe7m81Q@F6wV;b5uypewGm4OZNjB>rdAI7?$4EUGC+U4Yz)(|bYC--dGNZYtn*;fO#ek0|E}=zZ~bD{{V%0FN3@xsA&iiR0MH@(~t43CqAb9 zni`%d@#d}J?+eKlrK>&A+QwGNk7z$RW5y3ZD6cc{hsVoL6Fk;B#Dnc|y2Z3-2YDfR z#t$Qto-6DPPvQ2J;=c^xnk!Kv#q{{Y0!G+exW0}etU?gRul1+o14`@e|dz3^U=vglCxkwgdG&H(%~+rO`R^Y0RPBgBP1$!z7~BWc59 zhCJkV{cF%K{A;85bHi4i9PvSErIHZ}5DOPnzy-Yr)YEcra-%6d&!0S1@j7j1Qnk^p z31*WD5NC!b2ZP3com}&^%_PMPRU+Rost zQUdX_Nf8W53PwVl9G<^Q^bd&m@Gg$`Qovb6QaXUA=44#pU>}(Dz{&Ki+?g%(K3Ti} z07AY<A%h&b9XGCPlME9-9;c(zZ4z7CAQpK6{}{o12~5wVTg#s~)= zQC}s`s6(n>uC1iU@~6zJ5I7n11Fbt#@h6D0O z{wnc3|@vqTEx95GxRjCR56(Hj6kQ+ad9^$kt{xIodPoKkjWFl6X zO0#a@{{XT;2OnDaqvFrQUl{l^QvU#ii^CJNun<+%zEXogy46f#`>Xpv*S+}d_nO+__b*ER(BURQQYiAXrD3- z#4hE)+E@;QpGx~j;;)15ZhRvN)9qQV8ROZpc?9wEdMM6M(z+iFXgW3J(D8d)#}(6% z0m&R^g4yZooN>>+d%gCxp(UIs?HrNFfUYoA)O@)Fbs6HbmW;J4=zR0==i&J9ZjjoR zt2?#pC}tahj587lL5_pB`20_F$*e)= zVRFjjfTshD^#{Fs=Zx$$of0@Sh|~o*AQ8sUa0jpd0IIZ{Y_2BSS`+wh;unT>%}L6K z7f_&iu$Vr;6Zem`dghVwD(}QPE6XG;0Jn0iu0w4haxi{|zG1Z*H-@jSFZ9SmJiNAX z$5ViDz|U&+4G-d{g|D=!bgRgRn(D&@FBstbyyw`C^_yB~T7ydL^lbxQvDGg~v~?pH zB=`DO7sW3R*!Zu*cUCt@rdCJt$sHdU1P}=v^{y94)-*p2-i=1w77`Df1J2xxk)Hg1 zHN9=)9XG|gtd`nHV37fqZp8Ei5B~sNX-*Ev(Mrht$np2Vjbp;P)OYu@87#vC6M#pd zD&wH%fyv0{>Ghw%uZ(Gbek}Yz8YNhjBUSsX$`0lv^0~)Mp7rX#7JeV!>Rui*;h6{C zUI+WEKOWWdwvXUBbd4r!-B)yS?fG~IJbQE%e4~SB*s*w*NxHvCE!Q(mlA&>cGlB2T zdNrqqAiluVBHZL-2Lxb`PL=Vu!OMRYNvtNXsKFq$mH-2|`A!eZu;-D%dOvZhH00-+!D+yEQJdetpS|(3TN~SpGV*Q6dl{Q$TngA4J`uC~Im9}MpdE>A7 z?@>x(ja4y*Kb>ghrG@y{|B9CgoXm6k}A;|-E}RYE;Q z6xz7gh2>Tsb;nHf_Nvh>#8L=}R_~F)6*MMMFPEM%$vvo&2;x3t6Q63EJk#DhrjPCs_5=fdf zF)+X#39ab9R$%xC7#ZTD)Iy7OR8r@msX(C4ZUWa+?T3&C2iCUI=4hev8TQzLD4!sV^NQKts}zBU>G>>N@JA@ggj%KZ=VOs6+U6tJ&iQ9GfL!7Yi!H&j1g5O zw88s8;10w2)|AZ}FgWD#O}mslXd}V;cC576(JL8(DMN=laoBo_R~H^>mJ{-h2<=vl zyRjalueCMQM6DPc1RWf{lbm++sFUnMowOX^Zb(=w1H5Ag zr`D-nTk2xW%d|6s3D0q!e@dMTgdxu3oQkAwrk&o%?!^YHf>^qP>mO^Cy;}g6=#XgVg>sT*WI% zu}%o>SFJ4W5+Nd;rG-(Fe6cUV2k%owx1nJX_Jo(@$5T}!7V+LZjHQP^hvDr`63r%7 zPr%f3qJ#+%%O1F<*Fs!Lm91DZ+kX#SinJa+0sJd6-WgDlD8R-=PKOEMEVZs(qu(l!Bws(G{phmCIJMqrx1Yn-y!#45edi=aX3QwY+leUWcfyJ7ie5?*9OQ zinzp5_ec42#}Jta#yRz>t8Xd;J=bH?H9KlHmguT7T>5sbo6SsI0~k2tHPWd&T+THK znIM{DF6;n0RhNbf_AcXU=iadG_M?d%gK@~sZX2yS+a7emSg!qtt~=m&>Gi0UDO%{4 zh>uc1YZObe9BlQc!lX&H)C3s8^`%W$MS@cWvnsoeKs@^A9+j~cqoSp#h00_MFF8Ml z(xG8$Z(<{hh3uH*!C@?8<`rSv&iP~;TNnq{oeS8kTb03YK}?mo-n|7(sYz~c8Kzi{ zM^^~Po;ejVqRS%zhEOy4Rx@3+5wU2_4-?6I%cawy}oSZDd&&MtW9ey zkOpP|fs^iis-~ZD6noMY>A`P*dTlcayB7joG2Lno7o3{9p%xO~#Z>LCu9;Yfs!W$x44LHzCacSFz;q`A`O+Op+iW37CxU9UHH>VF zvBPA~f~N~rr=1}?BN+tnYIy!u+qZ%$JBW9~u?NlD{0%LT%hu5T<*p>Y7pNgsTN zBy&LqX?)mI1JF>kBBLcU>NBHA*igCXc{Ln&63cEQpMnqNiX`(F<%r;pgVuo|c35Ow zXQ`ys^%P6CaYkP<94CJDm3bVk8_IwJr-9hi;JCPG6m3-L=xGBNn8e(V$WmH8OK`mk8?H$>BO5dZ`R{*4v#%9P#*5%#$^^Va82VcM^RGWs$BS4xAi} z(jd5n0iAKXrhAT@Q#(s+n|brSCpxUFXB5? z%QP-LzK%JlmfAJ@gB#B^UgFS+3^t<$y0v7a#+HVFyOhC%WYI`vnqYHVwcNY5;M&zUECG&m3~&>)^_+&%&>q<9-q%OVk?jo=b`keQtn>H zio+C0C0~`QFFsCI5teSXQABP>4YxdItV3}GZde=z$^5Cd#*3v@BLR?P^PgJAzK}%g zHqG5|2lJ^WxEBoV7D4Jsry-U_3diN{D>lK(#d`*pW)sZ2PvuixiEpGTncLSrt3n9U zP0D|VwN{$pVp9}qK^?s+;)v&CtgWH8kIJ@8W0KyVN{)NjETUplac;Z2d(y*wDTRcI zjlZaSRS>?Slqf_Gcn5KoO)Kg-c{6Z1ic8s_pA*tNA{<3;fj;` zRrB;JPgAtFo>`Z4q^b_hPibXGK0wan*zs7FmrZjk1~~)r6@9~uBy2+Gk>0Rv+|N?= zx0xLNRFAv8S-7>8UnhWT26$cBVu{Ky=RNBAyk$=zzGK#!wSmQxHKI$8Er?)xRAM6? z!7^|@l?lFz1@rTQI*#=tUHQbbjF$Ytr4^{6%O*HX!7sij~tf2-y z^N~XD*HcQ3t&MX4MPNxJ_C1YPFSXVyjF3(V1Da)<+zV3vgOY1b((M); z?cB$$FSIB9XbK&?^d9VUCgb+W2H|j7Ua?p>LVk*bLm;y)N%Pr#fk6v zRE{Q%i{~W%LZ7Hh581-7&(^L9BClm*9iBEsRUBY+>}yur%0=368ysS=Eh4x_%MX8` zt!pbdTwQFmQAaIer@0Z^ zgm<-K20h>rR$QhaEtu z)yn|Rx%3nyx{l9cU9u1xrfTTsNl=M=<@$uF4ScO58@s_s@9rOG(Tr>R;Ng_tw+ zC#`RZA$Zv~Ev{*1eMLv0J8me-jL6Iqm*^Dc?&3rF{{bH03A6Nwjvw zJ~U`v80A+wtvKP(+H&aC;7dwc=)!7c5jLt8Yz7 z=hW4jAt^9GPq%DTQ#6n+#cc7`s7orCyr>w0dY|i4TUtqxD==U>1MOKyR$ikcmQyH< z4DfzpdQ=NMmhbj-UzyJ*y-9zy7)S>_=^~rWMYv_)5Hm}ZZRx47*9jIN9FRV2bgJew z5wpZH1w}GT=YXq#d;MvX+zVFnT=lA2GoEw165Y`dl>}#;R5JO>%F3tbJ?SEpJ-}nm zILD=KfPkx$m8GLrE-hH095Y==WPi8^>s8&^fq*F^)~ro-tAQEEImK6Ev&H5@!w<+J zotdOjP{71tUuuzzcB$bF8hKqx^&+E@6+)|?wCT^534rYsUG60vM@AwJ*cdE2e=3w& zk0kkkan$#!aYs5Yoc$DWOEgnG$_Sq-Mq8f$07_iC=wC}BZTIcZC%s=Sk&M=)e`E6r-GB%AH35Ns>_d=yoK~g0JD*`EXyj+D zW?e)Gb+dfBoHCzI=Bcd}Tnh(m^BH+((wlAd%B2`c|B`u90paFRp7|$>L(ux&^r8jdu>bRrsX3kwjLRc0rU zc=oBcO3WcalbVG|0fU?oTB~&%ffm3>k;!9L;Di@a%tm<>)biO2Db6YgZ-cOv`V0s1Fve%hV8Ck@_`}G-Oq2WSd;B> zLLrrR4_?%_*p}NWTq`H;qT_d5{{Tv@bG48~lGp%b)bXs0Or0@Q6|pASM?*(0wm_w0 zLdjMeQ7KZzdv)TOB-2T^2g^C^D)SA}1c`Bhnx$~Ew1tY2I%c(wh^XtinKb3xq>iKx zK<`$qEz(IbFypcJs-I$bWNAp?cExOM-)ZJVGQ?*9^r&y4QP8&f2=1E8$tuEUnX&2hPjk0Uip63E4*Jvh&Ld5j?h=O>}<_|k19w*GV}*u}!* zmN{fqk2xKAtFXk#qC>_it06c!#&`m!5^Vj}cmtgARVg+nWN#m(Jbr+*!eU&+fy00d!sH%Cnw2KkSk9~waae7 zOnTH2u#H5#F>b4lp7m(nVhzD|ka@>?64!HB$?j>(8<|N10eTw7zm{g)@nCv?_3HfB ztk7>p9E!?~E+u~{LF8wr9`#a^TZ&DgMckk$&j*fb85zqJo31Kjqe`-Q(jL7rOL1>0 ze={Q^u4s(A8I&W!L?VoE4^ORGhUJiAOtI;Tu$F}(5)pncq+tfiHSInI5lr(yH7 zi_%RZ%4AXU)lVYmz;0w5lfwE`qj&(YJo@`oZ#B$F0pJcsX~sxaxJeDn0T$s-8@S{Q zQ<5~?2puZx+}vC!NqNZPs$+Q zl6|QCjAy779I&b;7a8}f0ZO=6PobtAU;f{{THIWh9EReZn&`=W#tM7+KVi+~cKB9h}j~%`YX+ewA86(J*NE z!RE73ZHWmwv22gdg=bTV-*SQY(O@O<+XuHlN}cVXivhVk#Z!T?69BmM&sU%#jW&)D5O?bU^xm@hQRg5 zLF-qp##oJ3hx3u))z+;ZNiQ%IACY$!JHh#!^!vxR`0?tNGFxgo9HUs5t0@WxVg7lk zyltRIW8!MCybHDZ_IS#BSrHj^PEWu;DOugT=f%gL*lWY9f~q( z9vNG+e`2be3o#^&ZakLuKA5Os@eYZr#P)EsHw*^{a5&r7-oAABv8df#$odwabFmBj zp$-d=M#o{>^{bx-{59ui$euGKTwF(-pJKiG5s})nP-|m~O2@TndTx_-CS%|X@;d(j z^}zS8kHmV!x^A7D7SEKwDvq32DdH=rH2amc(HUcC#~=*t_7&nDCGhW$d{?g8>G0l3 z9h`(Tr5Jz)c?EOMF`RHeI?*fWW|if0*<<*Fe=d`{cul3w?S!^UusOpo9Z&xNs=i_P zpW-hXXogK2NsfDadxu;F7&0;RWA{`O^9+php4ID`-j#FVu&`=!wE4qET!3@af$iy2 zuAy(J>FYkMaxDpP7;ebgMtk<5MImzAW8&Ws_>WW2wTmrBQg@2>OnHb7L+tC0NC0|Q z+#e16Ll1~F8+}b(R$!&fXQ(W2cs$pH_~YP&K05I&uZes&sTh(>x01`cHR+a&jzBo+ zjB-7z((EDAz7$zo+FTzxKsK3Kd18Cxx3xJvG&FFw=U4Fww3|t7?q@_vz&pk;jDwIE zcOZ^2_}3F{dExv0KRRe>rX&_nF|_&s2i>l}N7HOPcdIS!Nre$=~R&gD4cccw={UAK(b z#cTGP0AiHxCDda+@}*N)iQnKpo(umwe_C5`oRlHkHpLclkzZWcs5nbd`ko zcj6Ba#iF0>M-#}*cJ9ez83PTTCUZ(5gA@nx)+@>$wV6SclKsu0CV{ucn8anG$p)QYvyQ(Bf86;Xi3 zGPxXs`1{wL>OK_IwO5w&Oq9I42b3G`f(}^VbR=}=70vjw#9E!Pl3PSByRpeQ4gE9v z*Kyzterul(rQE@i;ABa>agmS;`(qWPAeDj(q43wn8GK7`;<%-`c~y`Apz@(R?LOzN zbNVs8)^)phBpb|_iAli|F3kCkHtk9DOTEr1d5;Xx8vw!I&nwOIxTK-R>2ONf!l9 zG6}{(9-#hxDi0C-In?|ubk`8b(){~l`ANwg$ruBS{{Slb2UhVV=YllVzk&gDSLG?4 zr00Ng0q@ql^TfXubn&1`sp}}w;HWCuz-BxsY;^6D>rM}_(~@^A=zcoW^!sGCytm9} z0F!~VpMIFEA0Bw3%E=C;;l&z zUhU%V0v`tGlH6XxRv31pOTYz>O!frlr8d>f)V==4hv|Mj*F0T$ZDFYff<%!MfzXl3ufMz_;p?yLr?S;lIbpOCMqB~c1A*;dB6t_Wx)rhi0EC*|_>F-i9s%pO zABPq6wwvPlWQ0i*oF19tq39EeE%>9vdS;aYwzdidn-M!?1waRE<0t8!_43!mooas_ z>Hh%Ox=im9&f%nG0}~(zjDyEK=bi>T*B9}29})PUR=XNRGD&GH%_78rmS=Ch^7?0y z{&D8s8`OM7;n@EG;%R4b6})b-E6St*Phfi-bfcEnxUCd=ww>@I#?MJ)idLTDVla-t zf!OCb;C1VtO5_}`LEE0Ws!O2UrDMeY z2x7iCwfez85}AE&vMKeop7=dRMdjZ`Jkx z01fzi`#_}8#-m}_4$L+H-Z}*xN&XS-n)!=Y(Qmw0rflHK_9^{8Fhi>IyG z%J!@;>5A5d*3q9Y8;cNvl!x10_3^F7H6Os-<2dCs~9`nL_*Mzm#(CmvVth*L{ zxnP8h><5F#bDp)kmDP>85%l(_HMY5KZ8YZE{O4~%y~qCmtD3VGlO=|o9ppHYWRX*AVUjT0tQk}x`qdXP9i zwa&LPlV@Z0UkzWhS30GA#6~z9ySPVWEJ~tA6!B z!w_%)2hew}$HQJGv9gcMj@e^bF}NTA{{WHFu(e-^x=r@2HkD+;B>7Nzi~}@>uK|t% z^rJ&geQt7J2QKxC&knwwt->Q~W(yJ8M)W!R#F815j-$3SUrqcykVC7O%wPaV&5plX z@?CQF_e#@ZmqWD|auNh_^M>qx?>YKct9&xH@q}}&{{V>XVzfyYCNG@X|P?IWBY(!Ek`TG=2j$-n?t z%zqR<7hCw(Q<8lGLv5%P4dxuOvCd9cBOfmue~oDF-Gvy&`kq1KuZ{Zlk8>TKn`#J= z@MVw|+;hOTsb*_z2D^fA{OZ}`a8MLrb{tow+jyeG?H}2KaLp>6tfXTdGuOXr_0JP{jtxIcQ!e$AWWv7Q z7e3uH=sV-574h-#cB7DH|!; zTe}ZlwZ!YqFYMQ4TAq>JeP7jjc?V zmk5zf`?pyL2Z51{cKVv_V)5;UpXJ$Tr_OfC`4{B($>aY3uU{$O>7Fg|M~I|&Lp&$_ zWQ@Rx8$50UxCG#jOdoGr@OOrFJtyrlUAt_Aj0|(fUcIVTuR*;nWOldz02DQ)mOER> zL@~vWIinkk5!Y(=80<;G^{$V^o*nTgjdz)=9Osehb$9|{IP-wm?p8NhO z-Rb18WpF}_`tnA93i=aWyOvu(5-=ZN-lvehxji$A;ruP*KMhZ;4H{X~?ad=R5c9d# zK3TFpUzfNfel?%*d&L^j&}Cf-#8VIe1Y{n02mJnBY158^aCW)L=vrQ(;a?HAinQCd zF*`QsyD)CJ8OBFy^nF9ex>elE{h;ANA2Dv6^v!&6C&o=jOVXy(^;F+%R;UlqJJ;{6F@funn!!Z5qJeZRyz z{YPW?)=r1upY1Of12*Ni36O;Ke&2xoYpH1T*y-ivN7BCyZEtnWDkc%X?!H3ppO~oY zlh;0@is8OFXga=?qRXqYv4RIyB%F8JNc9|nkH)@)@SOHO8qw|adlP2RIL;QJx{+Q6Kwj4(`%pS!ehqoLD@|Yt&hnny|3`yb{fz%>tCQE_xyYLte2|Y3CgHi15vo+;=Bkx;JA85kTdj-k3 zw>ux@$qd6I1GvGia`WMynW)VVh*I`gT1i7XvWya0lD)ss0yyJ56Iwhs2lr zOU{A7Acq7T4CkmnTy(Eg@g=O*F?sMXRx5zm7|%}mu4%=iIi!`2CspwugS4w_of7)x zRhAN~8n9VFW3(~@jFl(p>s~3LN#i?P!7Ze!@B@}m;0@hydth*QImLOG#Z4<;y1$D~ z(eDyFnL{$oGWm!x$IQ76$vrYYweJ1{@Lk4};j?RfIBzjS51a0>&Uxd4eQG&VxRknB z^&1%VtyfHp>n$6!gN=)YAo}ua(L5>OSai0U?#Y>AoFHW+?aJqopIrL?09^S#iL5ov zyI8>}VQNCL91qNYA=159!d@f$Rmszqa`x~sU8JAgvF9BAe~xI3bVjyUxzNYqTTLk^ z)->o)AaHPhoqQCe-lxr^n>|y;p8|Bh7O@s`8&N4cj6r+x(Byww z`NsG5EKdRm{7^Lyw_ir(l|ty!cAX8^FvYbe~5f9EP8N`Ne`G1BN7+qJwd_Xp0(>1-YwE>Y^R;13nU=! z0B&razz%Y2viO(bjRxmdEpZ_e1HBh$0W-$nNj%rg-x9Ru@SUt0hM0W9%ml6nT=mNI z`gHo!=jtgX(Cj=Oy6=khbdLELD`z23uTGx*MSIq#@alak547GcBLg8%UOI}@{h916 zHLWB2UJ;vbGizjg;qV&`pS!{1*9X$QXX8}IQPPf)qmdi!AmimY?ae69siKOx`K$3a zRkFR;Bhb;nSeOzUjm^df(!G=6<6USl$Ee!;hB6#sKq}tdtKzL%?^AC&oOa`{=UM+S!gl&~M`4h{(9W2HWL^e~!Dp7-JZ02{B4Y-RgE zDJ8lWBd8#E9_P5PEcm1GOa2iJ2*stq9{u<~!{rQcNg#vjMN`r=tKBAY@}DgCP+r69D9 ztF={$=Kyr?&o~3ty}Ls2WEzQyuVVq!^;XVv>-4W6@c#h9-FLxSlIogDB(uodNgr@2 z>Hzsb2ERc*qq*(*SJE0Uh%~Jae0q<_ADo^~1GlwlH(^RmCNlp3_HxlYPVwDbIgA0Y z$b=HAdi{u%K(8dFU%X_0w31mLLtV!n&+ z<2}C$!JkL)^@X4Ie9@>AF42r&_B@YTnabJ~Z+gt)}S z1ob}Nr1!4@)W2z!wDF7hatM}NXI!krlk<$^U~~j@IqTF@g*MiP9IeTudcTUi2cv4* zj5A!Uer8V4Fmg!egZbAJ;|&wVz76n|$B29`Q*m@6WDrZ+P;cw%{|%g zgp0aSypijUy=%n$Lj!A*Nd%4NBk+0rYGJ0rjMLDM;kU$_Zy}!4d3Nf5bgdUp*P+wxR7DF-8%n(ujz(7ijBe>)Y3XrkH#$<>kgTCX zs^gG7G3iOk>So_D^Zx+GuN3&-Q}DuCcxu`^hmpbZoqqQR8Ek-xypm7Qb+3#*3`OG| zLtmd!Tb7794RacyDDeI5Tc(kxf-YxL$0LPMIl<&-o`(j!QT!X? zi~j%++`gwNXr+{r`)~-{Z~*O*`Bf+yLN?s=?+p0%_f7EX-dudr$^mvG8(X*@!1VR6 zoP1lTUi?AVO~j5SxPy1exB#G#2?IDCx>wnncfy3b@Kf6AvL7(0@_fDuf&K2}{SFAP z8`S>*XH8VRPr)A-=~C+^(*7w3xY{CU(VxCPY;r!mE9Ol{!#*tV)YDsd%$Z4i z`N~e-e}v==5!eC9=DpY9RrmHvJ;jR@+A;F*aCyfas-(2BDt!;9yjOQErn4@aW6V*K zk`Bb@k@WPg4tq7Vv1w+H0m%oIdP5LY2o%0LB);Bs-3Quff4?Q0(x*j-*(t6b{^yNKEucST{{4=@m{{V)qR`PE;MTtYcG4tRPkI#;3rDU#Lv_CeyCHqg!;;#{1 z=~k}`T3azJ?yRz@8ToK=z$3WLU~0ZQi^aOb%XQ3n!E!J_9Y8&Yy?&?o%l32lHNM}) zzu3?&q2-vEsKUxJShR{h@y-rg&|?_L6dOf=S32 z2N)HiNvmvW8zpny{uFr2!}=eGp^Hd}h&-UcVDJ=lB>m&>-`>7p`2G7t=vwUON7J1y zXR~K=56V#Bs9rsCM>r!D?QN_0dfV+Buj$%V<-_V0mgOZa$s7_!J$T1T_s<*I+v(`m)*LS+0mmOtTJoFU6lofD zl3MDPa!1D1lmoYM_5T29fm17VE-kIklRS5=Lt%RDb-me04hBl0ZU#p<&MWT!0E9Xu zAMlB3_bRSqx?el@i-s-Hfd{Z70=!pI@TQUC`#Z4(s&BeaCRf>lz>IQx;=Yu;@t^hw z!vOa?7XI25NYPFiieWOlxhEep0q9ozgzxVqAB_mc|ZMQ}fhAbWHj zsy~SS4DeQ&WOc`ZR^HAB4x|@2#(q`jEPD)RJu7&{TFiXM<|dKxlTy(>AX$7p^JZN_ zL4fl`BP_%M!8d`7?FR&R`E#Bt^m|R$H7zg0aO&F59hubxAI3AzGC1IO`U?5$MAp1D zsXeT}Wg;k~6Cj#BtgfeWk`Ez)!RMt<;y;L2m%8M7U86=V6lBUXxVQIxG2c96@#0!r z6F4?|=ZbWAykn%BVHxsnBR_i^lsLy7M&X{>tUrg|48QO;lMRlfSr!qU?f0Jq;oGOo zd*ko}rF`4szm1c4NmozN^7o{NjY|N#LHUR$BR#Q?@vp12{{R?2#qA4D@iv|2$8KU# zDoUksE&-4xalJv{KN<8LD3ol0qW=JjpIKccr?qc6-|pk@1^N%m+Pue4TWRlA?ofGv zV90vy&PdOud9Q7Rpy&LvAjAw-&!`i&s$4}5c9qVg( z;!NGmBZ%U{ZYU2^vnMCt^sl-e=TABszL23(W#5HexFmD(@sFn!RT>Dv-1$exKMZw` z5TZPCk|O0e$W}f091<(Wb^S8a!J5Qz-Z1l|!P?!ifJm>dv^(z=ysf0_3cgyieCje7 za7Q`m{(Y;K@%O_^Zxc@x%!=0tr(}Q)!GDMXf0aV3Z3fuS4Cs1hlLfxNZqmgoCc+i7 z8=>ds9G(s_f;w~3qu2f&_;bbAzuS*Iw)dc@Gpn9Z9F*FATpvthJk%C8TCaxm*tBbi z$zB4N{Doxeel)hyM7m?Jj%67=NEsY+>sm?OSks>R9SxqJ;rQ-OoN+5DA%l*+uya_S z6Er`E`W}O8cVTHC_K;?c9WWdr2P(jJ=Yo26JwfyDh29?5FT7=Ot3x@O3)E(Hak!U5 zk@Iy?w6`9(^%(CyDtHF^Yd`o%>{)<-e)&gq>Bn+%dJff}Ewmbyv}emP{6IPtoc5Qc znmn8n)DSy+di^UGz&{)OO`-UnTkRI!E1fZwOx|J=@;Z}&83b(@C#X5cYWi=&pA7sN z{7ZCf(T&IU2N(C58&_Fo13FYwsUb);Le%`o}Pw*LT^uo>tx&lszA z=);j)-7RarA=f-VrCZx*a422Mr+)w;{^ zubQ>5i8ngmj8jOJT02;fBA`L@vVut-)#($#Z?0KIro{eP;hO^o^Xvs-IQ3@nR%Zd= zsH{F7>(>7O*mIcej-wU9GO=Wgd58{nf^mV)0Vm(3e^B~fj+UBqD48fgZ2Io!r)vIR z{2Ac=YEOwa`epi+wM&?tCCCBa%ugv>z6s87ILGJxPs}du)LYMnkO91bj&Y8is}-zI ztjkuGIqSr=wN079>sW3go8?1}I{kXn^~9cgqJ&^4ao(uGZp#>V;8RnwJ=mvkF6*=r zksp8a>qpvJe9O?UOwt8eK~Lcw`&4fMi|;l^w|XOXY^B(!^Uou0Vb_Y0V@FRh$y4b= z6B?Dq;N7Yz1IzP20CA4>q+qTkEiA_fOoQcaGsrbuG)pe$;~$+_SkT0AgPxw>TF;u+ z;~U$6D7K`nOS6?zxE?+0oM|L$xsepH>zdQME*EGA8Q}WXK|9zM2LR%&OJqA~VaN!Gx}1|)99gA*b?kbAQ=aMBAo-SoFkVZMh zOr>I{D4;xE%Y_q_&A;-z)XxA9|Icw{+z03+vvi zPKf0BT!Gm3qAA?c+Kh(X9Rp9>uca#aP>(V+$sG+rd33hcgyR_h06prCn|Bq*?(Uml z>JBsgd((2)LK=50OK}rRy9Xq5>6*#7y@^?&WAi0xHJnCW%y|bO{c8hJky7Nu6LTLy zo+;^jn6=Q?f=G-&jyvGhS(D6DB9FVlH7$jO?DnEb6JR|vQ?{LPYBG5z)Ag*{)YcJY zCzTy9v(4ne|EUqcFmTH5}GU2~_T7 z+&Xhlp7AVW1h8SZE!!Vj@Glwu(7qq=z-xH1GxDGkLWbx!cLP6%t}CvF0;OkaQN4`k zS~1p4`VM!ND1&Su0N-WP#p z1zS9E^sKQsI<#G?Xv?KmGg=k}t==1Bo_%?!l~%~@oDj#-w3_I~1FHTat50;7gr@75%eXL-RkDG57s5 zRT(tJ7jkjC?B%3ffN(1!<0%kSJPNS{QrTKZZ!CsVqZvK@>C+g=Dh5FvDrZx<(N4!B zBooOd_|A6!07|tL+lSdI?T^24T}7;R*6@{KgV!dp?k%B~L;NQ>1ko9{v6jz5NtWJN z^ODEWc>e$*v*U?okQNv!I3MFz8xbzTyR+yqfl*vU-)F^>e87x*QO#)(otX)@f(bs= zG0!|LT9;C_n%uA(00$%va6PM@zMe~1#JYhC>0cav(qFa*!_R_tQ0Vh+ywz_3bhox; zW>}OQ$mARVSOvi#^*A6`&}5l4Y;8qP4;!=2$75qkH=90&@wdb;4R}r!xxbz`Q#dUn z0l?&*NZ<~&@b`@W0N|is2J9!1d^342wdE1HZII)UkX6nUfO?GQ(!VG^F??b8vHMBi zL#5p`QR%TXj*-R)l&d%H<8FdRjPR|1eq);MJ`#S+n&q^MYvLPm6K%=288Yu5!z%%S zx33w^e$$uuaYGMDOB(Mk%Vp|(t$g-XC(BPndZ&wj;Gq8iv>%DJCDZ&ZWo@F`I$@P_ zG^FI8F(f$JF@Q&WcFkue?IrQf_E{6f8vWhMO%X&%TYy_1Fx!F%#~9<(8uqOl_Dbqlu6V{jC3BOOw6uzB_!i&ef5$%!g}CtEy>kP-xq;c3NFS1N z!a%?g#t0l^Bb?NFf9<{TmqoUV!#cu?i6Ifk1;?E0@&a?_6O!)79Zzgm=!AdpPpv#^ z9#*@q&mt5)V#5L;-^MmMW0mWXitvw#AMj5(d_AJgt!a9TU0o!@%eC_N23_1RVa{>M z;{fr{X0DETk<^llac|8T)WhQA7TwZ4qxNb2v~>Rf5^8py0r-IJZ*@2(JJ}ovo=p6) zusnit6?+_W&tKF{CjQR;-DQeE;EarP#eXyB!6(E1EVl6f0Elf~)Z{f~Po$4}s> zeM55$UQk}6sP?IJ+j$x$3U-0%RG?q9T_YoHT=YGwWBndEh$rP9hQA$@Y<)~8+^9i} zd3&-)r9!c?D_jxNkyT`HXZ_GUdV5xse`eTA^S6>S*0NF1=xuCLK&=>>PJ`wi^={tc z>Q!$!LND-<+*Av56tgr)m;m$WDyE^T3tR*T<@|B@Q&K{4>}<3`cndizf%w))5D3eh zf=@LvWQ6o@Uv|CnKouSNy2pwFGmM z-m~vzVIK$Q?T+6{iMB%A*=a0exL`8C4n6A`-g6VY10|0h)kOu-a?jC+=4(P5NiEZR z5_8Wzsq=JT(Ok_WF#|5M4@kd3lhH#-D9=u1DGzp1AK$SFs$V z%@P?zs@*sut=r108z=+{s@P+gxE_^oF@hWrK5ts8O|o1{cQ-gZDEig7G^yS(a{W4i z-l;=$>2SN#a_5gq-Jeud!Q>D=?`o~L2wSOQU+4nTWh|f(jmD|Vpxjl8zEsa5v}F6%tT3oKZVwd&s|Zk+T<)vTA(hl^ z&lxnPt!3{+JaasT*jG zE5|Dt+l+(qjP|K5cD=aC86ErAFsn1DRRyuuq`bJ2-4$Ut2dz?zxI$LY*qU5!5BOGW zB6B_!h*s;*N{Zjip8`z%O>8U+1Y8{Fkyj+FIXh}FquVekA!Gbm=A59;KmE;}v9y3*@ za~vbf92%({kxZCXE4Qvc#*%MjXyUDM?AI{JScA7<>Hh%Ntlzf=c8iwVjNouHRwj)M zc~#(b{Aws{Q3|>)-Twe7`e(gNk(VMg3^7M)ZddNEGoN~{?$Tjx#{g856pWM{ZQy2} zw`(9s(Le*Qy;AH_ifoQ2F*p+dI|1)f+k`SZh=PI+LGE+Z)RWuAbON?P7&)b$;17`o zN$W$mKwFT;@T6_Ig6FkJEy2Xmu>;dJOiOAMsTkSZkMo+faMDE_ZwitRI0qCrsO()a zsaA+T80*m0XOqfMio2V+_WuA1s@ElB^7it2=9vq<%%x*(q;uAqi%dF`NJuS?eX2OG zS)Gq!%25hL2ia8+KNC$VNT6&V~orq)8Ah(y#mLLRracD0qn2+->yt29=??otGJ0AI`Lj z4D4=59EwTmTrJSAX%sf)pBYf31@u0?wQLxsR3S2^sxgun8$ZX!eJb6vO%xHv2M9R) z>bKaLvA3x5TeY+ejPOTlA%S3sO2=wr9QUV9CO5GdIO3v)X+F*pb=~RxD>=@7Po_ zO=#G3Cyw0@<4qS^q%nd*nzc7^>R6D%8AdV}(xzzvI8lH{KU%C>6hiBgdVMQ8`r+b- zFmmUC{{YvaO3vnUZ0QzMf*>O}?L^F`F}ZgSUrNZ1((CNWJcqC8SL48kKX{MlRFl2g zq!TkPq*-o!&7`u74}Zd-`H1q!$2|>Qk{Nu#B8{uoqIgTMnb({emi5q?F2bz)*JNWW z)AFg-Nn^xhAFW3AUPOEC&$$(H4>`8F9(@frWUg9P2UiQo%VUbmWtQREKeEqt;vPL zvYq(J60~lu8t(P>sByWPj--UVS!C)DfAFgBeIrSnbKKSV(m7=NT)A8i^Tkyt zC3i87dkS!shS@aNi6X~^`@Ka%WVj%b#|(SaLeAnh3_%CeBCkX;rI>KNk6PU~VxsJ< zQgn14V)N=L^5g_WT$9x2wL0!d(pci!NPbBj20ebY3(4eigNl{$7YSUQN0T6Q8OJp= zw&=^gPONe`cg}HBcXDSdGcU`N%-Dvls;UsLfLo@2Tvmf5 z4g1nL@Aa(a^Ii87w+GgocMGD_VgO31`GDivmt-otrQnlQn6d_tjPcu=rmpj!CO|`q zOLEk2(AO;*CqO{w6-=1rk);D-uOtpX6YEvwigkqf`A`QH0)ZrC4E-t_*2GGci!;fE zMnDSYs$b2>SWYq5{3)e2$NQs$)0(d6i8%8QM816MP=gk|AI4N3NL6u9|HjFLNIp|oQ< zvnd4B&No&YNfXFM&7+J}n74T%M99eG8m=D-j8_{?YqVkD^AuorrlVoTMnj^?+hiOL zxv7?LiR48d;D1V2w+}8Gpys3dRirJkP8;j|sY%$7C$Bvi*?3%KmB^oxxKiaK(F#B{ExLsV|8nC7%2_4h&c5J z6)e)YxY&_pG1iTVlx$NmIiDl$mG4{7E^UG$h1xjmD>Y;hmvr@dIa{lM~-j(@vL zm?J9`F0N;3GU@_@+N6Tv*@={8dy1AD8;i)ws2?fL38XQ}YP&JW?^hU)n^H3@k|B(Y zD)g&ag$Q`g;s-dYaFEZrvyO)~Wbe04*60TBUiA5Ft~D-%aJ+LQqGced$S2T>k8&i7 zAW{hECDc^Uy?8Ch2a1N_2#hlF&DS2)&)UT# zQivWx(Se+vxvfiput&5xb|Z1e@Q<^_u3#4jgRlp|)98}90lHu(nQoBCs^%WaDFo6y;&p7O9+g%Lg z)ymq0(ap9z6NBHwx`NZwOJz57(jO)QPP_{F|OGo;ICoR>r%_6Lp8g?MDgc; zPpPX35SawhAFe%n(zM=cfa8JbRi-keiv_xH+~?Aq8Z^@7$SvfJjs`)dPh=POiZRbm z>r%^cDwT-jZ6BRR*E8I(g)x!HC#4dF?_wWRfJGg+Sre0*xc5@b6=URQr@d5N%1pD4 z7q6hFtg)=2(lSd9qoB=HB9ghD#8b@hTZEAUl6zGJ41PeQXT4czT4~G@f-&B&eW1id zV+;?kY*e!1(?uBMeY=-(?PN^Yns(K9mw8e@z<-jDIQP z=OUyybCkdxsx5dfRTBKwS*pL*+{ON{8 zm2g)WIrphx^Cl)qKH_xx)X!~2%E!ooE#1&%myjzu;#nk6$~j+N2hy~B$<&aCgH>cd zAP0u@rk;SW(5Y>4GoL1YSPc7M)%fk+C25n4RI%H6&W|AD1QF1WfBv;iHLb<4$ZUc* z0+&#$bY|LpzA4Piz^Uxr4{zm9nD0Ru12qqvttK~ey+vM<-MpadgPxUZO^olL$m3>1 z#sK|ln#STn$}v_q+{E5opLe&`tHnCpN>!KwovI|po%aIi!H{lXPJW%LyG`>DM^3}7 zDF8c2fZ%sMDx@+QA0%LRG~(An?QO}REhZX8BOP&E{{W5rt6vY#dp-ncjMygtg#_b1 zhPq)ZLY{9#W4E7r<~}4r9KHp=nSuS?w4^cnxhTK}I5-60W~Qs`apN7MWBH_$;>&AV z)y3Ag{*C9eIEc1XoRTo-9X&h$06v}#LMx3w?G^`zA2)BUcz?x<5v=&QBq{cNgKUw) zGP}A058Jc%f~m+E z-~vzQ#($M{x?hKG{0X95J*+QtaL?wjfF1Y?i~@Nl+mA}?dWj=AIg8&94@zGZRuc9Y5UIsH1+oU*cKfOzBLm9Cv>Z8%o8)h^^w9lZHjb^=2= zUZ8ptj@9(fgFH>)?MFZtR<|niM8Gx}7FIlfM_kwEN5y?&9e2ck+i+|*sThnBc^D^w z=mu~p{{RZSaeJhAstdmn+Ux}^rd|-)JZMT`eEZQ4C#I} zvyMsRb)GULUAP>NP;}gUqRykh`c+)`ew6elk$%JPvHnutdqp2C`UXi1GQ?=CLc2G-$ zpDo4#Ty@CKaoAVqe~4%CribENn>}e>;_f$WY;FAy1Rj|DzY6=O;MRu>S|GpHl^*Gr zF2j%kIZ(U~z+`qcT(;^%g1)D9Vd7QROROkH)7KoI!oGF!H;gCnr;lG#f%b@4BdPu+ zz$G|5{{WA@eJ8U>vuQNlIEbzoeg3S2rdvJw^{>y5AK3VYU0~TeH~QksG=q{9k&(gu zdeEBPnYb;{_Pw{o81>x>ONrz1!3H2XW!gs|o->hNfAH?!&c{@`xQa|QzzSKqHZ!y{ z9FvTkSCnh^9y`@^s~dj^LQF+azsiP}it<~dQ2 zJr^Bw{{YsjPhCONX!buEYJXs`dG6v9By0-|@B;V9^!`=lI!EmdXK|~(fKXec(|J+8 zd2T-Ib_B7&BdD*a^?wa$?P%+%srNfo*>k%9>KuN3fy!fyfTek7Mx(samzTSx>1 z<*=lG7URkHJc`?yC#jz+JB=pGRFd?{SRsBuelwn!C;V&GB#7EtnRNyqC*J3!c`w8Z z>$?UM+S@xt1YokN^NjUhTz4Opb2?v*^&b~oM;@TcpDO_0cXIFsbB=iW)W*#;9Ip31 zh`RAcg#H{8TYmQ(OdN1{>Zd3ASI7SV7JN^8uiK3y!r@jp!QQSwOdq?uJRPTzj-OiU zuNwPHlxg;(aFZ#4&j;yQo+t1s$Kgw@LMWcx@;><-M6}W7U6V zzXbS~!#`rz9^r+x&=N>S2igjf22_lQ(C2C3p1lu0YJ5hT!(8ya#kA2Rk+elw83PW7 z2M4&$LG51ye$M*OkMHl1_1mr5HKn(cV`k1brW_Nv02`+O=N++MVe2=M+@dsj!gOBD zGtS{z)%e+rljlBZ_<5oUucgv0ZJi>E8>C#A!R#~89CM2L4@}W)E#nc*ha~mjV-?YA znw(m9hPN_D1aU-2=Ny5a2XbrXuMK#TU3F;$Wi|0qG z{6b4#66o?-xeEaYA%+3l&pm75Zw=~NPJyk7Z=5feAP&G59FfS!r)vAR#CFk3Y)rdZ zaB>eoE9VU_LD96&93K+kOA0G0B8{VY7~DE=r=?{Ynhn)Hp|njm`z$IjS1Ftxxb??c z@ckQ1)_g;D_w%H3CA$!XzWU>lf!CVy-yZmj#TtI6{iCGMm?K~HYCT2{Natw=xsQck z9rgVi#qoG^QPYgD+#@uuG6+;3Cf5EU3FUG4iq^{4xe}5`r2Iy|)iiBp*Gg5A87CRs zK-yEe4W8Y_cb*cq(zVM+w)2Gh2F6kcraoclO=bA6#2y>*ys$Grl`=Vn(ZErYi~-z| zP6zoF$>}~6xbWtocPEFgnFO)$S;S>P>z2p|2ch~3nDV!CHzb{z(d&QOCtn(7ltQJr z2VlV6k!4dy%s(CY&ga83+Q1Wf&gXUxc7+3-qn`f&&(gZx z8{+Xnr1wMHTc1jJw@9cEVdYB`#>_flfnGnQ zd@tbNf_mPIw7-eL`01A5^xg+WC_1BI3Rp6axO^-v@ z_s1^nsOWa{{{H}BT+Wa1FT&TO`(IXvHpdSZ(}%$19*3p|2YhCnWR~J^M-iy_27eQH zc{MFY@=I%bbYHTfg&~RRWG4h1@Cp2?_ru*8#+2G6_1D@HI1)J-!wh571Gm?udI!X7 zzwFNn&uyUK#>XA;M-Y|4(H^U3w^n($AE{ymFMyqClCNNt^vY$b9WHwOo%dv(op z{t)=Xs(6pWuy})Aw_AI8p)V{k6EQ*C=O1~7IlvsAKq9_z@eZK=Fl&u={ynj&`9L`_ zgZFvt{{ZLOv$=9|vbpuI!sB6Y;RKQlnQlI3VtFhEI(Fl=d1r|JF5KC8viHDRlcbPB z$_>m!jBZhw+;R>H>JMxlb6H*v@z$dDw%QNbNA48#c<5rV9z zfLk~K^f~%hN$}!76r=_(6hhYXs}=I)A20-QmFFJ$>t9Mmqe1rjjayY=IP1m|e}@XsgH(zT6MdxC8=ne$brz>kN19`RCm>7Yv} zLvQ;sAQAb5jqHOU4a2HnvgtCI-!U)@BW6JqK!0HGmpU;}{&x)6tnrX1< z`fZEcuy9Q4k>wxZE5{^^gOV}tT;7GO-C9B|b!OWm0!(D`2;=blE20v1(AwO{m&aO` zyJZ!|sp09jJ1|$b8C}C1ux?Ks*S&m;s`!&vj`V5TjD!>O6%1B3!N%jC>t96pg5SmZ z&Gbp&`(|{B_Do3w3d8{FNf`q?;Ahj)sd$&+SBEYytfTQn#3F_c75uoSW(7v(BX@ zokzt{cw!N+#pSS497fy1;Bs^8Tb>W`uZFc-httwU^9dnaenTcY;BZIR*1aC%OVf2N zE%fGa;$|VU#upti-`266OKQh<(fO0&e-moys>F#P`zo+3KJ$)8%Eu=>cOOpN{RO6Y zuTa#iB3mZT@D*7*k6&u#J}3M$w70!8S%VyE3Q4ylmd{b^#ZRGXw>H{co{SUAxq(6| zk3cdrj{dbSs3mrNY4E$i7h09OL{NDya>aXsI6nBVNuR-u;WFl3zrJj)4oURL?Nxpp zY8sB4qldq3&fh87k&&J~KD{`t-w_#gOT?JD4T0CUVOeuExuU&}dRskKSs`>|98itT zw4Ada=t@-jFN@l%96O}BWUaRb5fFSz>`}a|IqzPw%4>j524cwh{zcW+dVn=HQ{=X zg>LnaiAPoNrqgs3%W)8F9DJa#&(%u-^{o9jNw~VdOU-s*Twq{6@5G;O)%90^G;J*1 zHmzpBZ9@Xc$0UMPm|%apIW_QdhKI<;O{AH3L9)~m2&}IMl%OiP>&HTRpRI0q=i&CF zs%b*!!k6J@i0<;6y;f-#l4JutJfX77RL- z=jHFf_pb{08~a_~c*jqiYBsWljBSb76%5=A6>ff;u-%BP`5Jng(o1urgTP)R)3r%; z3;WxPzchTJX5Z9%kE5glj{{RT~k!^MRv56i)Y(aAh#fyX`i znr;ad2iW08lcmq&I4onDM4tL*@`wQACvi}CILCA8UsZT#NYuPBtDW-hjIIQ2&wjsA zkJh|P#eNc94^drqIM1AVNPv^__5>W{^Nd%nd^Wtl*YrrP^+^bHOo*Qw&>o8TByJrJ z3BkzDIjc)u4Cb{xb6L|e{{Rg1jSRM=(s{RsEbMs%b^|!T1CP|# zS9Pkjx`alCb9TZq_bRvefze;P1jsU*hJy8Pr{q zNq{N7n{kcsz=aU*4VK964hKGf{oCOG0E7Mr_+>6UJd+l78EK_55;z$k;dfwl0DhI9 z@ap?T@cxk=pI`;N5h&XpNx=gd%Mx>dGtG7_uf?cbtYMVz`@D*tTMODXsp-<_acb}^ za*^fZ>s}G!FAQ6MZxXjfVuWr9^gIr{0fY7SuWz*y+39B4nVh)58OJBn9OKiUrF`+G zd@u2qnMq~qqC5br$*Y&IRdR&=RIPZ(|X?`Qodgi_N#ClD_GAt)9jrY{x z@$1*Ub~>kv6TMGvZ!eiOs})#R_(2<#u^GmB!8Pn(4AaIo{vf`P$0p&3Wmnub6*>7w zPJ8-{R{{GQ_%7&QU+dRu!S7>FomddzTOc+)2Ly0KaC%qiMcvk!ro3zs7C^Xfe%Y+% zz3mKT7kv+!ZhjU%v#qA71j5=^VD5JB1P;7pVB@FquB%$r?K~F@dUec;y!F8Zf$l53 z*0n1;Ye{dQaT0;+)6frpO88gCde!Xu`MbDAXb;QgGT^gy>-e9@)Tr)}oOC{c)#uUt zZ8T7m<{&xwI0Sb7wdJ1}ycc1k!v*S2L_lPr94d~S^(6jP^gqB~0O*>ol`f}i8!M`- zO}U8#zDOZXKURrsI0JJ4LV`yiXPg7TJaJgoo&?tXZQ>QXzq|77Lw~AJ8Au}srV9G^=i7>@Nus4U zW54)i9uvh%gHSe9IX7cI93j!rt)ec~^QHo7&c!q(eEWDF7W0pA__SBLn|#6BAE z1*`afNcpZI0RTn>FRL**`McnX-S~fOo;=Z{8q8u~;N-{w+C3N3JanY>(T|%=4m4c{R+8@egL;N!Pi z`cuOn31RR@iEnk!5KSBD-)L8b89|ZyFjLL~sm=yD@7q3&;`_e~c#BRlU&M_L;81`R z?^D49bHS|jOtll_FB;$K4dF+&v5>;92H-LrjDS>}^gYLV<9-)vnuYg>BGa!BM=}7> zZ8`Zy0VChH(EV$x_^sicV^{wGMeyCjMhVKYU^w>l$9kvm9>-kp{{V>+4Qk)cxw$)6 z%>;QMbt>J-0R3}{>Cl^4{Rr@V(Kd*;PEpX60OGHB;Z{2%EMys6XC(2Dr%JhNp+#$A zx0esPL(8A(itrDQ9zK)8`Wj7W0EoC*CU*H#I8{(HxU-YT7#QcZMNM=X?0AQcwf_M4 zMDGuXVP|0MN>Zu@(h|+kNgd)SnEC| zf?HL!xKLfdZQveCuq}~~L!V0h9PoFpTJj~c!AdD89%a}R_L$FPfmY7=_k?bswbG|$c72jYpUpjQWn%=RPR-k9VTzvCpR#c;=co zkyD1{uu1L$jGuqjqBpryk?FUd9MLpp7Wy1vVnM(JoPK7!N;XwrbNo0Fe8F`WFK1de;0gW()=j`y~*1o&9Xd$joh9{=rP>X#ut`@jqRy{ z@Se+4@P*afnvy2zBn~Cd&Cr59h7YfL_xpWkPSnJX`xzK;I)V?O?_V+7_<_7{W+StF zdA-*>{{UL_JsZNlBk=vA`O>w-dq&hn<$sx??QTq$Lyq{Z;CoyBCih$L;;_E9jig15 zOZkC$Wgv5s2g{CgUkvzGJ#zEKEp4tR+3jK~!GX)Leu_t~YxPG)w7z?>3#bnKAO5{% zkAxl;)3vkWb8HOk#EsmjVt!+{r#<_3>(uAA=8$@yB{%H1r}(p1i(i`MqK-AeMFE(e zam#Qq>CaQ^Uu^hG!(U_3W7AZbB!puw0+#N_0|0&%-|1R*n`@`Esz4-n^~Ozkb9_J% z++SL0Ge-9o>?0B6WN-;PLC<=pcdHditCapDc!9hXp-Xyg{M7^IJOI9#J%K!Tub%uJ z@lpI$;t%YY+soYJVlEh}3=_K_Txa|%+&npNdGTmoX&xhtc?veTBMZnJVD&k{{{TEL zlkiW%9}J64qC%f(m=8W&5M(2vJf5G+gVM2bQPib9Ha#9s0C+~{?Ao2hoO8^DSzbj2 zm6YUQ@OV8ruFZ6NJ9{T!Fscd1Ojk4EyV!3ES;+i@*yMlu>(g~>8%T7<5)-wT1#`(C zT;`Xw)Tv4AeDS6DuR*^vrky5CY(NBKpK(osOZ%zKz&RZ-MldTH!@*h?hP4Ur?1P7F z;4_k-b>JM=aiC8Vvw6i%;5LlYm7T0>zUPyCOz}>)q-ip*hoUCrp$RJhQFF$AVlv&w zZ%{>inc(jWc*EjPiFExJRA;n%f>o}hQ-@W_$Q%a72;kT07Ps)~$Hb9G{h)T+XK@(e zjyN24J^eb>m~>k$8G+Md^5RdGReCSe&{aB(1=`UYpANnh=zav!ji#6!lABD@oXG2( zkWU{dJviWZHRt{y)%1-%=Hk}sMHa-BA^6G8I34-?>c@*dE6L&AIjm(@GETUO#xO7d z(m*Z0Mt5hn4{X=X@xwoh7F|x-V=Qx$<+H&g^Mm}Wp+U(7I&Sx8rE4BC(Y!mRNqZcz z!y2PHjD_JxK%nIG=m%Ph;C{7x@fO=r)vlxx!)G$YSdqF(8A}|mU;!Ur!oEuJhlK34 z>+v1en4Un`Hsp2Z^Y^P>8@|;(7in_YX!Fk;SA^~hlC897E=K@`&fMcCjPq8Z+}cp= zeuHXyhL_>#4b0(l5GP>9N$FoYYX1Nd#<}8SrO#^cr`-gARq^~;&OkZoj@i#@`Io?- z5jFeGT2;C-%#+RXmnDFV4!o0wZb=!y{A=j*rfHWxUZ)FlxDuY@)bdH`QElQp% z@MY5Jhgs3BR!K<#vBAMTN3K7WZ+tnDD~QtG_SqKZHO}nkKI7WE{V(DthpeOi#&RT_ zumUi72N@YXvDXK+a@zNabng$y+LP^!O2m=E{Q$>rVNo}I4w`pz)b?)({4=xhM~igg z@%*1?i*pQc1A%*{{SsBzva&rB#p4) zIRIw0hmbEJAdWN&tU33pw~Y)TD2;bh&p`D*RK_mEKIiL=1|T$4@$0PK4gg` zR!dRqi(BqzJ*;zBR0$Z(0mh19>GN-*vuq-nC zxjv-ytswf92V`d4S_`XirHZngp4~edr*I^75W?Gb@mdi!`HXD21miVk<_IGBBFm5t zX*-hIAdokps^R00bE+ z+|&WYs#-!Ydg7|xLZfhghX%7oq~mgAtO%P_Q0GC|g{E#qih zHyG?ILo>5(n0%v(x_9alo|+L{+oq$0$x(`{bEX(!K2h4sj31?GTu&5IFO)W)Pg;t7 zbI!${+~@ee#)h|KIlCE>LoB#;BsT<~r3M>_H83H=#=|6@#-+J)79a=TBdtLkjElJQ z+Ow6`#Y4L`R`sOJ5e?WJcD zqjhyUnC-w*-zOiHQI6Os{qGHo5^7H-SguTrat1N#J&hOoy4qVb;Q`vG<;F?JN^p(c zjBypYR;MMZ_=`;N`7%u+ji8*LLC=1euZ=z_e%+r5yc-0zSGvqEbg~p%dr)Pca-T)c z(a7pX?%5UjgZ}^p8vVTP&xw=vbNE*GFl#K*F0mA;x#K~CM)WPnTmUy?=R2}-Uq61$ z{{RVQ_=9ddUEeErR(&C846GP?nkI$MJnnBazcJ_M&(nM6r(& zLJrfOr~Ll_^{X7q9f!hHbm1EX7|y4m@#n&i0RI4BTcwVT2ieR3DFE;R?VdCB#eHq2 zMrqE1z2Ne2&DH<;ZU1w^FnJ03QUN z^*#H?A`4|u$U({UJ%&B&4K2$i9rv8)o-y?Hsy8~Jw~#4P`2>A2Q({s{gp2#quHPU4 z04iuBbX~=P9)R=tR%|U5+lJk=o`CfBtrD*i?37@Ne41Rl=srronV=yT4h>U7b&2*{OiJ68|mKN;yh4bZMN z?LtD4TQ2z-L2{!w=siD9wew%?1N&ZlH24!Nx;KjTBOUOBO$-sCcW__Jnjzhh&y9P5Y@Z+ru_K^Byt|af}N4{ukgpUOB1Mi%{?W zM}?2h;|r*6dtdD*{{RIQyOJ4nUxkxP9o(bHw!a%4P!bEsvGN)J0EG!S{vltP9u?8` zj}~f=WE9Oa679GWcegyAal880t9UQ=Tk%(kwK+8{4&H0_mPAk%Kb#gndNdtWXP-=c zYxW2BX8nTgd<}I6i~b~maed{;l4+xCkS<8_*`!mKb?evz#~@_?07g1_PDh0IEUdcx zO`jtu*Tl^?sq-i7@%tWY8n&fod_iK{IVWaONf;n`tA+B$4tdEq9qaYSz@M{UhWsyZ z+P14N+GSJwsDJ@uKs%h0%zb#k;~neWbe#^zO|pv42=)lnDz9t~m3}ECT%wHj#eY9> zCx{q~T-+e}Vtq~nC#4N~l&!3+tkvO2kRSjmfqsDIQ(iqro zCEJz;pj+u6j#g(Qfs@iUm^U8He=S(=uUV{>Fh!iFGlPhZZTb#mTl zah#K!)?TJ=rj3#}IXyY;^!nEHXC~6Qopp56KM#Lwdo3^Fzm1Nv(Y4gK`^lA~JC-y7 zTL(@J&>>HjD&!JKk|o|RVa+TQ9@8k4zCJYuzwm9=LP z;FExBG4Cd`53xftjAZ)ONuuM}N%q;>h;4D4b5wM=<&NmS?igf>%@EyRTx^r&jPgk1 z@UDv4>~!K-76+gNarvKK^`sd!CvD5uR?qT?-wb)%~ZnpTq8m&=8V z4_e8)y9pq-iG(T#IQOZ{-dNi)1mN&0v$o|5tFWN_>a2Ss23a}HYBoCGKQg+IGm(nZ zRkOQ`&)KqM7$JHeQ}w7#(V76U3=H!{v9q_yk@1eB{{XK_Of1Izl2;1IFp1ac?^4ec zvO47CW9C1~w7l3$;W*>`=BZrlfrQFQ$>~}{LB=;23y6_aa;L9c(`Ae^oR5E6mNI1h z??vtFNbHIT{HjWENJ(N?z*xos9Ot!EwP|BwB;*F-r&8||pHEsNXPn0ziMdZ3f#6e8 zFsUn8v{hc|E?!O8<7mb{r@b{LaWRl_wD3(;Xc8HTkA)pZI@QR8SO#UlJ?Yt4l%GQM zNVAqQbpy3Q9m%sS$fs%^t&veQ>l1lvoOY|NI?Q~QUPdwR_|*Ch!Ll#yNhXU8g6-6S zkIUMkia8P^xa9Zmnj?eFVyJ|76kk0^2PRA!h9g|sWUxIFq| zwCrvk{t^J$>VA~BCL47xw6WlE){72NZ(jUZgNZn>@ES#BkU zVwm9Pr%Vx3NH^vuTww5O17@)(mN(<5s3+D41sr6GC9x8Qw9 z;BGJXfElXN-CkTKBjE>nTR^d$&NpMNV1%Kmzdgh^R{lb+(0#g9803Z(Fus1Gp=k?w%NzZPFEeO z?WmRr*@FNNf29#j#`j@=sF`m?rof~wOA3(~M5?jnzuG(#S?vw1aJ1Hxg2ygXUkhf#6+<@ zayh57D*BYcU>VtS%~@F|n1P%sj+JUw@)Yh|mf-$1Q5_*xkg4a=l--rVLtRUD_R%zj z~) zdsYUesH@%ml|f<#;5|o5OIhWSWP8E09WmDwMY(K4HCo6?FPjd1NIeJAobk(Sqm9@- zO=QQac~g{thD>+sSKyuQ(IrMdD^>eB2Tcl>Q_Up7MtQ56WsD|5*Ce1k@z43qbQXf$ zGc33+cq87Tx!9z{qi*WTPpL9VtxC5xwy?x-qYd7w+FPtY>Pcb8;Z`K#(W2~W`a8uI zBXUa~-qn;Ho}%hpR+cc!jI(z&I$KDNE@n()o`apth;GNB{(iM$JDJ-HGMo;z zwS=Q`)wH=LUij%ucepYb)BrpBnxvY6xjsWEk7>sqgQYg&XSXBB04`S@);%= zBB94qG@nByW{ssVXOa3;Zh$F%sw&iw!z6*xaqm_UV&)i^C%DZVtWdS=$y)5RQKVS| z-mQ57W7=C885pXm6md#cQ}<2)treEuP*ko0j`gZq8a7k6jSMC;ote)hpV#_SO9t)0 z90lp#gj9+TvaU*x?{ZJpri8|@arvIrnv1@qH`JRkS%D;jA%+k5)H4Nn16!fSGoFLm zq72fnk#gII_lHVktvV{hYtoJMFP&Rb!%WK&GY_R!hf-+fF+!wqlHBwCDp(pxS(bjD zy{f56B$&S31vnn`oOCM1=hR#}#k1x)=A~&_m@BUx_^Ry~W)ip~1B_IOc!`GRcR`=$ zPAwVVT?tG4inkOlde^HDS& zS2H$Wx%I1xW{nY?WE}n#H&-If=tm@%Df_omf_qg-n&#b1kuHC|xZ?xVeJad15w21| zOB0YyS9xT(l*WhT>6%Q}lS>i(re(L?YIB}`Z`4)$Ng|E%{IMUEHsD1JAy{N|6;d@u zj1&YD`ct!7iVfby+tWOevgaYXFQrqCG-&>2Do<{eeM5kLY+z=pIu2xz;f+e}YKm79Sk(`fW=wH>t0adY-V!wzce6_0UM z$rQ~p-ULB#&HLz=hq;Z%uoyP0`8?^>RGMaRpyj`TcIT}H+qm5}kC^qejiWJw~J zLzUXgP|YOQF%*myX6V?hYbzhJr<*z5pVFe9=d6*Y2c>7Q85%~H4xZ0(Db8z3Cz?o$ zV{f6VF;C{JEW={@XEez52a$!JEQ9$~a_BW1*_Q3)NOwy+e8Z(+-d{^K#^Ick&1uY* z;ea6I`*13(kdywW1xM>m!$ESFY;SHNn{sleu4(d4^2%6(eN8`3LlbOnhbJbrt>(5H zyXT?BIJSx9S2ET)B#dkvj&ahN9;G74V`Mn!39YfXZrlcYDDL`%4|6zqVfrvNnD1`II8wfdS`oZm|XR%h9^mPZXhT>EeRFu?nwegY`EB1oSb@6 zJH4|5!|&~me;Ol_d3ZoiYPQzW5+87J>*?)9+GR;;saW~zwdX*!R-ezu~ zj0N^|0r)+W(5A>|qt=dh}$i$XCJAac> z-=~)NjFJaxb+nGLE(glpb4qU8m8U{vF~bppF_t||P*~NMaOWLCp>E@bXY&_0+b8p?w_9!$EKP%q1L^NjMQT~ETJ(4o!MN-^yd;KWqOH$ixw=ph_Ya@}t0oNObdyMhNxT{f^tq?nc z0^HU2j)Z#D5iD&dnJXDG**QFVbfq#wY+dZo1|u2g9{f{_ zOwpr0Ng4kDcB)1XBCJ?2irB{{Rf#9)Df`TOWZF68)z*+mn_L1f9(Og>Nl;G5ov!i)vF@cbJ=AH}!96t^^Rx(~(N&Calaat>PGLY#~QzzRTV*>}= zW|<2+F>*dZ(v_o`Sjwcf{?#|x+$LP$4%Id)DUnNPLgW%N->+J*mgreS@;dNwRoV#< z33nVGJ-;eMl~pb}U6Sfeq{v4c3<{&>AYAYnj~O*w*E6YN7fH?X zNjNVN=yTBj0EK9mSR^s-!XC8>{HP;-bNW?TA#*Or+c(i4C>R8q87?$9~N>w)W1 z%`mkdTuK|)6_nA*Bl*${Dd#4$-2z6mUosFz2U@FfaALw^ARhH343oqpOzrGQIQ?jv z($eG@WaUpYXDFv62>FZfncK25(W0Ae^DpZZuU6GCl>MF@4jt8X|O$RdS zRJO5LVg^(53Y7wrmKmufZLYCCNp1!@3WDwBf&lCW2l?WZT1d~EQp8{^oAIensiHswZ7tx&i=T9-XXdQ&7w#K)Eb zsa`zSBg^*3VS~85g7oeV4(V5P3 z)9F>L&BS?m-*YJApYf=~`Oh6YR1(E;BX4h%($N(w43;@}v5jyWlUCA8fTA#dKq_cd zrLYr`k=GRHO2rdQ!#Lyv-jt=Ft)Ww@Gch<`d8#o4MrpvoVN$f)gQAWfvv#Ut%2mb= z0PRqvZAeo|Sg?mELmURHjTe_0XqP^|l}S<5hhg*{l{~V_s7`P{QBE;zyLBG3MzNw# z!si1%was>?(6p`<5$k!Y3GCfLv zhWh1(p31V#VQ_%B1$LOu;B%e|egU9~fQgekgkzu1s&`jlhGw zcqD#bk6QP5gm((o_wl6gHa7v>gWuaCxO<-t=>8q?J7f&dsUv z6l@caSKhd<_*C90)imY0xOm#mY%w9jIL{#M$4-Z@A6oSt30!O1eFl?l_JS&fo5+<2|r3SvgqcX+6)EJTveUPSP(QT=6xsUPml! z8KmVwVgMj#u027)>C>K4=fU0*)35%?=8q~j-m$X{>{YS}JxPK4jTknbYTH6~K zlNRoI!Td5a#}(vvo)@~-d_>pUYm1m9!tG)M2{Y983I|%+3%M#?kEt|28u)U@MoZhd z!ZLyLCkLJZ$JV(GPsT6eT`pVO*7Age#@{yF$DC(8b?fYF$NYWZ9ecuhWH9LRwDQe> z!9nu+eA`bs{{Up1Wc9^!zBth}y%)jOi381X8!$-=G0Pv}Q;xul1Nqi#D+`Sh$$5_psQB46zLS6H7X=Eoz~it=BCgU1#Zuc_;) z98tJXh>yKeKd(|x9Z&xNU(@_!{ej{;n4&M_+(xW&q;3IECvS7orV>kY9d;qK@Xe2l zqKyJ0J;75XxCM?+%zqKrHR>A8q`ED$!{NP;G)P1!#G;k}?F_>>IUT6*4vB4|Y0dUv zK$r$nPI7t^>?>znz0>XV*={cnmLVm}k-~-h%uiqke@b`UB^x8dz8Yv=CBI|h9dRVL zxV!TZhb#z8;e#t<=G?p-V;Cc@D(}UV@W+R|IQFtY4c7HBD*g7s8Ot7V&TG)TCE|-6 zVs?v9b(ulV;M{&5=dDBWZ^1UY?}m-$p59#PoR-NX_U5h-zQ$Vac($GKL&BaJ(jQ6l ze7nU!cEY8|W(TS0Fnb@$t^6a_?>t+t%i;|}B#GbzJdos&j0Oqkf=+npUp)_ndc=0} z>K6Y1JE0@fc=h+id-v?+Yj@%OKUR+N01eBh@6LCSsz;VbOb(+Sr_#0M(ACLU_0Jz@ zw;mxN=#u(uSxHp)wksS?w$`>oBLR5n+OFPz zW_Xezpk0GJ(jhT!Q?Qf$;syt{YS!gN9tWfRO}~@Gu&?17m93d zG|3JMBdH%RRVSu;VxaKf!MnXKd3B9qA1};v9B>ssFB#zQJ-?MOh` zkOhR`k-Lx6)`=pNx>)s(g!+B8?VLAu@hi-r`Lc`#jfX`Y$vMq^4W?;qZX4|fBm&vb zLHCk%d_}7v65#pC#w|QYg7< z`>-RK%Pzs#DZoFETK1vhO%KCf7@G4|xr8~1m_p8~(kk#mf_eNafzV@yWti!a{{XI( z$$&oYM^8c1+PSAA8K$&lPakU9#-FE4cc-tPHVYKa6yS0{`rYf|*}O;NO-4q&nUXLW zSNBL%4sxnT*R_3d;wZdJ1@W}HhiGnN!Tu57KEAbMM)+~z+bdVqE+;HsCHD{j$oBW? zRZd!3$4ne;vF4ftvESN>^>tU8RoN&V8$CuV7sS)r_(M%EqD34g**;ZaoUU`h&PyIg zUZsm&lw#3RQ z>W_)MN%1FFlf?60#NJU>4-By}-i){*Pi*98n$gq$0BKJa_?GG)4&Pg|ODxg(ldw^g z4Tk{$;~@V4p5JonpR=BUtav>5Qezdi;}iX%6D}l1$zhxlN|sPga1TR)TsMV(WNiaV z_=_H}m$J=dRC!UduJIrv8{7;WpY}i=wY+MrtY-01kV9g?(e;xOC{W zm@X{JvzWl#nIj|(_$L_|9eUT4YZ`5uT$wG@d84j6A5mSmhi)Lb(M6mo_F)*<6?nh{ zwP5a^p&K@M-^8S{)HM{3R02a8J4yZ!csqSF+}D)&&sVY$>4uF z=zM44e--Ll%S(S6GTIWJY`oInp4%>a{%J;NcR&6++Ubca!XkH(- zvD4H;8lXe~=R9|BQ|n%1sp``#<{9}zkVn(4V)$RimwL{ZEwqk6i-_`0GmMX?rA0lK zt95Jy%D!%T#z_Yq4oC)}wAGn%q?}H6&qvVpO>OV*EJTe1uQQNw2M^({ADN+TZ0T`^N;Ff3iJ&>*YTjNp%N^Ur2&P zlHOGLSx#7vhamUnoiwkhmno0pzlv=fE^QQDOdsU|zVPp#O7Z($BmNT`mwVkl9XaJ< zMC^axh!>oaE%LF@QUho|R|A`gXmj_`gWg3?Xgj zl@d&ny<45f)3tUszR8y(Z2JSinogEHD{rI6Y_VF!AC?t32m8m@<~cd3?ffs{jTt_} zVP!74`OW*i1>*(Cd#^j#yu%VLs4Y{6rX8#d$S>ySa{KVExRiu`i%uA|_+0y*^6 zh~A{A5eds}X6NMxJvtthlG{dQP${gFmiT2 zKltOUUEk}{SlH!a5;ea01ou=M-M+1OC1Y?o-{#7!))y+Bf ziIbzlFNkgAo5Lv52)HgfANPGuIsx0-y-MD~`qxS(_F)W>51HQ>9-}@y_2aI1C%7>&LBUGF{fjOkWgM zC6dd_cW^QW+>Uqvk<;l_^jn`4olYC4Lvptbx%{(*iG4!%?U9EF_{Pfd$dwr9Uy>Q?%0pCp>9 z0-H`1fx~-O!M-Z-CGMrK-?W9Ic4yeiKqxW6LCE=gSJK`w*Yyo{ zHrCctn4?0);!nGRbC7zFe=7GKSH)JaELuh4NhjKiE>vY#jGgDUdwSNdhCB(Uct=T& z*GY?MjxQ}k4xM|EyYn^T_t!S|ek}VIu4GtF;=qy-nR*g9&m)8B^{gc|riVOfOIC%v z@P?VET^s!}LYR?oq~l@^NL+Qv>yuua;Ex#STCDTvkX)pLEaslLl(>}Gw z-!75j2p{`4P_l$0D0-9ABi6BeCGhV1NPm1cUDa1~PMyao66w3fIJ5IrwqoXsj-6V7Sv_g?CE1SwU=t&U5LWJ$hCO z8rX=vPrq#~EmRCB5%fQ;c?PlZ3rJrOwvl4LAVDI^Ps-!I(dqd5*ID3?7Fp`nKW!vR zhoC;BX9QQ3_@m(TIyk0_tzz{bI&A;Z`ULpO z>sUY9ki=t2NC8xmG4&u<(Vh;~H5qh~1*??ce8aiy4ScgJrjc@}SP|P!y{{S4qWx*YOVa{vJJ_+htY!^+XM+*lsG@?DM`}5Vf7+weGR{k`2!%gvLjis>DR0vTN zv*QvW$vYT#z~;FR0(hGDK-YfBrrG?gL6$M@eYA?pz4yW3`r|)K@EZqQO+>f#zEt*I`KkU=uF~$HLF>CKk3M?`spKqmnmGHLu6!DFwp>CH9 zEnm(PV<=p51drH&I3520QTEq~ylZW7W4;a<$6VlGcKqu-WXYV8vN;bLX}0=>qS>kj zLP6_}mF1Ia7rqU)`$nG-kOl#=cnUl5*A?R*5WYTndcx>>J<$?Lxkk_&5}XsBcJs$P zWLKelG4Yk=x#78VuMokz%y%gx^3D7#2=wERf7YGTyDLoySH(Uf@ehf7t9i+Y3`l?s zFi=Q4v5|`R$i5!RT_BcI1{dI-#%i(%MF`6GRqMokV;GB=C z?ah4$d!)&v?6J2YUC8t}9-|y_QOt;QweES$GCiU`m2192pD5f9LBPjOov~gy@h?>W z0EBwU?d*|A|M)<#J%vr>U zQ;@+&%hYl!O7q29#)GEGrTAzpvb*h$Vl&f%aC_(16mhp&Z65 ze2vhOI^(}_*Ym5t2mTOh1L0M+fvY58?x1fqAv=PHCu;BhBaXP}d)F{Sb#24YVHgOGhF_`R=b zehT=0*U{Uo(nbq001%-^&Cg@#cpl>w=N=09b>m+KTq<~?Gj8Pk%3CFquw(3derCH* zi9Q;O#{M3c!_i6P`O$z1iS%E7)fF0Y(5DBoIe(7& zhP~nYBQBf+WMTT{NB6%Bax2UJ27FNQeygv|;j@WniZzw^12OK}SYzw-&3Vs*{x3=6 zxm!fnjFL3GD^A4k83T_~la4FwKZd>w(flVYa9AeE?l2^kvAwy-4o6&5oRiUlUwM_| zKZN&s#;lsu81fJL$jRg$ae_JT`d6g1zO_QGf-n{cro!K&rM;+s@3R>&>T(D1ZAeuEkQ9=L@*q*uf_OAwm z;iP(Xh`XCnk?xPm(Sw9JI2i}2@9HbxZv1)SO<4_wk06opl0nZs1`q4Sa1G(zdh5k7 zTp|avU*0r~zznZJkGx6k#yI5E^6PeJm5Mr7gW$BfNiIntMi=~=w{53cS?iB+wL>dl zVB~-fMt_}mULmqXw>J^C&;|w%O8M$bB+##4Q2S()91zVbZemIA+O$^(LL2!sU9S5Q7PoGmXmCj<{!M4^{X$6#fU_1c5Ko!{BjVnSQW0lv< z>Z3g4^R9bS_@Sl4V{`ui2>d4D)O?APhREQS^d8mn-M{=M9w_nsj=iZ)OIzG5k`lR7 z7xBllJqrAw=OeE;r1aFk9v|^lmX1!TZ1#do6hcEt zcMOIgXKx*kBfWB3e~5fR;46ooRg!RiT!kf+AL0RVlj;v@`t!tkbaxiHNlG&Et<;{} z*CsR@ZC^%fK%3^{E!>*cQ_$0t^DhY5-T3EJw7u4D8as(F$&Lt&96tbpq>eH=SLzOx zZ)pAs$Dc`$Hs<%S##bCM4yrys9}{?sQ)u(hzdwYXjJv%HJR+ROk7 zM`OXj>&UO7wC{&rAF`S$32ni{6S$B_InFv(_r%YGdRN68IJE0hBDe_Ztk~M_-~jK& zcP>6(b5xfpv|{b4@+a)g;yG@$nIwt)!x0N2oaJ{6h6AS^KM~W6{qw4PMA5XQFLf#+ zr!BOCKm#X%?O!>3J^h$J;aTePO%>h6%Yb7>c3feA-M9>7o}S$H#c7Q!&pW%Lwd#fxuj<1zzae%CFxb89Q>0fpD zTS?PxV@RfxA(N|hKT+$&ROzLl)OFD0JY(@T-FzoTPTImU8$-Q1iHUO5%+`j>!wEv~^MJZeb(0m`vHy?fx~SB>iaJGby< zIT+_+l?Ma273?|( z#EYL4#(vi$F^C0XMlw4SjxuZJuLgKS#5WL5ji$?IXde(4VTlu_>~&sq$3I-;4{z|! zhiPC=pQb4D90r%MEWcjd(p0r8)aU*^c#cg6!YioRv#Bq%?EA;%By-qgb6j`q?XS0w zydf8fUg;#=BdLrwS~D5LD}&QG1bTyApTv&~$>J?L`zm%FxM7j>{A-H%UEyn=hL(?@ zWXEe0Ho=S#U5h`|WbjUCl{-Y%O*LeFcc^?((-Oq#0v359#@RU9M?=S6mCD?Bn)33@ z!)=vD=V;*jb6#<%Y8KXjPCzl|?=cxUtW8tmK8>Z^wx4AC<&O&|`z_aRxupnMYD!kn z9JcuL7goV!U;UJ8Bqp4hSYq4Iz>U{a* zUx;@R-T|XpZDcGZX25Uuae>p+n&T~eef_tjn@h08{J|d90PY8&2dA;mO83bA85Qwe z?DMIbGTauxA9Mr9zxexCGp77FxA4b_C5|A{tlPGs<#rx$J#am0+OoN{S95d0e++Hj z+wJh6L?a5lfjs^nTF7q_OQ!gM=~6^?M8Oygo~NkwuCv5mIMlo+4ZL;{6-l3Cv*0Rn z0OPqlUd7!nSoWrzTG zvF^h83Lk+zTD@Gb58n~C31uishy{CLZ9IsDp;fQ7=SUJYEn`-x2QhV z6jMlf0D<1JlS^yB|&n{0>@RU;iLIo{b<3~_OukM&__o$uV!p1jbp8YBv%)}Ga^vz9hiwb}ad*>BY?zJif`)G%j z%5X^NXp}4{SoQU+c>dcAL1q3gUeuQn+=LOA80ve`IoOFOVpO?wjAiC$IcZ}zBIPnv=eYE&ri3n2Bv#YS8pOg7cN|tl z#k|u6nOkW_3`eN$D@etW6vo3AVg<>_=~rWsr(p=s9qKKU$r)7`2C7?zR~y)=&m>mK z^e@PD`avz)z=t^Kdx~^$2tiYVN$ZYk{7r7Mmt_U^lDX^$Q&bR}jLe)Lf3Kx21eZXX zC<>!v?(vUmjp9PXW&rxpbnerv0CnW#aZi>QV*dbH)K+}SlF?bjgpZu2-`1<$%ZT)W9SX z+j8B8dt~>ki43sXDI=58yzAn5p4Y-t-(JMc09ICIQgAksPaQZPpA~pGw^lJZF^l(Y zAIPVSyg8&@{9y4P#9OC-?HkM4*C;T>OW{=KsltxkKRWxT_A~f>to%XoWYN8}v1!o8 zvRq9Hvs}obusp1dr4y3C64@gI2al2bEvMM(-XxdBo@|!G?b1zY)m}8-N;3oZT#kF= z^snB}*pJ4VPQ9kzXxd~8Zx)cal+tW^UojNHT|EP<0F8}r8-LPF<+IBhou!d zwvqS8gY-=s!I~s`K9-HL-2x-XOGrTJxx1WKK@^u4nVtAhanD+c=&LC5vB<3WUP1^t z!Q#J=^9*fDwOr=)XWHTEs4Wn;SWANfuqry%Tg5AUsxuipsrIW=+ca>A!j)|EnsP?W zs>8pnd0fkOcd1=ijoh3h01OQ9Dx18@hj)J7^=QP(K4!tHvq!PA!yxtar%jJur6jo} zNZfZGxam=Sof<>tf>e%8I^nJ1jL5$!`t_{gt3f*bnlelE;Bs+RsY&R8OA=0D^*e!u4X(z8zdkWRkR^Tey|H z(x)g>%XRrxf!r8;%h--<})MBv!DO zH-1Y=YaPHNY)sq$T}dEho;r80vc3s^#ddxozSH&nStZ$P^Z9n?%Zf#A?8FA-edPzI z8TI{z_-pXn!#@vvJqC%STBWp5f>t=dRSd@`1JLIuzH4qP@fQbzrR*^6N_{P|48JI; zS>9SBjrb$*A3^wUYL{mZsQG`rkn*75f+HOfcAR7LCcV})ffvnyWmxgR=~pC{&fYN~ zIb-*be~o2Bb8F?Fv#A*SgVMj5bA0B$E~~3q-JfxW!NL*cOJYZYX;X1KNc{yuOgmc**j$2JKkBcJJ2W_B@{^MEVLwg7T}N& zoSxp8rfP9q8x}|i-PjY3MRnooB+@zY3-@kE;ScRK;te~;KOQy7bqljF)0#LD2*8a| z6zo&{Uom2O^}#(wduQyW;hh`e4~}%XQRIkNT>0gqTx~E7!E^jOh{4Zn*Tz>GRO@BsJ07r9cy)8Dt@S<(4}5yy^r6=rX< z+{gR3-Htk9i>=F(>WtZBwlaBE<7$tD}+8;R*t z!m7+tXCosx>r(*PKqkKw?l?=h`+Mb#0IQTe`|(lS-X+6;J06sds}!3bl^lve_IOmb z&~wPeS2fCV(C973`(dK)7L9&wb>l@9~UeVxWV>GR!c`jC8=q9Vy*gQMq(A9`0BP=MRhn zST_?&@{uO#U%o~F`c?U^Vrf3nbHera6^`1Rvd9`F`9HnhleL7E(Ww*M#DybWiUl$W zT{fA zdRIR1>OiU|5$6o8*Xj>%TIuA7#c$>Y1w~R;cVu%IH^%-qXv++A1a;4FMKaFvFFj+O z&hf?v^`_j*Ebj513gF=ymX^-f!8XKcQ5KT4Fv9>7Cm9dXi?%Etpp zK_@(8y(Y+ST}7Cx#YdquO2txFDrjQ2H%CHb_pSZ&mE#!vY*yJEL7+i#2IQ~2VuQ%E_Z zv3^KOpe%SbpDaWjnc&oyC7B9HcNF=BQHFb?4*oNNk&o+IMyEk3Sha{+;UXE{03(jo zV(!Jh)#h(KI8oBGt?%J^L7W65jGEDzZj||?jg8Rvs)}ujF62u%+!Tys`PHcJEy83j z^V8f`P*(@3BehzF3v?Tt@_PGI>NfNra$4%$nl7WIRkge!QDjc|KZRVlk}ZoAABhz~ zQBlEfn?1cMlt%X@yG{2WxLo_ygcBn9ApEDCd(=%JUy)k`Re>87S&Mz%nXKfj#@btz z^$S&4gwhY0er}xp9sR4vJWJwzPSmilw`mAC3OFR!vfbV*p$JE`(~ zr3taRjz?m8=Rc)=W?72DO{ijHqde-WOH^w35B8_{b>gdtW7FbM{Q{K;riv?6aEBlcro21h*Twx8;wOjfd`qB7 z9mTEEZVZPba5!O(xCeory?cuG(CKpsb?88^$a4&`rW&KARav9lrBXE`%#C8AHD$Nu zk4E;TNu|ytP);hO8Cb^E=~qR>SuwajH>G)sR(5AaG|JIhfpM2ylj}(tmP>$=4il%+ ztd;X85)6!R2&Y^XiabTkoySfqRlUUE(<$ypkn9`}TFs4SxOXEe0VA5$Ylz!~LI527 zd(%SAAqS$;X}6&giJxf`HMxnHwj1)RkR{tD*$xJ97Olm(8)7y>^r^#2(r>yzn9%+ZJQ4=0L>G)WsW510>@rg~^<-i3Q$o?{sm zkb}nIgZWmS)x>5UkTEA1BD1v_4m`ql$()>3i$fwrvNuK@Daka9`q>quj$!~juUfZh zBgJ>Q6a*OSP#1K#K5+ydn5$oB-xgK4sEcb+TFj8Co>q1NLCz0)umY@NFnRSo{{W>_ zmuo~L$;kaGe<~}mt~e>hTw3Z=(O9z_Kn{2yb6LBHyK7P~9DZK^0F7QM#rKTiX~5e^ zj7a&%LVHqaF}NmBdou(fHsx20(un0)!=9hYk*?&9HHFSX;C+6zavR7PZItcL?YC-m7XRNJ5))wY}=wJ4DM1 zF(7yC^{P@lQpzN4#g~k?e|{<>B+T1Diy=VMHb5NWr)#(bJ9+_BUTE4T$>%&&PYcNy zILI}lX%!hH$!D98aky|m6w8@pV4h!7*A&|*p4#2Si}I7#zvWTOGpX9YFvl46sph*0 zJL+g#Mq__AW4vR9J-zAD&fn@3Ps|x zW#gVXHJxnig`{7(yCSSAT}df3Oc_tyTw?g_I|k_@l|4yCq{5cE5|)5 z?rMiytkS|6h*O?|wGoQP%&862 zpsd*>h7;vU!0Kx1P8k6~lpd$GGH7Cyf|%=$dzx|6aTTL=jARZEPQ=!gwx7DxyBrdF z`&B)lOe2)wFIt}C%?E4}5D(>5&#i*ONeM`Q(VHH*?kbc;ypXduJx)3jf6q#~&T-|D zk~-CE6^`cY3)~`IpN1HC>_dXrWnCd+o|0WJ4&{c6)#F_D#Da&yPEV(Jzz z9^H(3{!~K9BAZ6Ino|B-Il=4cnq|t#w{CJzYNAR@0F06w7$-QZIg%t$tH-TOl5A2& z2B!q^N{F9xA2n*&SlfAEvYp3@nTq5YMt63rcGDzz3NS}wRF;+m%Cd-2j1j3jdzz|e zj?k=XoDunUro6MmG?U6VAvqq^L1cTmT(~NL@sZk^*bV5+VlrIh`U+H$Ir(~3M3N|& zAj1LN`qZ*X<_tu*{`cWhmZnuCS(fAM#y4TharCP9mv@bD2HZvm-pwGMX$Xyg$Gt7= zp(6zYoRXlC+||{ERtGr29G~!} zjUjuILva`wIb3>D+C<52%`QTgE!T{m^#ZFKe4yKpUezMqGQzgfFUoiZhOeP=lCfm7 zGc0Ne9CO;NmJAB2l`Gz;3HBc)54~KHa~?MgRg`NT=o*z@&}G`ldZSYGV)X@PsKIm0H%_)%H)+ z^gX{iEN2y|G&c&2(Colo1y3AE0ZESskyV)kT=^L|&0CHXhHOehD)grWkzB2@vP8Z~ zn;hr-@l;o7x&#*K&PNqJ%%VxmWcSjMIX;#l8Kq zJt%hsEHWulJC2oNb%j54Iacg_Y9-_nV<(ATE*p{3sYh&!88Y?lS|$l3gL<41-l-W9 zbrHYH6mmyut;v?elV9Q`fPhXvD$nzSkjy!$T5D-j%D3b%86%&@o4N>r82SoNLGPgq z*A9_+%(zuN=KulfeX72nI@~to+QYLBnEwDDYPx_rn57$o_B7Z?i*iDNG20jw6Lune z$g^}`1dM=cznLAp0Tkqpm1`xwNl$9eSdpawgV*${q}7bojY}(s5t%mRAG@DghEpuT zw|DD`Sw7HIM-RxOuYbrISe2t>Arhngdb zF)!Mo^dN@m&mX61BPP&tI}%&7izP?s1_z+3lC90WOCT8po_>@}%L|BEfG6eyJ-@=5 z#7^5u`F%Yo<x;{91s4rTwa9AF2m9rO9VM z@Z5OEnE#qi`c^h#(y(z#-i{>H{q~nUKFV7}bvOOzG)@fBdurL6m z^ku~uWeie$=V_~v%)9pP$sV<#b!r%gao3-%XEaf(Wkvw@tlLbHw?;rn;+rIw03xW! zJ$UU?MG5o6PxS(%YtP!Xa$0Ek&4yUGhsPy>e3!APzs(EL1Z{4Qho_k<={uMNZTP03U zN}p3`J#0mWC82y|^uex6;w`PJ{6Ez#u4ZIrw4bLtvl{?}cT?PYckf-4QM6Khpsxxs z&3R|V&1y5@EB0gM#E?p4lNs3_)4j3mxvEO%E-@=K&*nQ)zP7v6+S6By%kq!j+lB;Z zA$BX zrh^}dW{XUfJf(a%b{&UYR+Sss9}|iAk8t>VFNLpeX0p@Y&Xq$;j9`Q(8DCJo)Oe!m z(r9PWFE9{gSoIDYj2gM{{{X_)8ceTY5+mM%%#)FpT&W)^?Z!dHV)&at)9x;3Yg?_( z0pGOXIXyx4u0<5qrwv%>eC?_DHsiy$Giw?vq@jZij@TG*dLDoeO7!oBnk9wAu+6{B zc>@++&Bra@IQ6e6@#|_jew6c&TgVvN4pSNFk<`~e@O#9*BE9htw~{F%fFmf8N6M^l zLbh>$amF%piqn~FVHIQPUx-My771?@jV1{tKm>&x06Sx!uN6zc+J=MTqbG&$A!U*n zT1I9AXiz$J&f*Ei1~3k4pNKVGM^L&pGDf72x&Z*LIL}V`tlc3N&dzwQAl-F>17i&D zgS7GJaZ@f=WX;@q4v$vw){(5QhF8(}kQQlOgR zQS-Bs%5l(z=sybiX}%TwOxCYs8vdUoB+HLDl`PdPxzc4Bsgouz2U% zzI(9O^?fr^f$Ss_DUc+JK`KEwC+mv(A58JSooyHTLWL3XR0Et2fGu4+1GiFd1^f}x zye*^|;&2%J zUOQ($pW#kTBxNMDI&B}q-Uaa1wtPVaypmlzgSuw(5E3zjQ`^2yPEB$j7(OX!7I)8L zVo2oL32?hZxj){|2d;DN-!O_qr(m3AP`Su>t5M$;1asDS2iRnHwE*^&tvL4^HnEjVw=$V zqe}6z>h>vY5F)ZDWNt|#oE~w(u1m+B9=OyIZgkKioU0X1#Ex^3(y^iNE#YfTO5af_ z94LI^gKhvLJ5-VwoE>p|5I=<4s5f$YA>bDyOeJ52a@rYjN7>`RBr?P|#xoSq62O zVVO?tgZUhKRITF=23THRUcAvpA_6}#{$1SRRY~XX90BXvw>~3W-D&z?lcd_lqwfv8 zap(ur@~_Wth}OO!xKwLbk_0X#DjRlokioJ3$rKb{qjR25+<Dbh{BPxrlIvob}EG@(ecapd}c^rRQ3mx?wzF$=Vum>e;C^l! z?-d@T<2?4Pqc?p_p$oIuHE#y#zYwgYvn;ZfRdBgDIps(r-n+kt9v0U85v9eW>d0d9 zRPFuXbqnd&Kb>&@01Esm;vWYzdX}@Q#BC!B8btvtUm$=a+__v1epC8aMe!rYSF30( zG#vTO)PUx&4MW*WAwF4*P-Vb9FRJTUx-=Dvs2B+_&p z5UV1_4sh520>_i}H8j?`1Rj=W%U&mCxwl(b5t?OX4Y63Vo^$enn)DqT!*cj~%`UH| z^W+2NKVF@EE5y7_@h(3PYr(C65!}t?nOSkb=cwvUX?#8Sk9YA8$HT(9LXrmeb0}p2 zW9yEjUC+i309wPQCZVZXiQYWybOe>ju{KN_^p5V6x5(W6bcXD!Jf@w8(kejtkS4rmDp)x0!*V4$|s^PHSy zXN(V}dbO{^Eh5t7UPJ;UXDXqI zK>f;m*>1VW_e}Y(*?P5lLg141MB!2`E$g2zM*xl z9VXV|OMs-S1shu?m`%_v6;N{{V#k z2k}MTvd2^&MXAYElwht;@Q+__O1DuZp)}fio~_}Z5d2bU@2-4IV_O7f`zT&y+1qn* zoMX8CD~$1`siMnnF0LR+?NiHT>D=%S1$bW5#v1czmuyggTYB_eqbIlJ zn)}bgBS`S3iyo1p#2Q%R+9W+mAKyLBd9MQaci?{!_#4D`mOdh|^Cg~b(a43kkAcBB z1P#6G+UM~90Eq6dzSCid;f=m6Yh=b;WEQZqGr`q||jR zr<8>JnIw_UG5o4$C30a6bUAN}+CPeQT`K2Hv>!dhSjjvv3<&&)9c##ZC*i$g!n)p` zd`^)xawD-#q1STYBAgxx1hC_^cUlL=3A{@Yg5_325WsLYl?pSBrzD9>^GaY6GI;dQO#5}M9@j-h-0+p~uAQfs znF%SLS-m|g;{O1RI(@dh^4i66u*8mAVZd{Bl{YAc|_}`Mco!hmss)bm!n1Mq7}k-}cvB1I|}kfVRgL5-jgMpW~Y z>s+VBuZK5&AJcC2yW8@X*3lD;0CGAV!;#Mz@9XQYwMI2lYg3l^hwf!;!`=pW9I^(J1o@>ptDfEp`?Kj$- zO3RFV-0e~iZrQIy@ZGkZ1H)xy8vULYSBf?pl~{5c2cDoD^{#rA)6i*IXmz?D!Y>zi z0!x`Z(RQ9;D>l%Z#yaiXNaT_DX1TwM{{Ry_f8c)zM}4Ep6>Z9gj6fW}m`Z|Q_(GC1 z+?x7BSn;lw+EhAbuc*ZZ<;d8oSZ*h2C*{vV1_3;0k81Ld75F6UdVQpZ;o`PT?~RBG z{lGkDk-_GaW!36uP9FBBm;4;~qjRg>K|SmFW<@T53<5yIagu#~zmsXd>FCx`cI zD;56$Sbp%wW1f2Y`q#>O&%*B&X?JU@cqJAacybn0d^#Sd3V6rk&3d=PYfp(r#w}mO zyIKo?9G1tJF_FLk0iNL2b)(IqCVE|?tkK>}PZmXMrTK+?;;x7=a=a3HWkKgX$E|${ zec~_pMC=;tQ4CaL+~tk{!2bXuxcvfKTW6Z~+Aw7+hB)-(3c>h;s?DnSQs7)6ibAX+ z2dHj9H4&uNrAE(2Yh3u!(pYD_j$bQ`Hm`4f%_7EgwD15O zi51oBe;O=i)y9cx5XmsW3a2~pa(w{EBzg`j#r$)v-Dw(Rjd3Gdo1MzCC?{?)lgC5P z89essUj&j)%=vgnL&g3o_=n-fovkH_h9qdB%px+Yxqg!qwQV!R z@ioPg{{H|h7e6Q=PB2bzNIY@UzJIv*c0MEc;ccSVC-N_DqK%$qMO7iThXVkXOyx3p zJ-{{kOYr{y_G`588Moa!UkGCXSVyzw?#KP3`B7_XjU_7_KZiaZc%N7B+_Ctu5H4~& zt@#Er2GuyhUvby*uLbdk!yO0V<@{@)!mtSk%r`T#xz0c=Ndq3|HTqG1X>)61BvD7s z(gr&mSH&JT@Sl#g+voc|n33(tB*`L$a0WmG^SJN;BN@(35xvar+B&b<_es0gQ&7`H zOobf){c;btP5%Jd_SEP;6_&?W znFPLO=Gs1FMjR_+jD`)2XO8)-Z;W0se+^%GHiS&GeaRO%Vc)+W=e;GS<8J$-=Fbs) z0?_rHR$Xs%TTLkn%Ajn0q>{`rl21(MfG{iQEjvxoH0bT@V@TtZzHGJl zvEnB2ZO)5zXzY;VY{dM-AQQ;QJf8gZuFF){-$>K;LmN)YGC~5!ZaRQ6PtaDcfIK&E zsNWmO_MM@a?&GiCAN^{HLdwX_Nwd&&tJc;dxBGeh(vB6Er><)DzV=#NX6Dub$;k>h z{0FD7ty!hhK4?^gSeGYn7#~{V4!AX|wpEOIak)SbIma14QO#1iW98Jd;U5rMe{LJg zuaE$EVSq{gzu{CqH2hWY--9$&ySTlI8Rgu`8#l~V23V2Q4}V`;(38U#7xIR*K!o(b zr8u(iA zE&M?lni=Gg*#-zr#O(y0pbTdnc>Fp40NNh&Lh!z+2Z}5wN1jlITQCL}%fQ?)PB9^TTzWoy@8-XKy6az;7sM>xsj>0PtuKabB8pvs74f<7pn>x?Sny9d=}d#femm0SeJ=LlrM5iA z0pUR7ZaUOoTQX%Nndvsy4dERt?HWP_*^B|$^y9U5-wggNXkI72@^9jl%Mjc1#qyWN zNez+!?dzV^@&2XpmODK}czXH`%PZi^yCWS4*^Zw1#eEB+&kUX&8lI4zW3uPu86)r= zXpZ(AY|)wfOMFAPx3zn11Q_lL;s+dnatjt5008OEO?;`~kBql6c*5UH)mjqMDgwlj z`_uP_2Lm7+eqPn>o-4GUQIU^{`Q5{*;~u#mO8GwT;IH-%#MJShgzuzlK`KoYFUq55 z=8TbyARl+B=boI7*0`35=zT@wpAz5bca5!R*B)pHe7IB%u`6{_a!Z`_B=qB@Rq!T- zs(8}R?cOhB^5r>9F)l#v+3BCDu3u2_cDbu+D?Ovm){|wVMf6K2q;0p&!PQ)&rG$}H49BfU25$BRKmnMfCsKUeNA!tuf_}QTU{0l65HCL1PtW2 zJxSvj^#1_$RtbC8Gn29P?t$VIlE4ej8~WqFrF{4C7g#Sd$RuTrGxCp@r#bhmT3`m+4EkD@fy-^6vHNx%<)4e z4gmy`ahwsK#8>DygqnRrM{AZt&N}*kg?!=RUjS%65Djr^svPjgj2~}r@vm6X{9KX& zr|I$)Zi8v3Cnj{oX{p!vqFYN_Hiq_56m8B=w_#rrc)P_=UTP9rX$;dw-ztUYB%ELl z=Dw%#FNLl=Phz%Ow9H!sZ{v5(#(h7}O2_cW!p{Z#I?)$d)|w$aGCQ@*#2u@gqJhBZ zGmK|B-&mi0q(y?-JW2L-<*rG92@?sNez9IXu@_;|~*A*-4ESGpElYz00Q|pS@ z@h*+3>bhsxG#iMZVhC?Bi0kwO@#*^3ja^ulk3zJuxVyGXSePu4f%A10^LL4x#7D$Z zS?X6S5`%!G^<0oJPbB)|>&F%DUK7-R;TF&>^o?rt-d>^+HO4XKK2OXCZaNR=UPbXM zNVL`bO%A;B`Nk9h5pV(=l3N6IJbQ2{H2M($`b2`N+2okXOqj zXK%S4zLoa}fMnC>wps2Ge7P`UE68O%4SXx%5829XKUTWbHQ6xouxQJ2s;4`Yj_uQ) zgFlzn-W9k_65cy&cir}I6c!+D1KgVG%bYWGVxc&9~A1AQ`&fR5YW%G&l$pqw&9hOgSm@x7!izjuR-t;)owf? z9;GLrH^^O`@<~(Qo_bbpDG!p*Qcn)*7y4G0_KT)y!@dlQ3<`+wqBRR%L9S`SNHo9KDH;1n8bO-Wor(7XFDEH^vpT?re z=s5R0XIJrM%y&r!vnfIp24HwO>_Fi2#d|ly{{V}P;>~fi_QW7yDNgPF*FXrzPfGbh z`$yC?m6p%OvyeBC(*RuL^dOAqo}5?G{{RQR4Cy`+v0ZBR?p;P_3g%bhA)lF9P!cjm z2PBb>4>TyA3$I0207Etn6J&tp4jVAc%N9&HGKk07Q~re8NOh{x%aQ0ellKb z`i;VAej9@3LZ0RB)Yef84cnyzVL$`-dFl>&4m;Jj zq^>>D?z(1~quN^emXNACpO=C8k3ws<()4+5BQi+Gp8YUAE1mG}gJ+{&E&RYqv|%@7 z;P*JrGhJ4*;@dqEHHH-=zbeWy0irf+BceTP!*=oMmY!Kq><0zAap~_~4e?9C()hP@#W#2N^l($Ds7hd|mM4 z;eW(kGsba2cO20@mBPh#-~gcyRvU;9$4}C~S?x5PLs-&|r*XO|@HZz>)1FVK&{q$8 z;aK(bS#7S&G82riKPWuopTHV-YeZhhs`!&tlIz22nmPe;>%c3OQ-j!c{HvDuHKh2W zOSgX&GhMuGxX2e`tbLS_7bN%p01lnEhxGd^D>b%&u@SD&T$XGPQhJ|yv3KGKyf>Cs z2pk`w$6g2Xq}Ic6J0B2Bqv*1mn94kk3D|L*eJkW&75KwhgT^ph&1t&QbCW8!IR}+1 zjt5S2>t4+iE#g>LT8!}PxNkd1AJ)7}#6w55)ZX$B-a9rK8#p8$$NE*%UCWB>aeo`H z^_^=)x6-r~Xn=K;vK~lGf`oO!&U*H*8t`v}z9DKlx>)JuVJvxR$l9R&;xV{x1Ezb| z)q0PB_5T17X{C{E zI4_A_9`R0_;W+L*Cv;Ng)O_*}y|e?K4tElNO!uw};6}0In9}P@)DYZHD{qqTb8p+% zV-wd5eo!y~?Ox%p=$;{KjAT8jUQh$Oa6Y-@5!)PN-;U40QQWkTd2?uB@;Fjg0l&^U zqE#9~UiOEYYdYVIbeZ1b*3Nm+h|8)u1fG~65OdS{b6$S98uBRB(+7pbh$ce^)= zXTZKRw!QG5#EEY#_vSauz_}ndQMV&F=t$2TfyI3l;hz^p<2@XUxcs}79$beRRs?k( z-lM3h-Xi#OsCb&~wXIs*AhfhP( z!LaBvNphG!Xl31;@)Ufy?SYezuj5~?R*Y_ZDQ9^3X4*Go5OO#<2i$%&_($;D_JW?n zUtbSg#0#5<aV#MbCCCGS4P25LWpZX*D)2=zdv#=48FIhFns+_kcY7F13w^LgGwaPc z1Z9g6w2nU-&<8A7>L{n9)U^~g;@(jZbR(LEIRsX&@|*$JHD=(=W{B=` zzsjp#q-_plQ-<{YDcf>+0j3KO7|84RRe0nq-zea8r^5t3P%OkCt5Fq5*kkVWIHEh3 z=1{qc;nZ>U$7&WfjrP9^!!xc+o zHZ#cnROLN22JB-`1dT79895@aK^&nseNPZoN!IFPUYr*sRQL$t1PI!b^jB>rjXRO9M zu&Ku5fOAn*s}1S7dPX=^VS*1s+)`Y#I&X{<*y5Gl{L+yf+3HOK;^pKKNB~98KDqvt zF|js9D3Ruj;9!b^T*L%NJoT&dG>~QBZ+;D8e`v`hpE_qJ=Eq@9Q%Mljwl-jRV~kso zmOO*)%~!n;N&AqbA6mc9uk0jM3 zlPV-)K|EetDZuIlVEEZ)*0f1yS^SbQcpO3BdV>KU$y<+T+a2wT~Qg zT{I??lYIvJrmy%RCX$k-rabgrID9Ofa>%ZHt;1#!y^fBVY8$0PJWM+i}To69$$DVLb z1E}hxpWzkwrQ$sv=fiW_UfRmG_W-Q1q7k||GxD5gx8y7OlZEpPK5v$NUaP#VXZjxt zT}uyH-5=EthkQd}uIVxAR+FUBNV$$xIYu2ar=hN@-QbBBE3Z!V{O9-+_R;vI@V8D) zBFsf~X2sfDRt14)U8YFRK|`Fr6snfwgI@RG&)bjU2Crjlr%Il1Rw}|kyhH%lS=R-m zW1Zaqz~i1jG|jvt#?zarMoGl>F!|&yXSw?qs_T{(;g^0}Ju}>TjdPZ7(CTn zb;+;Ij}-iW)-7Ud!z`^Ts~xfA@s4;OrF`S3{?z)8r>M1r#^e1{U`zueHhASSMtX7% zJu_Zy9}O`sKJ~11e{97g_Cs3u!QtHs&OKjMxKx2oH*!HF6VPYVuS)q>#(%eefpj=# zYvCzG$w?4xR%7>i^R(n-V?C?$lj0xk4X9s7CXu4rf22mC99-mO+%Mh1!hkrz89vyr zhx|(i#6KA73vaBIww@wPFr(#Jv&SowlabT^0Iy$D!+saib92P(jtpLVD{|96Rempj z!AbOA3g1VicxuXRPEl{Ur{)NZjsX}`xrV|pLuYq=z5Y4zXZ#e8;%|-g`P0G@+-NsK z<1@&UhT29xL>oZ}K+gnlPC>}WmUwgabNGeh2afkmwz<@0l0E)J5J@3q2L?m|c~Ec( z^&-BS(LdmtzY(0=YFD~DG*>GP#kf{QCn}~`-2-pP_h^7#(tRj92LY0E7Pk;FYN93|=MGr?ZcEXAxnfMeeFf?IiTiU~|t({UrE9 z`zCxN_%G$j;TtIu;1XWq<%F|7Mlj4r0C9`~)9YS$5pnKIhNb(7bIYPi%kM7-mSSo@ ze?)$1cpvr>@t?#<6+Bt3Hj53cs>=)!hLE!V01Tn_;Ck)J!R&ai(C>m@vZsfB6vKI` zHp%rJQ)s#Jfm?Xhaq>i`=Gw$=JBj3;*srdxwCytal6T6Oc>rJn-lnUu@}GG7p!BcC zGrtk>*t$-Ve6j40r^Dp5p{v!2rdUg8*hs>G#y|Siw|R0&L{-LW1-W$~lg28nlSwS0 zfH)li=bv9{{N|-ccG>O2l`A5|c9F8R?Cph*fH>#;`&2WOQmt$@=hCcCd2Y6QJfiNs zJpuLiHB-*qfRU01LB=X33wt81+?P`*Rcx~N9cmkB*`N>%$AIWk(r1_$sOvyl{78p$+(|PWPNi`nOz*k2M0U5^IA4ydxqHTPToK# z`BLV#jJWHeO6vXM1<`PSyYF5F@yo@M>0b`@ZBFJ{EnPpj!zxy z-gW6E`!|@XOQ~O!4x>ER=O69w;+u^J;nj|rrrumzPpe&s7S<5EZV@o==HwQ_U|=a3 zW*N9EU>}TyL4Y&Y3`sTlY4D<1d^_N)9XaKW3!B#Sv-eN$ zaq_VB?fQLxT|O0fV^Q$$h3xGvTXe{zxxfIHJFqdwd{^nbZ8^sdp;M{zd0bPebJgLB z@_Vm0fg1H}^HWJIa!An@$s7Szyo5-19Dv6K+P+T2TarwTSz7Vk~yt5ia#N| z(Uu*lxF&|RdJ#N((ON^saw^#$X~AaUNAjvE6}XHE9|NsewO9&?6oQU27<2UJ(v_@& z}G#JqTJFgOQ~rCxcXRUvQ*9cd(Q8ze^1!+Nb1$0O3Up|?_@SYb!4W7+=hK|3Fm zR-A7Ue9m$S#}w32o1OMF*J>5P09H<;9ID%3U-cu4@1~h9gkWuqbj@k5)Izcl z#fRi6C)j?{>cJFHO$V35I{~}evf9cxClH=Tdaxi7TzT-EkUeOUcV0^5o~NlFN~r1@ zy-_4_L>Z$TW2R}7dFw7CA1*&%@T&1iARj(5Pc^F}MYTa3RV!aoR9Rj~L&ikI40;M| zFDpnb+8wN;89n{QXcR%U)MsepHBr9Q%t}jw-80&Y>K5*2m|=*MAjtGQ)XXi^n8p;5 z$E6Kva|C5v?j&)O-l*AmQ`{J)`6Q2$*v%!mX=+cgV`ChIUP?hd$Kps9wgbm+y5h;BtfT=BQ6`Gf2+F?NPuTGw)8cw~}ih z#{rFN$7yV_3Xjgy)0L6{}-& zYZ8kTP1)pu(-oOY%T!)#j7Pc<7>+ZZl#u~4x=3;9>r9oFFak%hJq1yg<6~?b6W*C# zWMxEBG_2&Q?c4IIa$YhZ5pWMY=B+GpOx{xw&p9=0X=;zPxz7juYZoSBQclWNEP`cD{ot4a6okGgf zRgX-Ohn&m2AqSECxUTjYo9w9ZVS(WLSLX-qf$_#agF1(XuAomTH3{TtFARV(Y-qrZ z6z4ABouj@n-oC&1ZSf~f@!pXJrQxt$jkyHnwQD08bee&RknuLLf-6!x(OP81xwF_}7OA zW^Ucax04(BvJ8N73H7b!xsq!|csdMVo&o&-07}nWSCp(*Df_Z|o|yEmu1_LMV5%~! z)6jh=zNJ$#Z6saBIRF{&?@YOp-QYH-Ad{SqwMJC}TyincpHoW|ZkHR#!{ zL2Mzj3Y@ff89izTn63nC^M5M23htZAnZ_9MeJYbADvr`V3X_BD=~SOXDReAFfVplC zJJqPzTp_hD_l|NqdR9oiw`foi_q+4?R)wl00LvKU^O{rJQ%1X!i)i4SsX1k@Pwv!oG$iW97 zhEfLxjp?CTyk zkUE~fTKF6G`uItvd}{a?s`wqW=e^Z#S8krm8IfYSJS#Tblu$BDfsyZ=AJaGwjH+O9 zP^UL~ZR(Gk&N9f=q}p1e`Rx6VziHnYcss{-cD@X|RJO1}XNqYLks#Z#WnupSEdm3| z1CTm%U)86KWta$e=aJj#L>Ew$+GR-?qy3x?pLmYh_p2>%MWBV31avfQnmF=5 zh<$1|$slduQsrW9?3ExUACPq&dxKYzqmDIM4p^!yC@0 zJTd+w$2E9F$&WPsN2M>9y|bOHzojvuYm_KYBfV*K5vWwUxBc=uh9h@uoFBtHRK*++ z4t9@vxo-)K`B9!g?@}ZTs?9OlM?u=LkZwRwC=+1q&N-_edAC~~w2?c-@^wNw`Wm9` zId(A&1sR~bSr+7;dvBDI?dU2Pq%z1{oM*A9?c|Z9GC0X2ziN_07ng_o-=#RMOywa- zh%siyNBPY@DXeB+Db%wm&mF$CpCdwJ$ma(H3N3A%=0-Rf;Cj=%I4aoGY`^o2Pw6#So^5u`9{{ZXIw;Y#4Q02&wbGoN{cD7L~HbLj< zRpF1!9$ZIhl6&dNkswASO*w-AKnxQT%T#}^wk4n1{6CB0}$mWFf zA0rtL?y$;*Lv$U!wHiqpH<>Tq&d?9@r|&BXw2bay%{DcVO&qMhmo-V1O*=Bx%^~`9R~>>r@PBg5h?No@pg_aIqgW(hR~-E*NnMq#jE%zMV?=N}`_;mUv?}xTq)SNP z1yBro`coYtg@P_io<(0Rk)I}`V!4?g>}EV*ed0$y;Z`G!85m8#9+bxdM*)U#Gmmjo zTKS_a_ydv64YHga?nxb(w{X9o)3rr&V`R#($O%E)pf$TIBY^Msfap3LdsQpQe$fWv zaMaH5u5?&D)@nBluDn$)3;j9veAV1l3Y0lXzyE=(>=cZ*xQZ< zKdm&|RxrJZ6kDyUO)3^WG1r=*G@>p*BOL`Y%H^h+?PLdomg9lxSMFj-Q1l0}^rcUG z8YgsN%PhWP`DgH{p|;xoWZCPx9kW*AwM0Hrd&y&1 zm95SWdV5w}f_9T6lDuN3k21!xFU&K=4+N39ey97ns=b0ycF=P`fq?1t_3cXVu`48x zx3@hidpP3zGD|tkfO2ZQs?tu(KJQ>@M#2_j4)qGz$6R%(Cz9KK0K;QER!}VjrDQm4 z=dWt9GRMEpIOOr|RFGM{h}cbZ-cbanT%Md%0QW!$zgHHQ!Z45#)M0+Ls*Mn~3lrgw ztx?(Lt47a)IR~MrSGh@QGUrZ`#t*bzFDN^6`gf?Ic^1`Pbuq~%eo}b@-x;Y$oWKRc zmIJq^)~fxU@dHoAMHk{Aag zjQUoQw^HJ@)RyL3OLQt5j==F*)}C2sd>j@W9-I!!Ct2ws*Te{=j|(#QyZ(6mWEzcoroun zaZ^kdSc8SZAFtM+RT56i7FYUJ#%Lo!40&vN`q6t7qjh68>=Z!iGn0&V6xN?^5U$^+ zTDKnL=f87Ux7P+slCh2y@@l!XxVc(1;3w}K`&6;ZES*64O*S!v4UFftO>YXoH>o7I zIH{c4L$i7a!z@H;fmQ9<3$S65dR5iB5k^vI%9^TRStnm4bRVTmR+8a=njwjyQIY znK7QU5T)=&K=h`YdJY!YvjYb>00t*Ck;g2O$Yx^9PX|4!6B9zjS9v- zVZ(93`cU19blvnXq;NSZt@94G4c)nTzz2mjoekT%?uh_z;`-I`B;`Pm43W+{147)J zG$que7FdV`bH!KlB=VF=^LD4j3pV?gAdGGNYB*sV@>}Nv8KgAZS_-QShsr|o>_-IlHKTS| z0LpUYW9TZGUoeIvAbQnvTR@(Mb-l!M0|Q3UwtAoER+=TW=0)GfU-6+Gnq8Q{^{vPv zAo+!ZXYVQh01D12-r$z0m^Q`0+@pYUGfHn^S$Q3E+qkZZSAlb%x<)WZ6+ppaSImR} z!}-;6_a>xTDD9cuW($Mq>GiD{5(X+8lP(Dy9^Xo(CA5>Opl!Q*jsi;9!p`T+kdmjM?Nv9Wk!`(*fRkz8 z)A>{W&E#?q2e++PpA$Ol$OEyhc&+4k)G*FJI!PH$CTSC-+mMh4=g)eU(qkRR+1-9p zId4x-&aKUC@e)UR&hsQ$0uh|__NlOG)U!3k)Jx?@mM+~#rA8*1ZalUa82suNdybrr zdsM6-E!EP<*AqgP;h1ebs|tI&nNHwxhp4MlgXN;ScG zcxMR5a6hG6`#YxR<+$zq>YQkbe|64#`c|=5(3Z_9U;{FzP&yw)*c=lDx8`HqsPuGu%}@JVzzqX?ao4 zKd0eZSJUp4N01cs_N5fM6U}3szW}lT4pirgy9Cj+o>+X9>M9{~31*cSAaT!Xk!4p+ zk%7-s-->ot9*ok8;Wv3*57MSGHo~|hdYYo47Ed&C81wb3s}o9_4hCvcE-|{)YLFDm zB5&=CbM>lrwknq!oDhx4TGO@L0WrTJdsR!T*A(rT)vql@zrLQRXYd-9CfYPnf$=O;-P9UBI8^a+Zi}04>g(dJjKT&y*^k5 ze8xBc^XpJW1IB-MoD-i~R((mc=qecg(Dvk&E6z_!y#=sv&=$&?%`ise%q&AM>rSvU zd9CIG266d+^{Sz;l6xC=(McQ|ADz7k?NoIOi6T%W0Oz26vQ`5RdiJGdjYNHDTwjk~`ph%*G-xIfCSTCz&wYnA9Rj>fW-hL=#e z*wJimRCEHov*Jzelc)GX{!94$%UJE?YmgUl^3_Rj6n*24-Rse=*@B+9^%dhE7$mi{ z_-U`|*Ydr!u&}ujNfPdn6{2MFKF}sXs9OoUYh_TaF^6hT5R+LLe0DDxi*#9KJa6XN%aS&I#-Bm{vy{reX6I4 zxsL!Cpl110cfkIAdCh%k@ZI%?ALe8T$TJ z;Qs&;JZ0j@EzRzlt8w;oxdXPqzPTf*sEs@9X41XOz9#sGZ)xI{vbTkug86D=UCei5 zu;=_LJyLCU6}6fKksYzOa3g*XB>pw?=YcgHXT)A5O=nlQ{{Tu!gxLcb3UjpM9Al5C zTKj)iy3{ApS|pA(l&Ht?4tk$%D%>no`dHu5JY8)DnH+lE!bftr3>@tTJa_#^YRJ`N z)BHzrX4A^NvG8S97*KkT$J)FbTC>+@b8fLLj_OYC{CXaPn(4kDTWdB_$z(`rP;Qk} z?pTX-1dcL&KQ1djWn@dcRvo145Jj#wjvTNul@56Tj^q4m*(~6A^<;a6St8kp+q5Jk_UsG} zeqcBl_N4exHkkV5)yAO|SF`60Bc|>hNFWk1u#AE`_pRL;;?ujxt6wj2en>3$mm(@{)yzKQBynA6oJc9{5X3 z@Nb20^@~{_d<*8Py8<)28&{0??~}!1lV%PMPgS9TscJfBi9A;a*{<4g3&%CoQlH^$ z9jXVn9Da569j1|EccsN49#k@qksJ^}9)q94zcRiK>(Cz?-A||n`#3GN-z2D&vw(Ty z(>*?w`Vn>FHnr2EYwLi?0*K;vJcQ^MJ^EER+E!+5d&%s4m-|O(Ul4Akx3}<|)0pl2 z?=m=v0$7d<7g3ym2h83eqt2+@Tc0oy0_He)Z-U6 zggYqwK|*aY2^cRg$uZ2x3zgn_*T-=;%#SBgU(W;a)XrsV*>-J;=3&u z;!Ji>uac89ZrhEae-B^A5Lr1d{5##&1NKtWY~@|#{}1z_^RW^z6q$JVB~xVE*uPqxUVq&s66T8625(NFT@ z7yurJ*WR%_bMSKG$bS*5tfdJi0yh5d89hGn2eGfAZAFc`8;1c8T#n|xWcb_hmr~N8 zxX`>g8wo^Bi3%T;oMBxU@Je;Y2t7S&9rkAJ>U?wYBSRiL@%$J1o$R)-!m5TZl~iM) zLxb}(9!Kliy`$m3_78^b+rw!$nR6_x#zw(?pnR&w1AsIAb6*|m8rO`xNpvFB?o5&g zCMFBC1K)r;pT@qA@Xv!Z-|T~_+)Hw92+rg3GPkH5{{S4-y>v5{hu2nq71CA&eKr{2 zjwr$+C{&GC7#QpTAC-9v{7%qq^>*<6izKr~#dq!jdh{9Ud)E)Cc<01=)y!TM0iYZv z$y;cVaz0{njxpb*ZTNfkezTv&?XTV4NqcP}4zMx|E(kadq#O~z$gJfSwtQH&wBS;S^ODeWgfkMVhz=(!p>9)Se`cL`=h5%{=a3X zd_K|Sz56R$q`qTigN_C|4toxt&bq%5{4lV+(|n6a(Tr*t0T>8CBY%}l^e1- zC+1)?(<2>g?XQEL57D&W3M3P{IA!w@K*1Op>JLngYvQjBV^T9ua9M`|AGcC-`1Y%I z{{SCtyb$=mlkC=NOlvOk6p`N~^y5C2t?Y}0-q$|xcr3LE%$JHf0l?sWDvqaf4x0q2 zYX<2c1aro5+uFR}z~2z8Xv6GHOfo$`Np zlgneN$?9u3=u(yUIjth+SJvd7d(y|}JZ;;9)POP2bO-Y_N5}f5rkUZ^lIli4hZr5e z896)vG3sljo5k9Gmtrn~jrSm6`2!&K2E5Z$@B#RON+OW$bVkNA(>dcA?bFhn zQr(j0%If7*5_n|I|o`MUB*&!^{JgLUyreGgEFO`ms??S$9>J9=}T+~lH2)~~MGY2`7ioS7E{03D^ z9St2fW3jdPtrv?mv7|(@qwObpXJg}%9Fh)wI3m4@GkCV^bGfoGL~FoO2i+LxE5Wr5 z2SD)bP}}JfY`F{{B;}lrI*y$>SFlau0pVW>uC1yEc2(TvxyKm*o(50ztkTz0J3AiZ z@atIDr<_|zn`6P<*kE+W_)`32)n=bcywFXwvqy7m@rD@rnSlXDax>Ez=y6{kHr@(#<(`;TF8@4}i0&|kY406Y=dYaI`)huit zO&P+;I0j7mE^*h_+ojJCa4Wta5aqscsa!cGGyGgC`t;y&(-q?%6#gx0I#e@jS}dsXzycLe zccZc3fV}5Dk50c$y`F+sx%Uo_;mtoz@Y+QAehV%@BoZ@&{VUJBPX@Vn40c*@5vveF zmBH)APeGsa?ZbQ)@kY1ejSki;>0GsGHu5`>!EWRZE9gjci+hJLysl%Ag2|DB z%ipGdUezBAtjJ3GA3tkv;!g_cacVZ@x31wTbpdhwUrcrUjdC6w__e2eL5%oSZC-1L z2;Dm_*l;@SW65GVdj7TS{{S827XBG~eKaVZVX^l%z!iZWW`BsO{v7f;;=GUHuY)Z7 zE2691kt~geMj0DH90Sl3-#GTCd#%kXM$yrqOL%v~b~|;m?R=@pMzeVdY!G`_wtW;N=SK?zqn&bC0Ec zw%UG>J5Cy4B(j^W4>AklNPB^xKaU=^BQYBkAv)F+tqqa!B^~ubI44;#;d3WQi2GCyaNmMexpr;r{>w zcsSZKD?ay-u;88Nr(Q;R_2k#j`oD_qZ+u?5cAW>GmjXSb05Rwo^v?$#)Ip1vqddpO zpAhwpI{Bs2jEOXS6~P?$1RwG%>Q93yW${PB(p_rTCP;x@+!2RPTa)z1U$1)bkBeUi zueBKMJV>5xrNMm4v5b?I&u%g?gPyrH*!(xuZ+t7^Sv0U1Z(KZN5T&^VhJ8m`IZ96Y zBk3u1PlP@gwsp~72b%*40|v+(XCRS`@^Rk0uU*l6P2htv{(1iMw2M=^1$bUJAgfF=-&W%rd<*vDnxfiI5^<(TO>t~ZSWVvo39Jl%Ri52 zi6oXR$F+eaMh8QKoUq6L09!QeD@KOZClF4iAlX*$&rn5puZjLISlmv2+J)}Wfz5a_xnmKFWuMyHhPxqEVdt$tE`Px!;}MmzV?<9V$#g&;B{jUN197Ge&0 zJuq-bwS5QsJ9v&?68KI_aU7B)Q@T8|HgHOU26~f&o=G^VsFYT$X*-{xeiitUr{7H# zp_6p(ye8}wU+c|T@#lqXyjv_+cWyRBKJGKuzt+BB&^#03Ju_CD#5S|Dk&>|>z&!AK z@;T{WP-w}k-q<2)s#U<;PjXLV$r<`q9%xcWg7~?t{3B^4=9dUE+kh2UsXaLAcpYow z&mI2I8eWMeJ|s&8oJDu#jv0XHRxg>D?i^zzo`W^^Z^W+zYWl9YWPo`^W83qAk~utm z2|a7#pO2rj+xYuNOKZz(d36gYq!yD){1U!0RFVJ(9e6#)4>hIqCG|S_d~t7~t+mdQ z8h5!Xn8Jq6aB_c(aR-jxwePn&+?tn$TIX1@Hg_8s1t&Nh;DP-s#C{h>d^+}a{xVqG zR!C7^K#CN|MoPv;enjO|=bU8nNv~b_pB?Y~A-5W-SB@CqX3R=iv5q!@$*QKhT#jaW zZ-o9M+32wU0Ab%v=3Hdsw%neWJ%5p|={_LaU$6}rR5=+Zsr4B3uLby9;PI~9z4gIs zi?u%J zcXTbFfw!2@e(~{xw{}L=Qn0@{=tVpU881a=(( z=Axv!1A}7to5cEOgY@UN5)^H?U^|YS*H`fPTI;$bdX>u!w@Z`<8@&M|wS4Orz^zAF z*QJYJ)oyOB8N-<5G@Yxs}B(PLtcU{4sEtc9^IsL+Hstohi~EfVjOI2 zm67!M@HU;SL@Wtdm$As|J!|FPohrt#>78*R4vW9aSGq6?O#|lnB0F(UvE8`!Fe-xKY@gmD=q^tRxbGZWGfUC5EbL;7f z^v{7lIM%JKL+S*&&j=AR0zP1Q=hKR`{uc07ui{cXQ)d~C*tYlV-9{Mq?a!@JcHD&p zep0`M{6%TwF9nydnM~}yT;55^ibA6!Jb=SFu9LzZ4Sx)2Z!9eH$_Q=5eEm9ld-kZc zy<0-?b(Y;NP{$G4st6vyaa|{e{9@XcoVRuWgphP$_oh;fd@?i8Nk^nx3wRk7OnJ;wBdVO5SEMj!YVlcP|B}cx0m3>_w#ElB- zXtYFiYm<%3oRQ83M{jS((y~yvDw^2y9|ic2#Qp-*?rdd=u40si6Eio+06b#{B%gjO zwA1{3uj)P|Re+X`M_tj50;tAM(}GS<>02H=lST0Uj@Jtxoiu|RTjd*$a0%=^>&^cF zXZ;UZ@o$M|zG6}sBY&R&g2Zy8C#DG*>-_5Em8{CMdNbZNjb0drC1BVY>*-!~VRx#{ zt((Jfz7vvn0Ku30y|Ipi{A-r@mUY{o6t;_}!qCBLLl#`-O!XtD1E(4Hu2Ky*#5xQQ zs(I50T<2qFYJf41o2Gp@8KNrhL^-Q!j`PGm5AfU?eayDoTJlw5s86pv*E{ex!B&Fe z?&!%QvK+CHos3RS6?yA~%vTKgm6 zPsP6v>$)5|eWk3CO>UuQ0Y{g+)muD|UIsr?qqW7z-K=rnv=@%9ejn)~=g4v;WsO}C zm?>by5>#=}44#><3$)h!O|5ud4OZzTu`{V2T-jWeI41`Lj=+)h7_YZHWqaYxV@ho= zS%oHzl%0}bgZ}^lJ$;XA_-DsgaM<67b!lZ5af9}8!D0qDKEtJSMtW#&p{1Gc{{R4V z*fk5=h;rkghX9~o;n}@09}4rd@uOH0xshst)d^9 z6>-i#91m*xmt6SKr|CKf)NExBkcCua?gfB7$2dQQbJTk3DJRY3be|EtBcf^%OA1?s zwv-<*DJz`z$T=T{dH00Y$4RzLCr>*dLA4MZfWCv;j~0Aa)9(B=9P0RL)LWc%Q7dz^au^{kH)SX*l) zUS1er4m~JqmsE4xv8Ui!>~+f_b#oX^An=z7*0Sq`4A8tx@QC1 z+OFs~DW=X@!AOBBMsPTXxxz z$l+2?n{IRXaoipcp{{?$-Y3vBZAER6XYG<%=}2WpT`cMfyUuTDOyqq(%BZ4W8<{{Znz z#=alXbxjAu7WVexqsW!hBtm(93EFeYjE+BA!T1+#<692}ja%Y5h)r{cw?$AHBIgCp zICGK;3R*sGYH(Iq&^R}0qRdsI^*-Nr)>Nq zXQ}D2>KCD90G!29r8w(Fl33O2YQ#vvqmsE!RmVcwfgBp^m_r*^Wn;XHS+(4Nmf8P<24+fB+>kVV;icm zKZ!Nt+W!EEH4Os%SV@$mu{xVb-c5_X{PfyXBm6P1Dyv$5{F zhO?pgM@emNQMYaY+BqctzgqbV#(%V&)_VA9;AynB%ejF5^Z*Xey?{YKdyq%JHSeA! z*UZ{FT1{+tt+-PqTFY0Ex0| zUKY01Y{|DvxRt=&xb1Is>-bhimEqR$Cak)o7bfEHVYe~HFfah?fB?olIIo9(99wHT zKZP{E3B2wuKq}0xUxtv7K|J&$j@>&~-aZ2G<==$#xhA=|^IB!Yj&t~v&pm5BwJBZf zdz0U#^@`X?%FKYH1vwy&x&Htf^Xsnw&v^ij)>9N}`6F&}4>%l*SBL5!5#{g)hy~Qv z?Jca#?JhWR{nDPG6Ugt_*VejsinOg?O^W8#)U>gyoN>t3Y_09r}d)6>o>U};~nq=iBZ0D3b4Ej<| z@uWb=3C9(3LJ&!y(xU5QOIt%OX=S>MMJ`4U9{&JZw;MCSV}sh- z49ywf(oGZ1(1v%8AS1>HdU%-!RmiN?!oQU>WM}2%=RWzXGwuLk$A^H%C4yqfiT8;8lfw+jq?x2i6KIE(2CyGA}J!b0U z4mcHAO798|)7Vqww|*L4x$W&y6K-U+9QKPGY^})cS;+oJ?wf(@R^2Zow-d6EsMyVC zmUBBcG6g#)p(|IYB1YtC(XwvJpNTl>;JjCOKt~4{{YvisI9q-?ogE?P5xd%&P__PWCJEo9cr5+ zg(RHRK6b=Z&&}SmaqKlTwJ#m=xQ%*Nduh_aJIpcVmB1bI-lK}@<{3<-Nmcx-QftMT z0gZV*b5`tPu4>SBbGUJi#;M7%Q_N6u$0oE= zB4x8Auaf-clo*tkQ}d|lRebXs;3+=e)|oHQ841HRC*&xyrRUn`Acn{v)~2+x@@@Rg zg4yZbm&x*@OIV3!W7edaH;!MJ<7mb`XpfmtPWlbmeSD=PK#09Ca!=N8{| zQC$RA?GiLN#^6SC(~c^dX{o;_?he#TLZJ1U6GUT)YN2MhVybkz#oM)!c>*a-CsyuQxVRJ(STKzhCv6~z7qYR{{Ue>hu;#k zaed%uZTvs3LS6jTjIv$s2j!cRLC^7yeT{yCG|GA&IQ(j;e=_9nDuPwA&v#FP(x#jABf)9CCmR44y@M z9-r_(#J&o4w}(o&kgRI5N#wZ#Ry%gF18SZ)2L~To{p-26wDWMQjsP{9`c0e;(!v5W z@^k$Dwfdy|V8vCBElNw}q4Uw<`#Z*8f%!S$U)i6>ekoY)H59eBis3gyBeU>G%9q-? zQC^Q@{{RH`@Q#%Yz0tdIs1`C^T}2sRJ(z;uBQZr>yVGhui0-43!|iH(DW?9zKM3zNhSvO7ri;N0O%y^#!#4As%u{Z5 z_9rLs>+Jd$?A`EBMEfnqiQ%0--c3BKMInV=K+E?}nE7muxz2OVeFtW4ABmS}UI)0T z*{!YHGaUO0@Nryim{!uIS8pvpBc>TW7;2((dS;PlrmC1?0~}|#ACLLXYhN{-5XB^5 zE98Pe=~>cU7oYckD(0v2?b-a94spm8;$kuND?Vv9-=3#^95i6GMN8|ex$qEVV~l?~ zuo?!5MCF-?rx`8CZHtTzwNuS11YqSyV_8ABxwEE=XHJb5c?V}v?^O#$Auz5^52r&~ zEq99sSvN9|;T)WvI2A_DXe~ZhAA6kC&DgG82n2T!@ZBoM?-nBY%Je^4wKUDRJDiTf zqmkn#G3T*M$=oUE^)yb z&3`(7wfF5Qto&I0qx7E*_%RPtl#O7T*Ii3^gB4BkYwCSjkWy6&edL|k&Zy-zYV?wS!){4ilI8hY*Hs4c__~8 z#N?jGKIG({YxiFZctW)qOB-G~TFU3hX8Dqwxl=z`egk+@RQRp&KF39#;ZdO0{3#Miuj@A!=^#sp{Hb0)-X`=Q zs=4d{JCt+C&#iu;0~AlU+ksyp;+|(2V?M6F%KXnmCZVS>Y6kP79&p-yDwV_ziL?v> z)9Fw=@=GWOh0SWbasdT=aEh=?v3LcqXf6w8Lhb+I( za8F97dl@))6h|%E?<rt0eA!0Qj6D7-CI(YAdS@}7!8u6>Hh%hr^6e& z703VzmS`lEH^ezws+R1-%y#6Sl%5!)TM>`$pa zw3TIO zLVB6o8RR4{PDM!sO7XO^WVdClHDpykE(!Ij$IXg8!vKRr*iw4fXuExpf~7#?A6k<1 z+(b89jG-ToH3rzHD{$P%ybStQrKQSY{N?Nb9>4u>T2j$!I2b>@NQ{CnyWXsLert<6 zmyTpRCi$6eq(Ctdn;RJbsL!U&2e`Ztsqxm zK_?wJtr@)baFQ-SZa$SA%Pgcqqm}2HIZc#^T0w6Sxl@cE)48j67xLXkynqNC`qTy` z^8CrW@rtgRc#+m&^2VLL{*<|T88z6C%1|=hMNM^VQqyd}^ZL}5mZ5J<;kXBkdvvXv z$;$#JUNe!NpOtF_&^W7EpN>E9RL=!Naqx%3{vf&`ptRTRWOl}7MNs90YmSGF-1g_7 zucZF~V_zJ_uS2M58g}2aE-s^C)sc=eM{aoM(zt*4DL$8@+}P6T!qOT5)XgyuAW&4D_Kvj!8WWHo9X>iz(q( zt#qQ^*4`oJsoB`oT|Q)JwjyAjcA+< z04FR?K9!3lym3F6ys+t7R?l&Rxa}C}P^8x8v07?6Mgnwo_Bjtq);`U+GM zK0eco=Ohl5y$qJICRFVsr?25cOv0pe(EKL<0D`al3bwt`+u}`@n$usz(Tl6-i4Pnb zun?d)d@fFLkh#ws*TWwRb<0f?!|++{Rf$yuPG6D78Oc3QAP%{&-|yQde*>R|8kF8N z`#g|C6Ubt@aEUh6Jag57z){~g=b`>v{2QV8gU3ECk_FZuPt)zB`&4R)xupohY)7C` zxA6xY5t{zD@MkftiOU^2`tmz3Mt*;r#?=}}^|AXUc#h{>_$8p~y7kPrck;mTvq`~K zjoB1?-~b1=dir+WTVz}mENkH(*kbnf>*1%`H7$bL;l!3o3vWpB%E-Wg1{q5XaCcYU z39%KViAm!b^sndcJHo0twRlHG&H3tmmP;$qi(_S)D9@D|oWBFwn2|{Yf4s&sRA7^J z$&vXUhOXUhxwVoDXEDfBg>DWHt`8hn$a6-=sM2H_oW>x8Fbc#B`&2EQFP6uSbJnT{ ziff4NXZ!ie=eezhMT_K7k~-3i^)i;^A~uQ_xRa28wom6)Y$uxk08TQN*fGHG?MwEU zk~WG+mPBEKt?5-)Qz4Od;SWr9tlX?PZ>X_GVTj9y>xxt>970u7zqWbj*Ey%lbu_z- zU=F~4jW!E*;z>^@sLpEdp;C?a5iV!nK^?x*i`sXVB!0{x+PD)Y~+Q<+j}(_sb`AniT=r_!(9kS-0pJf_@_ zN=X8Sx)tVQ7;h~6gP^MGG_IgA`J1Q}Btsb8$UUmmas8Hddvwb%>FrY0wl9#a9lVH2 z?))=V{GY$Mjt6?TaEg~Ec)=<<169&VC2gN~KD9~Nob!#eB1qLE;Yla>k4n;v#HbXW z)lMmk{_Tcva4OXBO28LhJ*lRyHDadKnfGHDKb>gCv8eO0oN-UJhBb(Y{`YWwDZWc? zAS(bWQ?{d3H72ouTp_%a1VPXL0IHdLF=dcouTOuiQe6#t5+AV`PV9*~1JZqU(<<2-}M6%&iu64|V`D$1mcZeOMFeuM;db-cq(T7)>7VecP>7;p z#Ah8Tm3@m-!o{$iM_Ne{1Yr&`JDRa?4rB8d=FeQ!OY393Ol^RjJ*l}E%68nSNAG}N zN}fD|N~ztCyPh-c>6&7~;rzqM2B(I2?k15CVUxWy)6j60$r9bJ&@+;ZosX?cCAent z*q^OHXOcgZ9{p;{FPRZ%ZbzjFYpKx-Y*v{gw}kmb{Je8iVZ2rc%3a$}A*wsOwO{}v z8Smbb*%T|1n9rp+?qy`%jRA1amytj?z^bm&?b_!6^{9%g5I0~B-{VEmXqV-t+T6`M z5-AwV9tTW%`_)!mnGA<(b*q*M6~s*Q5~xR~daxQRXw_4k@z3Q^DC=^QOl7c+2nxW1 zDS|Ofo=1~1gMtU=O*8p%7^3^w#%Ynp@|wS98{}sbc?;@Qy&;y^Yy9YwITeu z4t**!r(PVqAmgadYN~16Q+&IV+o6g>BafK=H7szmlG6{Ho`<(;v2PTXk(p<~Bi5N} z!gn$u;Po9UoNP*(XssL%G_2{wT{-m>jPGpUXAE6mpcSpD$>hQ|e4vgOrcGs9#8`Rm zF^KG1`*(7pz?GfkG(xQSWt}b@SLa+6tngusX5<#$>eJNi17aQ8>k6`n&663kWT`VN| z8Fzjesuyv~9Py$Jz#d37pviFfTUE;+TBmCnlG@yPEMZPb{vS$Z)T|gPjFbGSk=!f? zGo~F*53#LDni;Lc@q!tLH5TX%-$S2ykz2}8eM!f9jyqDXxVh)o6?Mv?I6UJgBC7^M zesh(jBxx67c;SgM!GSsF>sWV|cTV4GP;=BSI3vAmMQIaA3?%c;4;6N4ng%6SqM>_^fcRz^WzQ4b5dlK1ZOUR_bL6AD; zqgUM^kgf(esFWLgM}XNpnzqq0!-V8j!ZsXZa+BY+w16l%C$2cH33VA-+=$l?j1!OL zNd%CrLK)L1*BvRBDuzIjoB%2sY|$$eO~b4K=L9!;n%R+##u+EQR+2%VE>52QwXU|& zMuFq*I@L$a%5Cm8b&>Ki0(A7M>dTUe)OyqxR}%SY4+qOUem$y{<+Rg6RsvV2BR#pP zl&lH8k*%`vt=dhPantEehs{L!TRVr%>}i(M%8-bsIUsRYW7xTk$Qc>>(sR(-H%xV; z5JHTk4m+Ots<(R}Ag6jIf@@?9r;PSFq0CTP29S-zo@w)Gpr4sl_r0+h+y2k>s?e;F zo$lRw59?AkC03RC5HV0flRj1@&S_oRy*VSjZ5X=}$o%!V8&GhEAO5-ooQRZjLXe|krZRb;2-UY92==A0)tP1+ zm?Kh*IbPzMO5utd|D>4CMa+N|yHC#_M}GMmgzj72d8>Tm3cVA3bz!N!Y^EOs#3eLF-rDiK3P&joG2L-B#}uj*wX}m7kZS-6u&Or z!=@>!yH|W?X{{5~bB3B4PF7O57{ykac;Y1i`TGxASdQfk2h1vk^vKhBP>-AS6)swp zPqQ~P%g9DV=V`(G{{Z^+&q;Nu&2cQVrpU8|2d^HurwGJKq%ksM<{h(Dn({}TLxY7l zsgu)DN}odXjV{H{(+8zWb|_xMy)<0IGvTlaIKk~vT(O2gtS|=v`{xuzu7Ys3qFggt zH+_)1|#JCg_jN(-ksy zMaH236I@*!@K=NMsV+#^0l_1sR+%*wfZdFaGDq~qHA~JTc}ByISNi_|^{NtVN~X3% z_Hwg)fDHctDy?ycn{>^!L93oqTL9`tNzFqnO)Hrt87H6qy=s?1?l)@5BNgX82c<}% zmHe~U9MwppZN7cGZsUSFP_FWP`8hrP4NIC^lg>!?Wm_chY5OEIe7qp4>en{o%T_K2 zJe-qGh0x8lvI+dCvbDi7E3{{nra0@7P}ris%XSWWb6O7Am~7+<)QzGM7GN@ZaY?}x zmZn2QklT`rm0rh=D87FtMT!Q>g{#+glgk)<;XjCaipsr?Gb*Z#l^Ob0P8ZNpL|bQ> zHuSGB`1dWnpTX}CTg={0{W9%*z%#e^ZO?w5y{p&Yfr#GS7o1m;d}=1^z?!kSl*IwG zm=^;(Nkg{^at}E9PY0o*5obOp;j#SX+(#{zl5UJlQ8BetWR5?Td{yyE9Z$v{BR3Cc z<=eRshKv?az;n}_k?&uja|?UjCQUfHw2qio2RLprPCaW8;_&{DVk1})Rt`x6J7mT; z4F3QTt!qgi5sH#;Q}cSm!HO=x@D;y@ye*{57MU0iKiU(Mki(*GmLO~$OLAxRTj*b zHElOM{@dXB({9GGVIr-ng5pe!ucCp~iyob;+&n(_TF#ICp?wjzXinA`z;Zu`4@3D^ z8R09rZFJ~Hr~yop5sp9}gFM%u*!br_DhYKl;`4rkmnK@ZXNL9e+)`og)dsU0LUCz!A1F$d)%uHQk=<6lbXn)aXJI0gO2BZ4T(FHN||KZwU_F42^o^c$sk zxcFA!*eqM(W?-m!BL|WQ^v!p=^@ZN2rZd>MGRlPTaxh1)HO^@g=-xFAuEg76Odi-d z&kg7fD?eBGkzw%dppx-WM{y^Y5FG&>0PH{$zlT5x^*nz%($`ih(%Bp*gS-c+X!kcW z>R5!Z+X+_O0@TL{{Xz) zjD)c(o(6yV)XPtZ7kbPQX*U+`mqZyP0djyZ@d6LOJbzkor^~q#)o5qy{{Rs+-9}}z z)~Ax>`%Al*1g~1uDjv+H1^PJWCC_yHPrQBMl;v9rF@Ix&k*P~;%zcG znpxkRE>x=ygy*sETu+0wpBviTKDA?R@C$?ciLgS;jtD298?(7Ij+uKLGpOla{ZR`nA$GnKqKT^i2);BVgFc#|PiP=TPH!p?X^9wcdFD07{EY zi>nQ>hz~w*!%mtB#``#e5s$&x&3z@eS3|=y7a<;FXbP!(KgDG4QC{Ja;p)O3v9h2kv8`&!Op7tc6i&q2|8@ejmt}vv`MJ zJ1hmZQp~EkpZ%hH1mgf;lZ@bX>O6US_PK0y{Tex9vWYjvv=SpfN zQF3HuUR1EoTfbgE9&5euZM1jde>??u>*&KBey7sD2=F(>o4Fo1uAq3YB_zt3+#NyT zkPf&~Gw5^muh2gQU%_{y3+CMnKw+7N7#w8e4@%0WokCG-OCEFa3J(tWMp!Lc5MjE= z0b3;s{Z8SW_32$#!ud2Q?V0W3BjzPbj(GI;ua|x?_|gv%c(UFd1<+VH9(;r4l34-T zgf}@=2b>Z9A4vQs@W!#GSX~?MF}}{Kq&MAA+~gkl1EJ|ln?hwu%ICB~@kev8kCnP( zr`DgOTA4{bhWJNC(lrJ*y3k2h7Ycw9HnHSnXBo=ZQ{&$bPp#>4=sWzIdzj2lR1B4V z8HRWScH+DPQ8&6(``y|TnFkw5!3U}0y(__*zPWtDE1A607vB!wFwX-S?ZD=-l44M7 z+VIc9UkG?xO@_x#v|D%=Z|`smA~JU04)k2O#I6_vX3pgnI9Yv__J|#>k}#nHw2kdWHwTJQ~&#Z+2xUyPVJb zDs6hl#D07;yb;GC^4dHw+7G5aRx97JuG7Ra8++)#v=|~QDx)(DmIQzGtJUVz#ig5F zG0s2zRq}7eZw`2i#(IKX=@Wq@BnYB+!Vt&iJvxz${VJP%#Wx!my&lo+2-3Per zE4A@F_bF}0Pc0RRZ z;J3sbSH^bbZG?p(<=MF(F~D4$XSw60X$yQv(zA9Dbp%qTR~`vOy@qN*8GEt5fDYli z1ZN#d99P`F8BIzp0sKv?$Fk`oK62oN13rhJPw7zfc167pRb4yPa^`m#UBn!u7%L`d4$VrM|eiy4xXD zZHV0fJw|;FDtSR)W{l5<_d0c_hoMNwc%xl_Z~~~~82e(YW$OGS{e6#Rh<4&*Q{{Ru+cz0gY<&N1Tkup>^z^oMm z5I_aKY>z>oToKji&62V`2gSOy{v}9kb}AJco+bN*v%&T}XX{^Gd z@|P^#fK>o~hP)2fQSc6*;)c`ie70~2AdCbfI2gwzyC43&cb5JroXVPgjj{VPe8yGb zR|Ji@Ja*}tQ=OHOn@g$R_`6@Qk>s0!v>XH+5;^+wUmTG zmdU{S*UXs({{T}Oz0<66%HC$wH~@@i87J$>`q#eMeWS&`8~(z%ja_dM zRn+GW0R(62Kt9H~-w^3O51Jo3XM{|SHbh1X5zhc}SBw+Wrg_D8{tlAf`qS+;rBX=v z+NXfPWDYueRi9+}U6BCwGk(KnX0=V%Eek{>#wEa<53E(b;)ydnFw;A9O>T&cm{9E`VOxbZVuGqoI z8#1fYoSgo2 zGX{H^O!7H61ObKPBRTC;PS&z2Ncf}njY#Czj-%oEZb-MxSAmOpPa)gog$ID34#OGF za%;pM3C2+a-q?jdx%fNjw%D{szA9@qUS6cYZCdAq8CHaT~V}rCzh} z?S`MHLt&)Ak)$e0qNq{H$>3mQpT?=nOA$3>l0JXdyi=k4FSm+pq)`u*Rd_fY4XfYz zRbPkS9w+ezp)50l1DXE-c1KSn@T8JXSa$>e0IgZS75)XkjAcF|ym=zNKowbj>YzFD z@zZJi$2hJpz@GkV4o#p7cHOc|0CGBY4KAOY9DaZy#J9Z@n?XS{q`)~s!G7x4zY z8%n5Ds~|0seo@naKhJvNbU%u^X04&y!+UY%Tt+tqI0S*541fX0t$XLiPlbZ-z!T|_ zyCgA1xnocO+?=YCdt`O5&NtEC`&msDc#m+1%)AV-7$ex!LhWdR`kv{nX*b?0)ulRr z?^^W!@MmyAfHDVsb;lL%7Jme$(mo$Sr|H*UYL%OOlj9y?JnjQ004@L-KT}-CfqWY; zf-FoD%4dum$F)gy80A|8?m6rEV!o~LkJ_~xHn!APX5IpU^6c&G54SZiZsv-ccd|eK z)cq^)*X+@2;Y}23dezI{>SKu{XEG8SsBDZKykL)0M~Z$e_z&S{h9T2gURf^fi$oz+ zWigMJAd&&kZhpP9?mjK}i({eaF0B6myhSY`JvOMx$6N~hkobumhmAE!T)B|kO!5yc zihyNu*ibqQoZwf$QHAW;@{^35k7Mw^h%J0st+~^`*E2CH5xVgHk8`VPk}Q)eb;i;L4hTKZT>DqjS~rHY(+IfLh*KcQ zEOw7T26-f&F;dpHMv_UNH|tSeNn^VHM$cYPN?(P#gjz3&LcShpN}{pOLb(GO9CKQ~ z61C3^-Chk7NSFOu{M=w<5;42fVCT0==>7=M;^^Cg)!w(fC+ zP(kbSXQnx!L885zOH=B<8tIl${5+MVjJnJd4umP(4sdhMFf)%~UkZ56&f`$g<+89c zMZb)w`GFjdPBGfP=hgH{?rn{}q~VGTU>tx?Q;%Bsuj3buH2(kq>vq~Epcy2cOv{xa z3~I%AZiM80-nG$AH`JPGt&bS+29+dQfJ^y;9pEv33l5vH&nMG0_eY1kBD(gRBeeO0 zr`{ujk&K_Md}(cWW#dgwD}xy^^$3Fl9W$SP_4dw};%#HYniZazqguxwml}a1D{nhM z2O}V5y=lo`sigGK`0wH#ov3&l#q&p~TWz-mRZ5KTd#*iwJ!;3q&ldPk!X6E`xVnHx zCBYGb7Y^N9>c;}Uk+ZkD@ehihTGe4d$AU097{?&`cKXvkAp9-x*NwEnr{6-G4^{wg z<2dK2tfK5=IN2T>@J~Y1{9~p?;t^*X!60q2$bp%FC*?WMPDVNk_Urk6#08d_Y>|l1 zL;!K$AOJH<@Yr}u;njt|gdmYrKn}zhUP&d`4{~yS>zKWJ>)#pAb*IY96UbafMn)T` z?fLbrYDqm^!KhmR@R?K)6p+M z+TOl{+PJ+l#I_zFzD+Mr$dXaGWE}0s>9@Ew4))y5-u7pjd~5jQ;|(Ll5$T#wkQ5|x ztdfoiW+29J!yOJ!r%ZLO2gE-Rwf$#Bg)Wtv>SM_qstogwsOkPqeFNg(+0Vk>F1TC$ zX7W(cfWi^AV{*KVoNhliJweTAKf+B5PO%Ei8(<2YbRN~cl$DVcFKrJ$@JubE*}R(G z$t7p`7y?EB$8p7a9=qeOE5q|!K%1S=s_~Eqxb&`HUeoO@0%>u|$hhIS$rWct@Put> z(-}O)AdF*?=rc`4q*tlr-wU;q;hkFL-(|*jxwhzOB2av2a}GT)%q*&%i_+9;!h2vI(^J? zJWjFBqveezDhXBGNx>)O>z`bTB&-@GvFVW9TIp6BZ4^R-H~<9$JlD#8J@HP9<2_>E zNw*SD1hTv)c+|22fU(_QA>toUF{8QlHg&rD?JGl2d}R@)8_`v$-x;x6N<}M&0*wkC+ab@0?dr;GczBW|4bsb9M&k z0~JyS4U7f{wnttoZ*6s9$+xzLDf>BiTUYSkhGDSREn41iu3SljpD^y=cEG?O^N@30 z?~6P!qv{uEw#rqJ!C{}3fINadKU(ShPpiY>^lNy4GPeK^^VYs~@b`=SR{kZPeP-M( zv{D}^jFLg=lhFJ0$4`1A=0sr6Y1DoQX}YGEw+MK4-tp&-K_BE*iw}nrcuvASJt8Xr z` z=E_99NZ89IzT6SdDvUaTf(Ctm1Y&3d)JiGCN~>g{=N zb8E8RRacmmPn`D4V|F(lB#h7O(|v$U{iKF*AQWMpuCM?CuG ztjlGg+Q^ech#j~bat3+>>0QO{k0tO|(o=TSA3F5)~tnkSuCvPK+{p zewFiIi@ZQBB9ltJg?35`@G=jsL9c4?w}y3)%@yQiU}P~LDPOPWTvx;&1zg?A@-a=S zOE%(jk=PGRRL0_rkC6OB@RvmKl$*@21ZS?(f%#+d^sjmF&xJfC;k^k{enznqfDal7T%RAAtB+sA(W>*${hX#-rf$RSg39+}Vb ztvR1#MY-`;i}i05Cy8xr?Bb4ln~RZ!k;`ih#Qy*| zB!Q9J80p)C&3#Ft_>nc~nPE~F9FyEu4!@x5*LvN&ZUS59C6kbIp1rF%IX9_3(b(tp zZ-;&ohrm}_ZQZfDaT~O3K=Tqz5*Z4Nft+LxxEZgMJR9OE?CMT96q05D@t?h%91h$X_=mvX6YVawC%eD-BLK)GZi)x+ zn)kmCd`*=uq9G-4VJX2P{GRqku+DDZ%V3c^_DK@8Q;`s`zGE{5C?}j2MCF z91)SnsL0PjUIg&#o)PerpYV~}GG5F;+SqI!>cvh!TKf;e+LN}DBE1^|50rH{1F8Q2 z9`)hB6>lZftQjr9V8ajo(a)tsWR~RE=)N7^+Q;FfoRt#Ds>cHd1Y{4xrDps<*I{ci z^6*IjW7DO1SAcv~Wp5eNXUrl4v4OzkcF*HpgW~It5BQ5plG90aHz5ca>JPm|?yhW_ zwUOug7LPsGh^;j?Rgx7Axm<1sD}lk_5P2T;?bkYlTouMP;~j;0HNS{7&jk2#7_VP^ zs0Wx793(Of~|Jv}DW6iCt) zbGxSTf(Xuf9)7gle^-AEScxGS-SV*R2dS?Cy0`d)E%X{jn-7qtPcBB7vLrxqSQG@Y z#&Ov3&3!{3!3}3qdw4ZHUK`k>iwwpmNhD#=;4=l!rcN>Mke!Q!lV(Pp@h?ej1l+vQ zM6qy2MswSbQ(7Jg*MGOwF6F^HvH<8lo`C+9;@=fM77q$}aA-4&qReERmD=&J94aU$ zBOi@)o(t8c@Xv$VOURI1C_YkdAaFPgMsc5DanqV{L#aN;)Ht8_H zd_t32zM2bJRZ$Msjd>vcJoGg@x6z6>+`p}9I&Aks+I0KPwL<>@k80>{ehS&Xp4yhE zsU@__{;7uzfzXcpio4-!IIk|n-N^v2BPXB2y{pB(A=7lf3rTcb7-2$O0hYpyl0JY_ zy^*?p>GCd<@Tl3`7Eo zah`e+#~shG$2HK}YkF^p^(DE}CEWsy62t?O+XA2B9|!3kAhBs0>+JI;NGbv0dgNqw zBk54nv8*4ucn8KL(Go;RV~p)Uc8mf}PdMw>k4`Gj!zivGi*?cstQ4jX3OeAATIVMC zGpR#;CHxl&EN;gnWMz91*PfZK)5Ei9{uH=}OVw^d2j_E<&~Qog6%&g~Q&?1LN3m(T zwvlOd_KiYC2%M9V$NvCczi50GRs1)nBJ!r%BfGySKhHJzhvNH94ow|n(o%}Pk({n%1KJwtOx0Z*-TGenX;^lYf>^{#&Q6}VleqSBPCeIzc3JfhPpuK<1Olths;I~<=wRc+nC z`!QZedRv0g9i-&{04kWpF*>&$am#|EijDUO!)GJfp1Y<`o1h$4be9ck>ljXZnobsX zVvWjj+oLd$BD z<2)bmrH#tBmPc>Ol+L>dBN^$6g;lxpKMJJE+$As*A{3iYfVzQA#psr6sXE@-pz9>by~-j7%v}k3XU+2806G{XDX`6 z!S|(;f3OF?@!*=gbgmN?u8K9vNJM2a?zt&Hct<4Ce) zOM{Hl%Xx=p?t`CkQ#p1APQ`W%rCnP%tmjhGGh8-PIKlq_8nX7Q=cruad92M-Pk9?? zY@XQdNfQ@iN;J2T!E=-Y99Dhx;#o{1PrBVI{*_@W+w5$E-#)*MX6lI>&&bO!dUYMu zkon4j>Q|F+<27(eG&tNzCaP)ZB%fns3}>3vmM2of1Bwu(E{0RC=4hKBde9mxa1}{C zI@PSm?Si15{pzRLOsrRmkjlPClZ zX+bOMImPT`Nwmp`K^*nyGg>IoENreaeR|@XEU{cR!~|pMP{9O~E19skJP%>(TSf}z zZ$d)wDchWTilZ55-K8V0aZt|ej#Y+6YEc{#?NInR;8JU%6kdbcLmniZwvN=-y0$VE zLAb9$*FO35rrhEqfZV9ZHJu?5eAwtX#X@@66S;A3Ft{j3JW{ReCU&k*`R`d~@s)zVI+;i@~L)-5GF8vYMZ(?=d!U~ zt=342N)P`4u8l9l*4B_asNcBc`s35yy1yb7g?A|-eK|D@*J3!lgaaLMj+K>HrHN~) zF)-tt zk&aknDnZ70KDGL!vr8kL$Z^vr^{v}T?Adk|+^y7Cx0CS(Ckdq{t>$^v@Nuc}AI=xX zAKCuv;wO*vKM8mvOrG8gNSzG+RFW*lK&N?pVC(|}B=zKs;=Zl;4gUZHNC#%7knksJ`ngu*TNcXqG17f9$>o+vN_8;E=~#Q)bIy> zPjz^&u*(|qNCW}X{{XF4jm%O2(hRy9Cclx~Du4%k_Z9hGFBMY}QPryNCVSNBs%p_O zlo<*}dgirVZU{EZkc4D`-yXizMa++I4WnS^=JW&7t~i@{Vsb#P7Mk4Np5+^;Cs@^D z7)p-D*5XI<=D_szs@He7?K46$2^^eycB--6PiZPQC4uehL}ac~vSsZ`%1Cz^GF0}@ z6`oxqw_hcB?mcU2<581Pi{}6l-m^Z*h1|z>>d|Uz8T3Vlxsff9MS@$magI5vqFJ3n z0C?+ANfWH&9R(!POt*WX8BAdR0F5qXV3X49(J~u(S9i?rGBN2*WLIXAL&zLeb#F0u zN>1Q-sROIVMhGLndP28iin)eCBXT>6cv6o09I~99yxuFuK_2Jk=4Dh!90*+L+Z@<<3d( z(w}6vGehSn`@X&D`i<-b0a6Pe;RBFItyCl2y(~A$w+sp?=aE;e?#vIcsBHGdSF?n9 zV&S@unW;xoRE|dmsl<(nnuM2kE#|;Vg*^wQMH@?S;J+Y_eX-i2^RA^VV?Qe6k>9;K zcOFlgpLli8y;UWtmgK&44Z^P@(wf0;lLO^od($nDZNnX;^PhTknh9^3FYaKI+XkxY z;cmv7ZHm|#K_{RTOBJ+ml9>mt53N37gMe{^#%itNqeN7l%z9(BX7v{@p+dCv_WRowAxS`l;=+3#f{p@I41RckYew91h znbfjmsH?Llnv1vQZpZmkUKt^bLfkN>lLZc?2<&!99D)M!KDDf|Lu+hWRr#BzwNq0v zGAkU6)}7VDhX@zu13f(`lhVaFb|}xjH4$KKVUg0Hk~m^`<#owXk?oqI@E+N?>Lr7q*ABD2x_$1LY-4woueCE(StfuqCj<)5h|GY!(|MUWC$(6bP|6iJ2cfL_?DaFL8>7HJHTWvS#l8a7 zG@VlD*+n(1f@wep_hC!72aNH@y?!`;#=6d}rruoYqBeVFz9P|-vZU~!$C?+TVD~)^ zM>YFx@oL)Q_rY3@munZDHN~`uih2^tM?T!w^HtzKh#n~Tb*POv#%<=)9EP-g{#Yvc zk}|)040t)`@vqtZIOfD)>f!$Ytxp>g+L`@K_%3sI;pi`BQW|6j1xk#MO!XDf`F9cS zhTLw?Q(j^4H&(FMz8C3Q-Mpp6&AdmZ0>0cb1?&*~zlC~&-8xFk4o_l7di<+4qwH}r zrP;K4SbCh%OobWMK4l?+;-qcY7*}qGrCFR?$&a)#1$uw=>MKS=FUWWuPipgdyPNql zL1S3>gc7*pJ!zAP<3SKL1-o2`$DhLnI?090-(zroNxy{Yx%kTvOjHYL*st6b>NQ#xwY_e-H2nj zi_BTI1q2l@8{-MP=EgIh%D(4=csjOcUy&i4o zql?0NZOPhMfs*cI45D99qjA6lt6&q-ykGWn(6tNi5`Sl2>8@aTgfMMQ#zJ^GUZ>dc zn&Px?1?V@r&5ogY8%sU55-}MnS&8Fvj!!ti{44g$_8k3@+QR+5C3wPF6H-YQNNn-) zL4Y1T#EeX{^5!(3V0h<0k z&ofEmaWll!-c0+v6jdr}3!%x&8Vmi=gRn2_RsPR)bvN!#z&f95xoZTTVSU-pCqLm& z^9*dlHri{$?ti5^=}QkVbAWnx&ws+2jV=I`=iZzpc9baS zohVexaq3lo7~>*Lw;UGh_|=4p(U~|ZSCRFpWsB_{u->&&D?Ow$vC5P9)Xo|XF}CHO zvlwSG4CIbYOz!cnA{i#C-%Bc6mW+}?=}fVbU$A+X3XQEfi^P11Sf!LZyNdeQMOr zBeMCKBx5FtcE)y&jakZ_gvhPrk(Jmc6rMBfRum>7FQ0KUAG4!o1KUJFHe2c&%VchgI6ku|EEc8S*J%W z2`a{&B*c&pGJPs)B=i%BrXl(Kwm&ano|VsPNgP)t8FwMa%tk@YZpdCYFgeQ+oQk7! z7oC8k8&4q9j+zP(eMpRqKr(j5G1CH{5oyjHx*YzrOd2%Xj1oBSQpIeG9%ct5bseZ_ ztxXzezJe!h#A9gdOcE-{TNww6W}IVGD<)WXz~>)INgHz&kD%us)Hk7&X3UGkW}Ig# zr=Y1)J*qO;=8NcLb-`=|=Lh;y!MZ3BeKL8d=64&Fo~7c#Qp|t>>FHUnj_zML+uonG z=5H}ru;@UkILDO0gGtKUnnp;TE3^@Q@a}Gyt5Ccpvm#-RI2|hr=H5uzb_}WDp5wU3 z^{$%L9ykCXF$2AA2=zc%jj@mi*V>6isxD+~2kqXe$$2^^M?0#c-YbpnIZ?$fTW)74 z+SHH4J`DmekvYA9N0JQ3A~onm!qShu7Mm zEblV3{{Se(XHstCRMBU>(k;`lCZm?c53_bK`IjS=J-?-CGb&5I1M-ns_VQs$ zfGA-i0zu=@)ofH^B+(bR^H6p7;-09>Ay+**dsEb-DRekoeziwzg-RhfC$F_BI|O2{ zsT$qL%_2I0!-3z9)eJ%?p)wu_$vo7B6=xBXob{-uF-0p!FvfUa@uBT@RH9F8`=VI@ zA&JHfN=YEAOUGf)7unHquEYjhKRPanq$ckkBZL21W(D;CHF+Zfxxbk;dWM>rw#n0*irxoYe{K z#O@3B>r%^2kRKxIJ=3n-@CdCKW{=5OM=GEJRh}3w3AT3mR|f>+r8e3eP32qiv>=mR zO%=3F#z_~2=RVasx+I$k%8o`Vt<}M3{>}!{I+{pkja)-61_xnMOG^^kZ&OAidgS@?ZyEW0hv8OkkhUX}r%zhMx0G6e zZZZ&b9+dXI5(X!by*uWGu~2HnvqtvOh~OD+-u0b#3%VS((%c_vwfPw!2)~XlN z-33_!6Q6oX=r=X7Ja!iL@hk2l>Hc}9$r}NM>73`7F3fLs>S`%9{YH17*&&@#uMhO zD_6P&nlF@g^!%#)uX4^GJmR#2xk+eUFtjLTPCu1rL2fQ(HxJm5KBAnHyOSHSAc}l{ zyHm3x2lA(IO3vg$6TFfRNzFp-ADUxW$m2P!RDxLH5|g~Q=~sim3q79reJc?Z1gOXedN49}m-y*qjNd8eZ9V!=trUMoT?c_rKv2%vTM^c7!D-fniWCvQ(m zr6ge8%Szcm`+4*=RI^ERFquKttTd|5ON^Z3ijqC3`^f1-gDpuFrD-C$-R2OB{2Xom zS^=3Q7Zsn zfCEY>Tnd6IQdJ`Xv%t?x)hpajO&F?8ySxyl)$5+b_pH%w#FpG~*A;$ACfFed z45vQTS^^^8^Wmg!IqmeNDC?+7H(C-(R@yOfDaLpeo#)3o?35fHaz65$rwKwJ!G z*NV`F7-Ca2qv@W<(xxzPMmWc~<~~dwOZ>p{xg9>098xgi5`P+E+^u@W(rJxb zp=IQ8@=3zCrFlQa`Qo+kR-koOf3hX4tVC(Oh}w7y)aTop^&mRN4(xO_<=+=?TTSq7 z=BqTGTH8d<*&DLB!wh?mN^yGE5dwr;oU>T-XgZNytr`+ z9is<;e~EzgJPiK;T8YD5Pl=zz+0)qgZq2O@tpUx%-+X-!Jo}ElYXe;I3+T6AZI(!f zAy+-mYW95^9S=#0J8QFu;#E{V!ZsIcgK8sn$z&_foQo}QJ&d`vUj>M)Thiaodhe4z8xkISul4E{6Hj;M4v4jIt2ZoB{hIUlDL z^Do71M^~RxwYGsInit`KQgGnl42<;$zh0E>V>*i39R`!}9?wB7X?j_*K#5o81o{)( z*1gL>hCdxz7%n5)>I=rlqXj&3#d%+YybQ8j!6fja&J=Fl#|N+mzNzr9gzWSU?`I)& zm=a5H7yaI!{;F1Q)U=+*%w9kEeXkvEH_#%KJdi1!)PlZY$Zeyr01Ve>@S9H8v@Hm) zixo`7?ef760LNY3>!H^?L8;5FJVgq`rwT|QjDL-DmtHZ73&}0uZSzJlW6uZc{&QL@ z^4QN^j-OV&x3Z93L{U@ySXKZ97$*Ss9eSGi%f>z{veqsJk90`3fr~S!1n$QhbK9P4 z$90?U6Rx>?sCb5EktLamkV!-*?xqj7OjoOTC*hW};!QENE3lJCGLsZTK4Bf(7~>e= zcg<|0%CstQvS}R;hp$bBmfClR=V+2#2SgyN4{~$XzKhd78rb;fLY(SImlHB(1eflH z=v!}Nj)de_iue=Yj=!kd`7^iKJmOXsf4P7&^M%O-^z{C9?Am6lKf?C4v++ivSz$>5 zo=)Xdks6G2Y+yDx>%gmTOQS_AuQSW9{sVZL$L(*Vk$)`H{{W-gN5p|J0m)(%fO*dV zbo9?lpnNvgyadr|-Y|jVHyK|kino?P&m{{CoO=HNO8OtcUlgr8MWaQlTSAtyNSl>a z{J<2F2hV|$MhWACS>8Rfx$%{DzYt_k z5_n?j8&`0PBI7ydk}>|zr*U1@hd+h9C#A>X?P=0D;~!@WCn|RLIT+;fduQIZ{vY^P z#6BLslFL!JS)_RZk6}AG`hkpk3h4Yv@QX{-FaFi8x7s6PyBG=-RKouX+F$o3Y@Ww;^T)D68bJLjJKd-~HPwYa*pXR}ZxKuYf5XV9N|*}6+;)I(?j z1jhgjarEt5x_{ZkXU$NV7y`9Kxapzcm){xnuMYW9Ug=Vsb~_0Nk29i;*yA- zJL7i*GQ#(SZ%#%}`&{FL`Bz)xPZM}Q&XdBTDDGv1iCJa&b};*_8$CchJvgpT&iBLK zDAAr&F#Ij@~QCj2hcJ|T$j zv?$Umj#(cgVb2G5U*-DO(VF&$X>*{BHI=@|>*cQAtB!KC2`4iJcq!43p8yS;=^3Mf+y5;#o8QnNiabwILPFTpROy_CeBx%wHY z8F$|Rbcyw8JX>>cZWSFGI|snGPDbzu=M92LIp=}L1KzCemiI}Ov^jjaTzBd*pOl}{ zzGBh7Hh8AlCGh^IYZ14eP8w{PcAR&}1Jj}W$*PtK+({wWt-JjkpH{1I~JMVoq_-VcMejq88509@a4=4A_%##sKGxcK($zY3O4oWpkgfs)5`5{&ln|*v?AlPps;**=QFtGI`Cgd3}c9d;NH?lw#LDD9z$sMX%v? zv%|js``2bdnJZSry8az|a2xUcCC}!&iDm!bvQ?b+y1R7;NP^ z<#C_${MV^AF#H+gd$WBVuZSVvGGO_tFrbWf9nWg@pAz`pH4mN z1547h`;ud5gFjF)#~sP2HBB8Uq$LUigWGPeALk{vCGsl)^LcUL#jyM@R zd;Hiq1a+@H@CU*L_;IS=S!nYaZQfHXd$=W6XbYYF6*%G@%z=WYdf z^|!@6T04oXB(r!X-}9`)8Bk7k0mvP*k|`x(Ro;htC69}4F5dm+Q*9nXVBquZk6%+? zIsVZ4{{W2aw6xPKidyM+3KDriB6%H&U6?$1eF5%s`TPB^i1n>X_soVN6{!2MXC$%4 zNp3oQF;?|0OGcQ@rs_=}n5n(dhECs55A>(0yy-P-A1MCM`n9 zcR1;H8T~AYk!CH2cqJ5Ge zP@upEsOO;d1EBV=4)G_3pww(7g5);y#s?#h?$@wuek#7yAX0#;DEYEE&$c^Pp4@6q z*L%v4z4OO3r5$WkXKl}$JPqJ4_(t`+pX~U-R|9cl^9-JI&QET=F;n#uBWNVHj)UQQe2VF8F9mR1df>Wud;3YHK30PrKOnIupkS(fvp@nZJUP#=LFZxKM=kx+UhVZ zuZLMn7|J`Igq&@`IO*uXAEkX$@#n&kYQGO|A4`mR=WaHgr)kIpU=m1dao)a1_(kxd z>dy5%L*n~fTe7$?$_5#m8(5CH89ZZyS#NgEcH+0(;51JVYx?fEnl_mmv&-``$h>V) z^9<*K--Fi`^zM)1t1SaaHVlgt%Z#dWa69^(cdnOGwbJxx^J#D7##sH)fIUt-SI-|3 zd=;o0S^Qb2T^UP|q7ruPQ^r*K1B{NmoO)Fyb53_H&vNkn#l5UE_>V~`J4#wdQb|^k z2ME|Ff>N6Hm?9G`M46ZU%6X0g?LolfiR z5CmvpjC9=1yKz0wZ1chVYwq!;Xs*jOtO$*b#rA-5M?CeXC1+$~QMj|^-v{_}RPe@} zE$&zSJ=^z=xH}F$=x&4z_2_HRd=)3ey+2va$B`zR$&yJKntk8wDB(x0Yt`cdn zs@=1}b!`!e00bm}9D+~h+t;4e-Zq1D(QnjWmQlQ(hv}c?Rm~Nlv(sb$)%*Vd!9F_D zd{g18xo_k9MDB#FOh?Vs5snVi*Xi`Hocvqi{{Ra7Ki6$_1TJR0eEpeIaw~2bW#=jv zBaGLqd_M4eS{2G%`Ao|g+NZA2JAO6jH{Kl6JXd&aZXm&8AEq!t{&nyz>g;^1Q@zf6 z!d@x5@jOBm4FCW^|GppDaD`7FkD=nY?~a}^)wGQ!*Gjc=ma-Ny$O#92I81j3InSu| zuYDc}v+#b8FZO<3M;QgNo!s{TcH^H)pjch&4|n2OO~sNn98Iz(s%yuNPPTPG`o$IJ-HCyaFOUqaY;e@xJw zWtm3sagt6duc>jHy_xKn-XXelYtW3*oN@v0(Ed2Dg1#d7cf%hLJ}%8+su!6+SBgUK zo#>-*C~>orz+hnDb+5To#Cj#&xzb~lw)EP{y>{+mHZYK{@xYB=MEyycaB&yL_NQ5;vgr_a4<&m5FZV47$ap znWvkJnLMcql1Qwt3u;=6MI=(p9LRoF9f2I4c^PXKGWe~2Y`?%Mh(Bqk{o63ESxLjVX02OyK*(-p68 zs(6dSHa9mHmd4^(#^~ceHtY^MWd8u3m9wV!sXR5JEzYRsN04p#L2bYH&p(N+Zx48i z(^YY)DxH9pR)6C4Aa)(O^sHPH+?iad;pz3Si~3YI^GI#ujIfd=QVYnW02DV>>&W_N zBC&667vaviCDTUR&=7u7O8Ve+2Nm9UL*jRYw9Rpbg)~yQa;&kCcD8YhbR7QxI`&O& z-^2bXxF2q|202M5jy_|PoOd++lGzzayPTJSR`18Y85-rZ#%N2jBZJp(2j7A)edaTMTrFdUOTN@mzLV;0u&J<%L`uo?6f5Ka(YuAqsc1XQL3=AHe z^f{`8EbPY@(D|dp`fj`8*Wadxwq*qsfEi!U>)yS0;g5!VOQ3ij2>fF>p5;RylpV_+ zNkw+7#2(=5DCtP;L@{{X4j z$iahgyF46V5ylT=UrzWd#1>-9&DJ)jmbqSY^A0e5>%G7Dwc%^%7Rp?-v5mMKfPD!E zgIUR2V4O5bnR>mxxvKbT4J2GM%OA}70}SAtXVZh)xNQPWGfCGHEoHMWBWWO$p7^fk zNAdNozNUv@c;w0jC+E+oAH|OK!~9Y3t4*v$uIOQe?U?0Zw3zeJhIl(_Wff~1Q){8@ zx4s$hrnHg0<*GT1tdX$D!5o9fTFKO zubg>=1>OO{U_VOfd}(60T0>gKauj4^x#u9!HmzWmx*s`eUlTk{qj*9+Ygh(*rXWkR z?t)H1Jp$*r>0SQ-fqZ$S_~~HNBfD0(kqnIx3<|Q0u;dJZ>Nu|#@f=buyt;Nt5-9?J~Xjq*(Dt$6A6y*4M$76(^C9Pu7!Nj&`2t z{NMPW;N#%Lg44-)o+GfNNw_f>9H`^~KOxt#tUVjYo-28N&v0aY;~y|PxbL4@`me?M zrG@8=TUxofMU9TrwQvCJG1Q;tYVM;yfTEFBHAlLbfPA#WXQ#|@fCpS>^EK7X?aFmh zxyb1noHqJ$ORA1oWOKWY=l=k$UsrrL)^xdiJk1$X3?nBTADfJk>F-}9_|wArmZ565 zI&j$XMRDqRSL(xK)^Ng&ZU2-Xw%1UV-{pCGBLRJ;{%+W@m}Si-Rc)Mjb(Ivr*-+1 z@%hxoc180e&wexMEui>}_@(ZhrDCvzQd<%8wCA7$zqzj|@g1I(;;HP=6ltOX-TwfH zFQTwL@;ZGB4+O$(c zs{!T*{n!h)3P*mqIsH9)*OC6qdLN4Q9}C**zY(P=eR&#%iHK~jeplU-$r#Q_85th` z0B?^4cw@s!HlSm9hTo8NW$t=oCyIo%(5(^ir^gQ#H-_|4ADHpWxE2ZzDnaORjtCh5 z=De3oztX%{;WJ}43^S`Suv--rGHNcxwTdvI*+cNN>TF*)ZvoM9o;8!iaakn#2`tu<6E>4GM|)! z4t+-)ani4mG;JFmN#b2^#R-2i$s4&sLvTRGat>>e(!L$|m*U)4dgh;V_GxtH9#n3p zY|Ka9Q=UG!#eRY5+Bb$gL2mke?28yy|Iey62sH-fZ(hnfmqXjcAgO2JV< zJTqm!VgbO;X(erp)3Vt4TEpP~0F1l|rRgc8W<5t(aO1;FXXMmVps zEVPBwG&@U6-}INW!Hmc^Fe}b-+>#GNjQ%z0UJ}%fsi39)qY%km_{SLb&3xgjd{U2J z*DmypC>UT(>as8!iz&e?$r$v=&0E^#LJgzR?0zZua!J3l4bI6yJC(9Av~qKdb?seq z-a~kc_I{jX_CEFU{{Z|e9}eo~D_e`nkX&V@XqiK?BLD(busihYUq=~jt=2187h*)J zss?!gck5a6SkiD~FD^8hwJ2?sR7f+x?~ZxJYu$LUv>h&eQ51!PIUsHwGI;uNO|$Sk zH@9cRGM5ai_eax=_x)?-FWMX8o}+2uiTo$wxMjAP=17|0sSFNsaJbGeKJmsl^`w(# ziCfh9x5fVe8N6p@i z^XNgruRi!`@ZZE9GuF+%sO&tfnI;RDVS$af?myq*&f zEBB*Ao_!1V$;llD6yA&``W#1q{vK$u5#mWBcDO6IEX1hw!e?kc{cF$;kEi&3E9VGt@Y;8Qc|lM?UM_grFcDmI`j_~>K7g?(q*=WR*o4_lrlCB))*vbwmoac zbZ-QBZ$;H^ZZ4umnpZLq6daSBXV`jISs#cr;i!F+f0q$BM8+46*rh|7S$W0E-=y+}PhDaqerZqqJ!Ph9am!JGSSH(NTX zgsH8SXU6D!8JU9viH*A20TN7k%cnVElbybezsab50{ zCA|7-{GT!J?deIv`<*nS-0?3Q=o)T`rpKjtUKt~^hBB!FWrC7=f=MKja!K{ge&zfQ zxi_B%JUJ*tLH(Zs5{GiJMcPhB2atMkUy|Ckf@QLnI8zch80pAA%D-5DXU~)1&V>cZ z-0@k)0RSqg$IPKe00a1*^^B49nQOZ}I$LinanY+H>OGQqP0mLct(%68zVJ1Yc=f7sD7Jvg7>sd> z)iPVi*#03jVUvs z^Nx1?)6`NUl{aFz&$gH9MLpi|FH@7ZUJPZ6mc8V{j`>VVq_of;!@$lw3gsF<0#+`@9XfBVPZ~|@T2D7BOH!5Ou%7cv5icG-lCuu$E(K}NRfsiruq~m=@ zblE{Hl^Ic6<~-Jl*#=*{2F{|YPaLh&ImZN2TEJspIzmVv&WJ%=YF600BBXZ+$Z+5g zYYOd*(;c3@dRCN#f#%7B=~N|*vxkc+fM=e$r^~5n-*T*yeU?Q4^HNW9A}^Sr?ma)o zqCQo`r4Sv<%}_DiNdEx5I|pp``ih=oIkLhBk}Sx6Z{OaUems@<+d|V#^|k_W|Eo73P%-Hto*q=#U-;@ zuOnQ69GL)g$EdAKVYxy%=qe>n<}+49)P+K-GT+LihIwH|m6tx46(Up~SGgiBtp{H9j+4FQ?6&wJKL9@(yJGh<&e7ap z;Bk(F)0(9EA?oxr7HER!7zfszE$(N_qXMWYRvTs?D`c-wYDXJw+sNt%6iwS=<4kHn zEJHq~t;ulF+q8;6a6VtHV#jwO0WJy1qT+Kbe<1t6tv*|=N?H{rywsuEs*2l&Se*W1 zks@hjSA2~1siS9k!^w@f>Fz1dA}!cXoeGZBaxR8#h@q{~(jZw!T-B(Td|)b`Y2$6o zxqyT?`LolCTV{A&~&R&X^PLG zKv~Mx+nn>q6@hkcmNpxE5cm zqF3_cVYqXXPV1ppX%I*!m@EjmImv%P>G;;Yv^MdhMi_1bpTeV$YVOnq9 zlE^{HtmLh*`WDrrbS0Rv{RLQXu*4V*+;VD)M~MQChNhb07$A69{KK%Tf_pI}$`ah> zb@G&-s4Ru~KZdet#B$xMg&+Zrox9RRL#IgGu$93CbfkNo zyPiYSj8tl(;x!^dyLt+*dmM48Us}fIi*uiO(ni`BjP$GFVt9cAZaNBlc44GmMn^cS zaz_+%c_+B%io3}XDBDu4a{{RYUG_J{uv1=@$G3)&4%`9@TZllw;9qG4s z?d9x@Z3BwZloHO0G4SV%)N}0(H$UTe~rN zGN!#OD*=-EcPJcyGm+>AeAn|)@z=y26rbXrt*U4md+D)iGQXK&F=-@$knO~U`Bxxi zm!KxUrOVj<*JjS$2qYZi9+mvo{@4Ei4|VSbd|T9fQ5>lD7uR#oFaY_1=6%HD7$FBt zdi6d30A28judYs#43=CgIE2$lQ`j{&JnaPL(`AiEelKg@4)YilZI8@-rL-#ZE0*09*~` zh^3}Z}_!6TZ}vhxCzT$QIJlbZo+g1yPl-p6Xdi&(eQ;&Xc{#()yc zP4H1vfnTgrtxoD6pNtrwc&-7@5D z9X)ILn~XTa5t`TM#61?tY>%wLU}H^ag}RziDzk!!I)C-+6H{eriz@PQ^H$7+%NV(n zk=xR<_PKKi)d>|D2~o~!pxpA0=*CW47`}$R; zHC9}cQmaL~4EV=dkW8CUw*&(S>C+XEPWIZ_%2te%+rIpo%~at2|$r$8ynT?K2a7A26# z`yvDYI#pzV6f&^n(knWvWRuTYL%pK~GCA%lY|$<~28gzdw>j@psKlpWr%V^@-47m> zGVO*f!~$ET4mw;>R(2kZC!90-(Qz5KkwTn<-1p5%z9`_!Cga=JKD7Uw=@6EuZK$(-~wlOkK(bhi%jZ%(wLSxYF#Z_bBjjxxc1VUB27a)MpF z_a4-xxowlRyMz)j>CIU;P|Xs%5Ca~c=cObF`%Gz_gdCQv`QVL|$GhbnPo+D9chJ;{ zythAR9R*W)a!X94mKZhA*jvSKr3-X_kerk1YXVT4ilHTe)7QN= z-cZ*bLmbm3$8(cao_}@&Ygp zPCpu~qClg~qOWDnJd>_44ef=pWoT;nJF{uN734+1+5gp>Kz)V4wk< zRzx%Tvw0{_OqyX(6tlKTIp_IP%t_@Wko>GV=Br~hHfrA(os*Te=_VlS*CRn`3>N{qVdX&}J+c6*zgAM$#EvM#C87)_IaoFviSw`{dNQE%S4Xb*Fu7 zJ9i|OcK`^70MloXgbeM^P%%--a}e7J<98JcPVf>i8~yHSN+A_u%1kzH^%ylyK(}kL z{!l$Vx>HtvKWSl%@m6!?k`M6F&CqrkCETkhF-A(Dz|ZAMFMiGhGJ?UnpGt-9q=rUh z91+D=jbyuo`RYMDbHNnS>>Q#HHc_8|F)WFD)nIv3~dUcdZ6h;Iafc50@S5`M@ z4)2w-fTz>el%w2DXi~S8t{d)So~QZNmEk<`DK_{B7f<*{wh8qC%JQ|^X;&)K2K=q>DGaS5=&rJGNs0}WLjk@dxMmxpo95}$B}?`Srir@bdJ>K^wf@ZaYRpR z`?*^o_y-(-J5;ixLgQfENc^eM#9W4xpGthjbOBUTg@opc%lp(Yh|c5AYP(sF`DjSz zpystwNn%D&K4Z;OcRpy`F`o2FI*Owixq|^8$`oLK_3G8Ul3B<0Wo}O-)l2C<#R|$0 zw)2h!J_a&IU4{?xs%#*xTDO+rr3Es?btbNcjTPo^z26MLP4LQ9_f;;F$QkcXG= z4&ADG=iY#h)YDeEa&|K{3H1V1Z1$XlDmIESrjnww7P(6x}vP9xcbDjX9u4Oq;xMQEfnvgUY zY~k{GH7b`JD9QGu>^Ah&t!V&?-bqe(o<(0|TbqA1)b9fyPkLf+a;kpuroGS-NfbMj zrZ;+i9jhC35_%1ZcDjjkf;lyIK#(t%oT=uSZ+Q`*R7e1i=PSwo z0PE8Yi2yn<#&AJBMObuokXyvKR#TEW`c{@tVd^<$NieaGl}0N}O6eX0U{)g9No3{& zl3Vf>BSSvivFTF{$!^*fWx2IrQAf->p7fHxn;0jjwNjBH+lIzL>rH3K%QqZwD>ji! z%$$)bd2)_DYP|48fKZ-0nnNQ+Cc<(tkxYD)G9HJ6=}y}AJRCkhEznudRPaN}BO!qfM zotVEFBl^^-BR*>uZXv~?cuq*n&Nre??piJz+eqO;*L1tKzb`c~<& z^7H3$lg>RUky{4c95~oI_CH#biJC?ltcfB4oRh$=jF*A}%lD2s?^(h<5dafI4oF>dJGT=#(3@cDW$VM7NTjiclxf0aQ9KoXCP&XaLRFzeQTxH zZz79Kfs$hrstw8pOJlE7?OthWF6X_QR)*y7CkzX19P}+;J?S49bsb~GTCS7g0Ld+s z&l(-yyVwrVjNtQ(j0}EtmnE5nOWMb`>ALo%HONB@JiOx?wNY5NsoE=`q($o7w;^Ztds0+W06Z#Lvz3bssu9dy`Mv*Fi>CmLP!vAm)tnn_rcQ-%rx9Du~emI~XUN*Tf&n<_PvKsQd=YnJWN(Cm;iFb>ljSD^fIFUjE1kCZ zk7uFSwwtW8i5Wrxf=SMExSj{UerqVo)*YJI@h^sd5GL@@G1;h=(2tnA6;+TAn`rcJ z$eQhKekNYtc*cE7);TP#X6kpAA=Cf}&p1Dl^r+xzPD~&!v<{%5Po%YMSi&q`p}o1ps7!7CM^2@YjZPuLyWmqqd6#6S_v_h&=)J9ff9TH`bbz4wmZM zVmK~GAB7uiV2ocEc#_YF zzlD5E-`V~lhs{M`>$v)N2k3A`eFda=gGccGjT8r9h(g4EIas60Rk0vpYe!oH3 zbg!N~XYmm{JE$abHhyv(3=%Qz*S}i&Kl^GVLV?2<2N^vv*1lBn=YXxX{a)i+NxbD_ z!-76gdX5eW1aa+ANnYf`U5;*VjoQ3dCP~rbwvk8)pOsW+k)BEXtE}+<0LP2#JqF(D z&e?A6WR^IDc`6KS+gXXhIURAwrFrLwJU1xPQ%!;cKGoPaWLKB`HkVbo<#R&ubO1xK}wD=NRWW z{{T3yC&%6^zwpFxUD?|sBe9PTcxGUBx^8O=OLo$CGgFz>SG4B;eoP<3^ z88Q?CK5qCYBky{4uAk!Gv82bRMXKovsjD)OWK)779aMwC$?1W|UiHKLJMpfq;)_?% zFJ;*R{K|(Lf$4yK2PU>n^0IkuuFpoZj_P~m(`-L^4l>V-p!Ue)Ca-DV4jL_VUyF^g zNDk%xAl&l2W6)x~A4Sph{{RnY<_DDQkw6N^3aopM`6jb0Zzj6c&X9=5U*z+8h>^5(H%#XUJZ?eZA_Ril(r;@YIpdC!ZXvz{cUvKtb*6Tu#4j zdp3@3loesh0nTyP@Wpbvb^fYSI~(UQsK_dL2fhtMgTA7JPjkgBJZyY9t-YR+I$X^R zo>{j+y<=j2=>w46_VwvscIY~n+H}=>-S)#M;k{U=i0o3#+DvA z)@?<$lXoOm#g$7d1(PG6l>YzR;&C&8fCYgsDKgqE7&OR2dU3Y;-j_khMBCl z*)68bXAHqlAxYzkgtgq}a%WScUtQ?>RG0d<%BqE*ZccDJ0m=Fb=4|{~7l_>-OoXP= z4&n&ilhkM1wRAo-)g#gTHY7+|;a$}LP70RJ*64Ty41?OJ_$uE~)h7E!psJxzll{=u zrIqYG&r7$818f#Y!!Q~29<}DWo}Z)L-N}4mNeCN5?ZG4Y*F$qX_MZ_f`{Qmhpb$L{ zee31_0EvDy)@^SfZw_3DlX+W(02OvPE0RGY9Q5_)wN#;EBHDI6cV5)3JR_ktprBCwpGo{U(k!EbO;uH=yJLk_;B@XfXFTV% zeOILEaz|z!PnC}>GhSct^GAvsAMFQ4T%O!?9P#XbI`oUX*`q--KGjo&8S7aq-s6l? z(Hg}P+9M|1mG!PCUyjRBA|sKof*YseD-*rJ0`%l0}7!I}mrtCl$AEe-zN>XuPliUOhh(#aw+;O_NJA>2a&Z zGN5A_Zu_y^);^w=*RZ@dBgq*7y}p?=E8ocHc1MPI>%m?b)^)TNH!ini?q%FcrT_qd zdgrOZu8+e}XgWMgY2qo?f3v1ZkYq6fB#;3etLD#(I**IIIVHp0qR2PwJ4RJvl$;hI z0n?|asi$}YQnc1|$e_89wXzSJcT>(=KdomdbSewE_T>Kn5Uf05;n{3a7tUodd87~m zuieS&!>&bmHl6T4!+tf_E^oCvmbbfYtY)_h_g97oaOy@dN8R`D>$-1&bZK-*;?mrz zI1H{1RH5W&*S8|N4-EKn3p;mMe3>PB7fPKeNiDh1-GepHMq=J?nY&`21htlPpr=8Mgq-#&(hqra2YU{6YA2cc@xC`eF#7 z0C~Yc4YVGhb!=xi^sau-Sx*M&QA4SfnWIpp&>S{6$OrE6&O1=swasAKXP)>Q;f?Qx z^=O%4IEcB6Zy+h^82a zJm&)^JYyX8&3fO%9|~%EMU?*l+poIjPmzG-HjaKzZhb3;Ulhfm>#^9dD*~%!`xfXI z>E61HQ^rqf%Q79IMn?xEkH)f{Mue5kPZwHQcvnxKToQRn7B-WTNhhJ|dF@}9-x#d? zb@4;uC))fm16Zqdxq$i*ZR5J(H1qi7tc&U4N)UvJucUx&sQk}LUsZvD8A=0#D! z=O-kNc*Z>sT9*F+M9{Pw=x;3H3vqC)?8*)cXOp+?hB@pr)~*t9e8sr99}j#Bn_TdI zv2mw(n#rY?PXaV)Hwh7&BP+Y1E09Jj>gkO7r-*DM5i~|XK4Hn)4<{Y5n)=hhp9*{( z;{86~#k!4(CCecZtb=PWBoe?JF(hzKa50MNuKX{c+0W!hZ5Y_Z(>u&aup(!f%7&7J^lSTub{pn zcwJ^4luhx_}wZ;+?ya2iCg}AH||wcwAdT(3wMs*soP1o(D|( z9@XSlmiImt@T}tcQ*&__$|PLvVc3I{fu6@djd=e6f-k&Bu6UN}?)Kx%k;&?$?j3@t z#sD1$VNOxn#Bsn2#@;z6HUp50>|? zk@H83J}&%Ao5YW#y@1G(L{Y{`9#|i|Vo2nHk~kUZ(Lpa3b`3<;D7b{XOB$tULDu0uWTRpiwnn`E_$yZ53V|n z-t{`}Im1JT({iUI^r-*z#DR4`bz;EvL^{<-ze`yW$jU+ov zXg0Vf18J;Z4*X2id_QOXpQpxThB2@%NkFUVj%sgZVZkfd*znJSJWZr{i0ZZx+$xr2 z`IBx(Ufdo>1XkUzhDIg}!~XygwLcqKGukM2Ck(@(BdPWS-mOHRX6WE9TFPpBsEl;Qc}? zA3AOFlBI)@hUmR>(2khoR|9pf>OL}xCh;qmLQ6j5!x6yGY;pc^QOl`P*K^#U@rIwb zZ1+Ih$@igdNN-W;?kl|3FRlLo;UE6T@X-+&5sEBeE(tuGb~)tnUl{75&rra$K3XG& zV;(ud>7PSiaC|C{!wrSk-l#%P_L7Cj6cJuV<*1q2Hh32j_gC2_lO(6UOnsNonylv z@S0p*UL;$7W>GE<1A({b2*qfj*l=w#(Y!73SX|jheXDI&$UDvyW2pLb`BznQ@wdaC zBb7ABoo*Ncy?OwB`q!Lj-ww3D> z^Q>@77Fnf@i3-X9!N^_+{JLhP7WOrJ>USR;JXxi98%B+EK#eWs$CP7U7`ubdxflZ- zhp?|c_$_^?_=;=Gol4o;Yb0_^MmI^$RE`3XpVq$a*MDZ;4CtO7ialz=8|G8y4?p+# zBw*uyNbl49D};i;Xt!$xow8fTTb-bDo~IqpsWptHp^Zti%=Ir79}4(}#Lojm=D(E$ zjxq~L@|=2g#zlQCYo$HDhWh59%3)DDaHiv4r*3e!`FyFjDSr~zm z3FIEf7zA)@n)sVxs$KXlSP4Sf>6`$n*^&oTykEJEqhL=}8vhU)ar>%H)T?#{hSgUPb3K4>& za&mLpyr;tYYkW4E@5grrONL{F2k)wq22M{t`R!f_ZSj)h!+MaC;wVA}-IphBGr%Nu zCmpL_#GkYTJ|*z2;nG$KWVaz?EZ9~&77LtbWfY13$GoB1Bi;xF27#d_6* z+GmC$-E$*gW->~HkZ?ijJ09I@&ipfH@kUF>)na*!&fqzn%$-hm0>=j#Jr5P-zX{{i z{7tUBurKbXkSa#JxMv(^&;j|H`_sBn`DzWHgRqJGQkl)@I z4>pftDwQ$$IY7ptKR$*abbU`+nc!=N|kUjM)TL4eJix^x9pAJp9E=hL1l3z#P1P7 zGwnS%R#A>HILGT({2TC={{T+ZMxo*e%y!m?_i_gSNJju;JF(xN*0pN;4*FdBE*PSl zO^!Q&79qwl*0`v=EvJ8IyGC{n#2&Sq@iWHuzYn|vdE;F{ztC)>EXM?#k`+J$`^-T6 zdE&ln_m3MF8d-Y41WD*x~ zyK1it0_P_qjEsJLc%1?-5O_U^@#Wk%SFTI>Xg09h%K?*@0H3|zuN^DUd^7P8Ef3p6 z9gYgFIOO#F1$@i#*4tLr^)%Jjbc(=*c(a5D9lMfy`c*}DEx}(y>>=?B!&jakdyOoM zfeug@)Z{vzdXC<`>*k$b;|!W-jIFJnDJHj?HhEtJZRZ07@OpIXgH7;SMd2@pF)j4I zOwNq?a(1(}cH=n%JXe!P;=Kb^yE=TY6w~g*MhIp(GBLYq-@#^~XmN01aD#qgG_vP3D$$sjXySOm0_c@6HGv$Onq| zpAUFnPPM*#LYO2H2nQ$s0M+T*zJJuTJtIxj6UJ~OIg!gRmzG?(Cw3R{#($nGS6A`Y zr)O*@(`HjR`=ItCuX-F7%y&rkPa0_Ume(*YoeIYruF|T0=?5Ej{{RRBraJx==Kd_x zXYj^~{vom~9x|)PUzp?a6)(dtA1AFx9l(Dm0RW0jZB4n(&_BKJoMVbAN;k4DQdT~bw!YG>EsQpY5wh)3&KDyY9qYmEz6n8Z zs4k`FJkdk*1zf!~HI6m7h3~h&+0FSFY*45VNtqj^e7O{H*EP*+e-&&lE#$J$^(bCPLJOk@3K(OIcl>)+e2wUZ88-Aa{wI7x@c#gX zrA;>0Unt5-gu%(jUIuUh<0ia1Tg@X|yIYIsQsG}AgMh(JRzrR-%#H2s`L~gW=x^ zcw@p|Wygo%^4-a0? z#rx}DDPrHA4tipPT3h8kak7<$GtJmcL8>8AoRyfo$WlU9qAKzWLD}2 zkz2yO2nA0W_CD46JMg_Em%x^;@&d4+KokLtXF11SYd343L6kpu*}d})9k^BNSuZS3 z80NYQz=kc1bM0JVBg}Z=U%ULOBf0dBeG7=eA|YD`-kT#Lk0_D}#z?BuMiE1|1auV= zJ4q0C&m42d=T{weDlH;&u~bG6&79=baVdqjNOxkA`Y2-wKHQVg)H1?>R#^|s#{hd% zifd6_UdVes$#*C$I{d>J6&Beho6gQL>C&#GKt|;HRV181`xI_w>^oKN%_E~LO*0u; z6mlvUNtCd0o;b}~l^4nm2hHA>0bo^1g`n?kO5!(AaljpFqcIW`#YetJk@k~;)`W>! zOo+q`b4|+YL8WoCZAbGZJP*!^rdL2ypyX2wP!O+lyNaBQ`uh8Ird=a9DZtKZK_c6& zyD~B^0pQe^ND((eb5)|1RN_E7V>KL?j}kE-c9}}uO0&xBh9EZ@$C0Gyyo$Ru>_t4t zPtBfBrBWAB$mU5-ed)N9bVjN$e8%Rai^(!%r$fya_Uj{IjxuvrL{lS(;UE6K)J7f2 zoNh?hQO7tj;Q{C=mu$fKoDjV$F6&L1?)=%oC)2R4f3Zm|zstb`y(uNL6eD9Tz>or? zJoK!~yPJzsvMw{;x@h1?V*T$Ywkn17td}f^iYi=HtXhLP7^Q26VJJJj`_hJtNMZw@ zZ*N-Oy|FG*+5lOj;fUzJ{d$=+m~Fstzc>3;c2=;R_C_pa$?~v39W&`q^1@1_DK)cr zy;9tC9qJg+x&t8QnpR{drliTed6bZZV*;qnE_oar)!`hHVPx&l9@PcSyCZGKIO$O} zeG#SfD+W+NiL$_RPIyZ%?;9t-^r|c_B4T0h)c*jV=~6AxLI!e288oy;E>B{sLM;L- z1G$er!n7LZYnBnpm^jEd#YZc?;U{6-)N{0r0dU-&gm$FmriG>o>=n!?gu8Nv4(SQWVj_W(>!DY{cBbvF%*ha+`s|Tt|_@Sw?x|>)6%NXCaT~ZU<`2dx<>X-W>CRn%H<=7>NgS5t>yy51A#PpJx%k zr3ep>O=Prkd8NtR!`7ZI3+5MJPQKN06$$g;5T z9`!ux`-ALj#c>*+Efvpuz%h{J!Uo_yq zwR86>lS;vxXa^M{O3|;F0Sr%Cys#t9=g7Gj3y$Akt!K+^!c@^_7m_fX{HQT^KjVYj@1yJEMb@FQx=L!`Wa6=?JGv@mFz1< z%6MkVNW7=r^{QJ7T^5x{UZB%sc8%DeJu#Y#vs<#<_lhLSj#TrX=}i97l|y-iaxsdm zk+PwZUzmSdMOYYo%3EhYN-bd|$^5wD0o;}*riaKmbmfnKN~vZey)6t3$m5kHaqbN* z!nK9KNe&BsRc}GJp*WUdBW1bGA&JM%&7Z9!TT2=lTfIbDDdIj!A%N%8G^IU5QqCO_ z6m0+%ab1Pta z(=H`jHTeL*>F-&|*ve7rT1Xn~6yaO1;Z))qZoH)<&{K5j<-21c`55uXrCYs%ApvOq zSv`B!kZ4@p3liFoH*1WqQ}0&|_M2@HNPrDor-$x!Xx?SGB#=f4=ter{*0(3MhW0(t zVIS$o{Dd+az#VQ`O$0Bm&54P!E13~xgsl0XCR6YEg_0A!na4cx2?lm7tLt*Bct zc?`hkvG$@(*tMpNuWxKd1d3N3k5O7u+uOhuA!cGeZca{r9@QL<(k}NqoSc$QNj|2d zwvBDxNo8{HFH(DBprv~vCa<9+*Usyg;;6>xM#z7QtyI1=CLH5{$Y~Do`?EYwCENVXj>WNd)GGCaif$V@5cwX=UM0| zI~!K_ZxbxayRqB<0Iy8cJV%se+5uD7zr9npxp8ZmSA)kLGfxW+z~Mm$gOSZ?Vb1SF zZ9(==u`KG}zau9jrh8(umF^uK94-k2A5Us@w&o~{qj3EOIRJb6)Nqzd28#qaV10NV zm7|H9ixK3GH}d(%PAOK>8ExBh?QcU!@HCPMSGb^CM*?}TmST7wltxz2(lBimJjb;q z2hHjJHIBB{u4XdC0b|I=9QXX|UgFLsD%_XafpnSA!!xV{*LOlRMxxcyD| z#qf{9{{R>ChtT|A3rPzhQRSVbLG<;{p~$by{{Y)7;BKSgpMi^__;T$nwEYdEl4Y0X z^OQJLP3M$5m>vgwbg$ApJjKGEVNEw?+DDa`QgWu+Jiqo8__Jx?-BJy1c@{ZkacOIB zw7$q22;?3CKA(pMzo3hKQ7^4N*$Nym`AOOL8_gRL&-w}!|~5<0^SzG|Wol>nR&HsgcH$sYCfo-^ch)k=7( zYkQ~q9!^tR-fHKfwD%2%C~2}X$siuwqw_crd+P@9twv75p zeTvr?X#*JH$;WR>%`^G(d5>0RxALU(Pt8%>#$zCCIpe3j3EN`2lS6C!!hY~>iaS-N zi^)Zg8UA$mW&1KKOb7n}Ub3%zRixUNdzQfjjybJkN^hX$h>Uk-w2hg|za6VTP}Z$< zsEpS#E?1^cPsYAE_`myg{3Q5GVJX$5lH%mCSZ(4`#y|%$23)Qb;1I=0=N&8ZKjQxY z{1p4d8iuz19K6kqt>VEFogzQ9F*4`oca!~FHbB@pTx6bcUvZK6dzoWWlxgy>Jr5%l z#1v`hozL4(jNi2H!=HlMLTbJ|)Z?}@sdyj5mL@NTA6gl`iM*pj>mfecWe0xas;S z`#=7}-Y@v@_Iie?Z9SUX&2RSaw8UZiIoujVP~#Fd(0*LtkEpNIUxc5sBczr(mx|^4 zaJ9(|1Gx#;&{{V&w8|YThE5iu4jzJQvs}SdCZb$_3K;s+?3iTFaKgki; zd*ZUE)I6DtQ3B-k_NP6?$C0|&VE3=(?9ViGgdLOiJ*3rQp~X5W+3 zCa`Z!&C7z>1a=i+uIEd2ex&;PRP8KniJLri7_T>>(CPmGDI8yE@|0xbJPh=z?QwFm z6_EAqR_B?5`I*4=su$23l8mjiaZ>EcQZ!(SO|2^eNa@c6Rd~_bV#SBe*wtyLm<^WC zxQ^YA*0YS4R)MEszD~Fl;TtlqxzkB)X5ib&!5_qVs_SPAr!ADlM`<$83eM_P$6B`X zqK+Gkbfnd_8rxEVOK3hw&U4=s5tD=*iiAdwE8t{~Mk>MDK#nd>IX;x#jHMz)X&G}V z!VadhUQpz!_wU~n2u9M95CgC7K^kWA*iCTWR$X)#s~GR^yp(L*vxh!A?2Kd$sUzE%`9+%4oN+# zvE8tV7v?8E)gnIVh;xP=KEAasT?&ko(2z*Qzj~M$$3B#i#W&qv2T`9&V!KF$zH`$j zy+^U_2;DMBAJ(f0TY7>p81tX!OTKZ2IUA2Y;Rqgg@kJzZmn;hLjCK5LPbkTk;e}9}_XR{FARe^j zEL(BN2end@LQlDOYdVPIah`MOPmD-5 zh9rSf+?R`JQ;haBlj_OkG_EXd-cyD9wUKpV#z7z>fsdf{tFcPbO0kwWBa=+>?)=#{ zs4JWTPg8z-J|+Nw&*tin8%9P?IR&jq6(f!{sqoL*p8h%X1NCAfPx z(7$CYUuR&Tf`5pNRT;KOpd67(qwd6b2emX@2xjux3*_U9PDwE*+_U5?isLlZXbzQO$;~>*t5bxBfiMNf5fNI3H@dem^_B;2j8#c3wJY2S0 zA9vELOtDEIZ@M~)QbniKO)}PK!wCRZBd1;}BD*7FCnWy>Dw;3eN@Ql^rv|Itz@}6} z4hQm~LEKEGB(cK^`MhO@KE10(M=aqLcLKb(q3y*%d8MV;R0DBSoPMv=c<`jFIJBt1qW|Sned-l5$9?=8S{}P7XLU#qwc{ET=4LB`buY>_>3+?*{2x z_nE*1_NWcYM{Lo_nGYLz=}s_18;Oa*J-wb$KQ=kf^r?=fk(HuLZb?mm1>I9M zyOcbB6&fMLq-mZHMOQRhd8FE69Po--`0aOj$hZ*fz_UeGKgkeuPtI$k{q{+{vV58NI zv{%$FWVVlDedAPZRLJ<7Jk#X3Hy1dNR@J;QHNM38TRnX$`EQ`(1S>#QOCEy+3Q1Z? zKx9+KDmG&lQZiiQI5jl8p@1u&nY#Y~g-k86E=tC9=1s&AwX@A;-OctsWXmbXKJ}wK zf>cJw%s9_{R84F*Z(+QrE1%)_`qfDpw{%lRc~qi!zk(xuhNllb}LIf*xL_7>;4sL$Po!Lug(uznAymiwy&_Jtn82& zO62D`rj^-Imb!zo=V2T*MKrqsQVC(kJ;gXg;ywNI`BiBLmoln?bJW!>38=dfG_o{6 zN_ibK)~-b*%0f}wmg((PrLc-+60sq{t0XE$0-jf{YI$!WqOGYEEiawrus9v+>cuL% zI^?hSX;wuDrx_FmSmPygxSo_sosBJh3Su&uEIRXwwIo7y3co2@tgRzNLyfJU%Ank1 z#@ESSzVxn%QEPHbnS^l=`~)A4Drn|~?bM=?f!3=CVY`<%0I2FQ{cAgf5JM>InsvksvZRa3Rje!OT4hpkY$~Wib0nR*`clI@qb!`{RF0D> z`K0iAifu(8a&JUrJ>|<>i)(oPPNdZ7apymf{Rd3dXpH`T^(9L86%>H9!MP+>D{<|) zYFkkgZy&+yO5#h%nVXPDPfDK#WgEMU;-ZG)F)P~;RGPkSg!7c4QyJI}Li9DRl1C(e zy~sU2hO%%LW=Q`4ht{qvphi&jJ;fy6#YRNTgBX(;9sTNvd10LFI2fk9K^({n75wR} z;fG8QdKLPEi!8I4p)Q?8SCUh1yOn&&ygN^eo#mq>fO#66+j@aG5-M9q7l$Qus4lo^DMlHlq#4Wy|Y$khIb0&<$E7WtWc66 zQ;xXh$fH}>nD27^&BQjbeCMbDeQKmaONh?l$7*EOD{{VOK{?0Y?(THV-=j{&~lOJ_OaW@^W2P_jk)LXr`+4( zMsx(0=qgy|a2d$Qy$X|zkZ>G+HFWI8xp$j)+AhTMA}{=H+h>77VkNvrET zs{mPsSJR<1l$#}@yIxzA@_{_`{3=)y=Gtwno03j5#~)hF-iGN_W6tBiIT*)!*Str0 zM3IxnZ|Oo$a-!_C6{I$|1}DMvK9%EN9O4rEIo7Ur?{&14p!9u&0z3D`deMevUpcsc z=U!{^neFVp8fsTJisc#?Mlq{1rsW_o3+Q?0kMD7s+9=}1OWkMk@B2smF4p{UuRgn` zuGE+W3xSNU0kV2$zv*4y!%qO{9s}^btKEe+A7ogrBP1NL!E=nBN$N*m=jvV{xSr=x zmJ8Tg5Ql1VesvrJgVMZf#Eu(R@3=@hYCmX(1yZgY@2XFrFp(!Le(Hnphz zveQ(E+e>bljT@H9A1Mqn2=yInoAJ+$ue3{;EiWNUyPJh#ipOA4oN<77$r;8gIHvbG z^yqm6ei+qmw99=TQV$!(7jntYP#o@4&m+*9`rqL^cDhf8n%hi&-NZm4y6?s^Jplt4 zuPo57E$7qYwbY~YC6$IoPYiuNmFu>eMxEhXV*r0E&f5I)&Y*G6woeqNeuQ&$IDd&+ z#M)ZOjWfd>z=C1quI~Q;*P8ii+eo?9btPRoGjh<911K$#jOUICBlWMct~8w=UA{8j zMx_)LT=TpfeevHFYeTZpG;6=J*ubzNw;@*w3Ho#um$YeEdUZZOUk_^9XNxW7ytZ&4 zWtK9^O5_~;$M}2K(Z3RO8^4I&0kOBU!nL7kCXoH?5r7AC^zT%@CEQ!w>qgqkd`1}5 zvt$K!VcXbMeHT{LG~W%n%{-Ayou?-uj(8*LIQFWX?)4$Hx;_xS)-}Hmc(y+ZTg59$ zYy_yzJhI&5DtW*euc-Vb;Qs&;TsQXWBTTP?0~~MkAo_ZbO7FE_0bgmx-{K9$hxUh< zte7eL*iel65><%jBd`_pUxWN};QOr-7lO$w3O1g&JAmMm*0owIiZZ$K2addP z7L#cDaD|pd!oO$UI^lf*u+zPEJQqG0!#Yo;dK{i{pVc z+FL{>kcMN8rJYY4^%cQ? z>K3xZ@PZ&tK+afapdPjMFNA&|=-=5;OL- zhqzF9IrsY2J#SCHy3uYg#H>=_tV|T)K_n0e1aawB^a)$3_x`u>I@eUUj@HihCWhuB zV02|*(GiZ>2iW@i*BPVu^Hb7dZ7Mrh=87g`yK(ag_QwXkbND^*{{X}fdn;VqswoN@ zLVoBSfE;A?;;i`dT+}pA5!~Hr61;Y?MfP>Kauh44{I?CXv3=PX;YcJfI0O@u>CkdZ zWA95X2G_(oJ*KfY%q2+XE6C-5a;F$L9V?mmpW-Vm15SqN-(=DJv8dpLJREl8it&Gi zzaAxbwue<#n`C0$qgTfF#sgsICm<8};}!IGimk1+eKg!e6`e*xo=81#ed?mzOydNd z&w#vl@lV7zI+*ff2&z$w9O1}3{G+0rb~!ce-U;}Pr}(1Y2fn)7axf*0K?@rbz#Rbg zuN(2!g$35BDd1Og;iZv zgw|`J==$_WR@2Rm#GiNN&PGS69<}Cv8qu$GS*5bNxGV$y>=xXFc5b{9F_GH0d~+v< z^xMOGXLI&>3lZd=<%dz|2YTeZCE*Vh_={PENNGIfK2x{)y}f#Xa1J^D03x$ecCpU` z=-9kFG1A)m0HUVu22VX}&HN{8;dyo0^(&YoX-NSj9J)84JQ4Kwuc!4Zd#J2Ug~ylY zym(-Q`Fqb8$;Zp@U!8t3wAVZ};z;dnyxS=pwAttQSgz&IUW8EzCTQy2S)XXdZYPdQ z3E@kKXB$em1Oe1!A4=sl{X0bPwV#uDaD&WkvBu5&%ww;v2XcLD&9pC#HxRhI)V#Nf zH3=%Q3I}4~=c(#Nad&_-wCjbtde!94lypL7! z2Y`Gh<4+4En=`Y8^AdDBTa4fnj&q)s^Y_Bf2WmbV@nyl)q%*`62*CwenZ(Wcg(bryGWLvt zpAvZc!ct%9_=-sZSiaDtf;;pe^V2=6#ykaY;~x*fsQ53$0(oPyxnzy!Qmh*TI0vee z&TB|TJy4>%A4O}w6D+KCd9+1Fl!KLU4i6mQ`U>-nU&k8cZ6mlwAQn(Y0LN^OaaTMo z;Zv(!ORDR^U9Fe^tZ-QyoT%^56`Ao)=lc%UGVqqRm545*g~l+gj_0*GF2PNwq3RzF zwd;%BA{}Q|gUe~UDEpuT*PnX#TYV}mMkSU<`DI+Pu;3}{Up#yp@%M!Xt(00e5tfdx9R^0jD;;)A6CDY}O3xOM)#}*Wk zy!6jJ4m#H{@PoiwrjT1z)>T;ir9nHgpmJB!)893-<8KSz&3y37cIz82%B#wT_2<7% zdV5z<;p^tI(xTI5xbr6p7kXtuz`;1l!Tf2c_A!#TL$ntVY8OqVK^O}u$}4i%6;kg; z9vF`1#>z=1`%z|*iO0LH~sorW= z6UV4Wh)aIvUs2Cr$GtZ-u_{Yr!F+41YuYZB*09QLW02?50Cog)72^IJ(l5MUJL!p> z@A+}b=bWF zQzV;0xomDA^lT|44AnVwMzf!~osT;3cY!W6OC-~+<7lo2&dyHbym7(w{4164@4?#< z;v0+U>{cepRKXyFo^n0@xcw{biLRF3+`Y6)%s~eOkz7yO-%3Gts%0SMjt+kiD=AB` zqaq7!BxxEjwzHZ$ZG$Qt@TvzpLCGgQ&syT{{7Yn}J4A0ZoDj!7zm-<;&x>Egwk4e6 zWmDx9;EWvc?T$Ow&0Y|<@n)&xFYSxlms@z5;(J9^D!>8+fw^psxXvkZXjd;&>RSzO zdfff776`4?SWhbj497n&C#M{q+*gG7x8t6RuE92$;mN+yByt69q^WfWmQFro7{NUb zYuR-#3ANp*w!Q*rWWf=hROh+=mEpJl01Ncb3;FZgK#@xzV4Q9$hxkTM=Yd2Xw=UOO zv)gEH_-b_3H92CC!ow(D5Msw5Fxcythy5hm)T_l1y zIWFLUJ(Tw*xd?nmrTLAZ&fa6U$&7+PJxR|WFIuDx+jF}*M~1v_FWNOYBa-GoyWD?y ze~Cyn^>2gpohQSZDq88$Bw1ca87v2Kd!JKZ68Ldr@Yjgqu(5G)lM|A8Dsl1+-iP$B ze7W&RvFnv{Mr(UA&SH9Q3XZ^WqMhrr=+XG38*Y zpyQL!*Oux&Bc5h0Fv5U+dG#kX4}mST9b;OST}-P=&zSti90ntxBn;$?55QJ@sg~fL z$I?*gZE%OoP-0=8duO-fUL)}n;qHrhV{vD<%92s#tjm%VXPgXy^KvqMYuzt3OT!}A zY3u@w1CCBH(>*#=FK(Bu_B*JFUPA(Uk7HR+M`S~8`W`Xhp`-XJD{DwCQa>n>8Ye1& zvz@2ayZudA_?_`v!}>f{^XgKVBA0N^8QeG-A1Z=&o`m)%(#w;DPEh{{YvoO4hBk8SP$M$J}H9Dh}8=KZbu=wA)@$5Pr zYo+Lq%MGQ0+qWkN2cXAnfA#CI&>DSHOX`v4mKq)dB%7c z{*~4EbK~`;t<|@NbqJ+fhB1t$FiSQE9AI=GokG3ri{*B@J*&k&9@UdodE}E8#{dlQ zco{#Pe93w73R`_@o~DizZX!*p`(SctpoBfcH@zZ zgUQMCucW>n{B*ali*~*8!4XhdK4}7PKqYbd+^ZLgk06(^P-|*Zr8bx6-ue z-Z?oWbszm|@h^ziDS2TomuVr6ITWcXagcb$aT9C4DYu^L+fZ{GGv+rWaydtaazY$qfl%l= zR-l&>yIinX$yEw{I+721>Fs_V>bAOi+9ahIa$6WAlk*;Wl5%rhPlr4=Vd3?7uL&(X zZgbZs*Xw~&o%#!tL&!CucdW%Ft)Tg%EEgvkVbeZ?)~5I?q-q-7)y{kCsR#hB+4b2ibn$2g-Z9sc^{+lU z<67TtyNl)LlgBkteG!bL)vS3B#LwA#!XFav?DZ{15VBgIm@14&4nF??OppcvJqH~) zu5ZSl1$1jK34g*pr`xP?HbdYHDeOjibK9pC^;NHpEM|?^AHL#|iP1;@+9y+W~v7T&!-{A`%^-^)zW0RT`9fvA*KVQ5#eQl^(A$I$KX9pub znX7|Qvt3E7?xrac@=50&y=&yd;}VGch&wnYnrvoM+$ixnENdelo+E?vMh<%C2R!4arF{dV zc)}fC#!WbqvNLV^gXx~f(z85e@KeUK+r7)Q5nJ1Qz=y*z1E@@W9H;ZKGa#9GbA+hvL+S*~D=Z0Ry72sqeqRJREwe%N)yfxtngp*s$ z9SCBqyuNujVUy7G_O1iP79I@NH8E|jLXyiE*c~`<4?G`A8f^_Eu5(@m)h_&d;-RL% zo?KF^Y>B?`R3Pp>c_XO&Gv2r*-)dV4s)*3CZAd)cTsz z_(AZ$!u|_o@d859TsoDB+>OB;43E<}`i_;>{94wo^oJI>s z=~*SMkh!n1^Y@1rU4rsktzA%wN6NsE+4RS!UjG1xdfC@+)>|0#_(pukT$9H`)AO!Z zNZ04quVvE}Tg@DY!Sv{RXO1f4O4@bgZ#1DlS_PeLHurku{%*`me@M626;dqututTPqo4xR1+TFfcMs@?SW>#sNKO zj5RJPC86ay&%`ZC!p$tShc6ly+%b=s5)R^d80-df?O#Ux2>6j_;;Dy+{9zbdl`65x zv?{nirw6CyUJa~xQhO;HH-wOI*(-q9J$>z^S;3PrSRZp3kn4yWs02cdj6@VA7gUliWLv0o|{Nm0oF zk%B^W&%QXUFO1$a_?4+@aoTun$aMT}eSk4?t=qp$V0{f$@b8SK)htGlsM@?&5C953 z;LHK%AdHN6%{4W%E0x;l`UBw?io8bGcQ*?&z9do+mkJI!Wg|EzfLFFN-oC2U{7HS{ z8+7w+THV!1WhZt><0FBOrF>!GkBB-~hh|G@K17UX3NkwMW9#o;mEkXoBgOtBmcrh3 z@}kaBcx40B_suRw^+iQl-JbsdVW#RA+8nZ2Cd;E6CvhS|5g5gtoFr ztT&l7&Rxziv9rkN2kBnlfALz=!f-McS8_)g=kl#j32RoqGJxtV0weR^2b_2MRxLE{ z%eJS-UuV^P8{9}?YDO9U;)(E*d8tTZ)xIfB|JYGhPRarcOpT( zUj$(D-?+g1tD)2{v>g&jFD&3kyNwE~5s$+@pUS)zM}D-kyQ9+mU9t>Md^172${5p7pO9Bg7!9Y-V& zPfGiT!oEK6exabjJ&fp7smmPTGLM_DEzeRo&3tqFMNets{W4n(0Rmjg$%(prsN0AH zbPdyXig#y=c;CeO&XcZr`U{Z>+H)AlDtJ5$@DG1_`ZqxMyP@kkEu?-UV{NEi zWfmS-Hr}i~vB@W)uaxxNc54W%{4c8&XL5+=Jr5ZprvQ4_dv~GP>3G)wdzFEIcDMlL zvGu?`=v40Rjg#(sjgs5VG1L{Zq>wYy9gSyrg7(TcTZ^X1&H+6K_*azQ{6N$$G~}>` z+sm79z+Q8XeFr18dUU=6)iv)6!>wM-V_3*909>~?JhphpIpT>Wu-jb^LGWgYrvfzy z(OY`*dxbpl_}5`PdR@fp4Z{Uk&QDRu^{<)W__JrCYYpMFh1FIyXynfXk;q}&wmIgs zw67X3inS^9OI0#Uw>%ts62SU)$I_oI)}%@&y*o)R$>)sreuGgYp^e$ z<2+zzsTu2C2aB{%i4gojeM`f(Od?rPx0eDr0002TAcKHi1i%-F7@=AC&ev&JI4G;aS&y z3YyPb7cJ!g>_|{R34_iL1n0LE?)t8wq-qRg(_|PbSx*G}bgzuOQ{&A?O7SfAD*Lyw z*zb^62MnjSLFh+gQ0Ds`5uJ~F@pRWVnp!oxfD;)l{KwXv;6EMc38=+wHtoljMeC0E z?Orvj_?GtbOok0oMe=1p(E_+;J%}Ty>GZA(L$|*g#`qwT=&NDT6tU@&008HKS~*=< zu3PGl*4;N;(lsa)>4YatE`DqQ&vVkY@4QtWiDEaht03ix=DtF^@$IjI5;rKY?^XFh z0|fOSfv=T*DEw^Iyj`t8nkJ$Ryk9!3GBy?S%N!61#{(mdeQH%bGzwJPXVX6w{wCZ8 zoapkFo<_iOxyF0rzqiu7p4V6L&9$_et;O4j_Aqr;$#COo1v+EfwO9CaePiN?3v2T) z+9F^BH{LlJ74$6M4m3XyMH=18@WO!S%OzX!$ET%Ji!IG0cz45}8(C@h;!Q)#5@%rK zZprDv>7G8d^*4!rA?bGZR?*%Kg5ddM0FW4r;GS?WI-2?SQurmOcyGiqYC1Fhv0Mie zAD3=1l^~wokNG}v<85-{=@#C`>10@3GX;E?1K4^RO)iDet9E@e9-*TmNXalAPJhO- zq=!Peoo_FGaCif^)Yr{E8NStZi@{@Xjkf`U^T-FDy{qaAZwr5GX=cVbn%&BMk_)?7$4j^OvmKD~R_;pc-q zAA9ir;LUS=HSNTX9i6~M3^9#}yaC4`KZN>5v3l8>;v!fMF}2-)UAeAV z%E!>;@zu6^1;j^^PvczttL3YJHj~%Zwy#6T!(qVb{{Yvl>0?J`guYotGw4it12PPg zfyO_rHb6-EfeTg@8Z+g&Lw1g9AF=~fJ0Y$ep; zlCwcY%DLU_d7--+D_l=BhB-VA^<{#}ft!zU=}OR{i|s*n?%*$T?~hNdK$}1+M_MB; zq)TwZ#L5$u^gqs(6^UYTx3{e#1q#K!UwW;1aTXR8<3Gjg^{QHx6@AK2u!6pa{PRr! zMspr;sI9aa(Vt{_IHk}Z z0b6o?(ZH<*nE6{u@!WyyO>Q-{h~~Ws{;X%~RaW<7F_iO;Jt|9~2v8H2Kc!|&%3En1 zf$3SzE!eD2B;c;@r_!WZUxf;J>+M-vOA-egMrp?J;Uj-aaFCnmO)Sw{=dSL?s2ldV zIqA2Gp5}O^ZQu>R)}d&lBY0k%)7*%wl|0vt8+XbNtyG42q&eNiL#ab?FxtN=`ukN| zT*8|PIPE~=y_vTpj*%6OvU~c}c2PKpysSBw-OPm^I&C2b{gGw@2xbJNV z=9M-xbYaupv2CY$H;EG%`?&tK1g$GEFY8(`K=DQ!fu7WzLq!X_kPDe&VG$dZxW{^$ z>7#U5lpJ~ri6v!`#Osm=1arky-!}gMIwOEPR7DxMwXp@kfU=}}m5)sS0G^db)=Q&y z(VTfp_sR9_J?mCSFN}b#^r#)KHURvn^sa>s4Iu1IAYU{E&poQN^4>IoVO#|tc-6B# zti@W@xKYXIe=4r;IW4dj3ywu6O_e>#q_(_pmn|ZVqXUkEsp;0Cp5bPIpltEhpnI8} zL@Y2*a(ES!JI`$q@-SHTJbtwr+QyNOL|*$U$8Y9mIq6YupU4i;0LSsgG7q%6VR`}h z3YH!ISy`BXeQMOZ30bo`?%oE$hbh3dtCvW-9UGfMUfGRs0U2IadtWikTIgae}`eLRT z*}XZz=~U*1&f3{b?Sj0LKfq?WLjKXqKTONmC)N=X}2f>w$=ny#!kexTX^Ewv9SBN zBi5sV-Dbqi@-IyKQ!ZyRNLB^L-Z}QDV)=_RWO0g#RDDGzUW)1ga5j=b&eQ3NyLE9S zz${oijE_phO{*I;eb41m+uT7A0gf}=@l^-Spho*MR##=jVDr<8(6+XXMi(WIEuZP_ zSyA0vo3K$y#~Jj`de^vrA}#87l6zLMc0z<~$nMr8K4fE`Vf|{1uN0^jtlUizgcdc2 za}wMQmc*$vp!F+Tn)@LtijABeap_lO)JofZniM%5YnqPTtlmE;G1t@c6? zo)rH8D#ecKNM>UkJJgJFa69#_Tegbj6%opnIXL4Z(EC&4J7O{I;+&(Q8!EE*dEIx7{@Bd0ddH z*xV|4Uvmy^NX&{5%EtfRFbqd`G&0T@M(w{d0dVV!z>CJGP&l@^ouAG+EF_nhdM6y~D z_i@zJvUyNMs?ElfBkihPRwd5}ohg!PR_dGP z`Ek;nt4B8w=kA>1xK9w>O!`EyTK?|q8)GDN;PcNJ6{RdYmWL&2S)G&)m(mAE104QU zeB8$OKV?QcI`ix6iurTlm7m1Re-K{}5M7qEMlK#rq{{dh+7x_>25>m%wkzqYD6MZH zE+q2UW1gq-t!rUiGzele7f`jhj^G&N9$4v)`R!HWvHMyUxdk?#p{*$5W^knBuN&R=Xek0( zwYf@ti;}0Al1AVUYJtQM+p%OI`koCybvp|Ky6MJG1D^Gjs^3R(4(MhInfZz1@T;Xx zQkH}|i>Y0;R7n8j^WU|2&+Q+iX#OeqMXy=vG0QYY)#MSv33qt@bX)*Q%K^aW-n}99 zjT$#wDJDZKofjh`9)qnKw7NRjoj&g2M3aJ4Zwf}<=O>IGTJ|#N)u)Jrxn7MNc)HP* zHx$q0gGto2FAQHlhBVow7Xn@KFWhM5JoB8826`V}mHjRL!(S2K$KMMdRk|vdmWDVk z0yYB3Q#(Q)iZQ_-PSyD5`)&9i!QTqLCf#;O<$6TCUYD{+yW z1B{wKv7hauqx?4UP34ZYXFS$Z+Bl9&1r0H9;G(c{p_cRX`Aeku67{t7AaZ(PtK z9}M(Zw7cLpG?#7mkV5c6rq%g-l6eR5ubj0Hj$gFD#Z4qzYd$A+ohLHNu)rh10|66Y z8v}J93}kxO;=l0?D@#eW6X_Ol7pza{Csy(HkES{-*9c6x$IPKrfsz=K0^oY}ub%!Q z{@fo3{ut>OZQ^UuCFBW}hT9I)pG3zUc+VhnlYndRZ^m91@pp@_mr&I1udW|EBoa*Q zfsa2hKDg^$9iPH&bHq?vq_IN3+41dAa^M1U!(;R7>t4=Z;cgzBl!1xuc&CNe`TRc_R^`J&T+Z2gOEWb)sF-&FnH{1>|w*%UKOcwrR%Tecr`II zmfD|~dN09m75J9x%JD7pUdW^UWFWRjxMdgv>GVCT=nsaUv0j_6c&geBJ5RT^kVs~^ zk}&eiAY31qoZ~$)o->8$1%9%8ApMa%Q{pF%=fyVhX*R5+%uwQRol!;n&H(4H z75XLNuZF${@Ftj+S}l}Ng+y0mP#Q*12KGHm91QdHt~~3+Y&Hq|IuD*pw#4A_iuLts z$o$msH|!g(YIcz~i0-A+(lUR08$~M+Ige>zNF#uEFK!Kffp`buPlmh`0$EzbWHrpo(4UIdW%f(+Oo&M9lH@!AiCKHn=j1ZWLM+)=N;x4)ZsD%s zVzy&%00VDtYN>O49rr}12ZQZZWVsW?`?0k3%|?wmh(xG9Vayza&59e(y`%s z5B{}gi_%8cLNHHJ`tjO^btPj!c7e&E(8{6V86&CsRjU-{SQl3^MaqJ{ovI0>Ayy?^ z0n@+dQL(w24T<}(y-#yl5#CBgH|O--;NZwk9rEoRilTMqTqc7RMZO zQbhrd6Vwi-rBKjDZeSc^ob{^aMY*At(#ZhWc?v4I^ZdZEsUiB2{{Yvk(1bA=BvM(w zhJqPD3NcB^GT&mi?-BDJanSz&_3CJCjPl_Q0OZwpt*%x_Xvz79HJ`rz6p|JD*!g+I zMUk6|X4A$};Kmy&Kb=6A93HgbtZz;T zc?WS-%Pu?A_DqmumBAp7&a*;ED;0#58P01$X#W7w)<(|tBLI8U)LNA$lPy}v>cB?4 zbpHVB(e@jA$xofZQ^CzdlTM1N7wc1nWhY?!-7`;Z2~oI{Tg0#AAv;s9JJc-ptsrf` zbJy0BabMhj7I06cGHVu+JSI8onsAp=k6 z?Y9)*`_;shZQCfwIUc=gc|b)80M2Rpnzg2bP+K6|ji;|p{{UK&;h21q41vu?>%45q z1$oCD(BT+BT3`r$xfsVZMJC`?ILEK0G_p2g3(f~4v8u^!bsT0u ze(z)7>qA`#nzn_BE|j;F0XXB4N`rFYhgykbVuD?{{{R}A*62wmmRA(5(HcSMTaRKX zMm;)u)o6-^Z!~o8^ryT{BW@=Eezjsa)rQ$e2AWnB(VI9TAsUV|lb)o1g+3{B5%UHY zpg#3#^4=|=FBqytq;wk-h3Q3w6`^9*-BnfQJKYb;PXq(jrnr_@xC@-99k|6%^CpQm zOfbi{TAJSQ%H<`(k=lmsp*s&gUh-ceq5Dg;m;-^psOAwWo_VPxpZ98{a60-^Qs_JP z7|!tn&Otoq*0lV_mKL6H7=fO9)>1_c)2Rmp@sC>6RVaSW*}xb+)C0AJj_7O|U7U99 zRhR9LCzc$lvCc(wtr1g6C*zLai87VIWfQ{8;1KT*}v+NYOW{_YNHL3bKQhM-{zw?lt!uNngb7y)IL%aK?pw8riV{^uIT`LMu!cBWB=Aj2-d_H^ds0aIe)t#|N6Aiy{(G z?Hu6NwCqFy6;3=;mV~1&NPO5$z1S}p#uT2IIsCK#0N1PW-ZjKa3a-$+0nk*ikk0=AAtVfg zQ%5vt79gPD{{WoT-=VZ%Dj`@_GxFo6D!UbhPVD5GvwRRp6+s91t2$?m2mpsG>qA-* z$Tkr0NL=zwZihmQWEdb+aGPnBXFyf@ZO7|Y3h^%QQS143sU|y{%f}1caa4i1v@EJ{UxDBAsc~uO5RRkP zO@X6-7??ow!i5r8PDfX`LhRg3%7ScL!FHrQ`{L*omW3}ay@8h z;PXki4Y#QRv?H()$C*FYcgJd{si2B9lXv>VkN*H&I7!?s(0!^0eZXLL_NH7JMiN1S zPg;x!l{~%2BfUj3v|D!^_W;tIw6i9i(-X*@8xNd;(x-~txDFF-OKmK-j#5B!26I=L z?%{2oSw#R4dV`;Ohc#=Ob2BnkDKJD_^)4%*?o+f>FSl`A_cduF zc;-G?%J(&2?AHo+X9U!(9D!FS1HCB6p%Rj?k=(7MjpPrP9DQnt)gIzPn8qqeS}=?h z9D0u3vx=!}rviM)j!EYPaw#>?)*EPEjy<50oaaAA)STxj8MfrZ5MkH3xfznNI5JM~ljcbnBj!uwm3Q zb?Hq=1aUNJ_q!8U3R^BVh6fyR#%Z-}N~akQNTcNL$F&4NA89yZ2hfVIENv=hpk93{ z7eORAnXtzMZT|oog!&tD=v_;xBbx&oSEsFBTbp(H;TuOYbgIn?&XNWLR zKjDT!iHD^rg(M z7DO%PG`ol@*{44D0I~UnKH=_GaK%Q!`O^H-G4h5t4l_8TtN zJiqGz;8me(F+>Ny=qX~i-8i~#gVwd>1TW8=w;&23E`-VGVn~+|p$Ia|>FH70O*P3` zK)^f^TVYDZcl0~}IWqUo&d} z8?L0bD5T&jsb%vRl1JT5%ss&CUa4Ty+{RO3=a6g5{xZQ}-T>8Mxxz;syE_5~-;i$S zJarW@pF@Wj{nmdz{xG=GV)0a_`dl&Syx@8;`ulp;Ev$NUnZAM5!afQfc^}2=)AO&9 z{wRDv@jkWjYU*89V7E6;^8J|6WP`sUSx@FLrId-G}APe3PZ=cb*x7 zZDQW+rPy;hQNUA=y14b|PyYa_xofYBdZ&wSQ0ud|?txT?A0R!>M^@wLF-=l#_Ck#| zkE`@c!+Q$eD8jfK2pzra(V~JGtn$l(!)p`ATKR9neml6jj9A)Rxcfc^NXQ`b#ybk` z=J=I&1d~_=^5kGQ2H;?f23~n1sQ0Pl&_!R0ejC;Gd;2?$G1w$0Y>^TbFi+nDsW|ui zE35E-hvwD-+Uu-DP%u%DK43YRrp{2=5bUu??h!ahbjs^w?xE(?N0QFac>yTUNa6S7%ktEJp zLX6~};y&m90M}gxnD-ifodu2K;3@?<;F3C%pL+7&97(I4Ry$ZDF9WiLJnhN#$I#T% zu-B2TXr^h`V~C4`gX{G5uV2x{q%o)@6B!t8q#vzt8lAPRzlCPIVu|($i;NCe9dLdB z02=YH1pGnQ?=?nA+|3NH!eDL+cmy1DT2o;*&!qL3w2fZoOIz7hOM`)qanO(t(!L^# z;FpXw4~w_guq<+EcJld=?RDA!0IAqMV8HYk1FyAvZ;G@(8ZN7McY6yhrv@1jfenxW z!2848U<~KB4Ku->Jw620Bhu%LeV*X?a}0dS-9uv|@f4nbyCaJ6{{X=)TU+}+p`o2P@C;=bU1`(H&?N?bwT^Irw9(f1Svz*vAZFoDv_xg638{NaSvMCFYagm;Jo_iYk z>*JTh`#ZIJ`$tGzF!PuAi)VrKHT0d9zkg4WtHQFqpdq6i=Xl^a9S9#Vt`|YPzqPraOtH4XmQOM*rv*`X`P-{D ze@gnR#~Ln?tz3PlRAVcmZ3RvV!R~wi0EK+j;tw5Y{uk7u(c-vRn{bTm`JFO)kIPRw~U7 z(KcDpGEy?9scfE4*QI*r!re1XgTvOc$r^p7-LR|3s-#Av@1A@KvvqF;RT zv1NZae6GDe&OWt~;X55qz}_KvG|5fXoXoO>IsMxXxcY*6OKj*J^3E>=X$4rHQyWRV*2Gi%9DjI z-9}VnBxkNT9<}Tq6Y%|yg>40eoXo7Gd5$>T!>5ngzhc$ZC=eA22$RCU@9KZiUI zTDkEDQ?T%-hFafJf$ZQh`D(x%sUxO)`_#r=h=Q^6UWel?O*~R3xs^)0I)T6UV0tO& zKvTG`P-gYWbG#- zAY-?$KD(q?f5Jhg#i?50Yz6-S-3y-GdW;Iu%R=0uv^Vq*g_3D{ygKc?@w$c#5QCKj z=Z@LOAB}p~#7_`kXg(9V)^xSqJQ05F4|XR5j`+@T-ngAZSH1B5gqp3}gS-xdqjne^ z4D`=Rp{Dq)JYjCOib_iu7zKF%9JhYsj(S#dS0`4^H^Uzj=G81+_2y}B5kXSRg(n>{ zGsbJpqw$}JTg6k2I^E>6izT;$y>ZVx5uTo)SGrvI6F`bdZkvaYa0%c8?cDzWD#(lb zBShP#-wbjO%%=+?7bp8l8^&ushFmcQUjD{EG}(qi)Fl<$%M z0NNh?gR9&uD)+U2dk;(a)K^~YL{{Twk{vPNM>Aor#a?9pMj#v!#Bcb&CSC}=#VqEgOheO)D7h3WB^Itxf;rH`A=LnMRAmkCs`i$|< zYWhFIz9pL07#C0j&cFv~;GA-OxulkH?hH%V);E#1a-kz1< z-U9G!UJ$vPWX1f~Bm>cT_Um7NUuvy)Way_KDI-3(;=TvC)O=ige$nbS?G>k(b1xeh zkC=j^=2h$uT=vH_)vUy{K8eya%c&hTWCcQW9sd9-?T?A#P1B zqH0=PntH96Qh;C|Y;-l`J~#0{hpe?Y{{XcdB#^0eAQExV;~$azX+>W`rF(2|_>0CC zFiRGnDGFE;$BY0wAFX(Gn)nk}*37ZMrs6qDt}=ie<;=Efy@y4yB>Mtx)GeK_33~V?fk}`NF+N);Zm;V3>MVH&gmn@N$lLZ{G=R9P8DyQ)8#Bq4u-*vJxHq7r(K*{@~C)Wq* zisUVR7HU>LGy7Hb%gR-Yq)q_F4na~q4tkI2Rm`kHO(xGqzVPgqwsPSd`J4ctow@%2 zIXSN*(!49<>wQBKEM@OeA4^FCZdH4Nj zrv&#KiR`}%J|$XsrboB1XP1rAs2_7ZyNvhaHR^sX&~9&Z!*sEe8g)1)zo6~?E9QUM z-@}^khA#p0ppwx`ZbE}9-L|*h=z0^!BavTY_=j7tmr9>af%$YJjycC2Gv2Da7e;3% zt2_fq@qMm|cBv$YFu_4$0LeH5B!QnnUZtq`w@%bFJBZ?uTh5G*dZ+`Ot$dNL_&(Op z#S*MVXFHZppOq}w>OEA7>3l=sU0+qS`yQAKk0Itf;2tsaA5U7&-3wN=>{ZabF{@o_ zk?N3M?-4%c9I~+Kl5#mCxUWmOhU(@-n$3ZS?z*12^&I|{$!Y%p4|P8QS~TMM=NA!$ zc!&y!Mey73s<3{M_{YYv->6 z{7vz!I-Rl~Huyy0Biv3=TOj4eMsRp1B=oKS0NP)~3E}?$3)|jmGs?Ga>@A`ySxV%2 zfb_uI->qvHtLRnb9S^;{7x4o}@nw_>UlO)AfC`esf>+od{-2L~y3y}+S#-JB z5h`JmsmGxds#E2D>)7Y1PhWKWShx6Z@iO;SOREc3HdhWF8CkHnUc{0}=eg_KHR^se z@TRTdofh60Rn6I4%P_~z7-5tT#A6(a`)gIwr_+*ItkGk%Q@xiN&M}rFsLnaXa2HZo zc#YzFouo!`p|RBU{Kvg-K4~M;!(ybR?;ror`$9JHSC2H*)$QR}nMPO~sMjXHrM3UWz{uV)oowoSetPw%ZxJg80rt#+l@~dYBpXUvzTdQFOZ}FJ79X?*Mxj7 z{ibewQQ~o@Tty-(BBp$&Og=#A$lzyjCy#3U`9|6^<|(?E(mZw>+*m#4*5iGh;Gsy0zX>2NE_=R-Z zSHYcX_ePLvB^~BDU|(?E>Fhnf3hC`4kHfZ+!zz*wMjZbD`s$n?5_O##{7E&sm=JE< zbI&-&I%brXr$dTp^;;hTT6kkhQ)U)4LC+Y*IsSED!(J?XWsBIbZKG&EkFR?24;J{x z#=bMtUh7K^ns(46w*V^wq>|k-M`O-7&MV2j9{9!^e-<{B&*hlT*Jog(Cl~;dIp?RR zHJr3WxTLo}`_lFOH&dEDF5+Y6gSDARCnL31_|1K9pm}$Cs=Qten=Dm-{ng*4qcrtAY@yfKJP8eldYX--!IKcgCsoch!zURe% z4RwuUUGaQAY>Kw(tYlKyb;m*n@pFOOgI@FF-?Uok5*x#;$o}MmZp3ft+*nuR$8+oRUf=oY$ayJkUHZ;jLy{^oPuuhD#nvH5Z5eAm~35^=K@7IT(@_LxxPO zYmA=bJDdBY{{T$e_=Dm-KjBrZQb~rEZOj0{BX4|vPW0Mh*2k!8zZxub2#=bDLBfC+ zlEbeV;Cs`oJW@PsZyuzF%MPKy&)vZ3{{YvooMgJV_>rR9c&foX(`gV*da{x$v!(&|>6fNS~BtIT$0Vp8mv) zS6TZw_*YuJ@Y3AtQme{0m2IFZt2fHL0iFl+&3vWtMr}Vw@rm=%e5uQ2VgZXg9PT&( z=hxrXzSr<)iuA9C9}cY}M8)OIF_Xa{$jgz*-~|Jxa%pX#C2di~d`s}`pAUEHa!5tH zvW~eqCkyyjm|6T_ippXP;njh`3^1g6j@4`9CyoCA;WqHhwikq(phwLg7)3b&{lVm8 z^RJn79}H?bwWC{T>Yif^9G|>#(;ym2X>(YwblmYzjXo-TLh+Jm9v((*C1GIq3ntK> zXAW_WPYM(Rk_qFCk4f;Kz!%kY*)C$25~N&%@{QxBKD~M3y;I>Y!i$dxXhn57gqJfD zB&Rc^Z@gm5_zwn{3jNlrpM*kD3H#-G1>v^(EAM3RH(X{%1t{X^S)mWc=uA7 zd^(m>m3A?!6d_w3a(fT1Gha>o82z8TE8*Qmb_0O(-MR-4tbiGH!Gb2j!c_=b`zPapigI7*(WHj4apG==8P7Kfh zSDYTX_B7jjtu|{H7a>u}+;QuQ`E~qb;vF{1I41^7Z~^0iz%7B)=e2j%y4~&Nlrl>b zD>xi4PI%|irKE*Zl*ssjVXJtFB(>A7O}tSIss_rlV*}GY= zNm?>I=OpD7Sd0bW^N!sQQTAT9;co%j_(b@57>j6B2(sC5%fj+`C+pXm^M4O&R(j2v zHIO@i#&O8cIIfcG;hv|dMyv^6;||?DJ@HVMx{5cxrwibVX}lF3^xCw_(9GaKok>7C zwgAT`74s*>NHw1k_~9PMQ#sI?{9zpGckMqqvHbp2TwLaYN*Tk_c%xfjW z$|6ON%SOmR00SU&Bzo7-7kb8rtm$Fyp;^l(D&vkvPJ379-+(+ZdEjk!;ZZ#J-PzAL@C(R8&a)=lNetfg`3w4S1+N9`GVHPG~Z6T;eTH>~<*RPMn9 z{y(L8f5uM=c!JjEEkXqk1B@J=cV~cq4xHDZcrts-9bQJdUO~p!Jr5l{dRL+Nm>qK5 zLij~qdSvm)se>geYJBtI{{V%WcZ~ci47!w?4&{@k2*)QL=clGUYQ@fvqiDA;q-hcC zi2y8flFWMZ^siC7@dbs2xU!BeIvu!C=zf*+{=YW8sQ8iWyftTWA|flafPAAl00ul0 z!N>@np8K+{q=4 zx{SU-$RnKX02a?320xqEVCG1Z#VMiO_?ZpaSsm2;i|%+Ne@gn#;dh06Jz?QdJOzxF z>IB=!KQm;m(b;ehuQ}$wJv?J|J&1={($(7J$guzvvk{z}ft+wF?+<|@E4w)(*Z0J2 z<9Q}|M$`+O4X$`9G7D$l(-oYwElD#=U-0#=p{XlEK2h5|AFX`v`$GIbwVK-7RbEM81dJT+^N!P>Ok<{d@#|kkY0zj;zuT;#+E5*?>I0}aBzM5bAC-8Ii2g9^ zHhwaPPLAR21InqmFcI=b9oYW>2IoX$a+SU_&8ZPBY0EC$DPxm*CfiqWEuZ z_FGxxk_J^CT!a(yj1GJKYtwbV9SgU6Yk4-6?cWuQn%$a4$HzY$z8q=VcB1;ujLg^5 zzwdr^2%s-HOcvb79Onb^uarI<>%Jsk7flA7g>E32jF3k4=yH3H>0hD#I@8SB9NLjm z(khl`!6yJ5{yb*BIq(Io#J)3^RkvM{lwpi~t}-#WpW^OEV_PbU*0@T1sQO=1I+RHa zj>;X>1CQtJUYp>13ynicpY0zgL(6?fIs7ZaWbt+X0QSb)h}9v1HYQiEsmbq?UeTlY zx+_l(yXs?YypfZfec*Tlo}#dvUG7ymBGflGGOV&h43>$}_VJ$BKb}2n#C&lVhjn{} zwYzm^`@rL%J;ASf(mZixdEuLjjXZ39tO)LNiyJmY3o97~mHVsh_4cls zPNk)~5?Wt$wXFgkW4InQqOE#0t`d3QZC#PHo+>668#xk+6ZM$7yx zK>&}TuZ;W|@ONC%0UFKg+{V8!GDWgN-ST%H4?JUv`d7mKE^F)7({GT6hX5SpV2=E7 zeT{V9Ce`%&8#5*G8+}heO=6QpLNPvFgT?k98SztS_G$Kug#bFLk`x|7u^kB$7YSWffVh>Ma-y5j`nZXf-wFf-D=P1c{rQFzAd#P;^# z;hyKriqTIYJqZKxZ&H0LroZHN#PAeO6ZNxzt@{azsjTCJY`HFdN^|d6f<74s- zQBU2r$kh7t%~T?Lyvo)p%s+T#!Ol7Ms^GMe2W2IFs?Ei@18^jh!KeJNjp{%BblhFa zO_ltp!nDcqk3;KBx3agHi@)CKpRG@Ib>;x7xb>wK6ay;YV??p01P#(gRB_6Hm6RlM`B7b-S{>57U-l2{CP1OVJro8^s! zQheQdRXHra-6Dp_P;zap|Gu-26th&_a+#pSfNIQoBv3$_>H&Y7){i1dllcj8cqj zg>4H4=XAek&Pe1RK~*P|89b!mo}<&=uO+%jf%Ar1p#Dk_(k@tMuUfeIl<&$xnFN?) zz!gqqH%duU!NyM+sg`D0cSZ?O&>m0YQeA3F&Y+AF#s+z;+gBzn^&*NeBMN$oaJ!i# zF%Oguc%dTmzXKx~-K3Wx>1_-3v*lB7N@<2yk<>dK$r9YB#uRc*o1@@9FPZ>|1)8 zpuo;qvH;*_s}MwhL^7;-2hy!HP|Sl3$>yr8Lw+O46;4*rX?GtW5$=lKGnE+}@J&Rw z6GI=9AmceFzvEU`=vs!81duU`$C~K6mSw;^)8=5)=vtcEYk*!NF<4VYIG4+EcQ0DD z*Cr4IdFHLH#8amC8D$vB{VF+;9IRN(mayhVA4;Voys$eE4tjPKVi`@u`x}VRWVfwa zyD&ooNt}`iP%Ew!FRCHQEhJ@HmW6z$IX&=dytYO;P0Hl;>(ZHIQ_Az*wvp7DTZ`3H zz&StClcFV7I}2$cF>jE3r@wPf^DY}cNZy@DC!qRPYHEg?fcOx zRbY(+g>cM%fYfaSiy;$Wmi4CHO$F>8QZ_f>=h~@0p$44DCvlhIcN}Dn**?CsKUbgfzqoV6!7W*&Tg|q3P@X!Pj@sMHjhf+u2I9FZpB-s2T%A0( zlvzu$VSu1=a(V;oYsY>ee$!tH{vGKJtoWN-wY0KLi{|d%x!H=UfTWX?-=OM90Ghg3 z3{2#eI&I&`xhqtAERVVxvEB1JR>I%A? zr|fcwVSAf-ad5z8imK;ogYtsMp18$%w~asGtX~AIMa{08CH2J4!7ZYAe3dR#f39Lq z#1Gu#Bk{-CVLUd?t0gGWe{(p0w-U9?~ug{-|{{Xia?FaFn zRF_Wi9>05a3n@1dM&3e5G6-KSKZOrWd*|Eha=!%g8tqEGp&vc|S_? z<4qe}vnyum#5qzsh90%hn-#j089rc~j^9IH&oBHF+v4BEMfi!J_qx5;Ypn@kfnu1-=Opt|O?w;<<*4Vb2;!8lV}aWhn(-*R zS6AAg3b`fABt?(Sj+pO?&zAZca}nIwnbRbYr1z-O%%o(30a3v9{{RYz-AwyYf$5&T zKD9XAGvuABqbKmFNunF>R{K1nQcE115u`Iz;^LuqUy zat~iaRiiF1LV09z6ekD0SW~rpz1UOR-kz5JQiq+@fNtC$rYeS^a2iIE*lhsh=bE*( zi4t~!q%3}B2b_;eUotDTA;tjX6&9N~IVv&_IrXcq!DUt>3!ZUV%E(B`eLw8-3zd+N zMgsO8^##`x$v0^G}-G z1oHqR1M{cNW@4dtp#-{+n>PD1vyPRL5^|-8AfB168woc#iBvEL<|d*oCDqTA7XTb! zbO+v(W{Ni0n#Sxwa*;?laDPsUWDIlP^RLbyjNi0cL-7>&H^Xh^jVX`X7#uXSj;K8qc;`7M+pp;FiR^saa}}w> z4Dfm%t$sl2{{XR{#48_&7kbU1Yr9G2`&4p?5HNDtXv&f>N3RM-bI%p^+$iv>q`tEC z>2u7+#h!~N$NvC`R~Au4XQh}h8xqJ%nSC4haG-s2`GH?R{i!u?0%%e<#QBwkNL$QN z``k19xxov8$QT^pbit^#KZhT*b>@_Gtrx@aylTZfwz!QYI2jN3w(aOKocnjL%>Mw| zU*YHNU#9C4Y1)>JG+K4MMWqo&k`03lR63Kp89WS;`5OIyB;mXsVLxXkm)v-D@e-%5 z=jwiy`+58;iKDr{yV>Do_;?j&eq zSWKXjI2(6&QPTpwoJWPZTHU|EME5pVGDzHTM=QYGeTZIb@@K)`1k!Ym4#}l8ubFc= z%!PMu1#^M`>DQcAc8Q~DT21Z6ln}U=ZY3oA%DMD7?nef^+TI!E&)`iC8O=r5{dKwh zt$r3>Ivp=l0VJ2o1><Hrbit|<6c+cOARyP74f>W)BN*j%8?_- z`@oMNq30N`z; zFY`I7X4Mni_O<=0{9UZ*5nbQ1m3**Wm~koUI-H{N0sjCa=ieOsY53RTO;QnYsoz*b z0tbpX34vuma?Ef>_AGIdc&_yL1IJnyhsL3IpidpL`B|8uD&Bb9g?o^4G6zG!!LOyf z8~Z%?_r^LR>N@3|cJNAyV&2=G!wi-ykCOwcwhuisTg!(s{1WGsBNgYV%N%`Lj?ue6 zDK*RQjh-g)4xQpHZ&%f&3vnYr?JR&rk^>d#<#Ypr0UxKi>Kb>A=kS=)p}L-Al0}x` zB$edzOneNMB>o*goqmO%*yrL+&5({4@~vC~ckJ9odHDlm4&WYZv-nN>6!^yTTKh+g zW{NE_2Od*pnDrki0|z4nd!Ip{a)xu3LN}dQ>DjNy=Bo@tcIA4Xgg>;;!hKqQhgx;T z*=Y*MCmTjgDymeYZau^2kLh0|{6E&Mejne#KB+3kO9Q<*ZJ)$CcO9$xko~Ry0Aarl zc#Gh6v88Cx8@*Q54b7~Q&E*7?0=)*J~*xw4i7wZ;w^WJGXcE)7HApqP@IrQY$;BWjA{{Z6-rQz?5_dX5R zr)$e^6fW6NjnXXW364d^Fr$!1OdbIsSM~kyuS(P6)9vEN&2E7>{&n~_8}Xu}i%{&(J+=X)pEML^{=IT1^XFzaCl5x z+}u1jOrRu@y1J-6*fRXY@JQph2EN17p+=9(m2eNJuEyRZh94+=pmfE2J|n~&eBtcl zD|#M;a+-I$M~C=d_G0*F;cY%!YkOa`q|*sqE_TW=1`6P=HlCyoIP~l8_VA^gdm;fy z1880_IsiWkwPz~eseYYvO`cRl4UR`cUn`Bx>sNQHCeHdeYH(iaBwbCcqc1Nm-k;X9 zXS$wJWS2biRIXJn9KuQ3;~5=AT#aXvKPFYdPzK@9{{Wv#^7)&0Z0e1zv1R8;5FuQs z108C(h1LdD8%IU%)H2-p_ZuzO?)7YSrHlHExHEO&Sh(~8M4y*DEBr}GN3;d9ofefH9+*^ovlAiPk-<8t@SItk;w zxbn{!>6)%VD-p``n}p*idr%VMS8kg@>F6s;U@hUqLoL{vs97RxJ0F|x0aGbh(InX- zKJZlZ=~Uzw5h{tfAdG>?#(5u=S}2PVSY#zh&O6n7%mIy$Q%(|FvZRY?ZFpdk`W{mU z3*4Vdp&g{2QJPQU=~mKPn3*GvOh^1c{{T9kb2%9;@{Ho5P4qIFw#IV8RSastZt0rI zp331_791AO%ulDLJxys8GRg@U1CV-Vql}=Kv$sCIXy>u5H+>O3wY+Mw=aXVFVGv2IC z9PqNrydK%+wP~7C-u5iap_oLfRDqND(^Bk2<#2mqpJy!17U?m(_8y+}&)r7*q{BC+ zIK^Xrg-#^VB(u&o3?BZ%oj%BZUZhh}U;_j@NfiQ2uNz9kaU5cm^&(4`Q${G!Kp4q9 zflOr?EKeYG9X_>~E+-z`=N^@NcH!pcfy(6ouaZdM_N#3Tq$sn-q)0eCo=>ehTayEa zagTb3&CGk-@v61JNXM4uUQT-+)g*Js&R#|vSC9okG_aIMQcAhTY3m5JO{KT)_3cw* zNVQazyfko0S8Ko=1*rk+UOjPfj{h<LGX0o> zs=aVJaZ)9?v5=rRfDQp9^Xs4KQos}j@)wV%tv*$K2~2QnTWJz9It~w^^`T~V4hcUo zIX&vM!9s7CbUgZ0ka<%KMtX5lx$_k zNS(_v?xl^yOhDjzRL%AzNbFh-JzAGhL383$0n0q#UxK@E+b?B4V)jX zR=B@NbIwkCQ{q-u2)V~o-km+Ap(V)V{#m66+fgg^DB91L^CcTbdexb(q`FbHfKTUH zvl667I{xHi1b5F`(Y3I(nRj#Yjw!U(teCdlnNBF5k%G(Dj=BE;3bi76g;3|^>Frvg z66vxGDf(3dm~yTU9<>(M#i+FO9E~-aiQ~hOSqw-a+>@5+T5-Z%iW7ipEte8Tw!0Sq z{qFw&iK^Hddfc%jtp%ZWJ5wBrtzgkyw&Vnk)UrnsyGJlAIv(Tlr^9mgmg*UCjt8$4 zle-ihv@Fh&nSNpb80+4l4AHS{98hiq@8>_u>6)q}0Ff!=^rYEh&pXb4b&cMKr4Fwo zVLA@})Zu2NtJ~#|Irgm97h+OZoZxXtHZ3SFT*M9s6?O|WM^fXh2?JYO;SbDtH2(lH zP-Asrx4vj<+Lae(I`eb3BRFpSb*v{%(hdH(IIY4amf+50;Zn z)QuJX+Or`$Lhakz>+71-F1F~s z0s(-3Oj9PBM<8Heaa9J3Nxcll^W+{(ZM2@|trdzpnBl^h8%!;F9 zg&t4Jao660%p_Q)$;iR~0P70Px4WF7X?m{$re+cpxxvbCKN@n1Dl_U#f+dis7*KK; z_NzA+MM{YPBeiq#PGna|!7ah9Sf-Q8SGgNp4xQ^cNK(|VA_?UyE<$z{Q7o=*&y|3v zgp8i`X;|F;{Z2sR>r+J|A{G2|RT#Tmg?kaZ{e|PR#zSyVrU&w^f(*9Gkev6;V_aDP zDM8l0PjVJeNKEj@y=Pp>sp)h5nLc3nAdY}^=iY{g%Y6-b?aKb{cPf2r8t8qHq(J8_ zf%w&?4)}YgGB;e*YUt7h0QKkTO7`5BOhFFcmpy+PciEf~^L`-Jm4VERpl!!Ody1nv z2*w$(dQ(z=gKVCuvSXMvhdS{q4O5}-SBdsSy>jAZ@S2d8hw zkihLKv$-5&kMO2TZ!Bw)3%B#CQZs0Py8*qsRl{(yAd#|4jAE(_Y3KPHhU<@Ncbf&Y z61LKOuvq>S<121jT9Qb}=%sj8IKk;t#T~jf>2SafKMve_)_tC&saypjdRG0j&vMWijn?H1N# zE)VHb$7}>U)q3-anmw}R8F7lfLPi9D;2z$TMeA{>>vJh)P^R8R;kY8ASGUukF>N?J z3=Gw#w`NZ|54=5Uq>>*jEQ1Z2e79uH>L|HJiEY$v1Faozs=b=41^GFvM60gh+ zSa{h0^&JP+g>=M~_bRcG6Up1jJx^+@aSf!;vQw7>1d+{YqcWVgJ-OzhjtD%`#B+|c zq>UBR)L6t(!l)aO>(-}Wr~xB_YRf@p@StT2AnJS7Mzw-@QFnZ_Mnr4Sd_p#M55_y1 zuXM2F%p2#%I&ep!{*^wjWP&ZWtPp-;v!;<2D6O04Ao6`hXxds8BvcOHV)A2B93Q-W zJJqPIq>&Y*Y~XQI&e19cjY5DkRIMbDrQMyYRFbgtGB54swz@78JvbhQw-#SA(PSJs z{Hd}7HTjLQO7LoP3{d4;{*iregpStf179uKB! zO^~<9pC}x0(y)_aYf>wCF(XMa;kss{bOC-rv}dhK?92k5aDT5Kr6c)`CL`!Niq<6Py2OpJNp6UpYM&En*N8wq!?hWWb17t<~ zHFacBoVen%OpkDWOrPmeTH30HGL6R=%{2=!zeZo&Qb5_{(vvI7PT!Dq6O;e zYOIb@BZ79n1KPFZRwcV5cGFR|j&Wy#uEUIUuMGJ7BD(M%rv&ktVVd4ZdwE0S^T ziuEXBp4-cD^EaulE%@^V{olf!d{{fEVZfA#ClbsN2F zR-Q|V+(k6dr5KE}E z-?}SE|q zAyJWo-yO|)zr%e#$4j_fHaJxakj}@A#PO4#?)IotvbD_HX=r+f!Ru&s%~06tF|=xj z?-d|%{5kG>;=M!1egn|FGkN{9sfh0F$R;Dy=Z}@gZhCr;diFmEcxuAJ!_F}ik{xrw z1ob%j^Z3^(@enoS%caJfgN~$RdUvf9?ubrI^7}6o+cL)XFv=n-*c(Yvfzvh2>iQ

    ${TTwxriywNEjz~O6+vKHS`1!-(h2rk`Yc-F~KJtJ!{o;zYW#r3Gub(w_Y00Y&(AHuD8m+X3eo-JXQ%t*1hk0cYvKj(_$Jaebt zuZiLNFZwhs5yJt6Es_X0zyyqAy=-V&WuB4X!4{(+JDHt}bi*9;n&+Gyv)&j zaThBN@HVQRrEodV^sjrlywfL@?f%d=#8fi(+-v;Vdy2Yes{wUT(0s0-p;{<|!oPqqS(X~mmIkY18%(2K0-HZv{{zrb9 zr4-|>h>tSV_%Fk=-soC$>srQ0ia{Ihz);7a2j4iaLjM4TpA*ioK{h<)*t^Dd6&*hs z>-<}%#jEHy8eO~*{hnT>h5;b)(~?2&iukuv(6!A2P)kEHg^LF`EE^}c;qO+H+^eJM zGvf~%YMRH{?YGW})nfqQk&VmFat9-lYtKAc;P^D%SuXXcSR0ovH*ih}-N5AF@mo4) zibscJwtR+_fXunVh9i;fo`RR+9er|rfzY6W`ejoft@bv2y=ARAZGcx}2B1@rTv}6ztIuibGoIM2d2MkiHM#S) zv*Ddu&A!K{+z6SDSzWrHVgci|XD5a=TSYB(JeL8u`E$p($^QTh){dobt?T#jYZi9` zJ94}hY#f81x(D;F<~bV}oc!bf2X1=f*0q9m(3+83qrjs5pEdn%!pEEEJ zOBLh{0t$xd++(+D_1_9<*1A=*Tk0$3O1pwN{v7lfJ^rG-V!}c#R7B;lzz{l$&GA;0 zmUg1z0kK%;KBQ8N8kVL~O!Aw3OT-sii(A~@m5DR4BMggzc-%5_!@2L+3YWy!z9hNu z?6%rWthYH;4;diiKQ}*0@%X$&u1&4nO=G%tk@hP3_T#S{e}#PkcO938H1&O2O@UAr zW6-b}I3LorNO4xs!uWmSt#eG-Z{i6gk%mK-;~4Hg&q~AiuYIU|Owp&(+bbQr?p1D# zdlkp1;QChW#*G(?8pp*NO#V!9?%X#20IUaryFD?_za#PNE#lJrn6%f3#rw}U%{&a_ z?vi>2z|K1HnwJp1=jC67{59g4zAwSx53$^NFLV3(gl=L*Rr3iijk&6U<~0XYS)H4)|c{&3$4w#oR;Gr-nDO6 z?-@Nh9X5mFO(JQ(u(cS~J}GrNRl@RAqQao?s}i8 z=M}?GsA%%*NBcb+Hp9z~LN@;ZyuD9D(AKt>;;Z+$me*2m^mPRk5y&ICC$2jhmm6q` zQ`bYR*8GhrKeVn#nl=_Hc^K|7+P-e_{{W9hxVDq&mgXf#*ihp!#mU~k-yq|u9eu0a zHEm)ITS^n#O0uw0FnLV#$^QU9{eO@=K_%>(o7>N{=XJ*&aL6YOES zwX?Lhmi@^hc_Ihp&T)k!EP5V2``6rl7ki29;+EKKQa*KIwY^6jkEpMOJ{NdG>9oP9 z7?~xE{^;YKt(=kmdRNma;~h`KntUpHPb=tHtciF{nryjS6m zh*Ik}Oy(QL+^T+E$T=ZE;DsllBdvO@9}=MPZ-nCT@wsm}B8dv*9I4I^0Aq}I`qwY< z2gjO!#mQsSbhZL3T!`h7K5fo9!Nx+I437BcrE$Ip_e`;Qbz^jeWQn&S&QPepDm_MeSK2oEHI>JQMYX{V6swj4o#Utn^sk%mbtyERdgk4r zP?7TyL4maPKTf}mCSf$X8a@4D_9Iy3nnEyHmJ|{3F-*+{&nt9cxgn@T+1fk zQaK-9weydMb?e)GKt&8{OSW>y56`D=E9hwaLL{(@PaMm%0h89XwX|bVM@(85ZI;ru z!Hk^sBh%RQuM7CF?+M>xra8_qK zd^G<6iL&1C(aKq5iSdD+j5+GPxUW>O_y^&;iJ;b`c@jvOP9tHmP!I8pXE?y%irH(Z zr&h~D-2M^i`VWRQ2x75ixRc6I&IcLCZrpaRqWaaIajHsp%ha=VK7zbo#ais12Jrm) zzKs(|U}Z*F`M_h0k<@{n-oBNsZ{t+dJQ%YHBwM**G65(dj~y9LAdZ;p>sU%JWM>%4 z)@Pudd&7FR?+)q_DVjxMyRq|a zD|?}9)>l*N`jynMMBAhdysG(`82}T|k=yHBU-sqak1x{SRhYJ+3XrmYbPQx|7##8V zQ6+S13TZ7*q4Xb!(`sdHVuUT$3vUNJbMo!SC)1ktFAL~b-ZPRv?GVXsfis%p3T!xWOkp zR%#06^IcgVR7s@i-V4)BzMe6(mM4N+86Y2F+P)z8wejX(2;ba6e-rulBabPH;SPOr zFi$^B`dV2QI^LTy-O_`1*?S>-)V^!wqer=@tyi%eN}Oxrs6If<5|RbI8cSuBOLGyIIoy z;vpTxoNY{DMtTGE#%eu6SG9?}b@6*u(`B1S*GH5gU}BaOEM!u-B#)Rc9dXWcUqAS| z+h6g{h}wsNm`{!7NkVT@0Qr#PqkmC~`omE0R+r*S87=iVmPaT+WA}!A4SFxbUj^Ig zIz&2Mq6JHI5t7(a*zR$TaB2HQRA*&l;Qs)Fnl=8LV+NzBX`yWH)PC|@tb#=(1F(*V z93RWy%RV~zPsCpod`|ivk1%LsxLBrHn_@@bLEBUfXw{wQ&N6UeM+l=~}^^Hxn2G$hC@~bWh^f~H%IIo+28+fV*syS-_Ej=chsAy7=I9cBI&wBLruMA zkj_d02?UG-lG!5z`Tlk0ej5|`jzrdBiG&En6&Mxy)C{%{w?kAlPY+-Cvsr5mFl|!B zmO?R*Ivk$En)di%lStDoblbUOGDM*sOl?xw}pnM8y4xg7%DF8VUJ!g26;U_yFZ1R8ryhoFYQDr-YaRJhjk+w=(Ey7W0dymaEYFBeDR=^hKs0^98*OoB**V<`Dt zla7kS6YZMz9dZKW&$uTU+&wyD6_2C*Nbr`GarRrL4(@PbC2sd6E}cW>8~~J$B#%Imdq0(%M?yX_iR0J63Q$ zY#u%EP6-+OYtcR)cz;sXZp$%Y4nAh%gV11i=dD7Ib2^Wi@}9Y2CX?a&Q4G?gYYby& z&7G<`WsmruerwG&&l}r#rb~-WImel3!7>hbBXA&(ules^_KEm=;%ncBR~mPPq&E{b z3&j}QET}LVFvWs}Im;>J;{f{bp8z~9CY#~wVX0b+X(UqHSml8J5=p`2bAmE6ROMzu zg^r(2zjjBqzZl~g#y>pQmi$w)mi1CQ7ge?)l4ZyG&D;T=!>)e{`UA#(8jJfrTf0c} zj!7h7{X6V7AaNN+H(Yz5?kI6Mzddh`_KE`pb2bUqHyV)$oZFZ34jq%K_) za;RJZfCn8ERhzE|>c0}Np6A808JB(|RaH~Bt{I0o$v=>+%}Os4X!qvc<~bydN{ze% zgN){|e0eSvVt zB#%%>2kF+jM*W_2-9iWP)$Fo6h}q+WAC$U`qaOL=93F)5PASG$Rzh!E9({M=j|tu0 zTI-ss2AVU&FzUSViuL$>HwTDx@uu5mLANpg0I`lYE_fIR74dh8hluQMVzkw_qC7qgPSsrc-g-KkD z1^GbXco`gw^{xK^2z(~+--1?4*kzJ=oz4*8Bx=Vb00v3-C#UCLw{HycM>O&{0X|{R z=5g&=YZa?*SR@R`<}2Le`O=R16U??Uyhi$DmZr=|#4y@NO`!KuIp(&!JS;5XGg_|w zi-G=o*E^~BX5!}(L{3Pqb3@R4Tcqo^0wVtaVtu$Qz=OcxE_3<{#&P$Gz3zH_mYb>H zytj9Nu1-Mhk6P-qjU!HL7POEDl;o4wj>5UG61J;n;puen4qb~>*@GBPpgR~Wm7n;zq<-ssKZl+!QcDHxZ_R>3(r{4foBHRE`1 zN`+WVu*DMOl0XL?Nhg6{1;6btqrSHKZS|PDxNXz4&GPwWdf`APB#+Eage~5n( zz9M{H)rGaa+pe0JU$P@?iv;H~0iDcx4CerG&1o3xW=v(evHF3o-sqaO(VEUc%EJok ze~}gIpACEir)ic#{tc+^7;gS0Q;e_EjMv8>2E0Fgt7%sDj)pj+P@zHLcJYK9;0$m* zE9|>%QM8RG`x#s-6xcJKxW`%=Ph(D7YR@_NvG9`L#rLalE;mMjgR1b&{ok9=bH+Q@ z%DU&kOMMn*Z5`y3%pr2ky@4kOI0J#${(UR%Z6*teF>cIr*Vi?HuiHfv>0cy6;7=a-pU2bPToW~|q`_8M4$z^FR~?ut;1Qhh z$2Cx>PbH76Bk>KhX|heNm2oG|K)?W;^!Be8)MnCjy)Jv*Dm*ii%eS19)AKdf_}@ca z8^hmWo<^Qf6D)xAQ_mUTd-kt5(`-CPJflmV+0qOHxB|=T)DAv}{3$v0HfNM+U$kBJ zi*VXUh^YHQistI`mg^C}@?iyx`-uPkw(+E7|@c%YEV91+_RqAf3M< zFz7bXx14_I#~gM12Wt0ibHmN4+8b$(Nf^Q8VDbE`Htng+DZ6TZ zT{p*xto5k${ZMTalZPO(?M_(abU5fM?avALr$U!bNc6&_vhOFUITiDl#^2eiN0&*O zT>?pLnK16E>QsfvVhe(IbUk}lk!hYjo4}6_n6SLD9kHH)#ISk z>W{Zu!m#+K#Ls&>VObb?eL-R{4?O_u$A8AQ{Au8~@c#gUWVF%Uowl$oftJdgX9FF5 zIIbh%-;E;H78~0&J#m*9BzLc0@rR5oVbPY};X?`Xjh?{v9dq=o;WV4LLEl61`&99! zqoR10Z7SyKKn$B3JOEdWE_oxrwSI>D8hCWw8E+Seu8#izG0x&!7~#0=E6w~}@K?b8 zDn`|=EtXrP07lNtdU4YuC$)O7!_5XcJOu}bH5mTQE}pLpY}hQyIo=0uxWV+#dP+Lo zoi!h0+OD-5BW?DJc|$nk1M;sj*EHwUV`cm8CspnL0PCuHMWxn^-cz@jp!erB>e>#A zHP)yu_U%AApVuDrCeep2&mq&k6WU5v`%$+G<$np}6ZjMKHA}~yCxXYrw|*G3Mcp(- zF^)m)_yb=?c<|j?cw%U@!~#|r4tj&02;^7g%6QjNZyV~iy3u*=EhX~RT;~zvfDQpX zcQlo{munqo!#@k^+BTv800|DaG?UEi0P@&i9N+@I6a(qNud-mVp79n^yF-ke_55q) zEhFL;yxO(Co2Eu&n2r8X;~465j0}Bq#{#~l)AiZ@$Gd3?Kp#U%twyAiy9q4BEXwCR zW7@t!_^;r-Uh?j1yExWBR|=zoI^&;8`cC7;cCzZNr(CN-fPjujJMuXo4ud>%jzQxc zcCWNMJN-UOh};$f?_!QyYAE==k)ikpIx=K(Dmn6K{Srr!8~9OUtelGY2ckl#c@Hb zX{o+gQ~}U!T;;L(@;@q+&H0?qxO^RHY2qCbFW{ItbPX3H=FhEpz0ZL4%{Ro8YqzZ- zUo`Cm{{RMf2X7eTj`-`&YVYjNBsxx)Ew-T}2}w)_A0q-V3ZGus?SWrU_|4&#bp&?exhsgYTML8<8i_~o0q_3+ z*ERER#0$?7#p2eJP7DZOtOiV&UZqFAdU{vX8b^S&E8P+uS69M>tn<`d*iJGMb+0zhzprxQ1UABs>hX6=)`l39x+@Ezr`JUS(saDuoz(6N~k-A zdjNX?I*w~6<8OwwiM&T_x*VvgqnBZZ`A-ABbI@0Jr1%F=y|9W#KuN(P9gnvh)$^-Z zh-ta(J_JwgWsce=DH|z52XNlC()gd@jg_47-azFX9sd9*9S7yqSE2kB_;F*T>GxW$ zq|C)g^3dP~X_7Qc(@~y`5*!L z^Zcu@@Rx&iUkdnM2sJB@v`7IUCklYEA$jMgTKm&P@b-vwsM7T}?HI}H`1+dhzY}S8 zHW%#_50x4DdvWPQlO?uP@VAX^JRjhrCZ>$!lIw$l#GGTEfotX8jh`JM*QIMsC0wf~ zm#|>%V~|fwgZPo@U7y806I$^OpAC+j{zJyZrVardj!rT^3i)CW0Qkp3@eHG!F*YT54xhfqbbmxxnaK*0c4`6kq9{EQDoQFoUYd!Mov%7@0@p`b~c=P9)}8O z3%^{r0UU;B#sKG%$KJem#C|Q(d{v-ce`lkrS^@^(L3SA`N3q3i-)eR@ma=GT5pCyh zIT$1B)Yg}Seizx^-y+^NSB7O%jQR#YuM|OBb6CYRe3S6g!hR|7t@filk+<2NJ{<68+qL+7I>bHH$M;~803Z|BkT@0k583TJiL1Pld0%UDY z2PZu}&2!!%@w9#s*Q2(dPmby+xd)&b<2eA3NB;m?ui7(Mw`1n73VZuZ(2W zq)TiRYiP2|AUy+a$I6H1P&@qve)N16mg--G+EJAo<%eiiU9Gen2HJZb#BfD^Quwpt z7ME|N$E)0ySXhPtbpVh!{Ok2E;3ls(iT)C4T8#6FoW@2}l2sI+ElJ~%8D5{6>s<9> zuXE|Lg?4%u*`<*;mI2i9^zBh@X!7s($DpfM4EF8G$m}YFa(VL*qX3Rcq@A@r`73TV zd8AQ{V?C;_WMl`R2Q{HAN#}%=kf)8qwPs4bQ?xOiz-N(7OcK7tHGk%eC99STH#<+w^r`Y2u~8v= zi44*{1`a;8W+5_k$tR9K&lNG!?%lc0;=b5?rALwwu7vM^C9yTsRy6` z09{3>M7HP&>rV!CU)>THJ!>}R<)13e@_|h&YAH%K8x6?v_5~Z8*0b6Nir~m_LGPdE z=~E|B!JVvLj-s-k8p6n7cslHx?Suy&ILkMQHt zvvk{tARy@NiEBoj;{`u8bn~kcFl5{uf+{A3n4t@Tb21#5;DfW zHvTbw+NCYvGXY#Z?ea>R@_fQYZ~WV(zMx4rNo1D{{VM5=m$9V{{R}~J|lRoJPYA#uN7+s zUnU))yrtgYxd^9ken`)@Yw_#FpA^10{6+DE_jmVE+1NuMn$X%xLAP{JfDDX+<1BDU z$;NtP>9P(Ro;Lih$sT4iAMEt8`z-z_(UdZI$lwg*Fe4v@Vcz)nO44+DjZ)%8@*w5g zuHQg$?O%)?h6>mjT>u- z*??vthCxx2wDNj;*AcCM!9qW0O(>bJ_2`UD%AYRg+rKz0K-xNFjPZlq8vJ(gZ-Bf~ z-V~BuO3bvgLl@>tt7jGn4*Ml!BSb1aT(Y^1RQ#fmEnKz^Zk1N09$p^to(~GSirXyrbpU1 z8`v`CyPg0YIqP3H>ff^8i)}5f^}FpZ;su&vW`bB*HoT-N?vU{wXNkaX_H$?Y~VMZz@%gjQP&&9gMto7$0LFbd$yzd3w&Kg zmeSfQCby6b$@ZP3?8%vk`>%oaHTj1NP%j)Q`0N)L};whxXjWE#JVueV*YJMSuDEIC{#U8{mJ z0)_dx^sm#6YyJtp@f%&Ww7ve*v^PQ3UKo^^f)n#MnBjhGXXOj{*R|+h@K5U-DD>-l z)-ju6!bXVgY<47&LmcA=9W#T{o8mqmr>tcQ`6M?-68E|It??IH{iQy`9m(-lr8Llh zvPiSMZpuk5g1oma-zOi1VM}50GD|BV4~VrpX&Hn0vCQi({+TWg><+^?_OIT%{{Yxt z$5caMb9X6-%+47?hFHnsJm7*ckKxXH;FqPzgJlc)t#7#c(ch`JZe|7eW)>#%yi5N)8Hjgz)<+h9hazOUQ zc=wJxC8yt7neMNiNn%fwyB6g4BRz)$KhnQ?J}LhI!8-LD*)=U@)>e7$(W6N1t+KGn zr9gDUG5NX4BOH^^40#`hf8dgyJl9$aj}vOKSX&8@%Wgk;JctM^Rfbe?kU_^ij}`CX zxX&SsIh|;)m-!xUCj*LdvWq_zJUifPpA#fjS}l~f@j~j4BuK_JE!syMFLTN1UY%q6 z5ct31R;%{^01Z4=I%{1=r_SWR&5#?+L$$NG@T|lQ!-K_tQy&cf0ASCBehQLkuWVzM z+1yD5up454smLe>0VMKw1CH3|KSS933GkMeGy_kwjcwu~nE=2fV;_g8@A=n}U&cJL zjnx~=@chooTs??t^U(fTw9oh_AC3G;;;U#pFC~$^UC~GwNxhan8Q%+qBmsg?ImoZE zz8wDm!6h{p*5c9pX&g3oQd)V>cVMn2ON4AHEVC{dNco$gImQm$*YtjxPMu*0n%)@W zd<7*{Lm$Xz6%5R>NF;s&9FIX?5yXBs;$1Zi91`<-v(>_I)jns;&xyZgzu3pYKeN8LJTFi>;}xqkX!rCRdU5xI7}Ftrel4aO)%iWhE7xhF%Uq{$I|lMda*Kd1KYPepPz# zMX@0rSJ#aDiiHeuTDI&4YysZ9*uzt)m99;!N)d==BRCbC7>O76pn>_-uduArE2cM` z4AiGgxcgU@MnE{B*wPYrGTuvjs13HlxI7-V}0 zjGMTw79cH2S2!6ztwj1|z5GbGZz9PN3>r2n2_1JR`@s4hKN{)oHl!IKDaY2cmN5!% z9Gr4H)Y+1^v0~Be>=R=aB=8MbxBEC(n4ShW$FF+Hk{Oje{BU{atzMES-rh8kc>_Jh zDWzmK)vPMDx0=l{Cp`sDi0u%LP&SSRdewD`+2d7V)0%9IONBiE<2|XSQkBV4-C&gY zc#Q{ADy_}Yl2IL~$nJe=mE`vvTf|Feo-1cZ(@nA&=IunS)OS{~NmbfHgFIEcMUvHg zt-Ht{c=h~iR?6DUO7hNn^c|^^2qMWsPI_X7^tvJ3t#}z>+^e{cN@4O!fpWm9>b?1^ zW?5plF_p_4V4COUwri`n%RkCFa6Nlt{3}1v=T{i2g)SI zK&pv0W!n%W4z$&+bSS%M$HX9j7f+O)r_|Ge)#Hrsv_v`xz{yn(qBE#l^(^$GJQR&xf@1xmCajtBaag8 zPzM>VXI1b%gW@TbwTKdRNAnYU?%Kc+xOyBCK7@+aH!!I3z$7W}T5-;%5b8MXitED8 zad(TeM+>DMrkZ9+l_55dDz82Y6m< z+wCtxx43;khi|n;vZP~Z8)HTrRZ01e8P7`k7CWLR*aqX=dR2*Um?pwVIpY=T{{XC5 z$g4)AzVjJjY02u35+AdV!yP*C-&kp|+sH;3M7u+Ck-Hv;rYg<%?CJ2zSq9#IAOcjO7{~)4aB2*hdO<&zMrRQmhf9zDun?u z=Wk8UPUimrffJtf>?q|WU=JM#sGep^sNo7(r073S@+f>ujY`U_t?E>A+I@=m{s+*t z8wf3LE!J4=lq6#uAOjo@+*dxo53M2cmrO$%L~_R@@9EdKYV=7``rS-<+A)l0H5r<8 zgAnxf_pWE0Vji6D?=_ABntLN4=sJDf*V>*HR|9SU!u~^!wQ?OTpkFBf+NUGvKdow6 zB&?oe3}dfhROYy61`+GjS0wQ>pT^rZl@z`dSdUPUe(gX#uq$rGrnk$yn|p=q2=w~< z)&`yzPnXOfuwjG6YfTNiO1EX$@Nm6>^{Mu(mrXs)e-&x=o*>huhgePUV1{1BPXr&R z;QLqbQ~v-37X6nse}P}L9o>bMlSij&Gd;z-q?@CHIY}uShWUYRc9zN722M?XeQ!E! zWX48075GR000oQqB?rV`hx%8EEZ54GE3dOVMu?})ahQy<5J^%K7(5N5*1rD$!`>ix zY-h2X_a~$MKd&>v%&>N9q<2T+-~1A{_Ia|`J}BROQt?AcZ4Qwvc91Iqh|;pZG*foYj!rvamsI&Tc1$9s21zJvR8mTDU!~(5h1}IzO?4XLJkQ%`&1^?9#Jct zvYhe7epe}2_mfr#VrJ${j(Zx?3bF!Sv5uMasF)U;k%cu@?Z)pa7CU(0)FpFHR9^<% zWH(-dplBZf1cZ$DJ*z%L@_@Mpu3KAqj#}v80ms&o>`Y{fmoVA9Vku7i^z^J4tZZ!O zGGy#uUV}BL#@&Y0>JC52sP|jDn55}R#cpe6^e2Qu>R#N9r;vR`Nh?PhA#P zxTZ>0(2W)1`5XY=y~Q(Y>@wuDG0!~I)60N66H~$?TVo`7IHk*_i;BC@pwl|4s|+6W z)`mH@a=@oONc{b1ia$E(WRwzec!;tfn?4y*px-;oyxkj-6@PH8XBi5xm(3 zHu5QLVlS6v;Pj{-8C}eb4m$!ksco(FD>SvM(cV4vqwM-z!Mohl`8*9ITD$}&Cvl?BsI_GNdr zHv}08R_}_INYWf6e|Y-T>gyc8ygVPv@v4rh@|Fkg_w}b66HyW(;&pjQm;6^PeEZw~Y zT~itr7mZ%;`$V1f*W|&&~uU6wGtI=raqC6n?33mwOLh6U@j^fcnnjP83Bhq z`4p_kxng^GqLfW;aIMrHaA=M;S$xdql6`^#(&TOH#%V3w%K&nv2chd#5~;08W{qc% zqYN!UEs(f_$#>fr$IaY*J5`8eL2x0L?vcZKeQAy$1oBGfB9WYu)O?PxzmhOl9qHa# zVzMCH+m3_$Xj!e~j|{o(&ox$iIou(Qwx~S~UoT=~8!?v;5tLfD@l$u&z(G@hqw^Ir z2pI%YDJ411d(;LK=5J646r;V(Zjvrri+B_?M+kZ5nLDSLxftAd#VJ_XGbq6w1x8dR zWM=!k^G&3L?XhAg3WjGLD!h)yOp|~*W~?p5uLqpxJ!P+rKm^UK1h z=cPBwa)stSJu5QSZ?_gCa)*IZKJ++NAo@{#32j)j712oAV!2V+Rfm5ql$Gn&vn{XU zk&F>8Sx-5u;29xx84P(D>L_~=bXtz)H4F&BJ%v+~&m0fD!y`QL?@1hr>LZ*K$5J|) z(^N)Na_0mQjCxc?dW_C=kU_dr)0}n{deE5S`Ja=>#a5a|xN#ICARn5jER7t5Fu)xE zrk&lGSuIUju7o57IBKf0$$c;`)Wju4ctcNVE*V?aIqe9!4fI1UNp(>i1WeS%+ z!nI!7N0heHw;uGR45Q6PIQ8wOP{gLbAfS z1F`Oz@HqeE$G}u7<)pgpp=bkTM88{p#Zu%@hiY8_2=u(@oW*`Mo z+*a)Ggk>Y1fcjP*qa2glh@;B;^ra~F2Noc>`%Hd9{Gq>#rD{g0Y@^Kk%Yp6x0PC!a zdrpfVI2|hd!eBRJr(bHTSzKOa@Zd2m=~T*u`QHQ%f}nX-&|sFN*v*2x_NZ*Mudz<^ zQSwv;R@&SWqd2KiwvETqr?`Md0ON84Yq>KF?FR?HH2E6=4$?sx z9ltuW9iNuijlXyANi0}VD|O^kVJO`h>lCbwDi9d)iWNh1H&NE361%<#AP#-1!3d3? zUU{tL3zG+8NwrArpu!9Tz$Y~YwxXg_ZgR|dDIo04kSxR0^Xb^{N6ZgDVZ$jC84?4H+oMDr-p&GO?i>!iYXm&s_TZ z)_l^v$SOt$Ak)BGbTUr-9)Q$B;A|i%JGy&&))9AO-%@zqC5%F=gX$_0>uZ>p=O?{F z(!**NY4`?-65e>8Nddq-53OjILR@TFfsk}0Z9A8q0jjr}oMfqxXC3M(5(JDG&U5-z zA1J<1jl|Nau#u;Ac&6PZi9+YCBv(Fkpr8O%StFBT!rycr{i^MpQ8Jar6bgjzpq|5{ zmUyIQm!@h6<&x@GQyx%rpMOepvUzS0klvK29wa6ol}~DGL^OuTf)x)dU>x8NYQkHi zb$nxR$Wx)m3EoF7Wh)R@Zd%yijY7{>2j*rvsCD=;oN9W(r>WhwGtka?== z%&0)%14B;c)-FuS6tsLCaacA3%y&`_dB{BgAI#>o<#di8I32rved>UjBMekwq&(t_ z2P?Uy3&a(o2N@LTUTuvMo!R{=2vGtIr#*6N5clHb3v>IvNJ<+gJqj!9v{`csq`l!<0|p-eI9RM^Hyk}UJzwJU+<{`_Qj z9jfKq86hSW1%SvMGmg~_1+GX*5R7x4^xJ_kkRbb`oO+6-Z6v7x`$Fv*;CHDQP4=;Z zNykr0xV-_g{-Gg)-Co_Wagsl!Vy)`RzcP};ocdMb@!l%~)lM_eR3b2u9iR;KG@G`- zqjFfKS=h+!_j*$se6txN831>tBr!k(U}W~IK~y$aW9v>AxSo#0M~$P?2cDGTk~;1^ zG1jAbp@b_r;f^`!OC8d*Eg1w3N7Ly=`Z1{KsUj*{C@yzy@1NGEj@y$m9#5@gMz0(S zU*_A9+~%);XhRSJK-dGYq?dCi5^Kb8f;Q)OQ|Vad6pcio3H55PHPhY6x=k8FhX~4e`?oAkb;cdj;5-lPLXbtrB;l(Ge}&5eMUtm zD*{HP&e#UT`==SIQZoFj>(ZnB(Lv{&p5Izz>ly*EN%W-VIXKw1s;I+uN$M-lJ~Z5$ zFNGT2#mjk6y_LcjCjm)~hbN%?YtZ3_Tc!E>DDBrZ=HDIC#$SVeAYTzU7G}m|mNpp- zthft+M^bV4)hjcT6DvgiIy^6@Si!3=_JC`JjklpEXl`;d&p+W_{VuCze{Rou!^!}F zgy3>9$E8~Mm*GKesWh<0(#t6lzSSh1!=9W1E6X(B4S1VV)aUT^#Ae$JBuuH?s16A# zNaxp{E2dLEI~5e<+243~#Bu1di#29w+kumvznvG(y3ORbK4OGWKqH;4k9y!fAov%= zz8TSE)Ge+WNQ#v6WBDXe+%N~%p%qu)#ohFlCrZ9Uf9A0+@0Val7%G11f%)@TPAcak zR?yhB)-{q6*7h$nNB39^s{(K^KOd;B+HE`gIw5di+RmX)Il=CDuUNFb@Wz#+U0rHc zvA_~N&cJmZ$JCy2Up`Io9?Iq^bmRd{>dP1$vH~yx9R5f1sFYU3**%X;&^{;Y9u|lD zGftJHF2PHzyQl{1sc z$RU@p5LnvPfX+f~jGVXB zlUjCP3p5QL$)MD5V{SaLz}w%U2PUCSbu+#6BGUYOW#c=KvuebofyQQB0)>Ic9SVly z>DINpTdP|C0KzYEV(hXsiLj6`r?%zKL0rB60K*>&X|hAAcxL8JIv5w{fj@b?vCj1lC$hF8S@S3x zwxX*40C|sooPGknukhWbm2VxUi{n-d#X)c4Qo|Sn9;Ukw6zSr}LussLF-oxo3>f67 z`=dPPn&o~LXc}(0sl2`~e=&lFg?AoKc|U>w0PEGpTCu8Z`YS}ybkPG@Y49v@FFzvS z1O7FsX`tzrdV<}n4ccj&}3nQnC!?w3=aRtky%Q(X*BYFZbex9}Bjqr~|@TdAdijNEfIpniv zvu18qB2*qDLZI%ejhO2gQZ7y#%RDQ7!CO7cH;*e;EL(Boo`LkG{bePFv1PKo135? zo<5cECZzs0@b%x>FO0(VWb)ov_pm1e8Dah5gN)aN_|xKdi+mA&i>jHWYXD6_vc9R7 z6wGfiLco&SMsP3>&A`dz=7}_xrE@lZi1^D}x{lE5I%4lk7V?yQ!Ev3ybR>EnwevNV z)~&BYaeb&kET%k&&<;Z!o=0qVtuFz5L2YYGO*>MItg1H2Df_awuN({xE8nf)(BDY4 zhQ{(Zr-fN0O{04jIXM~5dJLZ5g(yzy#7J0o(o+>^?ZwblZrdj(GyH+!rJapJATAg>rf=j)gs#cAQ+Z z{{R5NQ}p(zaY=4WyTtjc!=DvAN2goEbqWIL!DSdMHuu^Oax2+W#ai!(Zmspb3^CL9 z1jq5K9y!lnsN%gsUxC)XEU|}B(Ii+}CeJbBfy*ud7|%@CF{n$T{3mwOE>)66U>y(! z``rS55M9Ml`^jkS((-ZBNa`00mlh}Vc&(uC3=sqNPw1Ykjc_;`VmBGmw z;PfJ@+iF^FyKXP651AK24;ViAs>9*li>)xcu|H;+NW*{+%jh}j?OMtT!jkG}Hm~rL z!STemSC-b7w+7CszmlIu42`d~@CsJ5Ay?P2p|FYU8L za0cU!j!y$WPPOv=uZ#4(JH)cv>Nmc8%u0NiDIY=xSJZbo`q!gtz9Q8;L!%uw&gM&d zVpNk05bgjY8?lfMdBLTtiE)=g=9Oio&2sV0E6p)e!(f1&22ZcBuL|+xI`)?}&EAgf z8HeW^K2!4ZocauO^sj%=qO#L8=~8cMn`wV@A}|Lh<~cow zTz`{Y?}t1wr)hROEPyEFm0p-%&bTic_$J>|iKVoYbD<{+Is?#gMA=b|jw?)>`Yk4A z(F~KyT~lfT+&RH42Se}Msjn^Z4~BeyqG~Uw-)ZtgY5-L`k=*X%g+?rS?m(|(_+O*= zhryb);~Q};th)|mJ4s=lLB}9;BpUV|3hrHc{z+zs$!BaJ9P!@-<0HLk8zrEpqtNC4 z1o*c{(Irvhd)0|0Q?X?YfWYA7{{RUXAcMwpUitAo{3ojTI`01dWmpvhMIsy=lk#mn z@=s2NxQ%P!MUDK!#4@l`7*Jy82M2@4QhS4355(I`yRQp8M~uKxhXx{aU03*^!5tkPL0j7W+H z4aoqpz%<&vku;=|dK5eZ;azh|NpIwol*m~XiOJ`-df@u@udO^A@aw@^tWoP1wt=UN za#*nW@z2Yg5nmg4FU0;W@r~=WmhwdreWfE)?fxxz)B8V4 z7YLqgj58b~A)T{~=dz6RUPYxt7ml>owb!DN_l#Tqu3dk&;! zNUh&#cYI(I@7vbCgwSTwwR>pwjXG46FxU#V@53YM`R2Yp@sGoQ7HV3e!3LVw7M8pW zF6h*g@{`*nde^M{G10Xz4r!+D^DsXkFLm_W&jPI{aysaJN2dL`^KOyl6k*#Px&Hv` z*O_bUZL4cfq$&(RM?=eS4vET;)_NdUKES(!2x1 z(RiE17Q!tS-BH;ISwnv9UmOga{sh)mqwsgc7ZOEjtros{0TM)|if6v^ahzk0Fh}EC z&DmV%s~bC`=$SO#C&V@~EJrX*rAx*^!9V0z%a{5twWj!@NMXDCMT`StV2lz#-bl&m zo<5cIo|WOu;IE#2k{!_%IigoM7g#%DnWITvNj%@m({--@=t@l0M>7OUUe(PG1xZMS-3m4 z^#o@tyP);2t$b_XWVLjXXvbaL5GiWjl+*l$MLVukAy!7wJkqbkNaxYX&_j)$0LooVnAO)I630J%doK4 z^f{yQl)af7c60KcgRgEW${Of7xb!-!tN4{(Ylwm(dah3gupND|SvvHqsOiabZoWVq zu~F0T?f6w+8C+k%r;SR&Ct)AWGOFi{j1k}P6~*ZuGK0l>edd*AlPZG@pDDtYT#uNH z6N8>J&mOd&E%jzibVs~=DbjTPOiOwvHwy{aVk8`7WNybf^simjZ5rOw{v_zJ&Y_Aa z;aK(!^)>S^fb|Q10NOR>&A{C*7Ehv+fKTIIuYcodZuHZArnr_{d5dnp0{W5HZc zPbQYD8D=IznE9BTug^KGkCcU#k;(X{Ll?dscwmuYpB!#%4hKB?p4IY4!+(a_pZ2^u{-%zK z(n!w}jv1I^)cn1{>tAmCQ}CvtV5HcB;Q&1GkaM47(!O@pz9wk?54ZC5IaVf*3fTpY z^U!Pnp11jQBfUZ68UtZEZqbv}#%}M!?AHo(~_+o!cQx zT~2ew-wixP;=9i;O_?ks1bMRH=Wl(3xjj0Jbp_D>vXHy1NUbB1S=cTM z<+5^5Bxa3c$I(S<#YWA;BRmZC!1~w89z5~?0El%jH@#My;!Vn2M>L8{H#j{$rnyf6X?pe2 z$b3_?4#lG*IZy_0bJXYQUTg7J#hPw~tS*ZNPne;%t~dbm)4yt_+t_xw^cRUfF5BAp zb>@^Sy8-2-XFK`F%zuD!{&P|MEAa)kwLF^q7Rk9kcFtGlLVj!p#{l&s>0Tk>zYW;< zuEyT|ve3piA3}YPe128x8ZV5jG)++Wdri}(wm=Jcii#j+IPMPw{X0@{vm&b3Q?T*v z)~9)PZX&ny9sXSR{A@Y6#5UT#zj|f+JgV`c z6B4WQmt&qW>7IHT{YKRFn;85hacQMoz&x}&P%y(W2kXJdBxf1-75T5@{{Rtc*1j#e zztZG_*G`$XMIE>+A;1Nslo8d5KBEJ-LG%}bu4UEq>v%3FGL4|FNjVmC9@N(zv|04#&(`_#~lY={MXnv zKePA4EfZ3>@ivl@TF-OLh_VkWIms%79iX1T;C8Q+zh^H2_}=SHUmMP`n_sj|0;?7; zgahVLjkp`JocA^KXNdLt%__;Rqm#)Iqh%X`BMwJ6$UUmudj`_b_YVo{Iwpy5EJTVQ zBVgzcy5qOjy}Hic9Y$317tC({)%ioA_^(&gHIs7WruWL_j{~?LkMikXq`wL^dy8!) zH4R&GhB-pOE=Tm{pD!pq9;d&J%tKpghZ7_W|hXpfBAZ-VaENzh{#m+H#W z0Def6@;M)Qi0n8W&uVY&CGj&~meL(J!&e9F(l%#RP#fjseEo29$mzv=e|g}&d&kqm zsc9~S+=BjTJb}jqWbum0Lich6mF~{HzA)Tg>h|{cqCjp+j0MO9_0A6fde^k+H}`%a z31?$-)|mkdCESrF6_P)@$2kK%>!|oG;*CDuYt189jzM#7 z!Tx2(%0S>`_WDwqvTY7>O*-lvV+Hwx$JcGw>#2?qKcULx=CYc-C z+C&x4-(ONaYimaF6^#BFcM=GiCCoscco_A~c&@wRyIVr$X8?{#By{!74lcy=>0{44 zd#LJG`n+kUkCn*;bQ!JP4&KUTNpGBPJm! z)@A0r`bG5CS17^Z;NTvx0Sa{kw!iEtJ%n0k#AlJ;kEYkEV0N@LZgnU0B28$8m6Ho%vW)`xgaco zfmIy!85s6B_2#{EP4L%;z8ZK|&rY1i(xNU{Cf9ez%t;w6bDl}*?Mh8pYh!O!@s^LF z+J@8$#UcXddB#w6Jn_X{_<8Z4M)5`Au+ZlFK;*Dcz^NF>U_j}fy*(@B?~GS5>h_Hy zM$#tm+es&A9QNo2E2{mLHEdm9+{YAY1F|FFa!BW|P%(}_F7%~jYwYy7^Fh%217$0N{>YF{8kYe<2l#}=lR!|Uii{WUlofepU#cQMu;y$bAz09?s@4{ zVQWy0MCBbih(9 zx{$zQ2l1{4#qzzDpFFVI`IiLE4BS={6)=yH1s^gTj*%a{z) zotWourh8LMLTO0yuN{0&)cggi#}<}9(bTKFn+Y3%AOL$2+n%-Vz5@8uW#b4IJ88V+ zDixHRI5_G?eXEz#v>gjsx0VfK4jB*1FmcEEHS({+e};ZF@OQ*peKx{8**m*SK1op@ zAy;w0E;!?^D!F5APPHi8%=hmX>NmGuFlKvkCT=5*m@eb9AaFXK59?oE!8MMF;CP~) z8*-An3C>guj)Q^yYXoS}==x}oxLE>*Ip-vF{0&?F)wI@aR!fW`#sC|KOlPmDu1U*L zIdd3Ve}pt25m^5KZGD|dZU*HUAA#glSGoe}q(u_#>CdqBuIoy^(zM9rB0xOOqv`Ej zUa6~nvr#@kCnF?v9CRY7M#zS&v?J3zO{wY1%BXym&NH9RvM)S#ES%ijVVs_sz~|rk zRGQ3JiKNRSfFy2%pyS@ZF1&H^Z^k#;#kP@hfn8=SvK1gU2?0uvyXZOR)Yj31+`4vq zAFfva02j3AH1?A5)*%x7*f}HH>t1oGc-&2Ny51R~xWP@sgP%iR5b0WXkF{M=+f0KX zOu}i=&d^HW9A}U)dIQ(!E9^C~v~LaC==zjO5&{A!WAc!A!)HIQJ?flNHK?@E?6one zYg#e9wv2`YcL0(x&P8PSf5N)1y=643gCdTtfTZKsrFt%z;+-DMMWWrhM{vL?T=U4| zf!Kri)>Pg+@U6Y`_+vz!4a_8liCgASJLAyjk6yKlR(C>+w#UNWJ@~nxd^6P3O4YYK z^A^Aa3~e|gp1k@G*19hU-CB6I^4{tQ_e&y&!j0zyWSk7(fBLJ+ziV%Unm(ti*?5{u zzaUF9e1!h=f#^~ zuB7c0&W7(|uB+kC9a`(L+xTGlkOjn}a1p5|kbCDHF`D&lHp5cUZI9cVe21v*n)aU) zL!c=Uo2`~KGp7gTW_P=1UB!?yM|wGIodPE4}N&hN{F@4(iXm_ z$^QToZvG_b{wJ3I083kl?c|aE&mw?uz?NkxkGZrG3w*@q74!$gSbTA=t+uj#QOf49=%2 zMl*naop}EMho#cKDchY_TrAc$h(k&a)m)5@aB|!Of-(mjS4|$N;rp#Md@_C1Eq4I^68A=4s_CW#J0GKLCy>BqUR)_>V^PKQhQKL(c){{YKL zWl`uHjs|-IEAZYQ9_T*05wqRDDNC)9d(s}shy$6y&4=j&1=(U|B; zFl>wt-D-y0ml<$XSGlR~Vz`o6?xDfsj2_3&tQZ{k9lo`75-3q*UIj%evt0SH^rKr2QMlkfP3*iHs$~7}Pza~nnVwd+agTb? z@*#|s##j%^t|QXLLIF*$$Q`M&K!HKW$W2T8gve~v z>L~#Ta7S9I>eI|(4ZsBR?NtVWF6LRxZZa|3{{XL60=>4y*N_==}JtR_D(27M@u&@|3_TV#secb=!OVN~?!?PWzmO0#tbzt*nZ z!8=T%L=7K82&&DZPkVB170O_7#~AJ^qV*@0^fcsh5$!BkB?}o$~WWX33OLLC=^IjeB2lgTGr@|L+ z5$ZF&?f6(lyG@2@*)!%aZ$@sPk4}~Lq!B|1F*1&wxUaC|jxD2!glJ)9b=RT8l;!h> zy-^(4cx~ItAONR@s}_*NwJo1W3|R~hZinkrJ2hf?k&mqD@py+$xzZ;j zB=Nj$k4G3ibL(Ft>R+*UhUdJF??%*S({1Afy}K`*vYhZ0w<$me1MhL}EA1Gf5kO3X z=k1T=Y4+DIA}n)^xUW+Im{!9+YBI6ITMVbVK4I{`?BU^k37+a${{VbrXw)_sByYh? zk&+MdHPz|g0RA0m&lIxRM=X)CWh|?nxg7^Pdw1f!x@##~aw7YutvYQoduIDY{ETtz zE4F+`jBf64?>Qa<7TEC(Yv3=#UlK%ZwT&(rlok1~SLFvJe1u~^TENl2Wq*Sn9nqrE zZFG3=6|`p8 z%&29wUalvJX+HzL5W#)t>0TbNw30O_8aNeO1mxwqo_mv8QTz<}dHcC%ut_C}gDjx3 zxhVV4vnd7kw;;A_(QPJ%D~Gp*d0sygTNcjE^02|Av&>T7q`vlOur!xMSJJfYCc@QX zj@&w~09NOr>(3_@yK!%4bmZ&`Tb2U==lq(@ns5fx12rn3MHeR}hfeseAFa+$SNWZA zrxmeW+r?trBm0AldQ_%Z=UhlJ_*H2b%==_Jb56K;yx%T7W-){K)~dH~_G#{3x4M!T z$}R{ex9L;Cdl{57p~&F=J?oq^&$}?MPNOw`5M6TI8q3;ip^Tu8n&RdajQJ!6JdQim zBhQf*SqN6fH!X9r`HQwZ7CGShR@{GSh9zep`+HPx@Ep2CtfkZl9*p1JKp znn3P7iH8sx98_`n9#h5}=Wa1g7Lw$Eew7oF+|n^*QAiz3w@i8M z=}d~zq;(6PymsQJ*|4g(B$Lk-w*o7wE(;X=(b|zXJ-S(R_B&wW)#wlX62>|{P zjMmhu^GxTrUVUn`@k+{|{m?lzs&^(dwa~!5ONLG9oaX~QKD9oJYLjo0`SxShw8YW6 z5QA_Wb5L5srN|>;Kb1Qb$!1-a+D8fyje)p5kF{3R;$rGXFr$z^&uWOdjf86XMfc!- z6+E)6XdPEMtebsH(_)gyN(sO?UMX_dEF{JbYFMreaW?hFPZ;a?)M+w_e|n_{TGcc} zmr~8Os)l1ChU1LZoxIRRZ{*5(~a_=tuRcb2X}`kViCZtPbhwI4sgbyp6}NCjzP~ zM{L`iWRs36V8vm_`4o)^nFii~w(n7Cb|c z%1BYctb3J`>Tk4xw{ICA*0ko8WNeaorcCBI@)VIyF;=mkFJaafijnOLxUcuCRNW)U z8Ue6lr%r1Y)>1ANT0Cd9YF$kf5uK}p)YUn3HH>-^U5cewAsUj7ESi z4|0E{EZ@3u8k6%1Qhh}jq-V`{GVP8v!h?fWVu%thWn8j!C(@z;w*){KXCCIPz16%# zSUJPLBaXBupqp1C`#an+$pHliT=m6XhT=;pvl<2&$4=FnWqWyJwopfyPEWW00A99Q zJ(4V|^I&wvQ;mgfOLr5jtg$Xxn+NGxZz6{p4`mh20jRkz$V% zF~IFiiv4aRC;?EtJt>WD^Er*j)~sUE(k;>e5qh!p>?uNbGMcu;w#w?SBXU@N0={?n z^WZCAiXRVkPXyfq8PsBEON0){2;xOk#^pS&dJ&UfKyNZxvo1jO`qw!Ynv^f}_W z(ycXF9d}8(P1j5}V{Sl1D!2?zGsX$4f3gmXu6SDXUTG36a4`{1aupjVcgn+-8RX}K zivE<(v$$rNC%L;{iro3iG@UxOXY8Zfq$3h{88t{m?uX0iR5aV0i|E9cmfbd(be=pTfnWlYmlCe6%}^*!n`?<~QCap_TQ0m9~$tVT1m zjPZ|pCxO#~rzgL9QFSKKv-o=Etv;&vN+OT~RA7EIm9{B+rc`PYRAxMbS9J@8+)^>P zVyHXqnG!*Qde!&<`QszyKcK3NQ+5K9quoX%=jG!azxwqm2^qYpj#sy}Dx*NH92vm> z06bMowS1uswA9(6p!ymz`GEoj!sCj3QM)jX6~O?LpK5e&&u_8$?g^~uWE=XDSJJ61 zOIkBvKH{jD&v906r=NP1wIf~4RY>P`NtYyYG1jAoRf0x|l;9e( z6p`DV!9jd*de(Bz#4()iVtF*Brp3ir(T$Ou%O3|dXLbR~^4(ggtV!e_DB$&}0g(|| zx*i1=EixBWX@ru4v3qx@qrh@gIP~pOlCmj2oKji3s}+!7V9}^Du#_~|keqZL)p|z( zaNVm88*BUBRYkth5E(iCUe(jxyfH%9TolOq;)FEWndF%qy7QjZtzlx;mZjwGYYI68 zz)7^KkAAhWHOt9vsLj9}3O6KW%tqP6Mtc60ocpp`SK#ylt(n=tQ`mK?=^QO42O#o6 zrnk_aLMi9Gm*k9%gMbJ1t5M8Ufq+{WIjqZ&)`(bIvhS#~}wVz#i32gvlA(*Bw1^R@82ZB2$(t zl4@4=Hd0J{p)&iyAda2As5Z)CLdpPP&M2BGV}s=xW%Z?LT`bqn!tvA6fL1eRwvHjS zk0z}}62%}@&m*lw(nWNt`*KBIwca6Uq+U9ML)yq!M4nPf$O5UxN;~^dO z%baoRifLrFkdzyoaDKkE6|+2w`_5X9Q!6{!kBQZtmAL1%UXh`ZL1yX3Jt=L>5-1Kf z?W!}QOS;`h4V)Tk{XlZZ3xZIQ?MMq0#GfZ&?^0OV3tM3fgtH!`)RV%F!a2?mesx^d z(5AE+Uf(O`kN*H&MKn>%KbN17jAOok!jeeh0}J21SBB!;shJM#haB~+;i)O;UE3A3 ze`a+!?d??sj9zZUY^dbZ-c^w28SV{4p{A5F9iShZ-mUf;l6nqhYiV(Ax$Q`+J|E3N zk&&ORUIk=ry*aI(CA7JD?i7Ie!5ri8u7}MLLRbv9YNQre z*Kj%Y%~%Z+I5Q4MLqmxw7TgH8x{P_?sT|^&aKP+`1Y>}6#XZo8@h1bdJ=Ori84gM3 z>FLcy*|LggOBmTD+*crGrN36X8zBR5t1-WkY9W;5=PXyXMq>`mEPkJrLrlgO?*PcA4@3uOq2*i{Bp zEx-VQocq<89b+I!GrNIO7z=QV^840u2Cb==9CJFBjdqsxtFSG^U%Vvzybx;h#34ef z)D9{bq_}%MtTVKep7h}@3cE84Q;W2cQ5)fQ zj&fk+{RJl2fRro*+f>T3=}OL4vyC$nRdk3&&8X`tg0+&)=x zCCDX#`j5)2$t03K;G7z>V{HRlI|VGvFuCIm#tlIl%M4pw{KANBsM@yVw(W4>qmPkK zCZoHzmRs1RiMK`w4Ig4L>+4Uq^GqzRcJoOLcTva$tH94c=d}^@D)-n=EkuE27#%=8 zI@LRX!gCoM9)y2dy%3OGF?Y`4@&or**9WgY^;NDyZ}S%{hX)+~BCB&avnJ*@Q@Su% z4nmH3txJ7AcEj8NG02Cb<-%Vey7u*~NK0J1 zDtx#epQT)zP!eUyV>fW=P4l5@caik>B8bF^iR zJ&H4Y+&g4@em$!;^b@i};ADgs92`^F7anU29@SAqtrscC;;csUN6U0QsEnG_Z(-6P zLFN*3=~ed)-~vYODf^7lVe{6ah6R%ED0)+sm?)%;Y$R$Se!jI@IM-xoKoEB9-(tGNL&zo!H7zpn#BIlcAOa(G33^5u7yP{jnNrser}_YRm6_c2?yTwsO6cZW3jfbI26cN z&5t1CY5r8>VqAI`S#DigH2`k({{RY9wz!E^?ywkeLh?WQ;*u#{90vQnsrT1!xGN4v z6q*>u@>*q97z6mdDfc$z8xo!f$UdXiqZ2zsO8w>-1a_#Tg!y@pobm5M&`wLKobd~` zFiJj5_u{o!Bw=G-Kp3p0cZyTL?&szAt6QR+Gj2aG6i0CjIJ%M+NC03udetC?bP>z* zH&!2(YIM0++>x9SLfwy`C2?srwKjzK~J0MT!A6WqxXFP5>4bKmJichsJ15KCyTrGda&p??!xEPG@l%j^%z zexk0;6ul7qwU0AFZiY#i8J zf1Z@Fn9)oU^2eoPC4B{ZElozbNuwO#4tnOPE=`2vFV5Vq3FuE5&j6bA?=+KwF^^jDUyizU&a3dFT(GfV zZX|=`L(zudTz)DI2|dm{O80DkKDXMf&VdlU*91u}F#FgAKJ0pOYR~*EzXo`g+4S2u z+BwiDk(Cz?#0>2@KPWxVC(^!u_}SuXXV$N@@gS1fOR64t+DIUthZxTpu2bQ^hqbA# zpw%aV?d_Ou1RbD((;WVlr1m~n85>Je*d}d$dzRDgVu|69m0mb2(ETx7_xvJSAAt2W z)wDT`DJTOh36Vt$zhx;t+YSU#qfoP!SsaXH964?q2C)A41#k*ZAx*$()?%dz8Y zlfVPG#Y(zo7Mq?e@fzrBGDU7UjX}#PBcD%0Tt9>KPYqk^ay9BIBQmp$Wu$fJThoEh z;a=UTN1%;8?C;Zb%5t1=Mml7F`s>H6{0ZW_twi2vfca#XD(XNZp&9iZkN*I!no9RF zZ7q*Z@#H#{-IBkDq7oU|NmS&q-I8z*Ojk*%>5*trCDd^%n@G1aDClsL|s6rP6{;NOe7rS7jO((I-d z$h#yGuEx*skqb(Z)5W*19nHT9ewj$lajh75c^2_YTLouj<Gq5dKC9sdA2@oyMh>o)rA`UG+ncwcWg2ivc;dtZdScr*)_i&&5d1~Z=AbqD%Y zABi3Z(>!}~Hoc`yHNELg@u(wf$fM*W^&Nr7twq(YDL#zj?JRYa@YL{Mf22ziyI}`a z#|nQQr?p^wKGfC2+ywF_m4E}O9e^3_UbEnx1H~_=?ePpo7KCk)Tz%#5f(hN}nw;rc zaMl-7v5R6U$ruBX{{YwhYWbGPdNgxBD)@)u?+@L{q-Z;2k|K+iUCKUOkU{I#yB!`+ z6x?`XJ#$!m+)S8h89q(KkO@`VI^%#xv9B%h&EAuu>+7yhC)wKLAfvYq!vlUh1>g+V zPoR8P(>0ra_(IL<`IiBeRag+ja!JQe{{UTS9mc7(t&aNNTfeflw}SpuNw$M0&9xh@ zcI4+7=n4EycA9ptZE~<%+Lara5dNJ<&{vhq;R`KH+FRX{#EphU>Bl)?>6+qxD(QO1 zgX6WELY=nUF^wZmnNgDd$N75H$#yVpo{90>#1|SxlonQnB$jjY79{OZI^buLeSZr1 z27iW{=fr(V2NN_%Ga;E5e1m6I`H1Q>&p7n2K=7@Wp?P^{2D?9+@`AF+$94!mFaH3m zwS8sapATu;Orpb2jhabv`@IKzlls%LdKG;&K7Q~Yz*}8D<#iuEXzipVA31|Jd=yZi zXY2LpRz4tjFnDe_C$O2s`-+@`#eqFfr=j}S*nipbTWU&=ADEkdUNN`Vj+K$(4-AcC zPnzb|+s}Aca8h=LGZ*Bms|X*A?PzTGK}H znqJ0$tigQQ&P#4y6nl(h{{Sj=6X-Pyri=bNgHrJo@}`$;?$-R04ip~T@y`|KJ|5D% zLuKL4QCiwM|k6X8}HP7a1p#a5?t+SCKD^^j#}gnXd~? z<~RwoWNmIU>Bn4k;*zu6(o5a4KAiBs#N8Xgx=;3X(@ApjF)ZU~Wn2NzJdktHR}bRU zwefLXS_s63UPPT+1A)oyUp6+GuIt*w&{zo`X%&hw90Q&PPeMoQUY86X5j-8?@p0k^ z3?UBD6Aj&~+P#?L0b=S%R)m4Xd7@;N<#$I@b78scN!Gb!V-i z+PQdJA1k52!Q&hp_vXBdMfiiHUzD&w@(D)5NFR9P0RI5>tLmQ!+t^y$8(Hv+)DJ<^ z6>?$EZ4WWluCF!Q^Jk@i?1#)@j0_>c#(&Rx>?6~)ZAU|Ug(3#~(U`$9g~1;(o(?+q zsV=PIvhftR79<7?N{|Qff1Fl;y?a+{#>i(mJ4qQngpNR>GJRQ`quBYM;orj1p=#{f z&y#Q;499t5R|Eh71CL&x%D#~{SGr+ju=2zVqhK62IS2B`)Ps5+szA%$nhWg@L ztBu%MSQSMFI8K;QILCZvt$I5AMYxfeUTuxlLdCS?Hy<&_Z))12x@iQW)~C;38vJqM zKLy>(r`|A~8*G75un`M zV;=SFde?$e#@3CiMQE2762{RnkZv1DAr@^;;w-cjZwob?#uuISn^veX^Il9?ov&*5DTovdhHBk<${ zM}ImZJhI(LE63OTM>Wt*qul5|95+|03ZN&U>DsWqq$PiJx#9eYQ7QFBwM>pmnBmw>Zf20k-^3@$3f03&UNi0Pw}LIujC*g!XUs?>66q9 z(`})&@Gpi;Gt3q(cr)W^u|A>ZwNi?T{txCI765n`#K^m3Yp-Xh!>f9?TgOI1UPCE+u z1IK?Hw7-hF+;i#Hl3L4ZJe4!Dlk*&m5ys!IKiAy6G_!c`MvGR4V)iV}8l!x!r8rc3ua+NHhku zSxQ_hA1L4*sg7_vRxXLG>NZ|KycV+g zPo{pgp=WQS*y<9lqCBgJ2>@-+nb+I5{{UX1q@9GJt=Z{X*Nb$`FH476@f>@f{Zim( zbAO#q<7A;T&z)*$Chw1 z$N0Asz!l2)gT%iN^jnphNe$Zwor=c6kn#p_Pf^Y>@1E7<8jZ(@{6%)L#{xxa;e?Zu zovp^)56{-PPl(?Sn@;evYIawWw9zPM4(g$wI7LnY=Od1$oKq*0OA~xj@wk`6jJ7`@ zm5hHj4pE2R$4rkw(z!2y{v)_eX4g!E1rkuV3P>EVBRjoETz9VlxV7=Oi@Zr1Un49y z*%h``Ru%+g;PaAt=RJKoecAAH;Ns}|VAZuYj9o}eMv9=610xLG+qfgvo03`%c3K}; z=-SP*+dKiXS0Dqy^shVDWE!Q##jJyJ#xUEt7-7@$tes};_&y)EU$_LE;d$er$Gvz~ zq2hlN++DfS6^h*w>Ut`IKqo(5IjM_RGJ2~-_M0CP-S}G3*G`FKSb^Gyg(Q25^nVO^ zoOpuKHCfcdD|JE-%6c4UxAd<9(d3pr31+`Sjw_K1L5O zmW*ZJ%K`H7pW((k8vER9Fxq&K#djV~PE!DFNRG8vB#Me+T{?cyCRX?t5W!(?;TA z;4o!jf-pN{KBwNjL%`a1!<*Yy(XF9GHf)R~BXbUZR1AA|1Gj3Xos%42Lx8Zk@pbOL zA-QmtuquT4eqt4H7!iT&bNuVE)Kb#=)Z0p}xd&68Ytl7Kds{1n7V(yjVtMEk4_fhm zi28-^hhrMXoeN1AJ6~z&PeaB}zfRq&k;crfZe7b3_X(%EK+Z^9kXZEm`U>=2D^=6= zSOi7T%yaSrGl76e8OZ}66OQ%yo8zAuYZg~}nYf;4VbmrP6Uv?dRZtFk?Ew3Jp7Zca z;>U+9Z8vJNv)_H$0}faW?IX6(F}R+GwOi0?TG=0A>ahsy-^v?`af949?`F@7v{}!45bDyXWiM z+P-%9Z>BwtzpBfjT}+bB;LYZp$cz2R!2TV?lb%WMzyV55_C!S=dH(>y#n7i&v}i8U zJEqKG80}%(E1skCruZAf`Zj~&C)TbEW!VT$q~*G>{4@F2&ldh1)2y`^B-R8_6k)dE z&&%u)kEk6ztLTQ%Y!=;8TY?!zRlPl{NL}hpx*MMmz9M*jD_g$}SWEtzimQenAua(7 z2yF4(aDNVK;@9w2r)RH0VhNMaV<2eUkswo&Sm!wIdgtD~a@W9jdWVZfrFn8*-NUH_ zVfVM)BenIH&PnDgBB zIqVI3mYL#{;h7c)C-R_N{Jdi)sU!Isq47V(dM}6c>Fz9{Sy%zJ4nPOjj@9yn8m_bB zm!C?J9@0ysDvuUHP{Rd-F!ebHrF;X5?tG@ash?Nfd}grm#mUnxWlY=U3vL902?wXY zA6oIB9Q+Zz)}WJ9k!6%h#H;lqoCWFI`3`B{v#0FOb>R;boo80bwuph{yML|dLpID4 zj(d)KcdyV77V7>Q(=ih-iDTgH3&WZ_$8rp#1@>f+-b+h7uJM_n4l~c`UYDio z2J=LNU6q%0#A^E&oGWrN+;fh+WF9HQMr#*f@f^CHt(0q{1!rjncM>*^{{ZLoJuAsR zE%+R2cFC_qaM7+9s2wxu->rMu(c4$kzS$!cQ@{XV=kcsLG&yI}+S=*&Mn*7CIQOkN z?6fL1IbNsFe*=6&a=Ogk6Fy_Dnw+Bm13~=06SYC>uypP-^{=n=BjJg)lWOdel>6%4 zuru5I^ItLRy5zqMY%XQ^hX~$M>}F?d7I^?T2r|X6MsNuku6N;1tEp-pDUN&c z#fp^Qf>+06LckuMKb4TX8M~Kw)&O6|Piu|3{g~<*WV*=7{3GJ) z)w$i|27819=2nR3XdH0Z9IsGDc?T!$Zv$Lv5nKJET8)dACu4LO^uaarKkXf(Hm7|i zp&EHs?0ngrx6D|KU@!MT9P#~eq$66Q+XHaK9}2Xhc&p)7m8|%p4-!i}iS}X&qL38xlaP7m z>)Y#JPk1W$+iAXbj+@M5{#lIi>5){WsZy$v(9^Tcx`lvcSUNb>W%>9woADf z>dZ@Lo=tv7d_(b-r;2=F-XFJ)OPIulMRi8<*^uLMo`ep~>0hLO6z1`kuPKYlF(WS+ zILG1X{eHFbMb4EMhi+q%-4ZzzkCY9n7uXIkDZ+hAjI_9)4SpN7h3o42^oWtd6`@`T zVn}VgoX@VK{ex#%j!t*l3(o$Zth+o2fttfbgN`q<6*r+;_h+ZC|z;|OjFlB`#F z^v*Ne{4Ta00 zjR8_e%-B78em{n5>D%kAC&Hc-y3{n7BNNKIRl=px&o=E&F z(ezzi&6k;I+c$Ds(DxrfNxo8|x+Bi@kAUA|Pwfz@(!zYfE1Z$fOlJTN-Rs^w2y868 zJhnnrdC;BMIUM`&J5%m88MQAB&bJ55%uEIj-Q=kQBy{{M=3fY0c#BTfE&MwQ$}P(f zSf*6sl^K3RO{fO*C+d-8p=SMFkaD<+arv~BO}UkZFs_{-z(3wWmMNbvrpBrz*sDynom zfDSqip0!+wdKkFf=zfX(PVt5Io1`5^*5Q`k)aG4^OEyTyPC|~SkJB~s^uHKwd`qcC zV=9^V@IGDv`ks`(3^lD&;s?T%{{V!7;pUmzRF#R#4o*4aqLGaLwaj=c!MX;I<7b6+ z42x}>ZN63nWADmI&is?W;{aA((IS))jq#T5_eaoIQ%h%(-a=D>@`Bs|$2~;+-Z8{mM6>06OG)(Rr$0 zL49qeh)I^{l~*}9BN*xH(!PZ8R;i?EdTf)n5u#E?I{ho-uZSNJq|~(=cUw88NR%SU z5XnrO=e7?S>(-&eQKiuOs=~qx_~Fwq1EPeJ>)$^0+R5;r!qCeF~40A%gZPuIpaP1`L?m)y%XUFfgAovO^RLkl#S`Hs`DA3#nyuaxw^_(tqJSe6=IpB1`E8_2E(H!A(&Pky~g?_RZ~ zd`|HGovYf|Y2jK{J6PjtsXPp`U|{<8&0Lyl!b_p{jQZ7x)4bc&`=cZt*smz@ZnCH-ewa}I)YLaq*o-%TA>)yXdyfdU~ zt)|CyF&ULsLC#xi41hY0|&@*#far{2^l9G zU=Fp}d;|E+acO33q`X-Y<76vuD&&tSVHh#w5y$`>9{I%_j@J`h$J$zVf$qFZqR10+ zqp4loWOm~`eqy{%_x4%vRNBDtKDnnd-$qG8zvWQ4$I3Wk#&;fT>OTbdl56`}M43ex zU^(>bTl$8n4Z?XnTh^j=EUY^ue4};XTN`_MC$x-aG$j<021ht2lV1%Vi8}tL;<*xb z3kyfHYXcZu5=jH24@UIwU#VUuTWvp2mg&`2H3f)0&*@*0KNdbAXnra2vuS!RpZ1v@ zf{Ty3te~CBR|5(=9R3{Ekg2A|l;HIn@y_?hm-=;y@MX`F6nl-xM-j;QDpPA5a5*Fc z&$%3W@9gdHqs6jEW8>43FKcZ&s-7)2gHW$i|(e>ykJL_ zcas_deDn->-f#dQU;*=f6;YB)Q>KbZYHN5O#aM^Aj4k%vXVt z)Mp<|*VwvegLFR;D8AKUQ0a_sQM={N2*}_LqP2W4@V`dzkB6XxPK9DH#1V3G+efK6 z$tS&dw~PF1;;jqBYh|a}nJw8{%50po3}+;L)fpp^&uY!ojGl$3%8M0m&rulat9k>+&aA*IFy5ys(_cQ0F7q z*XoDttE(oh@QTM)mG@p<2lI*h%e9C_Ba94lk6hHwD%L)WDr)+k?K;RZ@=3_*D-z~e zRPO-ewQ1hw6nID&^);4_y%Zn2nuWcOqSK(3tW|#0-E&R733?T=g1()qNg6e6iauO^ zwHiq<7**-P=9*SzsJj&evOyqJ8P63Z!mvhZIVaMfXx-$Pd_2&N!o}ozv8y z?d2vT2he(RPj!xXw#ku>M|>Kxu!ab%I&vyE^2Fa{4TkDPCTSMhu*qk&x7!F4?&x$O&Sc9E=bCy)DJ_d2EGG9YsfPBNhGG!iuUO z7VRi`ce5YM+Nu^|4>KiWBp)baaqI6=BqH8SpP9(TOo=0si@?rmGE3Z(Kg`~~^x~{J z*${a+asfQl(7=!bzwc*?9pzUt6x7$TVpB$F8%3!dN3rdQ}a87-`8i!_b0qa}|6c zf5w^i!xzW~ao(*Za%vH@X}@wXMIXX_X|RxsnHQ~Cb8WMETf$ljGVWJZIoRJQJ#p5c23TY;laMovb;WADa4z{+eLY1{R}snQTatU^j%ZhI z#Je;tz07g}AdQOSAmIMBa%mi64eyGlKB+8AnEvllKc!!=xwh0DXJx{X)2B5KotQ-n z8zcPqCm)4ehjBtCPyy*yu5HD$Z-j=(=xVm9H`&vAE_U|!t)UBUI}kL#XK&qSC!nSS zJFB#WjB|=hYnHfQKH)IKwmqsX^IcD~?x%BFEg2~{p*%7+!{)Kc{VG_da))&*qDAt6 zPo+SKBg6A&Kc#a{Zu*rKt(kN*#}N)aJt`ScLp!y@WR9QxYR!A4G2%|gr9}=T%S)C6 zk)CRzt~oS|%jU@#0FF-w+wrUI3dDu;$Jad76t;~c#AKb^;GUnIOxAMG2b5WnNWo>~ zk8zy-6@E;Z%EK+~_f5F{)7qq#;@Z{ra-~mtuOp?J0|syg(d+g4nzJfHZECViH(UUB zuTTf3e<~!ju>Gc_S2~K^s1ba=#oaen$w|OojX%Yp6dJG>=Pime( zqz4BKH~><1NY+l|vP!WLy^8bD)U!{%FD*_u>x!T)t|XOR@Ivx4QZ>-zCspfL%b=93 z%ChPAA|N4bw-_U}URRrU?*Igk!k=q9Dg``>e8~mVEKEv}a=7;O_MxJr?opoF(Sn|m zRGwJdvSz@|M%Jv7Y>|U7`=_9+9a2lA+XNj+0Jo(_Qz=TvM-CN9Za_V136j?3hnmF@ zXAC;$)}d&o^7gL^c&kFnBN$)3j(PQ>W7Vsc=@#xchHCsVGhG~!&<;4FDcZ$F>8Xo|OvV&Bbo;}ypG?s_qApNpx%T?h zg)O9aTWG-q{{WxLmD(FZh{JFr=EW$qRA8=6WpMq$fy$V+{wBA>F7HOcMXk;FwCm>%a89I{y&v5WSL|jWpH{P z)gsA&s}=#rCZd_cU=mo4K|N}s$8>1I50rfJNylG$lHNBNae|_&!931@V;JY3YQOff zr)g2Q7yxvtl|HB}Ha2k}D%b~u{{YsiS5sU?DYZla8=c3!XU`4WxoGo%bB}7&j#=eY zjnRPz13do#ky91Q30;>`9rnPsRDsY{t0rYGwSl9~Sn-;HZYLR6KrlGQYv?c>Nr}VIczDa*XEg9I zl)2vHbh2QxTUj~Sxc-dO697rq z*0XLMf7K>&>q)h33R;#m8>l|UE^Xru=s@SvoeE6q7@k-Ij@dPg!6HqF#GHC@SB|8y zL>1R=2j@;QvL(qa3H;}VR!2QL{c2$hS5Jo^=dE(rcRy^HM-y?}`d0mv4z}VqY@Xy* zZaB)$=8%fU+TEeHZc`^|IqUWQRfhrU&mHRh%#jB%2FT9_j%zVFE!dA34iT}Bdb+V% zsSzFt=ZemnD0c@r`FR}rdeRHHkZ+5JJq=8i_8cXlqdSOqDkjm?cc>Cc8XqYX4D}|n z8vb&?$~xk%M{vvuBN(AU^(jRbHkeAsaOK<{0N?>vq}){t{J5;2o>>Eeaw(SgH&=Hp z6~Jw&#!fk=&|b{akO<`YI-g34;z1V@{G^Ydr%e7;z(__yj!(Tud6`i|jNs;>JKUvm zYb269G+i@>sc(uh1l(Jmb4v}$^0ABxprMBOrD2vl4!{1YaaJg^8i;{eKIc$7RCCCQ z7J4eElEl79QMcBMYFu9~TfW; zx$~3)$AjNBavKjYubM+(=BB%WQGmwaJNg>ZF&)f^t>jp@4sv_aBy+IXs&i$?E4qY1pM5Q?^4Y= z7{cdn(T;o7MQd`Wz0m_Nn8qaKy5_7|Mj|X_UDzM3P*|lxSvhZd&=I_Cx%v^-rp9#> zBty6{E61mLX4zy#kp|Vz-OoRVwOU(n6Lf4zJ!-5{#Jhr>#ZEc(`cY;~8*H#;EX2vd z#{!_5Qm_S?Pdx~z+Toe=u<^(>J;OZ9fH8qm({DnXb|8{M6g+E{#yI5uRhl%#NsPc? z$;ks8{{V$c^Ti^tVlXOHnqfDXIc}rgsxh;$($i54EE~u}&!^Lxv26rGE&WM2$f`HW zleQb>ck7O)6?z9_2pveJQ$`9aV#I3FZUb%xoKQ8+)2AnmF7+E=wN$sl~0LiY38jkawir^ka_1k0LC9L^2O2-lg*Z+%bWU zm0l^@L?#p}5aZ??pK*s%|nDzJXWs$6PN>2UmsoyQywl*rM7 z(KCq1LGt_eq-(fYLa5L5t5)p3Q!YC8G$m!BuPSK4 zyK*BNhut9k4O5w;dw{qbo4D(WnLO0Kdx^j}1$K^~U#(a~f#lqy<}|f?lPKFnMIcHEMXu{`h)TSXSgnck+a1>Ds9_H@$_D2aN+L<+}O|`qY16 z7Z(OO2`m>odsX?JVF5FeFi14jllT5|aHf>y)UInYGUH2V;x0!W$E{Sgw`RHXj|w^t z_0cug$V&~|eS23o6sS}Mf`@Heg)WKs3 z<^i97N*`d0R7*Y$U*0+ z^sDh(OOVpA1Nqe{7^T0L5IG0(ruma58Ohs@hLVa;Lnj`D(<4d_;lVhh5P2sv3<216 zs3ZwI@y!V%XC#06s>HHQx6V<&wkVZ~QbXZqnmy>H0Xe}OBt!r zkOy3PkMOI4+BApE0|TaNrL>0fc{*kZ_Gp_JHDhTl4{ zb%rQRQT)7fihLF^%7b~~dF#*PRHJDgKu=8MRpaIcK7doQW^OlSqaCyn7bEWVq%*)R zOQ8%0r9rjIfW#GQu5DtsUn(`g2cXC2S@PN0nkX@nPb*<<*D5;hsUwiFRg`V?r$Y+` zF{#db)FKeF2FW<}q@A`Kb}U^otcnQZ)`@besGR%MGoLi5>56$Mm@eE3HE%%k6{3X( zBsuj0n{{Vy@Tx*Epo7P^^r@QOIUw_6IVY##Rc)@GGJafvOVlNFPLW5CpF4-OO1@BC zr-4-3{L63yAsOqAl)h@makcq0IjxN%?lNC8Xt&08Dx7oQ-l~0}r)A4-3VNSWQcfgj znj||x=qozTBA>XJ;{=gP#8iEaIVE_aRz1&OttH@^J+2AHLFt;k2E|>I4d8Shp7k8; zg+M$3*z~GW?m~skTY)6UVt@$zs%<^QHy>r3Zgv?Yb`@q=qE0io9)_k9#9|?0%MJ?> z$phM-koj$)M&ejiitWhH6$P5dHO|>SqNSNyL=J-)Ph3?w zuO^n~I3Y2^9{J;?N|UbB3Jy(MhRNI)e#W#^%;kFwwY2*(Gb3)@&Remq7rKx}6Tr93{OKaNv5o_POM{H# ztx9jgA!C9_1B%WsQzp6*NgSqOmkNh98rWN`*>W2^5mo%zQ}?@fWa9>`3!g2Fvabrc zK9qY$a-$c}tM+JOW&mMGJa(#Q$p;EPV^>w}Wq{luY#wpj_32p`cX34vY#71gnwz0L zh)jYv1~%Hu-nI;v8wAOMNWrd7(Zt!FA?7zsbjQ}ZcoD7DZY}{{$Iu$MptXsuEP(=1 z)Et`EyAg?z9fJ&Y9<`ebNRcx{*;06>t4RL(!D-tp5z7{>&SjJcr|YRA8Hq~u@XfK7;-og0mkP3 z5Jo{YaBpJ_LeTznJVEfcPO*G2RlED({c3vb<}v9!y3of$@@YgMan2Ye;qmPUP-I? zzW)HjlM7MDk@En*#=QXJ^u=}-5csde8Zy1xKb_`oh!!Vmo_P8X$F)nd*x5BR%U=;cvq)5o(?!gI1jRP}$5L;JN#|M@0h!vjc#8Q1sl+S}h8n5VQ{x+G`{$ zywV%2W1qtmpAXN{HCrul4E*7Th_Qm~fGSzWN5s_GwR z?sx?I`c`j*ej8{SMZMMSklVlIh9x0@0DQoa_p*7-eIaF`cq7D6C7+1khVy91ib0W+ z+~ED;*!2~AO!#A=Xci3mJM6avh~kmAFj2<@@_!OdOnk)KvG~d2`~LtETzIcg((hz* zGEVmXS;)p43-b2k75X9Yo_Qwlwx6f!WXUzWD+>n&Tg*{`l20Q%RsR4Md@j*%d}SAj z?lkD;oB*a=Wwxe3&N;}*{{SMZNskU+Mg5$coRFX%M$&&eIW!#QbJ^$BQ%dmd!0{C5 zsSrOrYIBaj4(HSPSBPo8DDbor@4mQrk~cdt3zyHSUjG2ryH648);C@fzqZulDnt%< zAS^>D`9K{`P6d8~X=Dbsver@^b~cPni> zuGA8Yf{n`%Mh1ZNop^ZfI)zlvTe z*R+^4o0&|J!U0&AXK5U9o}c4h&ku_(TR~Nk&)QuF7~me+`c{$CLY$rVKE&|No|&lW zsd^*ZDS{CZc2=-xT;)NqY6NqE?jtY2u{sxg(x zIKl76eJiZK*0mi;)@ygnpag7m&wjNMrtU|xwv1``Kdfr{^4#fHXp!?HZWu`Le}peP zxx$W~we&xNG#AmOQK?8Ik{^^mVhHCT`qu^FonKYcBOls3P+$*~^NxdYJYBmF!a`4|Q`=oEL)Ojpl(N5yINtBECnNr zjO=`8@pHmMR9!DmeZoLYvM~c=4nQCi$?45`uZcC!4r?%vwBlWu!v)U4{o&|wUp-m; zG4Vv&>fMOtXdXrl83asBN0wp9+n)L4d+}bKt$2O4J$erh?^_v}cLN|G5u5|lu5t(K z#W^)EbR3jX@17m;29i87x^zh8V+0j*hhRxLBy>3KT%Cm94x^Uh{`|G8LdR-K#e;P? z$4uv^J#k%*qu>kg4|qatSmI?Ux!R}9^xckncdsnLku8XgOPvped~<6qy(PVa7!k5iz87#Fo%5c8wSF}GMZ3^^6zv&%hItkzPIeV= zMstIV9-j5q*?a-;?3WP91;xrDwnJ`GP6t!+_db}fQPTb%_-{F-hlq=W!)+ z2W)T;PhVP@wPevtQ{umY(_CxbD=B=1EujeE3gj}D0Fr;aGmt<1b@wi(uEPj>D>%+Z zaO7if^&Zvbo(s`zJUOpljUGuPf>m$b%Ar^sf(Yd29FBWdf5aP)7g%Z*H}-LvtrK^d z3}bV?c_gSA!sCV=2_CgKx-hDp?$PM5>K7Lm5u3B}uK*5O8>SEOtNo^s^d7NcP!5#haUqa|Q+)1M}_UpbJWk5OO z>)xs_xJfOK1^BxR@lPhCBr6mxgvS^h%gk%QjM?E<7uTSy5si!}e9;+voUpz4T+3U|h2fZ}9oUKawqvo&K z>-%yWq}3i`Z0=-T%EVw1j1lSd2M0d2`dO)cmr>DVwVa1QgaCQZY+}Aj(rmO{7Tp^n z7<2NkX3tEYUTz+6>-k&`qkeZ{5IF_t**7r9^tMp3drdktQ90? zO>TU-BSvO!JLL8C;8xIARy2cM8T9Xi{2k$M3*5Jf zG|60DK2gha7|&%~4CH!us6H;}+E%75bv2!%byE|PLV_CyfyPP4Uf3MhjCdbO@m{Z_ zv)E5O!r4ki_lgXi+jsQNPEWZR>r!9%Q{ra7s9WhexmGsdaVzAa9&^Ar2l>;D)_|3s zto1(!c(Y9Krl)V=%{pDC?Zf??9ELqIOMTJY;Mda-CGMfBTEpcjw{m>aUj%w%u6~&3 z)K`pnJK>LqG<|*_5X<}9nBr)i-;(9~RbJLD% z8DCT;qkWHdYaJU!v=K)h+>WErcKTNXs90#Txm)B@B!`E_a8IRp2D$Mo#`@$5bK%r! z5)urNKXvJlM^^e*uJ}Js)iqhtd*b68SOz)jJw-&LrHNNt5L@_f#M(xo9qy4ZxUnbq zig*V+VB{W$kVi_FSNL%y=Za3PYpBezMa-7j`5yz3#u#LQ-)=gL*V3>@Wfh0me4+_n zTL29E*CiI3Md2d^j*2_}H7)cVpG0|Hp{ZNiLYj1F5IX$o1^_;X>(;!(;swU4*0#`T ziM?J-WT?Z-7u_8gv&{}9Q`K>6%7-TMeGvE1Db9ofxcm65T;&zrxE0BzEt=NI}J?qVGVE)Xt zScJuu2yip2X_X ziViWnH$dQXw>`Zma%iqp(QYkoRk_jLJ86*wpy9{x0iHX9^)-#){{Saf)_bs*sU zxE$nx*W0ykTj|~qyt0--a<;K96`468o^jucz;bke6vVp2%w$lpU0EH3dcQ< zahlukm%t4=&e8Q9M6*ogyv5u>=NJl9<7(qP^{tUk4Dk0zp@)mx42KV#S@f~z$BcK3n<3mtU&r=k7nDtFq~wiW56uF4tzg4 z%r`oWZzI6#DtVH)RVqOp2nU|WgWomodY+4>YWh*rwDIKtzb?bIf$fh@e+uwjQrE?n zKWMkr+wD)Wnm~g9V?2R@#xQZ)^{#K>{{Y0DM?=-$PPvTS89wh)*aUpNdI6Kr()M~X z=X+hAY4IE27l}MQA=G8K7gq1SXWYf5XX-GjF|;pIag0}-_%p=1?un|rW(eoDoGOq3 z&fM^F0XgTVPkQ|))DqWTw2`hHVbtvz$xMt6dhuU3X&(x7of7UnV)jW^-p)n@$H|m| zm29t2KA6u@S>Ib2Iq9j@-+s*=Ch@EmI^24Nv+42#k~>3|XoGyg_YB78p#&cMQ+!da z>0b(=n#TE_;_3!SWewNOka2;K7<4>#{A=mYhkh^9Z*&xa948q}@K|)o86!Cz1yR;M z6~W`>8mEe_un5nj5Q#9G8HWV1J#%ba5zcgNDWpNLwohddj2EoB>;c{eH`1$jQ*KAzQ&eXjU( z!%>}1?q^xw4;%nz=Ego!MlgGf=Bjk{xYp-Ge`VqQ4ck$@jU;iwECX}&IqRPF>RN86 zp=&nr-l|6!187A643F;P8LtmrC&YdzPxwi-IFd*uP|F-`^9Jan9N-Ugn(8#`#n7yw zj^Z$v3G+OC3O7@X9^6(9SzV$hJ1x)u)cemz($mLN3w>H8Wsvk4BaXSq9Dn+&x6phE z_AN$VIB$r65D<6+IUbnw{A*)a@kfKaCv1&su-lu4A~Zk{E;^L}a6N@y(sk=ye?_{4 zTs^wHZjU14cveygOy`l$Z>Oz(bkpTNYH+eJHGhqM9PpLo-W~f)NqcTgazP>4Dvm&H zt%6jZj4~_d4~Rb$HMw;l`da;=Wad}T%DcEwIqrL7-oH9Lci{W|3*t_r4~1{KBlS|^9DE;UP- z(VU-=$@!H>L5=|GMMrD#FGfvDT@}>Ck-o;rX)30CftlX`z-n$-U@fYA9hkQw{ zuCIRqp4KH&spc>OML&P#Bb;NdM;!%U&^#@qSw@;wiUooIepAsv$vOIUuTJq-i}Xt! zJwi-fC1DsK6Z0J7Aaow*fnH~=_-^x3wT0l9%M*bh>IqPALHtMJD&n;qWcr($cDtor z-5oO6+;?wcF@*yiIL>p5iEUvjeb0WN64NU_$lJA z8sDyu;rY`}jc`P=v!fNyJ4&m3$F^_@?_Z`)nrFjb3PFh)X0wGNCU@T?n-nftjyF4F zpL(a^r0~szQNaOH(V$T0?_hKp?~0@2y*AIp0wj^Kn-u6b4 z-SOowP^X;!e1D#?_>)EO_OWc&mr#a_9E=bM9Q5zg`c}$mI}^=jc-O!mhB|M7^yyl4 z5G}-T?SKFTWkD=BCp?^f73jYgXBIjXcN#=8nS(Z6IZeBH$m^WrZawSIF1{vcx?Z;q zml!gJkq|1J60h>^#ySf6C9gDdr|*=ku`-8LVUS4sr1~6+a*c|NPm(?uTzI!q)x*Oh zZvzdy5O$nkbnDxv<6ha~4-al{ zJA+^n4}5XoioLDh!>MLhk1PoRdS{-5)*9aIsUyel4dwNLvsjAYZK=KE zzYxc$w31k<;C~N5I(M&-yiMVFuQgBYOUHST3^XG+Jm)zFKU{UKtq;ZCCGj7K&Yf?> zSTYr$C;^ z!y;{3W1WL{9GocU0~zT%y&d_@f z208Vv2UhXoc+XdZLeo{uSAm->F^z*iF&^3P=sVRNAL0GhhpJ1d7aTJb01lYzpHrIG z(8+6awDBj4-$c8Ld$vDhgc0gjo-u*X(!6`(Ka6anvXjIY&Jx@&Id7DX-kB$+DgHhl zDV9jm#sMv}=Xv0;V18aRpI+6(_{ZV4x8gkpJ9#BLz{mC}qkX=PMm1K|oVdp9~j&MD_EAM+g6pTqK`)$Z=EEMSXIy!$*69nvW3#B}6y z?T&{v^p>Y>q3c?QpL&TqF>RppfWrg<+m5wOJ{9s?2O^^G%8)Mv1>ji2nzvTdrvX~sYq13f|GjCZ9u zbYiEX)UDt@39gypXzb#FVrdX>Lc{>w$mH^IUpRQ=fX0ftKhy=f6t%597|CuU~k^-&2@PEv?xB znT`T%{{WU`3}9pKp8e|yLiT8E^b5})hPqJAz2m?fbNHX}uV>J|Xf09{O9|p=otJA% zyfDX15W_tB*UKLXY;@brV&>0Ofuxv_VCQh#kDDO#k?ZxZUhzMGukGNL<_OML7+wYm z^(Ub9s;1vj@~xTfdY_BOi8S9S=H7X3I%gg0obWe>JWqRXcQxr*VNaQI0**L1&tKQQ ze81s88!v<45MFPb%ON|D`mxw$iNMW$>G0D2EqB8&cD)gZ3Yr9sJ3J#)~5_04@P;U5Ls+SvJzx-h(McF8{ZHOY8W!x~qIq5jXX zeeB;c&rJUSO6~6Mrn%E((wbenl*UON2TuKKCnS-4%=8})_>V(r+e4B-lA{#s*WCIa z(!9^&zr)`Sc&iVn&zR#OnlaJHAdK_IF~|6DerEWC;^{sg-P`zf!tG|BSlULDIF>M{ z1mm3G`jBzjyYB{g)^8JN7WZ0}&~!MD&TW;a;CVgS6dB)!n7p zD)W`cKZ&e;AI9)_NXy|13AeJbk=2e^6Tu`NdB@OEIW@k;Qf+Q>n(u>jzXaR3j!;6d zRmmqAzymy&&GOtcjVWYd|dJNlYgcS9yx!~?xfp* z4&=uagBg!@gLL%PVzU z@Nteg^~ZYg&xigROBvQjyFOHeZB@r!fc56Sm$1~6O}G$F!EuZplsD6%lZ#E<`fEyDY`uyMP09AkY?y8Kb`FG=``1L^upvfGG^ zYbteZ!|$jgk8JhEYvfN1{0zLX@ocSsAKM_Am&#V;XZVTgK*0jNqr%!vpM-ok+J*hJ zk+fqnC>xnOZ5Zr3o}TpvlkrY?H8|v3eZ1r;=YV+082oWtL*X>*q3*MMGw_AZi)*Iq zc1avoq&i0c3aY>mFmOFdIqG>e<$fU1EHv#xT~EVMh|F1Cs5Xoo05CY{KPu|~0O4S2 zz9+(JU4){M>)Crz-jYINPx`XMT^NJi@u&E z%*5>nE4R2m=lm(Ax|K}#ZF9joe}{B+Z7mSU$1F!Iq;NSoCqBNlo$%vR)MVA#E0lFa zPrgAJY>Z&^HK*|R#Wub#i_4MmDubN*kFTwCUL)~-iQ$O;!!xSN2MPcu1F7`ls&F;X z_B)%!`yxSh7L(obF>r591m*BP_eufk<55c@y5P>5F_nrCZ zRDcM_Ue%f7?}+W;zYNK7Z3{}Jc95fX&_|%_iurd~_?4+?7xxyhO&KWs2P0w0&Nl)x zo`c@K>h|-)o-*)X+Vt7tCuSZp;5s*TkY_4?pKQ~P_B82p!8HE>jk-y+OO}hxmGWJ1 zKvojXA zp&WT|pE~BTVSyZchi|d1bazyErx@hm)m21AETfYE(?Bf0`Wnr(eGj7MRw&(Cy2qIN zRS2AJ@>meyX02XcO1QU-9I@d40F7kb2$uDIOWgY6x1~vSKX91Z)H#q%Tb8W+F8{;X8v_-s8B*2)F*gt<$xIJSW8E# zSJa^z`Ljr=o$->ar}$V8*S9rIR^lc;c`Vt<=lt+pz5AoEG~p|WNg>NOn0`aYaZQLU@wCb~914s_vO|%y zdepH46lAB&GgCdp?P9EO!qRXE$69oVsUGFWr!_F0S<4PU;M7+Utg&_41qwP?T)G*l zG+tm4jl}SC+}4D4@mj9n*$vqL04lF)h1Rz}D)J5L*MOJk&-uVtNj;Rm*v~ zK8CHzk;1#-BsWvQ{c;cF#3V>@jj9}upoCBZSM zJol=aRkSKIFC6_jt;M*sx4IE$C$9kX{#2}trA@8Ov!~4zp&>g!NwGoVDd3kJY(Lp zqGeIF(w#HH7kM2!Q5CI_DD*Su@>J|ml4_IAG}xME%0@ZK;{?^XWl3MnMf<#Gx7M_v zm;hM*UX)Ecl$DX1w|AEgl6E7E_Z6`euF3oUK<;TR@8h^qhB3$IOp+<2aL%{HMJMI@_U8zmHm{4eYVz-ZE831ZJOgGQ}Qx=cP(&UBE&v_r zlbOC;U@tX;CFR8U80lINHt?y)+v`h~?57^(7f6~=3X_vo9m<73oDML5ogr<_xlTZ* zJdYG(%+5~(HEE)4c25*D9oxDZ=xm{xzjBA^T*15v7(t!Gy*A@plSz_0$PQc{LFj8I zEkPx7M_RJDvz-=1#z;JWJk=uvp|?lKY-XuyelNfARl=+>c~POtwlL%$;cmwVIK^mY zRkjhJ`GEasgVeVahy9jF2KC9$HCj=Y5-G+9BAT+@G5}bQQBW3;t~1X=pF>wY^bUZ} zF!@o*tmtgz++>&K=kpb>0FE>B08gbdX(QT1V=TwFYD9A@kR)vFz1wPzp0#%FXkd;e zwqi-)t31JbBudjR2=wn(tu3TR%VWz#B$#@GwDlP+)B)jRgzppq~sj)R&?c(DN9^8$~q5Pl_be~ayGE! z8kWw%L$$WiW^XVJpmwfnP`10f)E3gvfW>-~fsFpR^sb%S zSqMd34E~<9LvLtg-#j^yNZ9_Kzn>L6tczbkg&qhZg5YJ8VZOe#Mhi=bH_Y#diOQio z1Jm`b*{$Lydmc#XRPQXBdu_756?${d1rnMwRPCviHJP6hhsHR^rCf#>AyW_;CbM#O z7-H+#)y+N$;(Wy9lh&6qdKGO8P{9zlV54gu2?wo7_DI?o4mzYPlm$>L3Slrz6rV zyqI|gdyi^!MFPd~o46Xm@NQk|^OB`BG?4k|_XFR}jVS8wR9hrjBNqfJm0w!2Az9ybxd0Bi;O43B zRfsoS^Y2-g20$AF0nTynTIgDKH7_Md6d89nVYCuYzZCsCX<>}Chi^Plr>)P~jL*w^ zdep?tuscV%gP%b}rDbzA?(B<~F4K|apL(5U7Njd4M>Rw3Lq9T*O$iW{%g#SK&AXE| zZ4sS!CB@Cg=ff!IDzswZ?o`Y+M!f*;ed}C=lX}I4Dmwer3o4ZgM+5b$O_{|#i-=+o z43C+5RE!X?^1Jo+tczAj2wQ;a6OG=dHK{ekF~DJr<(HqW4r<1l77McvE>LsEDxj1W zB8I^*fa==rS_G5(I$?w!XXqzKHhc#W?4o3&IW3+NH#6YNS!mKks(dI8B)|QJx zUW&xx`gQ%tBz9me3i)~r}d}H_Nd!r zjnLL?PjFBbB})ot+ON*&**7d_gZNa&F5_zI$hUB3pX77Lb5-Mub`oA+9X&p^J5J&t z&CjpnQOyHAzys?=MP+hYBHANDi&X9-6GS5&0PjvNqB02i!NK;Z+IWL4zHt0~DiKzT zDCxR$latu@uEFCr=&OtjR%Nln9?k38tV_OVo78$$!P(fj#dRy&pR(M^F~J9clUD5D zGQ%YIM;nhGn5rpl9I+IYijmJ0_L17u+p+maZ(LKB+7rl@rT7^N?NSPgseKs-fx+wf z)>W}VAu)ody>0&Tbt{a8=CMh&p>m2~vXqTfa&g>K9pSqn8Zg)(o;!n@wQX*XAI=ZR zGgDcZW8Bg%(0U3Zdst9_%fudRWJkE?oSuYxdv>b!b|y*Pi(t9Q9kW*9-y1W?!Ovf% zO%!n%Lyr9C)`?EbQkyj_ZEa)u3CS4;H9=O~T*(A70Lz?%#wu?*(iCZ!o_P1JR>`g7 zxHkxdl6rSPTBR$Y^g1GvMsX<&PkOI3u}2_@`|EE?fb%s?EGMt0PDQYgH zvOItU+mLVSn)&=bmej>quCxy5st#DK#I6!Io;doQ%2y;YcAnLnGQM;{e`8KWKt9X&U%qk zyn-nilfN|#w*{mDK?*TZOFr!2700h?3XHTT19?eXJD7FNJWC*ud1HWirf#0%74nmT z-}%*qx0zpjr)VRb^r5i7a=eVqbFl_N@7M}#^RSpA50|IoQp@|3g(N7cE#IB8jOV>3 z+Y?J7$qtw#5|6fb_2T3e={3P(z~%efL=3XomTG>p;k2N@}sR(SQpImV+8K&+w-THCuvAM$KgyKa0Wc^)lGH=n%J_SI0W5aN)l!dv|scNQbUep4G8p%pxly@H^wJK`p~Cl8KUWl6zIzCK8Rj z0tE|Q%vR(x$ce}#4%MG<@v8|ClE<&5MRg4GTw#dX0LS(E)pm|VEV1)})YQUhY$WwG zl4ex}hc%(Q&A?NP)^FKmXheX5xEaSd`qrqoFvS?iaBz67FVL&lX=P>$a5oQ8?L?;D zA(p^V$S3@2CTOCcYw@0g)}x+hlRMA=dI3{yMQt=J+p0buM%$Cn`c)sb85&iyQ?Ut9 z$AC!s_NivIXyaL!AQGBz0pAW&_kw}eG0>r=rP zBy9d3v^aMZVcfE?3#BswjlHSXG{?%uE$pRg=F)7&T`u`(A4X9DYhi_0~}P(X&mvSZJe)v zdS%2OQzAgPLHDTE_B50V&`T6fW+QfZtF{*&WQ9Na4~_3h7(B@-ZqIrW4j%{#*)|WyRZw$ z6^o${g+;ezjliGeZL;qk+KsQ*ItvB=eA9 zij~>s0LnS)XuhSylF&wx31!1>?^DDXnE5NWoby$IwZRtzs)4}uHKzi?EeyjU*N{C$ z4A%OAkcq#2%BbVss>v%!CgeF7;-gUWNA`ywEB)W6y(&hpAlh)Caf(;a&O@K=4ESO; zfx_dF{xuJfWzU!hIqB(1ZEgaRN!?;6<;nKbw2e%+00UBb`4kvNNwDc z&*4fjLR8sgyn;WMoK{rxOA!iB-aHC)(>ze)KG^rHr)eDn1G^^!+Z5#NEmp?$thkh0 z+@GD7a08G(8mH#{qF1+8!y(2$oj%Ui>gj_x+5qj_-mG~sE5DV%UgN*LPoZkvOvhid z!eeC08n0~?w29@BhF|4f61X=qrnq|vKlK|bgVN#YLZ$-%!QsLF4-UmBC z{Ah0Ci)(ghTSyca?StDjSTdE%9Al6wsb(V%IQFSxSi_WjvYwRHGg!vu$U?~w^H=7o z(&@zh^CzWf2_O*w4^Ao4ESC`}gRvacN>~VfFt2^;GWz zl4fScI~sydDl$jiJxTYc3$|w{G8U2Gf4iPK_G zDBzweVg`h&w1aPK)d47ED9OR;>s997tK}1l&iaZ`(7SUKhE1V@$JajIl>}xKkRcgS z+*Br8iKR%`WOVCNNriS8#s?I0YDArpdSM*P=I3e-Hr6fQlet)PpI_3T4%Z8Y$WVFr zrpst9KEB4P zEfFPh%M^vLNY_1wghNqZg7WD95L_(wMVCmrT&Mc<1q}*(#5&onVtqm zd}Q>_2VTOxC?oIBp|2+R($UM{JxL~m?J<}f$hqeMNd$YT0F3d+G_KBEL|Ruro8OB6 z01srim+W@Yt-IRfB&UG>m;*nD^R5@eS|qwZop<7kozlir$RH3lC?u29=3~Y=01tZg z9~J92*S;i~R^m&jH~gi@$z|$2hg^2=T&KiM5?x0{gxN@9n6?UXNe7Oe)jHc#rM^!^>Cj^@X;FF=-h{P-Q z!HYNGe_Hq-;^&GyM{}-5V1zBq5*RhVc`o|^##3{gEV16al-BH4^f=d$*AZ=?_$@(>m5f*x5lKNQ<1wQ@<*Z1ap_&o zsp5H84w9=UOb$;@yjE|C?h?~V7Bg(ifsMzWJu_ZmZ((n0tEyZ|@(|k*M?s!{JW!V9 zsI%2=uh>qTnVZcRC(}Isb>zC|hIM^o#Xe*=D7N;;_h^|XpYL?%{Bhd7QpUy`xS)pK z0#Vd9i_n(0ikMcfr60yyK3!yihuu6!!h zEo|lcRnpw4$&~FXPI~PFImd2m=iMvAa~(&{@bM-%2v!8)fa#A>)9X_x_e9f|bL)%S zdt1*7xw8(>D{VrJh7HdLwg>C$UJCjjiL}j0MT`==l0VfA$J4e)di&eLUkdciCq|0r zOp)e}K(aTOcM@@*%e8EHtHxR;gQ1-!@s>Dk({qHzKvB4my-o)_Q3keU#!Gd%^Y?=y zW_7dG7EiRW`TWd>$m~J=YtZccKd0GDZsd(*l=7v(Bc9_Tyl3KXjqR>BoBYABq0}w1%JXx?4RK$4h-u?oy2;yRmMO5<_9eNswb8 zV+41ndz!)y)z*IKeQr4nd7VtMFx|T+J8{nhSJZzFd~tu{y-{L#Rw#VHOt?QPj&_dO zIOOLU?OuD}`<*u5!*kpswdI_viHwV#+lCGS>JNWP;XDT>zohGoo)~1cNndES1)2b$ za%0?1I%l4o;}or>kSplRUmN@{sQ6RIm$DF^MdP%n@tmd{@SxxTK<(S#srL_rx^>ik z1Atv4MG_VfAtwP;pI&)6_Vljq+rvH`@s^gBpAvQ`Vi=vxg~ zwnzONZywm_2el~6bYoMR=YqT%R)uoOmY6_||8_Ul?fjg5*Ok%awI!L4r1(jK5xl zcExFbcbFq|u6;o>+kGq%sg=&uZS$Xy-q#Rqi~&7y~yoeonvvQ>a!VQ zm=OYv%BMKroM#>Q>0S@w%Rdv^c=B5_Y+Fq#rZ>Uazy-HA_lYM1&~~Zzolum>Z{WMs zw3zK|GKmu?$FS+t^cB;1XG_&I`#X#K=L9NzoRUcE@7#2(3vDA%+{VS-1CUH$b{+Hm zD`MYVmcsdLW_EN5%8)-X-!;(}c54*vbF8&3s=&6_XXb1${5c;=@=uCB8hKr&(=Er^ zW56;m%3mjq#126G>)te|tm092(FgC0^Z9hIPKUvIXNhbU>Se+e=tn&N0EH>k`!+Ls z-0<&*GHKdJhN04}5n^Q|n1L9{`^28)o=L@eUDtuUKdKYr3mBklo0Uk~R8gI)k`&|9 zas2D#zuHes@h^ccwA)V$NLJSFVvV$vW+8Koj#PCR9dTZZ;6I2uhLiCA)+^Z*O$&bc zwlWoL{lk(^1Ngs-uS1G%Rzsx=>?Qt*;+-2^n!@HkmL|$E`;0wQ{*_UDH#ds)i+gQB z-XW6A{C(B@IVXXW{{Yscz4)OXwXMfww+z{1A#Ei`8zti_=GJiU@7ZP31C3Rj@#ze0Vh)qFYPt2w+i2C-!k*>VAjVlbsnM^D3w z;dtz<&?t-o8EfP2+zRc!u8g zU0sMql!ypCfs8O=>(J-l9V_Wy2~8qtvJ&CKb?!@JzqqU;bnMJ0B(8ckr|}m+)@&P1 zfykJK1UDHS2PQWUj~R2BycI*>bx@M*pqc#p(?5F+snt@*dLbv$8bGGT&1Onv$lttc#p<5It9Ml1XAvCl6n#C z+w0P^{0Vh;ss_2eBxN@O-CUlS?m*|B#=OJhXNJ6UYvP-EEG^Nj`bs8DOck7i z^81d&*V;c1<+s-SD+aM`ByQ6tep8$g_qgmq>MQeG;_b!trR-N4sLW9~T#S(F#Bkh> zm?!i6KBf3ou1_a~;D*9QiX_Uip};H;IQ8ehu4_+htzd*!$jbP`rR%@i33sJ2oG$Y! zvnY)~#?k%l&7KA^$2H}?1G}*gaXz~kl6apegyU!&oa3QAy{qYayLCPvy1XSpWnc@O z0{A25J$n8%^Bty#abah1c{?fuZLGxL5;}GKF;1P?afOwcAB+D0Xq`9V{;oAY5L!w7 zpTZa|aPr0+e23;L4m!3wbRDbbKZ&0lVDVh5sAw`vC9xpGvoW)tp~4KF4`$~c)$Uh+ z1+;I7i530L&i$F*Fg|{BhCYF1Buf-S=20F;%%l)=y91{n3>wlcTFi*G zdl38+(R@+kTS@g>`=y0rPqUaXNit)0_v{V^JNsACx*vtVv*Q-Jql<<;T2H%=MIHS) z&3uL6PZ`hQzaCoX-XFNcH!fP~OAV3$xLlroZaY`AEys#HN8)*I;PV~}33f*5oDJNS z;{cwx_M&jKwI-#L)cQJo3dYhevs$8viWOkk+Cdm0f%f&TGCOYx>2A?2ghgi_TkVW& zb$$+eetg%h>3$EE>%&n?u4QFx78|mCjz>zFVX@IIng}Bbymaf2@T?^+RuF4*BT?|l zo506L(NpZvssxW2;YK*;lbmBD^Ik#lwhs^uX72w0Ro;(h`=nMUV=H~*pW-{BUhtHo(GmSIdY%_gN`tIft=)L)2%nd{wcE6bwYIbm8=S}XD4g!Jb|~|hs7@zYdVeLvb33*OBLZj zK5f346}hVTA63?TMw*mL7Rv|bQVA!n3iSj0@m(IFs#y3&Gi>azql~c!Ers>(k7`bC z!8Gk-w2IeEXx`h(!tUDm7|H3)Xx;cR_3buoIusFGN~d8{w`ufHIt=oDro7`y_>C_#`id-PTHPH;9rHw z;5pf@W&2CG5 z{9_$K?^s?h_<5^px&_1*`(Q;@JHXuKhalt7_dP-ADCS*E)LT9u@fU(&);=(|iERQc zwcPvgfR(^sn6`8CJ7uyl)~kG6&~;0wrjJj3tqgmu+4?CQoRP^S=NYeZ(Y!L+WZ=sw znaRl{^Yq1e=fwNPy189GA_DraCq31<;=7gJr(72IJg?z5jWw?h%Wq|^>Jr5Qm6GWr zPzRWKAynj?o*M_JHSdX}-T1dxo5b?YNp>q505BpSbaB&fPwSfbE8+)(_1zQ0Cs)vC z2Kwcc!iRy&0Kl>7h06eXkOpzheNpfh>r%b&3Tm30vR%6vdUxp3{G$l@clh2 z$9@}p9U2Aby1Beoje0_hg&RoOhTYSyR~YH|`oE72)Ve84en9>%*v~ca)hMMW6Xdrs z{5kN~!rnOXYHBypEW#XaD*pg5Bj!aQcKZG`^=} zABNYuqiZ&V`RZVbMLaZtvl|jY!hyj!89su(lDqNtr|}y@X1cf$DvW>tY@p-}@J({X zB}_yN!xo9hi@N$~UO+D7Y%a5BW;ouqf^z|S4}SI1rp@l-wt zoJDY28G!~}pc9eM6P}|uAFX{A;eXl}z}_i08g+|0Ud8t#eZMjc0>cNh9Ag>crKVL# zq|Sp(zSJ$ECiJ{}cm=xpXBE-S;Uw0rqkTH;NiNb@0Dflv9!Eesj8_>4h;1(Kyqod0 zBsj_G&#$F>=Y+!`?M`SIfo;YJ0jA{nSIpAj* z=b`7PIInd0J~b^1O}DbwWRb2CFk}*7oRORy6Zv(ob(2xBy0$uks>Wc*ZKEJ#r_z@# z*iJS_GvMz5&n}H`H;9S?$O(x#!N;i`yYXHp`$b$?crU?Ma%j>=Z*uB9w~*v*A9w-K zu>%Y4b6vi@@efjn{hLiZ6UIAYzI^fThx}3FZzk60#PPXib167p;GzXNC9pb-b?u7M z5l?bcx$yr0h4ss=Tg5AHs3Sh0;|YQM3(sEMb^2F#;5sWbnD?j+r?6*LUK7gI*u;UB$K5r*7tJa#>2TQdIRu z#z9>3k5O8COG%eG^6qZ_&XynWlW8lfT}>pCN`vGh<@tEZ=aHO!E75){EcygVC78?e z)3;1>ULWIch%fLXL4|a)D%{-WD^!cV)#&beC>?s|rE%U4@wTzz=25E1ZW+FJm5IjY z{_6Gw_Ne7{yBdwv`X0OCh;21%A*yScNty6R81_Ed74#*Kg7i&iPcUAVDi@8F+&*z$qkY* zgItfqIrJSaMbWPAQbv>JV6F22rv&lTXM&%E5_qCmhlk63pFcB$#ACl4b@Uz2HS9Kj zv%iWW*IQ7YP`2U@6;-kcIl|*PIqm$rw^2t%T5UTs(d5+EQ9gB~%Z%r5_*Rrxwy~$1 zc*6_H#c}@t3BCn*vp|DTUmxE6rs`X{9@MLRklWw{P%sEPfh0EUWb=+I%)EO3E$~l` zV$yG=H`-m}vd1bYRzidB$QQXd+v+puYLxWUeEJ@*;$IASd*W@Vgj$A{*~1|N4YYRk z!8jyw&3R6t@b^&gKB9FgVQq`^DIjy6-%fu@@BAh4*TS9-xQkBJ?VWtpW;3`01Q0fb z`^O`@UNowL0`H^$m2K!9^Ca6l9wwYq-E6QJ|1|5b*(*Z zq(p|`edGjkGr=7@b>oWk$-FT)h%H{z%-I%lc;$~_o&aB7{{Yv-{4wy`RPYYG_j6t!$j!-OI-HMOeih?a^6CB>wTcZk zG_*iTAyh6{oRUE9YwG_1f?g!E)FNSg$IOXWBevo(f$BfbE1|TN!dKAd{Ar?Fct=Vj zPqi|l0f5AEdJLYw*XvxT!ao%)>rQnz0!W8;@;+Q+1b}@yW3_!T;+uFc!>X=B`qz@! zcrM?=-gLIZ{c$aiP2F+nT+wJJeus$ozv3n2`ux#p)&U@jeS%qe4<2#3G1RwF>ClYk zyzAngr=de>73QmI6=dO@ugVC{0r&Lx;=Zc4_+>wfHAp0!MwY7ikgy*v4nYgt@y0qF zSIxg2d_AOVTCK;1M1d{goJSryua}%>Jxd&u>)MvLE(%LVVf;1tM!KH67l`9!jsjLf zqn0PGRCK`|M@ss;;#Y>DpToC9NsD=!J(yM8-2VWxTqnbeX4AB5T{bBLJP|5x0~yD+ zps#t;HG3;WQ*gk@IBnj&Kdl#Ng)2LslNa{4);=-*!SOYTdpB^(Nd41o87JG*oPM?S zll)n*@Sld#(@U~4<0XbdE-};`9GvwB^RBz&XNEM5el(uUZNBqH*#S5a;F6ni7v{j{ z85s29xQ`Eb7fzZheILXJ zurF{p>U;b2udRL__~Po*!;n1k2;;a>Az2uZ6^G4&-2OlVUH$%(@PFaHr~R)y5ZVa; z0M)Z(fg$57oQ1|Zj)y+A;Xe~Eyfx!18K%%~QsLPPK*+?QW*J@C!+#ujm&4N9>MkJ;!9kb% zfQ+7_r#Scg>(?}&5%^=_IS>nvw5)q$Eyh^n0DTAtt~v^rPeI3iQ^|j5KZTwkySk5B z(j(r|urn4Q3@8eq5_tMzzId^=)x0@8R+`CV-s1`zb{K)qI&oiRYhN4uKjOJApnZ|~ zC9(b12r^DjJoC;g$+U5#_=8kQriab*+$tTrzV`!;fBMyNO){L4R%fvICt24#LT%%L zNZ2`zbI3v09^R(6lR=5~nXYe69!!Ej=kxZ(cfSvzvd~vBfUe7f>FbK!c>EW4;t4c6 zd$gALMd!49f{UI@dJle;l%pcn+8+XZSkN^ME5xaB6h30@P?Ck60MaSLZ(dF?MRk7>bSq6{1h9@rNXXiw<^X~BhCi)M@aIbL zMwW8ht)a%UlS1aasOV_HS@HB)@HMcrnjT7 zpBQBO%aPo4q@9@&sPATcR6Z$dQ#6oWB#=7cUNXe&{{Uoy2R{5))4v5S^sQFlYHJ*A zbspilht7e34T5>W?~W_X^Y#cgqJqVYk& zDTWG9O!X(%)~J@xe7la`=$m;IGCy88Bi_7^U($R(9p~6BVo0_gb^)GibHkn@)cj33 zNFym2=-A_)nfl=3ypzWI{JtIW^j2ETep*Qy$Pf3=E03;yDsIuDT4;MWhL^+s7y?Ud zB1hNiPbWULo38%TIwg!|#>hM+-(tUV2decQKhA5+{7q}B4JvEv7a)b%qwo$R+A(fU)ux-Gd#k-PoQ0d!KWgBRQ{66?wr9*2i^`b`x z2G#%!o;c^!SH@ozdQp`!uPCEt0Iv%FKLp2W+X&w@_9%^N_aJ@2n zWd8t-d{5&qi*`OD*KStZaE1vAtZV=yZ+3Fk0+p zY__?y-QX%%_2mx-r;b=NYfe3H$-z?}@s# zrQWX~k~q|=#Epp9HV)!HyfO0gk5Fs&!}dtUh>i_hVtecfU6V9u}b52YRiqMah{nq4n@K@C2M%%L6gAZk>x`c&@t~+ z{P@g-5?Bvj#;lVIuavwR))g+wjn;)FM>2UsJk*92S0Y24R1w1(Trlc-^HDjIc`_fo zYFutOyXZ=1Ly;KiT=cg~EVzq4m8{V+uuY`rrYYt)AsnU;(xx!%R{9kgCRAPDcdja` z&gMcUQUR;eJ2M7c?fz9tQzwuexxwPKDO;%wlNHQl;2u5dyjJq0o?_vF?deWq6r^Ni z(_=|W62B-NyU`uTD;C-xF|dFARhc7*@~e)#P-VG_Lmqx!+O3wCpX(Yl#a=PBW23 zwwrKd-xDZK`RXZ?nc%RsRWfHv87m{CnGuIBvNYPt0J^_1@06&@H%Fj zwcd8;r>9DL*vl(oF5L6!Ne-TT;>EZ%QL!G9ht zh=y}jE@en$Sla;m)YOn!CT7T0{$=226fsc|ibKXhr`^WPz=8mS zl`WK+xW^!#m02e92bP(ox{cl)tTWh(Y9zy&;}=m`8)BT}kz4lCO*#iSJ9~=bEv>f8 z<$;6RwIY_{%3bN45J3DXNh=yjw6!&iD{{=2Bo5;|56-i^_#fo9$vHXt3WDZoWsl6b z;C9FJt9EwK3_cIcJJiK1*g24fRE8lV9%{4ZQI-3>YeHLlFoqU8n;hbu1+;LeE5KgI zifc!4bvd|hTE#q=jzP|I+clzPWl-)2806JUu(I4Ri2(Mk(3L506hIGX=IsUV21>bDy^lQcI&n_91eGJ`BGiZzDD$H5lT`VbYRAG1(|yH z^{81MP#MMmYTB$a1ga5$|wyAJQEqW4IpZIN)KbH{J3Qj!*s?sg|{BmV%eRuLLb2>abC zH-bpzM33gjT9%f@TKXa>rceSn4`hK+8=VDLOrC*aDO+|-DhzH3#)Mpv|>KN_R zA($=*ILYr+#m)GH#~bZ#nWsr}Ewl?1t%evm{{R{^AtL?7)67xiI4TAQwIUBOwm8D| z#aE0+CMA*cj_1=AB5E&_bDaH{G*_&47B3}( z>&Hr(JJT==Fv&c0s*>$FEuK0a^$dGagrm1KTU!#}Lv9T|1h_X6H{I>i^Q{0<-svZ7 z`D3VF{{TwH!`u~QBxkK$mE={~=qXAz)QLWXmv@gWgv6i&!Ov{f2^CHfLzV-er#r|O zJ2UhYM<LX=M~KNMKxoN%|jpWGNy= zwjfCzMLo+;QJ!i=!X8MdZmvrr$0k1-KoJ4^K*1w5jt`z1Rsii~@clVcoMW4q7{@lZ)Ml+(omo}GB6`3B$T zh!#Hnl^jb7gE<>m_4-qCvK+6nIu(}M0fcT8_o}ns7{=Jn3FvDjBDav3vOw$BqPSHU zVaObQ0-{pT&RQDcc*JU9Y_RGGraY}9h~2U}lhYNMZ!vblkC8_-J;<6cqc~Gml4!f8 zUQ0;Ai31K>0ekV>`%*ka4=k@4&TBOzktUIp<#C1f^{3jyc@$fn%LVFl*S2dm+R$8` zjZ-|55e%PkdY<%(w)uDmLDSZ=#BxZy9tW>nQ{`urg#!vXIIVPJRN1Lz9BxZZ+n_xw zc@=GUJR^2T1M6I|+ycg#HKX?O(s>an%7L8KLRKf0Y|Uve(+Q1jk}a<6R-N0Q`9HjkZ$7^xX#Jhpi1D>3e)wzyZ6pHIf5Y35lA#&V1@K9tkc z6I+%RP@g12=JhozF(=9X_gc(bozwip5A*!0(pdWkE7mA4XU<9L>0g?ACb>~m9~idg*B9FDY-M8-h?T!V}nh3zNa1RP_N z?@yN67RzwmIQe#90(r$r{iPgtYX}_4$J6Ue9QM&gzIF;T-`>2>Uf1nnz7g8aq!ZUX zjCRLd)lsD7D=kb_MX~4(B=g!iTO-=7O9MupWM>!{uLsvYKYT3kOcGDx4Ppr8L4g|_ zJ22w|JQMiyUJc{F+xy`6h7-%ahf%zhfc@Q^QL);4lFq6Rs3$(v?cw-;8C_b9CjLa# z#nX!SnfFzLZQUzjvDEf8r)_zV!3NSR^J~GMx9`Hw66(ugvhz)_>m|+VDlB6e0EpU5 zW>kQ^z`tPO_*)c5SMUy9G(lagN6ZrxTE4aP2DeoNwf1 zOCL&K3rEw?$>l-|5*QA&*~aalkarry(R@Xt>+12?+(k5y@gm0R#B550R-6xu-FYQk;v?>|0 z8>bbV>APxc6q+CrODMxw4duw2LgN*3-a#BABZa7quy!oJcePiR-u2hZh-ESX_Rn!ka#9}QWcj~@^q@8f z4l+j-ZQ@&YSf7?3cvV+;)-C&c)U*?dBWB>Lj1yVx(#C}|oN_^{Q%3Aj;v{6@hqq%* zw$pB}r+=F&gC)9fDyb)ZNs3Wg8P<-I#?z-5^`gQCNQ9C$=FUm2n~Qi_-L2pl0QC2y zv(wC~vANrhPvc6ayA^Jzq_+bk=B0{2%vDB6=B{69i5C{&5&nAAww9?Jc#wSEIHaSY zOG1mt%tJcxDh8ftqQUNX9+k5#yk1EW{{TA85!*t+u5wqPBcIZ)JCS07M>{f?=RBNM z{2BA+sr13EDDC04kTgSs&0L$x^HeCo9Wz=u>u^zbGht6I*ed+HdRBe^0NSRWA0*>;{p8E$_(;5eJKd?51d>K^v!5n*($_X zj#sr{>PvF+d66jK@F;4q3TCCrn0gi zBj{^3XC-1qJNd^>r@bU`m3A(8KbPT9hm^1h_eXP2mIjtGV{U6`uA|k8BzX=3;0^(& zMIOd90zcpg! z)gajfXLGR0CZkCjTXvm+OnUXrTV3*7E0x^X;L??drk=)R@yi6Ez{Uqk&6e7Cm1U3b zF#Ic0LKT&+4s-nK8>ys8JhV7ZUi6%7Y06I;O>P?6MhAB!r%%_KR*7JB+~*j_6zfRm ze6L(m>QDAWJAU%@@5K!;osuAu7JHF7`JGp4=deA0I=yLVyR$Lmde$0TpO+`CT4yoF z6&RD8=dB3>XI(rh_V|1p4m|~PzCpHPJd6kH`EAp@Ns#39-fUC4|lj&6@dy>9gq2u12D88e6SnB3uBw|TM z&}y)POn&I_D!r3WBq3)!joKr{ELlQ1e> zxE;Q=9ImS_7m#X`N}1W8m-^Ok$fquX1SPz{F<06^A{pb>v)Wl>Ai{7Dtw|e6JVrL_ znsyvsgZ#$00aK#({{R|fvMdaD55|?GirLjA2Pd3ktwhcyf8Gp?P@cLL+O^77?GTW@ z+#0^lLnVqC0DvSj5$5WcNb}Qh6>6%+s5Tua|oyR0+ z{P9-WNL%D@{VXf_TWJnLOdY9Wk1gC@{QZ*Az#wX$xYlJY^&p+IY<}>Iq|F zLlQa+)r(mf<8@)w@ltt0auu7WJXFcpNpve&L>D0U^{Y~1K0@+;N~<*RdCP2{G3s$w z+8L*e25cxi=dTr#y~Om;tg*;(Bz;X!fr2DBVOIsr0xv4rPJQbpa{geJRjpKrda|_U zC=Tpy&rfQ6VdOz1O@es9KhCM7Pb!s{pgF5Y{T+PK_XlrUnb{65+nO;%_V~a6`qVQt zGX{=A1N!^aFLd(9lo%ZaLXn1TvY&d=J6x;wE07iUw^iwiyKQ=rkF?2=gM*Qhew9{B zU}aYR9Q3P+Br2sJwIQv-_Gl!xcKf3}`uo*;TR0}R8-`R>hiIIIBP;$D9o@r5h>?r~ z-?dDZnv*83OK2M0l^NO6s@z_AR{?Fu4Oe4VXceVAuS|FP)i~@_-T9Loj^5R6Xp35E zQ+Yz&i*#?9vT{a0I(&#*#FVq!9vn6xFs7ywIyet@m?T8kMt25c@yg2k@=a z9mkfCO~50MN~x%%cF3CvKT6e8Ly|-h+r*Io?ek-;MDT?oKze#pRQbS9Ev*?*vPF+2WMKPnai40tB0aPrqd!`!Ey~=)3Veij_xe;{X_O#FImJVWo!-M| zY2=8793NV&u$=8Y`qSjNE`=Op2j$20sE|B>wm2PXptUMC*^}FaSwk=I_B|=>bkH#j zGr0a=PimzcQby!;Rsf2b72gcX7%A^m)3Fm;Xf@`RQW$3kj%gGe;|D$SP7^Z+l^5n8 zcd*ScWJDT5OXrhWM?uCe#de*;vrfDYDbc%_&KKoj#U<9(0au^tPxB&%*JA^b(AJB) z95o?dIyK1|$2DZQk}wb6>r~aIWWnJ_G{~h$KMQ2fUk_a>V;MVQY9DAd^r+t0Q1(o)8h7t_OAwC#bApg%>;;2L-Me7Adh|t1`c!6H0Ns^c*gl`e>gg~!mknO zo;zJjO1o9jkh}eyfL|FKRGu;qB$149fNPBLmx^Za?w|~Dw9ydCTcK75JbQh3udDUB zqP@P5$GMS6ZOy?x=iK^N3GpvV(=YrVGs^^S!3o^JHIF7P+Q4-0FaG+!Iu z*+=&K294plT%?&?fC*l>)#T1V0fEAXmo3VZ#*P1E&x~m0AnYR54UkuH2WTW z?vE<9@U)&CwrxUkz&eK7K;!byUO2348xIcZTI`-71}WtrK;U4M+s+6*`OnbTvRT^5 zbU3W_gPDqqO*NFVZM|0?S{A!?6PRH5$7l<^AJsJxIAG|6z z$T62;*C2WxD-XoB*81)Jvb5e@P!S;s_np7G$2bd&eF=i8=fRnS&#SodvP?D~D2mz%uMs!q^3bJ!29 zcwP3PHTRu0ynaOg0LB}s_vgMit5SSQ(^^}3W;+XjRY~jkjw`U2OVd18K7+1D9WkhBe48yvas;(l(wMF2x10zAG{m<@l_?0 zP+LzZAqF+=&=K#`74p`r<9`uF;+tzkx_G2nRJMQRta%%dpuix2I&${6ypREH+Sku_BEgIy7$EXG{3gewX1n!idA%)XxAiR zOJJ@`eBQtPYWlk0;ogC!MGcxDXO}tPq*N}qZ>P%hl4&b{6?^qEp=n%T3djt zo)S#shXC>V5!>4X;y#z+pNKk<)?t*8Ed_(ZpMv~%3j^Ifk zX*Rk0r+`7g=hS*vUGUC5YhQ}r&44^|{lTA`%kTIK_AiNgMvXi$rl15CuRLhPe-km` zLi!QuUg_ZP3Tal6L2qLk!j_A*N{)%_YdVeD7|JVi#ym^#PsOKGj`PCsq=Az%t9-j# z_*y487{+&l&rDa(nva6+^_@TsWtm~x+nC^$An*V^xHQ>rTlOecC zIC)T#V<#X2xa9ObdRK&av%{8FnuYI-brmu`OOT@>v(%CLoKvRy5lT{L&&lwUPw+O7 zn!cFEdFJ{2$*?yPI0_VetI!(upAAW%>b?|(F06pKDn|BDSdsin{gfPcr$OVt4_rrW zZ+aF*n;}GlfIgq4b^b5cwEY`K7O)ttnb4$uVF(lf)pP0kR+5XcZ98mpIs|%Fg`-cW z##z=@CPv_#`T@rPS25xL02S#PPl{Vjnl#%If;r^wGZhL#yblSa)(tQuHi)nY((CQ5^SW78Z z$id0rgYR3OA-p%19!8gOvttEpfJR3kel_wpiLdPEi9A20U6@|na~dB`eq-z0_paB# zkZOX?-sBWID^ z#ub2WIATXQ_Ul=yV@W*@k4M$CNiJ7RyC3OIou?dN@E1MF{#EL?zYH`h$d^*Nw;pP3 zknQTE4xo;n^@VldOCJxk8jMSscVx2+ob?|}cCMg!(XBMg$l13sw|wAkY<1v&TBynO z9hx|)lFv+*NYPd@$CLhgRionj-8LkG&kwsBLiDeTyi4)7#oCXJKFKYpOHHIAh55G( za$lhXzZ{QB`UAuMHni3wjU{#SP5~bEQh}XFHL2<8rk@h*)U`A@IVD(dPJIu!sr7G# znq9`3GfY*C>Tw} zfW#0F0RI4ptkP&o>De9w;tvd4_+BX^i+ql)g=5qc&eBIfE6_d*UC*s*_d0U6@3Y0d z!yb2J4l~!UT8qS&cG}|z=R&KGm}3MU-%=}#@UMxjz8UME@RVMpl3GNpvaDzcaC&jq zuRL-p;}+9M-caUN>U(Fz4R2ZStcuoB0AykNw$C6QNaS*QS2eH2sQBV2ZC7cKp&Qw7 z#J6GTo`?BYcr0|kjK62pG>hLXy6(49q$vjlw=doVfrH!{*wy?y7lEzeHw9;ukhvWd zv78TYO3F`_3tJvht$aJuz7G67)I3c)W;BL8Td@BCR_;|!Tob#K*Btv-#@-D5ptakr zS5vjJwRjrJVIP+(60#{=hg@;gVBmjs7+|#)B7zSN$U1R4Ft=qx8n(*8ubW zHS%wTz7FaaGDkL(3&NoMlMSKUZ%`GEa7pWq-D^m+lejdtZ2BYN@5J3lSk&$9uiMBn zNs?6U$;MP<_9ug1S;ep1U2KgCm5hAMPB{Lx@$ILFZ#);KNvdiwh^|ZKFzdNQYl3oD zJ6Q5Ef0cFGFNk$5SiRl7W=w@!0x)qa2GVXI zDkb}^*o=-z>G)TgcyCVBV)2?KD1Ox5*SCU%%UGV0!V>gFxq*abmAoJwTLleP3Mz|)|N&7K)8p~FPRnx5FV+cPh@`odg zDfxKmgP%}ETvOcHC1x*x{2JeA5ww`L+qVah$_5uF*1dr=?LSYMA!x=U7z=@e&lOKa zw4Y0cB$I3|0Njg)107e~pIX|y)imEIT+0|zxe5sRzf9AVm8{I%H9i#a{{X^`BH!Xl zc(cQH;w3VPO|lRcCddztbMp+~XNvnj9sn4EA1S3GAu0Q&n^6YziILh4$hXp?SMo035%oN`B^j=g&R6e%~W3EcYA#~%^2 zuLIaXF4&Z57A?3Woc959lj~Kb)}Yj_4dE-~k&s7aUZ?V}fxl=SSH;@zk6;#J>FjM| z3lqi(j5zAwDB+vFeFZ;8_?N9|RXRd*=afa8Sk&{KY`d=5C!&-Nzi{@+-uA zPw=w$#Tw0}-kAZ88P#``8ICXyIX~X~f2DnI@ZZAs8ZU<;&_%SZ6^wg4^BEDjB%hS} zocjL&^{G26BDvB>piAT3JHwh|iL)%o0&Px7B=z(d?_U%AbJg|F5qN;>HtYqU7+tN% zz`*)vn)-_C;YHN<=Tna5qlk=r*d*sCX&>G9&TGm%KjBIAyZQA002Nz9b_?K=a-W8K zA9|QeO-0XbPme4uykm83Ery+X_OQI3VMWUBZkfCaX#skOzz zNx3#*O2%+@0=OrVbCK=RxLCXir+>m+AhDD|r@`}xqheg(3}m)XUqjNp8%^=0wwI~g z_+mRNgf_A&p^_FKY1TO{2B2K_jfYsGNDGbh;38UfyWu_ zJAO6Xc>Cg}o8j9x(QxZ{@%)$vV-v^T>Gd4eH-qo=cCuVL#&BIo`^5A<@*@GNmd*yjk$t+D#_#;gjS6dKEp#TKdo7y|;zF9cm)p)sS3H z31GO~K*8s}G3)8=RlX`}nr;4{bE$^&b^^+Qa(@6ilj;6WT!|voY)9u;5N*V& zHsB6}{{XLDXNYv&N(~}Q#Zx07+}Z4)5^IL|YpvSa-2&h8(2h9_E9+S_+dWr6l_mfz zi;b)}D#HXHP<<)4vS!guSp5G0gW)!x;w={P>qBV#?LtPI&$vM4HyrFh03lB}`sbSQ z&xL;s;qbqR9dGTJT?TV0nMr&z46j^Z9tXEd{RXwM)4VYpu-hmL8OAYyJ%IEbE6?>Y z4fWx;MA+;;@bx~Gq-H{vwm5Ge-sl=Gf|ro5meJr8U%tei3gqL8)c8^2__gbBmgypH z>PZ|C*mLQFT#mEgdtHB8jOsd+k;D%%0IUH3f=+qPIpZC_AFO^D{4Ma0hBTCu?Lp)! z2r`vW10DjX@7t0{;*(mkGdqxQi zaB>g0u0zL~f@v^FAdswaG@ZN_$%Tv-Cjv%Wo^D=2Mh-!9AiB9p~Qr`Bh;&GOaM)?8harFgx`29Awv+ zf5KVfjZLPG3x~$=e7(#D==+hJWlm4EcK6;Xyb#M{ZhW2Vw1LLoab9Pk=(d_(tP=9> zP_s9fJDiV9`uF_mqwbLHZCT!FekXYDt!(u?n~Q^-t}*iRPCHju?{#^sf$hdNlDX zeWFRgGWob=Q^ptl(eIkkZdEptJfq>yi7z}&AiYR`bjk>RNWt%%b@d%bdio7s!%qj! zaPPF^1Ylru->rGZt?^Gl)F+bDN7#}sVgx7(F~$Zu*EM6Nc#BbzZTKa*QJ%bVeXE{I z%yV4I=Lhj4;j8>vzZ15gZDNVchA=mh#BIW7fyYzF<5F9Adqwc1=F3Zn!6a$G=tvx7 z`kM6L2zY-|(l4aAzkiXJg(r|te@xadh+&@N#7u3}zEmMKN$F-0cF^&E7W_@tw5>%W z(wy+1HuI1=gMfP1jq3jZ96VEXEbzElW`VzQk%9x9e5Hsv82NhF?wAD0dAui+nxv>jjm5)TwQ#_}=52tmRy&RpXgf$TCp z>9StCo{8|M;djJ8i5?UlAk;1+(=Htmp^Rot#jr^&kX3Q_ax#6Z?OPv(cK#FaL{>9g zJ^j-B^G_yN?<3~&*Qh~`0nfi+Ha;H3rD^ayQAms%k%BUK?mcU;)b3v5f3e#JWnqoO zr#_X>Ia%DPTF2$L#0`JO_l{$-f>>tb;a&RdbR4tVwV6>j@lv+(q? z#eAmU8RkK^r@8I#S^^Ia_|r^ib!Cp`+2b*l0O5lS9P{bLWe7GAy^bTpKNdVQtaw8I z0L0qO+S(<8J4(dwAb?KL2PN^3m)vvSzHIQHjivFwh{msfANo7|@vOKw+68J+z zhr)_H*rDp>NXf^{SJ?OWuUgVITQ;^^Z9w_5$T%;_CmiS0*F&ZQ6UpVm6(i`_sdHB% z?)E-i_^0u=Ueh)2vAvR8Y4HphCssx+l0H&@gdFsGsrwwqyEx52DjqPMij7!WmvG4jzHVgZ62WUpL(tE`{B-uZ>FV=wyQcu z+k(ge$j;%$FfrKUAlC7-S_R(7@P7zuT86VU*SGMweh%^uPVPFMywf~E;!hs8x`;Wq&6VUZL`Rue96nSnHbIv#io_h0Eek6P<(9=bbcz~|f zLagJCGtdvOOw?V4t-3xS@b`-RVet~`O;b@YtZ9hjf-$rXa!Ds7pQ$JC>GpTRD5cS% zZA)=+A5c#nI%5_2`J{LkRfAcE8w<%`j^13WFWv-jPp2azobg|A=|2(l9}jqT*Gj%+ z`#~jJaq4>!?3YP4obnbD6#e`_t2V$C zY$&~%h&=O})|&2Bms8&S6@6jj>x)~vd6r8(z%!`~xb+6QUy4#`J{`3CR+EO2hQW?@ zk;guR)3tHm3H%5D01E#AM;dB79CL>3amnM1o~FC>Z9Bv=$z?LEihG-I0N~b zn9lkRG1lczhnk(nrK8BPw#09gk3)`xcHr^#uZO&Cp!kk|7|m@a>6_1!%h*W+1mm9E zb+4thuNZ6ke}tb=(`{yvvNo-{85oR^P84RobkTfm;(rtP_%5#uw#g0=;gLefyHBP8 zBxnBsuU!e~ZwQoi4**4?UO}qf-!x%{8VqoAf_cyX09wA6@IH^E>sAom=!0Z`^38`_ zkMXY|_@Q;DStNHiB<$pakDIST52bsrz#(AX8C^m`t2Dnj1G;|>MtC^w#Z0V`jgoqi z_@Bi3zK^KEWoC~fHt#sE%tuUqJm(ym^Uo0cE%9!@;ww)OO5tOUWtGn3y9hz(F`foG z@GIT5T_!QEHPgC+7izNK42lO=_k>dSr{9$e3X;N7p?6;TYAt6BL=RLU3Jpiwc{{UqV zhJHRiFuA>kP`W}#BqfA^@11s(4w(6OA;>G7ahwuGex}7^27wA06>=9F#y^<;zLipy zwhEC+-1HedJEiHq9g_ax0tJjSN&qAhI2b*7>?`HZ7+hQFma^+t11lG?BP8GqC_Q?5 z4*XYX@ekreb6Q8EwZ`L(yK+DoIqCQc=lngW_;*paZ6@w`?ix{tiTODH0BCwtE^W)@ zy3pA8b>kf-PY%IwkSudb#K@>iGMt^Ej~wHZj-IBxBjc&jyg_SuscLtk%6k>_BWifB*|qMjWe7tPfnkOd0&itA>l6)UbU9I{#wKP)W`tjWMx6> ze;#^OEp#n3j}QHwykOrGbct=YyogxDiz*e~6b!HjlBai2ahlQim+;S0@b%Q%g}h58 zuuP~R`GEfb60pV&F~J>k(~9&@gxY)_1Jy6Yl19;OjdBPiN~G?<{t!Xw?OivGelYk^ zwLzdv=+gm)1a8KE!!$J0&~4e=_##MrMdLJI3&o{8_VTF=UNY(O{Mq1qxW@yiu4^R?hb_#%F_kQsKCnS0QwA^@n0=n z_y@*1x5ReWbvKM7yR>p4!Cx@)59V{n=R#@d%S|)ee`p`t6GO1m&V_HNgMP{vYy=r$ zE;5co0;e1h4tVQc1MoKTFB9wc`o^<*_tzIvEKj&?Rbi8r7y}LT#~2;!vhlC%cdB^D zS50ff+JeJz@{6UpIY$Go8Z{*t0e}je`iyhZ>3<5Xz6{501or}cr}tzbLfAc6WbQtu zs++Rh=&2nnjc*$M&UgMfnmf%I#1X>9%7MWOIO(2qp4~g~&i??zzl7G_2S>ZQg>G*g zh7Q9%NEsVY_ubTzGuzzz?}mI$clKqBW;YqeeNA){_!q=?avRu!$qTOS$a;Gb>&;7T zy~he}_h$}|d8p~KUC4zBslYsRAEkV~;w=|S@r~Qt#R-(8g~)zJ;(Bx2HTNVsYQ<>w zS7fPSwYV7{{d(}Nc~6G*CbZME{mR2DDvh9!dE5Z++moFAYbzvlMO^t}Jx^NjuD1=n zn=zi)f~k_qSdIV#uND0e{>YcQhNJL%Pt-3=h;9_WlIJ2U@>O$=cHJ3VjVz2(h}reuQtOLZqXQh*0s9zflkc0H?i zCCj1iae);~Zpd0=BN=l*m>?!4=OqbjmJs-m+^$=-$Fe$gEU> zz^W5D5&1xO;MA)gUoFK~l*bza=b^0Rn_3kaX=57l-I$nQ`^K{L{T};Cx|ZhRR+LN8 zNjO}8bRM79y73f9`Q3&;r9SFJlzB{f#~7s=b{?h+N_H1uMtXNOS)#b|#IpV0tzCGd z2M+lQQTdJY1vx@7j8?E#DmrS$q=N;HLFvUTcINH;*K8{K)DcMu+=TiXu#@>K<>MpP zoR+0UtB(6T2ndXm>P=@}M-)n8LzX>7Xh{1l%-O<Dlq3d`t#@ooaRHQ3yj29ApE= zDpQ13X#4v6Q{zTEi6^C1ibQKMD)ZYWo$O~e(95|X5cBeu{Ya`%J4u(p-H!EQMQIxY z@~bZyg*NRYJ!!?axloaokjnd_W0E@5${slWQ;ZC8{b^x5{%>Wt=I!f%)J$Q3g)kV*#k04xl!ml(~IaWdKwbSu&(vz z10)K~GQGozm2gkt)~v(2JS@wc^r@|545YZ)dV5w=K)lLnVlAfgokm0KXPx*xF~R(*Pqh^WIXX9` zQkWxcD;p3yj)Uu;TC}gRJl4=GfSN{G_!;9p>DSiQ$@|qD`qc@p3?t=VnDjoB%OP_+ z`Pak{-G>zSRt{@yfum`Hq+sW%#Y;485~?>0{B7;|({87b+$umwRqKui<5kI&vu|QY zV0|k%Ue**sNY!Nu>-f{;jyV4Sc@tyQdgh;R4A%?hvq#$7D994lLLZrvZ9dXjLjIAu0kZSAQtBUo_p0cDXVCWcwx0dWZZMqf!7sqN&|x@0Q4178(9%V#c-#Z zis(hK$&%79MHG{;o`|z7i1MAMfmKdkO@#cty{V73Y;6Q%wL5gS=ww(-fQ|?t1wQ%y zlp$Q`W_aPU2!NI(bm%IJ!mgXk?J6rSJGplU?07XajUy@c^{cbo(Y0$95>Xt4s4Pc* z)W_5kHwD)O=kciRk)ce6-JX7etIACBk&m0!lq6-lv3d*nE*m(&9R*0zBqXx~xxYHe zj!7VsX!&v8wBU|SLQ%gN1G&aUOD#p;LPofW;04ns-m0w7{{RZ$Db5Jw{cB2VBnTiR zCJ{&=NP+j3pH zmz+mtg{2wCdgmv&Ge}E}WA4@2=9=M*gyf#SfK@3~f`nBB4z-@4eux%GtygoB%-_RQ zCuy!`016#b^s?h&VQ()%^uC3S53+~0)Le?zNJbe)+p%~Sm(AqD!u)%a#exn z2OU2SKb2ZDvI8PUz;o_$YMV5KnFd3jTD29qFJheWNpL|q1EoNY@%*2{ybrBhMU|gu zBoo&?D$7MK!?i)j`ORoM70lP~wId6&IbwS8=~rTPFTKV=>}n|DA|oUHDq(c6#8trL z^&L%S?!~b@%#lLOpDusMsy6Yj*o@Kw$EYWa{uH~#%ps%&RQ1T|_*6`QuKbn@!uF$; ztw~+kr4O4OxodE8dV^FK#tibKYbK0kl zLawN%l5zOd?tH{K!6T-7RkfhDmDyex;AsrZaHlGx)|TQoMGGHqUrL4-^2=o8^&Xs5 z?RK(2Mal!mKzbkRS?OyH#_Y~XRAD0olj+4-7HPz&d0t2-gITF7mo5lXPib0kAkQR> z){8`1j+z7At;EJCRK`aHde)g~Ao&~~nZ*|RZLO#8=Q$&q=Cw~4=$bR!w4MG7>s zO)CXR)l{)8PXGW7O*(Rvtrd1loMNvdskRWhnPfO8*NULmL4S9+3iunvU$-B_dz~J8 z&jVk_sd-5ADn@omGNWxCTD}g}Ck3&^eB$$ci2>+W*9Rc`iucx;B$LWj1O2M_oNgL)WaB;2>{FVOx+P^v zBgtH_=RN6SNRl?+_o^8#5V?goz|A4Kh@fqS_Tsss`+|0MBWPKFeIXfNUi7f6go~}Y z2CdI~1ktK60FJ|&Z1XehNQOf2e!V{|RdT!Bj$L&s%+MAg)H9L!RF?MaVM!z;h2YdN zTY)P)HZGWX4f_Azq47} zp=l&@@~FW){#8_{%2H8|>{6(byF2^MMp$H4$OxyBde;x*&x_s<@FlWb_=i!qu@ZgJ zJc}7&oMl51n*5&liT?lvF469F8FcT4`dpfymEsw+fHeGJ-&DbQE`7i>x1(brt#(HA`hIy~gEnDN??GxkWe-}QX z{h4u=SR{rZBaLLqAyI=K0m8Y-1HUz~{{RY$Te#HiEPN|vajV~^6fL|hAm`;S%Aty` zdY;|u^q=9+>`!~F_(inuh|ML9+!&2Tt42_+GuI7~&OZ+PSLo{rlH~N)GD-J(x9E>8 zRj*mTSN9*8^Z0vQ_=BWHt$339<5rrDYeR=cu(lDTOSQ;QB#{3AdE9m9B#dIasJ~|4g(xki z)HKMaNH&#%QNAyfU}YOC$7zkXE4I@ny zJ6Fn&EwgCP$}^DNK(1>{@LsDOgx23-gVP126`zQP$y^=en(^5GV!^q3hVf;%XpOo(Pz#|+HS4YK+A2q7e zX?^6+C97>2{M+ft;|&+XmowP0)mPULm-; zvyK?!SngP~jO9*PIXNL%l1L?wp#zHjdGW{WLEtS$(nb$8w39h?dqNX#e}pS;U7n*E z{{U;Qe=xo$e#yTb`~|MdK7psUvttsmnn(}IgNzb5VtMQc;O7FpycZK>xaaJmqMPoL zW1R~0m%iWLeuex2{kA+6lOTZ>i#3vyf@+t?LS)CHMDL*q*&b(DZ?RQ&tANm{jmLn{yj%7muuiHdsTzX zxOI}*=eaNC#kU?#)572{%0V2Hk-!!5Ty^1mY0-GBzh1UI9KSY_mnBV^`qys?K>HN@ z-Sg74_HrIiq54$|S#7SPGsW}m>+e<#$J&=}3~IioCcgr7+IpW%rE)nj66_pv^7Go3 zIVF#9Q=U1h%=YE-GDm!l{{Z1oEUwYBsQQm;nXbl&u%j|=k@86CQHfp|%uX^7PWYyn z$&F??&rhW?IHdc^IXv@I6!s;u)?Q9Aj31>>Xy(ur89S;gdA?$^Z~*;k#_MZqhLanE z4)ov+>0!?#X&%qw^vA6>Xyt{4$s=eS`_(lO{h&zagVMIIBe!T7Lvz}l(jD{}Yjtlg z-}!q})i<`%+I*?3%M3YjJULb^sVaFn+bOa)^!s=WwcedMh|}=sMPo z?oZ6Us7>64w9ur^ptep;MvIt>H{Kol52vj%J(9D7#(1QMbQbK={p9<({(oAgmqA^Y zE(jK;O~7NC$FRDQ?ueKi5r92v;R5CrcFKX*H29J*_(7gJfl}kpWr*XLKbThlaaZJt zH~?3~P|B>?$mv95sNJkwf(Y0!gy5*i_p0utj_=}Mvf6m>ViLxibJOWn@55b2v9Ag_IH#nd94an0jw!TiSO=v?Q3?V8&9qT!43$dRPVnv090qOXEDs&PQxbmYz{xtce41aXF z=M>1MmLT#-m^A4$)rn=B{{SjS2`3=+r1Ow$x9F-k&1HR|uVusJ1vv-SrFgu_O9RN@ zQ+fr*l}*g;k^#m=HExJ<(XRubq>OXBl3%IPH7~S(RNAvJu19#w1{MruTCmgfTOCM zeJW8(*3iSdl4qOd2P2V+k^s_74B5cP8Lc@bgiqxa`GD)%s_k}d%YXst?Nc;GuC*>@ zB1e#NG5J*oK*3O-%B&zV$OC++I_K7`OKmgFwj5v%rnHQk(AF&?oG?6c?mhVCu85do zMC>|K1Tr=xIV5mu-_8NtF^<%mVa$s1S|o^HBrxOYn&(;zi$++bV&RVmzCG)#gk_H5 z*QG-sXyh!zui7oblu$`x^ToJRBRp@^jaBAaLDJ8h`{KamSKKZyA;g9J_bqv0jY9mXMyLw`! zw=v~|5(w#0Mj{Mj1Li$*{OWOLGri9urModj>tf6xK$*^SRdJF*;ZLPq@}qY7j~MGz z?xK~HLu$hVlkZU^*)w-4ByqGT^Vc_lQUP!aoY3aQ5>yKu>rR^PTZs}GN6G2$L{K}=wZ7@+iqVb>HJdV= z9^YEgE{1YMjsnIA$iVz6tg`Kl7|&X_cRIQVVY^zu24m7IEkoPB+(CgN9}GY2_6 z`wwcFUTbpRSU4EXS2rlXIUE|9Hne0ttU~h$8Dr{yT38J7wp4}3VcwPC^RVljo+?#hN{nOT)Dj-Wp0U621T1g_2QJC_ho@&NCxV91V8k#${h87N>;8Ujh5pcE%$wmXxt?8 zBDv_JzhPAyTS26^MjfoERi>W~2=wn)BavDF6@F3e{OU7o9dgZq>GZ2`7{ZlS&$VXL z+#??29ypdg>%kqWwZxK74#I3tR*(pL#cKwjS6ZR7wp zF@aDbLma@%*RFbjOl6R#&UK!JY$03cMUt$|BI+N_6_IrONVBVZeG$UKw9B1@LU zK(;EYDVA`ugN)XZY*N1H(`jR87SIvXsj7E|OJwr1!Qk^%rLkxy`%|2e_i%rm1)4=& z{J(E%Qf}lpx1nm`)+oY^ka?rroWJ4*YMfLGY} z{OQNJR%nr-e=7iPIL{qx#XdfLme1jp?yIRb$F@a~5T&1Xc7Ol`@>>M-8Oh?k_6uVp zjf8yNx?;S0_Jfj3UxnJ_DQuS#C9AOWKI-imB%UxakUhv1R=LHDc8;gv7Nz2=R@UCx z%B-kcpcokHtU6?Nu4lx4GSQ&7@-8OZk(m$hf!hby+P-mriP~~q$hh;a3pU{A=Nan2 z9(d0guLJmj@pATm5yj!V2sXe|cIL@uC%DH07$d%Yt3^)7$JcjyGwUl2Yeaj=?X>Ti z5wnF~myy&ry>WJ55wEll5!_j8HwVbcD38%e`?xskit`VL{wCGd<)V%l_Q}Cw$8&qC zo-jW;^vy$0@cqossOqogGMt4U!rej7x1|Z&bB1v}k#A(zp@>+zZjk48c-nmj<6Zv% zjx+_i@Vq)+kuJxzK4fI$mHsUB$vMtz=l=iz>vpZHiDHNwbZ{Fa3}&f0cc`+6lx+;`6b$i>NF3G<8klnGeBI%z?PR0cYOpAcKnDbT!yRfZTGzv-{Uuly zGQBWC`s8-1J}~iqkECjHLvGu*?p5S=>IeHZ=6aTss_W7T?4$){Amp5F{{ZVzE2XJg ztx@Z9Ne-o_x){t!4q2H;8%H@Nxa}%iG?;1v=X4;RcMNmF=iJw^_;rZbc?C63Xt&@$}@Y8Kb1O5K{@MYbUKE&ay&P8tLbqw zOK!MW7FA|qKZ$Xi4t+aU!`>(H9F5>8YXz!dz0JRzO~Z4C!pxoziYIBMI^*KHzS;M#&Do}V16{5z2RNAc^9qx zPvLuS_?PN~V@e45L1K3Q0G>Nn%bLfAZf(42F12?%28cJ<+XJC&sRsiba6!&1FXK0i zMu)A(7MUS8Q@Ihx7$#4XhHv*qIX?Bn=^g+YLFK+U@h^gu#6K!}cC!m9l_N8HWXj_z$gh zTAzq4ZA7=XO|=u#8PBc_J`Fw#TNTpnOFF=VIOVwDli%xH7m2(ZKZ^u*`d!mOgNM(r zzqqWUF03G|&MV?4gzUZ|!v?Vp=h?0zK(Rjs9dn#9^*sUYUUTqn4PyIRxzkcMhAVd3 zSx3saJnrY_JG*o}{r->AeiYp3J{tbazm+aRlEtD7tGT%u-QPTu-n`qvkj>%G6)ut_ zC8V1yRA4a3&UqYTJoc?4B!?}mdsO}gmsHban_O?U7|@tle5|ZyN^-jP)_(v76v8ANWsP(^~ez*~X^_GM%LvPhLj=la9lT_3NK0@xR3@yQ}BZY{$%V z9D^7DFu@$>j%&HlY&4GyG>%{Qr{|H61d;3NYtH;#rRbg`)u+{A*#wsirIiLSI0cWn z0QSWz+1%PTNZ~v`;Mu%I;Y$>3aGI-rEK@ zz{ntAj2_0gj{xac8eQ~vHtMn>XAF5{2ZC4Jjz1dq$!|32pp=}F+?8(lCPKRa%h1Zr{j^F?|UU?lkBN@+6=cA%%`i%Y}weZD(_@D+>ZV6RTO0D$nb3w zz`iLHjbB+ZIgz~AV%vhAa0>qb0V9lKuhPDb(O%Bt#w!cViBw}P)Z?e+`PN;e+wK}x zl}en4h!K)I5-Tdr@8s6J%a}Go9F%Z!00)e(QQC#B!A>u7_l!OqTWcw8sn02mt>g>{ z0|a#=`ik_g4x{Myh-{-SGI4>7eSN*_N?QvZUr&WDWnI}AUBkV4riliFqG`Wl)Mthm z@Hvr!jCAUK>0ZvoJ0)|+^?U70R@C7~a~x5w8>t69$Q^Oox=m9<(xTENZ6$}AP=;n8 zGjZP)!}zDhx_fw%2rQ#fYRpNMPBNn)@s8XPTRNtrXJw@gMrj9^z#C8SlZ?>seMxUk z4~RTT;aiO|_C(paOW+a?M?8IgwcTiTlK6W{`#@kPA2OT{qPssDYq|x+yWU$jn<(Ig zA2R+2ui;-mY184db^9o~uYC&U`2 zp?zm~rWiwr;W;F>M>q%6*6L|G-QCig)mv!Le(EJVnX}0x=Z~i~%xS(5)-Ua%)HO*% zPZRAisKagmWaB4lk6&8!O)foR?)DhMb8U<)jDBy#XVaQ0O4=b+t9^=-=~|EWq<4;0 zdmQnT^gfk|jdVgB;EoWHOygQ*wujtXCjws8PmpgX#$s?va*U7qH?IES=`lMGH^iWA@cOZ#; zmS)Q54JI2ToR9{3j%ms&*Jid!U#aar9?~>V8S9qzcPlzZ%FJ>6SOkxokOv(8Rqr}? zgx=2Ku43J?9Bdq9kESaJQ~N)K^acL_gl^o&7$5*LPnhSS&QB!&07~gR6XTs;8{2&c z#CB@4vXkay?Sl3OY| zk8f&~3lEyfSolw0xx2K7&b5)+X#ROyq1~QO)OD|>z7630UGYh{-1-41Q2Q0tOF$_4+^I%e&1#!uFaa zpv-UujBQW?#s^GyttOg7tK@SZ68<*no)Oai#Vx37gkAZOwxI(c_Q^h&>s%khZ`wBZ zQ<5v~LdqEtlLW+BNIe4p*~WjmN&40g$6tjScaEUC)$}XFXK=_%79pWOE;g^GN2Yl^ zcCR@2Bk+S#@cx?>_OWsu!!PcYiOUWK=01m>z0cyI%A@9I3tP#l2m5H9qo zLR#stMvWLeIBb2=dE7}PoMRm^UiIU@5$X-2T51|hWxVg0mf(d0JnhH_J&FA5;pw~s zb93T(bw!Y>Lfe?f@|Baf2RR&PKaZt-Hy4Z~)odfu?=}Yu^O)CcZ2thnz!FH@dFpF6 z&|9&~+W4Qu_WG+_YLKMRx&7F{8-4iaC-C}LS8L)sIq!_Oq!g1lT<2)?blxN;meZ@c=Kf2)!bwS&OTM{KsBoJ6lQy$h(@1hq}=Kj z){)%#<7~WSGK}MlbAoHNy~kR7Cr{#nKWQ}yaPSH&8KjWyo|YHwwKACO{@tcB2)8RsWGNb6I3ZZ_|^_N+RV zhJsllMTqPpYjrE%fO>n^lP|)3KK}qx8s&|{d8)g1wg_yTl21~7^Inbc^Iq`ZjeH3Y zi*?0cu>#Tkq=K7_U)|$&NgY3@HSZ|F@ zH3!#Y?Y|88R?|(>Be&VS9$Cp5-Siv^>P_QmmcL{yu|(J=F2JDIlu zpO~CvkJA)Wmvb1sPUl4N@@SLWnIt|{!ByI%Zesil4yTjOD*ph*Ejr`G+BEuI#Eyw8 zgTdniqMrEAr!|40cq>ZKyj2&7wKtMm%P3yjIG-CLXZyqeGDsW)oM8Lb*N-%d{cpnZ z$E4~HVRC+G<&8u3BLp1abJw;hJ#JJj&1QJ_fqXAFh37FtJFwm6GMog+;1S#r*ypW! zUZe3|TTAHlyG7i}c9uELc;p{$^~wA_xVF&r;i7n^0VI%?4?H;~$5PF><(-?7ax}|YM!S50vC3N69>KNky6Wj{$I}aCV9u2t1 zh-Cqe8yvCc(*XWe^!|zCj|l48T1?j{h(_W`3-W>2uldCe7IzermZvSO=&{RbzDU50 zhFBle8u9q7G&Q=C8%c&xak;W^eF6UfKDEt!a{Z&UYYjqA2Y46>O|bp^=kA9fGWlc@ z8?QO{^ylQ8kBOcr@a$3R7i;FjBkgy=J9Ez<9;cjk&%YF*9;2qTJtJNCY2qDk#NunZ8_&B-lq3uNi>c#NbugV;(JqNdn@@dr~s08 z9(g;z$C^q09B7^mv6BA)PeB}{{nEtq>N0ra(!D=Y_>18m2WYb`&`Bpm4dn?HU4b|R zFDDro9DgeK)5Sj;{7K@U6siS|-pyBPM7)x7!!hi@@qxh{){2TVgsr*mIv>VQ3F*dN z3&ivJQh97tB9`5-axvE@^5>o_H^Bb@5ws0+S#2^nSzc1cAnWrL{^OpR1D+2`^1lQ8 zFQ3F-FS*rjh>km)usGbub}|$W0PW98`isK9vq`bOI=Wmk#SjD`;kWkryNI?BipwX;PUvs!~PPri&1agTNV+wVtQnKYwFM1H&mO$ zx;?g+3{pzN%!wIxl=A?}hd+200PQL}9M|U7x1{)wOELNII$YfR(7@n_VtWkxf-0h} z$&^)(w{=g5cKTO`yxSHjD~u>OEDk&MALCiN7Qc1z7fF{$xtWCR9vOoCrH4{L>7UA} z_-EmtiFN%BD11o-wuVT7WnLa5j*LjaZ)|%JT?dA|53YC%#3>JlV>b}pF2^%%ATpo4 zSOwZ~kyEv9)W!+1!gojLHmmVw*HDu0Pw?b^Y}TAU-V~m^6VvE<_N@N^hF&eZ*Yznswbcu$ zEW1u{2T*^;xvztM4Ab>32IEml9sbmt)q(rc0kj;RaBE+}pAPlk1nL(z+MIz=ve`m# zSFSn?;}o0dZxo)#x@#JhlR{+F7z6{qf3NhfFV*#3A70apdUx)8x7p7bKEtj*opZV$ zhzE|CU0JDhLU0$Kpg!ba((8T;*DT~Z{hpludjPRSxIkB?NqqMwukxu@C9}}}AKP4L z@cH-c@-}hLPJKQ5*U(n~02DkWrd!*zJk1ie;`|S$K9%vNs(f=5v`U~xa5t$S?HyQT zbt9lZk2PLv6}h%EJdULg&dr>+exK5!rL1Pz_Rg>3%PoF&zR`%1*r+N;LNV9gxxW$k z?$5*eA(@o4$Am>af8HmcuOawdt~{D+>1&oqi3-GWaqK&PpL*uLDR`RGPh}7DGm@jY z10Ba+YE*8G7S<#2H;!&RL#42eJ+k#iJmV*k>CI$#TTt;vm!?TA(z2=HG64B;*VFXv zSH2tR@#^mt<<=NCAv*#;{Z;PsL#JvNV@?VcS38KuA4;@}ann=f9XI1--|&#OiLEok zZ@7)^p4sRCC!BF!rETIXCccMk~Wf#cL*(PeP?0e)VRF2)xiKpLymin)znX~ zS-}+1r_aw$+38+6@c#2t)BHCTuC5BmM&RV(7j+Xj`G6yw`V7|BjeIv{e*jd08T=dKdt0lL&m2rhbq8{d($dI2>_aP4M&LL|48zx6=%ml5$6r(USu| zE`2e`t6FGFjkZ5Tw7WR8eFgO0JmMpqMmh|f^zB^ct9xl-rtZ0H4B%s?YYywgH##<( zEz&M_sblyG`07uI8o&G{GTUF>n}lfy5$EO0bR_}8<356v;4L*&&&bfj=gbSjSjDA;&`LfZD;vFBLlbl!oF{RfqJiv{7yVU2|jJ> zf?3#=MNz=xkTKJ*~RoG{ZNRGn|gV3&AGAp*8B@jr0sjEAdgNC* z@T7Q)UGQt`zAv8MbdaAZP$=FA?}N~16~m^DeQm8zd#0wz8bZNTV;@1&9@M7nu3JjS zyZFQY5{vB(*F>EZu>wHMRI(iB3^V+?R$s#HLsGDa_-u`^#^s|p!5g}-rUB>In#{iO zJf0lVmGyLK94O&OQaR%%y>yztjIDGCZKbn>F`6*o^!)z-tz#K;GbbbJdrc`0if$)$ zGGl-^!N(l;&0|?d4EB#3g?;O_iN-xTpKRBT=pHw{@l+ApS{ z-UAZ2%OM@TeZHN&Ys!2-@fXAX8@hW5kg;+Xat+*`27NxYn`!Q5<9$zm*7dDE3wMrY z-1y4puOIz-@_j$X8or|>_LfnSLu>@+jBrjpPh--)R`|K%za0y;u=sJO-Cy0$C@ScT z=%AiXazN*~;A5KlE8z`?kMy4m8?PS}`*>aZ7j6_E;9{H-Ivi)~RV8I(OCG!MtSr~} zSNi>@mn?3mtiWf!;xotu`t_{ei5e$?^^Y9Gs%k0bOB`p*QgDm4vz&D2jt*-ZO4qet z6>AdMMn$}lF6Kzj&SM7|Z1oxLF;;cG2SnF(7-G~|Na`}9cc*iY>q;@QE-Lb$JlQR+%!&`n@@M{9Fy!)nwKX(mikDOD@aQR%IlJ$HDPHz^IA({Yr}Prg{^HRb*s@HUa*-yKil9Ufhl^Zm%d`9^;69nRu1efv{& zB;%=d9Jy?JBpxQzw7bR8qlfJhIQaoPM;+MU;11{V$*TVV68r%tj^~0adxW!mWJtpy zy6{wEAa*(HR6Ikf>Q?c`b8G^sZKaQ)^{PH5eSS?N`&JpSZPRu${3DjeD>c1>oEf2~ z{4&wLA9#N2QjLZE`o_Ql+f~>CLgSsFp8VpzLeRV!tN63W=ft|AsJ90bMx?1$0~lVp z!5BF`E9fr;d_tSWm#=0R`A9%JfgYgs9@XtOnpcH%yIEzojH=AuW9O9*j22%^fHDUh zRjDd@S4u!)k~6B@V&Y4zv5e8p$+ zmj3|5TBLeS!bqkpW@G$Au190aSu@ejkcHYs8Dh}u%Ts9};p#{hedmGLLWKZuEC;cJ6sDM{r+ z97_{zaLzCYJ%H+a`d7*S01doXs(56ro~b;t!{!6Mi?acM0;u_qBy=28e^OT$SEI9XRy|1bf$-d@s}|yOt;}4gg)ij^yL9 zJYZL#c-u~f=F~0k?;~vc)_1X@)cEJde;RDAm@TEo*;#@Wh@7Zm2I1Ueud%P!kJvlI z-|&Zg9>1~^wb$D<31>%;=0X`%lHJMNO@1BxQnJx>pAbPTP@u_UpSnm=I+5QUEB2%I z1n~m+hv3xLHZH|Q?4vAq9f4PF2UQ(#57w=t)ykjmtbMb0Jg7HI-?w_gWppL8*O60Q ztfcRd?#BYN<+$?HD}r-S&#b+-Damub;2~4A)8r8C3Rmu*$ML0503RT-@mvkU*$27=??^!XyrwFapa!<}`3wC&? z?s5KcLezF5)E({ITNNZ8^$Lgr^*nX0idc7+#q)w--^!rE$+uS^I;+{mm_$ zkeLKhesxJ}VYY~xdEQ|L!;a^$s|HgRK+mwPE2-m=Rw%~s4+V30q-K{XJ>muEJRDIOuAI?4d}GNIiegYL<-@`xDDL?Zz+<2C|y@Jl0iw zt~nj^+LrQZnM_U7zACl7mAqM!PX4_8D7CgFwzXuB8nBcdN?`8^d-lf9`vcGz(#cvs5<{xuXkehe2 zBc64)fuprKayYJRMKV8|C_9(0wrg(V%UhO`D4e$+OnZNYX~83d`}GP)=~Zy$XEyiO zH?oD1zEt36JXEqm@E~2>n!k5sk+?99wNBy|!ZRPbIpUmU(Grt-8TQv!r4G^%z*q*6bhFB@xFf|d3nvf!2C zQn8Gm_UdWxj4+j$V3E{u`cqQqH)|Q!H&H_>Xdf@B++M&f@u zmN5(L)k0SYruH>_)^rjok}=I+hs{V4 zvG<35)nMDjC9#Mdp+-w|Jb#{*pO6SClC>{$Nknwz=T-=E1yHt%LftC+vd3;kpuzh0 z_NUvdk=h9ga%iy@XaoJ8EJUCa-xVyJLa!m~S$}4`GBoVpD`0K!$9kRPofTR@cK-mL z^iz(cy#$G!>${N$3&v`)Pc&pn0XbpF8SPprYhlHwp|vu+ zC5dr>c&0qCMG%et^LkY~d1ShL$_{-yRjDC;!cDw(rE9W9RuQ(*mK7Y5yUVgQ#swqB z6?w>G%^;R(6bQ!F9CJ!*u@X#h5-0D*K^?11B*A>iPf!jAILP&?g`|V`a&;99my0PD z`>=ZF(yNhMQ$ky-+3n#9poJ%|tx<;K?Q^5I$`^z0=~pgF$^B7bn==mvi7ALE|-UQdVt%k9x$ib!)YXKtXQ(t7pqt|TN8jDy0t>MAL%<@01>#ASPNlj-!Q!3!Av)ZAyL zd;8*@B0PgGa6M^kh^W#c)2(wDxM6|N`+X|=SwdCBCvfaKR4X(wL$!PK&$UsO?7Ibw zU=f0SY8z;Dq*uGMw6-9zJF&>7TWo<0@biyauYGFbWh9a@nvy7kfPuE>oYiymCQ@cs zi@Zy1pm=_LM(#j~3{5LB-~~WQB%Xi(Nw4PX_T&AuH6I*E{u1z&$+pmCl@ds$%E>zd z4qh>a3LIf`^8WxAUZ1dkw&#uD@Q=c4_&n|N>Ht|q3S`M4loH?p(+C*k@tgzK75va^ z{{RQPaq&~)R*T?G1_;I0ts){THptEx0A-Z$ss|(vy*WHr?*0+v7-`0M>_^$!=gVf; z$vJy8cV7WK0r4l}N5t54ZwEsxep<&p?2!Uvh5*18+7HZl%An=2djpT?FG&4^d>qz# zRD-p zn^LvpD*HO(c=jh0c2a4F~-Vlq!mkZP&k`i>K^dGFd) zLmzawRa_qMvv$>9C-rX0R{{V$kmr%BrU?gC% zuK;>~`s))|@lJ`M*j!xdml4|9TBAIYIohhDsVCCEAU|mj_$aoAbD%$iJ_n)HuQgSc zC!S?wSflxnGAu&jO_6P97~Q*R0n0GqcITnw_6M5$9sQucY43{v0JKE$TX?ZehlceD)LYoux9<#N z7*hNayN-Gc@s2>RoNRPoirzl)9DW|VmhW8Dm9nN zYj{zB0k<#=(sjYW02=%IO@h+KBlcto&u>ck-YW4nG^Xg_?I+dr`5pKSjmdLW(D7e` z{{RELDe!j1E%ZB8^OOzOPt45N!yKQxySNw};}!2x-N)r)XvrL4b6NM#y-5e=&*4~R zOZ6LyoDaso2F&vcxSGzjXLir5p++!Vv057GB+3kupTeM;>1D)A&-A9p8#oSlU^C5Q zt-Z)|jzK(E7dzOhi0Q2EgF&$Hdm39gu0k+#@{i|PXp%-oMQ9^=ag&Zo#S&ym7xygK zX);xPYKEhx>DSh>W<9~d4mxBJgVWlqMKOqBhYT@_q}LBC8+g|Pr9^8rB-ZH0x=t=K zKbP;@Bldr`_yh4(EHuPvtTm9=5y-%p(=UeF&Bw;U7FvjC6Z|+h(i`b4yPI7txs$xj7upfMlc0iF?ly6 z$ejiOsDyraEa#OtUU(Vx9V%MaLaw$lrHW*2qk-ycO50(#9(ehOA912_%n=z!x2=DB@sB4o|Hps{>k(2_i@4XMw=QR5R># zSz|7_=M_AuG9VxwfaB{?v&u%$GxhCHZGWGe5B<3CQ-X}KV=+&Y?$MUn{jA;(H= zFpno|_w7-ALzRm1tkE3&fSd(94AqzzMzs~s*#g9>xna*ek4)4IuE;iLuWBQ!1-WuMMTwLgl1*qr88N>sO-*PWW^CXuZ>>~!D26tZ485~bO3MHnK5U9h*~B=9 zkC@hYQ@9+SJt-~p4qKXrTS+d0Hzh#h(yL0VBevXNb;oL?rrl&b5su^5khEZzP^&J_ z8@BbW2=mYZxN>t;nmLujzZ_KSa<bl_gn=o&fAUYRFkGApZbJI3Ag* z#^pnnjOWxI)n&GZNt=<=1HCI-V72r`No_vO2r&-5F;ak$L=2p9oO)K3$~i$P8$ymN zHB`*OWaJtg2IFDyNgS5uW>6bFeQ5*vk}5FZROT3COfkj>0;9LvBH}@}Z$fILcc7AG z^nP&{R;D|oc~?0jr7TiJpoZj*l|o2WoJgl|Jx9GawSvrJ&TZmsebZHKcS^upj0VZi zwOW$hS&9?#o-s*i@!3n{g*YUEjz%g{yR#LF(_9N@5st0WwIhyM?e@k1D~hQ#ykBb$ zoB_^HtxLJ1+}S4`0Hdi%*%3=^|5#O0aiDF)7Y_`c|NnMQme@IX&wcJm#Bu`=Xpy-*%|TB}q>4z&synw(YS}nz0q7(<&7p;tAjUI{h^MZ)78 z)VPr)p+{(FxL=pjjoERG;BiPwqLI%Zl|lBSBW(j19Q##4E0-0aVjG{bK=$aRnEwD7 z=~3Cs=C}lsRQ$}}(~fAENgQezkDL68mN_F*djL9Py%JjJ5=j@?9zFX8<~;ocXM$yf z?I$GiO-3iY8=V^i7#~4RhIpbITnwLDjg; zryE?i6=G;?PlM;%13<5CQQ>R{Q zcFGvhOpn{8WRNG@<(>~})oCP--5}r*P77NTHppj?%Hbs&vEQ(+Zdh7-<(-BMea~@Q z6F83xo_$A3rm#GcnMWOmt!ZsX1Y9={G1^#+R6t0RWM}6z$)bs*^G;MK0G^eg@JIr< z`>WQKwJArbQe=uU@@JK-Z{A)^8+H~xM{2iz2z(xLb67rYz?8h~0lGXlh4^!T**_(~3lKjMa{{UKcrvNIFCqi;)lXfC-v3af*YjS{)dlA;E zN{=K<41XpMJ@Px%OM8Hf5r^LCTGrP2b1U$qb4uch*35Drv#1Di!m_XAX(SH$Y*xct zu~+*r+y{R3Nn&J>Zs7i))^okARYYUOBLv+NY}we>@VsdeU63P=039k3YYDi_V}tj& z?@gXKVtv5#o(F0zp-^r*mSm9~Lbnb&nsgCakC+^_RS?H1F2|8lEFv?yG05lzIHrlc z$zI)j)|s0CbQMh7TTc6e=N#nKiDxZtsKb(ZsUnzLuGRz(?@=qHHEo4yBZ@E(VfvDN zJu0l)i~-pMTeolye((6zl=3e_bAUe@$GNpO*Gv%ZAIR2;^%Rp~=AujI$fUP#Z^E@M z2y1Z4czhflF;s0+A(}zkij92fbC6X=G3aW!lU7AS>1thv?7?#|=TqyFo9-XSQ zEDF9u40g>fYZnJ}VvDIFfXti{Ff;E(saY+^bRhfH>#H~62O##Sp^q{c^MS`|Mz`LL&QGV(vr)FjQcamHGLknwGI}2M zV;d(Du_Td2wwk1umj@iFsZ>WN?%U-Djoy^hUCkm(<$0s!@7Ak%QJ@g0;B`G{-y~(D z>^s!vHDoCX!x8$`N(@}qRzwSGml2hI0{8W#W@~8o%5tmF4)o_$j{;+kgYl}8o7f{E z01C&DdhzM$Q?Q%pPX*+2%C5N|gKSZfWGYnC$E%$o!>rYfb-!@x3`wzyh2iyRGa0hD1 z$6F39tp=|6RFF6oW@#jQaU5KdI%cRwWt90WrFQktIjKCu69B(>8fgzyhDRGH8P6QH zdw-2zNJA?;U@qhI6wxD2K*tNz`__Hr%)hyhr*YDqtXyx@aJ%ZNydE>2Dv7zcX7b@t zp5~+=vu?o(2kTHGI3{S@rBq@=mEDG;&nlm^jAEqR9zQZJpQSWPs&+b(SmPt5S&}m% zm`Vj0gIhF(XC5!8rG)!VGEwP7hZ1 z^{pVgno1V1v3Z_hEL(~vtJ)lzs6AG5i`9DN)S2$*co=~E;Kse;%U+IjCoZrT+ma`Yl_%3#1%Z<&eh z?dnZ=7wsuIkKreX^xI9IW%iqKZl+Q|CP>Ql9XjxP8ur_Wmfkf;Ps_(z@c#hX3gb~8 z1iQ7-);FHwCx;VcB8E~o6W9Zfr(V@msvMZ~xf%SV{{X_Pxc=08_hmN{fg1%RqLm#K z^T!=>bLwlvz9e`rQ?~IPq*0_H)b2CJNp(@xNFyINPhacwkHhZ}&#LQMzM9NRX;U-{ z)weRU24H$%0o3}`UOD)GscQ%|%@KU%noY7GCveV5VcP>9y~TCj&dm5~&r^}`pNGZG zy2=?0i`PAYJ%H|i&TD7K8a36J@@z?EiY>*lfW(u>Zi2NV_0&ocG}LQEhLS+hz=dODh@qy zjQdx)_>0Awci3M+a3tDuw4Om8-MAfVXT#Te7`SaJ%pypma>j!h^&k$l^MA)*4fyUa z6j=D4&n zmg&X6mUw16RlnXp{c%}(AAl@uv8qKO4x=rP;ypi3wb#LEYp5$ncAk2XhF2UB?@2C% z@-C->>leCqt>H8FKrTGFHkmPuXD1+z2;&vzn$&FvhYI*@zv5u$XpCSpBLW|j#xeBG zeK&n$qG(nUS?Q1@5V0rAPJyx5XO5NgJi30d_ThLS4(Tu?DgFX^@99+qZlTKdD10NC z{3CPrhmqsBToceCV1DU7mGuSx0E+d06-KEB4YG{050@>|jB}5rc@DRs&8=xh8(Sbr zZR`NYBd#&Y&U;r-Z{NdK5LjDXMv$o4+epNh;ZKV0yjO3oFPAK7 z%ZGgJ;P5y-eKS{lQSkmv7WnF^8ikfH_)tj%oDg&0zvK04&i(3+>h4GQB`hgH)Vtq5>rXwG-_ z$SQq$=Q;kqp=qXQ`YxGs6@(y4$~Q6Oup_pAr`D}hO=u~_-$ORm8FdiWnrZUnkN{ga zCq9STxV;y^`k#R2xw+JCJmDeCYDpvk?tQrLpXHaKc&gjN-YJsq`shh&p@>Pi*yQoF zjBp1Y{{UL^Z;Sr`9<=`e6L^Nh!j=gbH7`xggPEPhm zU#0w1)$Tk^Cx+hb-rnJu#|R_=ft{p#<2C5#LAFU^*TiB;jsW8%1JsQ4ReM%;GtdL7@TeNo~KV^z_tlS>y3FmLseNJ}#)>`Cih3Go}@eyQ;*Pgc{VjUi3m zZZcW3jzWx&mmTV(6|)>HmZV<|zi1B+>8LEs(_RSAmxfb-c^L=LaqfFp*BTY^@d{0I zFYtZhy%3&*9lxD^c**ddFNS^>jB2cBxVezwqU5s-o(%2l{-4-7t@wUMgpz6kI`HoL0XC!T&xqHcVixcs{Dn$DZXaqHR)y7hqK6+5EF z7!%X=BRRk1dZN zt~!&`6$E}R*R?yC?BI>CeoQFice(FYEnwBH?Pk-p_&mtwa>Tgjb~wg3!0rD4>#Kwk z)dHVG=NrTjsJ>Q{14Xxobxd^5@v;7Uj&srUXM54C-VsCfQc%`yw!HV-aI z~DIVlR zz#l5`KAd!-5NU2MWph(n@$L4De*~gk^G-IH@W&(qdvE~9t#P{N#qSjBcNV%{Ofe`h zy61S6iR;MuPhs@W)0*&y#f>AxIt8rS#4*JyjnfBSR!(vggMop8&*NP_n}6W~l4>_d zs1diJmnulkKmZ?`1aK*()S1fL9p8j(^?9$>-&B%c-QdR?bGIEvGoQ=xuX$Y;S=ZtF z1H}G7I8X-%)Z@^4^sglF*TioK-V-xBZi|mJAp{=aX1#~Oe;72qb*^pfgCfG>Fk1lb z^ed8i=LV)rxe|+R=gvMV_8 z+*BTf5s|obG^tg#=UqC>99Pjl5%qloMDViD zuRKZSvP7=u7n{P0K?f>HUSETg?Ss;&XcJmrY2hp`KGo%d44DUaxyA)xY1;m)XRow=QApI`9f2U{ zu1`;;WT$-uqjzL|&)}~NTkASK){A)ra>F_mbZ`o^SmjtAp!!$GJ~RD}ejXiK;^Ijp zbd}7JLN=U0}<{60N0t$%1sj>LNB~XkHPPoVw=MCb`7suBV+G;U^o?|Ky#{^{H^uQz!dgZ)h;@fYt z$!WB<0S}&>e@|NSe+Xvc`dizXjB%F?s-JX`(AB{*TD*5XY7TA?b$=M?Iy4d$Pbw(Xl2_ZQ9P{3-Hm1Hb)S>XMh5OryGr8GF5#zsZ z)#QH^J_`7nJ$gMKOD%Tuz*^!>#Um094_~|T@;jb!(~V}=QzsiO&zQa@{6m+-*NtnV zYO+IaBrLX&NY=qK@YDpWLdmZG~5%U%R=RuOoqhfz5mT*Pm;T?9eXMQMC!~2OJ;LrON*R z4#M`Do*n-H2}G@}KZl?OFn|*B9C9(aaC>u7_=fHLJ$n`1w2QLn05Uipxa=wVrk`mZ zv*+Kj+0cdSjz7*T&ptOvcv9a)vbb4oB#C4J56>F|fIr$N^yq2wq&KR$>@w??cA6vH z%E4AInnpZuPh97xHS6C7wH-TH+#}mFqwRJd!gl3Dd!D1Q`q#x?92%~t;e~@$B-+YG zGH_Vup&8FO(+PS@7_IB_lnP!)ITAwZ- zFv`-)z1%*2Vo2ae*mv)f&3n#~;nvW!#J8I=h!7bUI6Qh+%l`l!{w=SDyfLUnrCj}< z_-zWgO~4W|FxeeC@$25E{RL81u^+?FiyB^$q8|p{T5X2Rn4yrjI|;}H5IN_L1~Xo* z;fNrb`^ze%1*wblbD0O|^?1%eRmK_xG=0 zx775TDdHEBc{s@D?(@(ea(Y+KSNilCOyQvf9;A?V@%rcKUQ^;qf zwlI9;vY)(1802xEtx`!3ld<)G#a|eBmcq`~%fje|oA5_hIoe0vZ2F#^yNVhm z+_sicnWI?cJdmd&^ZjeetTk;*P|)In-~z|*fZ69femyI&8b-fh6U+?g04n70ap~T! zPhALlE1b{8>x=0vZSOR+%&6O2CkGAaIv#7tyf5OL``t}+d6lJXUIuV0bHU#YZDWZ{!oGRUWhpyobkeQMvH#HX`yUT@^Tr-En?t^9oj9z>8hdwdmprQ@5CPqc zet8F)`^QFIe?+ufSmJ3mGJzrGfjt4^9QUt4v(q$K-}`FP-}l!5Z){+`KJM)LcF#)R zI)iyWUy>6CJBZ1z&fJfbqf?o49zEla2zb9=(^fc~??&?jIoq*-IK~I{uDju$sp2mU z_+BRQeVTo;Q?)`i{m3xBV;ueCj#rL-t8(|nQL_tZzIk(ubCaH))o#ukxfy1@j4WVe zZafVC0Gw8lci7P$EAc16zCQ8Zt!rc8`=MhTulwg@48&uy z+83kbbvYbYW$~}TJ~h4Z1*eEw@zC2VE2@$~Ry&9Xr#=4w`qk$?2k@(FzA5v3Lo3N? z2MG%jLpd1QeH3-$l5yIcbXPB)DQJ23gzxoDF6phl(Ij?b_pT4|5!=@U@^R^2i4Vlx zQ$f0h;xf}mJF)}^@8BFBo4xQo>*;&1hF%(#R!bXIw{*xPXFQK`eKTHhqkJFIZoEjE zg}VYQ+i8TZ?p$LegU51ssFF)lIZV%r$6fJloI0iaDz`EgMFbqAeuq5g`F=IhLGVTh zBZpIGK4#tSKZiN=>MPtMvCw=gqfMym4j_WX432O~z~_Y-B-aUX@!P<&*(8=XK5UaB zu(pMj=1|8Na1Im>a!Kt?JF6K<>!EYOQ?`fVi#Q9B8a^14j0_$>JXhP-UM00{Buf+H z02&e~tV@ z1L_fEpyFJf26MNAj=YTf``4sgcpt$!C>s6Ej5l&3h2L`;Nwk7UBXXQKq3vD?rTj;Z zOYgG6<-DiEoE6SKy{pmn&x$%$p`^Be;|}UEj)S&xPg)}$g3{jb={#?w-`zc|xkhIo z06OQ_*1X5YKM_1T;Oq9VyOkq&$lk?(Ror;V^*ySU%4ya??>FzrB>w<=Be=zWY5Y!G zzY+Xk{?)&qY_V;%RaV4O+waN=dV<4o0FlQ^*OjRASaGGy?0$-PpW?l}(^_~+#XR=Z zau*7Ay8i&P$IaLBuNd*~?5X1a024_LwP$u>GR+%=QHfM_Y_TOu;1%i6;Ck1ocvoA{ zY_06l6alSxiz6&C#z8)VjMvq^5b=Gcri%=Vf{HmOJv)k>Q@Rdb$CrFI@Z>%ewmM^= ziK1);I01g1!ms$t#JYC9V|AxlBZC=el1E$vkTU2x_k=b6y!~p!k;V_{h-_7aMb)nd_R)_8e~$58(%co57jA5;TTJ+(Rza9Akm_S6}1b zigtb*ks;RzPdt$kZZ`qf1oj81?OpAjpLJ~Lqn({{E9I|>-weEE@h{>KlJ-&kn_~vc zVYBy2AN^op4tEpA??5=KjMFu}$S*!V_+wPO8d4N_$=kQD%afKqpm zfO~R%{XHwg{u1#Pm34U+iQFo=4+{g&%nny>Fcfi&5^_#^Q*|!_SZbHn_xIA3TXIND zVP81w(Byxff~uTvp?Y;G{8{mTh;KX+ZnPwKy1&@4FGCnSo!RN~gPim}_4ALzh&4+M zM6Zh@AxYgBPn>7a`*-@++>fVNUuo%KEMcQj!Nz^7lh!;r;oUmjQf1tXa6rP9&8`iu0`t#0O8hmqT*$EQ~i3$Seom&-mA?_0=>|691;&dTFbWZrk{1H7e)%?@!KYsF-}_Cxu^J6=K4{3fD|2@lb@w! z_@BaBe2DU0#1ydrHv^w<>t3@R#C{&qUG4#YDG32bQUUz)U!MN}5kF`v`S%odz9!k4FXspbCVtc2d+jr>yNHDuZ^w#0bOYN-L|D`c|FkH1n(vprW=R)!ZEnx zjP<~+zYTm-)e}Kq3~A9xHOopOGb)xqT%0Qt#&Of~>(jgN-l^ivD_l({TaDdVg+RlV zB=M8b4tw)TQ?`Z1O76$m9}WB)Wu|E9KbZ2%fKGpek4$#@*Nc2<_*bNO%f(B3eR}OI z@uW;60C^!ePyxtda!Jkr&r13)!13QfrxPeKd4mKu>t8E;Z1C5PZ1pRT5NK|V3ZqFT z#`%LN!mcrvW*qUzsExJ;xpqB|M)+mnzYORjN`f$}1ZNxqLt{IzJNGs5rJsy-OMe`T zDPr>+If zI2At4rEx-QsjKi$#x@qZWGOojv`*zRPdxGl0OQbSt$V+YyeFyM+d(QJ!D87QbB^`% z@4!6=SMbH7YI=>T%w;7wD+ zdQ0khPW^)=iYX%l=5C(Cyu;zfsVCg-u zZtv|@J{{_@>$g(q_Zi=AR7j-#;=`cz$9ncnQ^&e*F1F zTKgWMHP?n_k}Mqgjxa-G_W#mcit56 z!|K-;I!Y`mWGr@*!91P`^{<7spNk$Mztp$s(lx@M+VLqn_a-+t9D&!KhQ6Hme|f6- ztHL(kA%Gt);WtH`gMfCN=dU2(_ZT%ZO=u}I*gQaH(fl-KfCu@N8=QQnJlB<2+~4aK z_Y=4R+62O}$OVph2e=sL2DD}ITSs>vhcz^5BDf40$M9fr-=WSk+Po*?mx%T64cj+| zv=s8};$7v}`>oYRcsS?YoS#EzUD=qrmXCjZ;s%-IGDf7X2^@N3iuW%IY4facpxky2 zTa%IL^{<@17HgV^iZ$zd3wHBS-9wCLXz1Iz9OK{r0I&KU^Z0w=)`%iVnn%aTR048A zsVAF7dfn9>as0@{27OQSm$raV67P zJ;pLourN<2Jdx@vyr08Ry}Wu>i*V8i#u`Zu;>Xk$%)YTgMqhftC!afgV;#P-2l z5CFz9I`^y}8SBZb+c>t3_s8FY^g_;-Df+ZVa&#BuL~UPa)Gq2k-g*<$7$zG22d z51e54JRUJbq+E9}zAtIlekXz(O&e%n{$uX>bAUih^}(*A;a7z9%bg&}seu~dRY1vX zfI-MVL5@vxdd7p|;i_D<>GA+Mk7if}?TmrfuX^@xhkD+j1)7_)=NN#Dk~)wvlaJ!( zHBpuHX0Jo%zlc5*@jc&&4~OB9NLhCcvGHR})h*)FEUuPIi5GBH zJg5f*`eP&OUW4Nw0$BKmN;bCAn7HLvBRJ<79=$8)?+JVqhR?>b-l-ar%udBz@Vw-ZJ@6~`5B>?8b$R~)3YSpPW|0l8 zjl!e|zkC*4$-HAc9AlHguf&hr16J0&G2>tCtsxyC2#XUHBg~MDxkJEZT&fsg~JPx%xGHeqSy$APzHG zHx}i#kT}Qr6|;LgLfc$@j5_dI%(5WCQ-@QC9dWv~OxC4bz*Vd#SOJ)}t!RPwZW?!>{ zyMA84)k0kY#&p67)WQJ(j8$E+LWCZJrCX9l8OYm?YcZW&-aV%yk?C4rp!$wyURl#_ zdQ(Q>lY%lhs^&|U;rLbP2lb~cxX^kdOxVe;DmJyOb#bVD3CVcQr$I%ww2v zywuxUhPyJArUD$Dqp|N(fKqbvE=Dm^MRny6s-OYTVyVbym5$;{lg(5D#*4<1;HrSQ z%~g>VzJ9CePY}uvmNU23smmmh?u-HkYWj}O#21K+r_12_R%|gWWKAH+9OkBuV3~!+ zN$*d05nvvjg-23e#j9(e7jR4i)7KSV;XLdru}q(D>ru%hrO~m3t89@s%A|pwGfl

    YjE;x=YVmt-AQiy?b@lvdMQLVh2i8eJW>699;= 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≠DSjMrCY*2vOA4 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�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�-<1^{7qEK^;iX)~Ye?2|JMso1e6&lnSqU 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

    BPX~^m*MfW;vG`FP){~*$rN*PH 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

    G)MW7&p+V8%Z3j#zI*A&`mWJg~la39-scYbdaDT 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

    vwx`Lc-5#5B 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
    hT2k(`^F3h zQA~NRGD8oPa4}GMDufsB*0xb9H(Qn-R=ZY4I8)lBF`nz)E# zhHP;#*@nAp7hdWJKn;_ad8wI zE&yg3JbHGfrQFXLV3}4wUdk_KoGUyU+pO zKhmmNO7Ub}$-T+>M_he9syPGshC)s=k}73n5ssH1Glymk#%c?XHDDZYYdlN3UolS# zbB|h)E+yUNwn~oeRK+PJxdqI-;VZYG85K^|Suy0UG1$|j8>VayoMYai@@`xef=#Et zrAkYoG?Q-R**<^o`sb&AtuV&MUp^p6T=Ckbmc+%jNY3I{B>E9hA-P07kAHf6x6si? zT}IqHZS&thFC2T;akgmZTZoj6!{$D|#;?p6L;*MlueC7B%AQ*sjN}p1G~5-eOybfT z96nI_jxo}iZxqWhnnRU6522yA6$A{Q&XIR3?p)ydp7kmgWXH(pZYLUiB6-zccikEO zmGiH~yNAB;CJ0SO*5AitdHa~;zqCIFBJHiO<>B<%_#T?t|BlUOu($(D)ZYpG=Qa zyo=6zV$A_PVl9k>#~>UGj)xWBQcbH^_^QqJHLrYCVRfg&But@k&N{7f8iMJ!shho} z&kDz}_4?P(zYu&^b)@SuX|^M1Zb4E(LI=%|D}b@_SBPM~hWaT>TExIGenvVTx##Iz z5~bYc<$IkMkMs$?-5U61k~Vi%bGHD6BO|W_jEwf{+O>6WhxXdS+uhzu(Ugp^3Idgex#O}Ajykqv+og2UgZTJwDeN!2x(VV*fzZGbAUoZ~8eKdAic?~Pl)S|^A! z=(PE*ZJeUvWGVv(?oK*>HS*MYX0fFB+S4Xzfa!n{o4xpzY~c9wV1kpH(+W9I`_(+JR78>@Ly8rCxLi4Wf{58cP6In6_Fp`5voDfnk?cL;4qP`8@} zjB#!SQ1W+ij-vp3es$>HFVTE81&FlNL~zS=uIi+OE(hMuF~B5aJ$q-G_B~HPicLSt zv>sZ)`_0)ODC8VxsrJQuq48Ov)lpX6np=xvsFF7faog$1sEqFHM4-24%Q~&B`c}U! z&9%w$5N%f@93Hq|uL8c)_)#UK-Wg3!<eCwbDb{iKQj3Ey)Ho z=jAKFIlvhi$6reH2@ap(9}J5!`$Q@t3Qpsk90T8{tyiBLA*I3 zkPX-agN}Mum&5Ofw)*a*_I4;jINS?h0NKXVp6A-R%O4Eu8lR6WBGgpPrM#cK+l&!{ ze6j`((r^j%Jab#x_ro1?L)8A+;h?dpCCY#{s}uKBa&eBHn4(eCZP_15#XX*?pV@l4 zB$m#bTObg9K?kv_TIIKfv^9>+ZQ)kf+cuz8F|RDl7Xv<-=D00CP@2O{j$874@r96g z3^?aF`qv%tCVgjI(4SAxSbe5Y2yBt^uinWSJvs`AQ|L-+$4_D6O%b%K$zX8H5AQ}f z1%E$5pT@aOJIBkbYZjI;vcVC2lBDtn%oLAP`E$)d@LS={^J!CRn(BF`KvE??c0fT4 zPevI0Fl)s8b>UwTcpt@vi|^RHzRi4-!n)@8;@lJuN5R( z_l>m+IpV#I;8|Tl6P=)E_)mP}xvqo2e-5to%}VM`Y2Ma2lo09%%vkb02fbwm*qXkm zx#Mg901Wt}PBKFO0O_#pkx9T)-)?;?$F$#wTAj`OS_QFKVp4a?q~{>;0UQCE?S3Qp zEZM?zy&^Lk$_oaB9Dt|gAdcs_uOhejRpS2u3&jqns7Ch8Zuc4HW6Lvz_ikEr1Gp!uS^eq)#uk=89ZI#3;BFEtKCZs0^j%i0F1|mQ<0uJ z3?7-yde^|;hHZCTy^#LuPO2GhP3Yx_~uP6)R`>UvmBkr zf^vD}ll7~Pvb2phRwD3Ui1dv%=3Be8*yN3|;~?k!^y^_vHgmGJ)nMH-wBsZA7eAj*c|o^S~1ll-f=@s5U=gG*>0XqS=^bBuhs z@6IbZc19_8IUfZ0yFu1sb-c6*1Tv)ioCCIH<#^|idJ$foplc@cP;p}+o+9~XJY#on zLI`+PPM*Ea08&|D*70-?|Jsk?i`=wB1E4Kvt{aBjwPlUe@d`TU& zb89gyF=GP_mSg_V>JM{@_icN?dTqXvlT8$J6@A%Zk_fG2?1I*3#ZvrIvexzg04haX z>JyX;BLymVa0oq5e@@l*PVGBS@VX5}aHuw@3xod91E>|oX&(W+1LGeR+4!eZwqbu_ z>mo}T*{}u$lpy(AegHWH_Z)#<)#5EW+Sd6k)i-g6v;ol!bu?t6+GDU$Qk38~v5y#fOL*hrkKM(kW z#2RL!r7ZUCbXqAyC}l({3#+jw_h5k8CnGq=CkL$fb?`sKUKf$BZ(&L1EJ=A7wnrgG z2nqn}(>d;Hp)|A{Qc=*-&@Khdl1!lGljQU{85|CIu7(k;%V92yt0GF0F~gwf2=82$ ztt1v+DiFkiD>w)(vxVQ-40`chH;Zny1=A1qR#z*$9@~A%r3Z6GdmK);@ZuMRA471+ zygW^nU=5vNq4m`RYpc0QB|iO5F^u?0c`n?}(82jJdJ7nPg5R zh1YK3&Kn$q?}NwdUA@{~Ue1i8V-vyl^{*}Xap65L!`FuP7>nIZ3OuZEyIALFUVwD` zyVtZO<-AT|bMhl&Ju~b0Qk6Ar3@+OnDoG3*N(Up19;BW#_zeVX|Q;IOBQ-T`#ekY0H6$Kl6~@XpIUCCX)N~ZadWh^peyl! z!1d#tWcH#db}H+s@wSujyHPrv)>?6rD?x`7P5dZxw`m`EwmJ02HM`@T7gO;5njcPZ zc)*XG0!|AqdRNu=T4}np`v#OSkaOjM^7qefro1~@)Ac)PWV^mn;xo5vkKrA;>?z5k zNPEor?@7P$Y*Aax8c2kIs=Ew^1Jv~E(!R{_u72y?UUh5m!ukullMT|jm=a58Z?;Eb2Om#d z3iB@p`1euJuVm6SS24*Hp-fm9+1!s)*QI-IspI=wc?`O2OjBX$)!6g|b{@S=ROFM? zZaN&u_&MQ+wUXOdw^`+pw}#wE&!JwJ{41r?uC+TWiR|Q6NMpcO?SaQ0oh!z?NAags zfY{4CNo@-j5(fFeIQzT+a({=9%dJ`Pcf=p~Ozx!7!F0JQ(rjA0ktPdD? z_V3}phUJ#)4#7(|&B+IYv~V|ies$FNCs2mxLxJ?kS?*dSmO=MGGN_ObLyYoi%9WC0 zPepUito|LmDAy5c4J4_!$q9@A*yQt)N4Umo?SPziogTIg2E9PSyhvjLd( z=rfa^y=g{GXpIw%taw*}v>UsrR_jZfB(Pwreqcf8jNnB4inva<8 z^v@c!SkvJl(MEXS{$7XHy#D~jzA(_@)MtPw7iC1gK*(0yc_8%nAY|8^{{U&~tK$%0e#x0-!(fvR8 zg+7S(vfHJ?3E~8>QVWg=!2^+BE@*n4<)hqPUP?+r3rCQ0SJS>ta=tt9ABdv9nn_ue z*pcRu_p|s{Z{g1e>iV9U4ej9D9LlZ1$vGMAp4IuhEUbK`Io()opT+CDspYZS@DvzR zo=!XQ(!2x5Um0~hKUfwK-?@!s0nBTeHu__}dSk9D>u(cyPfuSDVmO0518^sXL*2i| zzdHPLquSYc&(EB(X?92mAg0S4`N3c;~v%XXNRtJy<1j>28G~wm=tzANQWDn*ykf@^aj4Q z&@4B~=6G3ZN(_jAP!lmzXIY5f6$q?+fcOM`vz8M_tks&Otah$0fZh>#a-1 zmiiur9I&x@nH7lYeL&Aj@?BTJ8fE8*{@o!h1P$^;%f>**KEB`ns@B!);JOK77>4Mh zj-!tC%`0rkt5VlY?)(Yyk4^Ed`{{bDe`9FKM0NykBztEZ
    9m>$^Co)P(l)g$tai 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

    UPo_gqpL-< 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≫ee0%wx_l;Kc+I@Z(#@&jz6<<1YUHA+1v%8!G=p+&WGqR(RAoJ2Wx<2d56 zFQ@Zc7~P%-#csR`Z2>ijJTgXBP;s>Mr6}k`qoEbVOhDbx;-MEo0fGaT?rM3iq?q|` zzb~~_j7M*o9CfPZRs{92bO{V%M>wWN8Fw?0w05eHyt4qsNnGIbnzbTs4;n8Xr?pyU zszz1Ro1-A)DLiJfE@EayQIJ&i_N^Y7s+c&~(K@vk~&JKQ#zQLnM(%#m-NsVOf%>%S_Eyr-+bQbAioQ zEg3sVBnoNSnn7z~0-*NfRBoze4UBCZeQLy!tg8I+|%51j)$A1bY+Kp}Sxt{nkk62l&-A_8Ms|Np5Et z0wI##-9K79oLaot!whlmYJ`^(+n`onT;o22{{YubCS8H|XC0|9y|okL*g5#sOyF;-WK=omlB) ze1rQ~_+HD#{{RfNO)66?az$-BM)8sIlN%000uDjPO#6;&_{#X7;H^SW5zT#}O0TA% z1I$?V6_kI=CLHHHki)lX{_uQTYajMK<=ZP3NMt`E?qYVFVSDqAEBLtmpe#H`p!{go zEj&*@pK<3Kn}rdqTV|AH^BMrE-10cbpv`|(eIKz`b!fM;zvHR-uN1=7Q$M30*bl$R#e3+IIc@pip0$%Zx0n0Bx+&7lF%kG)fjlKQ&`m2v z({vjF4ZJ}K!D0s_`k#J3N}fr4xQu~w#xQEXm=4i95&+}t+cie!SDPWS2r%|q zz}|V_cdXfFR{h_nr4;O$Z)+EyQCY2)8^4sdAdcAo06i&f+7N^c;d&m1pb(_$1AMAG znvEy>JfhVBWIYL~oVtoJx->22d80WyaaSR?^JVj7By8_d1SevFp649}XgEcT1p1Lx zPeP*=)RNv@0?s~c@$~hoFvk<#Ih1D~chDb7F7DvAjxjDrn!yx~c|2Bhpj&{EAG&>i zof4jeMQCe9JZ~ch1a18DQHZT&yIZ#EoPB=3PSrx%V$MtTJ?mmiLvI+7aKPZ4b)`;i zu_V}!vR2#Zc{JIgca*~c+kwgKKN>Dx)gLgnSPs3ZsP3p3;Qcz*x9CczsQ&=6i%ba4 z=IU!g85hWA+DXSl-|JbjtBF-uoE#HZjpQoZAOP{n?NKPPZ1p7%bjW07!VU+p`c*dj zN)s#`pF`6g^`mU^^XBrc#X9cU;#@ujO{@+*OvG^^4Kio{0Ifts$#Tz+kxvAQj{r(J zJ5+l2tCBUlTOET3J$o8(+?zehp`>M!N8=yLqP4V;xsk>cjEvT-PK#-WIT`3{D(_W> zBnn12;~atQN>Z^@#ey*H=A7Uh0Dr=pc%a=f4w3flS+@7Hw4y+yulUxDta3?m={O0z za7p9w`qairvRVX&C~SYR(qi@@0m%@uWEXEkiaeOaP5xY&YNgpk`iN6 zfKTZ~th5x>-H~48d1uXDxT#}Z@P?FfDz*9~q$$W5sTo-c1SbQv3QZEyS`*1CyM){K zcplXQS*O}V?A&qpy(qXi!YJpdH8W1)G<7`(<@Ke{eF3%5isj-G2*T}+dY@W-v00F; zDpV&xd(?Zp`1cWvp7fWJ`8L8Ea0Ul7IFqqmE>hv0C2)*~f$QtVNLy&%jO1q(m#4?O zC=mR=#p_ysY8LW_WF>l1XlY!tYdRS|an3P=*w%#C4=4~a;4e=~%Yr@XXWN2LKU&mC zO~Dq#k&bsC>rOXDkzI%)iFf7CwmoWV#Wv7>7 zeX6WX+FO{3G@oaGm-mOJdRCU3bLNJMSc)8S#~A0R9qSIpcPgaBkI17Nef>o{39U64 zETguJGcV9oiy6ts%eNe!{c8No(=d+NP5|WkR7q~w4E-pSRjeGO0Rs)s+MWcq@~pV! zhf0-vq?m>o0;|n<4eAcN_+L+4epI34CW_O%@y)aXRlR!q=BXPgZb?+i_dh|;TH3iX zO*ZUddJ)j(r-`D03TK>E>3vC2?pM<^=!Bkgw=0kb)Kn6gB9-Blcm}UKz?SV4WR2gR zezieFk!DG<+3sn|#q(H+*5A#Ih+(%oy*cki=_qk-pCS9X>VCNCQob3&uOR-E+nE;J zfJR4PXy-{-mo)b(&cA1gS&v+BI@7HlS(vU0#)F;Mr}@tD6DQ4qz^N=)DmtE>F^+#a z)(+xwCJgX8v`f_BdsW6U&+|w##y=lgttohudErlLu?(dUM{yY$!5Q@Rr6`)l39Uxj z#}owIOu1ZR*1SvOZ^Zuq0(>d(q}un1Ri`30kXt|jmOz-@jNwMmLpDzXoE%rSUC7Q# z!lwXytMsqu3-P<>1fE4b~b{b5WW3!bKl;-Vd6eE!sV;# zkXMq^(D872RZ8}n(H{Z-0K+SIo;_j<3oGXG?yzNWfg>sj$jHg*kO(#R)t|uM2g9LT z*+*~l+eWePJhP&llK8-8J9gnfEsI8Vse|>TR88{w;-nGY*9wlYY z2Nmhj;;R1uZQRaTQd=Jqc&p%!tETCjtXvuM$3H0^oe8f6y6}IA{63E^r*7{dQ-uo6 zkUOXYC+Y8BsqG^?UT2mF^zT*gyg#R3!k0!MvMI|SW7@qM99rVN=-i25IwSJuP0{>P zo?1y|Br6J?%D{q2K8Ku+fDgvH%~M6ay0ZH{>a!LAg>FViBad$0hQC1W{5hgsM-i3) zWk5#kex|T5{1>B4;f!FAI^w!l5=O4FRx@};o`=Pn73Q(w-8tlka5>I7_Wrd~Q~0^# zO)Aajw~k2!Ln;B=l6mF2V?A?UX-)9D&f*=n2!&5R!m%|!gE}3?n)Z;yt(C_kJYa%9 z8q%I;hWmPr;pb~3Ws)iQh$gJS0B$c zjd@{ey%wKv>B4c`_YDW)wvVe^3oCh$$&Bqkd-AVOvbuYg`AEk@_}Ax`hSxjsz2DCMcOs5zqMZYA9o)wK5m<*HCJ*qpzLn28F5C;TQ`%b~Mb3`w4 zo6uNdn&C-5aCWNCXdshud`;ip`Cpptg`ig>kqaT2hZhYPTeg7d$OfWh&dr<2b7(W?{5+ zsQjSPdGmH3DE_97TOu3Q%w#s_FEIWQoK;2_69XgsqqSLi0OdKyT8e%0xXb*YbRVrt zeTLnb(GOu4z zU5f~rJ7pMCRy>4@9#P01yi*-E#GyGOw^ArYmN;FC=N$9b@~TY=q8~Kga*Qu4RDuw2 z-8$x`S0)|7dHkxnO7fpHf`oB{(~53sYD!|WwZRI#D&^C(P@s_h?0%X502-$RINAJ$DI|798&_%1H8G8~ zK@^%Tpb@JXdB~>4`@&EU&Zb!-81p-G(y86BXUuK49S@}~**vZ2MK_vqxTS_Rh5mm0 z)t&Mv2ss3ES+iWuCjmL+WFPBR;5%56K9w9YNYI8}GIRb-YPBnsv@;L19DKb&rsi2&VqgK%rFD{7 zFx-JkVTfTyK^@IGB$1kSc4c>oUR~06J?g|z>}O=g&@t^u<$~ck9qLBe!3P7UG%bpZ zwJ8W4a)Eg!rZ5|H^R63eFBvC_vkC=sE1VNadZ^Zd89Hu!0nor8(88C6n`k=A4*r1Ck1as!&!uLk+?Mqvk}O7|7ULY%!xF~_lEahJ9MlFQ6xkT#wN+%B%r4#i zJt~;w$r-Vq~8SC_`7ps|LNY7rZdSm|puT`#2$j>B!LW?SB7DA_i`BjLUaVp@b6`5fR z&$J*UXC(So(-R0GM^3q+XvkaKhCSu+oQ~CO?15SG0q8#(q>(iHP#w9ZUECgE!1;L1 z3U(aQAd_a}S zGl_m<+K(``jN7|-<$-`BiAFLN5K>{XeB_9m|E43KDQZ;}|txd0AOHW7pP)5Qi)v-2C_my)NYUpEYq31s`Huhz2ByBWDLZe&4g<(#Yb{{R}wRhi-jNjh)`ty!7n zxRWYATz<6_@qz*{#yH}%wabj(P=TeAGB#k254Bi{7aL!nO!la)mP0R?x!_f()-oGC zs+3m7$+kf}eq`$M4Zv}_mg3S9yFnyWukvGWDozC~sH=j!uTnb-Nm-dr4T7qRe<_!1 zc0KDd))=i3(k06tGt;eT29iQVL~+Oj;}rZnB)9<6zd)PNsU@7T+X*A*9=sDyNZt0i z1Q0m}tfc$T98}X4jxa#y)~YRB&JwdJEHX2dk+7@C3+wJGS&4=s8GvWtj`Wc$0$I7w z=xU9{w5xI^atC4uN|)T$%mu{O%0y>8_w=S(K6iP5XRSOcwC8Uia!xq*rL{2$Ob*xt zXPP-vWeVs4AdcOADUIfkLv|IbBvG>BKECx0+9UypJqJ#w@v4GJjWZf2+?x}pdeidu zs;c3*HIrOS(vfaXu<=~*@yM7si}TM9rS$+qm@nvs{mlEM9*MTwmL;jpL1*=Eood$Kzgw zwkZZA>*{NS_?u-M{t&%coW>!BNfnS}f~rnH=O>N^D&Vz8E-PdC!uXk^OW}K)dsfJK ze|S(3aJ!D&j-&FZ?B3QB6}9%%a-L_HP8V-{lgH~;yk$G;9w~nk-=8vT-K@$!-~eOg z^y$*P_u?muG&i-2L%2yHxSZ@l7jhNP%ozUw4^fQPwaa!`9=Sa$)pWa?JvT^n z)8Y{`Fx(M(oO^Rtycgol6HnAGMyUtc)>l!ybG^Hgryktqxuq*c$mM&hoUNC_SZ;0w z_1@6~?RgLn^@V>mbSKju{VM}e@rH>F(nJv>5re&) z;EZD!Ami5}x?crMy8XSy;79U~_|e#WtO&s>I|0-1tS;W9t=*2t#`Abm>rRhLzVdHh z%OLZzJ1iZN8v37NTkytSWKkFDxz%KQ`lhgPvcCF!TQgJ^(dfg!*U7Q z0O1=wMmqt)9M*5dF9P2~EIQ4cJCb}WDE=4q81)q8J#`w6gkC53m8?T?3|bIK;6!GX zr38X|1vvqD?sLy->3k95rSVOiciX~8K1*-s02~z~9r>tY_-2~!fd-#_DnlbFRsaSJ zr=Ta&vo#L`$?*42G1$(97+@&@N$N`vOdbbXzG%G#?9y8uuZp}G@WRUb`)^FKiak}i z^B{6CMjPfp+Xp~??R-`7m*P*1B)5C*0$BpuxH3kE21V$@0ZGS7>+hdf@g?E05;xiu z{Ey0fz4;%dVJE}ARNMamXxg)a`?Ab=_9NKz_oR^F9W*I^&Hf#`@lJ;ij(lvUadjlj zk(J3%u0jlBkhmQFHTNJ-4C^+FqTVQnb{oz`2<%7QAmb;R^IwLkAB8kDp6)M}+mICX zAmzC9@5Oosk>k$|c&7Bte{UL2xkI#;VUfmA1C09CHq_4DWPH!@8^W5-nc~IW8#E}( z9AE&*QI8qgKJyRA^si0Peh*tM+Ux2G`#1{`ll!hY2iNPL>0Z4xmaH{*Y3=vMrzrUu zY>vYx9dXTeejlE1CUIyAyhLtR=(z_3di`rocJyZQmC{F->b@qj@Xm`O*kQlrl#&sK z+<3tB80nt9Ysc*V9oy@gm)lvSiCYaLhWST4V>}Gw2EB{NJ}%O&u0OHnvySi2WsXE( zFxev+>NqEkDyF#=&E|y^nqssga9JZiDZ$V1o=!hXwCt{Pb6E8M01Es)@XnE^%=&a{ zrbiALPe2C%Dq+S zY@DjL04iOHA2xb>AM0MBABZe2G9AR6VONe%=a1I1ol9th;eAoz{xH*YUj*r9S7o}9 z$PMLm921azGyeeUubg$C8@23lGBFbYhF!hRFbA#=rF{Y8>0=&rSFx;-NOlmM40}|5 z68IT!;wd85ZX#KdHw>{e6#$M)HZXE9Ff)VP8gY7RH6D`K<#hY|uL$UoUqcHe?c8~H z+w#UndlA%R0b3ep#ywkF+Xk)k%Ws7aI=8Gd!TX|fJI)&O#PDuX%>s3#NTE)DYTnT#2QdpEMj=NZpI@r8=S~@ySt>~$$-N)ps4voe*&tBuu*Kgrnb3&5E;8_$pzQ9<3N$rnp@H0xw zp_Jrt9w+ejl>)--$fno3V;~XGk8nEIf_SUOx>mD)X{6drj||Qu{n-Q(@ek>XUzBl!2mGl16idW<~h{?n`vfKr7{2Zwbu?qhqOSg`$xhNhpg0V}rPC2RI6Q zb3&X_u~)i2$M|`nj}5@qH)KDWzFR2+44m+PI^eZ^3Ml+=Z|n$&mSvS!jDwyr*nKOp zvesWyh`qD?#0D+U^WWPwmt%XUSn3AuX_w4TlslZ@vA`VnsEgM@^7Lm#V|x??+gt-4 zMpTj4>Frw2sOd1=jVftW&e50az{g@q>)yQg$6B7RKAhKjWt{gi+m%)p=v~g@2g-va zk5U1^Bnq)4|81>ofP`10tm}Q%aF~$;T)doNS&=<#=>*Z@B;dZ*zgv;s_Aa? z!Ms6n^D@iRe>f|V$J74+ty!qq+)68RQ^(#n@h+35wUx?C1VFNbk`(qKNf^f&;=Iej zx_+sv71v<4mTNO01z0voC+`9W^{=7z9X8YAMVHw17BL*-Y7w`N;~<`W`d6}OI+82oJuOzqe?0YSWd52>R$nD$E4_^M&!|MM45oWO0Cb_kVt}KaSta4TM zXp2_<5vjw*u!) zghcTTtWcaPsU)4Aq+oU9tzmcv#(EEg#fO6wNY<(vKR7n`^Bsv?uRktZo_HMvc<;rp zjdyn1dnT7H#k)-shH#yCbpZ3%x$9haz_V|z>QUc7f@y;nRBoylo$Pb^`qgV|ji#NC zp}b$I10Tcy+E8D~s8F&VZknc?ACe=pg+?eHq}t3;1VIhB@@e;()~xqDL83RRCkFi?uY9!!X3LL*;GTkDWl{a_;Ml zjE;S4wTI!QuZ*;KZTvu@NY)^%p@=(&8OZ0Jzg{|5(Ox!>Mz_$SwUz~zOK>(hT#!d` z=ufw9E9Z3hh`L@Yr?+w^KwW=%@^2_#!*hwp}K3GtG={?JK$K&Z=SlUf=+JcWMND4kx z94YUQrBi(c1tp>4Ul+U;ZT|oW+G=j*JHqM}6?bobPBYX2$sr#hSN)Z5 zYv!2742fHQ&LuRX`|{Q>cgg1VpCb$j`k$7UV8fHw`tqv3vHz;TX8wRw&I0D~Z! z&7;v{jwyy-BFTkP{{VR7s4bppdsVTeI#zn4uJGT)xbF1(TWOGd;4GNQD*5T`G19wD zPgv7U!An_o@C$p9=nrc6XGJ>Zk>lpmH9PQP+(eBUOKEUIpb{Zwj9w@ZDhs6a=tfLXOFi2o}eKE)R&l{xtGtzZy`DXC> z7O=)JRE&ZbjNtVr`Bu(WcSCV&W7&K&fHb=(;MX%WWOU#K3Q+;*|fDmn=Q|^{*cIZSd|-hn^z1*EII?E^j%Rm>q&Xn-FxzeD%+^G3b6U z@M!Th%U!_j0!&8myx?PyKi==2{{WR|8m`u7GlkvRt>Iq^_%l}U_2s>UC0+rru+IJg zE47YJ7pFacTIDZ(2zVP-ht1buTf|JMjzUy2xA%x3=REc7E2Yr%n;!*2wz^#6)i81! zqXIoTWME*|MRPsCiDs~6c!~Yya7H^;%2ry3GDRPUKM#B*;5`iJ{vUwHYNd~sS)2{W zBq?&o8RxHBxu$q>&cbOX(!hyHBrj4I9;cJ|(&^^*^71%gaFFsFC!hn{ty+fm+xu2q z6`gRuD~Ovrd-Wa2{Hb!Lic-4J;=EhpORFnZeKJx8-K;_9aOg8!HkExRir|9VSe(Dv za(Nsp5I*yDAbX$Iy&J>65suZQwA7eQ5G+EGyCXRn=dLS)@z;f{yf>m2|f`19~7sX!|`C9Ag+G_y>45B9;WMDTPp!yyw%`}Z_=f=192U7wW zP>^@949ZR4AQlLt5!1IuOhZsHm zx>tX3;s`XzrnI<21;7~vc~)OhpHW7ZuGubyyeQQ zn97lmaybCkl-&4FUzTLlCdvd1WKrB7P&m#<|J3_aLewpu*-=4q*aL9sp5xaw#C&Gc9!)I^;F8OP$2@l)z}CHu#1??H z)Qb^~2mpQU!=B!i!g!y@Q(n&2mhAG#ssaWF9+}Uresto`ndMEp95;jQHOt$bwlNft zMoKeeM#Jll{{YLid)Aev>RU`VWHS%}3VLVxisN(*X`#`|-5s-q+V003^v~4SuY50t z-(S8jYbvln%OP&XKqW}(G7Tk9p$T+2zZLu{)%9%@4I#u*let~LhdstS^cbvf3VaYA z6x82VHxDVDS9-SI7##3G2EMO4=ZCFkeKJ{>%~dUec-p@HmEc}C_|f6*49N}|qfG8G zfWrV8LFT?ci5%2&JyRTGt&WoR{=-USYnh{oiv*8z1XV_yW>0e9gx?z1j;`BPJM;kEQ za1IAd{{Z^xRHJJZ1!rb>_134QX_G^vXUj`cCU>*P2w$P_r@bm#D$D&F#zzpi2wj|^JRK;uc>@Jq+jcLEE4Lhc4KJA0Bz$R zhqXnw8&70vEuNp^Z8}6oA#;boAOqI`_a3#)%i=fEuaijd)EG!ZGvIAR`eV5{;0pC` z3}{IOq0^giL7lrm1D?7606x{PAAu~aAMJN7xV{T6Fa|$fXi24ZOybhICGc<>lSh4e z3;HvuR^!;?0Cvx6&iJSClEc7u!+d~~g%R~9IUF7U!NEB_J5+uu@t&RGO*A%{hmn8) zHvq3glgJqDUmg5bL-8k7u!UU3Zjv)g>Q{iI5<4H~T9h=eQNnUEU>(Eb{_L$nV#+a32o7$Kg#5YYjP>k&fkzkQ6pBNFMkZ>(Eyts`&3z zy736}kVkC~1-|nz&-Z<~$9i0;qdVQ$kHy~-buS6onKbBxo@pz}l2@)s9dq@p4Ljl_ z`rWE(CI*V&E-@fE!RO^XWLK|4Y2gnLPadOe1;zmcdNJx%z9VZugM;BXXeQR+-Hzm(?8a|lIr5q!Zzu34ZoO6gOLf~@N9NI8%?hyfENdlfHrUszA;%fV>vW= zPLUt{BU)*a=%cS4sxJ|IV~)!H*F>?AVL>2YK3Cdh;I(e-SN-8q>TgwrK``iLa8%Q}A=htT*rOn#x z*!Xd&c$38X%oe^uXy^N-KIu`_j&L~i@5VA~z14mh>bCwW6H7Op6BWsBtH{V0>-Dd1 zk3;bP0EaA)>Cne)tAK$3O}|W5o|4esNZ&Ypqq)yD7Q57jxw;%Sv1Du!A>Km~o;!@z z#iTQxEKag~*x_-WJ%Hz$PZMbOT8^Uy#7<0cXL^o}>7S)7nwGpvD2WC<6~#qJwXsmW z+Gm05{{RoB@#eB`E>IsYh1@&)o}haDE7SZx;13LFc3;@93~bX39Dv1-=`m=hnQ(;m3_NzZ-ay$_Xa>Tp0@{7Yu$~jnT1=Na^3LXU$?H z?zcU+Qt*C>;O!Bb?msVR`A8WjJu(Ns{{UXRTFXSyykU095mlXCLrK^kKm$B|J?rSN ziq=;;--SNTj8Uw|nZYA*$K5#UPe46u=dT07bD>Jwl;>cR93BWGImn^SY-vtSt25cW zIp9I0+#O2KDK6YL(~a05@;$Lyejv2c{6(crreCO;wvbi8Ap2zh0Q&0mJ|&20f7(%= zcJc*s)9Oui0J+nYdB1oT90tcx=x}Ob6|x@8@zwAaoufyXAdVzf2Ot1J^vUP^YTtxB zS#ROJURxU(97_Cwf)@j~PJaVhI=6^*cC~#!?CkPLa4@+5bw7`#HXi|8TuE)I$mS=I zgPs9Z&m;1ylsgly=U1XPjyzH0Sf9<=rKPl=Xe@K{u?1O2R&LznV>Lg-S$uJzU)x*w zRRze9FnA70BLHsz5y&Sv=ngBtw79nL?YEbvhLD_cIVbV-_04peUx+NcL2mk${10j6 zwgStHwg*wkJRPBUA}Q9&4(Gl{w#6Ec(19n4;uJe#GWC4 z3fM>m)DVeP7!}Ir3|Auu85twj*yG}#3~P>3DBz18V(#32UcJD^eXH8M1E;il;%k>- zT3GiaM?b)DPfom!^^=a48+Ja6)-_-3DBj(ddoFM}7_XMRbE@jM8j+IOHhJfSUV08r zdsosr{ao;topqp4; zOY3p8jEsT7$LK&JzD4-K@g94fLR)=Fe4`FYMLA~LMd~xHQ zQWM%{u4<7fcqkN*H)*IKTmOt}#fiN-Vcz58Py%DHCJb|wzW?B?us``tq6 ztu*ustHA&r$NcxMBggRgf>F8xrg)RWmcAmA!$@RcTr0|c zQ|5E>usu2HjtS4y_D^+WFO8&<2Vgf~`c*k86V2H8YsLQn4}5vz>pOo7rPtY2r4q=)hUd2i!;M2hVBkpNXyxdYygYcp8L`9HvZ61wqkh+)+AP3s6vsGx$yN%ZV} ztLx2sNN8^(o+!Y41s{h~>0169@P?h?L}Ote&it`F`~CoS6`8JhuG9NcJ4p*3q>ORz zTS_-Ya^5y)0k8O@OYr`sZ*8fC^H_8TpJH*)cIT~bYyLTw-$Hwc{$y1r*|FGEU+}AR zFB^D;buC4hTdI)2H&KJNyX1q|@ruv!hJgi~iQx#2<%WR+oU+Ca(g%O9uQlr517bJVv-u}$ApuBUgy+67n)ba@;Kzet@Z>kq zO4ie?Wmu|%<}e$MLF#kB_BAKKzYIm7!*_V9th2s$j-%zqThr75QCV|njcwTVh`evC z_^KMa7 z$|Pi;*Vs`QHK4g1nag-jL)MX{I)qJbpyT(7RGb`l#~$^;c#~MPeNnAaK<)`#1Kf4u zzK+!On6(&ujXq^<-A_@P_|wIH5xUa+Q*!Z^@*#CTV*daMI4nDHo;wQF#OP4>Pe6}H zywm>xdwiu!uL^sAg?a7PnX6suph5HC@;e?qYtbO_O}@3GfTg6Bhs@86jCSDmsy6!d zww9S?D#f;g?s{`s-&>VuvGeDPrSaW|h~d(rRJBN@Sp$rfk|JFCeJZEyv#4t_+urMb zC6TA|c104h0HH}OydLD7j2@U3q}7qEY?aSN)BX-?+Ww#R%ZF5Bh5$DQza)PnQC?qZ zUk~q>!y;cY^Ne=6hQ^S z=N%7h*T^0V@e^vAj5gYYzh;=6FxWzpI%9FpPp9i&d-y)UT*U~~4(}%f8~{10an|OM zPUh{ehyKHA9&BT^T+yYGHEUaFQ$B3z9(rSO13dH|wXxz|O3K>M6%Meq)_5sq;Po3{VF#i2||wD`jbvF=xW>OKIK#{ z3jxM)Sppd(B)A&@@7M6D?qmxfBZbtnQQihBs=)4I0s2y1Ot#Q@OOQb1eJeQK z?kbHHZXrvRWF?R?@XOQ@(2UcCy95uwVNu(8!Y$GRllfJdTo}Xj0P|X<)KOYoppZM4 zW;nsDwvRbw?a)>0yP$ql1dmZvHmfcHBf0gYw>P>YwS|K)ldn-$3OYAGbk$s3NZUJ( zl{c6a6qpi50L2PAm^l&LVOJ^CcC7gsgde%!=Q;0Fg_F$lp~E*!A4;ckHaD2{ZVz(R zni5#9XI5p-ao(F4YiNXR%PuN=X?GS}pOe?UMK8+6L!V+X#X``oZ3!-X)sM^r7^brc zp~=ePk~w9Ya(@brGg|(PUrJ@%Ce#LV!N&lD`hsc2@JkHf z`c!EQlR4eWj&V}s+@~!@v&09OtF?zt^#k2VkpP2}-@RJ6PdX74SVBLD^ZAOz)dbK5 zF&v)cR*|Odp*ypY@%7d7cxvX>$;@ve9#^h=b^cxJ`2GFAd_Q?(@%vlVFJucQqkhQH zp#%kvB-qEeETnPTzp-ib)2Twqa5>wW{(gVprXLIJ?R;}@;*EA7Acot^M?f}Yu=(48 z`_4eYB#;Lc`?rF5;=*J7mszVH4aGDYk2*eL{{VtrnY0g$+EumFJ=6;u#|Uz}kj}tm zLBJ8koa3*4Yx>R5E@wJ_lNK|MThxE`>-i`BhV_jP!rvdQi(SGkB!T1q07!79WH>RD zAY&!4Fi%tMU)8t6tzOqt@Z2{@*<@TC_4eYuuO28$RcO~;Q(tp4;aPl8xz((93XC^p zvGn}vJ8e#Ddr-4*Vjn;IUr()7NgfNQc4A|3$UolC`QnR>qB02My?-^c?qZsEMq}zv zE!Zkm103TVeFbia?Nh5At=#d7$K|G)7TKSgk> zs{-!daN5g(kA5q1NSOeMPH;gy)K^jY&J>J{au0gWa#pdVQtDEPq86yobO3W!qiAJd z(Pwr!%{D|4x7o^`pOr;yq%#54t2nC_CbvV88_g(2dyLW>SB`9f_o?#C>j#|%2_uqo zkO!depVF#X-cINJA+v$}>ftVoX`6OYByPcvBbtX$yp66BW^NN84!oc1P+MKI%0U$r zg=Uog>j8Prct2Wkmqa~?hc<2UdFhJ0ttG@uJgP#E;Xbu9MMY_$ zEvfrFBXK3qbL&=o^mCRt^{UGaxQvN%81s?ZqH_bL5wLm>tr0`zdka0wK_M2{EO;60 zeQP%APb7tra!LJZzrO0@3=T6>NeG+wlk<+XtBui{S`z5?pKp=OgoxL^MQXg}S6Jg5 zCl#5d%l3I0VNf@6MQFeJGHzj<^Y6`P4GD~z(1DyQVpZMS6xo}~03jd~lj~FMc!`#E z$?PeN$n&s`a(!ykY#jTSRLn}08Q^XQuQgUU*)Bpb`E%Buw?;PHMhG1#(8$cpTO@VK zr>%inM%0e7!{o=nUQK36B#tv9nKs@!q_Nw!2@{%FW-nB7kS7nJE9y|k#io`b1%;FZ$ z2d!MZE}%x(099|a7LQ^KXBa2>)u`N;9W)&@Noc_noO{$)0^)F+K_8_$(g`DSZkuo! zZhuTxt2#JmL6QdpwrfWOTT0rPmiAFcISzoj@}%cAqLNDNWN-oL%}Hw>#8#K@=aOl< ziX+M*JZ(L{tz}{&nO;LVlrtU&8L9VA99~R(dK2nu1xY4se+cHTyDH-&r>!Gfbss!y zGem@Z`1!uRv|U6z;S+G6b@%tEE#sZ!^I~JTcB_oCVVZuTnuBaoUC7ozMn@nF3a=&N zGx<@ElxIJM21wBW89C;w1(_i-WA9>{Mo&$RC>qh>TZ|9~W7Ji72%9OlD0&k~Ka~}q zo_NPmPn|X-CM*?kk~7Gm?_zmxu?@3FY!5;+)6%9fz(|q$^c4~EtsiLw6Hbgh&CcP% zVw9IaQnrQ6a58#Ugb}kuW(|OP;;4f2A1Wp2d-26tR*o3j6;elPTI_2FbS!e_O^MUg z)2&)rUU_fIYy$|m{3?q{7*e515$j7I%_vs+bL&mZp%ZUoR?^1C7Bi}-+4A>kwVef zA2M(;P|C=0a7Rv}vT4|>TttM&7ndRVhk7l@jP5;GfPS?Xp3KF_!naISkYh!`9D$nB z30lQ;Bz2ZGGZVQ-ZuLq>aHDrt6)4yp zV#XMfOLNCcbT-HRaAG?Ue?lp8yV;pI^h8m_`@lnt)rUYORR;ljd)3=?-UAjdf%uBZXe5@{NfAF9WO8H*>^AFgXk zTD?oyO-baA5i*P_bCK4+l;7LGOuO(0$2+eOSO<&yPUhlH2GU$kRop2aq#WY}dt}%3 zYEnDfc8hj0JNwt-SNs%r_IK5F?MmC?j+v*;saxr`jc+nSKzN+K<&jW)%m_a}2LNWj zVeo?;Muuelv$B$C`8@KAcAd06+x`jT@y>4*{4=-kp0hj>-RX|j;j$J

    (ZtL4{tp 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¨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 WzB%!~gf&kC-OYEo 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 Z_@#@@P;v(+j(U36r-q>tB_x}%|Jk^+z3>14 literal 0 HcmV?d00001 diff --git a/samples/snippets/hybrid_glossaries/resources/standard_format.txt b/samples/snippets/hybrid_glossaries/resources/standard_format.txt new file mode 100644 index 00000000..d91d49e8 --- /dev/null +++ b/samples/snippets/hybrid_glossaries/resources/standard_format.txt @@ -0,0 +1,2 @@ +This is +a test! From 2bd4ab313ee6d2c731c455e5c676b3f77e68832d Mon Sep 17 00:00:00 2001 From: Elizabeth Crowdus Date: Wed, 4 Sep 2019 12:04:50 -0500 Subject: [PATCH 46/94] fix: refactored MP3 file creation test for Hybrid glossaries samples [(#2379)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2379) * fix: refactored MP3 file creation test * fix: lint --- .../snippets/hybrid_glossaries/hybrid_tutorial_tests.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py index bdd8251b..87e8420a 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import filecmp import os import sys @@ -97,7 +96,6 @@ def test_translate_glossary(): def test_tts_standard(capsys): outfile = 'resources/test_standard_text.mp3' - expected_outfile = 'resources/expected_standard_text.mp3' textfile = 'resources/standard_format.txt' with open(textfile, 'r') as f: @@ -107,12 +105,6 @@ def test_tts_standard(capsys): # Assert audio file generated assert os.path.isfile(outfile) - - # Assert audio file generated correctly - assert filecmp.cmp(outfile, - expected_outfile, - shallow=True) - out, err = capsys.readouterr() # Assert success message printed From 0443253b5521695a54700dd173aeffa974b9bc63 Mon Sep 17 00:00:00 2001 From: Noah Negrey Date: Mon, 16 Sep 2019 11:31:27 -0600 Subject: [PATCH 47/94] Fix variable names in comments [(#2400)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2400) --- samples/snippets/hybrid_glossaries/hybrid_tutorial.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py index be73960f..5ed55458 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py @@ -126,8 +126,8 @@ def translate_text(text, source_language_code, target_language_code, ARGS text: String of text to translate - prev_lang: language of input text - new_lang: language of output text + source_language_code: language of input text + target_language_code: language of output text project_id: GCP project id glossary_name: name you gave your project's glossary resource when you created it From 4ba3a4488a8cb085912a95ca5e2d2330ff192420 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Mon, 7 Oct 2019 15:45:22 -0700 Subject: [PATCH 48/94] Adds updates for samples profiler ... vision [(#2439)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2439) --- samples/snippets/beta_snippets_test.py | 2 -- samples/snippets/hybrid_glossaries/requirements.txt | 6 +++--- samples/snippets/requirements.txt | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index 265fb986..6f6f2959 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -99,7 +99,6 @@ def test_create_glossary(capsys, unique_glossary_id): beta_snippets.create_glossary(PROJECT_ID, unique_glossary_id) out, _ = capsys.readouterr() assert 'Created' in out - assert PROJECT_ID in out assert unique_glossary_id in out assert 'gs://cloud-samples-data/translation/glossary.csv' in out @@ -129,6 +128,5 @@ def test_delete_glossary(capsys, unique_glossary_id): beta_snippets.create_glossary(PROJECT_ID, unique_glossary_id) beta_snippets.delete_glossary(PROJECT_ID, unique_glossary_id) out, _ = capsys.readouterr() - assert PROJECT_ID in out assert 'us-central1' in out assert unique_glossary_id in out diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt index 29c4261a..7a4a32b3 100644 --- a/samples/snippets/hybrid_glossaries/requirements.txt +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -1,3 +1,3 @@ -google-cloud-translate==1.4.0 -google-cloud-vision==0.35.2 -google-cloud-texttospeech==0.4.0 \ No newline at end of file +google-cloud-translate==1.6.0 +google-cloud-vision==0.39.0 +google-cloud-texttospeech==0.5.0 diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 318e3485..a8bc353f 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-translate==1.4.0 -google-cloud-storage==1.14.0 +google-cloud-translate==1.6.0 +google-cloud-storage==1.19.1 From 98326340b07064101d44671d62d80f7c10243657 Mon Sep 17 00:00:00 2001 From: Noah Negrey Date: Mon, 28 Oct 2019 08:40:15 -0600 Subject: [PATCH 49/94] Update v2 samples to explicitly use v2 library [(#2498)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2498) --- samples/snippets/quickstart.py | 2 +- samples/snippets/requirements.txt | 2 +- samples/snippets/snippets.py | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/samples/snippets/quickstart.py b/samples/snippets/quickstart.py index c84ea892..888b6691 100644 --- a/samples/snippets/quickstart.py +++ b/samples/snippets/quickstart.py @@ -18,7 +18,7 @@ def run_quickstart(): # [START translate_quickstart] # Imports the Google Cloud client library - from google.cloud import translate + from google.cloud import translate_v2 as translate # Instantiates a client translate_client = translate.Client() diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index a8bc353f..f8a1e7fe 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-translate==1.6.0 +google-cloud-translate==2.0.0 google-cloud-storage==1.19.1 diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index b5719d23..2d5232e6 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -23,13 +23,13 @@ import argparse -from google.cloud import translate import six def detect_language(text): # [START translate_detect_language] """Detects the text's language.""" + from google.cloud import translate_v2 as translate translate_client = translate.Client() # Text can also be a sequence of strings, in which case this method @@ -45,6 +45,7 @@ def detect_language(text): def list_languages(): # [START translate_list_codes] """Lists all available languages.""" + from google.cloud import translate_v2 as translate translate_client = translate.Client() results = translate_client.get_languages() @@ -61,6 +62,7 @@ def list_languages_with_target(target): Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ + from google.cloud import translate_v2 as translate translate_client = translate.Client() results = translate_client.get_languages(target_language=target) @@ -70,7 +72,7 @@ def list_languages_with_target(target): # [END translate_list_language_names] -def translate_text_with_model(target, text, model=translate.NMT): +def translate_text_with_model(target, text, model='nmt'): # [START translate_text_with_model] """Translates text into the target language. @@ -79,6 +81,7 @@ def translate_text_with_model(target, text, model=translate.NMT): Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ + from google.cloud import translate_v2 as translate translate_client = translate.Client() if isinstance(text, six.binary_type): @@ -103,6 +106,7 @@ def translate_text(target, text): Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ + from google.cloud import translate_v2 as translate translate_client = translate.Client() if isinstance(text, six.binary_type): From b400096758f1dba0492c925c29d7f4a5b691b4ad Mon Sep 17 00:00:00 2001 From: "Leah E. Cole" <6719667+leahecole@users.noreply.github.com> Date: Mon, 6 Jan 2020 14:34:15 -0800 Subject: [PATCH 50/94] fix: translate test [(#2671)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2671) * fix: translate test * Add unicode formatting --- samples/snippets/beta_snippets.py | 39 +++++++++++++------------- samples/snippets/beta_snippets_test.py | 5 ++-- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/samples/snippets/beta_snippets.py b/samples/snippets/beta_snippets.py index 0f8a423c..53093277 100644 --- a/samples/snippets/beta_snippets.py +++ b/samples/snippets/beta_snippets.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,7 +35,7 @@ def translate_text(project_id, text): target_language_code='sr-Latn') for translation in response.translations: - print('Translated Text: {}'.format(translation)) + print(u'Translated Text: {}'.format(translation)) # [END translate_translate_text_beta] @@ -71,8 +72,8 @@ def batch_translate_text(project_id, input_uri, output_uri): result = operation.result(90) - print('Total Characters: {}'.format(result.total_characters)) - print('Translated Characters: {}'.format(result.translated_characters)) + print(u'Total Characters: {}'.format(result.total_characters)) + print(u'Translated Characters: {}'.format(result.translated_characters)) # [END translate_batch_translate_text_beta] @@ -93,7 +94,7 @@ def detect_language(project_id, text): mime_type='text/plain') # mime types: text/plain, text/html for language in response.languages: - print('Language Code: {} (Confidence: {})'.format( + print(u'Language Code: {} (Confidence: {})'.format( language.language_code, language.confidence)) # [END translate_detect_language_beta] @@ -113,7 +114,7 @@ def list_languages(project_id): print('Supported Languages:') for language in response.languages: - print('Language Code: {}'.format(language.language_code)) + print(u'Language Code: {}'.format(language.language_code)) # [END translate_list_codes_beta] @@ -134,8 +135,8 @@ def list_languages_with_target(project_id, display_language_code): print('Supported Languages:') for language in response.languages: - print('Language Code: {}'.format(language.language_code)) - print('Display Name: {}\n'.format(language.display_name)) + print(u'Language Code: {}'.format(language.language_code)) + print(u'Display Name: {}\n'.format(language.display_name)) # [END translate_list_language_names_beta] @@ -172,8 +173,8 @@ def create_glossary(project_id, glossary_id): operation = client.create_glossary(parent=parent, glossary=glossary) result = operation.result(timeout=90) - print('Created: {}'.format(result.name)) - print('Input Uri: {}'.format(result.input_config.gcs_source.input_uri)) + print(u'Created: {}'.format(result.name)) + print(u'Input Uri: {}'.format(result.input_config.gcs_source.input_uri)) # [END translate_create_glossary_beta] @@ -188,12 +189,12 @@ def list_glossaries(project_id): parent = client.location_path(project_id, location) for glossary in client.list_glossaries(parent): - print('Name: {}'.format(glossary.name)) - print('Entry count: {}'.format(glossary.entry_count)) - print('Input uri: {}'.format( + print(u'Name: {}'.format(glossary.name)) + print(u'Entry count: {}'.format(glossary.entry_count)) + print(u'Input uri: {}'.format( glossary.input_config.gcs_source.input_uri)) for language_code in glossary.language_codes_set.language_codes: - print('Language code: {}'.format(language_code)) + print(u'Language code: {}'.format(language_code)) # [END translate_list_glossary_beta] @@ -211,13 +212,13 @@ def get_glossary(project_id, glossary_id): glossary_id) response = client.get_glossary(parent) - print('Name: {}'.format(response.name)) - print('Language Pair:') - print('\tSource Language Code: {}'.format( + print(u'Name: {}'.format(response.name)) + print(u'Language Pair:') + print(u'\tSource Language Code: {}'.format( response.language_pair.source_language_code)) - print('\tTarget Language Code: {}'.format( + print(u'\tTarget Language Code: {}'.format( response.language_pair.target_language_code)) - print('Input Uri: {}'.format( + print(u'Input Uri: {}'.format( response.input_config.gcs_source.input_uri)) # [END translate_get_glossary_beta] @@ -237,7 +238,7 @@ def delete_glossary(project_id, glossary_id): operation = client.delete_glossary(parent) result = operation.result(timeout=90) - print('Deleted: {}'.format(result.name)) + print(u'Deleted: {}'.format(result.name)) # [END translate_delete_glossary_beta] diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index 6f6f2959..10a30c80 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -63,7 +64,7 @@ def unique_glossary_id(): def test_translate_text(capsys): beta_snippets.translate_text(PROJECT_ID, 'Hello world') out, _ = capsys.readouterr() - assert 'Zdravo svet' in out or 'Pozdrav svijetu' in out + assert 'Zdravo svijete' in out or 'Pozdrav svijetu' in out def test_batch_translate_text(capsys, bucket): @@ -77,7 +78,7 @@ def test_batch_translate_text(capsys, bucket): def test_detect_language(capsys): - beta_snippets.detect_language(PROJECT_ID, 'Hæ sæta') + beta_snippets.detect_language(PROJECT_ID, u'Hæ sæta') out, _ = capsys.readouterr() assert 'is' in out From 06662155677d6f48d37a6c0c218bd4129726f2c2 Mon Sep 17 00:00:00 2001 From: Noah Negrey Date: Tue, 7 Jan 2020 11:12:01 -0700 Subject: [PATCH 51/94] automl: add natural language sentiment analysis ga samples [(#2677)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2677) * automl: add natural language sentiment analysis ga samples * Add links to documentation * Update tests to use centralized project * Fix environment variable, make translate test less flaky --- samples/snippets/beta_snippets_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index 10a30c80..4d65c3c2 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -64,7 +64,7 @@ def unique_glossary_id(): def test_translate_text(capsys): beta_snippets.translate_text(PROJECT_ID, 'Hello world') out, _ = capsys.readouterr() - assert 'Zdravo svijete' in out or 'Pozdrav svijetu' in out + assert 'Translated Text:' in out def test_batch_translate_text(capsys, bucket): From 42afcb42a748019e65115d704d5b591624801e46 Mon Sep 17 00:00:00 2001 From: "Leah E. Cole" <6719667+leahecole@users.noreply.github.com> Date: Tue, 21 Jan 2020 15:22:35 -0800 Subject: [PATCH 52/94] fix region tag typo [(#2731)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2731) --- samples/snippets/hybrid_glossaries/hybrid_tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py index 5ed55458..42f854eb 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py @@ -242,7 +242,7 @@ def main(): PROJECT_ID, glossary_name) # translated text -> synthetic audio text_to_speech(text_to_speak, outfile) - # [END transalte_hybrid_integration] + # [END translate_hybrid_integration] if __name__ == '__main__': From a80d5f46317b5d4e84199efa238f5feca3b563a8 Mon Sep 17 00:00:00 2001 From: Michelle Casbon Date: Fri, 31 Jan 2020 14:25:43 -0800 Subject: [PATCH 53/94] Migrate published samples [(#2759)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2759) Migrate from tmp-generated-samples branch 615c08e Remove boilerplate Update copyright date Blacken Remove unused imports Shorten docstrings Remove CLI Set defaults in function definition Add link to supported types guide Inline function arguments Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com> --- .../snippets/translate_v3_translate_text.py | 40 +++++++++++++++++++ .../translate_v3_translate_text_test.py | 24 +++++++++++ 2 files changed, 64 insertions(+) create mode 100644 samples/snippets/translate_v3_translate_text.py create mode 100644 samples/snippets/translate_v3_translate_text_test.py diff --git a/samples/snippets/translate_v3_translate_text.py b/samples/snippets/translate_v3_translate_text.py new file mode 100644 index 00000000..b6820aaf --- /dev/null +++ b/samples/snippets/translate_v3_translate_text.py @@ -0,0 +1,40 @@ +# 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. + +# [START translate_v3_translate_text] +from google.cloud import translate + + +def sample_translate_text(project_id="[Google Cloud Project ID]"): + """Translating Text.""" + + client = translate.TranslationServiceClient() + + parent = client.location_path(project_id, "global") + + # Detail on supported types can be found here: + # https://cloud.google.com/translate/docs/supported-formats + response = client.translate_text( + parent=parent, + contents=["Hello, world!"], + mime_type="text/plain", # mime types: text/plain, text/html + source_language_code="en-US", + target_language_code="fr", + ) + # Display the translation for each input text provided + for translation in response.translations: + print(u"Translated text: {}".format(translation.translated_text)) + + +# [END translate_v3_translate_text] diff --git a/samples/snippets/translate_v3_translate_text_test.py b/samples/snippets/translate_v3_translate_text_test.py new file mode 100644 index 00000000..e4f8acfb --- /dev/null +++ b/samples/snippets/translate_v3_translate_text_test.py @@ -0,0 +1,24 @@ +# 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 translate_v3_translate_text + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + + +def test_translate_text(capsys): + translate_v3_translate_text.sample_translate_text(PROJECT_ID) + out, _ = capsys.readouterr() + assert "Bonjour le monde" in out From d5f78a937924f83095a3b7b546c516c54937f118 Mon Sep 17 00:00:00 2001 From: Mike <45373284+munkhuushmgl@users.noreply.github.com> Date: Tue, 4 Feb 2020 11:42:28 -0800 Subject: [PATCH 54/94] translate v3 snippets [(#2745)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2745) * translate text v3 * added translate text with glossary snippets * finished glossary tests * removed overlapping files * added encoding tag * added more descriptive docs and broke down tests * Update translate/cloud-client/translate_v3_create_glossary.py Co-Authored-By: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> * Update translate/cloud-client/translate_v3_create_glossary.py Co-Authored-By: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> * fixed test for translate with glossary * fixed lint Co-authored-by: Michelle Casbon Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> --- .../snippets/translate_v3_create_glossary.py | 59 +++++++++++++++++++ .../translate_v3_create_glossary_test.py | 38 ++++++++++++ .../snippets/translate_v3_delete_glossary.py | 32 ++++++++++ .../translate_v3_delete_glossary_test.py | 34 +++++++++++ samples/snippets/translate_v3_get_glossary.py | 32 ++++++++++ .../translate_v3_get_glossary_test.py | 45 ++++++++++++++ .../snippets/translate_v3_translate_text.py | 2 +- ...anslate_v3_translate_text_with_glossary.py | 51 ++++++++++++++++ ...te_v3_translate_text_with_glossary_test.py | 48 +++++++++++++++ 9 files changed, 340 insertions(+), 1 deletion(-) create mode 100644 samples/snippets/translate_v3_create_glossary.py create mode 100644 samples/snippets/translate_v3_create_glossary_test.py create mode 100644 samples/snippets/translate_v3_delete_glossary.py create mode 100644 samples/snippets/translate_v3_delete_glossary_test.py create mode 100644 samples/snippets/translate_v3_get_glossary.py create mode 100644 samples/snippets/translate_v3_get_glossary_test.py create mode 100644 samples/snippets/translate_v3_translate_text_with_glossary.py create mode 100644 samples/snippets/translate_v3_translate_text_with_glossary_test.py diff --git a/samples/snippets/translate_v3_create_glossary.py b/samples/snippets/translate_v3_create_glossary.py new file mode 100644 index 00000000..b42d33c8 --- /dev/null +++ b/samples/snippets/translate_v3_create_glossary.py @@ -0,0 +1,59 @@ +# 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. + +# [START translate_v3_create_glossary] +from google.cloud import translate_v3 as translate + + +def create_glossary( + project_id="YOUR_PROJECT_ID", + input_uri="YOUR_INPUT_URI", + glossary_id="YOUR_GLOSSARY_ID", +): + """ + Create a equivalent term sets glossary. Glossary can be words or + short phrases (usually fewer than five words). + https://cloud.google.com/translate/docs/advanced/glossary#format-glossary + """ + client = translate.TranslationServiceClient() + + # Supported language codes: https://cloud.google.com/translate/docs/languages + source_lang_code = "en" + target_lang_code = "ja" + location = "us-central1" # The location of the glossary + + name = client.glossary_path(project_id, location, glossary_id) + language_codes_set = translate.types.Glossary.LanguageCodesSet( + language_codes=[source_lang_code, target_lang_code] + ) + + gcs_source = translate.types.GcsSource(input_uri=input_uri) + + input_config = translate.types.GlossaryInputConfig(gcs_source=gcs_source) + + glossary = translate.types.Glossary( + name=name, language_codes_set=language_codes_set, input_config=input_config + ) + + parent = client.location_path(project_id, location) + # glossary is a custom dictionary Translation API uses + # to translate the domain-specific terminology. + operation = client.create_glossary(parent=parent, glossary=glossary) + + result = operation.result(timeout=90) + print("Created: {}".format(result.name)) + print("Input Uri: {}".format(result.input_config.gcs_source.input_uri)) + + +# [END translate_v3_create_glossary] diff --git a/samples/snippets/translate_v3_create_glossary_test.py b/samples/snippets/translate_v3_create_glossary_test.py new file mode 100644 index 00000000..bf9f08cb --- /dev/null +++ b/samples/snippets/translate_v3_create_glossary_test.py @@ -0,0 +1,38 @@ +# 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 translate_v3_create_glossary +import translate_v3_delete_glossary +import uuid + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" + + +def test_create_glossary(capsys): + glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + translate_v3_create_glossary.create_glossary( + PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id + ) + out, _ = capsys.readouterr() + # assert + assert "Created:" in out + assert "gs://cloud-samples-data/translation/glossary_ja.csv" in out + + # clean up after use + try: + translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) + except Exception: + pass diff --git a/samples/snippets/translate_v3_delete_glossary.py b/samples/snippets/translate_v3_delete_glossary.py new file mode 100644 index 00000000..da1acb40 --- /dev/null +++ b/samples/snippets/translate_v3_delete_glossary.py @@ -0,0 +1,32 @@ +# 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. + +# [START translate_v3_delete_glossary] +from google.cloud import translate_v3 as translate + + +def delete_glossary( + project_id="YOUR_PROJECT_ID", glossary_id="YOUR_GLOSSARY_ID" +): + """Delete a specific glossary based on the glossary ID.""" + client = translate.TranslationServiceClient() + + parent = client.glossary_path(project_id, "us-central1", glossary_id) + + operation = client.delete_glossary(parent) + result = operation.result(timeout=90) + print("Deleted: {}".format(result.name)) + + +# [END translate_v3_delete_glossary] diff --git a/samples/snippets/translate_v3_delete_glossary_test.py b/samples/snippets/translate_v3_delete_glossary_test.py new file mode 100644 index 00000000..1c1fb2da --- /dev/null +++ b/samples/snippets/translate_v3_delete_glossary_test.py @@ -0,0 +1,34 @@ +# 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 translate_v3_create_glossary +import translate_v3_delete_glossary +import uuid + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" + + +def test_delete_glossary(capsys): + # setup + glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + translate_v3_create_glossary.create_glossary( + PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id + ) + + # assert + translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) + out, _ = capsys.readouterr() + assert "Deleted:" in out diff --git a/samples/snippets/translate_v3_get_glossary.py b/samples/snippets/translate_v3_get_glossary.py new file mode 100644 index 00000000..99753136 --- /dev/null +++ b/samples/snippets/translate_v3_get_glossary.py @@ -0,0 +1,32 @@ +# 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. + +# [START translate_v3_get_glossary] +from google.cloud import translate_v3 as translate + + +def get_glossary(project_id="YOUR_PROJECT_ID", glossary_id="YOUR_GLOSSARY_ID"): + """Get a particular glossary based on the glossary ID.""" + + client = translate.TranslationServiceClient() + + name = client.glossary_path(project_id, "us-central1", glossary_id) + + response = client.get_glossary(name) + print(u"Glossary name: {}".format(response.name)) + print(u"Entry count: {}".format(response.entry_count)) + print(u"Input URI: {}".format(response.input_config.gcs_source.input_uri)) + + +# [END translate_v3_get_glossary] diff --git a/samples/snippets/translate_v3_get_glossary_test.py b/samples/snippets/translate_v3_get_glossary_test.py new file mode 100644 index 00000000..7a4aa167 --- /dev/null +++ b/samples/snippets/translate_v3_get_glossary_test.py @@ -0,0 +1,45 @@ +# 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 pytest +import translate_v3_create_glossary +import translate_v3_delete_glossary +import translate_v3_get_glossary +import uuid + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" + + +@pytest.fixture(scope="session") +def glossary(): + """Get the ID of a glossary available to session (do not mutate/delete).""" + glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + translate_v3_create_glossary.create_glossary( + PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id + ) + + yield glossary_id + + try: + translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) + except Exception: + pass + + +def test_get_glossary(capsys, glossary): + translate_v3_get_glossary.get_glossary(PROJECT_ID, glossary) + out, _ = capsys.readouterr() + assert "gs://cloud-samples-data/translation/glossary_ja.csv" in out diff --git a/samples/snippets/translate_v3_translate_text.py b/samples/snippets/translate_v3_translate_text.py index b6820aaf..c5034c94 100644 --- a/samples/snippets/translate_v3_translate_text.py +++ b/samples/snippets/translate_v3_translate_text.py @@ -16,7 +16,7 @@ from google.cloud import translate -def sample_translate_text(project_id="[Google Cloud Project ID]"): +def sample_translate_text(project_id="YOUR_PROJECT_ID"): """Translating Text.""" client = translate.TranslationServiceClient() diff --git a/samples/snippets/translate_v3_translate_text_with_glossary.py b/samples/snippets/translate_v3_translate_text_with_glossary.py new file mode 100644 index 00000000..cc4da005 --- /dev/null +++ b/samples/snippets/translate_v3_translate_text_with_glossary.py @@ -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. + +# [START translate_v3_translate_text_with_glossary] + +from google.cloud import translate_v3 + + +def translate_text_with_glossary( + text="YOUR_TEXT_TO_TRANSLATE", + project_id="YOUR_PROJECT_ID", + glossary_id="YOUR_GLOSSARY_ID" +): + """Translates a given text using a glossary.""" + + client = translate_v3.TranslationServiceClient() + + contents = [text] + parent = client.location_path(project_id, "us-central1") + + glossary = client.glossary_path( + project_id, "us-central1", glossary_id # The location of the glossary + ) + + glossary_config = translate_v3.types.TranslateTextGlossaryConfig(glossary=glossary) + + # Supported language codes: https://cloud.google.com/translate/docs/languages + response = client.translate_text( + contents, + target_language_code="ja", + source_language_code="en", + parent=parent, + glossary_config=glossary_config, + ) + print("Translated text: \n") + for translation in response.glossary_translations: + print(u"\t {}".format(translation.translated_text)) + + +# [END translate_v3_translate_text_with_glossary] diff --git a/samples/snippets/translate_v3_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_translate_text_with_glossary_test.py new file mode 100644 index 00000000..72f9d64e --- /dev/null +++ b/samples/snippets/translate_v3_translate_text_with_glossary_test.py @@ -0,0 +1,48 @@ +# -*- encoding: 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 pytest +import translate_v3_create_glossary +import translate_v3_delete_glossary +import translate_v3_translate_text_with_glossary +import uuid + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" + + +@pytest.fixture(scope="session") +def glossary(): + """Get the ID of a glossary available to session (do not mutate/delete).""" + glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + translate_v3_create_glossary.create_glossary( + PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id + ) + + yield glossary_id + + try: + translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) + except Exception: + pass + + +def test_translate_text_with_glossary(capsys, glossary): + translate_v3_translate_text_with_glossary.translate_text_with_glossary( + "account", PROJECT_ID, glossary + ) + out, _ = capsys.readouterr() + assert "アカウント" or "口座" in out From 33f7ce03a4d17c5881c92ebf83cc9755af30ac09 Mon Sep 17 00:00:00 2001 From: Michelle Casbon Date: Tue, 4 Feb 2020 15:01:15 -0800 Subject: [PATCH 55/94] Translate: migrate published samples [(#2768)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2768) Migrate from tmp-generated-samples branch 615c08e Remove boilerplate Update copyright date Blacken Remove unused imports --- .../snippets/translate_v3_detect_language.py | 43 +++++++++++++++++++ .../translate_v3_detect_language_test.py | 24 +++++++++++ .../translate_v3_get_supported_languages.py | 34 +++++++++++++++ ...anslate_v3_get_supported_languages_test.py | 24 +++++++++++ 4 files changed, 125 insertions(+) create mode 100644 samples/snippets/translate_v3_detect_language.py create mode 100644 samples/snippets/translate_v3_detect_language_test.py create mode 100644 samples/snippets/translate_v3_get_supported_languages.py create mode 100644 samples/snippets/translate_v3_get_supported_languages_test.py diff --git a/samples/snippets/translate_v3_detect_language.py b/samples/snippets/translate_v3_detect_language.py new file mode 100644 index 00000000..9b92853c --- /dev/null +++ b/samples/snippets/translate_v3_detect_language.py @@ -0,0 +1,43 @@ +# 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. + +# [START translate_v3_detect_language] +from google.cloud import translate + + +def sample_detect_language(project_id="YOUR_PROJECT_ID"): + """Detecting the language of a text string.""" + + client = translate.TranslationServiceClient() + + parent = client.location_path(project_id, "global") + + # Detail on supported types can be found here: + # https://cloud.google.com/translate/docs/supported-formats + response = client.detect_language( + content="Hello, world!", + parent=parent, + mime_type="text/plain", # mime types: text/plain, text/html + ) + + # Display list of detected languages sorted by detection confidence. + # The most probable language is first. + for language in response.languages: + # The language detected + print(u"Language code: {}".format(language.language_code)) + # Confidence of detection result for this language + print(u"Confidence: {}".format(language.confidence)) + + +# [END translate_v3_detect_language] diff --git a/samples/snippets/translate_v3_detect_language_test.py b/samples/snippets/translate_v3_detect_language_test.py new file mode 100644 index 00000000..82620bc5 --- /dev/null +++ b/samples/snippets/translate_v3_detect_language_test.py @@ -0,0 +1,24 @@ +# 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 translate_v3_detect_language + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + + +def test_detect_language(capsys): + translate_v3_detect_language.sample_detect_language(PROJECT_ID) + out, _ = capsys.readouterr() + assert "en" in out diff --git a/samples/snippets/translate_v3_get_supported_languages.py b/samples/snippets/translate_v3_get_supported_languages.py new file mode 100644 index 00000000..9a2df58d --- /dev/null +++ b/samples/snippets/translate_v3_get_supported_languages.py @@ -0,0 +1,34 @@ +# 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. + +# [START translate_v3_get_supported_languages] +from google.cloud import translate + + +def sample_get_supported_languages(project_id="YOUR_PROJECT_ID"): + """Getting a list of supported language codes.""" + + client = translate.TranslationServiceClient() + + parent = client.location_path(project_id, "global") + + response = client.get_supported_languages(parent=parent) + + # List language codes of supported languages. + print("Supported Languages:") + for language in response.languages: + print(u"Language Code: {}".format(language.language_code)) + + +# [END translate_v3_get_supported_languages] diff --git a/samples/snippets/translate_v3_get_supported_languages_test.py b/samples/snippets/translate_v3_get_supported_languages_test.py new file mode 100644 index 00000000..b4ba4cd2 --- /dev/null +++ b/samples/snippets/translate_v3_get_supported_languages_test.py @@ -0,0 +1,24 @@ +# 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 translate_v3_get_supported_languages + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + + +def test_list_languages(capsys): + translate_v3_get_supported_languages.sample_get_supported_languages(PROJECT_ID) + out, _ = capsys.readouterr() + assert "zh-CN" in out From 48850ab2fbdf1a5856ade310392305179e4ee0df Mon Sep 17 00:00:00 2001 From: Michelle Casbon Date: Tue, 4 Feb 2020 15:23:11 -0800 Subject: [PATCH 56/94] Translate: migrate published glossaries samples [(#2769)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2769) Migrate from tmp-generated-samples branch fef998b Remove boilerplate Update copyright date Blacken Remove unused imports Shorten docstrings Remove CLI --- .../snippets/translate_v3_list_glossary.py | 40 ++++++++++++++++ .../translate_v3_list_glossary_test.py | 46 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 samples/snippets/translate_v3_list_glossary.py create mode 100644 samples/snippets/translate_v3_list_glossary_test.py diff --git a/samples/snippets/translate_v3_list_glossary.py b/samples/snippets/translate_v3_list_glossary.py new file mode 100644 index 00000000..e52d6b26 --- /dev/null +++ b/samples/snippets/translate_v3_list_glossary.py @@ -0,0 +1,40 @@ +# 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. + +# [START translate_v3_list_glossary] +from google.cloud import translate + + +def sample_list_glossaries(project_id="YOUR_PROJECT_ID"): + """List Glossaries.""" + + client = translate.TranslationServiceClient() + + parent = client.location_path(project_id, "us-central1") + + # Iterate over all results + for glossary in client.list_glossaries(parent): + print("Name: {}".format(glossary.name)) + print("Entry count: {}".format(glossary.entry_count)) + print("Input uri: {}".format(glossary.input_config.gcs_source.input_uri)) + + # Note: You can create a glossary using one of two modes: + # language_code_set or language_pair. When listing the information for + # a glossary, you can only get information for the mode you used + # when creating the glossary. + for language_code in glossary.language_codes_set.language_codes: + print("Language code: {}".format(language_code)) + + +# [END translate_v3_list_glossary] diff --git a/samples/snippets/translate_v3_list_glossary_test.py b/samples/snippets/translate_v3_list_glossary_test.py new file mode 100644 index 00000000..de77daba --- /dev/null +++ b/samples/snippets/translate_v3_list_glossary_test.py @@ -0,0 +1,46 @@ +# 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 pytest +import translate_v3_create_glossary +import translate_v3_delete_glossary +import translate_v3_list_glossary +import uuid + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" + + +@pytest.fixture(scope="session") +def glossary(): + """Get the ID of a glossary available to session (do not mutate/delete).""" + glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + translate_v3_create_glossary.create_glossary( + PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id + ) + + yield glossary_id + + try: + translate_v3_delete_glossary.sample_delete_glossary(PROJECT_ID, glossary_id) + except Exception: + pass + + +def test_list_glossary(capsys, glossary): + translate_v3_list_glossary.sample_list_glossaries(PROJECT_ID) + out, _ = capsys.readouterr() + assert glossary in out + assert "gs://cloud-samples-data/translation/glossary_ja.csv" in out From aa5939366208b369bdfc404d5ec0eaf81fcffb9a Mon Sep 17 00:00:00 2001 From: Noah Negrey Date: Thu, 20 Feb 2020 14:47:23 -0700 Subject: [PATCH 57/94] translate: increase timeout [(#2937)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2937) --- samples/snippets/beta_snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/beta_snippets.py b/samples/snippets/beta_snippets.py index 53093277..08ee5b72 100644 --- a/samples/snippets/beta_snippets.py +++ b/samples/snippets/beta_snippets.py @@ -70,7 +70,7 @@ def batch_translate_text(project_id, input_uri, output_uri): input_configs=[input_config], output_config=output_config) - result = operation.result(90) + result = operation.result(180) print(u'Total Characters: {}'.format(result.total_characters)) print(u'Translated Characters: {}'.format(result.translated_characters)) From cc5c848e9badf05efb964f9fb35f7970131f11f4 Mon Sep 17 00:00:00 2001 From: Mike <45373284+munkhuushmgl@users.noreply.github.com> Date: Mon, 2 Mar 2020 15:29:23 -0800 Subject: [PATCH 58/94] Translate: migrate published v3 translate batch samples [(#2914)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/2914) * Translate: migrate published b v3 tch samples * added missing requirements * extended wait time * inlined some vals and specified input and output * added link to supported file types & modified default values of input uri * fixed small nit --- .../translate_v3_batch_translate_text.py | 55 ++++++++++++++ .../translate_v3_batch_translate_text_test.py | 43 +++++++++++ ...e_v3_batch_translate_text_with_glossary.py | 74 +++++++++++++++++++ ...batch_translate_text_with_glossary_test.py | 64 ++++++++++++++++ 4 files changed, 236 insertions(+) create mode 100644 samples/snippets/translate_v3_batch_translate_text.py create mode 100644 samples/snippets/translate_v3_batch_translate_text_test.py create mode 100644 samples/snippets/translate_v3_batch_translate_text_with_glossary.py create mode 100644 samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py diff --git a/samples/snippets/translate_v3_batch_translate_text.py b/samples/snippets/translate_v3_batch_translate_text.py new file mode 100644 index 00000000..b4650e05 --- /dev/null +++ b/samples/snippets/translate_v3_batch_translate_text.py @@ -0,0 +1,55 @@ +# 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. + +# [START translate_v3_batch_translate_text] +from google.cloud import translate + + +def batch_translate_text( + input_uri="gs://YOUR_BUCKET_ID/path/to/your/file.txt", + output_uri="gs://YOUR_BUCKET_ID/path/to/save/results/", + project_id="YOUR_PROJECT_ID" +): + """Translates a batch of texts on GCS and stores the result in a GCS location.""" + + client = translate.TranslationServiceClient() + + location = "us-central1" + # Supported file types: https://cloud.google.com/translate/docs/supported-formats + gcs_source = {"input_uri": input_uri} + + input_configs_element = { + "gcs_source": gcs_source, + "mime_type": "text/plain" # Can be "text/plain" or "text/html". + } + gcs_destination = {"output_uri_prefix": output_uri} + output_config = {"gcs_destination": gcs_destination} + parent = client.location_path(project_id, location) + + # Supported language codes: https://cloud.google.com/translate/docs/language + operation = client.batch_translate_text( + parent=parent, + source_language_code="en", + target_language_codes=["ja"], # Up to 10 language codes here. + input_configs=[input_configs_element], + output_config=output_config) + + print(u"Waiting for operation to complete...") + response = operation.result(90) + + print(u"Total Characters: {}".format(response.total_characters)) + print(u"Translated Characters: {}".format(response.translated_characters)) + + +# [END translate_v3_batch_translate_text] diff --git a/samples/snippets/translate_v3_batch_translate_text_test.py b/samples/snippets/translate_v3_batch_translate_text_test.py new file mode 100644 index 00000000..c6e1e6e3 --- /dev/null +++ b/samples/snippets/translate_v3_batch_translate_text_test.py @@ -0,0 +1,43 @@ +# 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 pytest +import translate_v3_batch_translate_text +import uuid +from google.cloud import storage + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + + +@pytest.fixture(scope="function") +def bucket(): + """Create a temporary bucket to store annotation output.""" + bucket_name = str(uuid.uuid1()) + storage_client = storage.Client() + bucket = storage_client.create_bucket(bucket_name) + + yield bucket + + bucket.delete(force=True) + + +def test_batch_translate_text(capsys, bucket): + translate_v3_batch_translate_text.batch_translate_text( + "gs://cloud-samples-data/translation/text.txt", + "gs://{}/translation/BATCH_TRANSLATION_OUTPUT/".format(bucket.name), + PROJECT_ID, + ) + out, _ = capsys.readouterr() + assert "Total Characters" in out diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary.py new file mode 100644 index 00000000..fa08d641 --- /dev/null +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary.py @@ -0,0 +1,74 @@ +# 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. + + +# [START translate_v3_batch_translate_text_with_glossary] +from google.cloud import translate + + +def batch_translate_text_with_glossary( + input_uri="gs://YOUR_BUCKET_ID/path/to/your/file.txt", + output_uri="gs://YOUR_BUCKET_ID/path/to/save/results/", + project_id="YOUR_PROJECT_ID", + glossary_id="YOUR_GLOSSARY_ID", +): + """Translates a batch of texts on GCS and stores the result in a GCS location. + Glossary is applied for translation.""" + + client = translate.TranslationServiceClient() + + # Supported language codes: https://cloud.google.com/translate/docs/languages + location = "us-central1" + + # Supported file types: https://cloud.google.com/translate/docs/supported-formats + gcs_source = {"input_uri": input_uri} + + input_configs_element = { + "gcs_source": gcs_source, + "mime_type": "text/plain" # Can be "text/plain" or "text/html". + } + gcs_destination = {"output_uri_prefix": output_uri} + output_config = {"gcs_destination": gcs_destination} + + parent = client.location_path(project_id, location) + + # glossary is a custom dictionary Translation API uses + # to translate the domain-specific terminology. + glossary_path = client.glossary_path( + project_id, "us-central1", glossary_id # The location of the glossary + ) + + glossary_config = translate.types.TranslateTextGlossaryConfig( + glossary=glossary_path + ) + + glossaries = {"ja": glossary_config} # target lang as key + + operation = client.batch_translate_text( + parent=parent, + source_language_code="en", + target_language_codes=["ja"], # Up to 10 language codes here. + input_configs=[input_configs_element], + glossaries=glossaries, + output_config=output_config, + ) + + print(u"Waiting for operation to complete...") + response = operation.result(120) + + print(u"Total Characters: {}".format(response.total_characters)) + print(u"Translated Characters: {}".format(response.translated_characters)) + + +# [END translate_v3_batch_translate_text_with_glossary] diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py new file mode 100644 index 00000000..87d97b73 --- /dev/null +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py @@ -0,0 +1,64 @@ +# 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 pytest +import uuid +import translate_v3_batch_translate_text_with_glossary +import translate_v3_create_glossary +import translate_v3_delete_glossary +from google.cloud import storage + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" + + +@pytest.fixture(scope="session") +def glossary(): + """Get the ID of a glossary available to session (do not mutate/delete).""" + glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + translate_v3_create_glossary.create_glossary( + PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id + ) + + yield glossary_id + + try: + translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) + except Exception: + pass + + +@pytest.fixture(scope="function") +def bucket(): + """Create a temporary bucket to store annotation output.""" + bucket_name = str(uuid.uuid1()) + storage_client = storage.Client() + bucket = storage_client.create_bucket(bucket_name) + + yield bucket + + bucket.delete(force=True) + + +def test_batch_translate_text_with_glossary(capsys, bucket, glossary): + translate_v3_batch_translate_text_with_glossary.batch_translate_text_with_glossary( + "gs://cloud-samples-data/translation/text_with_glossary.txt", + "gs://{}/translation/BATCH_TRANSLATION_OUTPUT/".format(bucket.name), + PROJECT_ID, + glossary, + ) + + out, _ = capsys.readouterr() + assert "Total Characters: 9" in out From 3fa87ea1c79bfeea76c7c2fa5f2fb28977308bb7 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 9 Mar 2020 18:29:59 +0100 Subject: [PATCH 59/94] chore(deps): update dependency google-cloud-storage to v1.26.0 [(#3046)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3046) * chore(deps): update dependency google-cloud-storage to v1.26.0 * chore(deps): specify dependencies by python version * chore: up other deps to try to remove errors Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com> Co-authored-by: Leah Cole --- samples/snippets/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index f8a1e7fe..cd0aee05 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-translate==2.0.0 -google-cloud-storage==1.19.1 +google-cloud-translate==2.0.1 +google-cloud-storage==1.26.0 From d02a0ae75856ad7c94161a5d93be335d35f3004f Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 11 Mar 2020 18:04:03 +0100 Subject: [PATCH 60/94] chore(deps): update dependency google-cloud-translate to v1.7.0 [(#3084)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3084) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [google-cloud-translate](https://togithub.com/googleapis/python-translate) | minor | `==1.6.0` -> `==1.7.0` | --- ### Release Notes

    googleapis/python-translate ### [`v1.7.0`](https://togithub.com/googleapis/python-translate/blob/master/CHANGELOG.md#​170) [Compare Source](https://togithub.com/googleapis/python-translate/compare/v1.6.0...v1.7.0) 10-07-2019 14:57 PDT ##### Implementation Changes - Update docstrings, client confg (via synth). ([#​9411](https://togithub.com/googleapis/google-cloud-python/pull/9411)) - Remove send / receive message size limit (via synth). ([#​8974](https://togithub.com/googleapis/google-cloud-python/pull/8974)) ##### New Features - Add support for V3 of the API. ([#​9020](https://togithub.com/googleapis/google-cloud-python/pull/9020)) - Make `parent` argument required for all client methods in v3beta1; add `labels` argument (via synth). ([#​9354](https://togithub.com/googleapis/google-cloud-python/pull/9354)) - Add client options to translate_v2. ([#​8737](https://togithub.com/googleapis/google-cloud-python/pull/8737)) ##### Dependencies - Bump minimum version for google-api-core to 1.14.0. ([#​8709](https://togithub.com/googleapis/google-cloud-python/pull/8709)) ##### Documentation - Fix links to reference documentation. ([#​8884](https://togithub.com/googleapis/google-cloud-python/pull/8884)) - Link to googleapis.dev documentation in READMEs. ([#​8705](https://togithub.com/googleapis/google-cloud-python/pull/8705)) ##### Internal / Testing Changes - Update `ListGlossaries` method annotation (via synth) ([#​9385](https://togithub.com/googleapis/google-cloud-python/pull/9385)) - Fix intersphinx reference to requests ([#​9294](https://togithub.com/googleapis/google-cloud-python/pull/9294)) - Remove CI for gh-pages, use googleapis.dev for api_core refs. ([#​9085](https://togithub.com/googleapis/google-cloud-python/pull/9085)) - Update intersphinx mapping for requests. ([#​8805](https://togithub.com/googleapis/google-cloud-python/pull/8805))
    --- ### 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). --- samples/snippets/hybrid_glossaries/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt index 7a4a32b3..8620e46b 100644 --- a/samples/snippets/hybrid_glossaries/requirements.txt +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -1,3 +1,3 @@ -google-cloud-translate==1.6.0 +google-cloud-translate==1.7.0 google-cloud-vision==0.39.0 google-cloud-texttospeech==0.5.0 From 6809f72a35bbe41a8671f1d230603ca0c2df8d2e Mon Sep 17 00:00:00 2001 From: Noah Negrey Date: Thu, 12 Mar 2020 10:08:04 -0600 Subject: [PATCH 61/94] translate: fix tests [(#3087)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3087) Fix: https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3018 --- .../hybrid_glossaries/resources/example.mp3 | Bin 0 -> 32064 bytes .../translate_v3_batch_translate_text.py | 2 +- .../translate_v3_batch_translate_text_test.py | 2 +- ...ate_v3_batch_translate_text_with_glossary.py | 2 +- ...3_batch_translate_text_with_glossary_test.py | 2 +- .../snippets/translate_v3_create_glossary.py | 2 +- .../translate_v3_create_glossary_test.py | 2 +- .../snippets/translate_v3_delete_glossary.py | 2 +- .../translate_v3_delete_glossary_test.py | 2 +- 9 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 samples/snippets/hybrid_glossaries/resources/example.mp3 diff --git a/samples/snippets/hybrid_glossaries/resources/example.mp3 b/samples/snippets/hybrid_glossaries/resources/example.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5b5f02512dcbb94f13bb62b5bc14f4986cd24109 GIT binary patch literal 32064 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 IpU2n!FPf=&EC2ui literal 0 HcmV?d00001 diff --git a/samples/snippets/translate_v3_batch_translate_text.py b/samples/snippets/translate_v3_batch_translate_text.py index b4650e05..6c67d2c2 100644 --- a/samples/snippets/translate_v3_batch_translate_text.py +++ b/samples/snippets/translate_v3_batch_translate_text.py @@ -46,7 +46,7 @@ def batch_translate_text( output_config=output_config) print(u"Waiting for operation to complete...") - response = operation.result(90) + response = operation.result(180) print(u"Total Characters: {}".format(response.total_characters)) print(u"Translated Characters: {}".format(response.translated_characters)) diff --git a/samples/snippets/translate_v3_batch_translate_text_test.py b/samples/snippets/translate_v3_batch_translate_text_test.py index c6e1e6e3..2474f60d 100644 --- a/samples/snippets/translate_v3_batch_translate_text_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_test.py @@ -24,7 +24,7 @@ @pytest.fixture(scope="function") def bucket(): """Create a temporary bucket to store annotation output.""" - bucket_name = str(uuid.uuid1()) + bucket_name = "test-{}".format(uuid.uuid4()) storage_client = storage.Client() bucket = storage_client.create_bucket(bucket_name) diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary.py index fa08d641..d72c3186 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary.py @@ -65,7 +65,7 @@ def batch_translate_text_with_glossary( ) print(u"Waiting for operation to complete...") - response = operation.result(120) + response = operation.result(180) print(u"Total Characters: {}".format(response.total_characters)) print(u"Translated Characters: {}".format(response.translated_characters)) diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py index 87d97b73..0e79bf9b 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py @@ -27,7 +27,7 @@ @pytest.fixture(scope="session") def glossary(): """Get the ID of a glossary available to session (do not mutate/delete).""" - glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + glossary_id = "test-{}".format(uuid.uuid4()) translate_v3_create_glossary.create_glossary( PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id ) diff --git a/samples/snippets/translate_v3_create_glossary.py b/samples/snippets/translate_v3_create_glossary.py index b42d33c8..a94e488e 100644 --- a/samples/snippets/translate_v3_create_glossary.py +++ b/samples/snippets/translate_v3_create_glossary.py @@ -51,7 +51,7 @@ def create_glossary( # to translate the domain-specific terminology. operation = client.create_glossary(parent=parent, glossary=glossary) - result = operation.result(timeout=90) + result = operation.result(timeout=180) print("Created: {}".format(result.name)) print("Input Uri: {}".format(result.input_config.gcs_source.input_uri)) diff --git a/samples/snippets/translate_v3_create_glossary_test.py b/samples/snippets/translate_v3_create_glossary_test.py index bf9f08cb..77a2cf14 100644 --- a/samples/snippets/translate_v3_create_glossary_test.py +++ b/samples/snippets/translate_v3_create_glossary_test.py @@ -22,7 +22,7 @@ def test_create_glossary(capsys): - glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + glossary_id = "test-{}".format(uuid.uuid4()) translate_v3_create_glossary.create_glossary( PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id ) diff --git a/samples/snippets/translate_v3_delete_glossary.py b/samples/snippets/translate_v3_delete_glossary.py index da1acb40..f3f89753 100644 --- a/samples/snippets/translate_v3_delete_glossary.py +++ b/samples/snippets/translate_v3_delete_glossary.py @@ -25,7 +25,7 @@ def delete_glossary( parent = client.glossary_path(project_id, "us-central1", glossary_id) operation = client.delete_glossary(parent) - result = operation.result(timeout=90) + result = operation.result(timeout=180) print("Deleted: {}".format(result.name)) diff --git a/samples/snippets/translate_v3_delete_glossary_test.py b/samples/snippets/translate_v3_delete_glossary_test.py index 1c1fb2da..8d7fb2d9 100644 --- a/samples/snippets/translate_v3_delete_glossary_test.py +++ b/samples/snippets/translate_v3_delete_glossary_test.py @@ -23,7 +23,7 @@ def test_delete_glossary(capsys): # setup - glossary_id = "must-start-with-letters-" + str(uuid.uuid1()) + glossary_id = "test-{}".format(uuid.uuid4()) translate_v3_create_glossary.create_glossary( PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id ) From 089c5d5cd32f569e2c5f221bda988e1960425e90 Mon Sep 17 00:00:00 2001 From: Mike <45373284+munkhuushmgl@users.noreply.github.com> Date: Mon, 16 Mar 2020 12:14:19 -0700 Subject: [PATCH 62/94] translate-v3: samples [(#3034)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3034) * translate with custom model, get supported langs * inlined small nit * added encoding to model test * added missing region tags and link to supported langs * inlined text-to-translate * directly inlined contents * revert text-translate vars * reversed inlined text params * small nit Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com> --- .../translate_v3_get_supported_languages.py | 1 + ..._v3_get_supported_languages_with_target.py | 35 ++++++++++++++ ...et_supported_languages_with_target_test.py | 27 +++++++++++ .../snippets/translate_v3_translate_text.py | 4 +- .../translate_v3_translate_text_test.py | 3 +- ...anslate_v3_translate_text_with_glossary.py | 9 ++-- .../translate_v3_translate_text_with_model.py | 48 +++++++++++++++++++ ...slate_v3_translate_text_with_model_test.py | 28 +++++++++++ 8 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 samples/snippets/translate_v3_get_supported_languages_with_target.py create mode 100644 samples/snippets/translate_v3_get_supported_languages_with_target_test.py create mode 100644 samples/snippets/translate_v3_translate_text_with_model.py create mode 100644 samples/snippets/translate_v3_translate_text_with_model_test.py diff --git a/samples/snippets/translate_v3_get_supported_languages.py b/samples/snippets/translate_v3_get_supported_languages.py index 9a2df58d..eb7d8366 100644 --- a/samples/snippets/translate_v3_get_supported_languages.py +++ b/samples/snippets/translate_v3_get_supported_languages.py @@ -23,6 +23,7 @@ def sample_get_supported_languages(project_id="YOUR_PROJECT_ID"): parent = client.location_path(project_id, "global") + # Supported language codes: https://cloud.google.com/translate/docs/languages response = client.get_supported_languages(parent=parent) # List language codes of supported languages. diff --git a/samples/snippets/translate_v3_get_supported_languages_with_target.py b/samples/snippets/translate_v3_get_supported_languages_with_target.py new file mode 100644 index 00000000..f71138b5 --- /dev/null +++ b/samples/snippets/translate_v3_get_supported_languages_with_target.py @@ -0,0 +1,35 @@ +# 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. + +# [START translate_v3_get_supported_languages_for_target] +from google.cloud import translate + + +def get_supported_languages_with_target(project_id="YOUR_PROJECT_ID"): + """Listing supported languages with target language name.""" + + client = translate.TranslationServiceClient() + parent = client.location_path(project_id, "global") + + # Supported language codes: https://cloud.google.com/translate/docs/languages + response = client.get_supported_languages( + display_language_code="is", # target language code + parent=parent + ) + # List language codes of supported languages + for language in response.languages: + print(u"Language Code: {}".format(language.language_code)) + print(u"Display Name: {}".format(language.display_name)) + +# [END translate_v3_get_supported_languages_for_target] diff --git a/samples/snippets/translate_v3_get_supported_languages_with_target_test.py b/samples/snippets/translate_v3_get_supported_languages_with_target_test.py new file mode 100644 index 00000000..aa40efe4 --- /dev/null +++ b/samples/snippets/translate_v3_get_supported_languages_with_target_test.py @@ -0,0 +1,27 @@ +# 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 translate_v3_get_supported_languages_with_target as get_supported_langs + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + + +def test_list_languages_with_target(capsys): + get_supported_langs.get_supported_languages_with_target( + PROJECT_ID + ) + out, _ = capsys.readouterr() + assert u"Language Code: sq" in out + assert u"Display Name: albanska" in out diff --git a/samples/snippets/translate_v3_translate_text.py b/samples/snippets/translate_v3_translate_text.py index c5034c94..77fcec26 100644 --- a/samples/snippets/translate_v3_translate_text.py +++ b/samples/snippets/translate_v3_translate_text.py @@ -16,7 +16,7 @@ from google.cloud import translate -def sample_translate_text(project_id="YOUR_PROJECT_ID"): +def sample_translate_text(text="YOUR_TEXT_TO_TRANSLATE", project_id="YOUR_PROJECT_ID"): """Translating Text.""" client = translate.TranslationServiceClient() @@ -27,7 +27,7 @@ def sample_translate_text(project_id="YOUR_PROJECT_ID"): # https://cloud.google.com/translate/docs/supported-formats response = client.translate_text( parent=parent, - contents=["Hello, world!"], + contents=[text], mime_type="text/plain", # mime types: text/plain, text/html source_language_code="en-US", target_language_code="fr", diff --git a/samples/snippets/translate_v3_translate_text_test.py b/samples/snippets/translate_v3_translate_text_test.py index e4f8acfb..a6319019 100644 --- a/samples/snippets/translate_v3_translate_text_test.py +++ b/samples/snippets/translate_v3_translate_text_test.py @@ -19,6 +19,7 @@ def test_translate_text(capsys): - translate_v3_translate_text.sample_translate_text(PROJECT_ID) + translate_v3_translate_text.sample_translate_text( + "Hello World!", PROJECT_ID) out, _ = capsys.readouterr() assert "Bonjour le monde" in out diff --git a/samples/snippets/translate_v3_translate_text_with_glossary.py b/samples/snippets/translate_v3_translate_text_with_glossary.py index cc4da005..ca0eeacc 100644 --- a/samples/snippets/translate_v3_translate_text_with_glossary.py +++ b/samples/snippets/translate_v3_translate_text_with_glossary.py @@ -20,24 +20,23 @@ def translate_text_with_glossary( text="YOUR_TEXT_TO_TRANSLATE", project_id="YOUR_PROJECT_ID", - glossary_id="YOUR_GLOSSARY_ID" + glossary_id="YOUR_GLOSSARY_ID", ): """Translates a given text using a glossary.""" client = translate_v3.TranslationServiceClient() - - contents = [text] parent = client.location_path(project_id, "us-central1") glossary = client.glossary_path( project_id, "us-central1", glossary_id # The location of the glossary ) - glossary_config = translate_v3.types.TranslateTextGlossaryConfig(glossary=glossary) + glossary_config = translate_v3.types.TranslateTextGlossaryConfig( + glossary=glossary) # Supported language codes: https://cloud.google.com/translate/docs/languages response = client.translate_text( - contents, + contents=[text], target_language_code="ja", source_language_code="en", parent=parent, diff --git a/samples/snippets/translate_v3_translate_text_with_model.py b/samples/snippets/translate_v3_translate_text_with_model.py new file mode 100644 index 00000000..8a0b0bb7 --- /dev/null +++ b/samples/snippets/translate_v3_translate_text_with_model.py @@ -0,0 +1,48 @@ +# 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. + +# [START translate_v3_translate_text_with_model] + +from google.cloud import translate + + +def translate_text_with_model( + text="YOUR_TEXT_TO_TRANSLATE", + project_id="YOUR_PROJECT_ID", + model_id="YOUR_MODEL_ID", +): + """Translates a given text using Translation custom model.""" + + client = translate.TranslationServiceClient() + + parent = client.location_path(project_id, "us-central1") + model_path = "projects/{}/locations/{}/models/{}".format( + project_id, "us-central1", model_id + ) + + # Supported language codes: https://cloud.google.com/translate/docs/languages + response = client.translate_text( + contents=[text], + target_language_code="ja", + model=model_path, + source_language_code="en", + parent=parent, + mime_type="text/plain", # mime types: text/plain, text/html + ) + # Display the translation for each input text provided + for translation in response.translations: + print(u"Translated text: {}".format(translation.translated_text)) + + +# [END translate_v3_translate_text_with_model] diff --git a/samples/snippets/translate_v3_translate_text_with_model_test.py b/samples/snippets/translate_v3_translate_text_with_model_test.py new file mode 100644 index 00000000..6e6ab37e --- /dev/null +++ b/samples/snippets/translate_v3_translate_text_with_model_test.py @@ -0,0 +1,28 @@ +# -*- encoding: 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 translate_v3_translate_text_with_model + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +MODEL_ID = "TRL3128559826197068699" + + +def test_translate_text_with_model(capsys): + translate_v3_translate_text_with_model.translate_text_with_model( + "That' il do it.", PROJECT_ID, MODEL_ID + ) + out, _ = capsys.readouterr() + assert "それはそうだ" or "それじゃあ" in out From 84e368436114c3eb6d8967448d5d1bed8d5e4acf Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 27 Mar 2020 22:15:56 +0100 Subject: [PATCH 63/94] chore(deps): update dependency google-cloud-vision to v0.42.0 [(#3170)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3170) --- samples/snippets/hybrid_glossaries/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt index 8620e46b..c06bb812 100644 --- a/samples/snippets/hybrid_glossaries/requirements.txt +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -1,3 +1,3 @@ google-cloud-translate==1.7.0 -google-cloud-vision==0.39.0 +google-cloud-vision==0.42.0 google-cloud-texttospeech==0.5.0 From 8e6f3d8a3f37a1ae6ee49e7182860a1de44429ba Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Sun, 29 Mar 2020 07:03:27 +0200 Subject: [PATCH 64/94] chore(deps): update dependency google-cloud-texttospeech to v1 [(#3210)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3210) Co-authored-by: gcf-merge-on-green[bot] <60162190+gcf-merge-on-green[bot]@users.noreply.github.com> --- samples/snippets/hybrid_glossaries/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt index c06bb812..1af4cbc5 100644 --- a/samples/snippets/hybrid_glossaries/requirements.txt +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -1,3 +1,3 @@ google-cloud-translate==1.7.0 google-cloud-vision==0.42.0 -google-cloud-texttospeech==0.5.0 +google-cloud-texttospeech==1.0.1 From fb7dd907f719f56ea19e946a50f5fdfcce17a000 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 30 Mar 2020 21:52:15 +0200 Subject: [PATCH 65/94] chore(deps): update dependency google-cloud-translate to v2 [(#3211)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3211) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [google-cloud-translate](https://togithub.com/googleapis/python-translate) | major | `==1.7.0` -> `==2.0.1` | --- ### Release Notes
    googleapis/python-translate ### [`v2.0.1`](https://togithub.com/googleapis/python-translate/blob/master/CHANGELOG.md#​201-httpswwwgithubcomgoogleapispython-translatecomparev200v201-2020-01-31) [Compare Source](https://togithub.com/googleapis/python-translate/compare/v2.0.0...v2.0.1) ### [`v2.0.0`](https://togithub.com/googleapis/python-translate/blob/master/CHANGELOG.md#​200) [Compare Source](https://togithub.com/googleapis/python-translate/compare/v1.7.0...v2.0.0) 10-23-2019 11:13 PDT ##### New Features - Make v3 the default client. ([#​9498](https://togithub.com/googleapis/google-cloud-python/pull/9498)) ##### Internal / Testing Changes - Add VPC-SC system tests. ([#​9272](https://togithub.com/googleapis/google-cloud-python/pull/9272))
    --- ### 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**: Never, 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). --- samples/snippets/hybrid_glossaries/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt index 1af4cbc5..ef2f7918 100644 --- a/samples/snippets/hybrid_glossaries/requirements.txt +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -1,3 +1,3 @@ -google-cloud-translate==1.7.0 +google-cloud-translate==2.0.1 google-cloud-vision==0.42.0 google-cloud-texttospeech==1.0.1 From 723d45044ed08ea75c96d8c4352fd346d01d5ad4 Mon Sep 17 00:00:00 2001 From: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> Date: Wed, 1 Apr 2020 19:11:50 -0700 Subject: [PATCH 66/94] 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 --- samples/snippets/hybrid_glossaries/requirements-test.txt | 1 + samples/snippets/requirements-test.txt | 1 + 2 files changed, 2 insertions(+) create mode 100644 samples/snippets/hybrid_glossaries/requirements-test.txt create mode 100644 samples/snippets/requirements-test.txt diff --git a/samples/snippets/hybrid_glossaries/requirements-test.txt b/samples/snippets/hybrid_glossaries/requirements-test.txt new file mode 100644 index 00000000..781d4326 --- /dev/null +++ b/samples/snippets/hybrid_glossaries/requirements-test.txt @@ -0,0 +1 @@ +pytest==5.3.2 diff --git a/samples/snippets/requirements-test.txt b/samples/snippets/requirements-test.txt new file mode 100644 index 00000000..781d4326 --- /dev/null +++ b/samples/snippets/requirements-test.txt @@ -0,0 +1 @@ +pytest==5.3.2 From 296f00e3da105477b6950da9c67d3ac42deee262 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 2 Apr 2020 19:36:05 +0200 Subject: [PATCH 67/94] Update dependency google-cloud-vision to v1 [(#3227)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3227) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [google-cloud-vision](https://togithub.com/googleapis/python-vision) | major | `==0.42.0` -> `==1.0.0` | --- ### Release Notes
    googleapis/python-vision ### [`v1.0.0`](https://togithub.com/googleapis/python-vision/blob/master/CHANGELOG.md#​100-httpswwwgithubcomgoogleapispython-visioncomparev0420v100-2020-02-28) [Compare Source](https://togithub.com/googleapis/python-vision/compare/v0.42.0...v1.0.0) ##### Features - bump release status to GA ([#​11](https://www.github.com/googleapis/python-vision/issues/11)) ([2129bde](https://www.github.com/googleapis/python-vision/commit/2129bdedfa0dca85c5adc5350bff10d4a485df77))
    --- ### 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**: Never, 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). --- samples/snippets/hybrid_glossaries/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt index ef2f7918..d13c5f7d 100644 --- a/samples/snippets/hybrid_glossaries/requirements.txt +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -1,3 +1,3 @@ google-cloud-translate==2.0.1 -google-cloud-vision==0.42.0 +google-cloud-vision==1.0.0 google-cloud-texttospeech==1.0.1 From 3aef3b1eb2e318fa7bbcb75cf4fb87e85c0e867a Mon Sep 17 00:00:00 2001 From: Noah Negrey Date: Tue, 14 Apr 2020 15:24:08 -0600 Subject: [PATCH 68/94] translate: make test generic [(#3386)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3386) Fix: https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3381 --- samples/snippets/quickstart_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/quickstart_test.py b/samples/snippets/quickstart_test.py index 4018daa0..8def7f3e 100644 --- a/samples/snippets/quickstart_test.py +++ b/samples/snippets/quickstart_test.py @@ -20,4 +20,4 @@ def test_quickstart(capsys): quickstart.run_quickstart() out, _ = capsys.readouterr() - assert u'Привет, мир!' in out + assert u'Translation' in out From 1b38db5781c8dadcd67bd879120d9e373677136d Mon Sep 17 00:00:00 2001 From: Takashi Matsuo Date: Fri, 24 Apr 2020 14:49:15 -0700 Subject: [PATCH 69/94] [translate] fix: mark some tests as flaky [(#3495)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3495) tests which involve LRO. fixes #2875 --- samples/snippets/beta_snippets_test.py | 3 +++ samples/snippets/requirements-test.txt | 1 + 2 files changed, 4 insertions(+) diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index 4d65c3c2..ada9e348 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -67,6 +67,7 @@ def test_translate_text(capsys): assert 'Translated Text:' in out +@pytest.mark.flaky(max_runs=3, min_passes=1) def test_batch_translate_text(capsys, bucket): beta_snippets.batch_translate_text( PROJECT_ID, @@ -96,6 +97,7 @@ def test_list_languages_with_target(capsys): assert u'Display Name: albanska' in out +@pytest.mark.flaky(max_runs=3, min_passes=1) def test_create_glossary(capsys, unique_glossary_id): beta_snippets.create_glossary(PROJECT_ID, unique_glossary_id) out, _ = capsys.readouterr() @@ -125,6 +127,7 @@ def test_translate_text_with_glossary(capsys, glossary): assert 'cuenta' in out +@pytest.mark.flaky(max_runs=3, min_passes=1) def test_delete_glossary(capsys, unique_glossary_id): beta_snippets.create_glossary(PROJECT_ID, unique_glossary_id) beta_snippets.delete_glossary(PROJECT_ID, unique_glossary_id) diff --git a/samples/snippets/requirements-test.txt b/samples/snippets/requirements-test.txt index 781d4326..c6f9b649 100644 --- a/samples/snippets/requirements-test.txt +++ b/samples/snippets/requirements-test.txt @@ -1 +1,2 @@ +flaky==3.6.1 pytest==5.3.2 From 9acae80756d6b1072b79dbd1ee4b9ce7c7c19107 Mon Sep 17 00:00:00 2001 From: Takashi Matsuo Date: Fri, 24 Apr 2020 17:02:09 -0700 Subject: [PATCH 70/94] testing: replace @flaky with @pytest.mark.flaky [(#3496)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3496) * testing: replace @flaky with @pytest.mark.flaky * lint * mark few tests as flaky that involves LRO polling. * lint --- .../translate_v3_batch_translate_text_test.py | 1 + ...batch_translate_text_with_glossary_test.py | 1 + .../translate_v3_create_glossary_test.py | 34 +++++++++++-------- .../translate_v3_delete_glossary_test.py | 6 +++- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/samples/snippets/translate_v3_batch_translate_text_test.py b/samples/snippets/translate_v3_batch_translate_text_test.py index 2474f60d..9dda7c04 100644 --- a/samples/snippets/translate_v3_batch_translate_text_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_test.py @@ -33,6 +33,7 @@ def bucket(): bucket.delete(force=True) +@pytest.mark.flaky(max_runs=3, min_passes=1) def test_batch_translate_text(capsys, bucket): translate_v3_batch_translate_text.batch_translate_text( "gs://cloud-samples-data/translation/text.txt", diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py index 0e79bf9b..e5010521 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py @@ -52,6 +52,7 @@ def bucket(): bucket.delete(force=True) +@pytest.mark.flaky(max_runs=3, min_passes=1) def test_batch_translate_text_with_glossary(capsys, bucket, glossary): translate_v3_batch_translate_text_with_glossary.batch_translate_text_with_glossary( "gs://cloud-samples-data/translation/text_with_glossary.txt", diff --git a/samples/snippets/translate_v3_create_glossary_test.py b/samples/snippets/translate_v3_create_glossary_test.py index 77a2cf14..b24488c8 100644 --- a/samples/snippets/translate_v3_create_glossary_test.py +++ b/samples/snippets/translate_v3_create_glossary_test.py @@ -13,26 +13,32 @@ # limitations under the License. import os +import uuid + +import pytest + import translate_v3_create_glossary import translate_v3_delete_glossary -import uuid PROJECT_ID = os.environ["GCLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" +@pytest.mark.flaky(max_runs=3, min_passes=1) def test_create_glossary(capsys): - glossary_id = "test-{}".format(uuid.uuid4()) - translate_v3_create_glossary.create_glossary( - PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id - ) - out, _ = capsys.readouterr() - # assert - assert "Created:" in out - assert "gs://cloud-samples-data/translation/glossary_ja.csv" in out - - # clean up after use try: - translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) - except Exception: - pass + glossary_id = "test-{}".format(uuid.uuid4()) + translate_v3_create_glossary.create_glossary( + PROJECT_ID, GLOSSARY_INPUT_URI, glossary_id + ) + out, _ = capsys.readouterr() + # assert + assert "Created:" in out + assert "gs://cloud-samples-data/translation/glossary_ja.csv" in out + finally: + # clean up after use + try: + translate_v3_delete_glossary.delete_glossary( + PROJECT_ID, glossary_id) + except Exception: + pass diff --git a/samples/snippets/translate_v3_delete_glossary_test.py b/samples/snippets/translate_v3_delete_glossary_test.py index 8d7fb2d9..4309ca01 100644 --- a/samples/snippets/translate_v3_delete_glossary_test.py +++ b/samples/snippets/translate_v3_delete_glossary_test.py @@ -13,14 +13,18 @@ # limitations under the License. import os +import uuid + +import pytest + import translate_v3_create_glossary import translate_v3_delete_glossary -import uuid PROJECT_ID = os.environ["GCLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" +@pytest.mark.flaky(max_runs=3, min_passes=1) def test_delete_glossary(capsys): # setup glossary_id = "test-{}".format(uuid.uuid4()) From 6ed8d4e9c08bd8fa9b38aec13359acf03a690ea5 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 29 Apr 2020 07:26:36 +0200 Subject: [PATCH 71/94] chore(deps): update dependency google-cloud-storage to v1.28.0 [(#3260)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3260) Co-authored-by: Takashi Matsuo --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index cd0aee05..5fb0a1e6 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,2 +1,2 @@ google-cloud-translate==2.0.1 -google-cloud-storage==1.26.0 +google-cloud-storage==1.28.0 From eb357b1101e693c94889f8784e131a18ec64cb48 Mon Sep 17 00:00:00 2001 From: Mike <45373284+munkhuushmgl@users.noreply.github.com> Date: Thu, 30 Apr 2020 17:53:21 -0700 Subject: [PATCH 72/94] translate: fix glossary leak issue [(#3572)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3572) * fix glossary leak issue * removed try/catch from teardown methods, removed sample_ prefix from all other methods * added specific exceptions to tests, added backoff tags to tests * fixed the lint issues * reordered imports * moved backoff inside methd and removed Retry * corrected import nit --- samples/snippets/requirements-test.txt | 3 ++- .../translate_v3_batch_translate_text_test.py | 8 ++++-- ...batch_translate_text_with_glossary_test.py | 27 ++++++++++++++----- .../translate_v3_create_glossary_test.py | 23 +++++++++++----- .../snippets/translate_v3_detect_language.py | 2 +- .../translate_v3_detect_language_test.py | 2 +- .../translate_v3_get_glossary_test.py | 25 +++++++++++++---- .../translate_v3_get_supported_languages.py | 2 +- ...anslate_v3_get_supported_languages_test.py | 2 +- .../snippets/translate_v3_list_glossary.py | 2 +- .../translate_v3_list_glossary_test.py | 27 ++++++++++++++----- .../snippets/translate_v3_translate_text.py | 2 +- .../translate_v3_translate_text_test.py | 2 +- ...te_v3_translate_text_with_glossary_test.py | 25 +++++++++++++---- 14 files changed, 114 insertions(+), 38 deletions(-) diff --git a/samples/snippets/requirements-test.txt b/samples/snippets/requirements-test.txt index c6f9b649..1fccf2dd 100644 --- a/samples/snippets/requirements-test.txt +++ b/samples/snippets/requirements-test.txt @@ -1,2 +1,3 @@ +backoff==1.10.0 flaky==3.6.1 -pytest==5.3.2 +pytest==5.3.2 \ No newline at end of file diff --git a/samples/snippets/translate_v3_batch_translate_text_test.py b/samples/snippets/translate_v3_batch_translate_text_test.py index 9dda7c04..4fa8626a 100644 --- a/samples/snippets/translate_v3_batch_translate_text_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_test.py @@ -13,11 +13,15 @@ # limitations under the License. import os -import pytest -import translate_v3_batch_translate_text import uuid + +import pytest + from google.cloud import storage +import translate_v3_batch_translate_text + + PROJECT_ID = os.environ["GCLOUD_PROJECT"] diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py index e5010521..9af648f7 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py @@ -13,12 +13,19 @@ # limitations under the License. import os -import pytest import uuid + +import backoff +import pytest + +from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError +from google.cloud.exceptions import NotFound +from google.cloud import storage + import translate_v3_batch_translate_text_with_glossary import translate_v3_create_glossary import translate_v3_delete_glossary -from google.cloud import storage + PROJECT_ID = os.environ["GCLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" @@ -34,10 +41,18 @@ def glossary(): yield glossary_id - try: - translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) - except Exception: - pass + # cleanup + @backoff.on_exception( + backoff.expo, (DeadlineExceeded, GoogleAPICallError), max_time=60 + ) + def delete_glossary(): + try: + translate_v3_delete_glossary.delete_glossary( + PROJECT_ID, glossary_id) + except NotFound as e: + # Ignoring this case. + print("Got NotFound, detail: {}".format(str(e))) + delete_glossary() @pytest.fixture(scope="function") diff --git a/samples/snippets/translate_v3_create_glossary_test.py b/samples/snippets/translate_v3_create_glossary_test.py index b24488c8..4b1e08ed 100644 --- a/samples/snippets/translate_v3_create_glossary_test.py +++ b/samples/snippets/translate_v3_create_glossary_test.py @@ -15,11 +15,16 @@ import os import uuid +import backoff import pytest +from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError +from google.cloud.exceptions import NotFound + import translate_v3_create_glossary import translate_v3_delete_glossary + PROJECT_ID = os.environ["GCLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" @@ -36,9 +41,15 @@ def test_create_glossary(capsys): assert "Created:" in out assert "gs://cloud-samples-data/translation/glossary_ja.csv" in out finally: - # clean up after use - try: - translate_v3_delete_glossary.delete_glossary( - PROJECT_ID, glossary_id) - except Exception: - pass + # cleanup + @backoff.on_exception( + backoff.expo, (DeadlineExceeded, GoogleAPICallError), max_time=60 + ) + def delete_glossary(): + try: + translate_v3_delete_glossary.delete_glossary( + PROJECT_ID, glossary_id) + except NotFound as e: + # Ignoring this case. + print("Got NotFound, detail: {}".format(str(e))) + delete_glossary() diff --git a/samples/snippets/translate_v3_detect_language.py b/samples/snippets/translate_v3_detect_language.py index 9b92853c..759eb41a 100644 --- a/samples/snippets/translate_v3_detect_language.py +++ b/samples/snippets/translate_v3_detect_language.py @@ -16,7 +16,7 @@ from google.cloud import translate -def sample_detect_language(project_id="YOUR_PROJECT_ID"): +def detect_language(project_id="YOUR_PROJECT_ID"): """Detecting the language of a text string.""" client = translate.TranslationServiceClient() diff --git a/samples/snippets/translate_v3_detect_language_test.py b/samples/snippets/translate_v3_detect_language_test.py index 82620bc5..a538fc68 100644 --- a/samples/snippets/translate_v3_detect_language_test.py +++ b/samples/snippets/translate_v3_detect_language_test.py @@ -19,6 +19,6 @@ def test_detect_language(capsys): - translate_v3_detect_language.sample_detect_language(PROJECT_ID) + translate_v3_detect_language.detect_language(PROJECT_ID) out, _ = capsys.readouterr() assert "en" in out diff --git a/samples/snippets/translate_v3_get_glossary_test.py b/samples/snippets/translate_v3_get_glossary_test.py index 7a4aa167..8880bf6d 100644 --- a/samples/snippets/translate_v3_get_glossary_test.py +++ b/samples/snippets/translate_v3_get_glossary_test.py @@ -13,11 +13,18 @@ # limitations under the License. import os +import uuid + +import backoff import pytest + +from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError +from google.cloud.exceptions import NotFound + import translate_v3_create_glossary import translate_v3_delete_glossary import translate_v3_get_glossary -import uuid + PROJECT_ID = os.environ["GCLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" @@ -33,10 +40,18 @@ def glossary(): yield glossary_id - try: - translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) - except Exception: - pass + # cleanup + @backoff.on_exception( + backoff.expo, (DeadlineExceeded, GoogleAPICallError), max_time=60 + ) + def delete_glossary(): + try: + translate_v3_delete_glossary.delete_glossary( + PROJECT_ID, glossary_id) + except NotFound as e: + # Ignoring this case. + print("Got NotFound, detail: {}".format(str(e))) + delete_glossary() def test_get_glossary(capsys, glossary): diff --git a/samples/snippets/translate_v3_get_supported_languages.py b/samples/snippets/translate_v3_get_supported_languages.py index eb7d8366..6e15458d 100644 --- a/samples/snippets/translate_v3_get_supported_languages.py +++ b/samples/snippets/translate_v3_get_supported_languages.py @@ -16,7 +16,7 @@ from google.cloud import translate -def sample_get_supported_languages(project_id="YOUR_PROJECT_ID"): +def get_supported_languages(project_id="YOUR_PROJECT_ID"): """Getting a list of supported language codes.""" client = translate.TranslationServiceClient() diff --git a/samples/snippets/translate_v3_get_supported_languages_test.py b/samples/snippets/translate_v3_get_supported_languages_test.py index b4ba4cd2..cd4e44a4 100644 --- a/samples/snippets/translate_v3_get_supported_languages_test.py +++ b/samples/snippets/translate_v3_get_supported_languages_test.py @@ -19,6 +19,6 @@ def test_list_languages(capsys): - translate_v3_get_supported_languages.sample_get_supported_languages(PROJECT_ID) + translate_v3_get_supported_languages.get_supported_languages(PROJECT_ID) out, _ = capsys.readouterr() assert "zh-CN" in out diff --git a/samples/snippets/translate_v3_list_glossary.py b/samples/snippets/translate_v3_list_glossary.py index e52d6b26..53e51d85 100644 --- a/samples/snippets/translate_v3_list_glossary.py +++ b/samples/snippets/translate_v3_list_glossary.py @@ -16,7 +16,7 @@ from google.cloud import translate -def sample_list_glossaries(project_id="YOUR_PROJECT_ID"): +def list_glossaries(project_id="YOUR_PROJECT_ID"): """List Glossaries.""" client = translate.TranslationServiceClient() diff --git a/samples/snippets/translate_v3_list_glossary_test.py b/samples/snippets/translate_v3_list_glossary_test.py index de77daba..d0d38cde 100644 --- a/samples/snippets/translate_v3_list_glossary_test.py +++ b/samples/snippets/translate_v3_list_glossary_test.py @@ -13,11 +13,18 @@ # limitations under the License. import os +import uuid + +import backoff import pytest + +from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError +from google.cloud.exceptions import NotFound + import translate_v3_create_glossary import translate_v3_delete_glossary import translate_v3_list_glossary -import uuid + PROJECT_ID = os.environ["GCLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" @@ -33,14 +40,22 @@ def glossary(): yield glossary_id - try: - translate_v3_delete_glossary.sample_delete_glossary(PROJECT_ID, glossary_id) - except Exception: - pass + # clean up + @backoff.on_exception( + backoff.expo, (DeadlineExceeded, GoogleAPICallError), max_time=60 + ) + def delete_glossary(): + try: + translate_v3_delete_glossary.delete_glossary( + PROJECT_ID, glossary_id) + except NotFound as e: + # Ignoring this case. + print("Got NotFound, detail: {}".format(str(e))) + delete_glossary() def test_list_glossary(capsys, glossary): - translate_v3_list_glossary.sample_list_glossaries(PROJECT_ID) + translate_v3_list_glossary.list_glossaries(PROJECT_ID) out, _ = capsys.readouterr() assert glossary in out assert "gs://cloud-samples-data/translation/glossary_ja.csv" in out diff --git a/samples/snippets/translate_v3_translate_text.py b/samples/snippets/translate_v3_translate_text.py index 77fcec26..086f775a 100644 --- a/samples/snippets/translate_v3_translate_text.py +++ b/samples/snippets/translate_v3_translate_text.py @@ -16,7 +16,7 @@ from google.cloud import translate -def sample_translate_text(text="YOUR_TEXT_TO_TRANSLATE", project_id="YOUR_PROJECT_ID"): +def translate_text(text="YOUR_TEXT_TO_TRANSLATE", project_id="YOUR_PROJECT_ID"): """Translating Text.""" client = translate.TranslationServiceClient() diff --git a/samples/snippets/translate_v3_translate_text_test.py b/samples/snippets/translate_v3_translate_text_test.py index a6319019..096b8dd8 100644 --- a/samples/snippets/translate_v3_translate_text_test.py +++ b/samples/snippets/translate_v3_translate_text_test.py @@ -19,7 +19,7 @@ def test_translate_text(capsys): - translate_v3_translate_text.sample_translate_text( + translate_v3_translate_text.translate_text( "Hello World!", PROJECT_ID) out, _ = capsys.readouterr() assert "Bonjour le monde" in out diff --git a/samples/snippets/translate_v3_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_translate_text_with_glossary_test.py index 72f9d64e..adf66836 100644 --- a/samples/snippets/translate_v3_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_translate_text_with_glossary_test.py @@ -14,11 +14,18 @@ # limitations under the License. import os +import uuid + +import backoff import pytest + +from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError +from google.cloud.exceptions import NotFound + import translate_v3_create_glossary import translate_v3_delete_glossary import translate_v3_translate_text_with_glossary -import uuid + PROJECT_ID = os.environ["GCLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" @@ -34,10 +41,18 @@ def glossary(): yield glossary_id - try: - translate_v3_delete_glossary.delete_glossary(PROJECT_ID, glossary_id) - except Exception: - pass + # cleanup + @backoff.on_exception( + backoff.expo, (DeadlineExceeded, GoogleAPICallError), max_time=60 + ) + def delete_glossary(): + try: + translate_v3_delete_glossary.delete_glossary( + PROJECT_ID, glossary_id) + except NotFound as e: + # Ignoring this case. + print("Got NotFound, detail: {}".format(str(e))) + delete_glossary() def test_translate_text_with_glossary(capsys, glossary): From dcacff2343af6a7c77a06f8889bad4a8057c68d1 Mon Sep 17 00:00:00 2001 From: Takashi Matsuo Date: Tue, 12 May 2020 21:38:39 -0700 Subject: [PATCH 73/94] chore: some lint fixes [(#3751)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3751) * chore: some lint fixes * longer timeout, more retries * disable detect_test.py::test_async_detect_document --- samples/snippets/beta_snippets_test.py | 7 +++++-- samples/snippets/hybrid_glossaries/hybrid_tutorial.py | 4 ++-- .../snippets/hybrid_glossaries/hybrid_tutorial_tests.py | 4 ++-- samples/snippets/translate_v3_batch_translate_text_test.py | 3 +-- ...translate_v3_batch_translate_text_with_glossary_test.py | 5 ++--- samples/snippets/translate_v3_create_glossary_test.py | 3 +-- samples/snippets/translate_v3_detect_language_test.py | 2 ++ samples/snippets/translate_v3_get_glossary_test.py | 3 +-- .../snippets/translate_v3_get_supported_languages_test.py | 2 ++ ...ranslate_v3_get_supported_languages_with_target_test.py | 2 ++ samples/snippets/translate_v3_list_glossary_test.py | 3 +-- samples/snippets/translate_v3_translate_text_test.py | 2 ++ .../translate_v3_translate_text_with_glossary_test.py | 3 +-- .../translate_v3_translate_text_with_model_test.py | 2 ++ 14 files changed, 26 insertions(+), 19 deletions(-) diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index ada9e348..48521685 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -14,10 +14,13 @@ # limitations under the License. import os -import pytest import uuid -import beta_snippets + from google.cloud import storage +import pytest + +import beta_snippets + PROJECT_ID = os.environ['GCLOUD_PROJECT'] diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py index 42f854eb..0da84b72 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py @@ -14,15 +14,15 @@ # [START translate_hybrid_imports] +import html import io import os -import html # Imports the Google Cloud client libraries from google.api_core.exceptions import AlreadyExists +from google.cloud import texttospeech from google.cloud import translate_v3beta1 as translate from google.cloud import vision -from google.cloud import texttospeech # [END translate_hybrid_imports] diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py index 87e8420a..5224ca52 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py @@ -15,10 +15,10 @@ import os import sys -from hybrid_tutorial import pic_to_text from hybrid_tutorial import create_glossary -from hybrid_tutorial import translate_text +from hybrid_tutorial import pic_to_text from hybrid_tutorial import text_to_speech +from hybrid_tutorial import translate_text PROJECT_ID = os.environ['GCLOUD_PROJECT'] diff --git a/samples/snippets/translate_v3_batch_translate_text_test.py b/samples/snippets/translate_v3_batch_translate_text_test.py index 4fa8626a..85d03e0b 100644 --- a/samples/snippets/translate_v3_batch_translate_text_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_test.py @@ -15,9 +15,8 @@ import os import uuid -import pytest - from google.cloud import storage +import pytest import translate_v3_batch_translate_text diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py index 9af648f7..dd2e6887 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py @@ -16,11 +16,10 @@ import uuid import backoff -import pytest - from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError -from google.cloud.exceptions import NotFound from google.cloud import storage +from google.cloud.exceptions import NotFound +import pytest import translate_v3_batch_translate_text_with_glossary import translate_v3_create_glossary diff --git a/samples/snippets/translate_v3_create_glossary_test.py b/samples/snippets/translate_v3_create_glossary_test.py index 4b1e08ed..e133fd3f 100644 --- a/samples/snippets/translate_v3_create_glossary_test.py +++ b/samples/snippets/translate_v3_create_glossary_test.py @@ -16,10 +16,9 @@ import uuid import backoff -import pytest - from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError from google.cloud.exceptions import NotFound +import pytest import translate_v3_create_glossary import translate_v3_delete_glossary diff --git a/samples/snippets/translate_v3_detect_language_test.py b/samples/snippets/translate_v3_detect_language_test.py index a538fc68..2e9df867 100644 --- a/samples/snippets/translate_v3_detect_language_test.py +++ b/samples/snippets/translate_v3_detect_language_test.py @@ -13,8 +13,10 @@ # limitations under the License. import os + import translate_v3_detect_language + PROJECT_ID = os.environ["GCLOUD_PROJECT"] diff --git a/samples/snippets/translate_v3_get_glossary_test.py b/samples/snippets/translate_v3_get_glossary_test.py index 8880bf6d..a2df0a4b 100644 --- a/samples/snippets/translate_v3_get_glossary_test.py +++ b/samples/snippets/translate_v3_get_glossary_test.py @@ -16,10 +16,9 @@ import uuid import backoff -import pytest - from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError from google.cloud.exceptions import NotFound +import pytest import translate_v3_create_glossary import translate_v3_delete_glossary diff --git a/samples/snippets/translate_v3_get_supported_languages_test.py b/samples/snippets/translate_v3_get_supported_languages_test.py index cd4e44a4..57ceeb20 100644 --- a/samples/snippets/translate_v3_get_supported_languages_test.py +++ b/samples/snippets/translate_v3_get_supported_languages_test.py @@ -13,8 +13,10 @@ # limitations under the License. import os + import translate_v3_get_supported_languages + PROJECT_ID = os.environ["GCLOUD_PROJECT"] diff --git a/samples/snippets/translate_v3_get_supported_languages_with_target_test.py b/samples/snippets/translate_v3_get_supported_languages_with_target_test.py index aa40efe4..3b123d9f 100644 --- a/samples/snippets/translate_v3_get_supported_languages_with_target_test.py +++ b/samples/snippets/translate_v3_get_supported_languages_with_target_test.py @@ -13,8 +13,10 @@ # limitations under the License. import os + import translate_v3_get_supported_languages_with_target as get_supported_langs + PROJECT_ID = os.environ["GCLOUD_PROJECT"] diff --git a/samples/snippets/translate_v3_list_glossary_test.py b/samples/snippets/translate_v3_list_glossary_test.py index d0d38cde..04e93470 100644 --- a/samples/snippets/translate_v3_list_glossary_test.py +++ b/samples/snippets/translate_v3_list_glossary_test.py @@ -16,10 +16,9 @@ import uuid import backoff -import pytest - from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError from google.cloud.exceptions import NotFound +import pytest import translate_v3_create_glossary import translate_v3_delete_glossary diff --git a/samples/snippets/translate_v3_translate_text_test.py b/samples/snippets/translate_v3_translate_text_test.py index 096b8dd8..8897b9b5 100644 --- a/samples/snippets/translate_v3_translate_text_test.py +++ b/samples/snippets/translate_v3_translate_text_test.py @@ -13,8 +13,10 @@ # limitations under the License. import os + import translate_v3_translate_text + PROJECT_ID = os.environ["GCLOUD_PROJECT"] diff --git a/samples/snippets/translate_v3_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_translate_text_with_glossary_test.py index adf66836..bc5403c6 100644 --- a/samples/snippets/translate_v3_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_translate_text_with_glossary_test.py @@ -17,10 +17,9 @@ import uuid import backoff -import pytest - from google.api_core.exceptions import DeadlineExceeded, GoogleAPICallError from google.cloud.exceptions import NotFound +import pytest import translate_v3_create_glossary import translate_v3_delete_glossary diff --git a/samples/snippets/translate_v3_translate_text_with_model_test.py b/samples/snippets/translate_v3_translate_text_with_model_test.py index 6e6ab37e..16a5fc03 100644 --- a/samples/snippets/translate_v3_translate_text_with_model_test.py +++ b/samples/snippets/translate_v3_translate_text_with_model_test.py @@ -14,8 +14,10 @@ # limitations under the License. import os + import translate_v3_translate_text_with_model + PROJECT_ID = os.environ["GCLOUD_PROJECT"] MODEL_ID = "TRL3128559826197068699" From 95564410dea1a409c10453b1f2cec775b4ec1d73 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 19 May 2020 04:18:01 +0200 Subject: [PATCH 74/94] chore(deps): update dependency google-cloud-storage to v1.28.1 [(#3785)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3785) * chore(deps): update dependency google-cloud-storage to v1.28.1 * [asset] testing: use uuid instead of time Co-authored-by: Takashi Matsuo --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 5fb0a1e6..78de2e47 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,2 +1,2 @@ google-cloud-translate==2.0.1 -google-cloud-storage==1.28.0 +google-cloud-storage==1.28.1 From 7c4f9bf9da92e466431c0f4a30de28ca928c23c1 Mon Sep 17 00:00:00 2001 From: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Date: Wed, 3 Jun 2020 15:15:59 -0700 Subject: [PATCH 75/94] [translate] fix hybrid glossaries tests [(#3936)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3936) --- .../hybrid_glossaries/hybrid_tutorial.py | 19 +++++++++++++------ ...orial_tests.py => hybrid_tutorial_test.py} | 10 ++++------ .../hybrid_glossaries/requirements.txt | 2 +- .../resources/non_standard_format.txt | 2 +- samples/snippets/pytest.ini | 3 +++ 5 files changed, 22 insertions(+), 14 deletions(-) rename samples/snippets/hybrid_glossaries/{hybrid_tutorial_tests.py => hybrid_tutorial_test.py} (93%) create mode 100644 samples/snippets/pytest.ini diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py index 0da84b72..1b320e5b 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py @@ -193,21 +193,28 @@ def text_to_speech(text, outfile): client = texttospeech.TextToSpeechClient() # Sets the text input to be synthesized - synthesis_input = texttospeech.types.SynthesisInput(ssml=ssml) + synthesis_input = texttospeech.SynthesisInput(ssml=ssml) # Builds the voice request, selects the language code ("en-US") and # the SSML voice gender ("MALE") - voice = texttospeech.types.VoiceSelectionParams( + voice = texttospeech.VoiceSelectionParams( language_code='en-US', - ssml_gender=texttospeech.enums.SsmlVoiceGender.MALE) + ssml_gender=texttospeech.SsmlVoiceGender.MALE) # Selects the type of audio file to return - audio_config = texttospeech.types.AudioConfig( - audio_encoding=texttospeech.enums.AudioEncoding.MP3) + audio_config = texttospeech.AudioConfig( + audio_encoding=texttospeech.AudioEncoding.MP3) # Performs the text-to-speech request on the text input with the selected # voice parameters and audio file type - response = client.synthesize_speech(synthesis_input, voice, audio_config) + + request = texttospeech.SynthesizeSpeechRequest( + input=synthesis_input, + voice=voice, + audio_config=audio_config + ) + + response = client.synthesize_speech(request=request) # Writes the synthetic audio to the output file. with open(outfile, 'wb') as out: diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial_test.py similarity index 93% rename from samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py rename to samples/snippets/hybrid_glossaries/hybrid_tutorial_test.py index 5224ca52..f99be330 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial_tests.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial_test.py @@ -13,7 +13,9 @@ # limitations under the License. import os +import re import sys +import uuid from hybrid_tutorial import create_glossary from hybrid_tutorial import pic_to_text @@ -28,14 +30,10 @@ def test_vision_standard_format(): - - expected_text = 'This is\na test!\n' - alt_expected_text = 'This\nis\na test!\n' - # Generate text using Vision API text = pic_to_text('resources/standard_format.jpeg') - assert (text == expected_text) or (text == alt_expected_text) + assert re.match(r"This\s?is\s?a\s?test!\s?", text) def test_vision_non_standard_format(): @@ -58,7 +56,7 @@ def test_create_and_delete_glossary(): from beta_snippets import delete_glossary languages = ['fr', 'en'] - glossary_name = 'test-glossary' + glossary_name = f'test-glossary-{uuid.uuid4()}' glossary_uri = 'gs://cloud-samples-data/translation/bistro_glossary.csv' # create_glossary will raise an exception if creation fails diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt index d13c5f7d..ed9bbd1e 100644 --- a/samples/snippets/hybrid_glossaries/requirements.txt +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -1,3 +1,3 @@ google-cloud-translate==2.0.1 google-cloud-vision==1.0.0 -google-cloud-texttospeech==1.0.1 +google-cloud-texttospeech==2.0.0 diff --git a/samples/snippets/hybrid_glossaries/resources/non_standard_format.txt b/samples/snippets/hybrid_glossaries/resources/non_standard_format.txt index 8a6e3c11..529799ee 100644 --- a/samples/snippets/hybrid_glossaries/resources/non_standard_format.txt +++ b/samples/snippets/hybrid_glossaries/resources/non_standard_format.txt @@ -19,11 +19,11 @@ $10 Firebase Fruit Salad watermelon, honeydew melon, and pineapple +$6 Compute Engine Burger quarter-pound burger with cheddar cheese $10 -$6 BigQuery BLT bacon, lettuce, and tomato sandwich diff --git a/samples/snippets/pytest.ini b/samples/snippets/pytest.ini new file mode 100644 index 00000000..f1398806 --- /dev/null +++ b/samples/snippets/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +# don't recurse into hybrid_glossaries directory +norecursedirs = * \ No newline at end of file From 6f32e31c361b1880fa699e184d3a9819ffb823c7 Mon Sep 17 00:00:00 2001 From: Takashi Matsuo Date: Mon, 8 Jun 2020 18:53:04 -0700 Subject: [PATCH 76/94] testing: start using btlr [(#3959)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/3959) * testing: start using btlr The binary is at gs://cloud-devrel-kokoro-resources/btlr/v0.0.1/btlr * add period after DIFF_FROM * use array for btlr args * fix websocket tests * add debug message * wait longer for the server to spin up * dlp: bump the wait timeout to 10 minutes * [run] copy noxfile.py to child directory to avoid gcloud issue * [iam] fix: only display description when the key exists * use uuid4 instead of uuid1 * [iot] testing: use the same format for registry id * Stop asserting Out of memory not in the output * fix missing imports * [dns] testing: more retries with delay * [dlp] testing: longer timeout * use the max-concurrency flag * use 30 workers * [monitoring] use multiple projects * [dlp] testing: longer timeout --- samples/snippets/beta_snippets_test.py | 2 +- .../translate_v3_batch_translate_text_with_glossary_test.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index 48521685..453fcb7e 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -28,7 +28,7 @@ @pytest.fixture(scope='function') def bucket(): """Create a temporary bucket to store annotation output.""" - bucket_name = str(uuid.uuid1()) + bucket_name = f'tmp-{uuid.uuid4().hex}' storage_client = storage.Client() bucket = storage_client.create_bucket(bucket_name) diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py index dd2e6887..c2033ad3 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py @@ -57,7 +57,7 @@ def delete_glossary(): @pytest.fixture(scope="function") def bucket(): """Create a temporary bucket to store annotation output.""" - bucket_name = str(uuid.uuid1()) + bucket_name = f'tmp-{uuid.uuid4().hex}' storage_client = storage.Client() bucket = storage_client.create_bucket(bucket_name) From 8ca332b6009400cd7f9c7374c0807724f2a2c2f2 Mon Sep 17 00:00:00 2001 From: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> Date: Tue, 9 Jun 2020 14:34:27 -0700 Subject: [PATCH 77/94] Replace GCLOUD_PROJECT with GOOGLE_CLOUD_PROJECT. [(#4022)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4022) --- samples/snippets/beta_snippets_test.py | 2 +- samples/snippets/hybrid_glossaries/hybrid_tutorial.py | 2 +- samples/snippets/hybrid_glossaries/hybrid_tutorial_test.py | 2 +- samples/snippets/translate_v3_batch_translate_text_test.py | 2 +- .../translate_v3_batch_translate_text_with_glossary_test.py | 2 +- samples/snippets/translate_v3_create_glossary_test.py | 2 +- samples/snippets/translate_v3_delete_glossary_test.py | 2 +- samples/snippets/translate_v3_detect_language_test.py | 2 +- samples/snippets/translate_v3_get_glossary_test.py | 2 +- samples/snippets/translate_v3_get_supported_languages_test.py | 2 +- .../translate_v3_get_supported_languages_with_target_test.py | 2 +- samples/snippets/translate_v3_list_glossary_test.py | 2 +- samples/snippets/translate_v3_translate_text_test.py | 2 +- .../snippets/translate_v3_translate_text_with_glossary_test.py | 2 +- samples/snippets/translate_v3_translate_text_with_model_test.py | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/samples/snippets/beta_snippets_test.py b/samples/snippets/beta_snippets_test.py index 453fcb7e..a42ab08c 100644 --- a/samples/snippets/beta_snippets_test.py +++ b/samples/snippets/beta_snippets_test.py @@ -22,7 +22,7 @@ import beta_snippets -PROJECT_ID = os.environ['GCLOUD_PROJECT'] +PROJECT_ID = os.environ['GOOGLE_CLOUD_PROJECT'] @pytest.fixture(scope='function') diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py index 1b320e5b..7d36174b 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial.py @@ -28,7 +28,7 @@ # [START translate_hybrid_project_id] # extract GCP project id -PROJECT_ID = os.environ['GCLOUD_PROJECT'] +PROJECT_ID = os.environ['GOOGLE_CLOUD_PROJECT'] # [END translate_hybrid_project_id] diff --git a/samples/snippets/hybrid_glossaries/hybrid_tutorial_test.py b/samples/snippets/hybrid_glossaries/hybrid_tutorial_test.py index f99be330..8df7cc35 100644 --- a/samples/snippets/hybrid_glossaries/hybrid_tutorial_test.py +++ b/samples/snippets/hybrid_glossaries/hybrid_tutorial_test.py @@ -23,7 +23,7 @@ from hybrid_tutorial import translate_text -PROJECT_ID = os.environ['GCLOUD_PROJECT'] +PROJECT_ID = os.environ['GOOGLE_CLOUD_PROJECT'] # VISION TESTS diff --git a/samples/snippets/translate_v3_batch_translate_text_test.py b/samples/snippets/translate_v3_batch_translate_text_test.py index 85d03e0b..e7919d02 100644 --- a/samples/snippets/translate_v3_batch_translate_text_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_test.py @@ -21,7 +21,7 @@ import translate_v3_batch_translate_text -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] @pytest.fixture(scope="function") diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py index c2033ad3..1a1850ac 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py @@ -26,7 +26,7 @@ import translate_v3_delete_glossary -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" diff --git a/samples/snippets/translate_v3_create_glossary_test.py b/samples/snippets/translate_v3_create_glossary_test.py index e133fd3f..a24f461e 100644 --- a/samples/snippets/translate_v3_create_glossary_test.py +++ b/samples/snippets/translate_v3_create_glossary_test.py @@ -24,7 +24,7 @@ import translate_v3_delete_glossary -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" diff --git a/samples/snippets/translate_v3_delete_glossary_test.py b/samples/snippets/translate_v3_delete_glossary_test.py index 4309ca01..a88c16a3 100644 --- a/samples/snippets/translate_v3_delete_glossary_test.py +++ b/samples/snippets/translate_v3_delete_glossary_test.py @@ -20,7 +20,7 @@ import translate_v3_create_glossary import translate_v3_delete_glossary -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" diff --git a/samples/snippets/translate_v3_detect_language_test.py b/samples/snippets/translate_v3_detect_language_test.py index 2e9df867..7e9540cc 100644 --- a/samples/snippets/translate_v3_detect_language_test.py +++ b/samples/snippets/translate_v3_detect_language_test.py @@ -17,7 +17,7 @@ import translate_v3_detect_language -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] def test_detect_language(capsys): diff --git a/samples/snippets/translate_v3_get_glossary_test.py b/samples/snippets/translate_v3_get_glossary_test.py index a2df0a4b..96ea6b78 100644 --- a/samples/snippets/translate_v3_get_glossary_test.py +++ b/samples/snippets/translate_v3_get_glossary_test.py @@ -25,7 +25,7 @@ import translate_v3_get_glossary -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" diff --git a/samples/snippets/translate_v3_get_supported_languages_test.py b/samples/snippets/translate_v3_get_supported_languages_test.py index 57ceeb20..4bdc0fa4 100644 --- a/samples/snippets/translate_v3_get_supported_languages_test.py +++ b/samples/snippets/translate_v3_get_supported_languages_test.py @@ -17,7 +17,7 @@ import translate_v3_get_supported_languages -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] def test_list_languages(capsys): diff --git a/samples/snippets/translate_v3_get_supported_languages_with_target_test.py b/samples/snippets/translate_v3_get_supported_languages_with_target_test.py index 3b123d9f..8f3f52cf 100644 --- a/samples/snippets/translate_v3_get_supported_languages_with_target_test.py +++ b/samples/snippets/translate_v3_get_supported_languages_with_target_test.py @@ -17,7 +17,7 @@ import translate_v3_get_supported_languages_with_target as get_supported_langs -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] def test_list_languages_with_target(capsys): diff --git a/samples/snippets/translate_v3_list_glossary_test.py b/samples/snippets/translate_v3_list_glossary_test.py index 04e93470..8f4eaa1a 100644 --- a/samples/snippets/translate_v3_list_glossary_test.py +++ b/samples/snippets/translate_v3_list_glossary_test.py @@ -25,7 +25,7 @@ import translate_v3_list_glossary -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" diff --git a/samples/snippets/translate_v3_translate_text_test.py b/samples/snippets/translate_v3_translate_text_test.py index 8897b9b5..c93cb91f 100644 --- a/samples/snippets/translate_v3_translate_text_test.py +++ b/samples/snippets/translate_v3_translate_text_test.py @@ -17,7 +17,7 @@ import translate_v3_translate_text -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] def test_translate_text(capsys): diff --git a/samples/snippets/translate_v3_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_translate_text_with_glossary_test.py index bc5403c6..1caa9e6e 100644 --- a/samples/snippets/translate_v3_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_translate_text_with_glossary_test.py @@ -26,7 +26,7 @@ import translate_v3_translate_text_with_glossary -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] GLOSSARY_INPUT_URI = "gs://cloud-samples-data/translation/glossary_ja.csv" diff --git a/samples/snippets/translate_v3_translate_text_with_model_test.py b/samples/snippets/translate_v3_translate_text_with_model_test.py index 16a5fc03..f1cd5968 100644 --- a/samples/snippets/translate_v3_translate_text_with_model_test.py +++ b/samples/snippets/translate_v3_translate_text_with_model_test.py @@ -18,7 +18,7 @@ import translate_v3_translate_text_with_model -PROJECT_ID = os.environ["GCLOUD_PROJECT"] +PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"] MODEL_ID = "TRL3128559826197068699" From 79a62984c882f687ece4cd2968a85b5e1107d34b Mon Sep 17 00:00:00 2001 From: "Leah E. Cole" <6719667+leahecole@users.noreply.github.com> Date: Wed, 10 Jun 2020 16:13:04 -0700 Subject: [PATCH 78/94] remove whitelist replace with allowlist [(#4050)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4050) --- samples/snippets/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/snippets.py b/samples/snippets/snippets.py index 2d5232e6..24b45716 100644 --- a/samples/snippets/snippets.py +++ b/samples/snippets/snippets.py @@ -76,7 +76,7 @@ def translate_text_with_model(target, text, model='nmt'): # [START translate_text_with_model] """Translates text into the target language. - Make sure your project is whitelisted. + Make sure your project is allowlisted. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages From cb499dc39e682ec1906673fc7cf58257a259fb5b Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Sat, 20 Jun 2020 01:03:47 +0200 Subject: [PATCH 79/94] chore(deps): update dependency google-cloud-storage to v1.29.0 [(#4040)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4040) --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 78de2e47..e2bf8cbf 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,2 +1,2 @@ google-cloud-translate==2.0.1 -google-cloud-storage==1.28.1 +google-cloud-storage==1.29.0 From 58b3d2e4efbd09a189d0320f51c23daa96ad33c4 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 24 Jun 2020 19:35:35 +0200 Subject: [PATCH 80/94] chore(deps): update dependency google-cloud-texttospeech to v2.1.0 [(#4147)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4147) --- samples/snippets/hybrid_glossaries/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/hybrid_glossaries/requirements.txt b/samples/snippets/hybrid_glossaries/requirements.txt index ed9bbd1e..cc7f4187 100644 --- a/samples/snippets/hybrid_glossaries/requirements.txt +++ b/samples/snippets/hybrid_glossaries/requirements.txt @@ -1,3 +1,3 @@ google-cloud-translate==2.0.1 google-cloud-vision==1.0.0 -google-cloud-texttospeech==2.0.0 +google-cloud-texttospeech==2.1.0 From 3bc85065f35c6f165565f185d2ea30a96343488f Mon Sep 17 00:00:00 2001 From: Takashi Matsuo Date: Mon, 6 Jul 2020 15:41:37 -0700 Subject: [PATCH 81/94] testing(translate): parameterize the timeout [(#4247)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4247) fixes #4239 (by specifying a longer timeout) --- samples/snippets/translate_v3_batch_translate_text.py | 9 +++++---- ...translate_v3_batch_translate_text_with_glossary.py | 11 ++++++----- ...late_v3_batch_translate_text_with_glossary_test.py | 1 + samples/snippets/translate_v3_create_glossary.py | 9 +++++---- samples/snippets/translate_v3_delete_glossary.py | 6 ++++-- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/samples/snippets/translate_v3_batch_translate_text.py b/samples/snippets/translate_v3_batch_translate_text.py index 6c67d2c2..4454afb4 100644 --- a/samples/snippets/translate_v3_batch_translate_text.py +++ b/samples/snippets/translate_v3_batch_translate_text.py @@ -17,9 +17,10 @@ def batch_translate_text( - input_uri="gs://YOUR_BUCKET_ID/path/to/your/file.txt", - output_uri="gs://YOUR_BUCKET_ID/path/to/save/results/", - project_id="YOUR_PROJECT_ID" + input_uri="gs://YOUR_BUCKET_ID/path/to/your/file.txt", + output_uri="gs://YOUR_BUCKET_ID/path/to/save/results/", + project_id="YOUR_PROJECT_ID", + timeout=180, ): """Translates a batch of texts on GCS and stores the result in a GCS location.""" @@ -46,7 +47,7 @@ def batch_translate_text( output_config=output_config) print(u"Waiting for operation to complete...") - response = operation.result(180) + response = operation.result(timeout) print(u"Total Characters: {}".format(response.total_characters)) print(u"Translated Characters: {}".format(response.translated_characters)) diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary.py index d72c3186..97845e2a 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary.py @@ -18,10 +18,11 @@ def batch_translate_text_with_glossary( - input_uri="gs://YOUR_BUCKET_ID/path/to/your/file.txt", - output_uri="gs://YOUR_BUCKET_ID/path/to/save/results/", - project_id="YOUR_PROJECT_ID", - glossary_id="YOUR_GLOSSARY_ID", + input_uri="gs://YOUR_BUCKET_ID/path/to/your/file.txt", + output_uri="gs://YOUR_BUCKET_ID/path/to/save/results/", + project_id="YOUR_PROJECT_ID", + glossary_id="YOUR_GLOSSARY_ID", + timeout=180, ): """Translates a batch of texts on GCS and stores the result in a GCS location. Glossary is applied for translation.""" @@ -65,7 +66,7 @@ def batch_translate_text_with_glossary( ) print(u"Waiting for operation to complete...") - response = operation.result(180) + response = operation.result(timeout) print(u"Total Characters: {}".format(response.total_characters)) print(u"Translated Characters: {}".format(response.translated_characters)) diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py index 1a1850ac..23aa6691 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary_test.py @@ -73,6 +73,7 @@ def test_batch_translate_text_with_glossary(capsys, bucket, glossary): "gs://{}/translation/BATCH_TRANSLATION_OUTPUT/".format(bucket.name), PROJECT_ID, glossary, + 240 ) out, _ = capsys.readouterr() diff --git a/samples/snippets/translate_v3_create_glossary.py b/samples/snippets/translate_v3_create_glossary.py index a94e488e..603cb4cc 100644 --- a/samples/snippets/translate_v3_create_glossary.py +++ b/samples/snippets/translate_v3_create_glossary.py @@ -17,9 +17,10 @@ def create_glossary( - project_id="YOUR_PROJECT_ID", - input_uri="YOUR_INPUT_URI", - glossary_id="YOUR_GLOSSARY_ID", + project_id="YOUR_PROJECT_ID", + input_uri="YOUR_INPUT_URI", + glossary_id="YOUR_GLOSSARY_ID", + timeout=180, ): """ Create a equivalent term sets glossary. Glossary can be words or @@ -51,7 +52,7 @@ def create_glossary( # to translate the domain-specific terminology. operation = client.create_glossary(parent=parent, glossary=glossary) - result = operation.result(timeout=180) + result = operation.result(timeout) print("Created: {}".format(result.name)) print("Input Uri: {}".format(result.input_config.gcs_source.input_uri)) diff --git a/samples/snippets/translate_v3_delete_glossary.py b/samples/snippets/translate_v3_delete_glossary.py index f3f89753..e8acf76c 100644 --- a/samples/snippets/translate_v3_delete_glossary.py +++ b/samples/snippets/translate_v3_delete_glossary.py @@ -17,7 +17,9 @@ def delete_glossary( - project_id="YOUR_PROJECT_ID", glossary_id="YOUR_GLOSSARY_ID" + project_id="YOUR_PROJECT_ID", + glossary_id="YOUR_GLOSSARY_ID", + timeout=180, ): """Delete a specific glossary based on the glossary ID.""" client = translate.TranslationServiceClient() @@ -25,7 +27,7 @@ def delete_glossary( parent = client.glossary_path(project_id, "us-central1", glossary_id) operation = client.delete_glossary(parent) - result = operation.result(timeout=180) + result = operation.result(timeout) print("Deleted: {}".format(result.name)) From de0ee32a82d98f1a674a80c65f4dace7bd2f0733 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 13 Jul 2020 00:46:30 +0200 Subject: [PATCH 82/94] 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 --- samples/snippets/hybrid_glossaries/requirements-test.txt | 2 +- samples/snippets/requirements-test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/hybrid_glossaries/requirements-test.txt b/samples/snippets/hybrid_glossaries/requirements-test.txt index 781d4326..79738af5 100644 --- a/samples/snippets/hybrid_glossaries/requirements-test.txt +++ b/samples/snippets/hybrid_glossaries/requirements-test.txt @@ -1 +1 @@ -pytest==5.3.2 +pytest==5.4.3 diff --git a/samples/snippets/requirements-test.txt b/samples/snippets/requirements-test.txt index 1fccf2dd..dc93f006 100644 --- a/samples/snippets/requirements-test.txt +++ b/samples/snippets/requirements-test.txt @@ -1,3 +1,3 @@ backoff==1.10.0 flaky==3.6.1 -pytest==5.3.2 \ No newline at end of file +pytest==5.4.3 \ No newline at end of file From 135b2285178e771f19763533ca31ad2dd2471423 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 16 Jul 2020 02:00:42 +0200 Subject: [PATCH 83/94] Update dependency flaky to v3.7.0 [(#4300)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4300) --- samples/snippets/requirements-test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements-test.txt b/samples/snippets/requirements-test.txt index dc93f006..b267f58b 100644 --- a/samples/snippets/requirements-test.txt +++ b/samples/snippets/requirements-test.txt @@ -1,3 +1,3 @@ backoff==1.10.0 -flaky==3.6.1 +flaky==3.7.0 pytest==5.4.3 \ No newline at end of file From 6573d95a4e1902346a86d26acab847ee9f46d6f5 Mon Sep 17 00:00:00 2001 From: Takashi Matsuo Date: Thu, 16 Jul 2020 14:47:47 -0700 Subject: [PATCH 84/94] testing(translate): bump the timeout for operations [(#4258)](https://github.com/GoogleCloudPlatform/python-docs-samples/issues/4258) fixes #4220 --- samples/snippets/beta_snippets.py | 2 +- samples/snippets/translate_v3_batch_translate_text_test.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/snippets/beta_snippets.py b/samples/snippets/beta_snippets.py index 08ee5b72..96b19f5d 100644 --- a/samples/snippets/beta_snippets.py +++ b/samples/snippets/beta_snippets.py @@ -70,7 +70,7 @@ def batch_translate_text(project_id, input_uri, output_uri): input_configs=[input_config], output_config=output_config) - result = operation.result(180) + result = operation.result(timeout=240) print(u'Total Characters: {}'.format(result.total_characters)) print(u'Translated Characters: {}'.format(result.translated_characters)) diff --git a/samples/snippets/translate_v3_batch_translate_text_test.py b/samples/snippets/translate_v3_batch_translate_text_test.py index e7919d02..f604a3e1 100644 --- a/samples/snippets/translate_v3_batch_translate_text_test.py +++ b/samples/snippets/translate_v3_batch_translate_text_test.py @@ -42,6 +42,7 @@ def test_batch_translate_text(capsys, bucket): "gs://cloud-samples-data/translation/text.txt", "gs://{}/translation/BATCH_TRANSLATION_OUTPUT/".format(bucket.name), PROJECT_ID, + timeout=240 ) out, _ = capsys.readouterr() assert "Total Characters" in out From 0081e92989657d01f641a911b233eefea51929d1 Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Fri, 24 Jul 2020 13:37:16 -0700 Subject: [PATCH 85/94] chore: update templates --- .github/CODEOWNERS | 9 + samples/AUTHORING_GUIDE.md | 1 + samples/CONTRIBUTING.md | 1 + samples/snippets/README.rst | 32 ++- samples/snippets/hybrid_glossaries/README.rst | 21 +- samples/snippets/hybrid_glossaries/noxfile.py | 224 ++++++++++++++++++ samples/snippets/noxfile.py | 224 ++++++++++++++++++ synth.metadata | 17 +- synth.py | 9 +- 9 files changed, 526 insertions(+), 12 deletions(-) create mode 100644 .github/CODEOWNERS create mode 100644 samples/AUTHORING_GUIDE.md create mode 100644 samples/CONTRIBUTING.md create mode 100644 samples/snippets/hybrid_glossaries/noxfile.py create mode 100644 samples/snippets/noxfile.py diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..e0ca97d0 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,9 @@ +# 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 + + +# The python-samples-owners team is the default owner for samples +/samples/ @telpirion @sirtorry @googleapis/python-samples-owners \ No newline at end of file diff --git a/samples/AUTHORING_GUIDE.md b/samples/AUTHORING_GUIDE.md new file mode 100644 index 00000000..55c97b32 --- /dev/null +++ b/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/samples/CONTRIBUTING.md b/samples/CONTRIBUTING.md new file mode 100644 index 00000000..34c882b6 --- /dev/null +++ b/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/samples/snippets/README.rst b/samples/snippets/README.rst index f5065ed4..559b57e2 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -1,3 +1,4 @@ + .. This file is automatically generated. Do not edit this file directly. Google Translation API Python Samples @@ -14,10 +15,12 @@ This directory contains samples for Google Translation API. With `Google Transla .. _Google Translation API: https://cloud.google.com/translate/docs + Setup ------------------------------------------------------------------------------- + Authentication ++++++++++++++ @@ -28,6 +31,9 @@ credentials for applications. .. _Authentication Getting Started Guide: https://cloud.google.com/docs/authentication/getting-started + + + Install Dependencies ++++++++++++++++++++ @@ -42,7 +48,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 @@ -58,9 +64,15 @@ Install Dependencies .. _pip: https://pip.pypa.io/ .. _virtualenv: https://virtualenv.pypa.io/ + + + + + Samples ------------------------------------------------------------------------------- + Quickstart +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -77,6 +89,8 @@ To run this sample: $ python quickstart.py + + Snippets +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -92,6 +106,7 @@ To run this sample: $ python snippets.py + usage: snippets.py [-h] {detect-language,list-languages,list-languages-with-target,translate-text} ... @@ -109,8 +124,9 @@ To run this sample: list-languages-with-target Lists all available languages and localizes them to the target language. Target must be an ISO 639-1 - language code. See https://g.co/cloud/translate/v2 - /translate-reference#supported_languages + language code. See + https://g.co/cloud/translate/v2/translate- + reference#supported_languages translate-text Translates text into the target language. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate- @@ -121,6 +137,8 @@ To run this sample: + + Beta Snippets +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -136,6 +154,7 @@ To run this sample: $ python beta_snippets.py + usage: beta_snippets.py [-h] {translate-text,batch-translate-text,detect-language,list-languages,list-languages-with-target,create-glossary,get-glossary,list-glossaries,delete-glossary,translate-with-glossary} ... @@ -160,6 +179,10 @@ To run this sample: + + + + The client library ------------------------------------------------------------------------------- @@ -175,4 +198,5 @@ to `browse the source`_ and `report issues`_. https://github.com/GoogleCloudPlatform/google-cloud-python/issues -.. _Google Cloud SDK: https://cloud.google.com/sdk/ \ No newline at end of file + +.. _Google Cloud SDK: https://cloud.google.com/sdk/ diff --git a/samples/snippets/hybrid_glossaries/README.rst b/samples/snippets/hybrid_glossaries/README.rst index 2c986654..e68b8114 100644 --- a/samples/snippets/hybrid_glossaries/README.rst +++ b/samples/snippets/hybrid_glossaries/README.rst @@ -1,3 +1,4 @@ + .. This file is automatically generated. Do not edit this file directly. Google Translation API Python Samples @@ -14,10 +15,12 @@ This directory contains samples for Google Translation API. With `Google Transla .. _Google Translation API: https://cloud.google.com/translate/docs + Setup ------------------------------------------------------------------------------- + Authentication ++++++++++++++ @@ -28,6 +31,9 @@ credentials for applications. .. _Authentication Getting Started Guide: https://cloud.google.com/docs/authentication/getting-started + + + Install Dependencies ++++++++++++++++++++ @@ -42,7 +48,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 @@ -58,9 +64,15 @@ Install Dependencies .. _pip: https://pip.pypa.io/ .. _virtualenv: https://virtualenv.pypa.io/ + + + + + Samples ------------------------------------------------------------------------------- + Using glossaries with vision and text-to-speech +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -79,6 +91,10 @@ To run this sample: + + + + The client library ------------------------------------------------------------------------------- @@ -94,4 +110,5 @@ to `browse the source`_ and `report issues`_. https://github.com/GoogleCloudPlatform/google-cloud-python/issues -.. _Google Cloud SDK: https://cloud.google.com/sdk/ \ No newline at end of file + +.. _Google Cloud SDK: https://cloud.google.com/sdk/ diff --git a/samples/snippets/hybrid_glossaries/noxfile.py b/samples/snippets/hybrid_glossaries/noxfile.py new file mode 100644 index 00000000..ba55d7ce --- /dev/null +++ b/samples/snippets/hybrid_glossaries/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/samples/snippets/noxfile.py b/samples/snippets/noxfile.py new file mode 100644 index 00000000..ba55d7ce --- /dev/null +++ b/samples/snippets/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/synth.metadata b/synth.metadata index 47998b60..213dcd68 100644 --- a/synth.metadata +++ b/synth.metadata @@ -3,23 +3,30 @@ { "git": { "name": ".", - "remote": "git@github.com:googleapis/python-translate", - "sha": "39077510cb7a367049156134d5f43552318708a8" + "remote": "git@github.com:googleapis/python-translate.git", + "sha": "0f9c7550afa7341d0b83b47a2ba9be57dde02209" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "76905ffe7e3b0605f64ef889fb88913634f9f836", - "internalRef": "319332818" + "sha": "e26e1839a45445d13cd45b1be3b1523defb72fee", + "internalRef": "322867095" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "303271797a360f8a439203413f13a160f2f5b3b4" + "sha": "2686d7075fa456972bf4d08680d99617f5eb32b1" + } + }, + { + "git": { + "name": "synthtool", + "remote": "https://github.com/googleapis/synthtool.git", + "sha": "2686d7075fa456972bf4d08680d99617f5eb32b1" } } ], diff --git a/synth.py b/synth.py index 8e41682e..6f128fd6 100644 --- a/synth.py +++ b/synth.py @@ -16,6 +16,7 @@ import synthtool as s from synthtool import gcp +from synthtool.languages import python gapic = gcp.GAPICBazel() common = gcp.CommonTemplates() @@ -92,7 +93,7 @@ # templated_files = gcp.CommonTemplates().py_library(unit_cov_level=100, cov_level=100) # Pass dependencies to system tests templated_files = common.py_library( - unit_cov_level=95, cov_level=95, + unit_cov_level=95, cov_level=95, samples=True, system_test_dependencies=['test_utils'] ) s.move(templated_files) @@ -100,4 +101,10 @@ # TODO(busunkim): Use latest sphinx after microgenerator transition s.replace("noxfile.py", '''["']sphinx["']''', '"sphinx<3.0.0"') +# ---------------------------------------------------------------------------- +# Samples templates +# ---------------------------------------------------------------------------- + +python.py_samples() + s.shell.run(["nox", "-s", "blacken"], hide_output=False) From 0714f6de6f8574d519719324e0a6b1f2b75f8482 Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Fri, 24 Jul 2020 13:43:45 -0700 Subject: [PATCH 86/94] chore: narrows samples CODEOWNERS to .py only --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e0ca97d0..65116f60 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,4 +6,4 @@ # The python-samples-owners team is the default owner for samples -/samples/ @telpirion @sirtorry @googleapis/python-samples-owners \ No newline at end of file +/samples/**/*.py @telpirion @sirtorry @googleapis/python-samples-owners \ No newline at end of file From 3e7b19c784c3cdcf0b6cf1d099f78643e8fd54ef Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Mon, 27 Jul 2020 22:03:52 -0700 Subject: [PATCH 87/94] chore: wip migration to microgenerator client, units, docs complete --- .coveragerc | 31 +- README.rst | 5 +- UPGRADING.md | 157 + docs/UPGRADING.md | 1 + docs/gapic/v3/api.rst | 6 - docs/gapic/v3/types.rst | 5 - docs/gapic/v3beta1/api.rst | 6 - docs/gapic/v3beta1/types.rst | 5 - docs/index.rst | 32 +- docs/translate_v3/services.rst | 6 + docs/translate_v3/types.rst | 5 + docs/translate_v3beta1/services.rst | 6 + docs/translate_v3beta1/types.rst | 5 + docs/v3.rst | 8 - docs/v3beta1.rst | 8 - google/cloud/translate/__init__.py | 88 + google/cloud/translate/py.typed | 2 + google/cloud/translate_v3/__init__.py | 81 +- google/cloud/translate_v3/gapic/__init__.py | 0 google/cloud/translate_v3/gapic/enums.py | 91 - .../gapic/translation_service_client.py | 1099 ----- .../translation_service_client_config.py | 82 - .../translate_v3/gapic/transports/__init__.py | 0 .../translation_service_grpc_transport.py | 234 - google/cloud/translate_v3/proto/__init__.py | 0 .../proto/translation_service.proto | 926 ---- .../proto/translation_service_pb2.py | 4050 ----------------- .../proto/translation_service_pb2_grpc.py | 411 -- google/cloud/translate_v3/py.typed | 2 + .../cloud/translate_v3/services/__init__.py | 16 + .../services/translation_service/__init__.py | 24 + .../translation_service/async_client.py | 910 ++++ .../services/translation_service/client.py | 1019 +++++ .../services/translation_service/pagers.py | 148 + .../transports/__init__.py | 38 + .../translation_service/transports/base.py | 227 + .../translation_service/transports/grpc.py | 463 ++ .../transports/grpc_asyncio.py | 461 ++ google/cloud/translate_v3/types.py | 54 - google/cloud/translate_v3/types/__init__.py | 77 + .../translate_v3/types/translation_service.py | 1028 +++++ google/cloud/translate_v3beta1/__init__.py | 81 +- .../cloud/translate_v3beta1/gapic/__init__.py | 0 .../gapic/translation_service_client.py | 1096 ----- .../translation_service_client_config.py | 82 - .../gapic/transports/__init__.py | 0 .../translation_service_grpc_transport.py | 234 - .../cloud/translate_v3beta1/proto/__init__.py | 0 .../proto/translation_service.proto | 902 ---- .../proto/translation_service_pb2.py | 4042 ---------------- .../proto/translation_service_pb2_grpc.py | 411 -- google/cloud/translate_v3beta1/py.typed | 2 + .../translate_v3beta1/services/__init__.py | 16 + .../services/translation_service/__init__.py | 24 + .../translation_service/async_client.py | 797 ++++ .../services/translation_service/client.py | 906 ++++ .../services/translation_service/pagers.py | 148 + .../transports/__init__.py | 38 + .../translation_service/transports/base.py | 227 + .../translation_service/transports/grpc.py | 463 ++ .../transports/grpc_asyncio.py | 461 ++ google/cloud/translate_v3beta1/types.py | 54 - .../cloud/translate_v3beta1/types/__init__.py | 77 + .../types/translation_service.py | 1020 +++++ mypy.ini | 3 + noxfile.py | 11 +- scripts/fixup_translation_v3_keywords.py | 185 + scripts/fixup_translation_v3beta1_keywords.py | 185 + setup.py | 18 +- synth.metadata | 16 +- synth.py | 67 +- .../unit/gapic/translation_v3/__init__.py | 1 + .../test_translation_service.py | 2494 ++++++++++ .../gapic/translation_v3beta1/__init__.py | 1 + .../test_translation_service.py | 2375 ++++++++++ .../v3/test_translation_service_client_v3.py | 470 -- ...test_translation_service_client_v3beta1.py | 470 -- 77 files changed, 14304 insertions(+), 14890 deletions(-) create mode 100644 UPGRADING.md create mode 120000 docs/UPGRADING.md delete mode 100644 docs/gapic/v3/api.rst delete mode 100644 docs/gapic/v3/types.rst delete mode 100644 docs/gapic/v3beta1/api.rst delete mode 100644 docs/gapic/v3beta1/types.rst create mode 100644 docs/translate_v3/services.rst create mode 100644 docs/translate_v3/types.rst create mode 100644 docs/translate_v3beta1/services.rst create mode 100644 docs/translate_v3beta1/types.rst delete mode 100644 docs/v3.rst delete mode 100644 docs/v3beta1.rst create mode 100644 google/cloud/translate/__init__.py create mode 100644 google/cloud/translate/py.typed delete mode 100644 google/cloud/translate_v3/gapic/__init__.py delete mode 100644 google/cloud/translate_v3/gapic/enums.py delete mode 100644 google/cloud/translate_v3/gapic/translation_service_client.py delete mode 100644 google/cloud/translate_v3/gapic/translation_service_client_config.py delete mode 100644 google/cloud/translate_v3/gapic/transports/__init__.py delete mode 100644 google/cloud/translate_v3/gapic/transports/translation_service_grpc_transport.py delete mode 100644 google/cloud/translate_v3/proto/__init__.py delete mode 100644 google/cloud/translate_v3/proto/translation_service.proto delete mode 100644 google/cloud/translate_v3/proto/translation_service_pb2.py delete mode 100644 google/cloud/translate_v3/proto/translation_service_pb2_grpc.py create mode 100644 google/cloud/translate_v3/py.typed create mode 100644 google/cloud/translate_v3/services/__init__.py create mode 100644 google/cloud/translate_v3/services/translation_service/__init__.py create mode 100644 google/cloud/translate_v3/services/translation_service/async_client.py create mode 100644 google/cloud/translate_v3/services/translation_service/client.py create mode 100644 google/cloud/translate_v3/services/translation_service/pagers.py create mode 100644 google/cloud/translate_v3/services/translation_service/transports/__init__.py create mode 100644 google/cloud/translate_v3/services/translation_service/transports/base.py create mode 100644 google/cloud/translate_v3/services/translation_service/transports/grpc.py create mode 100644 google/cloud/translate_v3/services/translation_service/transports/grpc_asyncio.py delete mode 100644 google/cloud/translate_v3/types.py create mode 100644 google/cloud/translate_v3/types/__init__.py create mode 100644 google/cloud/translate_v3/types/translation_service.py delete mode 100644 google/cloud/translate_v3beta1/gapic/__init__.py delete mode 100644 google/cloud/translate_v3beta1/gapic/translation_service_client.py delete mode 100644 google/cloud/translate_v3beta1/gapic/translation_service_client_config.py delete mode 100644 google/cloud/translate_v3beta1/gapic/transports/__init__.py delete mode 100644 google/cloud/translate_v3beta1/gapic/transports/translation_service_grpc_transport.py delete mode 100644 google/cloud/translate_v3beta1/proto/__init__.py delete mode 100644 google/cloud/translate_v3beta1/proto/translation_service.proto delete mode 100644 google/cloud/translate_v3beta1/proto/translation_service_pb2.py delete mode 100644 google/cloud/translate_v3beta1/proto/translation_service_pb2_grpc.py create mode 100644 google/cloud/translate_v3beta1/py.typed create mode 100644 google/cloud/translate_v3beta1/services/__init__.py create mode 100644 google/cloud/translate_v3beta1/services/translation_service/__init__.py create mode 100644 google/cloud/translate_v3beta1/services/translation_service/async_client.py create mode 100644 google/cloud/translate_v3beta1/services/translation_service/client.py create mode 100644 google/cloud/translate_v3beta1/services/translation_service/pagers.py create mode 100644 google/cloud/translate_v3beta1/services/translation_service/transports/__init__.py create mode 100644 google/cloud/translate_v3beta1/services/translation_service/transports/base.py create mode 100644 google/cloud/translate_v3beta1/services/translation_service/transports/grpc.py create mode 100644 google/cloud/translate_v3beta1/services/translation_service/transports/grpc_asyncio.py delete mode 100644 google/cloud/translate_v3beta1/types.py create mode 100644 google/cloud/translate_v3beta1/types/__init__.py create mode 100644 google/cloud/translate_v3beta1/types/translation_service.py create mode 100644 mypy.ini create mode 100644 scripts/fixup_translation_v3_keywords.py create mode 100644 scripts/fixup_translation_v3beta1_keywords.py create mode 100644 tests/unit/gapic/translate_v3/unit/gapic/translation_v3/__init__.py create mode 100644 tests/unit/gapic/translate_v3/unit/gapic/translation_v3/test_translation_service.py create mode 100644 tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/__init__.py create mode 100644 tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/test_translation_service.py delete mode 100644 tests/unit/gapic/v3/test_translation_service_client_v3.py delete mode 100644 tests/unit/gapic/v3beta1/test_translation_service_client_v3beta1.py diff --git a/.coveragerc b/.coveragerc index dd39c854..8a34e3a5 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,35 +1,18 @@ -# -*- 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/translate/__init__.py 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 diff --git a/README.rst b/README.rst index 1ca13ab7..2d09f147 100644 --- a/README.rst +++ b/README.rst @@ -55,11 +55,12 @@ 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-translate==2.0.1. Mac/Linux diff --git a/UPGRADING.md b/UPGRADING.md new file mode 100644 index 00000000..151a2640 --- /dev/null +++ b/UPGRADING.md @@ -0,0 +1,157 @@ +# 3.0.0 Migration Guide + +The 3.0 release of the `google-cloud-translate` client is a significant upgrade based on a [next-gen code generator](https://github.com/googleapis/gapic-generator-python), and includes substantial interface changes. Existing code written for earlier versions of this library will likely require updates to use this version. This document describes the changes that have been made, and what you need to do to update your usage. + +If you experience issues or have questions, please file an [issue](https://github.com/googleapis/python-translate/issues). + +## Supported Python Versions + +> **WARNING**: Breaking change + +The 3.0.0 release requires Python 3.6+. + + +## Method Calls + +> **WARNING**: Breaking change + +Methods expect request objects. We provide a script that will convert most common use cases. + +* Install the library + +```py +python3 -m pip install google-cloud-translate +``` + +* The script `fixup_translation_{version}_keywords.py` is shipped with the library. It expects +an input directory (with the code to convert) and an empty destination directory. + +```sh +$ fixup_translation_v3_keywords.py --input-directory .samples/ --output-directory samples/ +``` + +**Before:** +```py +from google.cloud import translate + +client = translate.TranslationServiceClient() +parent = client.location_path(, ) + +response = client.translate_text( + parent=parent, + contents=[text], + mime_type="text/plain", + source_language_code="en-US", + target_language_code="fr", +) +``` + + +**After:** +```py +from google.cloud import translate + +client = translate.TranslationServiceClient() +parent = "projects//locations/" + +response = client.translate_text( + request={ + "parent": parent, + "contents": [text], + "mime_type": "text/plain", + "source_language_code": "en-US", + "target_language_code": "fr" + } +) +``` + +### More Details + +In `google-cloud-translate<3.0.0`, parameters required by the API were positional parameters and optional parameters were keyword parameters. + +**Before:** +```py + def translate_text( + self, + contents, + target_language_code, + parent, + mime_type=None, + source_language_code=None, + model=None, + glossary_config=None, + labels=None, + retry=google.api_core.gapic_v1.method.DEFAULT, + timeout=google.api_core.gapic_v1.method.DEFAULT, + metadata=None, + ): +``` + +In the 3.0.0 release, all methods have a single positional parameter `request`. Method docstrings indicate whether a parameter is required or optional. + +Some methods have additional keyword only parameters. The available parameters depend on the [`google.api.method_signature` annotation](https://github.com/googleapis/googleapis/blob/master/google/cloud/translate/v3/translation_service.proto#L55) specified by the API producer. + + +**After:** +```py + def translate_text( + self, + request: translation_service.TranslateTextRequest = None, + *, + parent: str = None, + target_language_code: str = None, + contents: Sequence[str] = None, + model: str = None, + mime_type: str = None, + source_language_code: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.TranslateTextResponse: +``` + +> **NOTE:** The `request` parameter and flattened keyword parameters for the API are mutually exclusive. +> Passing both will result in an error. + + +Both of these calls are valid: + +```py +response = client.translate_text( + request={ + "parent": parent, + "target_language_code": target_language_code, + "contents": contents + } +) +``` + +```py +response = client.translate_text( + parent=parent, + target_language_code=target_language_code, + contents=contents +) +``` + +This call is invalid because it mixes `request` with a keyword argument `target_language_code`. Executing this code +will result in an error. + +```py +response = client.translate_text( + request={ + "parent": parent, + "contents": contents, + }, + target_language_code=target_language_code +) +``` + + + +## Enums + + +> **WARNING**: Breaking change + +The submodules `enums` (containing enum classes for long running operation State) has been removed. \ No newline at end of file diff --git a/docs/UPGRADING.md b/docs/UPGRADING.md new file mode 120000 index 00000000..01097c8c --- /dev/null +++ b/docs/UPGRADING.md @@ -0,0 +1 @@ +../UPGRADING.md \ No newline at end of file diff --git a/docs/gapic/v3/api.rst b/docs/gapic/v3/api.rst deleted file mode 100644 index e16ef6a8..00000000 --- a/docs/gapic/v3/api.rst +++ /dev/null @@ -1,6 +0,0 @@ -Client for Cloud Translation API -================================ - -.. automodule:: google.cloud.translate_v3 - :members: - :inherited-members: \ No newline at end of file diff --git a/docs/gapic/v3/types.rst b/docs/gapic/v3/types.rst deleted file mode 100644 index fb83ab06..00000000 --- a/docs/gapic/v3/types.rst +++ /dev/null @@ -1,5 +0,0 @@ -Types for Cloud Translation API Client -====================================== - -.. automodule:: google.cloud.translate_v3.types - :members: \ No newline at end of file diff --git a/docs/gapic/v3beta1/api.rst b/docs/gapic/v3beta1/api.rst deleted file mode 100644 index 4d46ad13..00000000 --- a/docs/gapic/v3beta1/api.rst +++ /dev/null @@ -1,6 +0,0 @@ -Client for Cloud Translation API -================================ - -.. automodule:: google.cloud.translate_v3beta1 - :members: - :inherited-members: \ No newline at end of file diff --git a/docs/gapic/v3beta1/types.rst b/docs/gapic/v3beta1/types.rst deleted file mode 100644 index 8b9725da..00000000 --- a/docs/gapic/v3beta1/types.rst +++ /dev/null @@ -1,5 +0,0 @@ -Types for Cloud Translation API Client -====================================== - -.. automodule:: google.cloud.translate_v3beta1.types - :members: \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 5289f58c..cbb4edc4 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,15 +13,41 @@ want to import from ``google.cloud.translate_v3beta1`` in lieu of ``google.cloud.translate``. The previous release ``v2`` is also available. Import from ``google.cloud.translate_v2`` to use this release. - +v3 API Reference +---------------- .. toctree:: :maxdepth: 2 - v3 - v3beta1 + Client (v3) + Types (v3) + +v3beta1 API Reference +--------------------- +.. toctree:: + :maxdepth: 2 + + Client (v3beta1) + Types (v3beta1) + +v2 API Reference +---------------- +.. toctree:: + :maxdepth: 2 + v2 +Migration Guide +--------------- + +See the guide below for instructions on migrating to the 3.x release of this library. + +.. toctree:: + :maxdepth: 2 + + UPGRADING + + Changelog --------- diff --git a/docs/translate_v3/services.rst b/docs/translate_v3/services.rst new file mode 100644 index 00000000..8400587e --- /dev/null +++ b/docs/translate_v3/services.rst @@ -0,0 +1,6 @@ +Services for Google Cloud Translation v3 API +============================================ + +.. automodule:: google.cloud.translate_v3.services.translation_service + :members: + :inherited-members: diff --git a/docs/translate_v3/types.rst b/docs/translate_v3/types.rst new file mode 100644 index 00000000..a126067f --- /dev/null +++ b/docs/translate_v3/types.rst @@ -0,0 +1,5 @@ +Types for Google Cloud Translation v3 API +========================================= + +.. automodule:: google.cloud.translate_v3.types + :members: diff --git a/docs/translate_v3beta1/services.rst b/docs/translate_v3beta1/services.rst new file mode 100644 index 00000000..eb522c99 --- /dev/null +++ b/docs/translate_v3beta1/services.rst @@ -0,0 +1,6 @@ +Services for Google Cloud Translation v3beta1 API +================================================= + +.. automodule:: google.cloud.translate_v3beta1.services.translation_service + :members: + :inherited-members: diff --git a/docs/translate_v3beta1/types.rst b/docs/translate_v3beta1/types.rst new file mode 100644 index 00000000..aaf04973 --- /dev/null +++ b/docs/translate_v3beta1/types.rst @@ -0,0 +1,5 @@ +Types for Google Cloud Translation v3beta1 API +============================================== + +.. automodule:: google.cloud.translate_v3beta1.types + :members: diff --git a/docs/v3.rst b/docs/v3.rst deleted file mode 100644 index b6b8cd17..00000000 --- a/docs/v3.rst +++ /dev/null @@ -1,8 +0,0 @@ -v3 -=== - -.. toctree:: - :maxdepth: 2 - - gapic/v3/api - gapic/v3/types diff --git a/docs/v3beta1.rst b/docs/v3beta1.rst deleted file mode 100644 index 368aed30..00000000 --- a/docs/v3beta1.rst +++ /dev/null @@ -1,8 +0,0 @@ -v3beta1 -======= - -.. toctree:: - :maxdepth: 2 - - gapic/v3beta1/api - gapic/v3beta1/types diff --git a/google/cloud/translate/__init__.py b/google/cloud/translate/__init__.py new file mode 100644 index 00000000..8c9024db --- /dev/null +++ b/google/cloud/translate/__init__.py @@ -0,0 +1,88 @@ +# -*- 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 google.cloud.translate_v3.services.translation_service.async_client import ( + TranslationServiceAsyncClient, +) +from google.cloud.translate_v3.services.translation_service.client import ( + TranslationServiceClient, +) +from google.cloud.translate_v3.types.translation_service import BatchTranslateMetadata +from google.cloud.translate_v3.types.translation_service import BatchTranslateResponse +from google.cloud.translate_v3.types.translation_service import ( + BatchTranslateTextRequest, +) +from google.cloud.translate_v3.types.translation_service import CreateGlossaryMetadata +from google.cloud.translate_v3.types.translation_service import CreateGlossaryRequest +from google.cloud.translate_v3.types.translation_service import DeleteGlossaryMetadata +from google.cloud.translate_v3.types.translation_service import DeleteGlossaryRequest +from google.cloud.translate_v3.types.translation_service import DeleteGlossaryResponse +from google.cloud.translate_v3.types.translation_service import DetectLanguageRequest +from google.cloud.translate_v3.types.translation_service import DetectLanguageResponse +from google.cloud.translate_v3.types.translation_service import DetectedLanguage +from google.cloud.translate_v3.types.translation_service import GcsDestination +from google.cloud.translate_v3.types.translation_service import GcsSource +from google.cloud.translate_v3.types.translation_service import GetGlossaryRequest +from google.cloud.translate_v3.types.translation_service import ( + GetSupportedLanguagesRequest, +) +from google.cloud.translate_v3.types.translation_service import Glossary +from google.cloud.translate_v3.types.translation_service import GlossaryInputConfig +from google.cloud.translate_v3.types.translation_service import InputConfig +from google.cloud.translate_v3.types.translation_service import ListGlossariesRequest +from google.cloud.translate_v3.types.translation_service import ListGlossariesResponse +from google.cloud.translate_v3.types.translation_service import OutputConfig +from google.cloud.translate_v3.types.translation_service import SupportedLanguage +from google.cloud.translate_v3.types.translation_service import SupportedLanguages +from google.cloud.translate_v3.types.translation_service import ( + TranslateTextGlossaryConfig, +) +from google.cloud.translate_v3.types.translation_service import TranslateTextRequest +from google.cloud.translate_v3.types.translation_service import TranslateTextResponse +from google.cloud.translate_v3.types.translation_service import Translation + +__all__ = ( + "BatchTranslateMetadata", + "BatchTranslateResponse", + "BatchTranslateTextRequest", + "CreateGlossaryMetadata", + "CreateGlossaryRequest", + "DeleteGlossaryMetadata", + "DeleteGlossaryRequest", + "DeleteGlossaryResponse", + "DetectLanguageRequest", + "DetectLanguageResponse", + "DetectedLanguage", + "GcsDestination", + "GcsSource", + "GetGlossaryRequest", + "GetSupportedLanguagesRequest", + "Glossary", + "GlossaryInputConfig", + "InputConfig", + "ListGlossariesRequest", + "ListGlossariesResponse", + "OutputConfig", + "SupportedLanguage", + "SupportedLanguages", + "TranslateTextGlossaryConfig", + "TranslateTextRequest", + "TranslateTextResponse", + "Translation", + "TranslationServiceAsyncClient", + "TranslationServiceClient", +) diff --git a/google/cloud/translate/py.typed b/google/cloud/translate/py.typed new file mode 100644 index 00000000..dd819a47 --- /dev/null +++ b/google/cloud/translate/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-translation package uses inline types. diff --git a/google/cloud/translate_v3/__init__.py b/google/cloud/translate_v3/__init__.py index e595cf35..b7cd2fe0 100644 --- a/google/cloud/translate_v3/__init__.py +++ b/google/cloud/translate_v3/__init__.py @@ -1,42 +1,77 @@ # -*- 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 -import sys -import warnings - -from google.cloud.translate_v3 import types -from google.cloud.translate_v3.gapic import translation_service_client - - -if sys.version_info[:2] == (2, 7): - message = ( - "A future version of this library will drop support for Python 2.7. " - "More details about Python 2 support for Google Cloud Client Libraries " - "can be found at https://cloud.google.com/python/docs/python2-sunset/" - ) - warnings.warn(message, DeprecationWarning) - - -class TranslationServiceClient(translation_service_client.TranslationServiceClient): - __doc__ = translation_service_client.TranslationServiceClient.__doc__ +from .services.translation_service import TranslationServiceClient +from .types.translation_service import BatchTranslateMetadata +from .types.translation_service import BatchTranslateResponse +from .types.translation_service import BatchTranslateTextRequest +from .types.translation_service import CreateGlossaryMetadata +from .types.translation_service import CreateGlossaryRequest +from .types.translation_service import DeleteGlossaryMetadata +from .types.translation_service import DeleteGlossaryRequest +from .types.translation_service import DeleteGlossaryResponse +from .types.translation_service import DetectLanguageRequest +from .types.translation_service import DetectLanguageResponse +from .types.translation_service import DetectedLanguage +from .types.translation_service import GcsDestination +from .types.translation_service import GcsSource +from .types.translation_service import GetGlossaryRequest +from .types.translation_service import GetSupportedLanguagesRequest +from .types.translation_service import Glossary +from .types.translation_service import GlossaryInputConfig +from .types.translation_service import InputConfig +from .types.translation_service import ListGlossariesRequest +from .types.translation_service import ListGlossariesResponse +from .types.translation_service import OutputConfig +from .types.translation_service import SupportedLanguage +from .types.translation_service import SupportedLanguages +from .types.translation_service import TranslateTextGlossaryConfig +from .types.translation_service import TranslateTextRequest +from .types.translation_service import TranslateTextResponse +from .types.translation_service import Translation __all__ = ( - "types", + "BatchTranslateMetadata", + "BatchTranslateResponse", + "BatchTranslateTextRequest", + "CreateGlossaryMetadata", + "CreateGlossaryRequest", + "DeleteGlossaryMetadata", + "DeleteGlossaryRequest", + "DeleteGlossaryResponse", + "DetectLanguageRequest", + "DetectLanguageResponse", + "DetectedLanguage", + "GcsDestination", + "GcsSource", + "GetGlossaryRequest", + "GetSupportedLanguagesRequest", + "Glossary", + "GlossaryInputConfig", + "InputConfig", + "ListGlossariesRequest", + "ListGlossariesResponse", + "OutputConfig", + "SupportedLanguage", + "SupportedLanguages", + "TranslateTextGlossaryConfig", + "TranslateTextRequest", + "TranslateTextResponse", + "Translation", "TranslationServiceClient", ) diff --git a/google/cloud/translate_v3/gapic/__init__.py b/google/cloud/translate_v3/gapic/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/google/cloud/translate_v3/gapic/enums.py b/google/cloud/translate_v3/gapic/enums.py deleted file mode 100644 index 051328da..00000000 --- a/google/cloud/translate_v3/gapic/enums.py +++ /dev/null @@ -1,91 +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. - -"""Wrappers for protocol buffer enum types.""" - -import enum - - -class BatchTranslateMetadata(object): - class State(enum.IntEnum): - """ - State of the job. - - Attributes: - STATE_UNSPECIFIED (int): Invalid. - RUNNING (int): Request is being processed. - SUCCEEDED (int): The batch is processed, and at least one item was successfully - processed. - FAILED (int): The batch is done and no item was successfully processed. - CANCELLING (int): Request is in the process of being canceled after caller invoked - longrunning.Operations.CancelOperation on the request id. - CANCELLED (int): The batch is done after the user has called the - longrunning.Operations.CancelOperation. Any records processed before the - cancel command are output as specified in the request. - """ - - STATE_UNSPECIFIED = 0 - RUNNING = 1 - SUCCEEDED = 2 - FAILED = 3 - CANCELLING = 4 - CANCELLED = 5 - - -class CreateGlossaryMetadata(object): - class State(enum.IntEnum): - """ - Enumerates the possible states that the creation request can be in. - - Attributes: - STATE_UNSPECIFIED (int): Invalid. - RUNNING (int): Request is being processed. - SUCCEEDED (int): The glossary was successfully created. - FAILED (int): Failed to create the glossary. - CANCELLING (int): Request is in the process of being canceled after caller invoked - longrunning.Operations.CancelOperation on the request id. - CANCELLED (int): The glossary creation request was successfully canceled. - """ - - STATE_UNSPECIFIED = 0 - RUNNING = 1 - SUCCEEDED = 2 - FAILED = 3 - CANCELLING = 4 - CANCELLED = 5 - - -class DeleteGlossaryMetadata(object): - class State(enum.IntEnum): - """ - Enumerates the possible states that the creation request can be in. - - Attributes: - STATE_UNSPECIFIED (int): Invalid. - RUNNING (int): Request is being processed. - SUCCEEDED (int): The glossary was successfully deleted. - FAILED (int): Failed to delete the glossary. - CANCELLING (int): Request is in the process of being canceled after caller invoked - longrunning.Operations.CancelOperation on the request id. - CANCELLED (int): The glossary deletion request was successfully canceled. - """ - - STATE_UNSPECIFIED = 0 - RUNNING = 1 - SUCCEEDED = 2 - FAILED = 3 - CANCELLING = 4 - CANCELLED = 5 diff --git a/google/cloud/translate_v3/gapic/translation_service_client.py b/google/cloud/translate_v3/gapic/translation_service_client.py deleted file mode 100644 index 3852f06c..00000000 --- a/google/cloud/translate_v3/gapic/translation_service_client.py +++ /dev/null @@ -1,1099 +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.cloud.translation.v3 TranslationService 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.operation -import google.api_core.operations_v1 -import google.api_core.page_iterator -import google.api_core.path_template -import google.api_core.protobuf_helpers -import grpc - -from google.cloud.translate_v3.gapic import translation_service_client_config -from google.cloud.translate_v3.gapic.transports import ( - translation_service_grpc_transport, -) -from google.cloud.translate_v3.proto import translation_service_pb2 -from google.cloud.translate_v3.proto import translation_service_pb2_grpc -from google.longrunning import operations_pb2 - - -_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( - "google-cloud-translate", -).version - - -class TranslationServiceClient(object): - """Provides natural language translation operations.""" - - SERVICE_ADDRESS = "translate.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.cloud.translation.v3.TranslationService" - - @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: - TranslationServiceClient: 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 glossary_path(cls, project, location, glossary): - """Return a fully-qualified glossary string.""" - return google.api_core.path_template.expand( - "projects/{project}/locations/{location}/glossaries/{glossary}", - project=project, - location=location, - glossary=glossary, - ) - - @classmethod - def location_path(cls, project, location): - """Return a fully-qualified location string.""" - return google.api_core.path_template.expand( - "projects/{project}/locations/{location}", - project=project, - location=location, - ) - - def __init__( - self, - transport=None, - channel=None, - credentials=None, - client_config=None, - client_info=None, - client_options=None, - ): - """Constructor. - - Args: - transport (Union[~.TranslationServiceGrpcTransport, - Callable[[~.Credentials, type], ~.TranslationServiceGrpcTransport]): 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 = translation_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=translation_service_grpc_transport.TranslationServiceGrpcTransport, - 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 = translation_service_grpc_transport.TranslationServiceGrpcTransport( - 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 translate_text( - self, - contents, - target_language_code, - parent, - mime_type=None, - source_language_code=None, - model=None, - glossary_config=None, - labels=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Translates input text and returns translated text. - - Example: - >>> from google.cloud import translate_v3 - >>> - >>> client = translate_v3.TranslationServiceClient() - >>> - >>> # TODO: Initialize `contents`: - >>> contents = [] - >>> - >>> # TODO: Initialize `target_language_code`: - >>> target_language_code = '' - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> response = client.translate_text(contents, target_language_code, parent) - - Args: - contents (list[str]): Required. The content of the input in string format. - We recommend the total content be less than 30k codepoints. - Use BatchTranslateText for larger text. - target_language_code (str): Required. The BCP-47 language code to use for translation of the input - text, set to one of the language codes listed in Language Support. - parent (str): Required. Project or location to make a call. Must refer to a - caller's project. - - Format: ``projects/{project-number-or-id}`` or - ``projects/{project-number-or-id}/locations/{location-id}``. - - For global calls, use - ``projects/{project-number-or-id}/locations/global`` or - ``projects/{project-number-or-id}``. - - Non-global location is required for requests using AutoML models or - custom glossaries. - - Models and glossaries must be within the same region (have same - location-id), otherwise an INVALID_ARGUMENT (400) error is returned. - mime_type (str): Optional. The format of the source text, for example, "text/html", - "text/plain". If left blank, the MIME type defaults to "text/html". - source_language_code (str): Optional. The BCP-47 language code of the input text if - known, for example, "en-US" or "sr-Latn". Supported language codes are - listed in Language Support. If the source language isn't specified, the API - attempts to identify the source language automatically and returns the - source language within the response. - model (str): Optional. The ``model`` type requested for this translation. - - The format depends on model type: - - - AutoML Translation models: - ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` - - - General (built-in) models: - ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` - - For global (non-regionalized) requests, use ``location-id`` ``global``. - For example, - ``projects/{project-number-or-id}/locations/global/models/general/nmt``. - - If missing, the system decides which google base model to use. - glossary_config (Union[dict, ~google.cloud.translate_v3.types.TranslateTextGlossaryConfig]): Optional. Glossary to be applied. The glossary must be within the - same region (have the same location-id) as the model, otherwise an - INVALID_ARGUMENT (400) error is returned. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3.types.TranslateTextGlossaryConfig` - labels (dict[str -> str]): Optional. The labels with user-defined metadata for the request. - - Label keys and values can be no longer than 63 characters - (Unicode codepoints), can only contain lowercase letters, numeric - characters, underscores and dashes. International characters are allowed. - Label values are optional. Label keys must start with a letter. - - See https://cloud.google.com/translate/docs/labels for more information. - 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.translate_v3.types.TranslateTextResponse` 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 "translate_text" not in self._inner_api_calls: - self._inner_api_calls[ - "translate_text" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.translate_text, - default_retry=self._method_configs["TranslateText"].retry, - default_timeout=self._method_configs["TranslateText"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.TranslateTextRequest( - contents=contents, - target_language_code=target_language_code, - parent=parent, - mime_type=mime_type, - source_language_code=source_language_code, - model=model, - glossary_config=glossary_config, - labels=labels, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - 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["translate_text"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def detect_language( - self, - parent, - model=None, - content=None, - mime_type=None, - labels=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Detects the language of text within a request. - - Example: - >>> from google.cloud import translate_v3 - >>> - >>> client = translate_v3.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> response = client.detect_language(parent) - - Args: - parent (str): Required. Project or location to make a call. Must refer to a - caller's project. - - Format: ``projects/{project-number-or-id}/locations/{location-id}`` or - ``projects/{project-number-or-id}``. - - For global calls, use - ``projects/{project-number-or-id}/locations/global`` or - ``projects/{project-number-or-id}``. - - Only models within the same region (has same location-id) can be used. - Otherwise an INVALID_ARGUMENT (400) error is returned. - model (str): Optional. The language detection model to be used. - - Format: - ``projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}`` - - Only one language detection model is currently supported: - ``projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default``. - - If not specified, the default model is used. - content (str): The content of the input stored as a string. - mime_type (str): Optional. The format of the source text, for example, "text/html", - "text/plain". If left blank, the MIME type defaults to "text/html". - labels (dict[str -> str]): Optional. The labels with user-defined metadata for the request. - - Label keys and values can be no longer than 63 characters - (Unicode codepoints), can only contain lowercase letters, numeric - characters, underscores and dashes. International characters are allowed. - Label values are optional. Label keys must start with a letter. - - See https://cloud.google.com/translate/docs/labels for more information. - 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.translate_v3.types.DetectLanguageResponse` 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 "detect_language" not in self._inner_api_calls: - self._inner_api_calls[ - "detect_language" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.detect_language, - default_retry=self._method_configs["DetectLanguage"].retry, - default_timeout=self._method_configs["DetectLanguage"].timeout, - client_info=self._client_info, - ) - - # Sanity check: We have some fields which are mutually exclusive; - # raise ValueError if more than one is sent. - google.api_core.protobuf_helpers.check_oneof(content=content,) - - request = translation_service_pb2.DetectLanguageRequest( - parent=parent, - model=model, - content=content, - mime_type=mime_type, - labels=labels, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - 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["detect_language"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def get_supported_languages( - self, - parent, - display_language_code=None, - model=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Returns a list of supported languages for translation. - - Example: - >>> from google.cloud import translate_v3 - >>> - >>> client = translate_v3.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> response = client.get_supported_languages(parent) - - Args: - parent (str): Required. Project or location to make a call. Must refer to a - caller's project. - - Format: ``projects/{project-number-or-id}`` or - ``projects/{project-number-or-id}/locations/{location-id}``. - - For global calls, use - ``projects/{project-number-or-id}/locations/global`` or - ``projects/{project-number-or-id}``. - - Non-global location is required for AutoML models. - - Only models within the same region (have same location-id) can be used, - otherwise an INVALID_ARGUMENT (400) error is returned. - display_language_code (str): Optional. The language to use to return localized, human readable names - of supported languages. If missing, then display names are not returned - in a response. - model (str): Optional. Get supported languages of this model. - - The format depends on model type: - - - AutoML Translation models: - ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` - - - General (built-in) models: - ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` - - Returns languages supported by the specified model. If missing, we get - supported languages of Google general base (PBMT) model. - 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.translate_v3.types.SupportedLanguages` 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_supported_languages" not in self._inner_api_calls: - self._inner_api_calls[ - "get_supported_languages" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.get_supported_languages, - default_retry=self._method_configs["GetSupportedLanguages"].retry, - default_timeout=self._method_configs["GetSupportedLanguages"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.GetSupportedLanguagesRequest( - parent=parent, display_language_code=display_language_code, model=model, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - 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_supported_languages"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def batch_translate_text( - self, - parent, - source_language_code, - target_language_codes, - input_configs, - output_config, - models=None, - glossaries=None, - labels=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Translates a large volume of text in asynchronous batch mode. - This function provides real-time output as the inputs are being processed. - If caller cancels a request, the partial results (for an input file, it's - all or nothing) may still be available on the specified output location. - - This call returns immediately and you can - use google.longrunning.Operation.name to poll the status of the call. - - Example: - >>> from google.cloud import translate_v3 - >>> - >>> client = translate_v3.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> # TODO: Initialize `source_language_code`: - >>> source_language_code = '' - >>> - >>> # TODO: Initialize `target_language_codes`: - >>> target_language_codes = [] - >>> - >>> # TODO: Initialize `input_configs`: - >>> input_configs = [] - >>> - >>> # TODO: Initialize `output_config`: - >>> output_config = {} - >>> - >>> response = client.batch_translate_text(parent, source_language_code, target_language_codes, input_configs, output_config) - >>> - >>> def callback(operation_future): - ... # Handle result. - ... result = operation_future.result() - >>> - >>> response.add_done_callback(callback) - >>> - >>> # Handle metadata. - >>> metadata = response.metadata() - - Args: - parent (str): Required. Location to make a call. Must refer to a caller's project. - - Format: ``projects/{project-number-or-id}/locations/{location-id}``. - - The ``global`` location is not supported for batch translation. - - Only AutoML Translation models or glossaries within the same region - (have the same location-id) can be used, otherwise an INVALID_ARGUMENT - (400) error is returned. - source_language_code (str): Required. Source language code. - target_language_codes (list[str]): Required. Specify up to 10 language codes here. - input_configs (list[Union[dict, ~google.cloud.translate_v3.types.InputConfig]]): Required. Input configurations. - The total number of files matched should be <= 1000. - The total content size should be <= 100M Unicode codepoints. - The files must use UTF-8 encoding. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3.types.InputConfig` - output_config (Union[dict, ~google.cloud.translate_v3.types.OutputConfig]): Required. Output configuration. - If 2 input configs match to the same file (that is, same input path), - we don't generate output for duplicate inputs. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3.types.OutputConfig` - models (dict[str -> str]): Optional. The models to use for translation. Map's key is target - language code. Map's value is model name. Value can be a built-in - general model, or an AutoML Translation model. - - The value format depends on model type: - - - AutoML Translation models: - ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` - - - General (built-in) models: - ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` - - If the map is empty or a specific model is not requested for a language - pair, then default google model (nmt) is used. - glossaries (dict[str -> Union[dict, ~google.cloud.translate_v3.types.TranslateTextGlossaryConfig]]): Optional. Glossaries to be applied for translation. - It's keyed by target language code. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3.types.TranslateTextGlossaryConfig` - labels (dict[str -> str]): Optional. The labels with user-defined metadata for the request. - - Label keys and values can be no longer than 63 characters - (Unicode codepoints), can only contain lowercase letters, numeric - characters, underscores and dashes. International characters are allowed. - Label values are optional. Label keys must start with a letter. - - See https://cloud.google.com/translate/docs/labels for more information. - 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.translate_v3.types._OperationFuture` 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 "batch_translate_text" not in self._inner_api_calls: - self._inner_api_calls[ - "batch_translate_text" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.batch_translate_text, - default_retry=self._method_configs["BatchTranslateText"].retry, - default_timeout=self._method_configs["BatchTranslateText"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.BatchTranslateTextRequest( - parent=parent, - source_language_code=source_language_code, - target_language_codes=target_language_codes, - input_configs=input_configs, - output_config=output_config, - models=models, - glossaries=glossaries, - labels=labels, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - operation = self._inner_api_calls["batch_translate_text"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - return google.api_core.operation.from_gapic( - operation, - self.transport._operations_client, - translation_service_pb2.BatchTranslateResponse, - metadata_type=translation_service_pb2.BatchTranslateMetadata, - ) - - def create_glossary( - self, - parent, - glossary, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Creates a glossary and returns the long-running operation. Returns - NOT_FOUND, if the project doesn't exist. - - Example: - >>> from google.cloud import translate_v3 - >>> - >>> client = translate_v3.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> # TODO: Initialize `glossary`: - >>> glossary = {} - >>> - >>> response = client.create_glossary(parent, glossary) - >>> - >>> def callback(operation_future): - ... # Handle result. - ... result = operation_future.result() - >>> - >>> response.add_done_callback(callback) - >>> - >>> # Handle metadata. - >>> metadata = response.metadata() - - Args: - parent (str): Required. The project name. - glossary (Union[dict, ~google.cloud.translate_v3.types.Glossary]): Required. The glossary to create. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3.types.Glossary` - 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.translate_v3.types._OperationFuture` 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 "create_glossary" not in self._inner_api_calls: - self._inner_api_calls[ - "create_glossary" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.create_glossary, - default_retry=self._method_configs["CreateGlossary"].retry, - default_timeout=self._method_configs["CreateGlossary"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.CreateGlossaryRequest( - parent=parent, glossary=glossary, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - operation = self._inner_api_calls["create_glossary"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - return google.api_core.operation.from_gapic( - operation, - self.transport._operations_client, - translation_service_pb2.Glossary, - metadata_type=translation_service_pb2.CreateGlossaryMetadata, - ) - - def list_glossaries( - self, - parent, - page_size=None, - filter_=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Lists glossaries in a project. Returns NOT_FOUND, if the project - doesn't exist. - - Example: - >>> from google.cloud import translate_v3 - >>> - >>> client = translate_v3.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> # Iterate over all results - >>> for element in client.list_glossaries(parent): - ... # process element - ... pass - >>> - >>> - >>> # Alternatively: - >>> - >>> # Iterate over results one page at a time - >>> for page in client.list_glossaries(parent).pages: - ... for element in page: - ... # process element - ... pass - - Args: - parent (str): Required. The name of the project from which to list all of the glossaries. - 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. - filter_ (str): Optional. Filter specifying constraints of a list operation. - Filtering is not supported yet, and the parameter currently has no effect. - If missing, no filtering is performed. - 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.translate_v3.types.Glossary` 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_glossaries" not in self._inner_api_calls: - self._inner_api_calls[ - "list_glossaries" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.list_glossaries, - default_retry=self._method_configs["ListGlossaries"].retry, - default_timeout=self._method_configs["ListGlossaries"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.ListGlossariesRequest( - parent=parent, page_size=page_size, filter=filter_, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - 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_glossaries"], - retry=retry, - timeout=timeout, - metadata=metadata, - ), - request=request, - items_field="glossaries", - request_token_field="page_token", - response_token_field="next_page_token", - ) - return iterator - - def get_glossary( - self, - name, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Gets a glossary. Returns NOT_FOUND, if the glossary doesn't exist. - - Example: - >>> from google.cloud import translate_v3 - >>> - >>> client = translate_v3.TranslationServiceClient() - >>> - >>> name = client.glossary_path('[PROJECT]', '[LOCATION]', '[GLOSSARY]') - >>> - >>> response = client.get_glossary(name) - - Args: - name (str): Required. The name of the glossary to retrieve. - 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.translate_v3.types.Glossary` 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_glossary" not in self._inner_api_calls: - self._inner_api_calls[ - "get_glossary" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.get_glossary, - default_retry=self._method_configs["GetGlossary"].retry, - default_timeout=self._method_configs["GetGlossary"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.GetGlossaryRequest(name=name,) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("name", 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_glossary"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def delete_glossary( - self, - name, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Deletes a glossary, or cancels glossary construction if the glossary - isn't created yet. Returns NOT_FOUND, if the glossary doesn't exist. - - Example: - >>> from google.cloud import translate_v3 - >>> - >>> client = translate_v3.TranslationServiceClient() - >>> - >>> name = client.glossary_path('[PROJECT]', '[LOCATION]', '[GLOSSARY]') - >>> - >>> response = client.delete_glossary(name) - >>> - >>> def callback(operation_future): - ... # Handle result. - ... result = operation_future.result() - >>> - >>> response.add_done_callback(callback) - >>> - >>> # Handle metadata. - >>> metadata = response.metadata() - - Args: - name (str): Required. The name of the glossary to delete. - 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.translate_v3.types._OperationFuture` 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_glossary" not in self._inner_api_calls: - self._inner_api_calls[ - "delete_glossary" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.delete_glossary, - default_retry=self._method_configs["DeleteGlossary"].retry, - default_timeout=self._method_configs["DeleteGlossary"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.DeleteGlossaryRequest(name=name,) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("name", name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - operation = self._inner_api_calls["delete_glossary"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - return google.api_core.operation.from_gapic( - operation, - self.transport._operations_client, - translation_service_pb2.DeleteGlossaryResponse, - metadata_type=translation_service_pb2.DeleteGlossaryMetadata, - ) diff --git a/google/cloud/translate_v3/gapic/translation_service_client_config.py b/google/cloud/translate_v3/gapic/translation_service_client_config.py deleted file mode 100644 index 2aa726c4..00000000 --- a/google/cloud/translate_v3/gapic/translation_service_client_config.py +++ /dev/null @@ -1,82 +0,0 @@ -config = { - "interfaces": { - "google.cloud.translation.v3.TranslationService": { - "retry_codes": { - "retry_policy_1_codes": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], - "no_retry_codes": [], - "no_retry_1_codes": [], - }, - "retry_params": { - "retry_policy_1_params": { - "initial_retry_delay_millis": 100, - "retry_delay_multiplier": 1.3, - "max_retry_delay_millis": 60000, - "initial_rpc_timeout_millis": 600000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 600000, - "total_timeout_millis": 600000, - }, - "no_retry_params": { - "initial_retry_delay_millis": 0, - "retry_delay_multiplier": 0.0, - "max_retry_delay_millis": 0, - "initial_rpc_timeout_millis": 0, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 0, - "total_timeout_millis": 0, - }, - "no_retry_1_params": { - "initial_retry_delay_millis": 0, - "retry_delay_multiplier": 0.0, - "max_retry_delay_millis": 0, - "initial_rpc_timeout_millis": 600000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 600000, - "total_timeout_millis": 600000, - }, - }, - "methods": { - "TranslateText": { - "timeout_millis": 600000, - "retry_codes_name": "no_retry_1_codes", - "retry_params_name": "no_retry_1_params", - }, - "DetectLanguage": { - "timeout_millis": 600000, - "retry_codes_name": "no_retry_1_codes", - "retry_params_name": "no_retry_1_params", - }, - "GetSupportedLanguages": { - "timeout_millis": 600000, - "retry_codes_name": "retry_policy_1_codes", - "retry_params_name": "retry_policy_1_params", - }, - "BatchTranslateText": { - "timeout_millis": 600000, - "retry_codes_name": "no_retry_1_codes", - "retry_params_name": "no_retry_1_params", - }, - "CreateGlossary": { - "timeout_millis": 600000, - "retry_codes_name": "no_retry_1_codes", - "retry_params_name": "no_retry_1_params", - }, - "ListGlossaries": { - "timeout_millis": 600000, - "retry_codes_name": "retry_policy_1_codes", - "retry_params_name": "retry_policy_1_params", - }, - "GetGlossary": { - "timeout_millis": 600000, - "retry_codes_name": "retry_policy_1_codes", - "retry_params_name": "retry_policy_1_params", - }, - "DeleteGlossary": { - "timeout_millis": 600000, - "retry_codes_name": "retry_policy_1_codes", - "retry_params_name": "retry_policy_1_params", - }, - }, - } - } -} diff --git a/google/cloud/translate_v3/gapic/transports/__init__.py b/google/cloud/translate_v3/gapic/transports/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/google/cloud/translate_v3/gapic/transports/translation_service_grpc_transport.py b/google/cloud/translate_v3/gapic/transports/translation_service_grpc_transport.py deleted file mode 100644 index 9aad4a9a..00000000 --- a/google/cloud/translate_v3/gapic/transports/translation_service_grpc_transport.py +++ /dev/null @@ -1,234 +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 -import google.api_core.operations_v1 - -from google.cloud.translate_v3.proto import translation_service_pb2_grpc - - -class TranslationServiceGrpcTransport(object): - """gRPC transport class providing stubs for - google.cloud.translation.v3 TranslationService 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", - "https://www.googleapis.com/auth/cloud-translation", - ) - - def __init__( - self, channel=None, credentials=None, address="translate.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 = { - "translation_service_stub": translation_service_pb2_grpc.TranslationServiceStub( - channel - ), - } - - # Because this API includes a method that returns a - # long-running operation (proto: google.longrunning.Operation), - # instantiate an LRO client. - self._operations_client = google.api_core.operations_v1.OperationsClient( - channel - ) - - @classmethod - def create_channel( - cls, address="translate.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 translate_text(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.translate_text`. - - Translates input text and returns translated text. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].TranslateText - - @property - def detect_language(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.detect_language`. - - Detects the language of text within a request. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].DetectLanguage - - @property - def get_supported_languages(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.get_supported_languages`. - - Returns a list of supported languages for translation. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].GetSupportedLanguages - - @property - def batch_translate_text(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.batch_translate_text`. - - Translates a large volume of text in asynchronous batch mode. - This function provides real-time output as the inputs are being processed. - If caller cancels a request, the partial results (for an input file, it's - all or nothing) may still be available on the specified output location. - - This call returns immediately and you can - use google.longrunning.Operation.name to poll the status of the call. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].BatchTranslateText - - @property - def create_glossary(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.create_glossary`. - - Creates a glossary and returns the long-running operation. Returns - NOT_FOUND, if the project doesn't exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].CreateGlossary - - @property - def list_glossaries(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.list_glossaries`. - - Lists glossaries in a project. Returns NOT_FOUND, if the project - doesn't exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].ListGlossaries - - @property - def get_glossary(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.get_glossary`. - - Gets a glossary. Returns NOT_FOUND, if the glossary doesn't exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].GetGlossary - - @property - def delete_glossary(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.delete_glossary`. - - Deletes a glossary, or cancels glossary construction if the glossary - isn't created yet. Returns NOT_FOUND, if the glossary doesn't exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].DeleteGlossary diff --git a/google/cloud/translate_v3/proto/__init__.py b/google/cloud/translate_v3/proto/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/google/cloud/translate_v3/proto/translation_service.proto b/google/cloud/translate_v3/proto/translation_service.proto deleted file mode 100644 index ad43831c..00000000 --- a/google/cloud/translate_v3/proto/translation_service.proto +++ /dev/null @@ -1,926 +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. -// - -syntax = "proto3"; - -package google.cloud.translation.v3; - -import "google/api/annotations.proto"; -import "google/api/client.proto"; -import "google/api/field_behavior.proto"; -import "google/api/resource.proto"; -import "google/longrunning/operations.proto"; -import "google/protobuf/timestamp.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.Cloud.Translate.V3"; -option go_package = "google.golang.org/genproto/googleapis/cloud/translate/v3;translate"; -option java_multiple_files = true; -option java_outer_classname = "TranslationServiceProto"; -option java_package = "com.google.cloud.translate.v3"; -option php_namespace = "Google\\Cloud\\Translate\\V3"; -option ruby_package = "Google::Cloud::Translate::V3"; - -// Proto file for the Cloud Translation API (v3 GA). - -// Provides natural language translation operations. -service TranslationService { - option (google.api.default_host) = "translate.googleapis.com"; - option (google.api.oauth_scopes) = - "https://www.googleapis.com/auth/cloud-platform," - "https://www.googleapis.com/auth/cloud-translation"; - - // Translates input text and returns translated text. - rpc TranslateText(TranslateTextRequest) returns (TranslateTextResponse) { - option (google.api.http) = { - post: "/v3/{parent=projects/*/locations/*}:translateText" - body: "*" - additional_bindings { - post: "/v3/{parent=projects/*}:translateText" - body: "*" - } - }; - option (google.api.method_signature) = - "parent,target_language_code,contents"; - option (google.api.method_signature) = - "parent,model,mime_type,source_language_code,target_language_code,contents"; - } - - // Detects the language of text within a request. - rpc DetectLanguage(DetectLanguageRequest) returns (DetectLanguageResponse) { - option (google.api.http) = { - post: "/v3/{parent=projects/*/locations/*}:detectLanguage" - body: "*" - additional_bindings { - post: "/v3/{parent=projects/*}:detectLanguage" - body: "*" - } - }; - option (google.api.method_signature) = "parent,model,mime_type,content"; - } - - // Returns a list of supported languages for translation. - rpc GetSupportedLanguages(GetSupportedLanguagesRequest) - returns (SupportedLanguages) { - option (google.api.http) = { - get: "/v3/{parent=projects/*/locations/*}/supportedLanguages" - additional_bindings { get: "/v3/{parent=projects/*}/supportedLanguages" } - }; - option (google.api.method_signature) = "parent,model,display_language_code"; - } - - // Translates a large volume of text in asynchronous batch mode. - // This function provides real-time output as the inputs are being processed. - // If caller cancels a request, the partial results (for an input file, it's - // all or nothing) may still be available on the specified output location. - // - // This call returns immediately and you can - // use google.longrunning.Operation.name to poll the status of the call. - rpc BatchTranslateText(BatchTranslateTextRequest) - returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v3/{parent=projects/*/locations/*}:batchTranslateText" - body: "*" - }; - option (google.longrunning.operation_info) = { - response_type: "BatchTranslateResponse" - metadata_type: "BatchTranslateMetadata" - }; - } - - // Creates a glossary and returns the long-running operation. Returns - // NOT_FOUND, if the project doesn't exist. - rpc CreateGlossary(CreateGlossaryRequest) - returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v3/{parent=projects/*/locations/*}/glossaries" - body: "glossary" - }; - option (google.api.method_signature) = "parent,glossary"; - option (google.longrunning.operation_info) = { - response_type: "Glossary" - metadata_type: "CreateGlossaryMetadata" - }; - } - - // Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't - // exist. - rpc ListGlossaries(ListGlossariesRequest) returns (ListGlossariesResponse) { - option (google.api.http) = { - get: "/v3/{parent=projects/*/locations/*}/glossaries" - }; - option (google.api.method_signature) = "parent"; - } - - // Gets a glossary. Returns NOT_FOUND, if the glossary doesn't - // exist. - rpc GetGlossary(GetGlossaryRequest) returns (Glossary) { - option (google.api.http) = { - get: "/v3/{name=projects/*/locations/*/glossaries/*}" - }; - option (google.api.method_signature) = "name"; - } - - // Deletes a glossary, or cancels glossary construction - // if the glossary isn't created yet. - // Returns NOT_FOUND, if the glossary doesn't exist. - rpc DeleteGlossary(DeleteGlossaryRequest) - returns (google.longrunning.Operation) { - option (google.api.http) = { - delete: "/v3/{name=projects/*/locations/*/glossaries/*}" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "DeleteGlossaryResponse" - metadata_type: "DeleteGlossaryMetadata" - }; - } -} - -// Configures which glossary should be used for a specific target language, -// and defines options for applying that glossary. -message TranslateTextGlossaryConfig { - // Required. Specifies the glossary used for this translation. Use - // this format: projects/*/locations/*/glossaries/* - string glossary = 1 [(google.api.field_behavior) = REQUIRED]; - - // Optional. Indicates match is case-insensitive. - // Default value is false if missing. - bool ignore_case = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// The request message for synchronous translation. -message TranslateTextRequest { - // Required. The content of the input in string format. - // We recommend the total content be less than 30k codepoints. - // Use BatchTranslateText for larger text. - repeated string contents = 1 [(google.api.field_behavior) = REQUIRED]; - - // Optional. The format of the source text, for example, "text/html", - // "text/plain". If left blank, the MIME type defaults to "text/html". - string mime_type = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The BCP-47 language code of the input text if - // known, for example, "en-US" or "sr-Latn". Supported language codes are - // listed in Language Support. If the source language isn't specified, the API - // attempts to identify the source language automatically and returns the - // source language within the response. - string source_language_code = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Required. The BCP-47 language code to use for translation of the input - // text, set to one of the language codes listed in Language Support. - string target_language_code = 5 [(google.api.field_behavior) = REQUIRED]; - - // Required. Project or location to make a call. Must refer to a caller's - // project. - // - // Format: `projects/{project-number-or-id}` or - // `projects/{project-number-or-id}/locations/{location-id}`. - // - // For global calls, use `projects/{project-number-or-id}/locations/global` or - // `projects/{project-number-or-id}`. - // - // Non-global location is required for requests using AutoML models or - // custom glossaries. - // - // Models and glossaries must be within the same region (have same - // location-id), otherwise an INVALID_ARGUMENT (400) error is returned. - string parent = 8 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. The `model` type requested for this translation. - // - // The format depends on model type: - // - // - AutoML Translation models: - // `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - // - // - General (built-in) models: - // `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, - // `projects/{project-number-or-id}/locations/{location-id}/models/general/base` - // - // - // For global (non-regionalized) requests, use `location-id` `global`. - // For example, - // `projects/{project-number-or-id}/locations/global/models/general/nmt`. - // - // If missing, the system decides which google base model to use. - string model = 6 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Glossary to be applied. The glossary must be - // within the same region (have the same location-id) as the model, otherwise - // an INVALID_ARGUMENT (400) error is returned. - TranslateTextGlossaryConfig glossary_config = 7 - [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The labels with user-defined metadata for the request. - // - // Label keys and values can be no longer than 63 characters - // (Unicode codepoints), can only contain lowercase letters, numeric - // characters, underscores and dashes. International characters are allowed. - // Label values are optional. Label keys must start with a letter. - // - // See https://cloud.google.com/translate/docs/labels for more information. - map labels = 10 [(google.api.field_behavior) = OPTIONAL]; -} - -message TranslateTextResponse { - // Text translation responses with no glossary applied. - // This field has the same length as - // [`contents`][google.cloud.translation.v3.TranslateTextRequest.contents]. - repeated Translation translations = 1; - - // Text translation responses if a glossary is provided in the request. - // This can be the same as - // [`translations`][google.cloud.translation.v3.TranslateTextResponse.translations] - // if no terms apply. This field has the same length as - // [`contents`][google.cloud.translation.v3.TranslateTextRequest.contents]. - repeated Translation glossary_translations = 3; -} - -// A single translation response. -message Translation { - // Text translated into the target language. - string translated_text = 1; - - // Only present when `model` is present in the request. - // `model` here is normalized to have project number. - // - // For example: - // If the `model` requested in TranslationTextRequest is - // `projects/{project-id}/locations/{location-id}/models/general/nmt` then - // `model` here would be normalized to - // `projects/{project-number}/locations/{location-id}/models/general/nmt`. - string model = 2; - - // The BCP-47 language code of source text in the initial request, detected - // automatically, if no source language was passed within the initial - // request. If the source language was passed, auto-detection of the language - // does not occur and this field is empty. - string detected_language_code = 4; - - // The `glossary_config` used for this translation. - TranslateTextGlossaryConfig glossary_config = 3; -} - -// The request message for language detection. -message DetectLanguageRequest { - // Required. Project or location to make a call. Must refer to a caller's - // project. - // - // Format: `projects/{project-number-or-id}/locations/{location-id}` or - // `projects/{project-number-or-id}`. - // - // For global calls, use `projects/{project-number-or-id}/locations/global` or - // `projects/{project-number-or-id}`. - // - // Only models within the same region (has same location-id) can be used. - // Otherwise an INVALID_ARGUMENT (400) error is returned. - string parent = 5 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. The language detection model to be used. - // - // Format: - // `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}` - // - // Only one language detection model is currently supported: - // `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default`. - // - // If not specified, the default model is used. - string model = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Required. The source of the document from which to detect the language. - oneof source { - // The content of the input stored as a string. - string content = 1; - } - - // Optional. The format of the source text, for example, "text/html", - // "text/plain". If left blank, the MIME type defaults to "text/html". - string mime_type = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The labels with user-defined metadata for the request. - // - // Label keys and values can be no longer than 63 characters - // (Unicode codepoints), can only contain lowercase letters, numeric - // characters, underscores and dashes. International characters are allowed. - // Label values are optional. Label keys must start with a letter. - // - // See https://cloud.google.com/translate/docs/labels for more information. - map labels = 6 [(google.api.field_behavior) = OPTIONAL]; -} - -// The response message for language detection. -message DetectedLanguage { - // The BCP-47 language code of source content in the request, detected - // automatically. - string language_code = 1; - - // The confidence of the detection result for this language. - float confidence = 2; -} - -// The response message for language detection. -message DetectLanguageResponse { - // A list of detected languages sorted by detection confidence in descending - // order. The most probable language first. - repeated DetectedLanguage languages = 1; -} - -// The request message for discovering supported languages. -message GetSupportedLanguagesRequest { - // Required. Project or location to make a call. Must refer to a caller's - // project. - // - // Format: `projects/{project-number-or-id}` or - // `projects/{project-number-or-id}/locations/{location-id}`. - // - // For global calls, use `projects/{project-number-or-id}/locations/global` or - // `projects/{project-number-or-id}`. - // - // Non-global location is required for AutoML models. - // - // Only models within the same region (have same location-id) can be used, - // otherwise an INVALID_ARGUMENT (400) error is returned. - string parent = 3 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. The language to use to return localized, human readable names - // of supported languages. If missing, then display names are not returned - // in a response. - string display_language_code = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Get supported languages of this model. - // - // The format depends on model type: - // - // - AutoML Translation models: - // `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - // - // - General (built-in) models: - // `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, - // `projects/{project-number-or-id}/locations/{location-id}/models/general/base` - // - // - // Returns languages supported by the specified model. - // If missing, we get supported languages of Google general base (PBMT) model. - string model = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// The response message for discovering supported languages. -message SupportedLanguages { - // A list of supported language responses. This list contains an entry - // for each language the Translation API supports. - repeated SupportedLanguage languages = 1; -} - -// A single supported language response corresponds to information related -// to one supported language. -message SupportedLanguage { - // Supported language code, generally consisting of its ISO 639-1 - // identifier, for example, 'en', 'ja'. In certain cases, BCP-47 codes - // including language and region identifiers are returned (for example, - // 'zh-TW' and 'zh-CN') - string language_code = 1; - - // Human readable name of the language localized in the display language - // specified in the request. - string display_name = 2; - - // Can be used as source language. - bool support_source = 3; - - // Can be used as target language. - bool support_target = 4; -} - -// The Google Cloud Storage location for the input content. -message GcsSource { - // Required. Source data URI. For example, `gs://my_bucket/my_object`. - string input_uri = 1; -} - -// Input configuration for BatchTranslateText request. -message InputConfig { - // Optional. Can be "text/plain" or "text/html". - // For `.tsv`, "text/html" is used if mime_type is missing. - // For `.html`, this field must be "text/html" or empty. - // For `.txt`, this field must be "text/plain" or empty. - string mime_type = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Required. Specify the input. - oneof source { - // Required. Google Cloud Storage location for the source input. - // This can be a single file (for example, - // `gs://translation-test/input.tsv`) or a wildcard (for example, - // `gs://translation-test/*`). If a file extension is `.tsv`, it can - // contain either one or two columns. The first column (optional) is the id - // of the text request. If the first column is missing, we use the row - // number (0-based) from the input file as the ID in the output file. The - // second column is the actual text to be - // translated. We recommend each row be <= 10K Unicode codepoints, - // otherwise an error might be returned. - // Note that the input tsv must be RFC 4180 compliant. - // - // You could use https://github.com/Clever/csvlint to check potential - // formatting errors in your tsv file. - // csvlint --delimiter='\t' your_input_file.tsv - // - // The other supported file extensions are `.txt` or `.html`, which is - // treated as a single large chunk of text. - GcsSource gcs_source = 2; - } -} - -// The Google Cloud Storage location for the output content. -message GcsDestination { - // Required. There must be no files under 'output_uri_prefix'. - // 'output_uri_prefix' must end with "/" and start with "gs://", otherwise an - // INVALID_ARGUMENT (400) error is returned. - string output_uri_prefix = 1; -} - -// Output configuration for BatchTranslateText request. -message OutputConfig { - // Required. The destination of output. - oneof destination { - // Google Cloud Storage destination for output content. - // For every single input file (for example, gs://a/b/c.[extension]), we - // generate at most 2 * n output files. (n is the # of target_language_codes - // in the BatchTranslateTextRequest). - // - // Output files (tsv) generated are compliant with RFC 4180 except that - // record delimiters are '\n' instead of '\r\n'. We don't provide any way to - // change record delimiters. - // - // While the input files are being processed, we write/update an index file - // 'index.csv' under 'output_uri_prefix' (for example, - // gs://translation-test/index.csv) The index file is generated/updated as - // new files are being translated. The format is: - // - // input_file,target_language_code,translations_file,errors_file, - // glossary_translations_file,glossary_errors_file - // - // input_file is one file we matched using gcs_source.input_uri. - // target_language_code is provided in the request. - // translations_file contains the translations. (details provided below) - // errors_file contains the errors during processing of the file. (details - // below). Both translations_file and errors_file could be empty - // strings if we have no content to output. - // glossary_translations_file and glossary_errors_file are always empty - // strings if the input_file is tsv. They could also be empty if we have no - // content to output. - // - // Once a row is present in index.csv, the input/output matching never - // changes. Callers should also expect all the content in input_file are - // processed and ready to be consumed (that is, no partial output file is - // written). - // - // The format of translations_file (for target language code 'trg') is: - // gs://translation_test/a_b_c_'trg'_translations.[extension] - // - // If the input file extension is tsv, the output has the following - // columns: - // Column 1: ID of the request provided in the input, if it's not - // provided in the input, then the input row number is used (0-based). - // Column 2: source sentence. - // Column 3: translation without applying a glossary. Empty string if there - // is an error. - // Column 4 (only present if a glossary is provided in the request): - // translation after applying the glossary. Empty string if there is an - // error applying the glossary. Could be same string as column 3 if there is - // no glossary applied. - // - // If input file extension is a txt or html, the translation is directly - // written to the output file. If glossary is requested, a separate - // glossary_translations_file has format of - // gs://translation_test/a_b_c_'trg'_glossary_translations.[extension] - // - // The format of errors file (for target language code 'trg') is: - // gs://translation_test/a_b_c_'trg'_errors.[extension] - // - // If the input file extension is tsv, errors_file contains the following: - // Column 1: ID of the request provided in the input, if it's not - // provided in the input, then the input row number is used (0-based). - // Column 2: source sentence. - // Column 3: Error detail for the translation. Could be empty. - // Column 4 (only present if a glossary is provided in the request): - // Error when applying the glossary. - // - // If the input file extension is txt or html, glossary_error_file will be - // generated that contains error details. glossary_error_file has format of - // gs://translation_test/a_b_c_'trg'_glossary_errors.[extension] - GcsDestination gcs_destination = 1; - } -} - -// The batch translation request. -message BatchTranslateTextRequest { - // Required. Location to make a call. Must refer to a caller's project. - // - // Format: `projects/{project-number-or-id}/locations/{location-id}`. - // - // The `global` location is not supported for batch translation. - // - // Only AutoML Translation models or glossaries within the same region (have - // the same location-id) can be used, otherwise an INVALID_ARGUMENT (400) - // error is returned. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Required. Source language code. - string source_language_code = 2 [(google.api.field_behavior) = REQUIRED]; - - // Required. Specify up to 10 language codes here. - repeated string target_language_codes = 3 - [(google.api.field_behavior) = REQUIRED]; - - // Optional. The models to use for translation. Map's key is target language - // code. Map's value is model name. Value can be a built-in general model, - // or an AutoML Translation model. - // - // The value format depends on model type: - // - // - AutoML Translation models: - // `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - // - // - General (built-in) models: - // `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, - // `projects/{project-number-or-id}/locations/{location-id}/models/general/base` - // - // - // If the map is empty or a specific model is - // not requested for a language pair, then default google model (nmt) is used. - map models = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Required. Input configurations. - // The total number of files matched should be <= 1000. - // The total content size should be <= 100M Unicode codepoints. - // The files must use UTF-8 encoding. - repeated InputConfig input_configs = 5 - [(google.api.field_behavior) = REQUIRED]; - - // Required. Output configuration. - // If 2 input configs match to the same file (that is, same input path), - // we don't generate output for duplicate inputs. - OutputConfig output_config = 6 [(google.api.field_behavior) = REQUIRED]; - - // Optional. Glossaries to be applied for translation. - // It's keyed by target language code. - map glossaries = 7 - [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The labels with user-defined metadata for the request. - // - // Label keys and values can be no longer than 63 characters - // (Unicode codepoints), can only contain lowercase letters, numeric - // characters, underscores and dashes. International characters are allowed. - // Label values are optional. Label keys must start with a letter. - // - // See https://cloud.google.com/translate/docs/labels for more information. - map labels = 9 [(google.api.field_behavior) = OPTIONAL]; -} - -// State metadata for the batch translation operation. -message BatchTranslateMetadata { - // State of the job. - enum State { - // Invalid. - STATE_UNSPECIFIED = 0; - - // Request is being processed. - RUNNING = 1; - - // The batch is processed, and at least one item was successfully - // processed. - SUCCEEDED = 2; - - // The batch is done and no item was successfully processed. - FAILED = 3; - - // Request is in the process of being canceled after caller invoked - // longrunning.Operations.CancelOperation on the request id. - CANCELLING = 4; - - // The batch is done after the user has called the - // longrunning.Operations.CancelOperation. Any records processed before the - // cancel command are output as specified in the request. - CANCELLED = 5; - } - - // The state of the operation. - State state = 1; - - // Number of successfully translated characters so far (Unicode codepoints). - int64 translated_characters = 2; - - // Number of characters that have failed to process so far (Unicode - // codepoints). - int64 failed_characters = 3; - - // Total number of characters (Unicode codepoints). - // This is the total number of codepoints from input files times the number of - // target languages and appears here shortly after the call is submitted. - int64 total_characters = 4; - - // Time when the operation was submitted. - google.protobuf.Timestamp submit_time = 5; -} - -// Stored in the -// [google.longrunning.Operation.response][google.longrunning.Operation.response] -// field returned by BatchTranslateText if at least one sentence is translated -// successfully. -message BatchTranslateResponse { - // Total number of characters (Unicode codepoints). - int64 total_characters = 1; - - // Number of successfully translated characters (Unicode codepoints). - int64 translated_characters = 2; - - // Number of characters that have failed to process (Unicode codepoints). - int64 failed_characters = 3; - - // Time when the operation was submitted. - google.protobuf.Timestamp submit_time = 4; - - // The time when the operation is finished and - // [google.longrunning.Operation.done][google.longrunning.Operation.done] is - // set to true. - google.protobuf.Timestamp end_time = 5; -} - -// Input configuration for glossaries. -message GlossaryInputConfig { - // Required. Specify the input. - oneof source { - // Required. Google Cloud Storage location of glossary data. - // File format is determined based on the filename extension. API returns - // [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file - // formats. Wildcards are not allowed. This must be a single file in one of - // the following formats: - // - // For unidirectional glossaries: - // - // - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated. - // The first column is source text. The second column is target text. - // The file must not contain headers. That is, the first row is data, not - // column names. - // - // - TMX (`.tmx`): TMX file with parallel data defining source/target term - // pairs. - // - // For equivalent term sets glossaries: - // - // - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms - // in multiple languages. The format is defined for Google Translation - // Toolkit and documented in [Use a - // glossary](https://support.google.com/translatortoolkit/answer/6306379?hl=en). - GcsSource gcs_source = 1; - } -} - -// Represents a glossary built from user provided data. -message Glossary { - option (google.api.resource) = { - type: "translate.googleapis.com/Glossary" - pattern: "projects/{project}/locations/{location}/glossaries/{glossary}" - }; - - // Used with unidirectional glossaries. - message LanguageCodePair { - // Required. The BCP-47 language code of the input text, for example, - // "en-US". Expected to be an exact match for GlossaryTerm.language_code. - string source_language_code = 1; - - // Required. The BCP-47 language code for translation output, for example, - // "zh-CN". Expected to be an exact match for GlossaryTerm.language_code. - string target_language_code = 2; - } - - // Used with equivalent term set glossaries. - message LanguageCodesSet { - // The BCP-47 language code(s) for terms defined in the glossary. - // All entries are unique. The list contains at least two entries. - // Expected to be an exact match for GlossaryTerm.language_code. - repeated string language_codes = 1; - } - - // Required. The resource name of the glossary. Glossary names have the form - // `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`. - string name = 1; - - // Languages supported by the glossary. - oneof languages { - // Used with unidirectional glossaries. - LanguageCodePair language_pair = 3; - - // Used with equivalent term set glossaries. - LanguageCodesSet language_codes_set = 4; - } - - // Required. Provides examples to build the glossary from. - // Total glossary must not exceed 10M Unicode codepoints. - GlossaryInputConfig input_config = 5; - - // Output only. The number of entries defined in the glossary. - int32 entry_count = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. When CreateGlossary was called. - google.protobuf.Timestamp submit_time = 7 - [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. When the glossary creation was finished. - google.protobuf.Timestamp end_time = 8 - [(google.api.field_behavior) = OUTPUT_ONLY]; -} - -// Request message for CreateGlossary. -message CreateGlossaryRequest { - // Required. The project name. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Required. The glossary to create. - Glossary glossary = 2 [(google.api.field_behavior) = REQUIRED]; -} - -// Request message for GetGlossary. -message GetGlossaryRequest { - // Required. The name of the glossary to retrieve. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "translate.googleapis.com/Glossary" - } - ]; -} - -// Request message for DeleteGlossary. -message DeleteGlossaryRequest { - // Required. The name of the glossary to delete. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "translate.googleapis.com/Glossary" - } - ]; -} - -// Request message for ListGlossaries. -message ListGlossariesRequest { - // Required. The name of the project from which to list all of the glossaries. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. Requested page size. The server may return fewer glossaries than - // requested. If unspecified, the server picks an appropriate default. - int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A token identifying a page of results the server should return. - // Typically, this is the value of [ListGlossariesResponse.next_page_token] - // returned from the previous call to `ListGlossaries` method. - // The first page is returned if `page_token`is empty or missing. - string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Filter specifying constraints of a list operation. - // Filtering is not supported yet, and the parameter currently has no effect. - // If missing, no filtering is performed. - string filter = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -// Response message for ListGlossaries. -message ListGlossariesResponse { - // The list of glossaries for a project. - repeated Glossary glossaries = 1; - - // A token to retrieve a page of results. Pass this value in the - // [ListGlossariesRequest.page_token] field in the subsequent call to - // `ListGlossaries` method to retrieve the next page of results. - string next_page_token = 2; -} - -// Stored in the -// [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata] -// field returned by CreateGlossary. -message CreateGlossaryMetadata { - // Enumerates the possible states that the creation request can be in. - enum State { - // Invalid. - STATE_UNSPECIFIED = 0; - - // Request is being processed. - RUNNING = 1; - - // The glossary was successfully created. - SUCCEEDED = 2; - - // Failed to create the glossary. - FAILED = 3; - - // Request is in the process of being canceled after caller invoked - // longrunning.Operations.CancelOperation on the request id. - CANCELLING = 4; - - // The glossary creation request was successfully canceled. - CANCELLED = 5; - } - - // The name of the glossary that is being created. - string name = 1; - - // The current state of the glossary creation operation. - State state = 2; - - // The time when the operation was submitted to the server. - google.protobuf.Timestamp submit_time = 3; -} - -// Stored in the -// [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata] -// field returned by DeleteGlossary. -message DeleteGlossaryMetadata { - // Enumerates the possible states that the creation request can be in. - enum State { - // Invalid. - STATE_UNSPECIFIED = 0; - - // Request is being processed. - RUNNING = 1; - - // The glossary was successfully deleted. - SUCCEEDED = 2; - - // Failed to delete the glossary. - FAILED = 3; - - // Request is in the process of being canceled after caller invoked - // longrunning.Operations.CancelOperation on the request id. - CANCELLING = 4; - - // The glossary deletion request was successfully canceled. - CANCELLED = 5; - } - - // The name of the glossary that is being deleted. - string name = 1; - - // The current state of the glossary deletion operation. - State state = 2; - - // The time when the operation was submitted to the server. - google.protobuf.Timestamp submit_time = 3; -} - -// Stored in the -// [google.longrunning.Operation.response][google.longrunning.Operation.response] -// field returned by DeleteGlossary. -message DeleteGlossaryResponse { - // The name of the deleted glossary. - string name = 1; - - // The time when the operation was submitted to the server. - google.protobuf.Timestamp submit_time = 2; - - // The time when the glossary deletion is finished and - // [google.longrunning.Operation.done][google.longrunning.Operation.done] is - // set to true. - google.protobuf.Timestamp end_time = 3; -} diff --git a/google/cloud/translate_v3/proto/translation_service_pb2.py b/google/cloud/translate_v3/proto/translation_service_pb2.py deleted file mode 100644 index 3ca7286d..00000000 --- a/google/cloud/translate_v3/proto/translation_service_pb2.py +++ /dev/null @@ -1,4050 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/translate_v3/proto/translation_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.longrunning import ( - operations_pb2 as google_dot_longrunning_dot_operations__pb2, -) -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="google/cloud/translate_v3/proto/translation_service.proto", - package="google.cloud.translation.v3", - syntax="proto3", - serialized_options=b"\n\035com.google.cloud.translate.v3B\027TranslationServiceProtoP\001ZBgoogle.golang.org/genproto/googleapis/cloud/translate/v3;translate\370\001\001\252\002\031Google.Cloud.Translate.V3\312\002\031Google\\Cloud\\Translate\\V3\352\002\034Google::Cloud::Translate::V3", - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n9google/cloud/translate_v3/proto/translation_service.proto\x12\x1bgoogle.cloud.translation.v3\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a#google/longrunning/operations.proto\x1a\x1fgoogle/protobuf/timestamp.proto"N\n\x1bTranslateTextGlossaryConfig\x12\x15\n\x08glossary\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x18\n\x0bignore_case\x18\x02 \x01(\x08\x42\x03\xe0\x41\x01"\xb5\x03\n\x14TranslateTextRequest\x12\x15\n\x08\x63ontents\x18\x01 \x03(\tB\x03\xe0\x41\x02\x12\x16\n\tmime_type\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12!\n\x14source_language_code\x18\x04 \x01(\tB\x03\xe0\x41\x01\x12!\n\x14target_language_code\x18\x05 \x01(\tB\x03\xe0\x41\x02\x12\x39\n\x06parent\x18\x08 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x12\n\x05model\x18\x06 \x01(\tB\x03\xe0\x41\x01\x12V\n\x0fglossary_config\x18\x07 \x01(\x0b\x32\x38.google.cloud.translation.v3.TranslateTextGlossaryConfigB\x03\xe0\x41\x01\x12R\n\x06labels\x18\n \x03(\x0b\x32=.google.cloud.translation.v3.TranslateTextRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\xa0\x01\n\x15TranslateTextResponse\x12>\n\x0ctranslations\x18\x01 \x03(\x0b\x32(.google.cloud.translation.v3.Translation\x12G\n\x15glossary_translations\x18\x03 \x03(\x0b\x32(.google.cloud.translation.v3.Translation"\xa8\x01\n\x0bTranslation\x12\x17\n\x0ftranslated_text\x18\x01 \x01(\t\x12\r\n\x05model\x18\x02 \x01(\t\x12\x1e\n\x16\x64\x65tected_language_code\x18\x04 \x01(\t\x12Q\n\x0fglossary_config\x18\x03 \x01(\x0b\x32\x38.google.cloud.translation.v3.TranslateTextGlossaryConfig"\x9f\x02\n\x15\x44\x65tectLanguageRequest\x12\x39\n\x06parent\x18\x05 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x12\n\x05model\x18\x04 \x01(\tB\x03\xe0\x41\x01\x12\x11\n\x07\x63ontent\x18\x01 \x01(\tH\x00\x12\x16\n\tmime_type\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12S\n\x06labels\x18\x06 \x03(\x0b\x32>.google.cloud.translation.v3.DetectLanguageRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06source"=\n\x10\x44\x65tectedLanguage\x12\x15\n\rlanguage_code\x18\x01 \x01(\t\x12\x12\n\nconfidence\x18\x02 \x01(\x02"Z\n\x16\x44\x65tectLanguageResponse\x12@\n\tlanguages\x18\x01 \x03(\x0b\x32-.google.cloud.translation.v3.DetectedLanguage"\x91\x01\n\x1cGetSupportedLanguagesRequest\x12\x39\n\x06parent\x18\x03 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12"\n\x15\x64isplay_language_code\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12\x12\n\x05model\x18\x02 \x01(\tB\x03\xe0\x41\x01"W\n\x12SupportedLanguages\x12\x41\n\tlanguages\x18\x01 \x03(\x0b\x32..google.cloud.translation.v3.SupportedLanguage"p\n\x11SupportedLanguage\x12\x15\n\rlanguage_code\x18\x01 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x02 \x01(\t\x12\x16\n\x0esupport_source\x18\x03 \x01(\x08\x12\x16\n\x0esupport_target\x18\x04 \x01(\x08"\x1e\n\tGcsSource\x12\x11\n\tinput_uri\x18\x01 \x01(\t"m\n\x0bInputConfig\x12\x16\n\tmime_type\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12<\n\ngcs_source\x18\x02 \x01(\x0b\x32&.google.cloud.translation.v3.GcsSourceH\x00\x42\x08\n\x06source"+\n\x0eGcsDestination\x12\x19\n\x11output_uri_prefix\x18\x01 \x01(\t"e\n\x0cOutputConfig\x12\x46\n\x0fgcs_destination\x18\x01 \x01(\x0b\x32+.google.cloud.translation.v3.GcsDestinationH\x00\x42\r\n\x0b\x64\x65stination"\x88\x06\n\x19\x42\x61tchTranslateTextRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12!\n\x14source_language_code\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12"\n\x15target_language_codes\x18\x03 \x03(\tB\x03\xe0\x41\x02\x12W\n\x06models\x18\x04 \x03(\x0b\x32\x42.google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntryB\x03\xe0\x41\x01\x12\x44\n\rinput_configs\x18\x05 \x03(\x0b\x32(.google.cloud.translation.v3.InputConfigB\x03\xe0\x41\x02\x12\x45\n\routput_config\x18\x06 \x01(\x0b\x32).google.cloud.translation.v3.OutputConfigB\x03\xe0\x41\x02\x12_\n\nglossaries\x18\x07 \x03(\x0b\x32\x46.google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntryB\x03\xe0\x41\x01\x12W\n\x06labels\x18\t \x03(\x0b\x32\x42.google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bModelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1ak\n\x0fGlossariesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12G\n\x05value\x18\x02 \x01(\x0b\x32\x38.google.cloud.translation.v3.TranslateTextGlossaryConfig:\x02\x38\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\xce\x02\n\x16\x42\x61tchTranslateMetadata\x12H\n\x05state\x18\x01 \x01(\x0e\x32\x39.google.cloud.translation.v3.BatchTranslateMetadata.State\x12\x1d\n\x15translated_characters\x18\x02 \x01(\x03\x12\x19\n\x11\x66\x61iled_characters\x18\x03 \x01(\x03\x12\x18\n\x10total_characters\x18\x04 \x01(\x03\x12/\n\x0bsubmit_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\xcb\x01\n\x16\x42\x61tchTranslateResponse\x12\x18\n\x10total_characters\x18\x01 \x01(\x03\x12\x1d\n\x15translated_characters\x18\x02 \x01(\x03\x12\x19\n\x11\x66\x61iled_characters\x18\x03 \x01(\x03\x12/\n\x0bsubmit_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"]\n\x13GlossaryInputConfig\x12<\n\ngcs_source\x18\x01 \x01(\x0b\x32&.google.cloud.translation.v3.GcsSourceH\x00\x42\x08\n\x06source"\xfa\x04\n\x08Glossary\x12\x0c\n\x04name\x18\x01 \x01(\t\x12O\n\rlanguage_pair\x18\x03 \x01(\x0b\x32\x36.google.cloud.translation.v3.Glossary.LanguageCodePairH\x00\x12T\n\x12language_codes_set\x18\x04 \x01(\x0b\x32\x36.google.cloud.translation.v3.Glossary.LanguageCodesSetH\x00\x12\x46\n\x0cinput_config\x18\x05 \x01(\x0b\x32\x30.google.cloud.translation.v3.GlossaryInputConfig\x12\x18\n\x0b\x65ntry_count\x18\x06 \x01(\x05\x42\x03\xe0\x41\x03\x12\x34\n\x0bsubmit_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x31\n\x08\x65nd_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x1aN\n\x10LanguageCodePair\x12\x1c\n\x14source_language_code\x18\x01 \x01(\t\x12\x1c\n\x14target_language_code\x18\x02 \x01(\t\x1a*\n\x10LanguageCodesSet\x12\x16\n\x0elanguage_codes\x18\x01 \x03(\t:e\xea\x41\x62\n!translate.googleapis.com/Glossary\x12=projects/{project}/locations/{location}/glossaries/{glossary}B\x0b\n\tlanguages"\x90\x01\n\x15\x43reateGlossaryRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12<\n\x08glossary\x18\x02 \x01(\x0b\x32%.google.cloud.translation.v3.GlossaryB\x03\xe0\x41\x02"M\n\x12GetGlossaryRequest\x12\x37\n\x04name\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!translate.googleapis.com/Glossary"P\n\x15\x44\x65leteGlossaryRequest\x12\x37\n\x04name\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!translate.googleapis.com/Glossary"\x98\x01\n\x15ListGlossariesRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x16\n\tpage_size\x18\x02 \x01(\x05\x42\x03\xe0\x41\x01\x12\x17\n\npage_token\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12\x13\n\x06\x66ilter\x18\x04 \x01(\tB\x03\xe0\x41\x01"l\n\x16ListGlossariesResponse\x12\x39\n\nglossaries\x18\x01 \x03(\x0b\x32%.google.cloud.translation.v3.Glossary\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t"\x88\x02\n\x16\x43reateGlossaryMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12H\n\x05state\x18\x02 \x01(\x0e\x32\x39.google.cloud.translation.v3.CreateGlossaryMetadata.State\x12/\n\x0bsubmit_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\x88\x02\n\x16\x44\x65leteGlossaryMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12H\n\x05state\x18\x02 \x01(\x0e\x32\x39.google.cloud.translation.v3.DeleteGlossaryMetadata.State\x12/\n\x0bsubmit_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\x85\x01\n\x16\x44\x65leteGlossaryResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\x0bsubmit_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp2\x8e\x10\n\x12TranslationService\x12\xd4\x02\n\rTranslateText\x12\x31.google.cloud.translation.v3.TranslateTextRequest\x1a\x32.google.cloud.translation.v3.TranslateTextResponse"\xdb\x01\x82\xd3\xe4\x93\x02\x62"1/v3/{parent=projects/*/locations/*}:translateText:\x01*Z*"%/v3/{parent=projects/*}:translateText:\x01*\xda\x41$parent,target_language_code,contents\xda\x41Iparent,model,mime_type,source_language_code,target_language_code,contents\x12\x87\x02\n\x0e\x44\x65tectLanguage\x12\x32.google.cloud.translation.v3.DetectLanguageRequest\x1a\x33.google.cloud.translation.v3.DetectLanguageResponse"\x8b\x01\x82\xd3\xe4\x93\x02\x64"2/v3/{parent=projects/*/locations/*}:detectLanguage:\x01*Z+"&/v3/{parent=projects/*}:detectLanguage:\x01*\xda\x41\x1eparent,model,mime_type,content\x12\x97\x02\n\x15GetSupportedLanguages\x12\x39.google.cloud.translation.v3.GetSupportedLanguagesRequest\x1a/.google.cloud.translation.v3.SupportedLanguages"\x91\x01\x82\xd3\xe4\x93\x02\x66\x12\x36/v3/{parent=projects/*/locations/*}/supportedLanguagesZ,\x12*/v3/{parent=projects/*}/supportedLanguages\xda\x41"parent,model,display_language_code\x12\xe1\x01\n\x12\x42\x61tchTranslateText\x12\x36.google.cloud.translation.v3.BatchTranslateTextRequest\x1a\x1d.google.longrunning.Operation"t\x82\xd3\xe4\x93\x02;"6/v3/{parent=projects/*/locations/*}:batchTranslateText:\x01*\xca\x41\x30\n\x16\x42\x61tchTranslateResponse\x12\x16\x42\x61tchTranslateMetadata\x12\xdc\x01\n\x0e\x43reateGlossary\x12\x32.google.cloud.translation.v3.CreateGlossaryRequest\x1a\x1d.google.longrunning.Operation"w\x82\xd3\xe4\x93\x02:"./v3/{parent=projects/*/locations/*}/glossaries:\x08glossary\xda\x41\x0fparent,glossary\xca\x41"\n\x08Glossary\x12\x16\x43reateGlossaryMetadata\x12\xba\x01\n\x0eListGlossaries\x12\x32.google.cloud.translation.v3.ListGlossariesRequest\x1a\x33.google.cloud.translation.v3.ListGlossariesResponse"?\x82\xd3\xe4\x93\x02\x30\x12./v3/{parent=projects/*/locations/*}/glossaries\xda\x41\x06parent\x12\xa4\x01\n\x0bGetGlossary\x12/.google.cloud.translation.v3.GetGlossaryRequest\x1a%.google.cloud.translation.v3.Glossary"=\x82\xd3\xe4\x93\x02\x30\x12./v3/{name=projects/*/locations/*/glossaries/*}\xda\x41\x04name\x12\xd5\x01\n\x0e\x44\x65leteGlossary\x12\x32.google.cloud.translation.v3.DeleteGlossaryRequest\x1a\x1d.google.longrunning.Operation"p\x82\xd3\xe4\x93\x02\x30*./v3/{name=projects/*/locations/*/glossaries/*}\xda\x41\x04name\xca\x41\x30\n\x16\x44\x65leteGlossaryResponse\x12\x16\x44\x65leteGlossaryMetadata\x1a~\xca\x41\x18translate.googleapis.com\xd2\x41`https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translationB\xd8\x01\n\x1d\x63om.google.cloud.translate.v3B\x17TranslationServiceProtoP\x01ZBgoogle.golang.org/genproto/googleapis/cloud/translate/v3;translate\xf8\x01\x01\xaa\x02\x19Google.Cloud.Translate.V3\xca\x02\x19Google\\Cloud\\Translate\\V3\xea\x02\x1cGoogle::Cloud::Translate::V3b\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_longrunning_dot_operations__pb2.DESCRIPTOR, - google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, - ], -) - - -_BATCHTRANSLATEMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3229, - serialized_end=3330, -) -_sym_db.RegisterEnumDescriptor(_BATCHTRANSLATEMETADATA_STATE) - -_CREATEGLOSSARYMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3229, - serialized_end=3330, -) -_sym_db.RegisterEnumDescriptor(_CREATEGLOSSARYMETADATA_STATE) - -_DELETEGLOSSARYMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3229, - serialized_end=3330, -) -_sym_db.RegisterEnumDescriptor(_DELETEGLOSSARYMETADATA_STATE) - - -_TRANSLATETEXTGLOSSARYCONFIG = _descriptor.Descriptor( - name="TranslateTextGlossaryConfig", - full_name="google.cloud.translation.v3.TranslateTextGlossaryConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="glossary", - full_name="google.cloud.translation.v3.TranslateTextGlossaryConfig.glossary", - 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", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="ignore_case", - full_name="google.cloud.translation.v3.TranslateTextGlossaryConfig.ignore_case", - index=1, - number=2, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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=275, - serialized_end=353, -) - - -_TRANSLATETEXTREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3.TranslateTextRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.TranslateTextRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3.TranslateTextRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=748, - serialized_end=793, -) - -_TRANSLATETEXTREQUEST = _descriptor.Descriptor( - name="TranslateTextRequest", - full_name="google.cloud.translation.v3.TranslateTextRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="contents", - full_name="google.cloud.translation.v3.TranslateTextRequest.contents", - index=0, - number=1, - 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\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="mime_type", - full_name="google.cloud.translation.v3.TranslateTextRequest.mime_type", - 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="source_language_code", - full_name="google.cloud.translation.v3.TranslateTextRequest.source_language_code", - 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, - ), - _descriptor.FieldDescriptor( - name="target_language_code", - full_name="google.cloud.translation.v3.TranslateTextRequest.target_language_code", - index=3, - number=5, - 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="parent", - full_name="google.cloud.translation.v3.TranslateTextRequest.parent", - index=4, - number=8, - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3.TranslateTextRequest.model", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossary_config", - full_name="google.cloud.translation.v3.TranslateTextRequest.glossary_config", - index=6, - number=7, - 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="labels", - full_name="google.cloud.translation.v3.TranslateTextRequest.labels", - index=7, - number=10, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_TRANSLATETEXTREQUEST_LABELSENTRY,], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=356, - serialized_end=793, -) - - -_TRANSLATETEXTRESPONSE = _descriptor.Descriptor( - name="TranslateTextResponse", - full_name="google.cloud.translation.v3.TranslateTextResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="translations", - full_name="google.cloud.translation.v3.TranslateTextResponse.translations", - 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="glossary_translations", - full_name="google.cloud.translation.v3.TranslateTextResponse.glossary_translations", - index=1, - 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=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=796, - serialized_end=956, -) - - -_TRANSLATION = _descriptor.Descriptor( - name="Translation", - full_name="google.cloud.translation.v3.Translation", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="translated_text", - full_name="google.cloud.translation.v3.Translation.translated_text", - 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="model", - full_name="google.cloud.translation.v3.Translation.model", - 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="detected_language_code", - full_name="google.cloud.translation.v3.Translation.detected_language_code", - 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, - ), - _descriptor.FieldDescriptor( - name="glossary_config", - full_name="google.cloud.translation.v3.Translation.glossary_config", - index=3, - 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=959, - serialized_end=1127, -) - - -_DETECTLANGUAGEREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3.DetectLanguageRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.DetectLanguageRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3.DetectLanguageRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=748, - serialized_end=793, -) - -_DETECTLANGUAGEREQUEST = _descriptor.Descriptor( - name="DetectLanguageRequest", - full_name="google.cloud.translation.v3.DetectLanguageRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.DetectLanguageRequest.parent", - index=0, - number=5, - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3.DetectLanguageRequest.model", - index=1, - 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, - ), - _descriptor.FieldDescriptor( - name="content", - full_name="google.cloud.translation.v3.DetectLanguageRequest.content", - index=2, - 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="mime_type", - full_name="google.cloud.translation.v3.DetectLanguageRequest.mime_type", - index=3, - 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="labels", - full_name="google.cloud.translation.v3.DetectLanguageRequest.labels", - index=4, - number=6, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_DETECTLANGUAGEREQUEST_LABELSENTRY,], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3.DetectLanguageRequest.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=1130, - serialized_end=1417, -) - - -_DETECTEDLANGUAGE = _descriptor.Descriptor( - name="DetectedLanguage", - full_name="google.cloud.translation.v3.DetectedLanguage", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_code", - full_name="google.cloud.translation.v3.DetectedLanguage.language_code", - 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="confidence", - full_name="google.cloud.translation.v3.DetectedLanguage.confidence", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(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=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1419, - serialized_end=1480, -) - - -_DETECTLANGUAGERESPONSE = _descriptor.Descriptor( - name="DetectLanguageResponse", - full_name="google.cloud.translation.v3.DetectLanguageResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="languages", - full_name="google.cloud.translation.v3.DetectLanguageResponse.languages", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1482, - serialized_end=1572, -) - - -_GETSUPPORTEDLANGUAGESREQUEST = _descriptor.Descriptor( - name="GetSupportedLanguagesRequest", - full_name="google.cloud.translation.v3.GetSupportedLanguagesRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.GetSupportedLanguagesRequest.parent", - index=0, - 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\372A#\n!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="display_language_code", - full_name="google.cloud.translation.v3.GetSupportedLanguagesRequest.display_language_code", - index=1, - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3.GetSupportedLanguagesRequest.model", - index=2, - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1575, - serialized_end=1720, -) - - -_SUPPORTEDLANGUAGES = _descriptor.Descriptor( - name="SupportedLanguages", - full_name="google.cloud.translation.v3.SupportedLanguages", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="languages", - full_name="google.cloud.translation.v3.SupportedLanguages.languages", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1722, - serialized_end=1809, -) - - -_SUPPORTEDLANGUAGE = _descriptor.Descriptor( - name="SupportedLanguage", - full_name="google.cloud.translation.v3.SupportedLanguage", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_code", - full_name="google.cloud.translation.v3.SupportedLanguage.language_code", - 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="display_name", - full_name="google.cloud.translation.v3.SupportedLanguage.display_name", - 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="support_source", - full_name="google.cloud.translation.v3.SupportedLanguage.support_source", - index=2, - number=3, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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="support_target", - full_name="google.cloud.translation.v3.SupportedLanguage.support_target", - index=3, - number=4, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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=1811, - serialized_end=1923, -) - - -_GCSSOURCE = _descriptor.Descriptor( - name="GcsSource", - full_name="google.cloud.translation.v3.GcsSource", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="input_uri", - full_name="google.cloud.translation.v3.GcsSource.input_uri", - 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=1925, - serialized_end=1955, -) - - -_INPUTCONFIG = _descriptor.Descriptor( - name="InputConfig", - full_name="google.cloud.translation.v3.InputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="mime_type", - full_name="google.cloud.translation.v3.InputConfig.mime_type", - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="gcs_source", - full_name="google.cloud.translation.v3.InputConfig.gcs_source", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3.InputConfig.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=1957, - serialized_end=2066, -) - - -_GCSDESTINATION = _descriptor.Descriptor( - name="GcsDestination", - full_name="google.cloud.translation.v3.GcsDestination", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="output_uri_prefix", - full_name="google.cloud.translation.v3.GcsDestination.output_uri_prefix", - 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=2068, - serialized_end=2111, -) - - -_OUTPUTCONFIG = _descriptor.Descriptor( - name="OutputConfig", - full_name="google.cloud.translation.v3.OutputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="gcs_destination", - full_name="google.cloud.translation.v3.OutputConfig.gcs_destination", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="destination", - full_name="google.cloud.translation.v3.OutputConfig.destination", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=2113, - serialized_end=2214, -) - - -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY = _descriptor.Descriptor( - name="ModelsEntry", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2792, - serialized_end=2837, -) - -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY = _descriptor.Descriptor( - name="GlossariesEntry", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntry.key", - 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="value", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2839, - serialized_end=2946, -) - -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=748, - serialized_end=793, -) - -_BATCHTRANSLATETEXTREQUEST = _descriptor.Descriptor( - name="BatchTranslateTextRequest", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="source_language_code", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.source_language_code", - 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="target_language_codes", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.target_language_codes", - index=2, - number=3, - 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\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="models", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.models", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="input_configs", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.input_configs", - index=4, - number=5, - 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=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="output_config", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.output_config", - 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=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossaries", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.glossaries", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="labels", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.labels", - index=7, - number=9, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[ - _BATCHTRANSLATETEXTREQUEST_MODELSENTRY, - _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY, - _BATCHTRANSLATETEXTREQUEST_LABELSENTRY, - ], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2217, - serialized_end=2993, -) - - -_BATCHTRANSLATEMETADATA = _descriptor.Descriptor( - name="BatchTranslateMetadata", - full_name="google.cloud.translation.v3.BatchTranslateMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="state", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.state", - 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, - ), - _descriptor.FieldDescriptor( - name="translated_characters", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.translated_characters", - 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="failed_characters", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.failed_characters", - 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="total_characters", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.total_characters", - index=3, - number=4, - 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="submit_time", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.submit_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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[_BATCHTRANSLATEMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2996, - serialized_end=3330, -) - - -_BATCHTRANSLATERESPONSE = _descriptor.Descriptor( - name="BatchTranslateResponse", - full_name="google.cloud.translation.v3.BatchTranslateResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="total_characters", - full_name="google.cloud.translation.v3.BatchTranslateResponse.total_characters", - 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="translated_characters", - full_name="google.cloud.translation.v3.BatchTranslateResponse.translated_characters", - 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="failed_characters", - full_name="google.cloud.translation.v3.BatchTranslateResponse.failed_characters", - 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="submit_time", - full_name="google.cloud.translation.v3.BatchTranslateResponse.submit_time", - 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=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.cloud.translation.v3.BatchTranslateResponse.end_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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=3333, - serialized_end=3536, -) - - -_GLOSSARYINPUTCONFIG = _descriptor.Descriptor( - name="GlossaryInputConfig", - full_name="google.cloud.translation.v3.GlossaryInputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="gcs_source", - full_name="google.cloud.translation.v3.GlossaryInputConfig.gcs_source", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3.GlossaryInputConfig.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=3538, - serialized_end=3631, -) - - -_GLOSSARY_LANGUAGECODEPAIR = _descriptor.Descriptor( - name="LanguageCodePair", - full_name="google.cloud.translation.v3.Glossary.LanguageCodePair", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="source_language_code", - full_name="google.cloud.translation.v3.Glossary.LanguageCodePair.source_language_code", - 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="target_language_code", - full_name="google.cloud.translation.v3.Glossary.LanguageCodePair.target_language_code", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4030, - serialized_end=4108, -) - -_GLOSSARY_LANGUAGECODESSET = _descriptor.Descriptor( - name="LanguageCodesSet", - full_name="google.cloud.translation.v3.Glossary.LanguageCodesSet", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_codes", - full_name="google.cloud.translation.v3.Glossary.LanguageCodesSet.language_codes", - index=0, - number=1, - 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=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=4110, - serialized_end=4152, -) - -_GLOSSARY = _descriptor.Descriptor( - name="Glossary", - full_name="google.cloud.translation.v3.Glossary", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.Glossary.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="language_pair", - full_name="google.cloud.translation.v3.Glossary.language_pair", - index=1, - 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, - ), - _descriptor.FieldDescriptor( - name="language_codes_set", - full_name="google.cloud.translation.v3.Glossary.language_codes_set", - 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, - ), - _descriptor.FieldDescriptor( - name="input_config", - full_name="google.cloud.translation.v3.Glossary.input_config", - 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, - ), - _descriptor.FieldDescriptor( - name="entry_count", - full_name="google.cloud.translation.v3.Glossary.entry_count", - 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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3.Glossary.submit_time", - index=5, - number=7, - 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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.cloud.translation.v3.Glossary.end_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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_GLOSSARY_LANGUAGECODEPAIR, _GLOSSARY_LANGUAGECODESSET,], - enum_types=[], - serialized_options=b"\352Ab\n!translate.googleapis.com/Glossary\022=projects/{project}/locations/{location}/glossaries/{glossary}", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="languages", - full_name="google.cloud.translation.v3.Glossary.languages", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=3634, - serialized_end=4268, -) - - -_CREATEGLOSSARYREQUEST = _descriptor.Descriptor( - name="CreateGlossaryRequest", - full_name="google.cloud.translation.v3.CreateGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.CreateGlossaryRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossary", - full_name="google.cloud.translation.v3.CreateGlossaryRequest.glossary", - 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=4271, - serialized_end=4415, -) - - -_GETGLOSSARYREQUEST = _descriptor.Descriptor( - name="GetGlossaryRequest", - full_name="google.cloud.translation.v3.GetGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.GetGlossaryRequest.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!translate.googleapis.com/Glossary", - 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=4417, - serialized_end=4494, -) - - -_DELETEGLOSSARYREQUEST = _descriptor.Descriptor( - name="DeleteGlossaryRequest", - full_name="google.cloud.translation.v3.DeleteGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.DeleteGlossaryRequest.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!translate.googleapis.com/Glossary", - 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=4496, - serialized_end=4576, -) - - -_LISTGLOSSARIESREQUEST = _descriptor.Descriptor( - name="ListGlossariesRequest", - full_name="google.cloud.translation.v3.ListGlossariesRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.ListGlossariesRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_size", - full_name="google.cloud.translation.v3.ListGlossariesRequest.page_size", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_token", - full_name="google.cloud.translation.v3.ListGlossariesRequest.page_token", - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="filter", - full_name="google.cloud.translation.v3.ListGlossariesRequest.filter", - 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=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=4579, - serialized_end=4731, -) - - -_LISTGLOSSARIESRESPONSE = _descriptor.Descriptor( - name="ListGlossariesResponse", - full_name="google.cloud.translation.v3.ListGlossariesResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="glossaries", - full_name="google.cloud.translation.v3.ListGlossariesResponse.glossaries", - 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.cloud.translation.v3.ListGlossariesResponse.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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4733, - serialized_end=4841, -) - - -_CREATEGLOSSARYMETADATA = _descriptor.Descriptor( - name="CreateGlossaryMetadata", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata.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="state", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata.state", - index=1, - number=2, - 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, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata.submit_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=[_CREATEGLOSSARYMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4844, - serialized_end=5108, -) - - -_DELETEGLOSSARYMETADATA = _descriptor.Descriptor( - name="DeleteGlossaryMetadata", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata.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="state", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata.state", - index=1, - number=2, - 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, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata.submit_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=[_DELETEGLOSSARYMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=5111, - serialized_end=5375, -) - - -_DELETEGLOSSARYRESPONSE = _descriptor.Descriptor( - name="DeleteGlossaryResponse", - full_name="google.cloud.translation.v3.DeleteGlossaryResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.DeleteGlossaryResponse.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="submit_time", - full_name="google.cloud.translation.v3.DeleteGlossaryResponse.submit_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.cloud.translation.v3.DeleteGlossaryResponse.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=5378, - serialized_end=5511, -) - -_TRANSLATETEXTREQUEST_LABELSENTRY.containing_type = _TRANSLATETEXTREQUEST -_TRANSLATETEXTREQUEST.fields_by_name[ - "glossary_config" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_TRANSLATETEXTREQUEST.fields_by_name[ - "labels" -].message_type = _TRANSLATETEXTREQUEST_LABELSENTRY -_TRANSLATETEXTRESPONSE.fields_by_name["translations"].message_type = _TRANSLATION -_TRANSLATETEXTRESPONSE.fields_by_name[ - "glossary_translations" -].message_type = _TRANSLATION -_TRANSLATION.fields_by_name[ - "glossary_config" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_DETECTLANGUAGEREQUEST_LABELSENTRY.containing_type = _DETECTLANGUAGEREQUEST -_DETECTLANGUAGEREQUEST.fields_by_name[ - "labels" -].message_type = _DETECTLANGUAGEREQUEST_LABELSENTRY -_DETECTLANGUAGEREQUEST.oneofs_by_name["source"].fields.append( - _DETECTLANGUAGEREQUEST.fields_by_name["content"] -) -_DETECTLANGUAGEREQUEST.fields_by_name[ - "content" -].containing_oneof = _DETECTLANGUAGEREQUEST.oneofs_by_name["source"] -_DETECTLANGUAGERESPONSE.fields_by_name["languages"].message_type = _DETECTEDLANGUAGE -_SUPPORTEDLANGUAGES.fields_by_name["languages"].message_type = _SUPPORTEDLANGUAGE -_INPUTCONFIG.fields_by_name["gcs_source"].message_type = _GCSSOURCE -_INPUTCONFIG.oneofs_by_name["source"].fields.append( - _INPUTCONFIG.fields_by_name["gcs_source"] -) -_INPUTCONFIG.fields_by_name[ - "gcs_source" -].containing_oneof = _INPUTCONFIG.oneofs_by_name["source"] -_OUTPUTCONFIG.fields_by_name["gcs_destination"].message_type = _GCSDESTINATION -_OUTPUTCONFIG.oneofs_by_name["destination"].fields.append( - _OUTPUTCONFIG.fields_by_name["gcs_destination"] -) -_OUTPUTCONFIG.fields_by_name[ - "gcs_destination" -].containing_oneof = _OUTPUTCONFIG.oneofs_by_name["destination"] -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY.fields_by_name[ - "value" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "models" -].message_type = _BATCHTRANSLATETEXTREQUEST_MODELSENTRY -_BATCHTRANSLATETEXTREQUEST.fields_by_name["input_configs"].message_type = _INPUTCONFIG -_BATCHTRANSLATETEXTREQUEST.fields_by_name["output_config"].message_type = _OUTPUTCONFIG -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "glossaries" -].message_type = _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "labels" -].message_type = _BATCHTRANSLATETEXTREQUEST_LABELSENTRY -_BATCHTRANSLATEMETADATA.fields_by_name[ - "state" -].enum_type = _BATCHTRANSLATEMETADATA_STATE -_BATCHTRANSLATEMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_BATCHTRANSLATEMETADATA_STATE.containing_type = _BATCHTRANSLATEMETADATA -_BATCHTRANSLATERESPONSE.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_BATCHTRANSLATERESPONSE.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARYINPUTCONFIG.fields_by_name["gcs_source"].message_type = _GCSSOURCE -_GLOSSARYINPUTCONFIG.oneofs_by_name["source"].fields.append( - _GLOSSARYINPUTCONFIG.fields_by_name["gcs_source"] -) -_GLOSSARYINPUTCONFIG.fields_by_name[ - "gcs_source" -].containing_oneof = _GLOSSARYINPUTCONFIG.oneofs_by_name["source"] -_GLOSSARY_LANGUAGECODEPAIR.containing_type = _GLOSSARY -_GLOSSARY_LANGUAGECODESSET.containing_type = _GLOSSARY -_GLOSSARY.fields_by_name["language_pair"].message_type = _GLOSSARY_LANGUAGECODEPAIR -_GLOSSARY.fields_by_name["language_codes_set"].message_type = _GLOSSARY_LANGUAGECODESSET -_GLOSSARY.fields_by_name["input_config"].message_type = _GLOSSARYINPUTCONFIG -_GLOSSARY.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARY.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARY.oneofs_by_name["languages"].fields.append( - _GLOSSARY.fields_by_name["language_pair"] -) -_GLOSSARY.fields_by_name["language_pair"].containing_oneof = _GLOSSARY.oneofs_by_name[ - "languages" -] -_GLOSSARY.oneofs_by_name["languages"].fields.append( - _GLOSSARY.fields_by_name["language_codes_set"] -) -_GLOSSARY.fields_by_name[ - "language_codes_set" -].containing_oneof = _GLOSSARY.oneofs_by_name["languages"] -_CREATEGLOSSARYREQUEST.fields_by_name["glossary"].message_type = _GLOSSARY -_LISTGLOSSARIESRESPONSE.fields_by_name["glossaries"].message_type = _GLOSSARY -_CREATEGLOSSARYMETADATA.fields_by_name[ - "state" -].enum_type = _CREATEGLOSSARYMETADATA_STATE -_CREATEGLOSSARYMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_CREATEGLOSSARYMETADATA_STATE.containing_type = _CREATEGLOSSARYMETADATA -_DELETEGLOSSARYMETADATA.fields_by_name[ - "state" -].enum_type = _DELETEGLOSSARYMETADATA_STATE -_DELETEGLOSSARYMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_DELETEGLOSSARYMETADATA_STATE.containing_type = _DELETEGLOSSARYMETADATA -_DELETEGLOSSARYRESPONSE.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_DELETEGLOSSARYRESPONSE.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -DESCRIPTOR.message_types_by_name[ - "TranslateTextGlossaryConfig" -] = _TRANSLATETEXTGLOSSARYCONFIG -DESCRIPTOR.message_types_by_name["TranslateTextRequest"] = _TRANSLATETEXTREQUEST -DESCRIPTOR.message_types_by_name["TranslateTextResponse"] = _TRANSLATETEXTRESPONSE -DESCRIPTOR.message_types_by_name["Translation"] = _TRANSLATION -DESCRIPTOR.message_types_by_name["DetectLanguageRequest"] = _DETECTLANGUAGEREQUEST -DESCRIPTOR.message_types_by_name["DetectedLanguage"] = _DETECTEDLANGUAGE -DESCRIPTOR.message_types_by_name["DetectLanguageResponse"] = _DETECTLANGUAGERESPONSE -DESCRIPTOR.message_types_by_name[ - "GetSupportedLanguagesRequest" -] = _GETSUPPORTEDLANGUAGESREQUEST -DESCRIPTOR.message_types_by_name["SupportedLanguages"] = _SUPPORTEDLANGUAGES -DESCRIPTOR.message_types_by_name["SupportedLanguage"] = _SUPPORTEDLANGUAGE -DESCRIPTOR.message_types_by_name["GcsSource"] = _GCSSOURCE -DESCRIPTOR.message_types_by_name["InputConfig"] = _INPUTCONFIG -DESCRIPTOR.message_types_by_name["GcsDestination"] = _GCSDESTINATION -DESCRIPTOR.message_types_by_name["OutputConfig"] = _OUTPUTCONFIG -DESCRIPTOR.message_types_by_name[ - "BatchTranslateTextRequest" -] = _BATCHTRANSLATETEXTREQUEST -DESCRIPTOR.message_types_by_name["BatchTranslateMetadata"] = _BATCHTRANSLATEMETADATA -DESCRIPTOR.message_types_by_name["BatchTranslateResponse"] = _BATCHTRANSLATERESPONSE -DESCRIPTOR.message_types_by_name["GlossaryInputConfig"] = _GLOSSARYINPUTCONFIG -DESCRIPTOR.message_types_by_name["Glossary"] = _GLOSSARY -DESCRIPTOR.message_types_by_name["CreateGlossaryRequest"] = _CREATEGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["GetGlossaryRequest"] = _GETGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["DeleteGlossaryRequest"] = _DELETEGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["ListGlossariesRequest"] = _LISTGLOSSARIESREQUEST -DESCRIPTOR.message_types_by_name["ListGlossariesResponse"] = _LISTGLOSSARIESRESPONSE -DESCRIPTOR.message_types_by_name["CreateGlossaryMetadata"] = _CREATEGLOSSARYMETADATA -DESCRIPTOR.message_types_by_name["DeleteGlossaryMetadata"] = _DELETEGLOSSARYMETADATA -DESCRIPTOR.message_types_by_name["DeleteGlossaryResponse"] = _DELETEGLOSSARYRESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -TranslateTextGlossaryConfig = _reflection.GeneratedProtocolMessageType( - "TranslateTextGlossaryConfig", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTGLOSSARYCONFIG, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Configures which glossary should be used for a specific target - language, and defines options for applying that glossary. - - Attributes: - glossary: - Required. Specifies the glossary used for this translation. - Use this format: projects/\ */locations/*/glossaries/\* - ignore_case: - Optional. Indicates match is case-insensitive. Default value - is false if missing. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.TranslateTextGlossaryConfig) - }, -) -_sym_db.RegisterMessage(TranslateTextGlossaryConfig) - -TranslateTextRequest = _reflection.GeneratedProtocolMessageType( - "TranslateTextRequest", - (_message.Message,), - { - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.TranslateTextRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _TRANSLATETEXTREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The request message for synchronous translation. - - Attributes: - contents: - Required. The content of the input in string format. We - recommend the total content be less than 30k codepoints. Use - BatchTranslateText for larger text. - mime_type: - Optional. The format of the source text, for example, - “text/html”, “text/plain”. If left blank, the MIME type - defaults to “text/html”. - source_language_code: - Optional. The BCP-47 language code of the input text if known, - for example, “en-US” or “sr-Latn”. Supported language codes - are listed in Language Support. If the source language isn’t - specified, the API attempts to identify the source language - automatically and returns the source language within the - response. - target_language_code: - Required. The BCP-47 language code to use for translation of - the input text, set to one of the language codes listed in - Language Support. - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-number-or-id}`` - or ``projects/{project-number-or-id}/locations/{location- - id}``. For global calls, use ``projects/{project-number-or- - id}/locations/global`` or ``projects/{project-number-or-id}``. - Non-global location is required for requests using AutoML - models or custom glossaries. Models and glossaries must be - within the same region (have same location-id), otherwise an - INVALID_ARGUMENT (400) error is returned. - model: - Optional. The ``model`` type requested for this translation. - The format depends on model type: - AutoML Translation - models: ``projects/{project-number-or- - id}/locations/{location-id}/models/{model-id}`` - General - (built-in) models: ``projects/{project-number-or- - id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-number-or-id}/locations/{location- - id}/models/general/base`` For global (non-regionalized) - requests, use ``location-id`` ``global``. For example, - ``projects/{project-number-or- - id}/locations/global/models/general/nmt``. If missing, the - system decides which google base model to use. - glossary_config: - Optional. Glossary to be applied. The glossary must be within - the same region (have the same location-id) as the model, - otherwise an INVALID_ARGUMENT (400) error is returned. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.TranslateTextRequest) - }, -) -_sym_db.RegisterMessage(TranslateTextRequest) -_sym_db.RegisterMessage(TranslateTextRequest.LabelsEntry) - -TranslateTextResponse = _reflection.GeneratedProtocolMessageType( - "TranslateTextResponse", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTRESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """ - Attributes: - translations: - Text translation responses with no glossary applied. This - field has the same length as [``contents``][google.cloud.trans - lation.v3.TranslateTextRequest.contents]. - glossary_translations: - Text translation responses if a glossary is provided in the - request. This can be the same as [``translations``][google.clo - ud.translation.v3.TranslateTextResponse.translations] if no - terms apply. This field has the same length as [``contents``][ - google.cloud.translation.v3.TranslateTextRequest.contents]. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.TranslateTextResponse) - }, -) -_sym_db.RegisterMessage(TranslateTextResponse) - -Translation = _reflection.GeneratedProtocolMessageType( - "Translation", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATION, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """A single translation response. - - Attributes: - translated_text: - Text translated into the target language. - model: - Only present when ``model`` is present in the request. - ``model`` here is normalized to have project number. For - example: If the ``model`` requested in TranslationTextRequest - is ``projects/{project-id}/locations/{location- - id}/models/general/nmt`` then ``model`` here would be - normalized to ``projects/{project-number}/locations/{location- - id}/models/general/nmt``. - detected_language_code: - The BCP-47 language code of source text in the initial - request, detected automatically, if no source language was - passed within the initial request. If the source language was - passed, auto-detection of the language does not occur and this - field is empty. - glossary_config: - The ``glossary_config`` used for this translation. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.Translation) - }, -) -_sym_db.RegisterMessage(Translation) - -DetectLanguageRequest = _reflection.GeneratedProtocolMessageType( - "DetectLanguageRequest", - (_message.Message,), - { - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _DETECTLANGUAGEREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DetectLanguageRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _DETECTLANGUAGEREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The request message for language detection. - - Attributes: - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-number-or- - id}/locations/{location-id}`` or ``projects/{project-number- - or-id}``. For global calls, use ``projects/{project-number- - or-id}/locations/global`` or ``projects/{project-number-or- - id}``. Only models within the same region (has same location- - id) can be used. Otherwise an INVALID_ARGUMENT (400) error is - returned. - model: - Optional. The language detection model to be used. Format: - ``projects/{project-number-or-id}/locations/{location- - id}/models/language-detection/{model-id}`` Only one language - detection model is currently supported: ``projects/{project- - number-or-id}/locations/{location-id}/models/language- - detection/default``. If not specified, the default model is - used. - source: - Required. The source of the document from which to detect the - language. - content: - The content of the input stored as a string. - mime_type: - Optional. The format of the source text, for example, - “text/html”, “text/plain”. If left blank, the MIME type - defaults to “text/html”. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DetectLanguageRequest) - }, -) -_sym_db.RegisterMessage(DetectLanguageRequest) -_sym_db.RegisterMessage(DetectLanguageRequest.LabelsEntry) - -DetectedLanguage = _reflection.GeneratedProtocolMessageType( - "DetectedLanguage", - (_message.Message,), - { - "DESCRIPTOR": _DETECTEDLANGUAGE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The response message for language detection. - - Attributes: - language_code: - The BCP-47 language code of source content in the request, - detected automatically. - confidence: - The confidence of the detection result for this language. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DetectedLanguage) - }, -) -_sym_db.RegisterMessage(DetectedLanguage) - -DetectLanguageResponse = _reflection.GeneratedProtocolMessageType( - "DetectLanguageResponse", - (_message.Message,), - { - "DESCRIPTOR": _DETECTLANGUAGERESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The response message for language detection. - - Attributes: - languages: - A list of detected languages sorted by detection confidence in - descending order. The most probable language first. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DetectLanguageResponse) - }, -) -_sym_db.RegisterMessage(DetectLanguageResponse) - -GetSupportedLanguagesRequest = _reflection.GeneratedProtocolMessageType( - "GetSupportedLanguagesRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETSUPPORTEDLANGUAGESREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The request message for discovering supported languages. - - Attributes: - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-number-or-id}`` - or ``projects/{project-number-or-id}/locations/{location- - id}``. For global calls, use ``projects/{project-number-or- - id}/locations/global`` or ``projects/{project-number-or-id}``. - Non-global location is required for AutoML models. Only - models within the same region (have same location-id) can be - used, otherwise an INVALID_ARGUMENT (400) error is returned. - display_language_code: - Optional. The language to use to return localized, human - readable names of supported languages. If missing, then - display names are not returned in a response. - model: - Optional. Get supported languages of this model. The format - depends on model type: - AutoML Translation models: - ``projects/{project-number-or-id}/locations/{location- - id}/models/{model-id}`` - General (built-in) models: - ``projects/{project-number-or-id}/locations/{location- - id}/models/general/nmt``, ``projects/{project-number-or- - id}/locations/{location-id}/models/general/base`` Returns - languages supported by the specified model. If missing, we get - supported languages of Google general base (PBMT) model. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GetSupportedLanguagesRequest) - }, -) -_sym_db.RegisterMessage(GetSupportedLanguagesRequest) - -SupportedLanguages = _reflection.GeneratedProtocolMessageType( - "SupportedLanguages", - (_message.Message,), - { - "DESCRIPTOR": _SUPPORTEDLANGUAGES, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The response message for discovering supported languages. - - Attributes: - languages: - A list of supported language responses. This list contains an - entry for each language the Translation API supports. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.SupportedLanguages) - }, -) -_sym_db.RegisterMessage(SupportedLanguages) - -SupportedLanguage = _reflection.GeneratedProtocolMessageType( - "SupportedLanguage", - (_message.Message,), - { - "DESCRIPTOR": _SUPPORTEDLANGUAGE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """A single supported language response corresponds to information - related to one supported language. - - Attributes: - language_code: - Supported language code, generally consisting of its ISO 639-1 - identifier, for example, ‘en’, ‘ja’. In certain cases, BCP-47 - codes including language and region identifiers are returned - (for example, ‘zh-TW’ and ‘zh-CN’) - display_name: - Human readable name of the language localized in the display - language specified in the request. - support_source: - Can be used as source language. - support_target: - Can be used as target language. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.SupportedLanguage) - }, -) -_sym_db.RegisterMessage(SupportedLanguage) - -GcsSource = _reflection.GeneratedProtocolMessageType( - "GcsSource", - (_message.Message,), - { - "DESCRIPTOR": _GCSSOURCE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The Google Cloud Storage location for the input content. - - Attributes: - input_uri: - Required. Source data URI. For example, - ``gs://my_bucket/my_object``. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GcsSource) - }, -) -_sym_db.RegisterMessage(GcsSource) - -InputConfig = _reflection.GeneratedProtocolMessageType( - "InputConfig", - (_message.Message,), - { - "DESCRIPTOR": _INPUTCONFIG, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Input configuration for BatchTranslateText request. - - Attributes: - mime_type: - Optional. Can be “text/plain” or “text/html”. For ``.tsv``, - “text/html” is used if mime_type is missing. For ``.html``, - this field must be “text/html” or empty. For ``.txt``, this - field must be “text/plain” or empty. - source: - Required. Specify the input. - gcs_source: - Required. Google Cloud Storage location for the source input. - This can be a single file (for example, ``gs://translation- - test/input.tsv``) or a wildcard (for example, - ``gs://translation-test/*``). If a file extension is ``.tsv``, - it can contain either one or two columns. The first column - (optional) is the id of the text request. If the first column - is missing, we use the row number (0-based) from the input - file as the ID in the output file. The second column is the - actual text to be translated. We recommend each row be <= 10K - Unicode codepoints, otherwise an error might be returned. Note - that the input tsv must be RFC 4180 compliant. You could use - https://github.com/Clever/csvlint to check potential - formatting errors in your tsv file. csvlint –delimiter=‘:raw- - latex:`\t`’ your_input_file.tsv The other supported file - extensions are ``.txt`` or ``.html``, which is treated as a - single large chunk of text. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.InputConfig) - }, -) -_sym_db.RegisterMessage(InputConfig) - -GcsDestination = _reflection.GeneratedProtocolMessageType( - "GcsDestination", - (_message.Message,), - { - "DESCRIPTOR": _GCSDESTINATION, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The Google Cloud Storage location for the output content. - - Attributes: - output_uri_prefix: - Required. There must be no files under ‘output_uri_prefix’. - ‘output_uri_prefix’ must end with “/” and start with “gs://”, - otherwise an INVALID_ARGUMENT (400) error is returned. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GcsDestination) - }, -) -_sym_db.RegisterMessage(GcsDestination) - -OutputConfig = _reflection.GeneratedProtocolMessageType( - "OutputConfig", - (_message.Message,), - { - "DESCRIPTOR": _OUTPUTCONFIG, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Output configuration for BatchTranslateText request. - - Attributes: - destination: - Required. The destination of output. - gcs_destination: - Google Cloud Storage destination for output content. For every - single input file (for example, gs://a/b/c.[extension]), we - generate at most 2 \* n output files. (n is the # of - target_language_codes in the BatchTranslateTextRequest). - Output files (tsv) generated are compliant with RFC 4180 - except that record delimiters are ``\\\\n`` instead of - ``\\\\r\\\\n``. We don’t provide any way to - change record delimiters. While the input files are being - processed, we write/update an index file ‘index.csv’ under - ‘output_uri_prefix’ (for example, gs://translation- - test/index.csv) The index file is generated/updated as new - files are being translated. The format is: - input_file,target_language_code,translations_file,errors_file, - glossary_translations_file,glossary_errors_file input_file is - one file we matched using gcs_source.input_uri. - target_language_code is provided in the request. - translations_file contains the translations. (details provided - below) errors_file contains the errors during processing of - the file. (details below). Both translations_file and - errors_file could be empty strings if we have no content to - output. glossary_translations_file and glossary_errors_file - are always empty strings if the input_file is tsv. They could - also be empty if we have no content to output. Once a row is - present in index.csv, the input/output matching never changes. - Callers should also expect all the content in input_file are - processed and ready to be consumed (that is, no partial output - file is written). The format of translations_file (for target - language code ‘trg’) is: - gs://translation_test/a_b_c\_‘trg’\_translations.[extension] - If the input file extension is tsv, the output has the - following columns: Column 1: ID of the request provided in the - input, if it’s not provided in the input, then the input row - number is used (0-based). Column 2: source sentence. Column 3: - translation without applying a glossary. Empty string if there - is an error. Column 4 (only present if a glossary is provided - in the request): translation after applying the glossary. - Empty string if there is an error applying the glossary. Could - be same string as column 3 if there is no glossary applied. - If input file extension is a txt or html, the translation is - directly written to the output file. If glossary is requested, - a separate glossary_translations_file has format of gs://trans - lation_test/a_b_c\_‘trg’\_glossary_translations.[extension] - The format of errors file (for target language code ‘trg’) is: - gs://translation_test/a_b_c\_‘trg’\_errors.[extension] If the - input file extension is tsv, errors_file contains the - following: Column 1: ID of the request provided in the input, - if it’s not provided in the input, then the input row number - is used (0-based). Column 2: source sentence. Column 3: Error - detail for the translation. Could be empty. Column 4 (only - present if a glossary is provided in the request): Error when - applying the glossary. If the input file extension is txt or - html, glossary_error_file will be generated that contains - error details. glossary_error_file has format of gs://translat - ion_test/a_b_c\_‘trg’\_glossary_errors.[extension] - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.OutputConfig) - }, -) -_sym_db.RegisterMessage(OutputConfig) - -BatchTranslateTextRequest = _reflection.GeneratedProtocolMessageType( - "BatchTranslateTextRequest", - (_message.Message,), - { - "ModelsEntry": _reflection.GeneratedProtocolMessageType( - "ModelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_MODELSENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntry) - }, - ), - "GlossariesEntry": _reflection.GeneratedProtocolMessageType( - "GlossariesEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntry) - }, - ), - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The batch translation request. - - Attributes: - parent: - Required. Location to make a call. Must refer to a caller’s - project. Format: ``projects/{project-number-or- - id}/locations/{location-id}``. The ``global`` location is not - supported for batch translation. Only AutoML Translation - models or glossaries within the same region (have the same - location-id) can be used, otherwise an INVALID_ARGUMENT (400) - error is returned. - source_language_code: - Required. Source language code. - target_language_codes: - Required. Specify up to 10 language codes here. - models: - Optional. The models to use for translation. Map’s key is - target language code. Map’s value is model name. Value can be - a built-in general model, or an AutoML Translation model. The - value format depends on model type: - AutoML Translation - models: ``projects/{project-number-or- - id}/locations/{location-id}/models/{model-id}`` - General - (built-in) models: ``projects/{project-number-or- - id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-number-or-id}/locations/{location- - id}/models/general/base`` If the map is empty or a specific - model is not requested for a language pair, then default - google model (nmt) is used. - input_configs: - Required. Input configurations. The total number of files - matched should be <= 1000. The total content size should be <= - 100M Unicode codepoints. The files must use UTF-8 encoding. - output_config: - Required. Output configuration. If 2 input configs match to - the same file (that is, same input path), we don’t generate - output for duplicate inputs. - glossaries: - Optional. Glossaries to be applied for translation. It’s keyed - by target language code. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateTextRequest) - }, -) -_sym_db.RegisterMessage(BatchTranslateTextRequest) -_sym_db.RegisterMessage(BatchTranslateTextRequest.ModelsEntry) -_sym_db.RegisterMessage(BatchTranslateTextRequest.GlossariesEntry) -_sym_db.RegisterMessage(BatchTranslateTextRequest.LabelsEntry) - -BatchTranslateMetadata = _reflection.GeneratedProtocolMessageType( - "BatchTranslateMetadata", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATEMETADATA, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """State metadata for the batch translation operation. - - Attributes: - state: - The state of the operation. - translated_characters: - Number of successfully translated characters so far (Unicode - codepoints). - failed_characters: - Number of characters that have failed to process so far - (Unicode codepoints). - total_characters: - Total number of characters (Unicode codepoints). This is the - total number of codepoints from input files times the number - of target languages and appears here shortly after the call is - submitted. - submit_time: - Time when the operation was submitted. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateMetadata) - }, -) -_sym_db.RegisterMessage(BatchTranslateMetadata) - -BatchTranslateResponse = _reflection.GeneratedProtocolMessageType( - "BatchTranslateResponse", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATERESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.response][google.longrunni - ng.Operation.response] field returned by BatchTranslateText if at - least one sentence is translated successfully. - - Attributes: - total_characters: - Total number of characters (Unicode codepoints). - translated_characters: - Number of successfully translated characters (Unicode - codepoints). - failed_characters: - Number of characters that have failed to process (Unicode - codepoints). - submit_time: - Time when the operation was submitted. - end_time: - The time when the operation is finished and [google.longrunnin - g.Operation.done][google.longrunning.Operation.done] is set to - true. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateResponse) - }, -) -_sym_db.RegisterMessage(BatchTranslateResponse) - -GlossaryInputConfig = _reflection.GeneratedProtocolMessageType( - "GlossaryInputConfig", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARYINPUTCONFIG, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Input configuration for glossaries. - - Attributes: - source: - Required. Specify the input. - gcs_source: - Required. Google Cloud Storage location of glossary data. File - format is determined based on the filename extension. API - returns [google.rpc.Code.INVALID_ARGUMENT] for unsupported - URI-s and file formats. Wildcards are not allowed. This must - be a single file in one of the following formats: For - unidirectional glossaries: - TSV/CSV (``.tsv``/``.csv``): 2 - column file, tab- or comma-separated. The first column is - source text. The second column is target text. The file - must not contain headers. That is, the first row is data, - not column names. - TMX (``.tmx``): TMX file with parallel - data defining source/target term pairs. For equivalent - term sets glossaries: - CSV (``.csv``): Multi-column CSV - file defining equivalent glossary terms in multiple - languages. The format is defined for Google Translation - Toolkit and documented in `Use a glossary `__. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GlossaryInputConfig) - }, -) -_sym_db.RegisterMessage(GlossaryInputConfig) - -Glossary = _reflection.GeneratedProtocolMessageType( - "Glossary", - (_message.Message,), - { - "LanguageCodePair": _reflection.GeneratedProtocolMessageType( - "LanguageCodePair", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARY_LANGUAGECODEPAIR, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Used with unidirectional glossaries. - - Attributes: - source_language_code: - Required. The BCP-47 language code of the input text, for - example, “en-US”. Expected to be an exact match for - GlossaryTerm.language_code. - target_language_code: - Required. The BCP-47 language code for translation output, for - example, “zh-CN”. Expected to be an exact match for - GlossaryTerm.language_code. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.Glossary.LanguageCodePair) - }, - ), - "LanguageCodesSet": _reflection.GeneratedProtocolMessageType( - "LanguageCodesSet", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARY_LANGUAGECODESSET, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Used with equivalent term set glossaries. - - Attributes: - language_codes: - The BCP-47 language code(s) for terms defined in the glossary. - All entries are unique. The list contains at least two - entries. Expected to be an exact match for - GlossaryTerm.language_code. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.Glossary.LanguageCodesSet) - }, - ), - "DESCRIPTOR": _GLOSSARY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Represents a glossary built from user provided data. - - Attributes: - name: - Required. The resource name of the glossary. Glossary names - have the form ``projects/{project-number-or- - id}/locations/{location-id}/glossaries/{glossary-id}``. - languages: - Languages supported by the glossary. - language_pair: - Used with unidirectional glossaries. - language_codes_set: - Used with equivalent term set glossaries. - input_config: - Required. Provides examples to build the glossary from. Total - glossary must not exceed 10M Unicode codepoints. - entry_count: - Output only. The number of entries defined in the glossary. - submit_time: - Output only. When CreateGlossary was called. - end_time: - Output only. When the glossary creation was finished. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.Glossary) - }, -) -_sym_db.RegisterMessage(Glossary) -_sym_db.RegisterMessage(Glossary.LanguageCodePair) -_sym_db.RegisterMessage(Glossary.LanguageCodesSet) - -CreateGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "CreateGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _CREATEGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Request message for CreateGlossary. - - Attributes: - parent: - Required. The project name. - glossary: - Required. The glossary to create. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.CreateGlossaryRequest) - }, -) -_sym_db.RegisterMessage(CreateGlossaryRequest) - -GetGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "GetGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Request message for GetGlossary. - - Attributes: - name: - Required. The name of the glossary to retrieve. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GetGlossaryRequest) - }, -) -_sym_db.RegisterMessage(GetGlossaryRequest) - -DeleteGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Request message for DeleteGlossary. - - Attributes: - name: - Required. The name of the glossary to delete. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DeleteGlossaryRequest) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryRequest) - -ListGlossariesRequest = _reflection.GeneratedProtocolMessageType( - "ListGlossariesRequest", - (_message.Message,), - { - "DESCRIPTOR": _LISTGLOSSARIESREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Request message for ListGlossaries. - - Attributes: - parent: - Required. The name of the project from which to list all of - the glossaries. - page_size: - Optional. Requested page size. The server may return fewer - glossaries than requested. If unspecified, the server picks an - appropriate default. - page_token: - Optional. A token identifying a page of results the server - should return. Typically, this is the value of - [ListGlossariesResponse.next_page_token] returned from the - previous call to ``ListGlossaries`` method. The first page is - returned if ``page_token``\ is empty or missing. - filter: - Optional. Filter specifying constraints of a list operation. - Filtering is not supported yet, and the parameter currently - has no effect. If missing, no filtering is performed. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.ListGlossariesRequest) - }, -) -_sym_db.RegisterMessage(ListGlossariesRequest) - -ListGlossariesResponse = _reflection.GeneratedProtocolMessageType( - "ListGlossariesResponse", - (_message.Message,), - { - "DESCRIPTOR": _LISTGLOSSARIESRESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Response message for ListGlossaries. - - Attributes: - glossaries: - The list of glossaries for a project. - next_page_token: - A token to retrieve a page of results. Pass this value in the - [ListGlossariesRequest.page_token] field in the subsequent - call to ``ListGlossaries`` method to retrieve the next page of - results. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.ListGlossariesResponse) - }, -) -_sym_db.RegisterMessage(ListGlossariesResponse) - -CreateGlossaryMetadata = _reflection.GeneratedProtocolMessageType( - "CreateGlossaryMetadata", - (_message.Message,), - { - "DESCRIPTOR": _CREATEGLOSSARYMETADATA, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.metadata][google.longrunni - ng.Operation.metadata] field returned by CreateGlossary. - - Attributes: - name: - The name of the glossary that is being created. - state: - The current state of the glossary creation operation. - submit_time: - The time when the operation was submitted to the server. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.CreateGlossaryMetadata) - }, -) -_sym_db.RegisterMessage(CreateGlossaryMetadata) - -DeleteGlossaryMetadata = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryMetadata", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYMETADATA, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.metadata][google.longrunni - ng.Operation.metadata] field returned by DeleteGlossary. - - Attributes: - name: - The name of the glossary that is being deleted. - state: - The current state of the glossary deletion operation. - submit_time: - The time when the operation was submitted to the server. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DeleteGlossaryMetadata) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryMetadata) - -DeleteGlossaryResponse = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryResponse", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYRESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.response][google.longrunni - ng.Operation.response] field returned by DeleteGlossary. - - Attributes: - name: - The name of the deleted glossary. - submit_time: - The time when the operation was submitted to the server. - end_time: - The time when the glossary deletion is finished and [google.lo - ngrunning.Operation.done][google.longrunning.Operation.done] - is set to true. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DeleteGlossaryResponse) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryResponse) - - -DESCRIPTOR._options = None -_TRANSLATETEXTGLOSSARYCONFIG.fields_by_name["glossary"]._options = None -_TRANSLATETEXTGLOSSARYCONFIG.fields_by_name["ignore_case"]._options = None -_TRANSLATETEXTREQUEST_LABELSENTRY._options = None -_TRANSLATETEXTREQUEST.fields_by_name["contents"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["mime_type"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["source_language_code"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["target_language_code"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["parent"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["model"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["glossary_config"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["labels"]._options = None -_DETECTLANGUAGEREQUEST_LABELSENTRY._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["parent"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["model"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["mime_type"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["labels"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["parent"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["display_language_code"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["model"]._options = None -_INPUTCONFIG.fields_by_name["mime_type"]._options = None -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY._options = None -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY._options = None -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["parent"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["source_language_code"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["target_language_codes"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["models"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["input_configs"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["output_config"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["glossaries"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["labels"]._options = None -_GLOSSARY.fields_by_name["entry_count"]._options = None -_GLOSSARY.fields_by_name["submit_time"]._options = None -_GLOSSARY.fields_by_name["end_time"]._options = None -_GLOSSARY._options = None -_CREATEGLOSSARYREQUEST.fields_by_name["parent"]._options = None -_CREATEGLOSSARYREQUEST.fields_by_name["glossary"]._options = None -_GETGLOSSARYREQUEST.fields_by_name["name"]._options = None -_DELETEGLOSSARYREQUEST.fields_by_name["name"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["parent"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["page_size"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["page_token"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["filter"]._options = None - -_TRANSLATIONSERVICE = _descriptor.ServiceDescriptor( - name="TranslationService", - full_name="google.cloud.translation.v3.TranslationService", - file=DESCRIPTOR, - index=0, - serialized_options=b"\312A\030translate.googleapis.com\322A`https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translation", - create_key=_descriptor._internal_create_key, - serialized_start=5514, - serialized_end=7576, - methods=[ - _descriptor.MethodDescriptor( - name="TranslateText", - full_name="google.cloud.translation.v3.TranslationService.TranslateText", - index=0, - containing_service=None, - input_type=_TRANSLATETEXTREQUEST, - output_type=_TRANSLATETEXTRESPONSE, - serialized_options=b'\202\323\344\223\002b"1/v3/{parent=projects/*/locations/*}:translateText:\001*Z*"%/v3/{parent=projects/*}:translateText:\001*\332A$parent,target_language_code,contents\332AIparent,model,mime_type,source_language_code,target_language_code,contents', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DetectLanguage", - full_name="google.cloud.translation.v3.TranslationService.DetectLanguage", - index=1, - containing_service=None, - input_type=_DETECTLANGUAGEREQUEST, - output_type=_DETECTLANGUAGERESPONSE, - serialized_options=b'\202\323\344\223\002d"2/v3/{parent=projects/*/locations/*}:detectLanguage:\001*Z+"&/v3/{parent=projects/*}:detectLanguage:\001*\332A\036parent,model,mime_type,content', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="GetSupportedLanguages", - full_name="google.cloud.translation.v3.TranslationService.GetSupportedLanguages", - index=2, - containing_service=None, - input_type=_GETSUPPORTEDLANGUAGESREQUEST, - output_type=_SUPPORTEDLANGUAGES, - serialized_options=b'\202\323\344\223\002f\0226/v3/{parent=projects/*/locations/*}/supportedLanguagesZ,\022*/v3/{parent=projects/*}/supportedLanguages\332A"parent,model,display_language_code', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="BatchTranslateText", - full_name="google.cloud.translation.v3.TranslationService.BatchTranslateText", - index=3, - containing_service=None, - input_type=_BATCHTRANSLATETEXTREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b'\202\323\344\223\002;"6/v3/{parent=projects/*/locations/*}:batchTranslateText:\001*\312A0\n\026BatchTranslateResponse\022\026BatchTranslateMetadata', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="CreateGlossary", - full_name="google.cloud.translation.v3.TranslationService.CreateGlossary", - index=4, - containing_service=None, - input_type=_CREATEGLOSSARYREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b'\202\323\344\223\002:"./v3/{parent=projects/*/locations/*}/glossaries:\010glossary\332A\017parent,glossary\312A"\n\010Glossary\022\026CreateGlossaryMetadata', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="ListGlossaries", - full_name="google.cloud.translation.v3.TranslationService.ListGlossaries", - index=5, - containing_service=None, - input_type=_LISTGLOSSARIESREQUEST, - output_type=_LISTGLOSSARIESRESPONSE, - serialized_options=b"\202\323\344\223\0020\022./v3/{parent=projects/*/locations/*}/glossaries\332A\006parent", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="GetGlossary", - full_name="google.cloud.translation.v3.TranslationService.GetGlossary", - index=6, - containing_service=None, - input_type=_GETGLOSSARYREQUEST, - output_type=_GLOSSARY, - serialized_options=b"\202\323\344\223\0020\022./v3/{name=projects/*/locations/*/glossaries/*}\332A\004name", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DeleteGlossary", - full_name="google.cloud.translation.v3.TranslationService.DeleteGlossary", - index=7, - containing_service=None, - input_type=_DELETEGLOSSARYREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b"\202\323\344\223\0020*./v3/{name=projects/*/locations/*/glossaries/*}\332A\004name\312A0\n\026DeleteGlossaryResponse\022\026DeleteGlossaryMetadata", - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_TRANSLATIONSERVICE) - -DESCRIPTOR.services_by_name["TranslationService"] = _TRANSLATIONSERVICE - -# @@protoc_insertion_point(module_scope) diff --git a/google/cloud/translate_v3/proto/translation_service_pb2_grpc.py b/google/cloud/translate_v3/proto/translation_service_pb2_grpc.py deleted file mode 100644 index 66b1b6cf..00000000 --- a/google/cloud/translate_v3/proto/translation_service_pb2_grpc.py +++ /dev/null @@ -1,411 +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.translate_v3.proto import ( - translation_service_pb2 as google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2, -) -from google.longrunning import ( - operations_pb2 as google_dot_longrunning_dot_operations__pb2, -) - - -class TranslationServiceStub(object): - """Proto file for the Cloud Translation API (v3 GA). - - Provides natural language translation operations. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.TranslateText = channel.unary_unary( - "/google.cloud.translation.v3.TranslationService/TranslateText", - request_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.TranslateTextRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.TranslateTextResponse.FromString, - ) - self.DetectLanguage = channel.unary_unary( - "/google.cloud.translation.v3.TranslationService/DetectLanguage", - request_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DetectLanguageRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DetectLanguageResponse.FromString, - ) - self.GetSupportedLanguages = channel.unary_unary( - "/google.cloud.translation.v3.TranslationService/GetSupportedLanguages", - request_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.GetSupportedLanguagesRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.SupportedLanguages.FromString, - ) - self.BatchTranslateText = channel.unary_unary( - "/google.cloud.translation.v3.TranslationService/BatchTranslateText", - request_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.BatchTranslateTextRequest.SerializeToString, - response_deserializer=google_dot_longrunning_dot_operations__pb2.Operation.FromString, - ) - self.CreateGlossary = channel.unary_unary( - "/google.cloud.translation.v3.TranslationService/CreateGlossary", - request_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.CreateGlossaryRequest.SerializeToString, - response_deserializer=google_dot_longrunning_dot_operations__pb2.Operation.FromString, - ) - self.ListGlossaries = channel.unary_unary( - "/google.cloud.translation.v3.TranslationService/ListGlossaries", - request_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.ListGlossariesRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.ListGlossariesResponse.FromString, - ) - self.GetGlossary = channel.unary_unary( - "/google.cloud.translation.v3.TranslationService/GetGlossary", - request_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.GetGlossaryRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.Glossary.FromString, - ) - self.DeleteGlossary = channel.unary_unary( - "/google.cloud.translation.v3.TranslationService/DeleteGlossary", - request_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DeleteGlossaryRequest.SerializeToString, - response_deserializer=google_dot_longrunning_dot_operations__pb2.Operation.FromString, - ) - - -class TranslationServiceServicer(object): - """Proto file for the Cloud Translation API (v3 GA). - - Provides natural language translation operations. - """ - - def TranslateText(self, request, context): - """Translates input text and returns translated text. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def DetectLanguage(self, request, context): - """Detects the language of text within a request. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def GetSupportedLanguages(self, request, context): - """Returns a list of supported languages for translation. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def BatchTranslateText(self, request, context): - """Translates a large volume of text in asynchronous batch mode. - This function provides real-time output as the inputs are being processed. - If caller cancels a request, the partial results (for an input file, it's - all or nothing) may still be available on the specified output location. - - This call returns immediately and you can - use google.longrunning.Operation.name to poll the status of the call. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def CreateGlossary(self, request, context): - """Creates a glossary and returns the long-running operation. Returns - NOT_FOUND, if the project doesn't exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def ListGlossaries(self, request, context): - """Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't - exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def GetGlossary(self, request, context): - """Gets a glossary. Returns NOT_FOUND, if the glossary doesn't - exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def DeleteGlossary(self, request, context): - """Deletes a glossary, or cancels glossary construction - if the glossary isn't created yet. - Returns NOT_FOUND, if the glossary doesn't exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_TranslationServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - "TranslateText": grpc.unary_unary_rpc_method_handler( - servicer.TranslateText, - request_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.TranslateTextRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.TranslateTextResponse.SerializeToString, - ), - "DetectLanguage": grpc.unary_unary_rpc_method_handler( - servicer.DetectLanguage, - request_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DetectLanguageRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DetectLanguageResponse.SerializeToString, - ), - "GetSupportedLanguages": grpc.unary_unary_rpc_method_handler( - servicer.GetSupportedLanguages, - request_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.GetSupportedLanguagesRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.SupportedLanguages.SerializeToString, - ), - "BatchTranslateText": grpc.unary_unary_rpc_method_handler( - servicer.BatchTranslateText, - request_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.BatchTranslateTextRequest.FromString, - response_serializer=google_dot_longrunning_dot_operations__pb2.Operation.SerializeToString, - ), - "CreateGlossary": grpc.unary_unary_rpc_method_handler( - servicer.CreateGlossary, - request_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.CreateGlossaryRequest.FromString, - response_serializer=google_dot_longrunning_dot_operations__pb2.Operation.SerializeToString, - ), - "ListGlossaries": grpc.unary_unary_rpc_method_handler( - servicer.ListGlossaries, - request_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.ListGlossariesRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.ListGlossariesResponse.SerializeToString, - ), - "GetGlossary": grpc.unary_unary_rpc_method_handler( - servicer.GetGlossary, - request_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.GetGlossaryRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.Glossary.SerializeToString, - ), - "DeleteGlossary": grpc.unary_unary_rpc_method_handler( - servicer.DeleteGlossary, - request_deserializer=google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DeleteGlossaryRequest.FromString, - response_serializer=google_dot_longrunning_dot_operations__pb2.Operation.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "google.cloud.translation.v3.TranslationService", rpc_method_handlers - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class TranslationService(object): - """Proto file for the Cloud Translation API (v3 GA). - - Provides natural language translation operations. - """ - - @staticmethod - def TranslateText( - 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.cloud.translation.v3.TranslationService/TranslateText", - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.TranslateTextRequest.SerializeToString, - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.TranslateTextResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def DetectLanguage( - 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.cloud.translation.v3.TranslationService/DetectLanguage", - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DetectLanguageRequest.SerializeToString, - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DetectLanguageResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def GetSupportedLanguages( - 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.cloud.translation.v3.TranslationService/GetSupportedLanguages", - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.GetSupportedLanguagesRequest.SerializeToString, - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.SupportedLanguages.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def BatchTranslateText( - 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.cloud.translation.v3.TranslationService/BatchTranslateText", - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.BatchTranslateTextRequest.SerializeToString, - google_dot_longrunning_dot_operations__pb2.Operation.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def CreateGlossary( - 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.cloud.translation.v3.TranslationService/CreateGlossary", - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.CreateGlossaryRequest.SerializeToString, - google_dot_longrunning_dot_operations__pb2.Operation.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def ListGlossaries( - 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.cloud.translation.v3.TranslationService/ListGlossaries", - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.ListGlossariesRequest.SerializeToString, - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.ListGlossariesResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def GetGlossary( - 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.cloud.translation.v3.TranslationService/GetGlossary", - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.GetGlossaryRequest.SerializeToString, - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.Glossary.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def DeleteGlossary( - 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.cloud.translation.v3.TranslationService/DeleteGlossary", - google_dot_cloud_dot_translate__v3_dot_proto_dot_translation__service__pb2.DeleteGlossaryRequest.SerializeToString, - google_dot_longrunning_dot_operations__pb2.Operation.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/google/cloud/translate_v3/py.typed b/google/cloud/translate_v3/py.typed new file mode 100644 index 00000000..dd819a47 --- /dev/null +++ b/google/cloud/translate_v3/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-translation package uses inline types. diff --git a/google/cloud/translate_v3/services/__init__.py b/google/cloud/translate_v3/services/__init__.py new file mode 100644 index 00000000..42ffdf2b --- /dev/null +++ b/google/cloud/translate_v3/services/__init__.py @@ -0,0 +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/google/cloud/translate_v3/services/translation_service/__init__.py b/google/cloud/translate_v3/services/translation_service/__init__.py new file mode 100644 index 00000000..e2442711 --- /dev/null +++ b/google/cloud/translate_v3/services/translation_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 TranslationServiceClient +from .async_client import TranslationServiceAsyncClient + +__all__ = ( + "TranslationServiceClient", + "TranslationServiceAsyncClient", +) diff --git a/google/cloud/translate_v3/services/translation_service/async_client.py b/google/cloud/translate_v3/services/translation_service/async_client.py new file mode 100644 index 00000000..a189fe76 --- /dev/null +++ b/google/cloud/translate_v3/services/translation_service/async_client.py @@ -0,0 +1,910 @@ +# -*- 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.api_core import operation +from google.api_core import operation_async +from google.cloud.translate_v3.services.translation_service import pagers +from google.cloud.translate_v3.types import translation_service +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + +from .transports.base import TranslationServiceTransport +from .transports.grpc_asyncio import TranslationServiceGrpcAsyncIOTransport +from .client import TranslationServiceClient + + +class TranslationServiceAsyncClient: + """Provides natural language translation operations.""" + + _client: TranslationServiceClient + + DEFAULT_ENDPOINT = TranslationServiceClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = TranslationServiceClient.DEFAULT_MTLS_ENDPOINT + + glossary_path = staticmethod(TranslationServiceClient.glossary_path) + + from_service_account_file = TranslationServiceClient.from_service_account_file + from_service_account_json = from_service_account_file + + get_transport_class = functools.partial( + type(TranslationServiceClient).get_transport_class, + type(TranslationServiceClient), + ) + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, TranslationServiceTransport] = "grpc_asyncio", + client_options: ClientOptions = None, + ) -> None: + """Instantiate the translation 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, ~.TranslationServiceTransport]): 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 = TranslationServiceClient( + credentials=credentials, transport=transport, client_options=client_options, + ) + + async def translate_text( + self, + request: translation_service.TranslateTextRequest = None, + *, + parent: str = None, + target_language_code: str = None, + contents: Sequence[str] = None, + model: str = None, + mime_type: str = None, + source_language_code: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.TranslateTextResponse: + r"""Translates input text and returns translated text. + + Args: + request (:class:`~.translation_service.TranslateTextRequest`): + The request object. The request message for synchronous + translation. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: ``projects/{project-number-or-id}`` or + ``projects/{project-number-or-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Non-global location is required for requests using + AutoML models or custom glossaries. + + Models and glossaries must be within the same region + (have same location-id), otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_language_code (:class:`str`): + Required. The BCP-47 language code to + use for translation of the input text, + set to one of the language codes listed + in Language Support. + This corresponds to the ``target_language_code`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + contents (:class:`Sequence[str]`): + Required. The content of the input in + string format. We recommend the total + content be less than 30k codepoints. Use + BatchTranslateText for larger text. + This corresponds to the ``contents`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. The ``model`` type requested for this + translation. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` + + For global (non-regionalized) requests, use + ``location-id`` ``global``. For example, + ``projects/{project-number-or-id}/locations/global/models/general/nmt``. + + If missing, the system decides which google base model + to use. + This corresponds to the ``model`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mime_type (:class:`str`): + Optional. The format of the source + text, for example, "text/html", + "text/plain". If left blank, the MIME + type defaults to "text/html". + This corresponds to the ``mime_type`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + source_language_code (:class:`str`): + Optional. The BCP-47 language code of + the input text if known, for example, + "en-US" or "sr-Latn". Supported language + codes are listed in Language Support. If + the source language isn't specified, the + API attempts to identify the source + language automatically and returns the + source language within the response. + This corresponds to the ``source_language_code`` 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: + ~.translation_service.TranslateTextResponse: + + """ + # 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( + [ + parent, + target_language_code, + contents, + model, + mime_type, + source_language_code, + ] + ): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.TranslateTextRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if target_language_code is not None: + request.target_language_code = target_language_code + if contents is not None: + request.contents = contents + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type + if source_language_code is not None: + request.source_language_code = source_language_code + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.translate_text, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def detect_language( + self, + request: translation_service.DetectLanguageRequest = None, + *, + parent: str = None, + model: str = None, + mime_type: str = None, + content: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.DetectLanguageResponse: + r"""Detects the language of text within a request. + + Args: + request (:class:`~.translation_service.DetectLanguageRequest`): + The request object. The request message for language + detection. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: + ``projects/{project-number-or-id}/locations/{location-id}`` + or ``projects/{project-number-or-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Only models within the same region (has same + location-id) can be used. Otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. The language detection model to be used. + + Format: + ``projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}`` + + Only one language detection model is currently + supported: + ``projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default``. + + If not specified, the default model is used. + This corresponds to the ``model`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mime_type (:class:`str`): + Optional. The format of the source + text, for example, "text/html", + "text/plain". If left blank, the MIME + type defaults to "text/html". + This corresponds to the ``mime_type`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + content (:class:`str`): + The content of the input stored as a + string. + This corresponds to the ``content`` 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: + ~.translation_service.DetectLanguageResponse: + The response message for language + detection. + + """ + # 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([parent, model, mime_type, content]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.DetectLanguageRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type + if content is not None: + request.content = content + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.detect_language, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def get_supported_languages( + self, + request: translation_service.GetSupportedLanguagesRequest = None, + *, + parent: str = None, + model: str = None, + display_language_code: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.SupportedLanguages: + r"""Returns a list of supported languages for + translation. + + Args: + request (:class:`~.translation_service.GetSupportedLanguagesRequest`): + The request object. The request message for discovering + supported languages. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: ``projects/{project-number-or-id}`` or + ``projects/{project-number-or-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Non-global location is required for AutoML models. + + Only models within the same region (have same + location-id) can be used, otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. Get supported languages of this model. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` + + Returns languages supported by the specified model. If + missing, we get supported languages of Google general + base (PBMT) model. + This corresponds to the ``model`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + display_language_code (:class:`str`): + Optional. The language to use to + return localized, human readable names + of supported languages. If missing, then + display names are not returned in a + response. + This corresponds to the ``display_language_code`` 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: + ~.translation_service.SupportedLanguages: + The response message for discovering + supported languages. + + """ + # 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([parent, model, display_language_code]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.GetSupportedLanguagesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if display_language_code is not None: + request.display_language_code = display_language_code + + # 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_supported_languages, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def batch_translate_text( + self, + request: translation_service.BatchTranslateTextRequest = None, + *, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Translates a large volume of text in asynchronous + batch mode. This function provides real-time output as + the inputs are being processed. If caller cancels a + request, the partial results (for an input file, it's + all or nothing) may still be available on the specified + output location. + This call returns immediately and you can + use google.longrunning.Operation.name to poll the status + of the call. + + Args: + request (:class:`~.translation_service.BatchTranslateTextRequest`): + The request object. The batch translation request. + + 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: + ~.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.BatchTranslateResponse``: + Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by BatchTranslateText if at least one + sentence is translated successfully. + + """ + # Create or coerce a protobuf request object. + + request = translation_service.BatchTranslateTextRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.batch_translate_text, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + translation_service.BatchTranslateResponse, + metadata_type=translation_service.BatchTranslateMetadata, + ) + + # Done; return the response. + return response + + async def create_glossary( + self, + request: translation_service.CreateGlossaryRequest = None, + *, + parent: str = None, + glossary: translation_service.Glossary = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Creates a glossary and returns the long-running operation. + Returns NOT_FOUND, if the project doesn't exist. + + Args: + request (:class:`~.translation_service.CreateGlossaryRequest`): + The request object. Request message for CreateGlossary. + parent (:class:`str`): + Required. The project name. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + glossary (:class:`~.translation_service.Glossary`): + Required. The glossary to create. + This corresponds to the ``glossary`` 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: + ~.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.Glossary``: Represents a + glossary built from user provided data. + + """ + # 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([parent, glossary]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.CreateGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if glossary is not None: + request.glossary = glossary + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_glossary, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + translation_service.Glossary, + metadata_type=translation_service.CreateGlossaryMetadata, + ) + + # Done; return the response. + return response + + async def list_glossaries( + self, + request: translation_service.ListGlossariesRequest = None, + *, + parent: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListGlossariesAsyncPager: + r"""Lists glossaries in a project. Returns NOT_FOUND, if the project + doesn't exist. + + Args: + request (:class:`~.translation_service.ListGlossariesRequest`): + The request object. Request message for ListGlossaries. + parent (:class:`str`): + Required. The name of the project + from which to list all of the + glossaries. + This corresponds to the ``parent`` 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.ListGlossariesAsyncPager: + Response message for ListGlossaries. + 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([parent]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.ListGlossariesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + + # 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_glossaries, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # 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.ListGlossariesAsyncPager( + method=rpc, request=request, response=response, metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_glossary( + self, + request: translation_service.GetGlossaryRequest = None, + *, + name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.Glossary: + r"""Gets a glossary. Returns NOT_FOUND, if the glossary doesn't + exist. + + Args: + request (:class:`~.translation_service.GetGlossaryRequest`): + The request object. Request message for GetGlossary. + name (:class:`str`): + Required. The name of the glossary to + retrieve. + This corresponds to the ``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: + ~.translation_service.Glossary: + Represents a glossary built from user + provided data. + + """ + # 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([name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.GetGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if name is not None: + request.name = 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_glossary, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def delete_glossary( + self, + request: translation_service.DeleteGlossaryRequest = None, + *, + name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Deletes a glossary, or cancels glossary construction if the + glossary isn't created yet. Returns NOT_FOUND, if the glossary + doesn't exist. + + Args: + request (:class:`~.translation_service.DeleteGlossaryRequest`): + The request object. Request message for DeleteGlossary. + name (:class:`str`): + Required. The name of the glossary to + delete. + This corresponds to the ``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: + ~.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.DeleteGlossaryResponse``: + Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by DeleteGlossary. + + """ + # 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([name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.DeleteGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if name is not None: + request.name = 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_glossary, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + translation_service.DeleteGlossaryResponse, + metadata_type=translation_service.DeleteGlossaryMetadata, + ) + + # Done; return the response. + return response + + +try: + _client_info = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + ) +except pkg_resources.DistributionNotFound: + _client_info = gapic_v1.client_info.ClientInfo() + + +__all__ = ("TranslationServiceAsyncClient",) diff --git a/google/cloud/translate_v3/services/translation_service/client.py b/google/cloud/translate_v3/services/translation_service/client.py new file mode 100644 index 00000000..5ec222fa --- /dev/null +++ b/google/cloud/translate_v3/services/translation_service/client.py @@ -0,0 +1,1019 @@ +# -*- 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.api_core import operation +from google.api_core import operation_async +from google.cloud.translate_v3.services.translation_service import pagers +from google.cloud.translate_v3.types import translation_service +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + +from .transports.base import TranslationServiceTransport +from .transports.grpc import TranslationServiceGrpcTransport +from .transports.grpc_asyncio import TranslationServiceGrpcAsyncIOTransport + + +class TranslationServiceClientMeta(type): + """Metaclass for the TranslationService 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[TranslationServiceTransport]] + _transport_registry["grpc"] = TranslationServiceGrpcTransport + _transport_registry["grpc_asyncio"] = TranslationServiceGrpcAsyncIOTransport + + def get_transport_class( + cls, label: str = None, + ) -> Type[TranslationServiceTransport]: + """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 TranslationServiceClient(metaclass=TranslationServiceClientMeta): + """Provides natural language translation operations.""" + + @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 = "translate.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 glossary_path(project: str, location: str, glossary: str,) -> str: + """Return a fully-qualified glossary string.""" + return "projects/{project}/locations/{location}/glossaries/{glossary}".format( + project=project, location=location, glossary=glossary, + ) + + @staticmethod + def parse_glossary_path(path: str) -> Dict[str, str]: + """Parse a glossary path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/glossaries/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, TranslationServiceTransport] = None, + client_options: ClientOptions = None, + ) -> None: + """Instantiate the translation 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, ~.TranslationServiceTransport]): 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. + """ + 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, TranslationServiceTransport): + # transport is a TranslationServiceTransport 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, + ) + + def translate_text( + self, + request: translation_service.TranslateTextRequest = None, + *, + parent: str = None, + target_language_code: str = None, + contents: Sequence[str] = None, + model: str = None, + mime_type: str = None, + source_language_code: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.TranslateTextResponse: + r"""Translates input text and returns translated text. + + Args: + request (:class:`~.translation_service.TranslateTextRequest`): + The request object. The request message for synchronous + translation. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: ``projects/{project-number-or-id}`` or + ``projects/{project-number-or-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Non-global location is required for requests using + AutoML models or custom glossaries. + + Models and glossaries must be within the same region + (have same location-id), otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_language_code (:class:`str`): + Required. The BCP-47 language code to + use for translation of the input text, + set to one of the language codes listed + in Language Support. + This corresponds to the ``target_language_code`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + contents (:class:`Sequence[str]`): + Required. The content of the input in + string format. We recommend the total + content be less than 30k codepoints. Use + BatchTranslateText for larger text. + This corresponds to the ``contents`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. The ``model`` type requested for this + translation. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` + + For global (non-regionalized) requests, use + ``location-id`` ``global``. For example, + ``projects/{project-number-or-id}/locations/global/models/general/nmt``. + + If missing, the system decides which google base model + to use. + This corresponds to the ``model`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mime_type (:class:`str`): + Optional. The format of the source + text, for example, "text/html", + "text/plain". If left blank, the MIME + type defaults to "text/html". + This corresponds to the ``mime_type`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + source_language_code (:class:`str`): + Optional. The BCP-47 language code of + the input text if known, for example, + "en-US" or "sr-Latn". Supported language + codes are listed in Language Support. If + the source language isn't specified, the + API attempts to identify the source + language automatically and returns the + source language within the response. + This corresponds to the ``source_language_code`` 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: + ~.translation_service.TranslateTextResponse: + + """ + # 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( + [ + parent, + target_language_code, + contents, + model, + mime_type, + source_language_code, + ] + ): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.TranslateTextRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if target_language_code is not None: + request.target_language_code = target_language_code + if contents is not None: + request.contents = contents + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type + if source_language_code is not None: + request.source_language_code = source_language_code + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.translate_text] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def detect_language( + self, + request: translation_service.DetectLanguageRequest = None, + *, + parent: str = None, + model: str = None, + mime_type: str = None, + content: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.DetectLanguageResponse: + r"""Detects the language of text within a request. + + Args: + request (:class:`~.translation_service.DetectLanguageRequest`): + The request object. The request message for language + detection. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: + ``projects/{project-number-or-id}/locations/{location-id}`` + or ``projects/{project-number-or-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Only models within the same region (has same + location-id) can be used. Otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. The language detection model to be used. + + Format: + ``projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}`` + + Only one language detection model is currently + supported: + ``projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default``. + + If not specified, the default model is used. + This corresponds to the ``model`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mime_type (:class:`str`): + Optional. The format of the source + text, for example, "text/html", + "text/plain". If left blank, the MIME + type defaults to "text/html". + This corresponds to the ``mime_type`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + content (:class:`str`): + The content of the input stored as a + string. + This corresponds to the ``content`` 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: + ~.translation_service.DetectLanguageResponse: + The response message for language + detection. + + """ + # 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([parent, model, mime_type, content]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.DetectLanguageRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type + if content is not None: + request.content = content + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.detect_language] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def get_supported_languages( + self, + request: translation_service.GetSupportedLanguagesRequest = None, + *, + parent: str = None, + model: str = None, + display_language_code: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.SupportedLanguages: + r"""Returns a list of supported languages for + translation. + + Args: + request (:class:`~.translation_service.GetSupportedLanguagesRequest`): + The request object. The request message for discovering + supported languages. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: ``projects/{project-number-or-id}`` or + ``projects/{project-number-or-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Non-global location is required for AutoML models. + + Only models within the same region (have same + location-id) can be used, otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. Get supported languages of this model. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` + + Returns languages supported by the specified model. If + missing, we get supported languages of Google general + base (PBMT) model. + This corresponds to the ``model`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + display_language_code (:class:`str`): + Optional. The language to use to + return localized, human readable names + of supported languages. If missing, then + display names are not returned in a + response. + This corresponds to the ``display_language_code`` 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: + ~.translation_service.SupportedLanguages: + The response message for discovering + supported languages. + + """ + # 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([parent, model, display_language_code]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.GetSupportedLanguagesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if display_language_code is not None: + request.display_language_code = display_language_code + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_supported_languages] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def batch_translate_text( + self, + request: translation_service.BatchTranslateTextRequest = None, + *, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Translates a large volume of text in asynchronous + batch mode. This function provides real-time output as + the inputs are being processed. If caller cancels a + request, the partial results (for an input file, it's + all or nothing) may still be available on the specified + output location. + This call returns immediately and you can + use google.longrunning.Operation.name to poll the status + of the call. + + Args: + request (:class:`~.translation_service.BatchTranslateTextRequest`): + The request object. The batch translation request. + + 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: + ~.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.BatchTranslateResponse``: + Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by BatchTranslateText if at least one + sentence is translated successfully. + + """ + # Create or coerce a protobuf request object. + + request = translation_service.BatchTranslateTextRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.batch_translate_text] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + translation_service.BatchTranslateResponse, + metadata_type=translation_service.BatchTranslateMetadata, + ) + + # Done; return the response. + return response + + def create_glossary( + self, + request: translation_service.CreateGlossaryRequest = None, + *, + parent: str = None, + glossary: translation_service.Glossary = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Creates a glossary and returns the long-running operation. + Returns NOT_FOUND, if the project doesn't exist. + + Args: + request (:class:`~.translation_service.CreateGlossaryRequest`): + The request object. Request message for CreateGlossary. + parent (:class:`str`): + Required. The project name. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + glossary (:class:`~.translation_service.Glossary`): + Required. The glossary to create. + This corresponds to the ``glossary`` 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: + ~.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.Glossary``: Represents a + glossary built from user provided data. + + """ + # 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([parent, glossary]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.CreateGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if glossary is not None: + request.glossary = glossary + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_glossary] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + translation_service.Glossary, + metadata_type=translation_service.CreateGlossaryMetadata, + ) + + # Done; return the response. + return response + + def list_glossaries( + self, + request: translation_service.ListGlossariesRequest = None, + *, + parent: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListGlossariesPager: + r"""Lists glossaries in a project. Returns NOT_FOUND, if the project + doesn't exist. + + Args: + request (:class:`~.translation_service.ListGlossariesRequest`): + The request object. Request message for ListGlossaries. + parent (:class:`str`): + Required. The name of the project + from which to list all of the + glossaries. + This corresponds to the ``parent`` 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.ListGlossariesPager: + Response message for ListGlossaries. + 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([parent]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.ListGlossariesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_glossaries] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # 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.ListGlossariesPager( + method=rpc, request=request, response=response, metadata=metadata, + ) + + # Done; return the response. + return response + + def get_glossary( + self, + request: translation_service.GetGlossaryRequest = None, + *, + name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.Glossary: + r"""Gets a glossary. Returns NOT_FOUND, if the glossary doesn't + exist. + + Args: + request (:class:`~.translation_service.GetGlossaryRequest`): + The request object. Request message for GetGlossary. + name (:class:`str`): + Required. The name of the glossary to + retrieve. + This corresponds to the ``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: + ~.translation_service.Glossary: + Represents a glossary built from user + provided data. + + """ + # 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([name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.GetGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_glossary] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def delete_glossary( + self, + request: translation_service.DeleteGlossaryRequest = None, + *, + name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Deletes a glossary, or cancels glossary construction if the + glossary isn't created yet. Returns NOT_FOUND, if the glossary + doesn't exist. + + Args: + request (:class:`~.translation_service.DeleteGlossaryRequest`): + The request object. Request message for DeleteGlossary. + name (:class:`str`): + Required. The name of the glossary to + delete. + This corresponds to the ``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: + ~.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.DeleteGlossaryResponse``: + Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by DeleteGlossary. + + """ + # 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([name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.DeleteGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_glossary] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + translation_service.DeleteGlossaryResponse, + metadata_type=translation_service.DeleteGlossaryMetadata, + ) + + # Done; return the response. + return response + + +try: + _client_info = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + ) +except pkg_resources.DistributionNotFound: + _client_info = gapic_v1.client_info.ClientInfo() + + +__all__ = ("TranslationServiceClient",) diff --git a/google/cloud/translate_v3/services/translation_service/pagers.py b/google/cloud/translate_v3/services/translation_service/pagers.py new file mode 100644 index 00000000..51347139 --- /dev/null +++ b/google/cloud/translate_v3/services/translation_service/pagers.py @@ -0,0 +1,148 @@ +# -*- 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.translate_v3.types import translation_service + + +class ListGlossariesPager: + """A pager for iterating through ``list_glossaries`` requests. + + This class thinly wraps an initial + :class:`~.translation_service.ListGlossariesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``glossaries`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListGlossaries`` requests and continue to iterate + through the ``glossaries`` field on the + corresponding responses. + + All the usual :class:`~.translation_service.ListGlossariesResponse` + 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[..., translation_service.ListGlossariesResponse], + request: translation_service.ListGlossariesRequest, + response: translation_service.ListGlossariesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (:class:`~.translation_service.ListGlossariesRequest`): + The initial request object. + response (:class:`~.translation_service.ListGlossariesResponse`): + 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 = translation_service.ListGlossariesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterable[translation_service.ListGlossariesResponse]: + 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[translation_service.Glossary]: + for page in self.pages: + yield from page.glossaries + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListGlossariesAsyncPager: + """A pager for iterating through ``list_glossaries`` requests. + + This class thinly wraps an initial + :class:`~.translation_service.ListGlossariesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``glossaries`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListGlossaries`` requests and continue to iterate + through the ``glossaries`` field on the + corresponding responses. + + All the usual :class:`~.translation_service.ListGlossariesResponse` + 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[translation_service.ListGlossariesResponse]], + request: translation_service.ListGlossariesRequest, + response: translation_service.ListGlossariesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (:class:`~.translation_service.ListGlossariesRequest`): + The initial request object. + response (:class:`~.translation_service.ListGlossariesResponse`): + 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 = translation_service.ListGlossariesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterable[translation_service.ListGlossariesResponse]: + 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[translation_service.Glossary]: + async def async_generator(): + async for page in self.pages: + for response in page.glossaries: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/google/cloud/translate_v3/services/translation_service/transports/__init__.py b/google/cloud/translate_v3/services/translation_service/transports/__init__.py new file mode 100644 index 00000000..b977312d --- /dev/null +++ b/google/cloud/translate_v3/services/translation_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 TranslationServiceTransport +from .grpc import TranslationServiceGrpcTransport +from .grpc_asyncio import TranslationServiceGrpcAsyncIOTransport + + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[TranslationServiceTransport]] +_transport_registry["grpc"] = TranslationServiceGrpcTransport +_transport_registry["grpc_asyncio"] = TranslationServiceGrpcAsyncIOTransport + + +__all__ = ( + "TranslationServiceTransport", + "TranslationServiceGrpcTransport", + "TranslationServiceGrpcAsyncIOTransport", +) diff --git a/google/cloud/translate_v3/services/translation_service/transports/base.py b/google/cloud/translate_v3/services/translation_service/transports/base.py new file mode 100644 index 00000000..b62c1308 --- /dev/null +++ b/google/cloud/translate_v3/services/translation_service/transports/base.py @@ -0,0 +1,227 @@ +# -*- 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 +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import operations_v1 # type: ignore +from google.auth import credentials # type: ignore + +from google.cloud.translate_v3.types import translation_service +from google.longrunning import operations_pb2 as operations # type: ignore + + +try: + _client_info = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + ) +except pkg_resources.DistributionNotFound: + _client_info = gapic_v1.client_info.ClientInfo() + + +class TranslationServiceTransport(abc.ABC): + """Abstract transport class for TranslationService.""" + + AUTH_SCOPES = ( + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-translation", + ) + + def __init__( + self, + *, + host: str = "translate.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, + **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. + """ + # 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() + + def _prep_wrapped_messages(self): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.translate_text: gapic_v1.method.wrap_method( + self.translate_text, default_timeout=None, client_info=_client_info, + ), + self.detect_language: gapic_v1.method.wrap_method( + self.detect_language, default_timeout=None, client_info=_client_info, + ), + self.get_supported_languages: gapic_v1.method.wrap_method( + self.get_supported_languages, + default_timeout=None, + client_info=_client_info, + ), + self.batch_translate_text: gapic_v1.method.wrap_method( + self.batch_translate_text, + default_timeout=None, + client_info=_client_info, + ), + self.create_glossary: gapic_v1.method.wrap_method( + self.create_glossary, default_timeout=None, client_info=_client_info, + ), + self.list_glossaries: gapic_v1.method.wrap_method( + self.list_glossaries, default_timeout=None, client_info=_client_info, + ), + self.get_glossary: gapic_v1.method.wrap_method( + self.get_glossary, default_timeout=None, client_info=_client_info, + ), + self.delete_glossary: gapic_v1.method.wrap_method( + self.delete_glossary, default_timeout=None, client_info=_client_info, + ), + } + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def translate_text( + self, + ) -> typing.Callable[ + [translation_service.TranslateTextRequest], + typing.Union[ + translation_service.TranslateTextResponse, + typing.Awaitable[translation_service.TranslateTextResponse], + ], + ]: + raise NotImplementedError() + + @property + def detect_language( + self, + ) -> typing.Callable[ + [translation_service.DetectLanguageRequest], + typing.Union[ + translation_service.DetectLanguageResponse, + typing.Awaitable[translation_service.DetectLanguageResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_supported_languages( + self, + ) -> typing.Callable[ + [translation_service.GetSupportedLanguagesRequest], + typing.Union[ + translation_service.SupportedLanguages, + typing.Awaitable[translation_service.SupportedLanguages], + ], + ]: + raise NotImplementedError() + + @property + def batch_translate_text( + self, + ) -> typing.Callable[ + [translation_service.BatchTranslateTextRequest], + typing.Union[operations.Operation, typing.Awaitable[operations.Operation]], + ]: + raise NotImplementedError() + + @property + def create_glossary( + self, + ) -> typing.Callable[ + [translation_service.CreateGlossaryRequest], + typing.Union[operations.Operation, typing.Awaitable[operations.Operation]], + ]: + raise NotImplementedError() + + @property + def list_glossaries( + self, + ) -> typing.Callable[ + [translation_service.ListGlossariesRequest], + typing.Union[ + translation_service.ListGlossariesResponse, + typing.Awaitable[translation_service.ListGlossariesResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_glossary( + self, + ) -> typing.Callable[ + [translation_service.GetGlossaryRequest], + typing.Union[ + translation_service.Glossary, typing.Awaitable[translation_service.Glossary] + ], + ]: + raise NotImplementedError() + + @property + def delete_glossary( + self, + ) -> typing.Callable[ + [translation_service.DeleteGlossaryRequest], + typing.Union[operations.Operation, typing.Awaitable[operations.Operation]], + ]: + raise NotImplementedError() + + +__all__ = ("TranslationServiceTransport",) diff --git a/google/cloud/translate_v3/services/translation_service/transports/grpc.py b/google/cloud/translate_v3/services/translation_service/transports/grpc.py new file mode 100644 index 00000000..443d20f7 --- /dev/null +++ b/google/cloud/translate_v3/services/translation_service/transports/grpc.py @@ -0,0 +1,463 @@ +# -*- 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 operations_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.translate_v3.types import translation_service +from google.longrunning import operations_pb2 as operations # type: ignore + +from .base import TranslationServiceTransport + + +class TranslationServiceGrpcTransport(TranslationServiceTransport): + """gRPC backend transport for TranslationService. + + Provides natural language translation operations. + + 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 = "translate.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 + ) -> 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. + + 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, + ) + + @classmethod + def create_channel( + cls, + host: str = "translate.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 operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Sanity check: Only create a new client if we do not already have one. + if "operations_client" not in self.__dict__: + self.__dict__["operations_client"] = operations_v1.OperationsClient( + self.grpc_channel + ) + + # Return the client from cache. + return self.__dict__["operations_client"] + + @property + def translate_text( + self, + ) -> Callable[ + [translation_service.TranslateTextRequest], + translation_service.TranslateTextResponse, + ]: + r"""Return a callable for the translate text method over gRPC. + + Translates input text and returns translated text. + + Returns: + Callable[[~.TranslateTextRequest], + ~.TranslateTextResponse]: + 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 "translate_text" not in self._stubs: + self._stubs["translate_text"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/TranslateText", + request_serializer=translation_service.TranslateTextRequest.serialize, + response_deserializer=translation_service.TranslateTextResponse.deserialize, + ) + return self._stubs["translate_text"] + + @property + def detect_language( + self, + ) -> Callable[ + [translation_service.DetectLanguageRequest], + translation_service.DetectLanguageResponse, + ]: + r"""Return a callable for the detect language method over gRPC. + + Detects the language of text within a request. + + Returns: + Callable[[~.DetectLanguageRequest], + ~.DetectLanguageResponse]: + 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 "detect_language" not in self._stubs: + self._stubs["detect_language"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/DetectLanguage", + request_serializer=translation_service.DetectLanguageRequest.serialize, + response_deserializer=translation_service.DetectLanguageResponse.deserialize, + ) + return self._stubs["detect_language"] + + @property + def get_supported_languages( + self, + ) -> Callable[ + [translation_service.GetSupportedLanguagesRequest], + translation_service.SupportedLanguages, + ]: + r"""Return a callable for the get supported languages method over gRPC. + + Returns a list of supported languages for + translation. + + Returns: + Callable[[~.GetSupportedLanguagesRequest], + ~.SupportedLanguages]: + 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_supported_languages" not in self._stubs: + self._stubs["get_supported_languages"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/GetSupportedLanguages", + request_serializer=translation_service.GetSupportedLanguagesRequest.serialize, + response_deserializer=translation_service.SupportedLanguages.deserialize, + ) + return self._stubs["get_supported_languages"] + + @property + def batch_translate_text( + self, + ) -> Callable[ + [translation_service.BatchTranslateTextRequest], operations.Operation + ]: + r"""Return a callable for the batch translate text method over gRPC. + + Translates a large volume of text in asynchronous + batch mode. This function provides real-time output as + the inputs are being processed. If caller cancels a + request, the partial results (for an input file, it's + all or nothing) may still be available on the specified + output location. + This call returns immediately and you can + use google.longrunning.Operation.name to poll the status + of the call. + + Returns: + Callable[[~.BatchTranslateTextRequest], + ~.Operation]: + 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 "batch_translate_text" not in self._stubs: + self._stubs["batch_translate_text"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/BatchTranslateText", + request_serializer=translation_service.BatchTranslateTextRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["batch_translate_text"] + + @property + def create_glossary( + self, + ) -> Callable[[translation_service.CreateGlossaryRequest], operations.Operation]: + r"""Return a callable for the create glossary method over gRPC. + + Creates a glossary and returns the long-running operation. + Returns NOT_FOUND, if the project doesn't exist. + + Returns: + Callable[[~.CreateGlossaryRequest], + ~.Operation]: + 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 "create_glossary" not in self._stubs: + self._stubs["create_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/CreateGlossary", + request_serializer=translation_service.CreateGlossaryRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["create_glossary"] + + @property + def list_glossaries( + self, + ) -> Callable[ + [translation_service.ListGlossariesRequest], + translation_service.ListGlossariesResponse, + ]: + r"""Return a callable for the list glossaries method over gRPC. + + Lists glossaries in a project. Returns NOT_FOUND, if the project + doesn't exist. + + Returns: + Callable[[~.ListGlossariesRequest], + ~.ListGlossariesResponse]: + 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_glossaries" not in self._stubs: + self._stubs["list_glossaries"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/ListGlossaries", + request_serializer=translation_service.ListGlossariesRequest.serialize, + response_deserializer=translation_service.ListGlossariesResponse.deserialize, + ) + return self._stubs["list_glossaries"] + + @property + def get_glossary( + self, + ) -> Callable[ + [translation_service.GetGlossaryRequest], translation_service.Glossary + ]: + r"""Return a callable for the get glossary method over gRPC. + + Gets a glossary. Returns NOT_FOUND, if the glossary doesn't + exist. + + Returns: + Callable[[~.GetGlossaryRequest], + ~.Glossary]: + 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_glossary" not in self._stubs: + self._stubs["get_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/GetGlossary", + request_serializer=translation_service.GetGlossaryRequest.serialize, + response_deserializer=translation_service.Glossary.deserialize, + ) + return self._stubs["get_glossary"] + + @property + def delete_glossary( + self, + ) -> Callable[[translation_service.DeleteGlossaryRequest], operations.Operation]: + r"""Return a callable for the delete glossary method over gRPC. + + Deletes a glossary, or cancels glossary construction if the + glossary isn't created yet. Returns NOT_FOUND, if the glossary + doesn't exist. + + Returns: + Callable[[~.DeleteGlossaryRequest], + ~.Operation]: + 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_glossary" not in self._stubs: + self._stubs["delete_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/DeleteGlossary", + request_serializer=translation_service.DeleteGlossaryRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["delete_glossary"] + + +__all__ = ("TranslationServiceGrpcTransport",) diff --git a/google/cloud/translate_v3/services/translation_service/transports/grpc_asyncio.py b/google/cloud/translate_v3/services/translation_service/transports/grpc_asyncio.py new file mode 100644 index 00000000..bcc770e2 --- /dev/null +++ b/google/cloud/translate_v3/services/translation_service/transports/grpc_asyncio.py @@ -0,0 +1,461 @@ +# -*- 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 grpc_helpers_async # type: ignore +from google.api_core import operations_v1 # 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.translate_v3.types import translation_service +from google.longrunning import operations_pb2 as operations # type: ignore + +from .base import TranslationServiceTransport +from .grpc import TranslationServiceGrpcTransport + + +class TranslationServiceGrpcAsyncIOTransport(TranslationServiceTransport): + """gRPC AsyncIO backend transport for TranslationService. + + Provides natural language translation operations. + + 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 = "translate.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 = "translate.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, + ) -> 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. + + 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, + ) + + 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 operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Sanity check: Only create a new client if we do not already have one. + if "operations_client" not in self.__dict__: + self.__dict__["operations_client"] = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self.__dict__["operations_client"] + + @property + def translate_text( + self, + ) -> Callable[ + [translation_service.TranslateTextRequest], + Awaitable[translation_service.TranslateTextResponse], + ]: + r"""Return a callable for the translate text method over gRPC. + + Translates input text and returns translated text. + + Returns: + Callable[[~.TranslateTextRequest], + Awaitable[~.TranslateTextResponse]]: + 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 "translate_text" not in self._stubs: + self._stubs["translate_text"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/TranslateText", + request_serializer=translation_service.TranslateTextRequest.serialize, + response_deserializer=translation_service.TranslateTextResponse.deserialize, + ) + return self._stubs["translate_text"] + + @property + def detect_language( + self, + ) -> Callable[ + [translation_service.DetectLanguageRequest], + Awaitable[translation_service.DetectLanguageResponse], + ]: + r"""Return a callable for the detect language method over gRPC. + + Detects the language of text within a request. + + Returns: + Callable[[~.DetectLanguageRequest], + Awaitable[~.DetectLanguageResponse]]: + 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 "detect_language" not in self._stubs: + self._stubs["detect_language"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/DetectLanguage", + request_serializer=translation_service.DetectLanguageRequest.serialize, + response_deserializer=translation_service.DetectLanguageResponse.deserialize, + ) + return self._stubs["detect_language"] + + @property + def get_supported_languages( + self, + ) -> Callable[ + [translation_service.GetSupportedLanguagesRequest], + Awaitable[translation_service.SupportedLanguages], + ]: + r"""Return a callable for the get supported languages method over gRPC. + + Returns a list of supported languages for + translation. + + Returns: + Callable[[~.GetSupportedLanguagesRequest], + Awaitable[~.SupportedLanguages]]: + 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_supported_languages" not in self._stubs: + self._stubs["get_supported_languages"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/GetSupportedLanguages", + request_serializer=translation_service.GetSupportedLanguagesRequest.serialize, + response_deserializer=translation_service.SupportedLanguages.deserialize, + ) + return self._stubs["get_supported_languages"] + + @property + def batch_translate_text( + self, + ) -> Callable[ + [translation_service.BatchTranslateTextRequest], Awaitable[operations.Operation] + ]: + r"""Return a callable for the batch translate text method over gRPC. + + Translates a large volume of text in asynchronous + batch mode. This function provides real-time output as + the inputs are being processed. If caller cancels a + request, the partial results (for an input file, it's + all or nothing) may still be available on the specified + output location. + This call returns immediately and you can + use google.longrunning.Operation.name to poll the status + of the call. + + Returns: + Callable[[~.BatchTranslateTextRequest], + Awaitable[~.Operation]]: + 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 "batch_translate_text" not in self._stubs: + self._stubs["batch_translate_text"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/BatchTranslateText", + request_serializer=translation_service.BatchTranslateTextRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["batch_translate_text"] + + @property + def create_glossary( + self, + ) -> Callable[ + [translation_service.CreateGlossaryRequest], Awaitable[operations.Operation] + ]: + r"""Return a callable for the create glossary method over gRPC. + + Creates a glossary and returns the long-running operation. + Returns NOT_FOUND, if the project doesn't exist. + + Returns: + Callable[[~.CreateGlossaryRequest], + Awaitable[~.Operation]]: + 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 "create_glossary" not in self._stubs: + self._stubs["create_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/CreateGlossary", + request_serializer=translation_service.CreateGlossaryRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["create_glossary"] + + @property + def list_glossaries( + self, + ) -> Callable[ + [translation_service.ListGlossariesRequest], + Awaitable[translation_service.ListGlossariesResponse], + ]: + r"""Return a callable for the list glossaries method over gRPC. + + Lists glossaries in a project. Returns NOT_FOUND, if the project + doesn't exist. + + Returns: + Callable[[~.ListGlossariesRequest], + Awaitable[~.ListGlossariesResponse]]: + 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_glossaries" not in self._stubs: + self._stubs["list_glossaries"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/ListGlossaries", + request_serializer=translation_service.ListGlossariesRequest.serialize, + response_deserializer=translation_service.ListGlossariesResponse.deserialize, + ) + return self._stubs["list_glossaries"] + + @property + def get_glossary( + self, + ) -> Callable[ + [translation_service.GetGlossaryRequest], + Awaitable[translation_service.Glossary], + ]: + r"""Return a callable for the get glossary method over gRPC. + + Gets a glossary. Returns NOT_FOUND, if the glossary doesn't + exist. + + Returns: + Callable[[~.GetGlossaryRequest], + Awaitable[~.Glossary]]: + 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_glossary" not in self._stubs: + self._stubs["get_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/GetGlossary", + request_serializer=translation_service.GetGlossaryRequest.serialize, + response_deserializer=translation_service.Glossary.deserialize, + ) + return self._stubs["get_glossary"] + + @property + def delete_glossary( + self, + ) -> Callable[ + [translation_service.DeleteGlossaryRequest], Awaitable[operations.Operation] + ]: + r"""Return a callable for the delete glossary method over gRPC. + + Deletes a glossary, or cancels glossary construction if the + glossary isn't created yet. Returns NOT_FOUND, if the glossary + doesn't exist. + + Returns: + Callable[[~.DeleteGlossaryRequest], + Awaitable[~.Operation]]: + 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_glossary" not in self._stubs: + self._stubs["delete_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3.TranslationService/DeleteGlossary", + request_serializer=translation_service.DeleteGlossaryRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["delete_glossary"] + + +__all__ = ("TranslationServiceGrpcAsyncIOTransport",) diff --git a/google/cloud/translate_v3/types.py b/google/cloud/translate_v3/types.py deleted file mode 100644 index d95b3650..00000000 --- a/google/cloud/translate_v3/types.py +++ /dev/null @@ -1,54 +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. - - -from __future__ import absolute_import -import sys - -from google.api_core.protobuf_helpers import get_messages - -from google.cloud.translate_v3.proto import translation_service_pb2 -from google.longrunning import operations_pb2 -from google.protobuf import any_pb2 -from google.protobuf import timestamp_pb2 -from google.rpc import status_pb2 - - -_shared_modules = [ - operations_pb2, - any_pb2, - timestamp_pb2, - status_pb2, -] - -_local_modules = [ - translation_service_pb2, -] - -names = [] - -for module in _shared_modules: # pragma: NO COVER - 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.translate_v3.types" - setattr(sys.modules[__name__], name, message) - names.append(name) - - -__all__ = tuple(sorted(names)) diff --git a/google/cloud/translate_v3/types/__init__.py b/google/cloud/translate_v3/types/__init__.py new file mode 100644 index 00000000..60c0f41d --- /dev/null +++ b/google/cloud/translate_v3/types/__init__.py @@ -0,0 +1,77 @@ +# -*- 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 .translation_service import ( + TranslateTextGlossaryConfig, + TranslateTextRequest, + TranslateTextResponse, + Translation, + DetectLanguageRequest, + DetectedLanguage, + DetectLanguageResponse, + GetSupportedLanguagesRequest, + SupportedLanguages, + SupportedLanguage, + GcsSource, + InputConfig, + GcsDestination, + OutputConfig, + BatchTranslateTextRequest, + BatchTranslateMetadata, + BatchTranslateResponse, + GlossaryInputConfig, + Glossary, + CreateGlossaryRequest, + GetGlossaryRequest, + DeleteGlossaryRequest, + ListGlossariesRequest, + ListGlossariesResponse, + CreateGlossaryMetadata, + DeleteGlossaryMetadata, + DeleteGlossaryResponse, +) + + +__all__ = ( + "TranslateTextGlossaryConfig", + "TranslateTextRequest", + "TranslateTextResponse", + "Translation", + "DetectLanguageRequest", + "DetectedLanguage", + "DetectLanguageResponse", + "GetSupportedLanguagesRequest", + "SupportedLanguages", + "SupportedLanguage", + "GcsSource", + "InputConfig", + "GcsDestination", + "OutputConfig", + "BatchTranslateTextRequest", + "BatchTranslateMetadata", + "BatchTranslateResponse", + "GlossaryInputConfig", + "Glossary", + "CreateGlossaryRequest", + "GetGlossaryRequest", + "DeleteGlossaryRequest", + "ListGlossariesRequest", + "ListGlossariesResponse", + "CreateGlossaryMetadata", + "DeleteGlossaryMetadata", + "DeleteGlossaryResponse", +) diff --git a/google/cloud/translate_v3/types/translation_service.py b/google/cloud/translate_v3/types/translation_service.py new file mode 100644 index 00000000..ad14007a --- /dev/null +++ b/google/cloud/translate_v3/types/translation_service.py @@ -0,0 +1,1028 @@ +# -*- 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.cloud.translate.v3", + manifest={ + "TranslateTextGlossaryConfig", + "TranslateTextRequest", + "TranslateTextResponse", + "Translation", + "DetectLanguageRequest", + "DetectedLanguage", + "DetectLanguageResponse", + "GetSupportedLanguagesRequest", + "SupportedLanguages", + "SupportedLanguage", + "GcsSource", + "InputConfig", + "GcsDestination", + "OutputConfig", + "BatchTranslateTextRequest", + "BatchTranslateMetadata", + "BatchTranslateResponse", + "GlossaryInputConfig", + "Glossary", + "CreateGlossaryRequest", + "GetGlossaryRequest", + "DeleteGlossaryRequest", + "ListGlossariesRequest", + "ListGlossariesResponse", + "CreateGlossaryMetadata", + "DeleteGlossaryMetadata", + "DeleteGlossaryResponse", + }, +) + + +class TranslateTextGlossaryConfig(proto.Message): + r"""Configures which glossary should be used for a specific + target language, and defines options for applying that glossary. + + Attributes: + glossary (str): + Required. Specifies the glossary used for this translation. + Use this format: projects/\ */locations/*/glossaries/\* + ignore_case (bool): + Optional. Indicates match is case- + nsensitive. Default value is false if missing. + """ + + glossary = proto.Field(proto.STRING, number=1) + + ignore_case = proto.Field(proto.BOOL, number=2) + + +class TranslateTextRequest(proto.Message): + r"""The request message for synchronous translation. + + Attributes: + contents (Sequence[str]): + Required. The content of the input in string + format. We recommend the total content be less + than 30k codepoints. Use BatchTranslateText for + larger text. + mime_type (str): + Optional. The format of the source text, for + example, "text/html", "text/plain". If left + blank, the MIME type defaults to "text/html". + source_language_code (str): + Optional. The BCP-47 language code of the + input text if known, for example, "en-US" or + "sr-Latn". Supported language codes are listed + in Language Support. If the source language + isn't specified, the API attempts to identify + the source language automatically and returns + the source language within the response. + target_language_code (str): + Required. The BCP-47 language code to use for + translation of the input text, set to one of the + language codes listed in Language Support. + parent (str): + Required. Project or location to make a call. Must refer to + a caller's project. + + Format: ``projects/{project-number-or-id}`` or + ``projects/{project-number-or-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Non-global location is required for requests using AutoML + models or custom glossaries. + + Models and glossaries must be within the same region (have + same location-id), otherwise an INVALID_ARGUMENT (400) error + is returned. + model (str): + Optional. The ``model`` type requested for this translation. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` + + For global (non-regionalized) requests, use ``location-id`` + ``global``. For example, + ``projects/{project-number-or-id}/locations/global/models/general/nmt``. + + If missing, the system decides which google base model to + use. + glossary_config (~.translation_service.TranslateTextGlossaryConfig): + Optional. Glossary to be applied. The glossary must be + within the same region (have the same location-id) as the + model, otherwise an INVALID_ARGUMENT (400) error is + returned. + labels (Sequence[~.translation_service.TranslateTextRequest.LabelsEntry]): + Optional. The labels with user-defined + metadata for the request. + Label keys and values can be no longer than 63 + characters (Unicode codepoints), can only + contain lowercase letters, numeric characters, + underscores and dashes. International characters + are allowed. Label values are optional. Label + keys must start with a letter. + See + https://cloud.google.com/translate/docs/labels + for more information. + """ + + contents = proto.RepeatedField(proto.STRING, number=1) + + mime_type = proto.Field(proto.STRING, number=3) + + source_language_code = proto.Field(proto.STRING, number=4) + + target_language_code = proto.Field(proto.STRING, number=5) + + parent = proto.Field(proto.STRING, number=8) + + model = proto.Field(proto.STRING, number=6) + + glossary_config = proto.Field( + proto.MESSAGE, number=7, message=TranslateTextGlossaryConfig, + ) + + labels = proto.MapField(proto.STRING, proto.STRING, number=10) + + +class TranslateTextResponse(proto.Message): + r""" + + Attributes: + translations (Sequence[~.translation_service.Translation]): + Text translation responses with no glossary applied. This + field has the same length as + [``contents``][google.cloud.translate.v3.TranslateTextRequest.contents]. + glossary_translations (Sequence[~.translation_service.Translation]): + Text translation responses if a glossary is provided in the + request. This can be the same as + [``translations``][google.cloud.translate.v3.TranslateTextResponse.translations] + if no terms apply. This field has the same length as + [``contents``][google.cloud.translate.v3.TranslateTextRequest.contents]. + """ + + translations = proto.RepeatedField(proto.MESSAGE, number=1, message="Translation",) + + glossary_translations = proto.RepeatedField( + proto.MESSAGE, number=3, message="Translation", + ) + + +class Translation(proto.Message): + r"""A single translation response. + + Attributes: + translated_text (str): + Text translated into the target language. + model (str): + Only present when ``model`` is present in the request. + ``model`` here is normalized to have project number. + + For example: If the ``model`` requested in + TranslationTextRequest is + ``projects/{project-id}/locations/{location-id}/models/general/nmt`` + then ``model`` here would be normalized to + ``projects/{project-number}/locations/{location-id}/models/general/nmt``. + detected_language_code (str): + The BCP-47 language code of source text in + the initial request, detected automatically, if + no source language was passed within the initial + request. If the source language was passed, + auto-detection of the language does not occur + and this field is empty. + glossary_config (~.translation_service.TranslateTextGlossaryConfig): + The ``glossary_config`` used for this translation. + """ + + translated_text = proto.Field(proto.STRING, number=1) + + model = proto.Field(proto.STRING, number=2) + + detected_language_code = proto.Field(proto.STRING, number=4) + + glossary_config = proto.Field( + proto.MESSAGE, number=3, message=TranslateTextGlossaryConfig, + ) + + +class DetectLanguageRequest(proto.Message): + r"""The request message for language detection. + + Attributes: + parent (str): + Required. Project or location to make a call. Must refer to + a caller's project. + + Format: + ``projects/{project-number-or-id}/locations/{location-id}`` + or ``projects/{project-number-or-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Only models within the same region (has same location-id) + can be used. Otherwise an INVALID_ARGUMENT (400) error is + returned. + model (str): + Optional. The language detection model to be used. + + Format: + ``projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}`` + + Only one language detection model is currently supported: + ``projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default``. + + If not specified, the default model is used. + content (str): + The content of the input stored as a string. + mime_type (str): + Optional. The format of the source text, for + example, "text/html", "text/plain". If left + blank, the MIME type defaults to "text/html". + labels (Sequence[~.translation_service.DetectLanguageRequest.LabelsEntry]): + Optional. The labels with user-defined + metadata for the request. + Label keys and values can be no longer than 63 + characters (Unicode codepoints), can only + contain lowercase letters, numeric characters, + underscores and dashes. International characters + are allowed. Label values are optional. Label + keys must start with a letter. + See + https://cloud.google.com/translate/docs/labels + for more information. + """ + + parent = proto.Field(proto.STRING, number=5) + + model = proto.Field(proto.STRING, number=4) + + content = proto.Field(proto.STRING, number=1, oneof="source") + + mime_type = proto.Field(proto.STRING, number=3) + + labels = proto.MapField(proto.STRING, proto.STRING, number=6) + + +class DetectedLanguage(proto.Message): + r"""The response message for language detection. + + Attributes: + language_code (str): + The BCP-47 language code of source content in + the request, detected automatically. + confidence (float): + The confidence of the detection result for + this language. + """ + + language_code = proto.Field(proto.STRING, number=1) + + confidence = proto.Field(proto.FLOAT, number=2) + + +class DetectLanguageResponse(proto.Message): + r"""The response message for language detection. + + Attributes: + languages (Sequence[~.translation_service.DetectedLanguage]): + A list of detected languages sorted by + detection confidence in descending order. The + most probable language first. + """ + + languages = proto.RepeatedField(proto.MESSAGE, number=1, message=DetectedLanguage,) + + +class GetSupportedLanguagesRequest(proto.Message): + r"""The request message for discovering supported languages. + + Attributes: + parent (str): + Required. Project or location to make a call. Must refer to + a caller's project. + + Format: ``projects/{project-number-or-id}`` or + ``projects/{project-number-or-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-number-or-id}/locations/global`` or + ``projects/{project-number-or-id}``. + + Non-global location is required for AutoML models. + + Only models within the same region (have same location-id) + can be used, otherwise an INVALID_ARGUMENT (400) error is + returned. + display_language_code (str): + Optional. The language to use to return + localized, human readable names of supported + languages. If missing, then display names are + not returned in a response. + model (str): + Optional. Get supported languages of this model. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` + + Returns languages supported by the specified model. If + missing, we get supported languages of Google general base + (PBMT) model. + """ + + parent = proto.Field(proto.STRING, number=3) + + display_language_code = proto.Field(proto.STRING, number=1) + + model = proto.Field(proto.STRING, number=2) + + +class SupportedLanguages(proto.Message): + r"""The response message for discovering supported languages. + + Attributes: + languages (Sequence[~.translation_service.SupportedLanguage]): + A list of supported language responses. This + list contains an entry for each language the + Translation API supports. + """ + + languages = proto.RepeatedField( + proto.MESSAGE, number=1, message="SupportedLanguage", + ) + + +class SupportedLanguage(proto.Message): + r"""A single supported language response corresponds to + information related to one supported language. + + Attributes: + language_code (str): + Supported language code, generally consisting + of its ISO 639-1 identifier, for example, 'en', + 'ja'. In certain cases, BCP-47 codes including + language and region identifiers are returned + (for example, 'zh-TW' and 'zh-CN') + display_name (str): + Human readable name of the language localized + in the display language specified in the + request. + support_source (bool): + Can be used as source language. + support_target (bool): + Can be used as target language. + """ + + language_code = proto.Field(proto.STRING, number=1) + + display_name = proto.Field(proto.STRING, number=2) + + support_source = proto.Field(proto.BOOL, number=3) + + support_target = proto.Field(proto.BOOL, number=4) + + +class GcsSource(proto.Message): + r"""The Google Cloud Storage location for the input content. + + Attributes: + input_uri (str): + Required. Source data URI. For example, + ``gs://my_bucket/my_object``. + """ + + input_uri = proto.Field(proto.STRING, number=1) + + +class InputConfig(proto.Message): + r"""Input configuration for BatchTranslateText request. + + Attributes: + mime_type (str): + Optional. Can be "text/plain" or "text/html". For ``.tsv``, + "text/html" is used if mime_type is missing. For ``.html``, + this field must be "text/html" or empty. For ``.txt``, this + field must be "text/plain" or empty. + gcs_source (~.translation_service.GcsSource): + Required. Google Cloud Storage location for the source + input. This can be a single file (for example, + ``gs://translation-test/input.tsv``) or a wildcard (for + example, ``gs://translation-test/*``). If a file extension + is ``.tsv``, it can contain either one or two columns. The + first column (optional) is the id of the text request. If + the first column is missing, we use the row number (0-based) + from the input file as the ID in the output file. The second + column is the actual text to be translated. We recommend + each row be <= 10K Unicode codepoints, otherwise an error + might be returned. Note that the input tsv must be RFC 4180 + compliant. + + You could use https://github.com/Clever/csvlint to check + potential formatting errors in your tsv file. csvlint + --delimiter='\t' your_input_file.tsv + + The other supported file extensions are ``.txt`` or + ``.html``, which is treated as a single large chunk of text. + """ + + mime_type = proto.Field(proto.STRING, number=1) + + gcs_source = proto.Field( + proto.MESSAGE, number=2, oneof="source", message=GcsSource, + ) + + +class GcsDestination(proto.Message): + r"""The Google Cloud Storage location for the output content. + + Attributes: + output_uri_prefix (str): + Required. There must be no files under 'output_uri_prefix'. + 'output_uri_prefix' must end with "/" and start with + "gs://", otherwise an INVALID_ARGUMENT (400) error is + returned. + """ + + output_uri_prefix = proto.Field(proto.STRING, number=1) + + +class OutputConfig(proto.Message): + r"""Output configuration for BatchTranslateText request. + + Attributes: + gcs_destination (~.translation_service.GcsDestination): + Google Cloud Storage destination for output content. For + every single input file (for example, + gs://a/b/c.[extension]), we generate at most 2 \* n output + files. (n is the # of target_language_codes in the + BatchTranslateTextRequest). + + Output files (tsv) generated are compliant with RFC 4180 + except that record delimiters are '\n' instead of '\r\n'. We + don't provide any way to change record delimiters. + + While the input files are being processed, we write/update + an index file 'index.csv' under 'output_uri_prefix' (for + example, gs://translation-test/index.csv) The index file is + generated/updated as new files are being translated. The + format is: + + input_file,target_language_code,translations_file,errors_file, + glossary_translations_file,glossary_errors_file + + input_file is one file we matched using + gcs_source.input_uri. target_language_code is provided in + the request. translations_file contains the translations. + (details provided below) errors_file contains the errors + during processing of the file. (details below). Both + translations_file and errors_file could be empty strings if + we have no content to output. glossary_translations_file and + glossary_errors_file are always empty strings if the + input_file is tsv. They could also be empty if we have no + content to output. + + Once a row is present in index.csv, the input/output + matching never changes. Callers should also expect all the + content in input_file are processed and ready to be consumed + (that is, no partial output file is written). + + The format of translations_file (for target language code + 'trg') is: + gs://translation_test/a_b_c\_'trg'_translations.[extension] + + If the input file extension is tsv, the output has the + following columns: Column 1: ID of the request provided in + the input, if it's not provided in the input, then the input + row number is used (0-based). Column 2: source sentence. + Column 3: translation without applying a glossary. Empty + string if there is an error. Column 4 (only present if a + glossary is provided in the request): translation after + applying the glossary. Empty string if there is an error + applying the glossary. Could be same string as column 3 if + there is no glossary applied. + + If input file extension is a txt or html, the translation is + directly written to the output file. If glossary is + requested, a separate glossary_translations_file has format + of + gs://translation_test/a_b_c\_'trg'_glossary_translations.[extension] + + The format of errors file (for target language code 'trg') + is: gs://translation_test/a_b_c\_'trg'_errors.[extension] + + If the input file extension is tsv, errors_file contains the + following: Column 1: ID of the request provided in the + input, if it's not provided in the input, then the input row + number is used (0-based). Column 2: source sentence. Column + 3: Error detail for the translation. Could be empty. Column + 4 (only present if a glossary is provided in the request): + Error when applying the glossary. + + If the input file extension is txt or html, + glossary_error_file will be generated that contains error + details. glossary_error_file has format of + gs://translation_test/a_b_c\_'trg'_glossary_errors.[extension] + """ + + gcs_destination = proto.Field( + proto.MESSAGE, number=1, oneof="destination", message=GcsDestination, + ) + + +class BatchTranslateTextRequest(proto.Message): + r"""The batch translation request. + + Attributes: + parent (str): + Required. Location to make a call. Must refer to a caller's + project. + + Format: + ``projects/{project-number-or-id}/locations/{location-id}``. + + The ``global`` location is not supported for batch + translation. + + Only AutoML Translation models or glossaries within the same + region (have the same location-id) can be used, otherwise an + INVALID_ARGUMENT (400) error is returned. + source_language_code (str): + Required. Source language code. + target_language_codes (Sequence[str]): + Required. Specify up to 10 language codes + here. + models (Sequence[~.translation_service.BatchTranslateTextRequest.ModelsEntry]): + Optional. The models to use for translation. Map's key is + target language code. Map's value is model name. Value can + be a built-in general model, or an AutoML Translation model. + + The value format depends on model type: + + - AutoML Translation models: + ``projects/{project-number-or-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-number-or-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-number-or-id}/locations/{location-id}/models/general/base`` + + If the map is empty or a specific model is not requested for + a language pair, then default google model (nmt) is used. + input_configs (Sequence[~.translation_service.InputConfig]): + Required. Input configurations. + The total number of files matched should be <= + 1000. The total content size should be <= 100M + Unicode codepoints. The files must use UTF-8 + encoding. + output_config (~.translation_service.OutputConfig): + Required. Output configuration. + If 2 input configs match to the same file (that + is, same input path), we don't generate output + for duplicate inputs. + glossaries (Sequence[~.translation_service.BatchTranslateTextRequest.GlossariesEntry]): + Optional. Glossaries to be applied for + translation. It's keyed by target language code. + labels (Sequence[~.translation_service.BatchTranslateTextRequest.LabelsEntry]): + Optional. The labels with user-defined + metadata for the request. + Label keys and values can be no longer than 63 + characters (Unicode codepoints), can only + contain lowercase letters, numeric characters, + underscores and dashes. International characters + are allowed. Label values are optional. Label + keys must start with a letter. + See + https://cloud.google.com/translate/docs/labels + for more information. + """ + + parent = proto.Field(proto.STRING, number=1) + + source_language_code = proto.Field(proto.STRING, number=2) + + target_language_codes = proto.RepeatedField(proto.STRING, number=3) + + models = proto.MapField(proto.STRING, proto.STRING, number=4) + + input_configs = proto.RepeatedField(proto.MESSAGE, number=5, message=InputConfig,) + + output_config = proto.Field(proto.MESSAGE, number=6, message=OutputConfig,) + + glossaries = proto.MapField( + proto.STRING, proto.MESSAGE, number=7, message=TranslateTextGlossaryConfig, + ) + + labels = proto.MapField(proto.STRING, proto.STRING, number=9) + + +class BatchTranslateMetadata(proto.Message): + r"""State metadata for the batch translation operation. + + Attributes: + state (~.translation_service.BatchTranslateMetadata.State): + The state of the operation. + translated_characters (int): + Number of successfully translated characters + so far (Unicode codepoints). + failed_characters (int): + Number of characters that have failed to + process so far (Unicode codepoints). + total_characters (int): + Total number of characters (Unicode + codepoints). This is the total number of + codepoints from input files times the number of + target languages and appears here shortly after + the call is submitted. + submit_time (~.timestamp.Timestamp): + Time when the operation was submitted. + """ + + class State(proto.Enum): + r"""State of the job.""" + STATE_UNSPECIFIED = 0 + RUNNING = 1 + SUCCEEDED = 2 + FAILED = 3 + CANCELLING = 4 + CANCELLED = 5 + + state = proto.Field(proto.ENUM, number=1, enum=State,) + + translated_characters = proto.Field(proto.INT64, number=2) + + failed_characters = proto.Field(proto.INT64, number=3) + + total_characters = proto.Field(proto.INT64, number=4) + + submit_time = proto.Field(proto.MESSAGE, number=5, message=timestamp.Timestamp,) + + +class BatchTranslateResponse(proto.Message): + r"""Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by BatchTranslateText if at least one sentence is + translated successfully. + + Attributes: + total_characters (int): + Total number of characters (Unicode + codepoints). + translated_characters (int): + Number of successfully translated characters + (Unicode codepoints). + failed_characters (int): + Number of characters that have failed to + process (Unicode codepoints). + submit_time (~.timestamp.Timestamp): + Time when the operation was submitted. + end_time (~.timestamp.Timestamp): + The time when the operation is finished and + [google.longrunning.Operation.done][google.longrunning.Operation.done] + is set to true. + """ + + total_characters = proto.Field(proto.INT64, number=1) + + translated_characters = proto.Field(proto.INT64, number=2) + + failed_characters = proto.Field(proto.INT64, number=3) + + submit_time = proto.Field(proto.MESSAGE, number=4, message=timestamp.Timestamp,) + + end_time = proto.Field(proto.MESSAGE, number=5, message=timestamp.Timestamp,) + + +class GlossaryInputConfig(proto.Message): + r"""Input configuration for glossaries. + + Attributes: + gcs_source (~.translation_service.GcsSource): + Required. Google Cloud Storage location of glossary data. + File format is determined based on the filename extension. + API returns [google.rpc.Code.INVALID_ARGUMENT] for + unsupported URI-s and file formats. Wildcards are not + allowed. This must be a single file in one of the following + formats: + + For unidirectional glossaries: + + - TSV/CSV (``.tsv``/``.csv``): 2 column file, tab- or + comma-separated. The first column is source text. The + second column is target text. The file must not contain + headers. That is, the first row is data, not column + names. + + - TMX (``.tmx``): TMX file with parallel data defining + source/target term pairs. + + For equivalent term sets glossaries: + + - CSV (``.csv``): Multi-column CSV file defining equivalent + glossary terms in multiple languages. The format is + defined for Google Translation Toolkit and documented in + `Use a + glossary `__. + """ + + gcs_source = proto.Field( + proto.MESSAGE, number=1, oneof="source", message=GcsSource, + ) + + +class Glossary(proto.Message): + r"""Represents a glossary built from user provided data. + + Attributes: + name (str): + Required. The resource name of the glossary. Glossary names + have the form + ``projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}``. + language_pair (~.translation_service.Glossary.LanguageCodePair): + Used with unidirectional glossaries. + language_codes_set (~.translation_service.Glossary.LanguageCodesSet): + Used with equivalent term set glossaries. + input_config (~.translation_service.GlossaryInputConfig): + Required. Provides examples to build the + glossary from. Total glossary must not exceed + 10M Unicode codepoints. + entry_count (int): + Output only. The number of entries defined in + the glossary. + submit_time (~.timestamp.Timestamp): + Output only. When CreateGlossary was called. + end_time (~.timestamp.Timestamp): + Output only. When the glossary creation was + finished. + """ + + class LanguageCodePair(proto.Message): + r"""Used with unidirectional glossaries. + + Attributes: + source_language_code (str): + Required. The BCP-47 language code of the input text, for + example, "en-US". Expected to be an exact match for + GlossaryTerm.language_code. + target_language_code (str): + Required. The BCP-47 language code for translation output, + for example, "zh-CN". Expected to be an exact match for + GlossaryTerm.language_code. + """ + + source_language_code = proto.Field(proto.STRING, number=1) + + target_language_code = proto.Field(proto.STRING, number=2) + + class LanguageCodesSet(proto.Message): + r"""Used with equivalent term set glossaries. + + Attributes: + language_codes (Sequence[str]): + The BCP-47 language code(s) for terms defined in the + glossary. All entries are unique. The list contains at least + two entries. Expected to be an exact match for + GlossaryTerm.language_code. + """ + + language_codes = proto.RepeatedField(proto.STRING, number=1) + + name = proto.Field(proto.STRING, number=1) + + language_pair = proto.Field( + proto.MESSAGE, number=3, oneof="languages", message=LanguageCodePair, + ) + + language_codes_set = proto.Field( + proto.MESSAGE, number=4, oneof="languages", message=LanguageCodesSet, + ) + + input_config = proto.Field(proto.MESSAGE, number=5, message=GlossaryInputConfig,) + + entry_count = proto.Field(proto.INT32, number=6) + + submit_time = proto.Field(proto.MESSAGE, number=7, message=timestamp.Timestamp,) + + end_time = proto.Field(proto.MESSAGE, number=8, message=timestamp.Timestamp,) + + +class CreateGlossaryRequest(proto.Message): + r"""Request message for CreateGlossary. + + Attributes: + parent (str): + Required. The project name. + glossary (~.translation_service.Glossary): + Required. The glossary to create. + """ + + parent = proto.Field(proto.STRING, number=1) + + glossary = proto.Field(proto.MESSAGE, number=2, message=Glossary,) + + +class GetGlossaryRequest(proto.Message): + r"""Request message for GetGlossary. + + Attributes: + name (str): + Required. The name of the glossary to + retrieve. + """ + + name = proto.Field(proto.STRING, number=1) + + +class DeleteGlossaryRequest(proto.Message): + r"""Request message for DeleteGlossary. + + Attributes: + name (str): + Required. The name of the glossary to delete. + """ + + name = proto.Field(proto.STRING, number=1) + + +class ListGlossariesRequest(proto.Message): + r"""Request message for ListGlossaries. + + Attributes: + parent (str): + Required. The name of the project from which + to list all of the glossaries. + page_size (int): + Optional. Requested page size. The server may + return fewer glossaries than requested. If + unspecified, the server picks an appropriate + default. + page_token (str): + Optional. A token identifying a page of results the server + should return. Typically, this is the value of + [ListGlossariesResponse.next_page_token] returned from the + previous call to ``ListGlossaries`` method. The first page + is returned if ``page_token``\ is empty or missing. + filter (str): + Optional. Filter specifying constraints of a + list operation. Filtering is not supported yet, + and the parameter currently has no effect. If + missing, no filtering is performed. + """ + + parent = proto.Field(proto.STRING, number=1) + + page_size = proto.Field(proto.INT32, number=2) + + page_token = proto.Field(proto.STRING, number=3) + + filter = proto.Field(proto.STRING, number=4) + + +class ListGlossariesResponse(proto.Message): + r"""Response message for ListGlossaries. + + Attributes: + glossaries (Sequence[~.translation_service.Glossary]): + The list of glossaries for a project. + next_page_token (str): + A token to retrieve a page of results. Pass this value in + the [ListGlossariesRequest.page_token] field in the + subsequent call to ``ListGlossaries`` method to retrieve the + next page of results. + """ + + @property + def raw_page(self): + return self + + glossaries = proto.RepeatedField(proto.MESSAGE, number=1, message=Glossary,) + + next_page_token = proto.Field(proto.STRING, number=2) + + +class CreateGlossaryMetadata(proto.Message): + r"""Stored in the + [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata] + field returned by CreateGlossary. + + Attributes: + name (str): + The name of the glossary that is being + created. + state (~.translation_service.CreateGlossaryMetadata.State): + The current state of the glossary creation + operation. + submit_time (~.timestamp.Timestamp): + The time when the operation was submitted to + the server. + """ + + class State(proto.Enum): + r"""Enumerates the possible states that the creation request can + be in. + """ + STATE_UNSPECIFIED = 0 + RUNNING = 1 + SUCCEEDED = 2 + FAILED = 3 + CANCELLING = 4 + CANCELLED = 5 + + name = proto.Field(proto.STRING, number=1) + + state = proto.Field(proto.ENUM, number=2, enum=State,) + + submit_time = proto.Field(proto.MESSAGE, number=3, message=timestamp.Timestamp,) + + +class DeleteGlossaryMetadata(proto.Message): + r"""Stored in the + [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata] + field returned by DeleteGlossary. + + Attributes: + name (str): + The name of the glossary that is being + deleted. + state (~.translation_service.DeleteGlossaryMetadata.State): + The current state of the glossary deletion + operation. + submit_time (~.timestamp.Timestamp): + The time when the operation was submitted to + the server. + """ + + class State(proto.Enum): + r"""Enumerates the possible states that the creation request can + be in. + """ + STATE_UNSPECIFIED = 0 + RUNNING = 1 + SUCCEEDED = 2 + FAILED = 3 + CANCELLING = 4 + CANCELLED = 5 + + name = proto.Field(proto.STRING, number=1) + + state = proto.Field(proto.ENUM, number=2, enum=State,) + + submit_time = proto.Field(proto.MESSAGE, number=3, message=timestamp.Timestamp,) + + +class DeleteGlossaryResponse(proto.Message): + r"""Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by DeleteGlossary. + + Attributes: + name (str): + The name of the deleted glossary. + submit_time (~.timestamp.Timestamp): + The time when the operation was submitted to + the server. + end_time (~.timestamp.Timestamp): + The time when the glossary deletion is finished and + [google.longrunning.Operation.done][google.longrunning.Operation.done] + is set to true. + """ + + name = proto.Field(proto.STRING, number=1) + + submit_time = proto.Field(proto.MESSAGE, number=2, message=timestamp.Timestamp,) + + end_time = proto.Field(proto.MESSAGE, number=3, message=timestamp.Timestamp,) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/google/cloud/translate_v3beta1/__init__.py b/google/cloud/translate_v3beta1/__init__.py index bebafdf3..b7cd2fe0 100644 --- a/google/cloud/translate_v3beta1/__init__.py +++ b/google/cloud/translate_v3beta1/__init__.py @@ -1,42 +1,77 @@ # -*- 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 -import sys -import warnings - -from google.cloud.translate_v3beta1 import types -from google.cloud.translate_v3beta1.gapic import translation_service_client - - -if sys.version_info[:2] == (2, 7): - message = ( - "A future version of this library will drop support for Python 2.7. " - "More details about Python 2 support for Google Cloud Client Libraries " - "can be found at https://cloud.google.com/python/docs/python2-sunset/" - ) - warnings.warn(message, DeprecationWarning) - - -class TranslationServiceClient(translation_service_client.TranslationServiceClient): - __doc__ = translation_service_client.TranslationServiceClient.__doc__ +from .services.translation_service import TranslationServiceClient +from .types.translation_service import BatchTranslateMetadata +from .types.translation_service import BatchTranslateResponse +from .types.translation_service import BatchTranslateTextRequest +from .types.translation_service import CreateGlossaryMetadata +from .types.translation_service import CreateGlossaryRequest +from .types.translation_service import DeleteGlossaryMetadata +from .types.translation_service import DeleteGlossaryRequest +from .types.translation_service import DeleteGlossaryResponse +from .types.translation_service import DetectLanguageRequest +from .types.translation_service import DetectLanguageResponse +from .types.translation_service import DetectedLanguage +from .types.translation_service import GcsDestination +from .types.translation_service import GcsSource +from .types.translation_service import GetGlossaryRequest +from .types.translation_service import GetSupportedLanguagesRequest +from .types.translation_service import Glossary +from .types.translation_service import GlossaryInputConfig +from .types.translation_service import InputConfig +from .types.translation_service import ListGlossariesRequest +from .types.translation_service import ListGlossariesResponse +from .types.translation_service import OutputConfig +from .types.translation_service import SupportedLanguage +from .types.translation_service import SupportedLanguages +from .types.translation_service import TranslateTextGlossaryConfig +from .types.translation_service import TranslateTextRequest +from .types.translation_service import TranslateTextResponse +from .types.translation_service import Translation __all__ = ( - "types", + "BatchTranslateMetadata", + "BatchTranslateResponse", + "BatchTranslateTextRequest", + "CreateGlossaryMetadata", + "CreateGlossaryRequest", + "DeleteGlossaryMetadata", + "DeleteGlossaryRequest", + "DeleteGlossaryResponse", + "DetectLanguageRequest", + "DetectLanguageResponse", + "DetectedLanguage", + "GcsDestination", + "GcsSource", + "GetGlossaryRequest", + "GetSupportedLanguagesRequest", + "Glossary", + "GlossaryInputConfig", + "InputConfig", + "ListGlossariesRequest", + "ListGlossariesResponse", + "OutputConfig", + "SupportedLanguage", + "SupportedLanguages", + "TranslateTextGlossaryConfig", + "TranslateTextRequest", + "TranslateTextResponse", + "Translation", "TranslationServiceClient", ) diff --git a/google/cloud/translate_v3beta1/gapic/__init__.py b/google/cloud/translate_v3beta1/gapic/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/google/cloud/translate_v3beta1/gapic/translation_service_client.py b/google/cloud/translate_v3beta1/gapic/translation_service_client.py deleted file mode 100644 index 15668dfd..00000000 --- a/google/cloud/translate_v3beta1/gapic/translation_service_client.py +++ /dev/null @@ -1,1096 +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.cloud.translation.v3beta1 TranslationService 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.operation -import google.api_core.operations_v1 -import google.api_core.page_iterator -import google.api_core.path_template -import google.api_core.protobuf_helpers -import grpc - -from google.cloud.translate_v3beta1.gapic import translation_service_client_config -from google.cloud.translate_v3beta1.gapic.transports import ( - translation_service_grpc_transport, -) -from google.cloud.translate_v3beta1.proto import translation_service_pb2 -from google.cloud.translate_v3beta1.proto import translation_service_pb2_grpc -from google.longrunning import operations_pb2 - - -_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution( - "google-cloud-translate", -).version - - -class TranslationServiceClient(object): - """Provides natural language translation operations.""" - - SERVICE_ADDRESS = "translate.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.cloud.translation.v3beta1.TranslationService" - - @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: - TranslationServiceClient: 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 glossary_path(cls, project, location, glossary): - """Return a fully-qualified glossary string.""" - return google.api_core.path_template.expand( - "projects/{project}/locations/{location}/glossaries/{glossary}", - project=project, - location=location, - glossary=glossary, - ) - - @classmethod - def location_path(cls, project, location): - """Return a fully-qualified location string.""" - return google.api_core.path_template.expand( - "projects/{project}/locations/{location}", - project=project, - location=location, - ) - - def __init__( - self, - transport=None, - channel=None, - credentials=None, - client_config=None, - client_info=None, - client_options=None, - ): - """Constructor. - - Args: - transport (Union[~.TranslationServiceGrpcTransport, - Callable[[~.Credentials, type], ~.TranslationServiceGrpcTransport]): 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 = translation_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=translation_service_grpc_transport.TranslationServiceGrpcTransport, - 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 = translation_service_grpc_transport.TranslationServiceGrpcTransport( - 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 translate_text( - self, - contents, - target_language_code, - parent, - mime_type=None, - source_language_code=None, - model=None, - glossary_config=None, - labels=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Translates input text and returns translated text. - - Example: - >>> from google.cloud import translate_v3beta1 - >>> - >>> client = translate_v3beta1.TranslationServiceClient() - >>> - >>> # TODO: Initialize `contents`: - >>> contents = [] - >>> - >>> # TODO: Initialize `target_language_code`: - >>> target_language_code = '' - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> response = client.translate_text(contents, target_language_code, parent) - - Args: - contents (list[str]): Required. The content of the input in string format. - We recommend the total content be less than 30k codepoints. - Use BatchTranslateText for larger text. - target_language_code (str): Required. The BCP-47 language code to use for translation of the input - text, set to one of the language codes listed in Language Support. - parent (str): Required. Project or location to make a call. Must refer to a - caller's project. - - Format: ``projects/{project-id}`` or - ``projects/{project-id}/locations/{location-id}``. - - For global calls, use ``projects/{project-id}/locations/global`` or - ``projects/{project-id}``. - - Non-global location is required for requests using AutoML models or - custom glossaries. - - Models and glossaries must be within the same region (have same - location-id), otherwise an INVALID_ARGUMENT (400) error is returned. - mime_type (str): Optional. The format of the source text, for example, "text/html", - "text/plain". If left blank, the MIME type defaults to "text/html". - source_language_code (str): Optional. The BCP-47 language code of the input text if - known, for example, "en-US" or "sr-Latn". Supported language codes are - listed in Language Support. If the source language isn't specified, the API - attempts to identify the source language automatically and returns the - source language within the response. - model (str): Optional. The ``model`` type requested for this translation. - - The format depends on model type: - - - AutoML Translation models: - ``projects/{project-id}/locations/{location-id}/models/{model-id}`` - - - General (built-in) models: - ``projects/{project-id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-id}/locations/{location-id}/models/general/base`` - - For global (non-regionalized) requests, use ``location-id`` ``global``. - For example, - ``projects/{project-id}/locations/global/models/general/nmt``. - - If missing, the system decides which google base model to use. - glossary_config (Union[dict, ~google.cloud.translate_v3beta1.types.TranslateTextGlossaryConfig]): Optional. Glossary to be applied. The glossary must be within the - same region (have the same location-id) as the model, otherwise an - INVALID_ARGUMENT (400) error is returned. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3beta1.types.TranslateTextGlossaryConfig` - labels (dict[str -> str]): Optional. The labels with user-defined metadata for the request. - - Label keys and values can be no longer than 63 characters - (Unicode codepoints), can only contain lowercase letters, numeric - characters, underscores and dashes. International characters are allowed. - Label values are optional. Label keys must start with a letter. - - See https://cloud.google.com/translate/docs/labels for more information. - 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.translate_v3beta1.types.TranslateTextResponse` 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 "translate_text" not in self._inner_api_calls: - self._inner_api_calls[ - "translate_text" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.translate_text, - default_retry=self._method_configs["TranslateText"].retry, - default_timeout=self._method_configs["TranslateText"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.TranslateTextRequest( - contents=contents, - target_language_code=target_language_code, - parent=parent, - mime_type=mime_type, - source_language_code=source_language_code, - model=model, - glossary_config=glossary_config, - labels=labels, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - 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["translate_text"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def detect_language( - self, - parent, - model=None, - content=None, - mime_type=None, - labels=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Detects the language of text within a request. - - Example: - >>> from google.cloud import translate_v3beta1 - >>> - >>> client = translate_v3beta1.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> response = client.detect_language(parent) - - Args: - parent (str): Required. Project or location to make a call. Must refer to a - caller's project. - - Format: ``projects/{project-id}/locations/{location-id}`` or - ``projects/{project-id}``. - - For global calls, use ``projects/{project-id}/locations/global`` or - ``projects/{project-id}``. - - Only models within the same region (has same location-id) can be used. - Otherwise an INVALID_ARGUMENT (400) error is returned. - model (str): Optional. The language detection model to be used. - - Format: - ``projects/{project-id}/locations/{location-id}/models/language-detection/{model-id}`` - - Only one language detection model is currently supported: - ``projects/{project-id}/locations/{location-id}/models/language-detection/default``. - - If not specified, the default model is used. - content (str): The content of the input stored as a string. - mime_type (str): Optional. The format of the source text, for example, "text/html", - "text/plain". If left blank, the MIME type defaults to "text/html". - labels (dict[str -> str]): Optional. The labels with user-defined metadata for the request. - - Label keys and values can be no longer than 63 characters - (Unicode codepoints), can only contain lowercase letters, numeric - characters, underscores and dashes. International characters are allowed. - Label values are optional. Label keys must start with a letter. - - See https://cloud.google.com/translate/docs/labels for more information. - 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.translate_v3beta1.types.DetectLanguageResponse` 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 "detect_language" not in self._inner_api_calls: - self._inner_api_calls[ - "detect_language" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.detect_language, - default_retry=self._method_configs["DetectLanguage"].retry, - default_timeout=self._method_configs["DetectLanguage"].timeout, - client_info=self._client_info, - ) - - # Sanity check: We have some fields which are mutually exclusive; - # raise ValueError if more than one is sent. - google.api_core.protobuf_helpers.check_oneof(content=content,) - - request = translation_service_pb2.DetectLanguageRequest( - parent=parent, - model=model, - content=content, - mime_type=mime_type, - labels=labels, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - 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["detect_language"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def get_supported_languages( - self, - parent, - display_language_code=None, - model=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Returns a list of supported languages for translation. - - Example: - >>> from google.cloud import translate_v3beta1 - >>> - >>> client = translate_v3beta1.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> response = client.get_supported_languages(parent) - - Args: - parent (str): Required. Project or location to make a call. Must refer to a - caller's project. - - Format: ``projects/{project-id}`` or - ``projects/{project-id}/locations/{location-id}``. - - For global calls, use ``projects/{project-id}/locations/global`` or - ``projects/{project-id}``. - - Non-global location is required for AutoML models. - - Only models within the same region (have same location-id) can be used, - otherwise an INVALID_ARGUMENT (400) error is returned. - display_language_code (str): Optional. The language to use to return localized, human readable names - of supported languages. If missing, then display names are not returned - in a response. - model (str): Optional. Get supported languages of this model. - - The format depends on model type: - - - AutoML Translation models: - ``projects/{project-id}/locations/{location-id}/models/{model-id}`` - - - General (built-in) models: - ``projects/{project-id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-id}/locations/{location-id}/models/general/base`` - - Returns languages supported by the specified model. If missing, we get - supported languages of Google general base (PBMT) model. - 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.translate_v3beta1.types.SupportedLanguages` 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_supported_languages" not in self._inner_api_calls: - self._inner_api_calls[ - "get_supported_languages" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.get_supported_languages, - default_retry=self._method_configs["GetSupportedLanguages"].retry, - default_timeout=self._method_configs["GetSupportedLanguages"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.GetSupportedLanguagesRequest( - parent=parent, display_language_code=display_language_code, model=model, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - 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_supported_languages"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def batch_translate_text( - self, - parent, - source_language_code, - target_language_codes, - input_configs, - output_config, - models=None, - glossaries=None, - labels=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Translates a large volume of text in asynchronous batch mode. - This function provides real-time output as the inputs are being processed. - If caller cancels a request, the partial results (for an input file, it's - all or nothing) may still be available on the specified output location. - - This call returns immediately and you can - use google.longrunning.Operation.name to poll the status of the call. - - Example: - >>> from google.cloud import translate_v3beta1 - >>> - >>> client = translate_v3beta1.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> # TODO: Initialize `source_language_code`: - >>> source_language_code = '' - >>> - >>> # TODO: Initialize `target_language_codes`: - >>> target_language_codes = [] - >>> - >>> # TODO: Initialize `input_configs`: - >>> input_configs = [] - >>> - >>> # TODO: Initialize `output_config`: - >>> output_config = {} - >>> - >>> response = client.batch_translate_text(parent, source_language_code, target_language_codes, input_configs, output_config) - >>> - >>> def callback(operation_future): - ... # Handle result. - ... result = operation_future.result() - >>> - >>> response.add_done_callback(callback) - >>> - >>> # Handle metadata. - >>> metadata = response.metadata() - - Args: - parent (str): Required. Location to make a call. Must refer to a caller's project. - - Format: ``projects/{project-id}/locations/{location-id}``. - - The ``global`` location is not supported for batch translation. - - Only AutoML Translation models or glossaries within the same region - (have the same location-id) can be used, otherwise an INVALID_ARGUMENT - (400) error is returned. - source_language_code (str): Required. Source language code. - target_language_codes (list[str]): Required. Specify up to 10 language codes here. - input_configs (list[Union[dict, ~google.cloud.translate_v3beta1.types.InputConfig]]): Required. Input configurations. - The total number of files matched should be <= 1000. - The total content size should be <= 100M Unicode codepoints. - The files must use UTF-8 encoding. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3beta1.types.InputConfig` - output_config (Union[dict, ~google.cloud.translate_v3beta1.types.OutputConfig]): Required. Output configuration. - If 2 input configs match to the same file (that is, same input path), - we don't generate output for duplicate inputs. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3beta1.types.OutputConfig` - models (dict[str -> str]): Optional. The models to use for translation. Map's key is target - language code. Map's value is model name. Value can be a built-in - general model, or an AutoML Translation model. - - The value format depends on model type: - - - AutoML Translation models: - ``projects/{project-id}/locations/{location-id}/models/{model-id}`` - - - General (built-in) models: - ``projects/{project-id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-id}/locations/{location-id}/models/general/base`` - - If the map is empty or a specific model is not requested for a language - pair, then default google model (nmt) is used. - glossaries (dict[str -> Union[dict, ~google.cloud.translate_v3beta1.types.TranslateTextGlossaryConfig]]): Optional. Glossaries to be applied for translation. - It's keyed by target language code. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3beta1.types.TranslateTextGlossaryConfig` - labels (dict[str -> str]): Optional. The labels with user-defined metadata for the request. - - Label keys and values can be no longer than 63 characters - (Unicode codepoints), can only contain lowercase letters, numeric - characters, underscores and dashes. International characters are allowed. - Label values are optional. Label keys must start with a letter. - - See https://cloud.google.com/translate/docs/labels for more information. - 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.translate_v3beta1.types._OperationFuture` 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 "batch_translate_text" not in self._inner_api_calls: - self._inner_api_calls[ - "batch_translate_text" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.batch_translate_text, - default_retry=self._method_configs["BatchTranslateText"].retry, - default_timeout=self._method_configs["BatchTranslateText"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.BatchTranslateTextRequest( - parent=parent, - source_language_code=source_language_code, - target_language_codes=target_language_codes, - input_configs=input_configs, - output_config=output_config, - models=models, - glossaries=glossaries, - labels=labels, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - operation = self._inner_api_calls["batch_translate_text"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - return google.api_core.operation.from_gapic( - operation, - self.transport._operations_client, - translation_service_pb2.BatchTranslateResponse, - metadata_type=translation_service_pb2.BatchTranslateMetadata, - ) - - def create_glossary( - self, - parent, - glossary, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Creates a glossary and returns the long-running operation. Returns - NOT_FOUND, if the project doesn't exist. - - Example: - >>> from google.cloud import translate_v3beta1 - >>> - >>> client = translate_v3beta1.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> # TODO: Initialize `glossary`: - >>> glossary = {} - >>> - >>> response = client.create_glossary(parent, glossary) - >>> - >>> def callback(operation_future): - ... # Handle result. - ... result = operation_future.result() - >>> - >>> response.add_done_callback(callback) - >>> - >>> # Handle metadata. - >>> metadata = response.metadata() - - Args: - parent (str): Required. The project name. - glossary (Union[dict, ~google.cloud.translate_v3beta1.types.Glossary]): Required. The glossary to create. - - If a dict is provided, it must be of the same form as the protobuf - message :class:`~google.cloud.translate_v3beta1.types.Glossary` - 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.translate_v3beta1.types._OperationFuture` 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 "create_glossary" not in self._inner_api_calls: - self._inner_api_calls[ - "create_glossary" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.create_glossary, - default_retry=self._method_configs["CreateGlossary"].retry, - default_timeout=self._method_configs["CreateGlossary"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.CreateGlossaryRequest( - parent=parent, glossary=glossary, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - operation = self._inner_api_calls["create_glossary"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - return google.api_core.operation.from_gapic( - operation, - self.transport._operations_client, - translation_service_pb2.Glossary, - metadata_type=translation_service_pb2.CreateGlossaryMetadata, - ) - - def list_glossaries( - self, - parent, - page_size=None, - filter_=None, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Lists glossaries in a project. Returns NOT_FOUND, if the project - doesn't exist. - - Example: - >>> from google.cloud import translate_v3beta1 - >>> - >>> client = translate_v3beta1.TranslationServiceClient() - >>> - >>> parent = client.location_path('[PROJECT]', '[LOCATION]') - >>> - >>> # Iterate over all results - >>> for element in client.list_glossaries(parent): - ... # process element - ... pass - >>> - >>> - >>> # Alternatively: - >>> - >>> # Iterate over results one page at a time - >>> for page in client.list_glossaries(parent).pages: - ... for element in page: - ... # process element - ... pass - - Args: - parent (str): Required. The name of the project from which to list all of the glossaries. - 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. - filter_ (str): Optional. Filter specifying constraints of a list operation. - Filtering is not supported yet, and the parameter currently has no effect. - If missing, no filtering is performed. - 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.translate_v3beta1.types.Glossary` 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_glossaries" not in self._inner_api_calls: - self._inner_api_calls[ - "list_glossaries" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.list_glossaries, - default_retry=self._method_configs["ListGlossaries"].retry, - default_timeout=self._method_configs["ListGlossaries"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.ListGlossariesRequest( - parent=parent, page_size=page_size, filter=filter_, - ) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("parent", parent)] - 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_glossaries"], - retry=retry, - timeout=timeout, - metadata=metadata, - ), - request=request, - items_field="glossaries", - request_token_field="page_token", - response_token_field="next_page_token", - ) - return iterator - - def get_glossary( - self, - name, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Gets a glossary. Returns NOT_FOUND, if the glossary doesn't exist. - - Example: - >>> from google.cloud import translate_v3beta1 - >>> - >>> client = translate_v3beta1.TranslationServiceClient() - >>> - >>> name = client.glossary_path('[PROJECT]', '[LOCATION]', '[GLOSSARY]') - >>> - >>> response = client.get_glossary(name) - - Args: - name (str): Required. The name of the glossary to retrieve. - 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.translate_v3beta1.types.Glossary` 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_glossary" not in self._inner_api_calls: - self._inner_api_calls[ - "get_glossary" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.get_glossary, - default_retry=self._method_configs["GetGlossary"].retry, - default_timeout=self._method_configs["GetGlossary"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.GetGlossaryRequest(name=name,) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("name", 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_glossary"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - - def delete_glossary( - self, - name, - retry=google.api_core.gapic_v1.method.DEFAULT, - timeout=google.api_core.gapic_v1.method.DEFAULT, - metadata=None, - ): - """ - Deletes a glossary, or cancels glossary construction if the glossary - isn't created yet. Returns NOT_FOUND, if the glossary doesn't exist. - - Example: - >>> from google.cloud import translate_v3beta1 - >>> - >>> client = translate_v3beta1.TranslationServiceClient() - >>> - >>> name = client.glossary_path('[PROJECT]', '[LOCATION]', '[GLOSSARY]') - >>> - >>> response = client.delete_glossary(name) - >>> - >>> def callback(operation_future): - ... # Handle result. - ... result = operation_future.result() - >>> - >>> response.add_done_callback(callback) - >>> - >>> # Handle metadata. - >>> metadata = response.metadata() - - Args: - name (str): Required. The name of the glossary to delete. - 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.translate_v3beta1.types._OperationFuture` 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_glossary" not in self._inner_api_calls: - self._inner_api_calls[ - "delete_glossary" - ] = google.api_core.gapic_v1.method.wrap_method( - self.transport.delete_glossary, - default_retry=self._method_configs["DeleteGlossary"].retry, - default_timeout=self._method_configs["DeleteGlossary"].timeout, - client_info=self._client_info, - ) - - request = translation_service_pb2.DeleteGlossaryRequest(name=name,) - if metadata is None: - metadata = [] - metadata = list(metadata) - try: - routing_header = [("name", name)] - except AttributeError: - pass - else: - routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( - routing_header - ) - metadata.append(routing_metadata) - - operation = self._inner_api_calls["delete_glossary"]( - request, retry=retry, timeout=timeout, metadata=metadata - ) - return google.api_core.operation.from_gapic( - operation, - self.transport._operations_client, - translation_service_pb2.DeleteGlossaryResponse, - metadata_type=translation_service_pb2.DeleteGlossaryMetadata, - ) diff --git a/google/cloud/translate_v3beta1/gapic/translation_service_client_config.py b/google/cloud/translate_v3beta1/gapic/translation_service_client_config.py deleted file mode 100644 index 228f685c..00000000 --- a/google/cloud/translate_v3beta1/gapic/translation_service_client_config.py +++ /dev/null @@ -1,82 +0,0 @@ -config = { - "interfaces": { - "google.cloud.translation.v3beta1.TranslationService": { - "retry_codes": { - "retry_policy_1_codes": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], - "no_retry_codes": [], - "no_retry_1_codes": [], - }, - "retry_params": { - "retry_policy_1_params": { - "initial_retry_delay_millis": 100, - "retry_delay_multiplier": 1.3, - "max_retry_delay_millis": 60000, - "initial_rpc_timeout_millis": 600000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 600000, - "total_timeout_millis": 600000, - }, - "no_retry_params": { - "initial_retry_delay_millis": 0, - "retry_delay_multiplier": 0.0, - "max_retry_delay_millis": 0, - "initial_rpc_timeout_millis": 0, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 0, - "total_timeout_millis": 0, - }, - "no_retry_1_params": { - "initial_retry_delay_millis": 0, - "retry_delay_multiplier": 0.0, - "max_retry_delay_millis": 0, - "initial_rpc_timeout_millis": 600000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 600000, - "total_timeout_millis": 600000, - }, - }, - "methods": { - "TranslateText": { - "timeout_millis": 600000, - "retry_codes_name": "no_retry_1_codes", - "retry_params_name": "no_retry_1_params", - }, - "DetectLanguage": { - "timeout_millis": 600000, - "retry_codes_name": "no_retry_1_codes", - "retry_params_name": "no_retry_1_params", - }, - "GetSupportedLanguages": { - "timeout_millis": 600000, - "retry_codes_name": "retry_policy_1_codes", - "retry_params_name": "retry_policy_1_params", - }, - "BatchTranslateText": { - "timeout_millis": 600000, - "retry_codes_name": "no_retry_1_codes", - "retry_params_name": "no_retry_1_params", - }, - "CreateGlossary": { - "timeout_millis": 600000, - "retry_codes_name": "no_retry_1_codes", - "retry_params_name": "no_retry_1_params", - }, - "ListGlossaries": { - "timeout_millis": 600000, - "retry_codes_name": "retry_policy_1_codes", - "retry_params_name": "retry_policy_1_params", - }, - "GetGlossary": { - "timeout_millis": 600000, - "retry_codes_name": "retry_policy_1_codes", - "retry_params_name": "retry_policy_1_params", - }, - "DeleteGlossary": { - "timeout_millis": 600000, - "retry_codes_name": "retry_policy_1_codes", - "retry_params_name": "retry_policy_1_params", - }, - }, - } - } -} diff --git a/google/cloud/translate_v3beta1/gapic/transports/__init__.py b/google/cloud/translate_v3beta1/gapic/transports/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/google/cloud/translate_v3beta1/gapic/transports/translation_service_grpc_transport.py b/google/cloud/translate_v3beta1/gapic/transports/translation_service_grpc_transport.py deleted file mode 100644 index 34e754ae..00000000 --- a/google/cloud/translate_v3beta1/gapic/transports/translation_service_grpc_transport.py +++ /dev/null @@ -1,234 +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 -import google.api_core.operations_v1 - -from google.cloud.translate_v3beta1.proto import translation_service_pb2_grpc - - -class TranslationServiceGrpcTransport(object): - """gRPC transport class providing stubs for - google.cloud.translation.v3beta1 TranslationService 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", - "https://www.googleapis.com/auth/cloud-translation", - ) - - def __init__( - self, channel=None, credentials=None, address="translate.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 = { - "translation_service_stub": translation_service_pb2_grpc.TranslationServiceStub( - channel - ), - } - - # Because this API includes a method that returns a - # long-running operation (proto: google.longrunning.Operation), - # instantiate an LRO client. - self._operations_client = google.api_core.operations_v1.OperationsClient( - channel - ) - - @classmethod - def create_channel( - cls, address="translate.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 translate_text(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.translate_text`. - - Translates input text and returns translated text. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].TranslateText - - @property - def detect_language(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.detect_language`. - - Detects the language of text within a request. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].DetectLanguage - - @property - def get_supported_languages(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.get_supported_languages`. - - Returns a list of supported languages for translation. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].GetSupportedLanguages - - @property - def batch_translate_text(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.batch_translate_text`. - - Translates a large volume of text in asynchronous batch mode. - This function provides real-time output as the inputs are being processed. - If caller cancels a request, the partial results (for an input file, it's - all or nothing) may still be available on the specified output location. - - This call returns immediately and you can - use google.longrunning.Operation.name to poll the status of the call. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].BatchTranslateText - - @property - def create_glossary(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.create_glossary`. - - Creates a glossary and returns the long-running operation. Returns - NOT_FOUND, if the project doesn't exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].CreateGlossary - - @property - def list_glossaries(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.list_glossaries`. - - Lists glossaries in a project. Returns NOT_FOUND, if the project - doesn't exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].ListGlossaries - - @property - def get_glossary(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.get_glossary`. - - Gets a glossary. Returns NOT_FOUND, if the glossary doesn't exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].GetGlossary - - @property - def delete_glossary(self): - """Return the gRPC stub for :meth:`TranslationServiceClient.delete_glossary`. - - Deletes a glossary, or cancels glossary construction if the glossary - isn't created yet. Returns NOT_FOUND, if the glossary doesn't exist. - - Returns: - Callable: A callable which accepts the appropriate - deserialized request object and returns a - deserialized response object. - """ - return self._stubs["translation_service_stub"].DeleteGlossary diff --git a/google/cloud/translate_v3beta1/proto/__init__.py b/google/cloud/translate_v3beta1/proto/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/google/cloud/translate_v3beta1/proto/translation_service.proto b/google/cloud/translate_v3beta1/proto/translation_service.proto deleted file mode 100644 index e62a5088..00000000 --- a/google/cloud/translate_v3beta1/proto/translation_service.proto +++ /dev/null @@ -1,902 +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. -// - -syntax = "proto3"; - -package google.cloud.translation.v3beta1; - -import "google/api/annotations.proto"; -import "google/api/client.proto"; -import "google/api/field_behavior.proto"; -import "google/api/resource.proto"; -import "google/longrunning/operations.proto"; -import "google/protobuf/timestamp.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.Cloud.Translate.V3Beta1"; -option go_package = "google.golang.org/genproto/googleapis/cloud/translate/v3beta1;translate"; -option java_multiple_files = true; -option java_outer_classname = "TranslationServiceProto"; -option java_package = "com.google.cloud.translate.v3beta1"; -option php_namespace = "Google\\Cloud\\Translate\\V3beta1"; -option ruby_package = "Google::Cloud::Translate::V3beta1"; - -// Proto file for the Cloud Translation API (v3beta1). - -// Provides natural language translation operations. -service TranslationService { - option (google.api.default_host) = "translate.googleapis.com"; - option (google.api.oauth_scopes) = - "https://www.googleapis.com/auth/cloud-platform," - "https://www.googleapis.com/auth/cloud-translation"; - - // Translates input text and returns translated text. - rpc TranslateText(TranslateTextRequest) returns (TranslateTextResponse) { - option (google.api.http) = { - post: "/v3beta1/{parent=projects/*/locations/*}:translateText" - body: "*" - additional_bindings { - post: "/v3beta1/{parent=projects/*}:translateText" - body: "*" - } - }; - } - - // Detects the language of text within a request. - rpc DetectLanguage(DetectLanguageRequest) returns (DetectLanguageResponse) { - option (google.api.http) = { - post: "/v3beta1/{parent=projects/*/locations/*}:detectLanguage" - body: "*" - additional_bindings { - post: "/v3beta1/{parent=projects/*}:detectLanguage" - body: "*" - } - }; - option (google.api.method_signature) = "parent,model,mime_type"; - } - - // Returns a list of supported languages for translation. - rpc GetSupportedLanguages(GetSupportedLanguagesRequest) returns (SupportedLanguages) { - option (google.api.http) = { - get: "/v3beta1/{parent=projects/*/locations/*}/supportedLanguages" - additional_bindings { - get: "/v3beta1/{parent=projects/*}/supportedLanguages" - } - }; - option (google.api.method_signature) = "parent,display_language_code,model"; - } - - // Translates a large volume of text in asynchronous batch mode. - // This function provides real-time output as the inputs are being processed. - // If caller cancels a request, the partial results (for an input file, it's - // all or nothing) may still be available on the specified output location. - // - // This call returns immediately and you can - // use google.longrunning.Operation.name to poll the status of the call. - rpc BatchTranslateText(BatchTranslateTextRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v3beta1/{parent=projects/*/locations/*}:batchTranslateText" - body: "*" - }; - option (google.longrunning.operation_info) = { - response_type: "BatchTranslateResponse" - metadata_type: "BatchTranslateMetadata" - }; - } - - // Creates a glossary and returns the long-running operation. Returns - // NOT_FOUND, if the project doesn't exist. - rpc CreateGlossary(CreateGlossaryRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v3beta1/{parent=projects/*/locations/*}/glossaries" - body: "glossary" - }; - option (google.api.method_signature) = "parent,glossary"; - option (google.longrunning.operation_info) = { - response_type: "Glossary" - metadata_type: "CreateGlossaryMetadata" - }; - } - - // Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't - // exist. - rpc ListGlossaries(ListGlossariesRequest) returns (ListGlossariesResponse) { - option (google.api.http) = { - get: "/v3beta1/{parent=projects/*/locations/*}/glossaries" - }; - option (google.api.method_signature) = "parent"; - option (google.api.method_signature) = "parent,filter"; - } - - // Gets a glossary. Returns NOT_FOUND, if the glossary doesn't - // exist. - rpc GetGlossary(GetGlossaryRequest) returns (Glossary) { - option (google.api.http) = { - get: "/v3beta1/{name=projects/*/locations/*/glossaries/*}" - }; - option (google.api.method_signature) = "name"; - } - - // Deletes a glossary, or cancels glossary construction - // if the glossary isn't created yet. - // Returns NOT_FOUND, if the glossary doesn't exist. - rpc DeleteGlossary(DeleteGlossaryRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - delete: "/v3beta1/{name=projects/*/locations/*/glossaries/*}" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "DeleteGlossaryResponse" - metadata_type: "DeleteGlossaryMetadata" - }; - } -} - -// Configures which glossary should be used for a specific target language, -// and defines options for applying that glossary. -message TranslateTextGlossaryConfig { - // Required. Specifies the glossary used for this translation. Use - // this format: projects/*/locations/*/glossaries/* - string glossary = 1 [(google.api.field_behavior) = REQUIRED]; - - // Optional. Indicates match is case-insensitive. - // Default value is false if missing. - bool ignore_case = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// The request message for synchronous translation. -message TranslateTextRequest { - // Required. The content of the input in string format. - // We recommend the total content be less than 30k codepoints. - // Use BatchTranslateText for larger text. - repeated string contents = 1 [(google.api.field_behavior) = REQUIRED]; - - // Optional. The format of the source text, for example, "text/html", - // "text/plain". If left blank, the MIME type defaults to "text/html". - string mime_type = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The BCP-47 language code of the input text if - // known, for example, "en-US" or "sr-Latn". Supported language codes are - // listed in Language Support. If the source language isn't specified, the API - // attempts to identify the source language automatically and returns the - // source language within the response. - string source_language_code = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Required. The BCP-47 language code to use for translation of the input - // text, set to one of the language codes listed in Language Support. - string target_language_code = 5 [(google.api.field_behavior) = REQUIRED]; - - // Required. Project or location to make a call. Must refer to a caller's - // project. - // - // Format: `projects/{project-id}` or - // `projects/{project-id}/locations/{location-id}`. - // - // For global calls, use `projects/{project-id}/locations/global` or - // `projects/{project-id}`. - // - // Non-global location is required for requests using AutoML models or - // custom glossaries. - // - // Models and glossaries must be within the same region (have same - // location-id), otherwise an INVALID_ARGUMENT (400) error is returned. - string parent = 8 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. The `model` type requested for this translation. - // - // The format depends on model type: - // - // - AutoML Translation models: - // `projects/{project-id}/locations/{location-id}/models/{model-id}` - // - // - General (built-in) models: - // `projects/{project-id}/locations/{location-id}/models/general/nmt`, - // `projects/{project-id}/locations/{location-id}/models/general/base` - // - // - // For global (non-regionalized) requests, use `location-id` `global`. - // For example, - // `projects/{project-id}/locations/global/models/general/nmt`. - // - // If missing, the system decides which google base model to use. - string model = 6 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Glossary to be applied. The glossary must be - // within the same region (have the same location-id) as the model, otherwise - // an INVALID_ARGUMENT (400) error is returned. - TranslateTextGlossaryConfig glossary_config = 7 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The labels with user-defined metadata for the request. - // - // Label keys and values can be no longer than 63 characters - // (Unicode codepoints), can only contain lowercase letters, numeric - // characters, underscores and dashes. International characters are allowed. - // Label values are optional. Label keys must start with a letter. - // - // See https://cloud.google.com/translate/docs/labels for more information. - map labels = 10 [(google.api.field_behavior) = OPTIONAL]; -} - -message TranslateTextResponse { - // Text translation responses with no glossary applied. - // This field has the same length as - // [`contents`][google.cloud.translation.v3beta1.TranslateTextRequest.contents]. - repeated Translation translations = 1; - - // Text translation responses if a glossary is provided in the request. - // This can be the same as - // [`translations`][google.cloud.translation.v3beta1.TranslateTextResponse.translations] if no terms apply. - // This field has the same length as - // [`contents`][google.cloud.translation.v3beta1.TranslateTextRequest.contents]. - repeated Translation glossary_translations = 3; -} - -// A single translation response. -message Translation { - // Text translated into the target language. - string translated_text = 1; - - // Only present when `model` is present in the request. - // This is same as `model` provided in the request. - string model = 2; - - // The BCP-47 language code of source text in the initial request, detected - // automatically, if no source language was passed within the initial - // request. If the source language was passed, auto-detection of the language - // does not occur and this field is empty. - string detected_language_code = 4; - - // The `glossary_config` used for this translation. - TranslateTextGlossaryConfig glossary_config = 3; -} - -// The request message for language detection. -message DetectLanguageRequest { - // Required. Project or location to make a call. Must refer to a caller's - // project. - // - // Format: `projects/{project-id}/locations/{location-id}` or - // `projects/{project-id}`. - // - // For global calls, use `projects/{project-id}/locations/global` or - // `projects/{project-id}`. - // - // Only models within the same region (has same location-id) can be used. - // Otherwise an INVALID_ARGUMENT (400) error is returned. - string parent = 5 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. The language detection model to be used. - // - // Format: - // `projects/{project-id}/locations/{location-id}/models/language-detection/{model-id}` - // - // Only one language detection model is currently supported: - // `projects/{project-id}/locations/{location-id}/models/language-detection/default`. - // - // If not specified, the default model is used. - string model = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Required. The source of the document from which to detect the language. - oneof source { - // The content of the input stored as a string. - string content = 1; - } - - // Optional. The format of the source text, for example, "text/html", - // "text/plain". If left blank, the MIME type defaults to "text/html". - string mime_type = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The labels with user-defined metadata for the request. - // - // Label keys and values can be no longer than 63 characters - // (Unicode codepoints), can only contain lowercase letters, numeric - // characters, underscores and dashes. International characters are allowed. - // Label values are optional. Label keys must start with a letter. - // - // See https://cloud.google.com/translate/docs/labels for more information. - map labels = 6; -} - -// The response message for language detection. -message DetectedLanguage { - // The BCP-47 language code of source content in the request, detected - // automatically. - string language_code = 1; - - // The confidence of the detection result for this language. - float confidence = 2; -} - -// The response message for language detection. -message DetectLanguageResponse { - // A list of detected languages sorted by detection confidence in descending - // order. The most probable language first. - repeated DetectedLanguage languages = 1; -} - -// The request message for discovering supported languages. -message GetSupportedLanguagesRequest { - // Required. Project or location to make a call. Must refer to a caller's - // project. - // - // Format: `projects/{project-id}` or - // `projects/{project-id}/locations/{location-id}`. - // - // For global calls, use `projects/{project-id}/locations/global` or - // `projects/{project-id}`. - // - // Non-global location is required for AutoML models. - // - // Only models within the same region (have same location-id) can be used, - // otherwise an INVALID_ARGUMENT (400) error is returned. - string parent = 3 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. The language to use to return localized, human readable names - // of supported languages. If missing, then display names are not returned - // in a response. - string display_language_code = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Get supported languages of this model. - // - // The format depends on model type: - // - // - AutoML Translation models: - // `projects/{project-id}/locations/{location-id}/models/{model-id}` - // - // - General (built-in) models: - // `projects/{project-id}/locations/{location-id}/models/general/nmt`, - // `projects/{project-id}/locations/{location-id}/models/general/base` - // - // - // Returns languages supported by the specified model. - // If missing, we get supported languages of Google general base (PBMT) model. - string model = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// The response message for discovering supported languages. -message SupportedLanguages { - // A list of supported language responses. This list contains an entry - // for each language the Translation API supports. - repeated SupportedLanguage languages = 1; -} - -// A single supported language response corresponds to information related -// to one supported language. -message SupportedLanguage { - // Supported language code, generally consisting of its ISO 639-1 - // identifier, for example, 'en', 'ja'. In certain cases, BCP-47 codes - // including language and region identifiers are returned (for example, - // 'zh-TW' and 'zh-CN') - string language_code = 1; - - // Human readable name of the language localized in the display language - // specified in the request. - string display_name = 2; - - // Can be used as source language. - bool support_source = 3; - - // Can be used as target language. - bool support_target = 4; -} - -// The Google Cloud Storage location for the input content. -message GcsSource { - // Required. Source data URI. For example, `gs://my_bucket/my_object`. - string input_uri = 1 [(google.api.field_behavior) = REQUIRED]; -} - -// Input configuration for BatchTranslateText request. -message InputConfig { - // Optional. Can be "text/plain" or "text/html". - // For `.tsv`, "text/html" is used if mime_type is missing. - // For `.html`, this field must be "text/html" or empty. - // For `.txt`, this field must be "text/plain" or empty. - string mime_type = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Required. Specify the input. - oneof source { - // Required. Google Cloud Storage location for the source input. - // This can be a single file (for example, - // `gs://translation-test/input.tsv`) or a wildcard (for example, - // `gs://translation-test/*`). If a file extension is `.tsv`, it can - // contain either one or two columns. The first column (optional) is the id - // of the text request. If the first column is missing, we use the row - // number (0-based) from the input file as the ID in the output file. The - // second column is the actual text to be - // translated. We recommend each row be <= 10K Unicode codepoints, - // otherwise an error might be returned. - // Note that the input tsv must be RFC 4180 compliant. - // - // You could use https://github.com/Clever/csvlint to check potential - // formatting errors in your tsv file. - // csvlint --delimiter='\t' your_input_file.tsv - // - // The other supported file extensions are `.txt` or `.html`, which is - // treated as a single large chunk of text. - GcsSource gcs_source = 2; - } -} - -// The Google Cloud Storage location for the output content. -message GcsDestination { - // Required. There must be no files under 'output_uri_prefix'. - // 'output_uri_prefix' must end with "/" and start with "gs://", otherwise an - // INVALID_ARGUMENT (400) error is returned. - string output_uri_prefix = 1 [(google.api.field_behavior) = REQUIRED]; -} - -// Output configuration for BatchTranslateText request. -message OutputConfig { - // Required. The destination of output. - oneof destination { - // Google Cloud Storage destination for output content. - // For every single input file (for example, gs://a/b/c.[extension]), we - // generate at most 2 * n output files. (n is the # of target_language_codes - // in the BatchTranslateTextRequest). - // - // Output files (tsv) generated are compliant with RFC 4180 except that - // record delimiters are '\n' instead of '\r\n'. We don't provide any way to - // change record delimiters. - // - // While the input files are being processed, we write/update an index file - // 'index.csv' under 'output_uri_prefix' (for example, - // gs://translation-test/index.csv) The index file is generated/updated as - // new files are being translated. The format is: - // - // input_file,target_language_code,translations_file,errors_file, - // glossary_translations_file,glossary_errors_file - // - // input_file is one file we matched using gcs_source.input_uri. - // target_language_code is provided in the request. - // translations_file contains the translations. (details provided below) - // errors_file contains the errors during processing of the file. (details - // below). Both translations_file and errors_file could be empty - // strings if we have no content to output. - // glossary_translations_file and glossary_errors_file are always empty - // strings if the input_file is tsv. They could also be empty if we have no - // content to output. - // - // Once a row is present in index.csv, the input/output matching never - // changes. Callers should also expect all the content in input_file are - // processed and ready to be consumed (that is, no partial output file is - // written). - // - // The format of translations_file (for target language code 'trg') is: - // gs://translation_test/a_b_c_'trg'_translations.[extension] - // - // If the input file extension is tsv, the output has the following - // columns: - // Column 1: ID of the request provided in the input, if it's not - // provided in the input, then the input row number is used (0-based). - // Column 2: source sentence. - // Column 3: translation without applying a glossary. Empty string if there - // is an error. - // Column 4 (only present if a glossary is provided in the request): - // translation after applying the glossary. Empty string if there is an - // error applying the glossary. Could be same string as column 3 if there is - // no glossary applied. - // - // If input file extension is a txt or html, the translation is directly - // written to the output file. If glossary is requested, a separate - // glossary_translations_file has format of - // gs://translation_test/a_b_c_'trg'_glossary_translations.[extension] - // - // The format of errors file (for target language code 'trg') is: - // gs://translation_test/a_b_c_'trg'_errors.[extension] - // - // If the input file extension is tsv, errors_file contains the following: - // Column 1: ID of the request provided in the input, if it's not - // provided in the input, then the input row number is used (0-based). - // Column 2: source sentence. - // Column 3: Error detail for the translation. Could be empty. - // Column 4 (only present if a glossary is provided in the request): - // Error when applying the glossary. - // - // If the input file extension is txt or html, glossary_error_file will be - // generated that contains error details. glossary_error_file has format of - // gs://translation_test/a_b_c_'trg'_glossary_errors.[extension] - GcsDestination gcs_destination = 1; - } -} - -// The batch translation request. -message BatchTranslateTextRequest { - // Required. Location to make a call. Must refer to a caller's project. - // - // Format: `projects/{project-id}/locations/{location-id}`. - // - // The `global` location is not supported for batch translation. - // - // Only AutoML Translation models or glossaries within the same region (have - // the same location-id) can be used, otherwise an INVALID_ARGUMENT (400) - // error is returned. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Required. Source language code. - string source_language_code = 2 [(google.api.field_behavior) = REQUIRED]; - - // Required. Specify up to 10 language codes here. - repeated string target_language_codes = 3 [(google.api.field_behavior) = REQUIRED]; - - // Optional. The models to use for translation. Map's key is target language - // code. Map's value is model name. Value can be a built-in general model, - // or an AutoML Translation model. - // - // The value format depends on model type: - // - // - AutoML Translation models: - // `projects/{project-id}/locations/{location-id}/models/{model-id}` - // - // - General (built-in) models: - // `projects/{project-id}/locations/{location-id}/models/general/nmt`, - // `projects/{project-id}/locations/{location-id}/models/general/base` - // - // - // If the map is empty or a specific model is - // not requested for a language pair, then default google model (nmt) is used. - map models = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Required. Input configurations. - // The total number of files matched should be <= 1000. - // The total content size should be <= 100M Unicode codepoints. - // The files must use UTF-8 encoding. - repeated InputConfig input_configs = 5 [(google.api.field_behavior) = REQUIRED]; - - // Required. Output configuration. - // If 2 input configs match to the same file (that is, same input path), - // we don't generate output for duplicate inputs. - OutputConfig output_config = 6 [(google.api.field_behavior) = REQUIRED]; - - // Optional. Glossaries to be applied for translation. - // It's keyed by target language code. - map glossaries = 7 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The labels with user-defined metadata for the request. - // - // Label keys and values can be no longer than 63 characters - // (Unicode codepoints), can only contain lowercase letters, numeric - // characters, underscores and dashes. International characters are allowed. - // Label values are optional. Label keys must start with a letter. - // - // See https://cloud.google.com/translate/docs/labels for more information. - map labels = 9 [(google.api.field_behavior) = OPTIONAL]; -} - -// State metadata for the batch translation operation. -message BatchTranslateMetadata { - // State of the job. - enum State { - // Invalid. - STATE_UNSPECIFIED = 0; - - // Request is being processed. - RUNNING = 1; - - // The batch is processed, and at least one item was successfully - // processed. - SUCCEEDED = 2; - - // The batch is done and no item was successfully processed. - FAILED = 3; - - // Request is in the process of being canceled after caller invoked - // longrunning.Operations.CancelOperation on the request id. - CANCELLING = 4; - - // The batch is done after the user has called the - // longrunning.Operations.CancelOperation. Any records processed before the - // cancel command are output as specified in the request. - CANCELLED = 5; - } - - // The state of the operation. - State state = 1; - - // Number of successfully translated characters so far (Unicode codepoints). - int64 translated_characters = 2; - - // Number of characters that have failed to process so far (Unicode - // codepoints). - int64 failed_characters = 3; - - // Total number of characters (Unicode codepoints). - // This is the total number of codepoints from input files times the number of - // target languages and appears here shortly after the call is submitted. - int64 total_characters = 4; - - // Time when the operation was submitted. - google.protobuf.Timestamp submit_time = 5; -} - -// Stored in the [google.longrunning.Operation.response][google.longrunning.Operation.response] field returned by -// BatchTranslateText if at least one sentence is translated successfully. -message BatchTranslateResponse { - // Total number of characters (Unicode codepoints). - int64 total_characters = 1; - - // Number of successfully translated characters (Unicode codepoints). - int64 translated_characters = 2; - - // Number of characters that have failed to process (Unicode codepoints). - int64 failed_characters = 3; - - // Time when the operation was submitted. - google.protobuf.Timestamp submit_time = 4; - - // The time when the operation is finished and - // [google.longrunning.Operation.done][google.longrunning.Operation.done] is set to true. - google.protobuf.Timestamp end_time = 5; -} - -// Input configuration for glossaries. -message GlossaryInputConfig { - // Required. Specify the input. - oneof source { - // Required. Google Cloud Storage location of glossary data. - // File format is determined based on the filename extension. API returns - // [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file - // formats. Wildcards are not allowed. This must be a single file in one of - // the following formats: - // - // For unidirectional glossaries: - // - // - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated. - // The first column is source text. The second column is target text. - // The file must not contain headers. That is, the first row is data, not - // column names. - // - // - TMX (`.tmx`): TMX file with parallel data defining source/target term - // pairs. - // - // For equivalent term sets glossaries: - // - // - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms - // in multiple languages. The format is defined for Google Translation - // Toolkit and documented in [Use a - // glossary](https://support.google.com/translatortoolkit/answer/6306379?hl=en). - GcsSource gcs_source = 1; - } -} - -// Represents a glossary built from user provided data. -message Glossary { - option (google.api.resource) = { - type: "translate.googleapis.com/Glossary" - pattern: "projects/{project}/locations/{location}/glossaries/{glossary}" - }; - - // Used with unidirectional glossaries. - message LanguageCodePair { - // Required. The BCP-47 language code of the input text, for example, - // "en-US". Expected to be an exact match for GlossaryTerm.language_code. - string source_language_code = 1; - - // Required. The BCP-47 language code for translation output, for example, - // "zh-CN". Expected to be an exact match for GlossaryTerm.language_code. - string target_language_code = 2; - } - - // Used with equivalent term set glossaries. - message LanguageCodesSet { - // The BCP-47 language code(s) for terms defined in the glossary. - // All entries are unique. The list contains at least two entries. - // Expected to be an exact match for GlossaryTerm.language_code. - repeated string language_codes = 1; - } - - // Required. The resource name of the glossary. Glossary names have the form - // `projects/{project-id}/locations/{location-id}/glossaries/{glossary-id}`. - string name = 1 [(google.api.field_behavior) = REQUIRED]; - - // Languages supported by the glossary. - oneof languages { - // Used with unidirectional glossaries. - LanguageCodePair language_pair = 3; - - // Used with equivalent term set glossaries. - LanguageCodesSet language_codes_set = 4; - } - - // Required. Provides examples to build the glossary from. - // Total glossary must not exceed 10M Unicode codepoints. - GlossaryInputConfig input_config = 5; - - // Output only. The number of entries defined in the glossary. - int32 entry_count = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. When CreateGlossary was called. - google.protobuf.Timestamp submit_time = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. When the glossary creation was finished. - google.protobuf.Timestamp end_time = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; -} - -// Request message for CreateGlossary. -message CreateGlossaryRequest { - // Required. The project name. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Required. The glossary to create. - Glossary glossary = 2 [(google.api.field_behavior) = REQUIRED]; -} - -// Request message for GetGlossary. -message GetGlossaryRequest { - // Required. The name of the glossary to retrieve. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "translate.googleapis.com/Glossary" - } - ]; -} - -// Request message for DeleteGlossary. -message DeleteGlossaryRequest { - // Required. The name of the glossary to delete. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "translate.googleapis.com/Glossary" - } - ]; -} - -// Request message for ListGlossaries. -message ListGlossariesRequest { - // Required. The name of the project from which to list all of the glossaries. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. Requested page size. The server may return fewer glossaries than - // requested. If unspecified, the server picks an appropriate default. - int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A token identifying a page of results the server should return. - // Typically, this is the value of [ListGlossariesResponse.next_page_token] - // returned from the previous call to `ListGlossaries` method. - // The first page is returned if `page_token`is empty or missing. - string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Filter specifying constraints of a list operation. - // Filtering is not supported yet, and the parameter currently has no effect. - // If missing, no filtering is performed. - string filter = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -// Response message for ListGlossaries. -message ListGlossariesResponse { - // The list of glossaries for a project. - repeated Glossary glossaries = 1; - - // A token to retrieve a page of results. Pass this value in the - // [ListGlossariesRequest.page_token] field in the subsequent call to - // `ListGlossaries` method to retrieve the next page of results. - string next_page_token = 2; -} - -// Stored in the [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata] field returned by -// CreateGlossary. -message CreateGlossaryMetadata { - // Enumerates the possible states that the creation request can be in. - enum State { - // Invalid. - STATE_UNSPECIFIED = 0; - - // Request is being processed. - RUNNING = 1; - - // The glossary was successfully created. - SUCCEEDED = 2; - - // Failed to create the glossary. - FAILED = 3; - - // Request is in the process of being canceled after caller invoked - // longrunning.Operations.CancelOperation on the request id. - CANCELLING = 4; - - // The glossary creation request was successfully canceled. - CANCELLED = 5; - } - - // The name of the glossary that is being created. - string name = 1; - - // The current state of the glossary creation operation. - State state = 2; - - // The time when the operation was submitted to the server. - google.protobuf.Timestamp submit_time = 3; -} - -// Stored in the [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata] field returned by -// DeleteGlossary. -message DeleteGlossaryMetadata { - // Enumerates the possible states that the creation request can be in. - enum State { - // Invalid. - STATE_UNSPECIFIED = 0; - - // Request is being processed. - RUNNING = 1; - - // The glossary was successfully deleted. - SUCCEEDED = 2; - - // Failed to delete the glossary. - FAILED = 3; - - // Request is in the process of being canceled after caller invoked - // longrunning.Operations.CancelOperation on the request id. - CANCELLING = 4; - - // The glossary deletion request was successfully canceled. - CANCELLED = 5; - } - - // The name of the glossary that is being deleted. - string name = 1; - - // The current state of the glossary deletion operation. - State state = 2; - - // The time when the operation was submitted to the server. - google.protobuf.Timestamp submit_time = 3; -} - -// Stored in the [google.longrunning.Operation.response][google.longrunning.Operation.response] field returned by -// DeleteGlossary. -message DeleteGlossaryResponse { - // The name of the deleted glossary. - string name = 1; - - // The time when the operation was submitted to the server. - google.protobuf.Timestamp submit_time = 2; - - // The time when the glossary deletion is finished and - // [google.longrunning.Operation.done][google.longrunning.Operation.done] is set to true. - google.protobuf.Timestamp end_time = 3; -} diff --git a/google/cloud/translate_v3beta1/proto/translation_service_pb2.py b/google/cloud/translate_v3beta1/proto/translation_service_pb2.py deleted file mode 100644 index 7eebb631..00000000 --- a/google/cloud/translate_v3beta1/proto/translation_service_pb2.py +++ /dev/null @@ -1,4042 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/translate_v3beta1/proto/translation_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.longrunning import ( - operations_pb2 as google_dot_longrunning_dot_operations__pb2, -) -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="google/cloud/translate_v3beta1/proto/translation_service.proto", - package="google.cloud.translation.v3beta1", - syntax="proto3", - serialized_options=b'\n"com.google.cloud.translate.v3beta1B\027TranslationServiceProtoP\001ZGgoogle.golang.org/genproto/googleapis/cloud/translate/v3beta1;translate\370\001\001\252\002\036Google.Cloud.Translate.V3Beta1\312\002\036Google\\Cloud\\Translate\\V3beta1\352\002!Google::Cloud::Translate::V3beta1', - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n>google/cloud/translate_v3beta1/proto/translation_service.proto\x12 google.cloud.translation.v3beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a#google/longrunning/operations.proto\x1a\x1fgoogle/protobuf/timestamp.proto"N\n\x1bTranslateTextGlossaryConfig\x12\x15\n\x08glossary\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x18\n\x0bignore_case\x18\x02 \x01(\x08\x42\x03\xe0\x41\x01"\xbf\x03\n\x14TranslateTextRequest\x12\x15\n\x08\x63ontents\x18\x01 \x03(\tB\x03\xe0\x41\x02\x12\x16\n\tmime_type\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12!\n\x14source_language_code\x18\x04 \x01(\tB\x03\xe0\x41\x01\x12!\n\x14target_language_code\x18\x05 \x01(\tB\x03\xe0\x41\x02\x12\x39\n\x06parent\x18\x08 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x12\n\x05model\x18\x06 \x01(\tB\x03\xe0\x41\x01\x12[\n\x0fglossary_config\x18\x07 \x01(\x0b\x32=.google.cloud.translation.v3beta1.TranslateTextGlossaryConfigB\x03\xe0\x41\x01\x12W\n\x06labels\x18\n \x03(\x0b\x32\x42.google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\xaa\x01\n\x15TranslateTextResponse\x12\x43\n\x0ctranslations\x18\x01 \x03(\x0b\x32-.google.cloud.translation.v3beta1.Translation\x12L\n\x15glossary_translations\x18\x03 \x03(\x0b\x32-.google.cloud.translation.v3beta1.Translation"\xad\x01\n\x0bTranslation\x12\x17\n\x0ftranslated_text\x18\x01 \x01(\t\x12\r\n\x05model\x18\x02 \x01(\t\x12\x1e\n\x16\x64\x65tected_language_code\x18\x04 \x01(\t\x12V\n\x0fglossary_config\x18\x03 \x01(\x0b\x32=.google.cloud.translation.v3beta1.TranslateTextGlossaryConfig"\x9f\x02\n\x15\x44\x65tectLanguageRequest\x12\x39\n\x06parent\x18\x05 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x12\n\x05model\x18\x04 \x01(\tB\x03\xe0\x41\x01\x12\x11\n\x07\x63ontent\x18\x01 \x01(\tH\x00\x12\x16\n\tmime_type\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12S\n\x06labels\x18\x06 \x03(\x0b\x32\x43.google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06source"=\n\x10\x44\x65tectedLanguage\x12\x15\n\rlanguage_code\x18\x01 \x01(\t\x12\x12\n\nconfidence\x18\x02 \x01(\x02"_\n\x16\x44\x65tectLanguageResponse\x12\x45\n\tlanguages\x18\x01 \x03(\x0b\x32\x32.google.cloud.translation.v3beta1.DetectedLanguage"\x91\x01\n\x1cGetSupportedLanguagesRequest\x12\x39\n\x06parent\x18\x03 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12"\n\x15\x64isplay_language_code\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12\x12\n\x05model\x18\x02 \x01(\tB\x03\xe0\x41\x01"\\\n\x12SupportedLanguages\x12\x46\n\tlanguages\x18\x01 \x03(\x0b\x32\x33.google.cloud.translation.v3beta1.SupportedLanguage"p\n\x11SupportedLanguage\x12\x15\n\rlanguage_code\x18\x01 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x02 \x01(\t\x12\x16\n\x0esupport_source\x18\x03 \x01(\x08\x12\x16\n\x0esupport_target\x18\x04 \x01(\x08"#\n\tGcsSource\x12\x16\n\tinput_uri\x18\x01 \x01(\tB\x03\xe0\x41\x02"r\n\x0bInputConfig\x12\x16\n\tmime_type\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12\x41\n\ngcs_source\x18\x02 \x01(\x0b\x32+.google.cloud.translation.v3beta1.GcsSourceH\x00\x42\x08\n\x06source"0\n\x0eGcsDestination\x12\x1e\n\x11output_uri_prefix\x18\x01 \x01(\tB\x03\xe0\x41\x02"j\n\x0cOutputConfig\x12K\n\x0fgcs_destination\x18\x01 \x01(\x0b\x32\x30.google.cloud.translation.v3beta1.GcsDestinationH\x00\x42\r\n\x0b\x64\x65stination"\xa6\x06\n\x19\x42\x61tchTranslateTextRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12!\n\x14source_language_code\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12"\n\x15target_language_codes\x18\x03 \x03(\tB\x03\xe0\x41\x02\x12\\\n\x06models\x18\x04 \x03(\x0b\x32G.google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntryB\x03\xe0\x41\x01\x12I\n\rinput_configs\x18\x05 \x03(\x0b\x32-.google.cloud.translation.v3beta1.InputConfigB\x03\xe0\x41\x02\x12J\n\routput_config\x18\x06 \x01(\x0b\x32..google.cloud.translation.v3beta1.OutputConfigB\x03\xe0\x41\x02\x12\x64\n\nglossaries\x18\x07 \x03(\x0b\x32K.google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntryB\x03\xe0\x41\x01\x12\\\n\x06labels\x18\t \x03(\x0b\x32G.google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bModelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1ap\n\x0fGlossariesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12L\n\x05value\x18\x02 \x01(\x0b\x32=.google.cloud.translation.v3beta1.TranslateTextGlossaryConfig:\x02\x38\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\xd3\x02\n\x16\x42\x61tchTranslateMetadata\x12M\n\x05state\x18\x01 \x01(\x0e\x32>.google.cloud.translation.v3beta1.BatchTranslateMetadata.State\x12\x1d\n\x15translated_characters\x18\x02 \x01(\x03\x12\x19\n\x11\x66\x61iled_characters\x18\x03 \x01(\x03\x12\x18\n\x10total_characters\x18\x04 \x01(\x03\x12/\n\x0bsubmit_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\xcb\x01\n\x16\x42\x61tchTranslateResponse\x12\x18\n\x10total_characters\x18\x01 \x01(\x03\x12\x1d\n\x15translated_characters\x18\x02 \x01(\x03\x12\x19\n\x11\x66\x61iled_characters\x18\x03 \x01(\x03\x12/\n\x0bsubmit_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"b\n\x13GlossaryInputConfig\x12\x41\n\ngcs_source\x18\x01 \x01(\x0b\x32+.google.cloud.translation.v3beta1.GcsSourceH\x00\x42\x08\n\x06source"\x8e\x05\n\x08Glossary\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12T\n\rlanguage_pair\x18\x03 \x01(\x0b\x32;.google.cloud.translation.v3beta1.Glossary.LanguageCodePairH\x00\x12Y\n\x12language_codes_set\x18\x04 \x01(\x0b\x32;.google.cloud.translation.v3beta1.Glossary.LanguageCodesSetH\x00\x12K\n\x0cinput_config\x18\x05 \x01(\x0b\x32\x35.google.cloud.translation.v3beta1.GlossaryInputConfig\x12\x18\n\x0b\x65ntry_count\x18\x06 \x01(\x05\x42\x03\xe0\x41\x03\x12\x34\n\x0bsubmit_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x31\n\x08\x65nd_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x1aN\n\x10LanguageCodePair\x12\x1c\n\x14source_language_code\x18\x01 \x01(\t\x12\x1c\n\x14target_language_code\x18\x02 \x01(\t\x1a*\n\x10LanguageCodesSet\x12\x16\n\x0elanguage_codes\x18\x01 \x03(\t:e\xea\x41\x62\n!translate.googleapis.com/Glossary\x12=projects/{project}/locations/{location}/glossaries/{glossary}B\x0b\n\tlanguages"\x95\x01\n\x15\x43reateGlossaryRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x41\n\x08glossary\x18\x02 \x01(\x0b\x32*.google.cloud.translation.v3beta1.GlossaryB\x03\xe0\x41\x02"M\n\x12GetGlossaryRequest\x12\x37\n\x04name\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!translate.googleapis.com/Glossary"P\n\x15\x44\x65leteGlossaryRequest\x12\x37\n\x04name\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!translate.googleapis.com/Glossary"\x98\x01\n\x15ListGlossariesRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x16\n\tpage_size\x18\x02 \x01(\x05\x42\x03\xe0\x41\x01\x12\x17\n\npage_token\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12\x13\n\x06\x66ilter\x18\x04 \x01(\tB\x03\xe0\x41\x01"q\n\x16ListGlossariesResponse\x12>\n\nglossaries\x18\x01 \x03(\x0b\x32*.google.cloud.translation.v3beta1.Glossary\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t"\x8d\x02\n\x16\x43reateGlossaryMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12M\n\x05state\x18\x02 \x01(\x0e\x32>.google.cloud.translation.v3beta1.CreateGlossaryMetadata.State\x12/\n\x0bsubmit_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\x8d\x02\n\x16\x44\x65leteGlossaryMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12M\n\x05state\x18\x02 \x01(\x0e\x32>.google.cloud.translation.v3beta1.DeleteGlossaryMetadata.State\x12/\n\x0bsubmit_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\x85\x01\n\x16\x44\x65leteGlossaryResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\x0bsubmit_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp2\x9a\x10\n\x12TranslationService\x12\xf4\x01\n\rTranslateText\x12\x36.google.cloud.translation.v3beta1.TranslateTextRequest\x1a\x37.google.cloud.translation.v3beta1.TranslateTextResponse"r\x82\xd3\xe4\x93\x02l"6/v3beta1/{parent=projects/*/locations/*}:translateText:\x01*Z/"*/v3beta1/{parent=projects/*}:translateText:\x01*\x12\x93\x02\n\x0e\x44\x65tectLanguage\x12\x37.google.cloud.translation.v3beta1.DetectLanguageRequest\x1a\x38.google.cloud.translation.v3beta1.DetectLanguageResponse"\x8d\x01\x82\xd3\xe4\x93\x02n"7/v3beta1/{parent=projects/*/locations/*}:detectLanguage:\x01*Z0"+/v3beta1/{parent=projects/*}:detectLanguage:\x01*\xda\x41\x16parent,model,mime_type\x12\xab\x02\n\x15GetSupportedLanguages\x12>.google.cloud.translation.v3beta1.GetSupportedLanguagesRequest\x1a\x34.google.cloud.translation.v3beta1.SupportedLanguages"\x9b\x01\x82\xd3\xe4\x93\x02p\x12;/v3beta1/{parent=projects/*/locations/*}/supportedLanguagesZ1\x12//v3beta1/{parent=projects/*}/supportedLanguages\xda\x41"parent,display_language_code,model\x12\xeb\x01\n\x12\x42\x61tchTranslateText\x12;.google.cloud.translation.v3beta1.BatchTranslateTextRequest\x1a\x1d.google.longrunning.Operation"y\x82\xd3\xe4\x93\x02@";/v3beta1/{parent=projects/*/locations/*}:batchTranslateText:\x01*\xca\x41\x30\n\x16\x42\x61tchTranslateResponse\x12\x16\x42\x61tchTranslateMetadata\x12\xe6\x01\n\x0e\x43reateGlossary\x12\x37.google.cloud.translation.v3beta1.CreateGlossaryRequest\x1a\x1d.google.longrunning.Operation"|\x82\xd3\xe4\x93\x02?"3/v3beta1/{parent=projects/*/locations/*}/glossaries:\x08glossary\xda\x41\x0fparent,glossary\xca\x41"\n\x08Glossary\x12\x16\x43reateGlossaryMetadata\x12\xd9\x01\n\x0eListGlossaries\x12\x37.google.cloud.translation.v3beta1.ListGlossariesRequest\x1a\x38.google.cloud.translation.v3beta1.ListGlossariesResponse"T\x82\xd3\xe4\x93\x02\x35\x12\x33/v3beta1/{parent=projects/*/locations/*}/glossaries\xda\x41\x06parent\xda\x41\rparent,filter\x12\xb3\x01\n\x0bGetGlossary\x12\x34.google.cloud.translation.v3beta1.GetGlossaryRequest\x1a*.google.cloud.translation.v3beta1.Glossary"B\x82\xd3\xe4\x93\x02\x35\x12\x33/v3beta1/{name=projects/*/locations/*/glossaries/*}\xda\x41\x04name\x12\xdf\x01\n\x0e\x44\x65leteGlossary\x12\x37.google.cloud.translation.v3beta1.DeleteGlossaryRequest\x1a\x1d.google.longrunning.Operation"u\x82\xd3\xe4\x93\x02\x35*3/v3beta1/{name=projects/*/locations/*/glossaries/*}\xda\x41\x04name\xca\x41\x30\n\x16\x44\x65leteGlossaryResponse\x12\x16\x44\x65leteGlossaryMetadata\x1a~\xca\x41\x18translate.googleapis.com\xd2\x41`https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translationB\xf1\x01\n"com.google.cloud.translate.v3beta1B\x17TranslationServiceProtoP\x01ZGgoogle.golang.org/genproto/googleapis/cloud/translate/v3beta1;translate\xf8\x01\x01\xaa\x02\x1eGoogle.Cloud.Translate.V3Beta1\xca\x02\x1eGoogle\\Cloud\\Translate\\V3beta1\xea\x02!Google::Cloud::Translate::V3beta1b\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_longrunning_dot_operations__pb2.DESCRIPTOR, - google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, - ], -) - - -_BATCHTRANSLATEMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3329, - serialized_end=3430, -) -_sym_db.RegisterEnumDescriptor(_BATCHTRANSLATEMETADATA_STATE) - -_CREATEGLOSSARYMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3329, - serialized_end=3430, -) -_sym_db.RegisterEnumDescriptor(_CREATEGLOSSARYMETADATA_STATE) - -_DELETEGLOSSARYMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3329, - serialized_end=3430, -) -_sym_db.RegisterEnumDescriptor(_DELETEGLOSSARYMETADATA_STATE) - - -_TRANSLATETEXTGLOSSARYCONFIG = _descriptor.Descriptor( - name="TranslateTextGlossaryConfig", - full_name="google.cloud.translation.v3beta1.TranslateTextGlossaryConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="glossary", - full_name="google.cloud.translation.v3beta1.TranslateTextGlossaryConfig.glossary", - 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", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="ignore_case", - full_name="google.cloud.translation.v3beta1.TranslateTextGlossaryConfig.ignore_case", - index=1, - number=2, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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=285, - serialized_end=363, -) - - -_TRANSLATETEXTREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=768, - serialized_end=813, -) - -_TRANSLATETEXTREQUEST = _descriptor.Descriptor( - name="TranslateTextRequest", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="contents", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.contents", - index=0, - number=1, - 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\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="mime_type", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.mime_type", - 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="source_language_code", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.source_language_code", - 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, - ), - _descriptor.FieldDescriptor( - name="target_language_code", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.target_language_code", - index=3, - number=5, - 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="parent", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.parent", - index=4, - number=8, - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.model", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossary_config", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.glossary_config", - index=6, - number=7, - 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="labels", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.labels", - index=7, - number=10, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_TRANSLATETEXTREQUEST_LABELSENTRY,], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=366, - serialized_end=813, -) - - -_TRANSLATETEXTRESPONSE = _descriptor.Descriptor( - name="TranslateTextResponse", - full_name="google.cloud.translation.v3beta1.TranslateTextResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="translations", - full_name="google.cloud.translation.v3beta1.TranslateTextResponse.translations", - 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="glossary_translations", - full_name="google.cloud.translation.v3beta1.TranslateTextResponse.glossary_translations", - index=1, - 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=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=816, - serialized_end=986, -) - - -_TRANSLATION = _descriptor.Descriptor( - name="Translation", - full_name="google.cloud.translation.v3beta1.Translation", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="translated_text", - full_name="google.cloud.translation.v3beta1.Translation.translated_text", - 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="model", - full_name="google.cloud.translation.v3beta1.Translation.model", - 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="detected_language_code", - full_name="google.cloud.translation.v3beta1.Translation.detected_language_code", - 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, - ), - _descriptor.FieldDescriptor( - name="glossary_config", - full_name="google.cloud.translation.v3beta1.Translation.glossary_config", - index=3, - 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=989, - serialized_end=1162, -) - - -_DETECTLANGUAGEREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=768, - serialized_end=813, -) - -_DETECTLANGUAGEREQUEST = _descriptor.Descriptor( - name="DetectLanguageRequest", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.parent", - index=0, - number=5, - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.model", - index=1, - 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, - ), - _descriptor.FieldDescriptor( - name="content", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.content", - index=2, - 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="mime_type", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.mime_type", - index=3, - 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="labels", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.labels", - index=4, - number=6, - 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=[_DETECTLANGUAGEREQUEST_LABELSENTRY,], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=1165, - serialized_end=1452, -) - - -_DETECTEDLANGUAGE = _descriptor.Descriptor( - name="DetectedLanguage", - full_name="google.cloud.translation.v3beta1.DetectedLanguage", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_code", - full_name="google.cloud.translation.v3beta1.DetectedLanguage.language_code", - 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="confidence", - full_name="google.cloud.translation.v3beta1.DetectedLanguage.confidence", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(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=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1454, - serialized_end=1515, -) - - -_DETECTLANGUAGERESPONSE = _descriptor.Descriptor( - name="DetectLanguageResponse", - full_name="google.cloud.translation.v3beta1.DetectLanguageResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="languages", - full_name="google.cloud.translation.v3beta1.DetectLanguageResponse.languages", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1517, - serialized_end=1612, -) - - -_GETSUPPORTEDLANGUAGESREQUEST = _descriptor.Descriptor( - name="GetSupportedLanguagesRequest", - full_name="google.cloud.translation.v3beta1.GetSupportedLanguagesRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.GetSupportedLanguagesRequest.parent", - index=0, - 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\372A#\n!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="display_language_code", - full_name="google.cloud.translation.v3beta1.GetSupportedLanguagesRequest.display_language_code", - index=1, - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3beta1.GetSupportedLanguagesRequest.model", - index=2, - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1615, - serialized_end=1760, -) - - -_SUPPORTEDLANGUAGES = _descriptor.Descriptor( - name="SupportedLanguages", - full_name="google.cloud.translation.v3beta1.SupportedLanguages", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="languages", - full_name="google.cloud.translation.v3beta1.SupportedLanguages.languages", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1762, - serialized_end=1854, -) - - -_SUPPORTEDLANGUAGE = _descriptor.Descriptor( - name="SupportedLanguage", - full_name="google.cloud.translation.v3beta1.SupportedLanguage", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_code", - full_name="google.cloud.translation.v3beta1.SupportedLanguage.language_code", - 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="display_name", - full_name="google.cloud.translation.v3beta1.SupportedLanguage.display_name", - 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="support_source", - full_name="google.cloud.translation.v3beta1.SupportedLanguage.support_source", - index=2, - number=3, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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="support_target", - full_name="google.cloud.translation.v3beta1.SupportedLanguage.support_target", - index=3, - number=4, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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=1856, - serialized_end=1968, -) - - -_GCSSOURCE = _descriptor.Descriptor( - name="GcsSource", - full_name="google.cloud.translation.v3beta1.GcsSource", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="input_uri", - full_name="google.cloud.translation.v3beta1.GcsSource.input_uri", - 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", - 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=1970, - serialized_end=2005, -) - - -_INPUTCONFIG = _descriptor.Descriptor( - name="InputConfig", - full_name="google.cloud.translation.v3beta1.InputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="mime_type", - full_name="google.cloud.translation.v3beta1.InputConfig.mime_type", - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="gcs_source", - full_name="google.cloud.translation.v3beta1.InputConfig.gcs_source", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3beta1.InputConfig.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=2007, - serialized_end=2121, -) - - -_GCSDESTINATION = _descriptor.Descriptor( - name="GcsDestination", - full_name="google.cloud.translation.v3beta1.GcsDestination", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="output_uri_prefix", - full_name="google.cloud.translation.v3beta1.GcsDestination.output_uri_prefix", - 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", - 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=2123, - serialized_end=2171, -) - - -_OUTPUTCONFIG = _descriptor.Descriptor( - name="OutputConfig", - full_name="google.cloud.translation.v3beta1.OutputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="gcs_destination", - full_name="google.cloud.translation.v3beta1.OutputConfig.gcs_destination", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="destination", - full_name="google.cloud.translation.v3beta1.OutputConfig.destination", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=2173, - serialized_end=2279, -) - - -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY = _descriptor.Descriptor( - name="ModelsEntry", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2882, - serialized_end=2927, -) - -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY = _descriptor.Descriptor( - name="GlossariesEntry", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2929, - serialized_end=3041, -) - -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=768, - serialized_end=813, -) - -_BATCHTRANSLATETEXTREQUEST = _descriptor.Descriptor( - name="BatchTranslateTextRequest", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="source_language_code", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.source_language_code", - 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="target_language_codes", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.target_language_codes", - index=2, - number=3, - 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\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="models", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.models", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="input_configs", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.input_configs", - index=4, - number=5, - 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=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="output_config", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.output_config", - 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=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossaries", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.glossaries", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="labels", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.labels", - index=7, - number=9, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[ - _BATCHTRANSLATETEXTREQUEST_MODELSENTRY, - _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY, - _BATCHTRANSLATETEXTREQUEST_LABELSENTRY, - ], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2282, - serialized_end=3088, -) - - -_BATCHTRANSLATEMETADATA = _descriptor.Descriptor( - name="BatchTranslateMetadata", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="state", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.state", - 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, - ), - _descriptor.FieldDescriptor( - name="translated_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.translated_characters", - 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="failed_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.failed_characters", - 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="total_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.total_characters", - index=3, - number=4, - 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="submit_time", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.submit_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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[_BATCHTRANSLATEMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=3091, - serialized_end=3430, -) - - -_BATCHTRANSLATERESPONSE = _descriptor.Descriptor( - name="BatchTranslateResponse", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="total_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.total_characters", - 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="translated_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.translated_characters", - 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="failed_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.failed_characters", - 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="submit_time", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.submit_time", - 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=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.end_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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=3433, - serialized_end=3636, -) - - -_GLOSSARYINPUTCONFIG = _descriptor.Descriptor( - name="GlossaryInputConfig", - full_name="google.cloud.translation.v3beta1.GlossaryInputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="gcs_source", - full_name="google.cloud.translation.v3beta1.GlossaryInputConfig.gcs_source", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3beta1.GlossaryInputConfig.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=3638, - serialized_end=3736, -) - - -_GLOSSARY_LANGUAGECODEPAIR = _descriptor.Descriptor( - name="LanguageCodePair", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodePair", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="source_language_code", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodePair.source_language_code", - 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="target_language_code", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodePair.target_language_code", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4155, - serialized_end=4233, -) - -_GLOSSARY_LANGUAGECODESSET = _descriptor.Descriptor( - name="LanguageCodesSet", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodesSet", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_codes", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodesSet.language_codes", - index=0, - number=1, - 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=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=4235, - serialized_end=4277, -) - -_GLOSSARY = _descriptor.Descriptor( - name="Glossary", - full_name="google.cloud.translation.v3beta1.Glossary", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.Glossary.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", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="language_pair", - full_name="google.cloud.translation.v3beta1.Glossary.language_pair", - index=1, - 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, - ), - _descriptor.FieldDescriptor( - name="language_codes_set", - full_name="google.cloud.translation.v3beta1.Glossary.language_codes_set", - 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, - ), - _descriptor.FieldDescriptor( - name="input_config", - full_name="google.cloud.translation.v3beta1.Glossary.input_config", - 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, - ), - _descriptor.FieldDescriptor( - name="entry_count", - full_name="google.cloud.translation.v3beta1.Glossary.entry_count", - 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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3beta1.Glossary.submit_time", - index=5, - number=7, - 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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.cloud.translation.v3beta1.Glossary.end_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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_GLOSSARY_LANGUAGECODEPAIR, _GLOSSARY_LANGUAGECODESSET,], - enum_types=[], - serialized_options=b"\352Ab\n!translate.googleapis.com/Glossary\022=projects/{project}/locations/{location}/glossaries/{glossary}", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="languages", - full_name="google.cloud.translation.v3beta1.Glossary.languages", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=3739, - serialized_end=4393, -) - - -_CREATEGLOSSARYREQUEST = _descriptor.Descriptor( - name="CreateGlossaryRequest", - full_name="google.cloud.translation.v3beta1.CreateGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.CreateGlossaryRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossary", - full_name="google.cloud.translation.v3beta1.CreateGlossaryRequest.glossary", - 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=4396, - serialized_end=4545, -) - - -_GETGLOSSARYREQUEST = _descriptor.Descriptor( - name="GetGlossaryRequest", - full_name="google.cloud.translation.v3beta1.GetGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.GetGlossaryRequest.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!translate.googleapis.com/Glossary", - 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=4547, - serialized_end=4624, -) - - -_DELETEGLOSSARYREQUEST = _descriptor.Descriptor( - name="DeleteGlossaryRequest", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryRequest.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!translate.googleapis.com/Glossary", - 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=4626, - serialized_end=4706, -) - - -_LISTGLOSSARIESREQUEST = _descriptor.Descriptor( - name="ListGlossariesRequest", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_size", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest.page_size", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_token", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest.page_token", - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="filter", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest.filter", - 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=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=4709, - serialized_end=4861, -) - - -_LISTGLOSSARIESRESPONSE = _descriptor.Descriptor( - name="ListGlossariesResponse", - full_name="google.cloud.translation.v3beta1.ListGlossariesResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="glossaries", - full_name="google.cloud.translation.v3beta1.ListGlossariesResponse.glossaries", - 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.cloud.translation.v3beta1.ListGlossariesResponse.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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4863, - serialized_end=4976, -) - - -_CREATEGLOSSARYMETADATA = _descriptor.Descriptor( - name="CreateGlossaryMetadata", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata.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="state", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata.state", - index=1, - number=2, - 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, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata.submit_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=[_CREATEGLOSSARYMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4979, - serialized_end=5248, -) - - -_DELETEGLOSSARYMETADATA = _descriptor.Descriptor( - name="DeleteGlossaryMetadata", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata.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="state", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata.state", - index=1, - number=2, - 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, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata.submit_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=[_DELETEGLOSSARYMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=5251, - serialized_end=5520, -) - - -_DELETEGLOSSARYRESPONSE = _descriptor.Descriptor( - name="DeleteGlossaryResponse", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryResponse.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="submit_time", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryResponse.submit_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.cloud.translation.v3beta1.DeleteGlossaryResponse.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=5523, - serialized_end=5656, -) - -_TRANSLATETEXTREQUEST_LABELSENTRY.containing_type = _TRANSLATETEXTREQUEST -_TRANSLATETEXTREQUEST.fields_by_name[ - "glossary_config" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_TRANSLATETEXTREQUEST.fields_by_name[ - "labels" -].message_type = _TRANSLATETEXTREQUEST_LABELSENTRY -_TRANSLATETEXTRESPONSE.fields_by_name["translations"].message_type = _TRANSLATION -_TRANSLATETEXTRESPONSE.fields_by_name[ - "glossary_translations" -].message_type = _TRANSLATION -_TRANSLATION.fields_by_name[ - "glossary_config" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_DETECTLANGUAGEREQUEST_LABELSENTRY.containing_type = _DETECTLANGUAGEREQUEST -_DETECTLANGUAGEREQUEST.fields_by_name[ - "labels" -].message_type = _DETECTLANGUAGEREQUEST_LABELSENTRY -_DETECTLANGUAGEREQUEST.oneofs_by_name["source"].fields.append( - _DETECTLANGUAGEREQUEST.fields_by_name["content"] -) -_DETECTLANGUAGEREQUEST.fields_by_name[ - "content" -].containing_oneof = _DETECTLANGUAGEREQUEST.oneofs_by_name["source"] -_DETECTLANGUAGERESPONSE.fields_by_name["languages"].message_type = _DETECTEDLANGUAGE -_SUPPORTEDLANGUAGES.fields_by_name["languages"].message_type = _SUPPORTEDLANGUAGE -_INPUTCONFIG.fields_by_name["gcs_source"].message_type = _GCSSOURCE -_INPUTCONFIG.oneofs_by_name["source"].fields.append( - _INPUTCONFIG.fields_by_name["gcs_source"] -) -_INPUTCONFIG.fields_by_name[ - "gcs_source" -].containing_oneof = _INPUTCONFIG.oneofs_by_name["source"] -_OUTPUTCONFIG.fields_by_name["gcs_destination"].message_type = _GCSDESTINATION -_OUTPUTCONFIG.oneofs_by_name["destination"].fields.append( - _OUTPUTCONFIG.fields_by_name["gcs_destination"] -) -_OUTPUTCONFIG.fields_by_name[ - "gcs_destination" -].containing_oneof = _OUTPUTCONFIG.oneofs_by_name["destination"] -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY.fields_by_name[ - "value" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "models" -].message_type = _BATCHTRANSLATETEXTREQUEST_MODELSENTRY -_BATCHTRANSLATETEXTREQUEST.fields_by_name["input_configs"].message_type = _INPUTCONFIG -_BATCHTRANSLATETEXTREQUEST.fields_by_name["output_config"].message_type = _OUTPUTCONFIG -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "glossaries" -].message_type = _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "labels" -].message_type = _BATCHTRANSLATETEXTREQUEST_LABELSENTRY -_BATCHTRANSLATEMETADATA.fields_by_name[ - "state" -].enum_type = _BATCHTRANSLATEMETADATA_STATE -_BATCHTRANSLATEMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_BATCHTRANSLATEMETADATA_STATE.containing_type = _BATCHTRANSLATEMETADATA -_BATCHTRANSLATERESPONSE.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_BATCHTRANSLATERESPONSE.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARYINPUTCONFIG.fields_by_name["gcs_source"].message_type = _GCSSOURCE -_GLOSSARYINPUTCONFIG.oneofs_by_name["source"].fields.append( - _GLOSSARYINPUTCONFIG.fields_by_name["gcs_source"] -) -_GLOSSARYINPUTCONFIG.fields_by_name[ - "gcs_source" -].containing_oneof = _GLOSSARYINPUTCONFIG.oneofs_by_name["source"] -_GLOSSARY_LANGUAGECODEPAIR.containing_type = _GLOSSARY -_GLOSSARY_LANGUAGECODESSET.containing_type = _GLOSSARY -_GLOSSARY.fields_by_name["language_pair"].message_type = _GLOSSARY_LANGUAGECODEPAIR -_GLOSSARY.fields_by_name["language_codes_set"].message_type = _GLOSSARY_LANGUAGECODESSET -_GLOSSARY.fields_by_name["input_config"].message_type = _GLOSSARYINPUTCONFIG -_GLOSSARY.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARY.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARY.oneofs_by_name["languages"].fields.append( - _GLOSSARY.fields_by_name["language_pair"] -) -_GLOSSARY.fields_by_name["language_pair"].containing_oneof = _GLOSSARY.oneofs_by_name[ - "languages" -] -_GLOSSARY.oneofs_by_name["languages"].fields.append( - _GLOSSARY.fields_by_name["language_codes_set"] -) -_GLOSSARY.fields_by_name[ - "language_codes_set" -].containing_oneof = _GLOSSARY.oneofs_by_name["languages"] -_CREATEGLOSSARYREQUEST.fields_by_name["glossary"].message_type = _GLOSSARY -_LISTGLOSSARIESRESPONSE.fields_by_name["glossaries"].message_type = _GLOSSARY -_CREATEGLOSSARYMETADATA.fields_by_name[ - "state" -].enum_type = _CREATEGLOSSARYMETADATA_STATE -_CREATEGLOSSARYMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_CREATEGLOSSARYMETADATA_STATE.containing_type = _CREATEGLOSSARYMETADATA -_DELETEGLOSSARYMETADATA.fields_by_name[ - "state" -].enum_type = _DELETEGLOSSARYMETADATA_STATE -_DELETEGLOSSARYMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_DELETEGLOSSARYMETADATA_STATE.containing_type = _DELETEGLOSSARYMETADATA -_DELETEGLOSSARYRESPONSE.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_DELETEGLOSSARYRESPONSE.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -DESCRIPTOR.message_types_by_name[ - "TranslateTextGlossaryConfig" -] = _TRANSLATETEXTGLOSSARYCONFIG -DESCRIPTOR.message_types_by_name["TranslateTextRequest"] = _TRANSLATETEXTREQUEST -DESCRIPTOR.message_types_by_name["TranslateTextResponse"] = _TRANSLATETEXTRESPONSE -DESCRIPTOR.message_types_by_name["Translation"] = _TRANSLATION -DESCRIPTOR.message_types_by_name["DetectLanguageRequest"] = _DETECTLANGUAGEREQUEST -DESCRIPTOR.message_types_by_name["DetectedLanguage"] = _DETECTEDLANGUAGE -DESCRIPTOR.message_types_by_name["DetectLanguageResponse"] = _DETECTLANGUAGERESPONSE -DESCRIPTOR.message_types_by_name[ - "GetSupportedLanguagesRequest" -] = _GETSUPPORTEDLANGUAGESREQUEST -DESCRIPTOR.message_types_by_name["SupportedLanguages"] = _SUPPORTEDLANGUAGES -DESCRIPTOR.message_types_by_name["SupportedLanguage"] = _SUPPORTEDLANGUAGE -DESCRIPTOR.message_types_by_name["GcsSource"] = _GCSSOURCE -DESCRIPTOR.message_types_by_name["InputConfig"] = _INPUTCONFIG -DESCRIPTOR.message_types_by_name["GcsDestination"] = _GCSDESTINATION -DESCRIPTOR.message_types_by_name["OutputConfig"] = _OUTPUTCONFIG -DESCRIPTOR.message_types_by_name[ - "BatchTranslateTextRequest" -] = _BATCHTRANSLATETEXTREQUEST -DESCRIPTOR.message_types_by_name["BatchTranslateMetadata"] = _BATCHTRANSLATEMETADATA -DESCRIPTOR.message_types_by_name["BatchTranslateResponse"] = _BATCHTRANSLATERESPONSE -DESCRIPTOR.message_types_by_name["GlossaryInputConfig"] = _GLOSSARYINPUTCONFIG -DESCRIPTOR.message_types_by_name["Glossary"] = _GLOSSARY -DESCRIPTOR.message_types_by_name["CreateGlossaryRequest"] = _CREATEGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["GetGlossaryRequest"] = _GETGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["DeleteGlossaryRequest"] = _DELETEGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["ListGlossariesRequest"] = _LISTGLOSSARIESREQUEST -DESCRIPTOR.message_types_by_name["ListGlossariesResponse"] = _LISTGLOSSARIESRESPONSE -DESCRIPTOR.message_types_by_name["CreateGlossaryMetadata"] = _CREATEGLOSSARYMETADATA -DESCRIPTOR.message_types_by_name["DeleteGlossaryMetadata"] = _DELETEGLOSSARYMETADATA -DESCRIPTOR.message_types_by_name["DeleteGlossaryResponse"] = _DELETEGLOSSARYRESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -TranslateTextGlossaryConfig = _reflection.GeneratedProtocolMessageType( - "TranslateTextGlossaryConfig", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTGLOSSARYCONFIG, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Configures which glossary should be used for a specific target - language, and defines options for applying that glossary. - - Attributes: - glossary: - Required. Specifies the glossary used for this translation. - Use this format: projects/\ */locations/*/glossaries/\* - ignore_case: - Optional. Indicates match is case-insensitive. Default value - is false if missing. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.TranslateTextGlossaryConfig) - }, -) -_sym_db.RegisterMessage(TranslateTextGlossaryConfig) - -TranslateTextRequest = _reflection.GeneratedProtocolMessageType( - "TranslateTextRequest", - (_message.Message,), - { - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _TRANSLATETEXTREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The request message for synchronous translation. - - Attributes: - contents: - Required. The content of the input in string format. We - recommend the total content be less than 30k codepoints. Use - BatchTranslateText for larger text. - mime_type: - Optional. The format of the source text, for example, - “text/html”, “text/plain”. If left blank, the MIME type - defaults to “text/html”. - source_language_code: - Optional. The BCP-47 language code of the input text if known, - for example, “en-US” or “sr-Latn”. Supported language codes - are listed in Language Support. If the source language isn’t - specified, the API attempts to identify the source language - automatically and returns the source language within the - response. - target_language_code: - Required. The BCP-47 language code to use for translation of - the input text, set to one of the language codes listed in - Language Support. - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-id}`` or - ``projects/{project-id}/locations/{location-id}``. For global - calls, use ``projects/{project-id}/locations/global`` or - ``projects/{project-id}``. Non-global location is required - for requests using AutoML models or custom glossaries. Models - and glossaries must be within the same region (have same - location-id), otherwise an INVALID_ARGUMENT (400) error is - returned. - model: - Optional. The ``model`` type requested for this translation. - The format depends on model type: - AutoML Translation - models: ``projects/{project-id}/locations/{location- - id}/models/{model-id}`` - General (built-in) models: - ``projects/{project-id}/locations/{location- - id}/models/general/nmt``, ``projects/{project- - id}/locations/{location-id}/models/general/base`` For global - (non-regionalized) requests, use ``location-id`` ``global``. - For example, ``projects/{project- - id}/locations/global/models/general/nmt``. If missing, the - system decides which google base model to use. - glossary_config: - Optional. Glossary to be applied. The glossary must be within - the same region (have the same location-id) as the model, - otherwise an INVALID_ARGUMENT (400) error is returned. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.TranslateTextRequest) - }, -) -_sym_db.RegisterMessage(TranslateTextRequest) -_sym_db.RegisterMessage(TranslateTextRequest.LabelsEntry) - -TranslateTextResponse = _reflection.GeneratedProtocolMessageType( - "TranslateTextResponse", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTRESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """ - Attributes: - translations: - Text translation responses with no glossary applied. This - field has the same length as [``contents``][google.cloud.trans - lation.v3beta1.TranslateTextRequest.contents]. - glossary_translations: - Text translation responses if a glossary is provided in the - request. This can be the same as [``translations``][google.clo - ud.translation.v3beta1.TranslateTextResponse.translations] if - no terms apply. This field has the same length as [``contents``][google.cloud.translation.v3beta1.TranslateTextRequest.contents]. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.TranslateTextResponse) - }, -) -_sym_db.RegisterMessage(TranslateTextResponse) - -Translation = _reflection.GeneratedProtocolMessageType( - "Translation", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATION, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """A single translation response. - - Attributes: - translated_text: - Text translated into the target language. - model: - Only present when ``model`` is present in the request. This is - same as ``model`` provided in the request. - detected_language_code: - The BCP-47 language code of source text in the initial - request, detected automatically, if no source language was - passed within the initial request. If the source language was - passed, auto-detection of the language does not occur and this - field is empty. - glossary_config: - The ``glossary_config`` used for this translation. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.Translation) - }, -) -_sym_db.RegisterMessage(Translation) - -DetectLanguageRequest = _reflection.GeneratedProtocolMessageType( - "DetectLanguageRequest", - (_message.Message,), - { - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _DETECTLANGUAGEREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _DETECTLANGUAGEREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The request message for language detection. - - Attributes: - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project- - id}/locations/{location-id}`` or ``projects/{project-id}``. - For global calls, use ``projects/{project- - id}/locations/global`` or ``projects/{project-id}``. Only - models within the same region (has same location-id) can be - used. Otherwise an INVALID_ARGUMENT (400) error is returned. - model: - Optional. The language detection model to be used. Format: - ``projects/{project-id}/locations/{location- - id}/models/language-detection/{model-id}`` Only one language - detection model is currently supported: ``projects/{project- - id}/locations/{location-id}/models/language- - detection/default``. If not specified, the default model is - used. - source: - Required. The source of the document from which to detect the - language. - content: - The content of the input stored as a string. - mime_type: - Optional. The format of the source text, for example, - “text/html”, “text/plain”. If left blank, the MIME type - defaults to “text/html”. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DetectLanguageRequest) - }, -) -_sym_db.RegisterMessage(DetectLanguageRequest) -_sym_db.RegisterMessage(DetectLanguageRequest.LabelsEntry) - -DetectedLanguage = _reflection.GeneratedProtocolMessageType( - "DetectedLanguage", - (_message.Message,), - { - "DESCRIPTOR": _DETECTEDLANGUAGE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The response message for language detection. - - Attributes: - language_code: - The BCP-47 language code of source content in the request, - detected automatically. - confidence: - The confidence of the detection result for this language. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DetectedLanguage) - }, -) -_sym_db.RegisterMessage(DetectedLanguage) - -DetectLanguageResponse = _reflection.GeneratedProtocolMessageType( - "DetectLanguageResponse", - (_message.Message,), - { - "DESCRIPTOR": _DETECTLANGUAGERESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The response message for language detection. - - Attributes: - languages: - A list of detected languages sorted by detection confidence in - descending order. The most probable language first. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DetectLanguageResponse) - }, -) -_sym_db.RegisterMessage(DetectLanguageResponse) - -GetSupportedLanguagesRequest = _reflection.GeneratedProtocolMessageType( - "GetSupportedLanguagesRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETSUPPORTEDLANGUAGESREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The request message for discovering supported languages. - - Attributes: - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-id}`` or - ``projects/{project-id}/locations/{location-id}``. For global - calls, use ``projects/{project-id}/locations/global`` or - ``projects/{project-id}``. Non-global location is required - for AutoML models. Only models within the same region (have - same location-id) can be used, otherwise an INVALID_ARGUMENT - (400) error is returned. - display_language_code: - Optional. The language to use to return localized, human - readable names of supported languages. If missing, then - display names are not returned in a response. - model: - Optional. Get supported languages of this model. The format - depends on model type: - AutoML Translation models: - ``projects/{project-id}/locations/{location-id}/models/{model- - id}`` - General (built-in) models: ``projects/{project- - id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-id}/locations/{location- - id}/models/general/base`` Returns languages supported by the - specified model. If missing, we get supported languages of - Google general base (PBMT) model. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GetSupportedLanguagesRequest) - }, -) -_sym_db.RegisterMessage(GetSupportedLanguagesRequest) - -SupportedLanguages = _reflection.GeneratedProtocolMessageType( - "SupportedLanguages", - (_message.Message,), - { - "DESCRIPTOR": _SUPPORTEDLANGUAGES, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The response message for discovering supported languages. - - Attributes: - languages: - A list of supported language responses. This list contains an - entry for each language the Translation API supports. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.SupportedLanguages) - }, -) -_sym_db.RegisterMessage(SupportedLanguages) - -SupportedLanguage = _reflection.GeneratedProtocolMessageType( - "SupportedLanguage", - (_message.Message,), - { - "DESCRIPTOR": _SUPPORTEDLANGUAGE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """A single supported language response corresponds to information - related to one supported language. - - Attributes: - language_code: - Supported language code, generally consisting of its ISO 639-1 - identifier, for example, ‘en’, ‘ja’. In certain cases, BCP-47 - codes including language and region identifiers are returned - (for example, ‘zh-TW’ and ‘zh-CN’) - display_name: - Human readable name of the language localized in the display - language specified in the request. - support_source: - Can be used as source language. - support_target: - Can be used as target language. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.SupportedLanguage) - }, -) -_sym_db.RegisterMessage(SupportedLanguage) - -GcsSource = _reflection.GeneratedProtocolMessageType( - "GcsSource", - (_message.Message,), - { - "DESCRIPTOR": _GCSSOURCE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The Google Cloud Storage location for the input content. - - Attributes: - input_uri: - Required. Source data URI. For example, - ``gs://my_bucket/my_object``. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GcsSource) - }, -) -_sym_db.RegisterMessage(GcsSource) - -InputConfig = _reflection.GeneratedProtocolMessageType( - "InputConfig", - (_message.Message,), - { - "DESCRIPTOR": _INPUTCONFIG, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Input configuration for BatchTranslateText request. - - Attributes: - mime_type: - Optional. Can be “text/plain” or “text/html”. For ``.tsv``, - “text/html” is used if mime_type is missing. For ``.html``, - this field must be “text/html” or empty. For ``.txt``, this - field must be “text/plain” or empty. - source: - Required. Specify the input. - gcs_source: - Required. Google Cloud Storage location for the source input. - This can be a single file (for example, ``gs://translation- - test/input.tsv``) or a wildcard (for example, - ``gs://translation-test/*``). If a file extension is ``.tsv``, - it can contain either one or two columns. The first column - (optional) is the id of the text request. If the first column - is missing, we use the row number (0-based) from the input - file as the ID in the output file. The second column is the - actual text to be translated. We recommend each row be <= 10K - Unicode codepoints, otherwise an error might be returned. Note - that the input tsv must be RFC 4180 compliant. You could use - https://github.com/Clever/csvlint to check potential - formatting errors in your tsv file. csvlint –delimiter=‘:raw- - latex:`\t`’ your_input_file.tsv The other supported file - extensions are ``.txt`` or ``.html``, which is treated as a - single large chunk of text. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.InputConfig) - }, -) -_sym_db.RegisterMessage(InputConfig) - -GcsDestination = _reflection.GeneratedProtocolMessageType( - "GcsDestination", - (_message.Message,), - { - "DESCRIPTOR": _GCSDESTINATION, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The Google Cloud Storage location for the output content. - - Attributes: - output_uri_prefix: - Required. There must be no files under ‘output_uri_prefix’. - ‘output_uri_prefix’ must end with “/” and start with “gs://”, - otherwise an INVALID_ARGUMENT (400) error is returned. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GcsDestination) - }, -) -_sym_db.RegisterMessage(GcsDestination) - -OutputConfig = _reflection.GeneratedProtocolMessageType( - "OutputConfig", - (_message.Message,), - { - "DESCRIPTOR": _OUTPUTCONFIG, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Output configuration for BatchTranslateText request. - - Attributes: - destination: - Required. The destination of output. - gcs_destination: - Google Cloud Storage destination for output content. For every - single input file (for example, gs://a/b/c.[extension]), we - generate at most 2 \* n output files. (n is the # of - target_language_codes in the BatchTranslateTextRequest). - Output files (tsv) generated are compliant with RFC 4180 - except that record delimiters are ``\\\\n`` instead of - ``\\\\r\\\\n``. We don’t provide any way to - change record delimiters. While the input files are being - processed, we write/update an index file ‘index.csv’ under - ‘output_uri_prefix’ (for example, gs://translation- - test/index.csv) The index file is generated/updated as new - files are being translated. The format is: - input_file,target_language_code,translations_file,errors_file, - glossary_translations_file,glossary_errors_file input_file is - one file we matched using gcs_source.input_uri. - target_language_code is provided in the request. - translations_file contains the translations. (details provided - below) errors_file contains the errors during processing of - the file. (details below). Both translations_file and - errors_file could be empty strings if we have no content to - output. glossary_translations_file and glossary_errors_file - are always empty strings if the input_file is tsv. They could - also be empty if we have no content to output. Once a row is - present in index.csv, the input/output matching never changes. - Callers should also expect all the content in input_file are - processed and ready to be consumed (that is, no partial output - file is written). The format of translations_file (for target - language code ‘trg’) is: - gs://translation_test/a_b_c\_‘trg’\_translations.[extension] - If the input file extension is tsv, the output has the - following columns: Column 1: ID of the request provided in the - input, if it’s not provided in the input, then the input row - number is used (0-based). Column 2: source sentence. Column 3: - translation without applying a glossary. Empty string if there - is an error. Column 4 (only present if a glossary is provided - in the request): translation after applying the glossary. - Empty string if there is an error applying the glossary. Could - be same string as column 3 if there is no glossary applied. - If input file extension is a txt or html, the translation is - directly written to the output file. If glossary is requested, - a separate glossary_translations_file has format of gs://trans - lation_test/a_b_c\_‘trg’\_glossary_translations.[extension] - The format of errors file (for target language code ‘trg’) is: - gs://translation_test/a_b_c\_‘trg’\_errors.[extension] If the - input file extension is tsv, errors_file contains the - following: Column 1: ID of the request provided in the input, - if it’s not provided in the input, then the input row number - is used (0-based). Column 2: source sentence. Column 3: Error - detail for the translation. Could be empty. Column 4 (only - present if a glossary is provided in the request): Error when - applying the glossary. If the input file extension is txt or - html, glossary_error_file will be generated that contains - error details. glossary_error_file has format of gs://translat - ion_test/a_b_c\_‘trg’\_glossary_errors.[extension] - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.OutputConfig) - }, -) -_sym_db.RegisterMessage(OutputConfig) - -BatchTranslateTextRequest = _reflection.GeneratedProtocolMessageType( - "BatchTranslateTextRequest", - (_message.Message,), - { - "ModelsEntry": _reflection.GeneratedProtocolMessageType( - "ModelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_MODELSENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntry) - }, - ), - "GlossariesEntry": _reflection.GeneratedProtocolMessageType( - "GlossariesEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntry) - }, - ), - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The batch translation request. - - Attributes: - parent: - Required. Location to make a call. Must refer to a caller’s - project. Format: ``projects/{project-id}/locations/{location- - id}``. The ``global`` location is not supported for batch - translation. Only AutoML Translation models or glossaries - within the same region (have the same location-id) can be - used, otherwise an INVALID_ARGUMENT (400) error is returned. - source_language_code: - Required. Source language code. - target_language_codes: - Required. Specify up to 10 language codes here. - models: - Optional. The models to use for translation. Map’s key is - target language code. Map’s value is model name. Value can be - a built-in general model, or an AutoML Translation model. The - value format depends on model type: - AutoML Translation - models: ``projects/{project-id}/locations/{location- - id}/models/{model-id}`` - General (built-in) models: - ``projects/{project-id}/locations/{location- - id}/models/general/nmt``, ``projects/{project- - id}/locations/{location-id}/models/general/base`` If the map - is empty or a specific model is not requested for a language - pair, then default google model (nmt) is used. - input_configs: - Required. Input configurations. The total number of files - matched should be <= 1000. The total content size should be <= - 100M Unicode codepoints. The files must use UTF-8 encoding. - output_config: - Required. Output configuration. If 2 input configs match to - the same file (that is, same input path), we don’t generate - output for duplicate inputs. - glossaries: - Optional. Glossaries to be applied for translation. It’s keyed - by target language code. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateTextRequest) - }, -) -_sym_db.RegisterMessage(BatchTranslateTextRequest) -_sym_db.RegisterMessage(BatchTranslateTextRequest.ModelsEntry) -_sym_db.RegisterMessage(BatchTranslateTextRequest.GlossariesEntry) -_sym_db.RegisterMessage(BatchTranslateTextRequest.LabelsEntry) - -BatchTranslateMetadata = _reflection.GeneratedProtocolMessageType( - "BatchTranslateMetadata", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATEMETADATA, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """State metadata for the batch translation operation. - - Attributes: - state: - The state of the operation. - translated_characters: - Number of successfully translated characters so far (Unicode - codepoints). - failed_characters: - Number of characters that have failed to process so far - (Unicode codepoints). - total_characters: - Total number of characters (Unicode codepoints). This is the - total number of codepoints from input files times the number - of target languages and appears here shortly after the call is - submitted. - submit_time: - Time when the operation was submitted. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateMetadata) - }, -) -_sym_db.RegisterMessage(BatchTranslateMetadata) - -BatchTranslateResponse = _reflection.GeneratedProtocolMessageType( - "BatchTranslateResponse", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATERESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.response][google.longrunni - ng.Operation.response] field returned by BatchTranslateText if at - least one sentence is translated successfully. - - Attributes: - total_characters: - Total number of characters (Unicode codepoints). - translated_characters: - Number of successfully translated characters (Unicode - codepoints). - failed_characters: - Number of characters that have failed to process (Unicode - codepoints). - submit_time: - Time when the operation was submitted. - end_time: - The time when the operation is finished and [google.longrunnin - g.Operation.done][google.longrunning.Operation.done] is set to - true. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateResponse) - }, -) -_sym_db.RegisterMessage(BatchTranslateResponse) - -GlossaryInputConfig = _reflection.GeneratedProtocolMessageType( - "GlossaryInputConfig", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARYINPUTCONFIG, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Input configuration for glossaries. - - Attributes: - source: - Required. Specify the input. - gcs_source: - Required. Google Cloud Storage location of glossary data. File - format is determined based on the filename extension. API - returns [google.rpc.Code.INVALID_ARGUMENT] for unsupported - URI-s and file formats. Wildcards are not allowed. This must - be a single file in one of the following formats: For - unidirectional glossaries: - TSV/CSV (``.tsv``/``.csv``): 2 - column file, tab- or comma-separated. The first column is - source text. The second column is target text. The file - must not contain headers. That is, the first row is data, - not column names. - TMX (``.tmx``): TMX file with parallel - data defining source/target term pairs. For equivalent - term sets glossaries: - CSV (``.csv``): Multi-column CSV - file defining equivalent glossary terms in multiple - languages. The format is defined for Google Translation - Toolkit and documented in `Use a glossary `__. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GlossaryInputConfig) - }, -) -_sym_db.RegisterMessage(GlossaryInputConfig) - -Glossary = _reflection.GeneratedProtocolMessageType( - "Glossary", - (_message.Message,), - { - "LanguageCodePair": _reflection.GeneratedProtocolMessageType( - "LanguageCodePair", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARY_LANGUAGECODEPAIR, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Used with unidirectional glossaries. - - Attributes: - source_language_code: - Required. The BCP-47 language code of the input text, for - example, “en-US”. Expected to be an exact match for - GlossaryTerm.language_code. - target_language_code: - Required. The BCP-47 language code for translation output, for - example, “zh-CN”. Expected to be an exact match for - GlossaryTerm.language_code. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.Glossary.LanguageCodePair) - }, - ), - "LanguageCodesSet": _reflection.GeneratedProtocolMessageType( - "LanguageCodesSet", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARY_LANGUAGECODESSET, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Used with equivalent term set glossaries. - - Attributes: - language_codes: - The BCP-47 language code(s) for terms defined in the glossary. - All entries are unique. The list contains at least two - entries. Expected to be an exact match for - GlossaryTerm.language_code. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.Glossary.LanguageCodesSet) - }, - ), - "DESCRIPTOR": _GLOSSARY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Represents a glossary built from user provided data. - - Attributes: - name: - Required. The resource name of the glossary. Glossary names - have the form ``projects/{project-id}/locations/{location- - id}/glossaries/{glossary-id}``. - languages: - Languages supported by the glossary. - language_pair: - Used with unidirectional glossaries. - language_codes_set: - Used with equivalent term set glossaries. - input_config: - Required. Provides examples to build the glossary from. Total - glossary must not exceed 10M Unicode codepoints. - entry_count: - Output only. The number of entries defined in the glossary. - submit_time: - Output only. When CreateGlossary was called. - end_time: - Output only. When the glossary creation was finished. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.Glossary) - }, -) -_sym_db.RegisterMessage(Glossary) -_sym_db.RegisterMessage(Glossary.LanguageCodePair) -_sym_db.RegisterMessage(Glossary.LanguageCodesSet) - -CreateGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "CreateGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _CREATEGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Request message for CreateGlossary. - - Attributes: - parent: - Required. The project name. - glossary: - Required. The glossary to create. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.CreateGlossaryRequest) - }, -) -_sym_db.RegisterMessage(CreateGlossaryRequest) - -GetGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "GetGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Request message for GetGlossary. - - Attributes: - name: - Required. The name of the glossary to retrieve. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GetGlossaryRequest) - }, -) -_sym_db.RegisterMessage(GetGlossaryRequest) - -DeleteGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Request message for DeleteGlossary. - - Attributes: - name: - Required. The name of the glossary to delete. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DeleteGlossaryRequest) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryRequest) - -ListGlossariesRequest = _reflection.GeneratedProtocolMessageType( - "ListGlossariesRequest", - (_message.Message,), - { - "DESCRIPTOR": _LISTGLOSSARIESREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Request message for ListGlossaries. - - Attributes: - parent: - Required. The name of the project from which to list all of - the glossaries. - page_size: - Optional. Requested page size. The server may return fewer - glossaries than requested. If unspecified, the server picks an - appropriate default. - page_token: - Optional. A token identifying a page of results the server - should return. Typically, this is the value of - [ListGlossariesResponse.next_page_token] returned from the - previous call to ``ListGlossaries`` method. The first page is - returned if ``page_token``\ is empty or missing. - filter: - Optional. Filter specifying constraints of a list operation. - Filtering is not supported yet, and the parameter currently - has no effect. If missing, no filtering is performed. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.ListGlossariesRequest) - }, -) -_sym_db.RegisterMessage(ListGlossariesRequest) - -ListGlossariesResponse = _reflection.GeneratedProtocolMessageType( - "ListGlossariesResponse", - (_message.Message,), - { - "DESCRIPTOR": _LISTGLOSSARIESRESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Response message for ListGlossaries. - - Attributes: - glossaries: - The list of glossaries for a project. - next_page_token: - A token to retrieve a page of results. Pass this value in the - [ListGlossariesRequest.page_token] field in the subsequent - call to ``ListGlossaries`` method to retrieve the next page of - results. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.ListGlossariesResponse) - }, -) -_sym_db.RegisterMessage(ListGlossariesResponse) - -CreateGlossaryMetadata = _reflection.GeneratedProtocolMessageType( - "CreateGlossaryMetadata", - (_message.Message,), - { - "DESCRIPTOR": _CREATEGLOSSARYMETADATA, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.metadata][google.longrunni - ng.Operation.metadata] field returned by CreateGlossary. - - Attributes: - name: - The name of the glossary that is being created. - state: - The current state of the glossary creation operation. - submit_time: - The time when the operation was submitted to the server. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.CreateGlossaryMetadata) - }, -) -_sym_db.RegisterMessage(CreateGlossaryMetadata) - -DeleteGlossaryMetadata = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryMetadata", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYMETADATA, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.metadata][google.longrunni - ng.Operation.metadata] field returned by DeleteGlossary. - - Attributes: - name: - The name of the glossary that is being deleted. - state: - The current state of the glossary deletion operation. - submit_time: - The time when the operation was submitted to the server. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DeleteGlossaryMetadata) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryMetadata) - -DeleteGlossaryResponse = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryResponse", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYRESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.response][google.longrunni - ng.Operation.response] field returned by DeleteGlossary. - - Attributes: - name: - The name of the deleted glossary. - submit_time: - The time when the operation was submitted to the server. - end_time: - The time when the glossary deletion is finished and [google.lo - ngrunning.Operation.done][google.longrunning.Operation.done] - is set to true. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DeleteGlossaryResponse) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryResponse) - - -DESCRIPTOR._options = None -_TRANSLATETEXTGLOSSARYCONFIG.fields_by_name["glossary"]._options = None -_TRANSLATETEXTGLOSSARYCONFIG.fields_by_name["ignore_case"]._options = None -_TRANSLATETEXTREQUEST_LABELSENTRY._options = None -_TRANSLATETEXTREQUEST.fields_by_name["contents"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["mime_type"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["source_language_code"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["target_language_code"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["parent"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["model"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["glossary_config"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["labels"]._options = None -_DETECTLANGUAGEREQUEST_LABELSENTRY._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["parent"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["model"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["mime_type"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["parent"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["display_language_code"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["model"]._options = None -_GCSSOURCE.fields_by_name["input_uri"]._options = None -_INPUTCONFIG.fields_by_name["mime_type"]._options = None -_GCSDESTINATION.fields_by_name["output_uri_prefix"]._options = None -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY._options = None -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY._options = None -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["parent"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["source_language_code"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["target_language_codes"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["models"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["input_configs"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["output_config"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["glossaries"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["labels"]._options = None -_GLOSSARY.fields_by_name["name"]._options = None -_GLOSSARY.fields_by_name["entry_count"]._options = None -_GLOSSARY.fields_by_name["submit_time"]._options = None -_GLOSSARY.fields_by_name["end_time"]._options = None -_GLOSSARY._options = None -_CREATEGLOSSARYREQUEST.fields_by_name["parent"]._options = None -_CREATEGLOSSARYREQUEST.fields_by_name["glossary"]._options = None -_GETGLOSSARYREQUEST.fields_by_name["name"]._options = None -_DELETEGLOSSARYREQUEST.fields_by_name["name"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["parent"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["page_size"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["page_token"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["filter"]._options = None - -_TRANSLATIONSERVICE = _descriptor.ServiceDescriptor( - name="TranslationService", - full_name="google.cloud.translation.v3beta1.TranslationService", - file=DESCRIPTOR, - index=0, - serialized_options=b"\312A\030translate.googleapis.com\322A`https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translation", - create_key=_descriptor._internal_create_key, - serialized_start=5659, - serialized_end=7733, - methods=[ - _descriptor.MethodDescriptor( - name="TranslateText", - full_name="google.cloud.translation.v3beta1.TranslationService.TranslateText", - index=0, - containing_service=None, - input_type=_TRANSLATETEXTREQUEST, - output_type=_TRANSLATETEXTRESPONSE, - serialized_options=b'\202\323\344\223\002l"6/v3beta1/{parent=projects/*/locations/*}:translateText:\001*Z/"*/v3beta1/{parent=projects/*}:translateText:\001*', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DetectLanguage", - full_name="google.cloud.translation.v3beta1.TranslationService.DetectLanguage", - index=1, - containing_service=None, - input_type=_DETECTLANGUAGEREQUEST, - output_type=_DETECTLANGUAGERESPONSE, - serialized_options=b'\202\323\344\223\002n"7/v3beta1/{parent=projects/*/locations/*}:detectLanguage:\001*Z0"+/v3beta1/{parent=projects/*}:detectLanguage:\001*\332A\026parent,model,mime_type', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="GetSupportedLanguages", - full_name="google.cloud.translation.v3beta1.TranslationService.GetSupportedLanguages", - index=2, - containing_service=None, - input_type=_GETSUPPORTEDLANGUAGESREQUEST, - output_type=_SUPPORTEDLANGUAGES, - serialized_options=b'\202\323\344\223\002p\022;/v3beta1/{parent=projects/*/locations/*}/supportedLanguagesZ1\022//v3beta1/{parent=projects/*}/supportedLanguages\332A"parent,display_language_code,model', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="BatchTranslateText", - full_name="google.cloud.translation.v3beta1.TranslationService.BatchTranslateText", - index=3, - containing_service=None, - input_type=_BATCHTRANSLATETEXTREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b'\202\323\344\223\002@";/v3beta1/{parent=projects/*/locations/*}:batchTranslateText:\001*\312A0\n\026BatchTranslateResponse\022\026BatchTranslateMetadata', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="CreateGlossary", - full_name="google.cloud.translation.v3beta1.TranslationService.CreateGlossary", - index=4, - containing_service=None, - input_type=_CREATEGLOSSARYREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b'\202\323\344\223\002?"3/v3beta1/{parent=projects/*/locations/*}/glossaries:\010glossary\332A\017parent,glossary\312A"\n\010Glossary\022\026CreateGlossaryMetadata', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="ListGlossaries", - full_name="google.cloud.translation.v3beta1.TranslationService.ListGlossaries", - index=5, - containing_service=None, - input_type=_LISTGLOSSARIESREQUEST, - output_type=_LISTGLOSSARIESRESPONSE, - serialized_options=b"\202\323\344\223\0025\0223/v3beta1/{parent=projects/*/locations/*}/glossaries\332A\006parent\332A\rparent,filter", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="GetGlossary", - full_name="google.cloud.translation.v3beta1.TranslationService.GetGlossary", - index=6, - containing_service=None, - input_type=_GETGLOSSARYREQUEST, - output_type=_GLOSSARY, - serialized_options=b"\202\323\344\223\0025\0223/v3beta1/{name=projects/*/locations/*/glossaries/*}\332A\004name", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DeleteGlossary", - full_name="google.cloud.translation.v3beta1.TranslationService.DeleteGlossary", - index=7, - containing_service=None, - input_type=_DELETEGLOSSARYREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b"\202\323\344\223\0025*3/v3beta1/{name=projects/*/locations/*/glossaries/*}\332A\004name\312A0\n\026DeleteGlossaryResponse\022\026DeleteGlossaryMetadata", - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_TRANSLATIONSERVICE) - -DESCRIPTOR.services_by_name["TranslationService"] = _TRANSLATIONSERVICE - -# @@protoc_insertion_point(module_scope) diff --git a/google/cloud/translate_v3beta1/proto/translation_service_pb2_grpc.py b/google/cloud/translate_v3beta1/proto/translation_service_pb2_grpc.py deleted file mode 100644 index 03a02437..00000000 --- a/google/cloud/translate_v3beta1/proto/translation_service_pb2_grpc.py +++ /dev/null @@ -1,411 +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.translate_v3beta1.proto import ( - translation_service_pb2 as google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2, -) -from google.longrunning import ( - operations_pb2 as google_dot_longrunning_dot_operations__pb2, -) - - -class TranslationServiceStub(object): - """Proto file for the Cloud Translation API (v3beta1). - - Provides natural language translation operations. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.TranslateText = channel.unary_unary( - "/google.cloud.translation.v3beta1.TranslationService/TranslateText", - request_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.TranslateTextRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.TranslateTextResponse.FromString, - ) - self.DetectLanguage = channel.unary_unary( - "/google.cloud.translation.v3beta1.TranslationService/DetectLanguage", - request_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DetectLanguageRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DetectLanguageResponse.FromString, - ) - self.GetSupportedLanguages = channel.unary_unary( - "/google.cloud.translation.v3beta1.TranslationService/GetSupportedLanguages", - request_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.GetSupportedLanguagesRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.SupportedLanguages.FromString, - ) - self.BatchTranslateText = channel.unary_unary( - "/google.cloud.translation.v3beta1.TranslationService/BatchTranslateText", - request_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.BatchTranslateTextRequest.SerializeToString, - response_deserializer=google_dot_longrunning_dot_operations__pb2.Operation.FromString, - ) - self.CreateGlossary = channel.unary_unary( - "/google.cloud.translation.v3beta1.TranslationService/CreateGlossary", - request_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.CreateGlossaryRequest.SerializeToString, - response_deserializer=google_dot_longrunning_dot_operations__pb2.Operation.FromString, - ) - self.ListGlossaries = channel.unary_unary( - "/google.cloud.translation.v3beta1.TranslationService/ListGlossaries", - request_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.ListGlossariesRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.ListGlossariesResponse.FromString, - ) - self.GetGlossary = channel.unary_unary( - "/google.cloud.translation.v3beta1.TranslationService/GetGlossary", - request_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.GetGlossaryRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.Glossary.FromString, - ) - self.DeleteGlossary = channel.unary_unary( - "/google.cloud.translation.v3beta1.TranslationService/DeleteGlossary", - request_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DeleteGlossaryRequest.SerializeToString, - response_deserializer=google_dot_longrunning_dot_operations__pb2.Operation.FromString, - ) - - -class TranslationServiceServicer(object): - """Proto file for the Cloud Translation API (v3beta1). - - Provides natural language translation operations. - """ - - def TranslateText(self, request, context): - """Translates input text and returns translated text. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def DetectLanguage(self, request, context): - """Detects the language of text within a request. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def GetSupportedLanguages(self, request, context): - """Returns a list of supported languages for translation. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def BatchTranslateText(self, request, context): - """Translates a large volume of text in asynchronous batch mode. - This function provides real-time output as the inputs are being processed. - If caller cancels a request, the partial results (for an input file, it's - all or nothing) may still be available on the specified output location. - - This call returns immediately and you can - use google.longrunning.Operation.name to poll the status of the call. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def CreateGlossary(self, request, context): - """Creates a glossary and returns the long-running operation. Returns - NOT_FOUND, if the project doesn't exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def ListGlossaries(self, request, context): - """Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't - exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def GetGlossary(self, request, context): - """Gets a glossary. Returns NOT_FOUND, if the glossary doesn't - exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def DeleteGlossary(self, request, context): - """Deletes a glossary, or cancels glossary construction - if the glossary isn't created yet. - Returns NOT_FOUND, if the glossary doesn't exist. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_TranslationServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - "TranslateText": grpc.unary_unary_rpc_method_handler( - servicer.TranslateText, - request_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.TranslateTextRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.TranslateTextResponse.SerializeToString, - ), - "DetectLanguage": grpc.unary_unary_rpc_method_handler( - servicer.DetectLanguage, - request_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DetectLanguageRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DetectLanguageResponse.SerializeToString, - ), - "GetSupportedLanguages": grpc.unary_unary_rpc_method_handler( - servicer.GetSupportedLanguages, - request_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.GetSupportedLanguagesRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.SupportedLanguages.SerializeToString, - ), - "BatchTranslateText": grpc.unary_unary_rpc_method_handler( - servicer.BatchTranslateText, - request_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.BatchTranslateTextRequest.FromString, - response_serializer=google_dot_longrunning_dot_operations__pb2.Operation.SerializeToString, - ), - "CreateGlossary": grpc.unary_unary_rpc_method_handler( - servicer.CreateGlossary, - request_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.CreateGlossaryRequest.FromString, - response_serializer=google_dot_longrunning_dot_operations__pb2.Operation.SerializeToString, - ), - "ListGlossaries": grpc.unary_unary_rpc_method_handler( - servicer.ListGlossaries, - request_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.ListGlossariesRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.ListGlossariesResponse.SerializeToString, - ), - "GetGlossary": grpc.unary_unary_rpc_method_handler( - servicer.GetGlossary, - request_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.GetGlossaryRequest.FromString, - response_serializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.Glossary.SerializeToString, - ), - "DeleteGlossary": grpc.unary_unary_rpc_method_handler( - servicer.DeleteGlossary, - request_deserializer=google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DeleteGlossaryRequest.FromString, - response_serializer=google_dot_longrunning_dot_operations__pb2.Operation.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "google.cloud.translation.v3beta1.TranslationService", rpc_method_handlers - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class TranslationService(object): - """Proto file for the Cloud Translation API (v3beta1). - - Provides natural language translation operations. - """ - - @staticmethod - def TranslateText( - 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.cloud.translation.v3beta1.TranslationService/TranslateText", - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.TranslateTextRequest.SerializeToString, - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.TranslateTextResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def DetectLanguage( - 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.cloud.translation.v3beta1.TranslationService/DetectLanguage", - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DetectLanguageRequest.SerializeToString, - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DetectLanguageResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def GetSupportedLanguages( - 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.cloud.translation.v3beta1.TranslationService/GetSupportedLanguages", - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.GetSupportedLanguagesRequest.SerializeToString, - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.SupportedLanguages.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def BatchTranslateText( - 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.cloud.translation.v3beta1.TranslationService/BatchTranslateText", - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.BatchTranslateTextRequest.SerializeToString, - google_dot_longrunning_dot_operations__pb2.Operation.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def CreateGlossary( - 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.cloud.translation.v3beta1.TranslationService/CreateGlossary", - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.CreateGlossaryRequest.SerializeToString, - google_dot_longrunning_dot_operations__pb2.Operation.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def ListGlossaries( - 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.cloud.translation.v3beta1.TranslationService/ListGlossaries", - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.ListGlossariesRequest.SerializeToString, - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.ListGlossariesResponse.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def GetGlossary( - 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.cloud.translation.v3beta1.TranslationService/GetGlossary", - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.GetGlossaryRequest.SerializeToString, - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.Glossary.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def DeleteGlossary( - 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.cloud.translation.v3beta1.TranslationService/DeleteGlossary", - google_dot_cloud_dot_translate__v3beta1_dot_proto_dot_translation__service__pb2.DeleteGlossaryRequest.SerializeToString, - google_dot_longrunning_dot_operations__pb2.Operation.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/google/cloud/translate_v3beta1/py.typed b/google/cloud/translate_v3beta1/py.typed new file mode 100644 index 00000000..dd819a47 --- /dev/null +++ b/google/cloud/translate_v3beta1/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-translation package uses inline types. diff --git a/google/cloud/translate_v3beta1/services/__init__.py b/google/cloud/translate_v3beta1/services/__init__.py new file mode 100644 index 00000000..42ffdf2b --- /dev/null +++ b/google/cloud/translate_v3beta1/services/__init__.py @@ -0,0 +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/google/cloud/translate_v3beta1/services/translation_service/__init__.py b/google/cloud/translate_v3beta1/services/translation_service/__init__.py new file mode 100644 index 00000000..e2442711 --- /dev/null +++ b/google/cloud/translate_v3beta1/services/translation_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 TranslationServiceClient +from .async_client import TranslationServiceAsyncClient + +__all__ = ( + "TranslationServiceClient", + "TranslationServiceAsyncClient", +) diff --git a/google/cloud/translate_v3beta1/services/translation_service/async_client.py b/google/cloud/translate_v3beta1/services/translation_service/async_client.py new file mode 100644 index 00000000..123e0a07 --- /dev/null +++ b/google/cloud/translate_v3beta1/services/translation_service/async_client.py @@ -0,0 +1,797 @@ +# -*- 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.api_core import operation +from google.api_core import operation_async +from google.cloud.translate_v3beta1.services.translation_service import pagers +from google.cloud.translate_v3beta1.types import translation_service +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + +from .transports.base import TranslationServiceTransport +from .transports.grpc_asyncio import TranslationServiceGrpcAsyncIOTransport +from .client import TranslationServiceClient + + +class TranslationServiceAsyncClient: + """Provides natural language translation operations.""" + + _client: TranslationServiceClient + + DEFAULT_ENDPOINT = TranslationServiceClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = TranslationServiceClient.DEFAULT_MTLS_ENDPOINT + + glossary_path = staticmethod(TranslationServiceClient.glossary_path) + + from_service_account_file = TranslationServiceClient.from_service_account_file + from_service_account_json = from_service_account_file + + get_transport_class = functools.partial( + type(TranslationServiceClient).get_transport_class, + type(TranslationServiceClient), + ) + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, TranslationServiceTransport] = "grpc_asyncio", + client_options: ClientOptions = None, + ) -> None: + """Instantiate the translation 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, ~.TranslationServiceTransport]): 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 = TranslationServiceClient( + credentials=credentials, transport=transport, client_options=client_options, + ) + + async def translate_text( + self, + request: translation_service.TranslateTextRequest = None, + *, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.TranslateTextResponse: + r"""Translates input text and returns translated text. + + Args: + request (:class:`~.translation_service.TranslateTextRequest`): + The request object. The request message for synchronous + translation. + + 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: + ~.translation_service.TranslateTextResponse: + + """ + # Create or coerce a protobuf request object. + + request = translation_service.TranslateTextRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.translate_text, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def detect_language( + self, + request: translation_service.DetectLanguageRequest = None, + *, + parent: str = None, + model: str = None, + mime_type: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.DetectLanguageResponse: + r"""Detects the language of text within a request. + + Args: + request (:class:`~.translation_service.DetectLanguageRequest`): + The request object. The request message for language + detection. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: + ``projects/{project-id}/locations/{location-id}`` or + ``projects/{project-id}``. + + For global calls, use + ``projects/{project-id}/locations/global`` or + ``projects/{project-id}``. + + Only models within the same region (has same + location-id) can be used. Otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. The language detection model to be used. + + Format: + ``projects/{project-id}/locations/{location-id}/models/language-detection/{model-id}`` + + Only one language detection model is currently + supported: + ``projects/{project-id}/locations/{location-id}/models/language-detection/default``. + + If not specified, the default model is used. + This corresponds to the ``model`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mime_type (:class:`str`): + Optional. The format of the source + text, for example, "text/html", + "text/plain". If left blank, the MIME + type defaults to "text/html". + This corresponds to the ``mime_type`` 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: + ~.translation_service.DetectLanguageResponse: + The response message for language + detection. + + """ + # 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([parent, model, mime_type]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.DetectLanguageRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.detect_language, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def get_supported_languages( + self, + request: translation_service.GetSupportedLanguagesRequest = None, + *, + parent: str = None, + display_language_code: str = None, + model: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.SupportedLanguages: + r"""Returns a list of supported languages for + translation. + + Args: + request (:class:`~.translation_service.GetSupportedLanguagesRequest`): + The request object. The request message for discovering + supported languages. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: ``projects/{project-id}`` or + ``projects/{project-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-id}/locations/global`` or + ``projects/{project-id}``. + + Non-global location is required for AutoML models. + + Only models within the same region (have same + location-id) can be used, otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + display_language_code (:class:`str`): + Optional. The language to use to + return localized, human readable names + of supported languages. If missing, then + display names are not returned in a + response. + This corresponds to the ``display_language_code`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. Get supported languages of this model. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-id}/locations/{location-id}/models/general/base`` + + Returns languages supported by the specified model. If + missing, we get supported languages of Google general + base (PBMT) model. + This corresponds to the ``model`` 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: + ~.translation_service.SupportedLanguages: + The response message for discovering + supported languages. + + """ + # 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([parent, display_language_code, model]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.GetSupportedLanguagesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if display_language_code is not None: + request.display_language_code = display_language_code + if model is not None: + request.model = model + + # 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_supported_languages, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def batch_translate_text( + self, + request: translation_service.BatchTranslateTextRequest = None, + *, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Translates a large volume of text in asynchronous + batch mode. This function provides real-time output as + the inputs are being processed. If caller cancels a + request, the partial results (for an input file, it's + all or nothing) may still be available on the specified + output location. + This call returns immediately and you can + use google.longrunning.Operation.name to poll the status + of the call. + + Args: + request (:class:`~.translation_service.BatchTranslateTextRequest`): + The request object. The batch translation request. + + 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: + ~.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.BatchTranslateResponse``: + Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by BatchTranslateText if at least one + sentence is translated successfully. + + """ + # Create or coerce a protobuf request object. + + request = translation_service.BatchTranslateTextRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.batch_translate_text, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + translation_service.BatchTranslateResponse, + metadata_type=translation_service.BatchTranslateMetadata, + ) + + # Done; return the response. + return response + + async def create_glossary( + self, + request: translation_service.CreateGlossaryRequest = None, + *, + parent: str = None, + glossary: translation_service.Glossary = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Creates a glossary and returns the long-running operation. + Returns NOT_FOUND, if the project doesn't exist. + + Args: + request (:class:`~.translation_service.CreateGlossaryRequest`): + The request object. Request message for CreateGlossary. + parent (:class:`str`): + Required. The project name. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + glossary (:class:`~.translation_service.Glossary`): + Required. The glossary to create. + This corresponds to the ``glossary`` 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: + ~.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.Glossary``: Represents a + glossary built from user provided data. + + """ + # 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([parent, glossary]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.CreateGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if glossary is not None: + request.glossary = glossary + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_glossary, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + translation_service.Glossary, + metadata_type=translation_service.CreateGlossaryMetadata, + ) + + # Done; return the response. + return response + + async def list_glossaries( + self, + request: translation_service.ListGlossariesRequest = None, + *, + parent: str = None, + filter: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListGlossariesAsyncPager: + r"""Lists glossaries in a project. Returns NOT_FOUND, if the project + doesn't exist. + + Args: + request (:class:`~.translation_service.ListGlossariesRequest`): + The request object. Request message for ListGlossaries. + parent (:class:`str`): + Required. The name of the project + from which to list all of the + glossaries. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + filter (:class:`str`): + Optional. Filter specifying + constraints of a list operation. + Filtering is not supported yet, and the + parameter currently has no effect. If + missing, no filtering is performed. + This corresponds to the ``filter`` 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.ListGlossariesAsyncPager: + Response message for ListGlossaries. + 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([parent, filter]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.ListGlossariesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if filter is not None: + request.filter = filter + + # 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_glossaries, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # 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.ListGlossariesAsyncPager( + method=rpc, request=request, response=response, metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_glossary( + self, + request: translation_service.GetGlossaryRequest = None, + *, + name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.Glossary: + r"""Gets a glossary. Returns NOT_FOUND, if the glossary doesn't + exist. + + Args: + request (:class:`~.translation_service.GetGlossaryRequest`): + The request object. Request message for GetGlossary. + name (:class:`str`): + Required. The name of the glossary to + retrieve. + This corresponds to the ``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: + ~.translation_service.Glossary: + Represents a glossary built from user + provided data. + + """ + # 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([name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.GetGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if name is not None: + request.name = 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_glossary, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def delete_glossary( + self, + request: translation_service.DeleteGlossaryRequest = None, + *, + name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Deletes a glossary, or cancels glossary construction if the + glossary isn't created yet. Returns NOT_FOUND, if the glossary + doesn't exist. + + Args: + request (:class:`~.translation_service.DeleteGlossaryRequest`): + The request object. Request message for DeleteGlossary. + name (:class:`str`): + Required. The name of the glossary to + delete. + This corresponds to the ``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: + ~.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.DeleteGlossaryResponse``: + Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by DeleteGlossary. + + """ + # 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([name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.DeleteGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if name is not None: + request.name = 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_glossary, + default_timeout=None, + client_info=_client_info, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + translation_service.DeleteGlossaryResponse, + metadata_type=translation_service.DeleteGlossaryMetadata, + ) + + # Done; return the response. + return response + + +try: + _client_info = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + ) +except pkg_resources.DistributionNotFound: + _client_info = gapic_v1.client_info.ClientInfo() + + +__all__ = ("TranslationServiceAsyncClient",) diff --git a/google/cloud/translate_v3beta1/services/translation_service/client.py b/google/cloud/translate_v3beta1/services/translation_service/client.py new file mode 100644 index 00000000..64bcc138 --- /dev/null +++ b/google/cloud/translate_v3beta1/services/translation_service/client.py @@ -0,0 +1,906 @@ +# -*- 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.api_core import operation +from google.api_core import operation_async +from google.cloud.translate_v3beta1.services.translation_service import pagers +from google.cloud.translate_v3beta1.types import translation_service +from google.protobuf import timestamp_pb2 as timestamp # type: ignore + +from .transports.base import TranslationServiceTransport +from .transports.grpc import TranslationServiceGrpcTransport +from .transports.grpc_asyncio import TranslationServiceGrpcAsyncIOTransport + + +class TranslationServiceClientMeta(type): + """Metaclass for the TranslationService 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[TranslationServiceTransport]] + _transport_registry["grpc"] = TranslationServiceGrpcTransport + _transport_registry["grpc_asyncio"] = TranslationServiceGrpcAsyncIOTransport + + def get_transport_class( + cls, label: str = None, + ) -> Type[TranslationServiceTransport]: + """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 TranslationServiceClient(metaclass=TranslationServiceClientMeta): + """Provides natural language translation operations.""" + + @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 = "translate.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 glossary_path(project: str, location: str, glossary: str,) -> str: + """Return a fully-qualified glossary string.""" + return "projects/{project}/locations/{location}/glossaries/{glossary}".format( + project=project, location=location, glossary=glossary, + ) + + @staticmethod + def parse_glossary_path(path: str) -> Dict[str, str]: + """Parse a glossary path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/glossaries/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + def __init__( + self, + *, + credentials: credentials.Credentials = None, + transport: Union[str, TranslationServiceTransport] = None, + client_options: ClientOptions = None, + ) -> None: + """Instantiate the translation 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, ~.TranslationServiceTransport]): 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. + """ + 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, TranslationServiceTransport): + # transport is a TranslationServiceTransport 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, + ) + + def translate_text( + self, + request: translation_service.TranslateTextRequest = None, + *, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.TranslateTextResponse: + r"""Translates input text and returns translated text. + + Args: + request (:class:`~.translation_service.TranslateTextRequest`): + The request object. The request message for synchronous + translation. + + 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: + ~.translation_service.TranslateTextResponse: + + """ + # Create or coerce a protobuf request object. + + request = translation_service.TranslateTextRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.translate_text] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def detect_language( + self, + request: translation_service.DetectLanguageRequest = None, + *, + parent: str = None, + model: str = None, + mime_type: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.DetectLanguageResponse: + r"""Detects the language of text within a request. + + Args: + request (:class:`~.translation_service.DetectLanguageRequest`): + The request object. The request message for language + detection. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: + ``projects/{project-id}/locations/{location-id}`` or + ``projects/{project-id}``. + + For global calls, use + ``projects/{project-id}/locations/global`` or + ``projects/{project-id}``. + + Only models within the same region (has same + location-id) can be used. Otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. The language detection model to be used. + + Format: + ``projects/{project-id}/locations/{location-id}/models/language-detection/{model-id}`` + + Only one language detection model is currently + supported: + ``projects/{project-id}/locations/{location-id}/models/language-detection/default``. + + If not specified, the default model is used. + This corresponds to the ``model`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mime_type (:class:`str`): + Optional. The format of the source + text, for example, "text/html", + "text/plain". If left blank, the MIME + type defaults to "text/html". + This corresponds to the ``mime_type`` 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: + ~.translation_service.DetectLanguageResponse: + The response message for language + detection. + + """ + # 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([parent, model, mime_type]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.DetectLanguageRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.detect_language] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def get_supported_languages( + self, + request: translation_service.GetSupportedLanguagesRequest = None, + *, + parent: str = None, + display_language_code: str = None, + model: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.SupportedLanguages: + r"""Returns a list of supported languages for + translation. + + Args: + request (:class:`~.translation_service.GetSupportedLanguagesRequest`): + The request object. The request message for discovering + supported languages. + parent (:class:`str`): + Required. Project or location to make a call. Must refer + to a caller's project. + + Format: ``projects/{project-id}`` or + ``projects/{project-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-id}/locations/global`` or + ``projects/{project-id}``. + + Non-global location is required for AutoML models. + + Only models within the same region (have same + location-id) can be used, otherwise an INVALID_ARGUMENT + (400) error is returned. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + display_language_code (:class:`str`): + Optional. The language to use to + return localized, human readable names + of supported languages. If missing, then + display names are not returned in a + response. + This corresponds to the ``display_language_code`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + model (:class:`str`): + Optional. Get supported languages of this model. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-id}/locations/{location-id}/models/general/base`` + + Returns languages supported by the specified model. If + missing, we get supported languages of Google general + base (PBMT) model. + This corresponds to the ``model`` 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: + ~.translation_service.SupportedLanguages: + The response message for discovering + supported languages. + + """ + # 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([parent, display_language_code, model]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.GetSupportedLanguagesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if display_language_code is not None: + request.display_language_code = display_language_code + if model is not None: + request.model = model + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_supported_languages] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def batch_translate_text( + self, + request: translation_service.BatchTranslateTextRequest = None, + *, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Translates a large volume of text in asynchronous + batch mode. This function provides real-time output as + the inputs are being processed. If caller cancels a + request, the partial results (for an input file, it's + all or nothing) may still be available on the specified + output location. + This call returns immediately and you can + use google.longrunning.Operation.name to poll the status + of the call. + + Args: + request (:class:`~.translation_service.BatchTranslateTextRequest`): + The request object. The batch translation request. + + 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: + ~.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.BatchTranslateResponse``: + Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by BatchTranslateText if at least one + sentence is translated successfully. + + """ + # Create or coerce a protobuf request object. + + request = translation_service.BatchTranslateTextRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.batch_translate_text] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + translation_service.BatchTranslateResponse, + metadata_type=translation_service.BatchTranslateMetadata, + ) + + # Done; return the response. + return response + + def create_glossary( + self, + request: translation_service.CreateGlossaryRequest = None, + *, + parent: str = None, + glossary: translation_service.Glossary = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Creates a glossary and returns the long-running operation. + Returns NOT_FOUND, if the project doesn't exist. + + Args: + request (:class:`~.translation_service.CreateGlossaryRequest`): + The request object. Request message for CreateGlossary. + parent (:class:`str`): + Required. The project name. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + glossary (:class:`~.translation_service.Glossary`): + Required. The glossary to create. + This corresponds to the ``glossary`` 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: + ~.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.Glossary``: Represents a + glossary built from user provided data. + + """ + # 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([parent, glossary]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.CreateGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if glossary is not None: + request.glossary = glossary + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_glossary] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + translation_service.Glossary, + metadata_type=translation_service.CreateGlossaryMetadata, + ) + + # Done; return the response. + return response + + def list_glossaries( + self, + request: translation_service.ListGlossariesRequest = None, + *, + parent: str = None, + filter: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListGlossariesPager: + r"""Lists glossaries in a project. Returns NOT_FOUND, if the project + doesn't exist. + + Args: + request (:class:`~.translation_service.ListGlossariesRequest`): + The request object. Request message for ListGlossaries. + parent (:class:`str`): + Required. The name of the project + from which to list all of the + glossaries. + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + filter (:class:`str`): + Optional. Filter specifying + constraints of a list operation. + Filtering is not supported yet, and the + parameter currently has no effect. If + missing, no filtering is performed. + This corresponds to the ``filter`` 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.ListGlossariesPager: + Response message for ListGlossaries. + 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([parent, filter]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.ListGlossariesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if filter is not None: + request.filter = filter + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_glossaries] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # 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.ListGlossariesPager( + method=rpc, request=request, response=response, metadata=metadata, + ) + + # Done; return the response. + return response + + def get_glossary( + self, + request: translation_service.GetGlossaryRequest = None, + *, + name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> translation_service.Glossary: + r"""Gets a glossary. Returns NOT_FOUND, if the glossary doesn't + exist. + + Args: + request (:class:`~.translation_service.GetGlossaryRequest`): + The request object. Request message for GetGlossary. + name (:class:`str`): + Required. The name of the glossary to + retrieve. + This corresponds to the ``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: + ~.translation_service.Glossary: + Represents a glossary built from user + provided data. + + """ + # 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([name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.GetGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_glossary] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def delete_glossary( + self, + request: translation_service.DeleteGlossaryRequest = None, + *, + name: str = None, + retry: retries.Retry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Deletes a glossary, or cancels glossary construction if the + glossary isn't created yet. Returns NOT_FOUND, if the glossary + doesn't exist. + + Args: + request (:class:`~.translation_service.DeleteGlossaryRequest`): + The request object. Request message for DeleteGlossary. + name (:class:`str`): + Required. The name of the glossary to + delete. + This corresponds to the ``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: + ~.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:``~.translation_service.DeleteGlossaryResponse``: + Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by DeleteGlossary. + + """ + # 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([name]): + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = translation_service.DeleteGlossaryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_glossary] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + translation_service.DeleteGlossaryResponse, + metadata_type=translation_service.DeleteGlossaryMetadata, + ) + + # Done; return the response. + return response + + +try: + _client_info = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + ) +except pkg_resources.DistributionNotFound: + _client_info = gapic_v1.client_info.ClientInfo() + + +__all__ = ("TranslationServiceClient",) diff --git a/google/cloud/translate_v3beta1/services/translation_service/pagers.py b/google/cloud/translate_v3beta1/services/translation_service/pagers.py new file mode 100644 index 00000000..a132a74e --- /dev/null +++ b/google/cloud/translate_v3beta1/services/translation_service/pagers.py @@ -0,0 +1,148 @@ +# -*- 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.translate_v3beta1.types import translation_service + + +class ListGlossariesPager: + """A pager for iterating through ``list_glossaries`` requests. + + This class thinly wraps an initial + :class:`~.translation_service.ListGlossariesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``glossaries`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListGlossaries`` requests and continue to iterate + through the ``glossaries`` field on the + corresponding responses. + + All the usual :class:`~.translation_service.ListGlossariesResponse` + 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[..., translation_service.ListGlossariesResponse], + request: translation_service.ListGlossariesRequest, + response: translation_service.ListGlossariesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (:class:`~.translation_service.ListGlossariesRequest`): + The initial request object. + response (:class:`~.translation_service.ListGlossariesResponse`): + 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 = translation_service.ListGlossariesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterable[translation_service.ListGlossariesResponse]: + 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[translation_service.Glossary]: + for page in self.pages: + yield from page.glossaries + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListGlossariesAsyncPager: + """A pager for iterating through ``list_glossaries`` requests. + + This class thinly wraps an initial + :class:`~.translation_service.ListGlossariesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``glossaries`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListGlossaries`` requests and continue to iterate + through the ``glossaries`` field on the + corresponding responses. + + All the usual :class:`~.translation_service.ListGlossariesResponse` + 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[translation_service.ListGlossariesResponse]], + request: translation_service.ListGlossariesRequest, + response: translation_service.ListGlossariesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (:class:`~.translation_service.ListGlossariesRequest`): + The initial request object. + response (:class:`~.translation_service.ListGlossariesResponse`): + 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 = translation_service.ListGlossariesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterable[translation_service.ListGlossariesResponse]: + 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[translation_service.Glossary]: + async def async_generator(): + async for page in self.pages: + for response in page.glossaries: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/google/cloud/translate_v3beta1/services/translation_service/transports/__init__.py b/google/cloud/translate_v3beta1/services/translation_service/transports/__init__.py new file mode 100644 index 00000000..b977312d --- /dev/null +++ b/google/cloud/translate_v3beta1/services/translation_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 TranslationServiceTransport +from .grpc import TranslationServiceGrpcTransport +from .grpc_asyncio import TranslationServiceGrpcAsyncIOTransport + + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[TranslationServiceTransport]] +_transport_registry["grpc"] = TranslationServiceGrpcTransport +_transport_registry["grpc_asyncio"] = TranslationServiceGrpcAsyncIOTransport + + +__all__ = ( + "TranslationServiceTransport", + "TranslationServiceGrpcTransport", + "TranslationServiceGrpcAsyncIOTransport", +) diff --git a/google/cloud/translate_v3beta1/services/translation_service/transports/base.py b/google/cloud/translate_v3beta1/services/translation_service/transports/base.py new file mode 100644 index 00000000..dcd3e417 --- /dev/null +++ b/google/cloud/translate_v3beta1/services/translation_service/transports/base.py @@ -0,0 +1,227 @@ +# -*- 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 +from google.api_core import exceptions # type: ignore +from google.api_core import gapic_v1 # type: ignore +from google.api_core import operations_v1 # type: ignore +from google.auth import credentials # type: ignore + +from google.cloud.translate_v3beta1.types import translation_service +from google.longrunning import operations_pb2 as operations # type: ignore + + +try: + _client_info = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + ) +except pkg_resources.DistributionNotFound: + _client_info = gapic_v1.client_info.ClientInfo() + + +class TranslationServiceTransport(abc.ABC): + """Abstract transport class for TranslationService.""" + + AUTH_SCOPES = ( + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-translation", + ) + + def __init__( + self, + *, + host: str = "translate.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, + **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. + """ + # 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() + + def _prep_wrapped_messages(self): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.translate_text: gapic_v1.method.wrap_method( + self.translate_text, default_timeout=None, client_info=_client_info, + ), + self.detect_language: gapic_v1.method.wrap_method( + self.detect_language, default_timeout=None, client_info=_client_info, + ), + self.get_supported_languages: gapic_v1.method.wrap_method( + self.get_supported_languages, + default_timeout=None, + client_info=_client_info, + ), + self.batch_translate_text: gapic_v1.method.wrap_method( + self.batch_translate_text, + default_timeout=None, + client_info=_client_info, + ), + self.create_glossary: gapic_v1.method.wrap_method( + self.create_glossary, default_timeout=None, client_info=_client_info, + ), + self.list_glossaries: gapic_v1.method.wrap_method( + self.list_glossaries, default_timeout=None, client_info=_client_info, + ), + self.get_glossary: gapic_v1.method.wrap_method( + self.get_glossary, default_timeout=None, client_info=_client_info, + ), + self.delete_glossary: gapic_v1.method.wrap_method( + self.delete_glossary, default_timeout=None, client_info=_client_info, + ), + } + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def translate_text( + self, + ) -> typing.Callable[ + [translation_service.TranslateTextRequest], + typing.Union[ + translation_service.TranslateTextResponse, + typing.Awaitable[translation_service.TranslateTextResponse], + ], + ]: + raise NotImplementedError() + + @property + def detect_language( + self, + ) -> typing.Callable[ + [translation_service.DetectLanguageRequest], + typing.Union[ + translation_service.DetectLanguageResponse, + typing.Awaitable[translation_service.DetectLanguageResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_supported_languages( + self, + ) -> typing.Callable[ + [translation_service.GetSupportedLanguagesRequest], + typing.Union[ + translation_service.SupportedLanguages, + typing.Awaitable[translation_service.SupportedLanguages], + ], + ]: + raise NotImplementedError() + + @property + def batch_translate_text( + self, + ) -> typing.Callable[ + [translation_service.BatchTranslateTextRequest], + typing.Union[operations.Operation, typing.Awaitable[operations.Operation]], + ]: + raise NotImplementedError() + + @property + def create_glossary( + self, + ) -> typing.Callable[ + [translation_service.CreateGlossaryRequest], + typing.Union[operations.Operation, typing.Awaitable[operations.Operation]], + ]: + raise NotImplementedError() + + @property + def list_glossaries( + self, + ) -> typing.Callable[ + [translation_service.ListGlossariesRequest], + typing.Union[ + translation_service.ListGlossariesResponse, + typing.Awaitable[translation_service.ListGlossariesResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_glossary( + self, + ) -> typing.Callable[ + [translation_service.GetGlossaryRequest], + typing.Union[ + translation_service.Glossary, typing.Awaitable[translation_service.Glossary] + ], + ]: + raise NotImplementedError() + + @property + def delete_glossary( + self, + ) -> typing.Callable[ + [translation_service.DeleteGlossaryRequest], + typing.Union[operations.Operation, typing.Awaitable[operations.Operation]], + ]: + raise NotImplementedError() + + +__all__ = ("TranslationServiceTransport",) diff --git a/google/cloud/translate_v3beta1/services/translation_service/transports/grpc.py b/google/cloud/translate_v3beta1/services/translation_service/transports/grpc.py new file mode 100644 index 00000000..ea1b9764 --- /dev/null +++ b/google/cloud/translate_v3beta1/services/translation_service/transports/grpc.py @@ -0,0 +1,463 @@ +# -*- 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 operations_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.translate_v3beta1.types import translation_service +from google.longrunning import operations_pb2 as operations # type: ignore + +from .base import TranslationServiceTransport + + +class TranslationServiceGrpcTransport(TranslationServiceTransport): + """gRPC backend transport for TranslationService. + + Provides natural language translation operations. + + 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 = "translate.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 + ) -> 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. + + 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, + ) + + @classmethod + def create_channel( + cls, + host: str = "translate.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 operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Sanity check: Only create a new client if we do not already have one. + if "operations_client" not in self.__dict__: + self.__dict__["operations_client"] = operations_v1.OperationsClient( + self.grpc_channel + ) + + # Return the client from cache. + return self.__dict__["operations_client"] + + @property + def translate_text( + self, + ) -> Callable[ + [translation_service.TranslateTextRequest], + translation_service.TranslateTextResponse, + ]: + r"""Return a callable for the translate text method over gRPC. + + Translates input text and returns translated text. + + Returns: + Callable[[~.TranslateTextRequest], + ~.TranslateTextResponse]: + 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 "translate_text" not in self._stubs: + self._stubs["translate_text"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/TranslateText", + request_serializer=translation_service.TranslateTextRequest.serialize, + response_deserializer=translation_service.TranslateTextResponse.deserialize, + ) + return self._stubs["translate_text"] + + @property + def detect_language( + self, + ) -> Callable[ + [translation_service.DetectLanguageRequest], + translation_service.DetectLanguageResponse, + ]: + r"""Return a callable for the detect language method over gRPC. + + Detects the language of text within a request. + + Returns: + Callable[[~.DetectLanguageRequest], + ~.DetectLanguageResponse]: + 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 "detect_language" not in self._stubs: + self._stubs["detect_language"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/DetectLanguage", + request_serializer=translation_service.DetectLanguageRequest.serialize, + response_deserializer=translation_service.DetectLanguageResponse.deserialize, + ) + return self._stubs["detect_language"] + + @property + def get_supported_languages( + self, + ) -> Callable[ + [translation_service.GetSupportedLanguagesRequest], + translation_service.SupportedLanguages, + ]: + r"""Return a callable for the get supported languages method over gRPC. + + Returns a list of supported languages for + translation. + + Returns: + Callable[[~.GetSupportedLanguagesRequest], + ~.SupportedLanguages]: + 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_supported_languages" not in self._stubs: + self._stubs["get_supported_languages"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/GetSupportedLanguages", + request_serializer=translation_service.GetSupportedLanguagesRequest.serialize, + response_deserializer=translation_service.SupportedLanguages.deserialize, + ) + return self._stubs["get_supported_languages"] + + @property + def batch_translate_text( + self, + ) -> Callable[ + [translation_service.BatchTranslateTextRequest], operations.Operation + ]: + r"""Return a callable for the batch translate text method over gRPC. + + Translates a large volume of text in asynchronous + batch mode. This function provides real-time output as + the inputs are being processed. If caller cancels a + request, the partial results (for an input file, it's + all or nothing) may still be available on the specified + output location. + This call returns immediately and you can + use google.longrunning.Operation.name to poll the status + of the call. + + Returns: + Callable[[~.BatchTranslateTextRequest], + ~.Operation]: + 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 "batch_translate_text" not in self._stubs: + self._stubs["batch_translate_text"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/BatchTranslateText", + request_serializer=translation_service.BatchTranslateTextRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["batch_translate_text"] + + @property + def create_glossary( + self, + ) -> Callable[[translation_service.CreateGlossaryRequest], operations.Operation]: + r"""Return a callable for the create glossary method over gRPC. + + Creates a glossary and returns the long-running operation. + Returns NOT_FOUND, if the project doesn't exist. + + Returns: + Callable[[~.CreateGlossaryRequest], + ~.Operation]: + 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 "create_glossary" not in self._stubs: + self._stubs["create_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/CreateGlossary", + request_serializer=translation_service.CreateGlossaryRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["create_glossary"] + + @property + def list_glossaries( + self, + ) -> Callable[ + [translation_service.ListGlossariesRequest], + translation_service.ListGlossariesResponse, + ]: + r"""Return a callable for the list glossaries method over gRPC. + + Lists glossaries in a project. Returns NOT_FOUND, if the project + doesn't exist. + + Returns: + Callable[[~.ListGlossariesRequest], + ~.ListGlossariesResponse]: + 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_glossaries" not in self._stubs: + self._stubs["list_glossaries"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/ListGlossaries", + request_serializer=translation_service.ListGlossariesRequest.serialize, + response_deserializer=translation_service.ListGlossariesResponse.deserialize, + ) + return self._stubs["list_glossaries"] + + @property + def get_glossary( + self, + ) -> Callable[ + [translation_service.GetGlossaryRequest], translation_service.Glossary + ]: + r"""Return a callable for the get glossary method over gRPC. + + Gets a glossary. Returns NOT_FOUND, if the glossary doesn't + exist. + + Returns: + Callable[[~.GetGlossaryRequest], + ~.Glossary]: + 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_glossary" not in self._stubs: + self._stubs["get_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/GetGlossary", + request_serializer=translation_service.GetGlossaryRequest.serialize, + response_deserializer=translation_service.Glossary.deserialize, + ) + return self._stubs["get_glossary"] + + @property + def delete_glossary( + self, + ) -> Callable[[translation_service.DeleteGlossaryRequest], operations.Operation]: + r"""Return a callable for the delete glossary method over gRPC. + + Deletes a glossary, or cancels glossary construction if the + glossary isn't created yet. Returns NOT_FOUND, if the glossary + doesn't exist. + + Returns: + Callable[[~.DeleteGlossaryRequest], + ~.Operation]: + 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_glossary" not in self._stubs: + self._stubs["delete_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/DeleteGlossary", + request_serializer=translation_service.DeleteGlossaryRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["delete_glossary"] + + +__all__ = ("TranslationServiceGrpcTransport",) diff --git a/google/cloud/translate_v3beta1/services/translation_service/transports/grpc_asyncio.py b/google/cloud/translate_v3beta1/services/translation_service/transports/grpc_asyncio.py new file mode 100644 index 00000000..682ba389 --- /dev/null +++ b/google/cloud/translate_v3beta1/services/translation_service/transports/grpc_asyncio.py @@ -0,0 +1,461 @@ +# -*- 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 grpc_helpers_async # type: ignore +from google.api_core import operations_v1 # 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.translate_v3beta1.types import translation_service +from google.longrunning import operations_pb2 as operations # type: ignore + +from .base import TranslationServiceTransport +from .grpc import TranslationServiceGrpcTransport + + +class TranslationServiceGrpcAsyncIOTransport(TranslationServiceTransport): + """gRPC AsyncIO backend transport for TranslationService. + + Provides natural language translation operations. + + 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 = "translate.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 = "translate.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, + ) -> 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. + + 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, + ) + + 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 operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Sanity check: Only create a new client if we do not already have one. + if "operations_client" not in self.__dict__: + self.__dict__["operations_client"] = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self.__dict__["operations_client"] + + @property + def translate_text( + self, + ) -> Callable[ + [translation_service.TranslateTextRequest], + Awaitable[translation_service.TranslateTextResponse], + ]: + r"""Return a callable for the translate text method over gRPC. + + Translates input text and returns translated text. + + Returns: + Callable[[~.TranslateTextRequest], + Awaitable[~.TranslateTextResponse]]: + 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 "translate_text" not in self._stubs: + self._stubs["translate_text"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/TranslateText", + request_serializer=translation_service.TranslateTextRequest.serialize, + response_deserializer=translation_service.TranslateTextResponse.deserialize, + ) + return self._stubs["translate_text"] + + @property + def detect_language( + self, + ) -> Callable[ + [translation_service.DetectLanguageRequest], + Awaitable[translation_service.DetectLanguageResponse], + ]: + r"""Return a callable for the detect language method over gRPC. + + Detects the language of text within a request. + + Returns: + Callable[[~.DetectLanguageRequest], + Awaitable[~.DetectLanguageResponse]]: + 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 "detect_language" not in self._stubs: + self._stubs["detect_language"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/DetectLanguage", + request_serializer=translation_service.DetectLanguageRequest.serialize, + response_deserializer=translation_service.DetectLanguageResponse.deserialize, + ) + return self._stubs["detect_language"] + + @property + def get_supported_languages( + self, + ) -> Callable[ + [translation_service.GetSupportedLanguagesRequest], + Awaitable[translation_service.SupportedLanguages], + ]: + r"""Return a callable for the get supported languages method over gRPC. + + Returns a list of supported languages for + translation. + + Returns: + Callable[[~.GetSupportedLanguagesRequest], + Awaitable[~.SupportedLanguages]]: + 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_supported_languages" not in self._stubs: + self._stubs["get_supported_languages"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/GetSupportedLanguages", + request_serializer=translation_service.GetSupportedLanguagesRequest.serialize, + response_deserializer=translation_service.SupportedLanguages.deserialize, + ) + return self._stubs["get_supported_languages"] + + @property + def batch_translate_text( + self, + ) -> Callable[ + [translation_service.BatchTranslateTextRequest], Awaitable[operations.Operation] + ]: + r"""Return a callable for the batch translate text method over gRPC. + + Translates a large volume of text in asynchronous + batch mode. This function provides real-time output as + the inputs are being processed. If caller cancels a + request, the partial results (for an input file, it's + all or nothing) may still be available on the specified + output location. + This call returns immediately and you can + use google.longrunning.Operation.name to poll the status + of the call. + + Returns: + Callable[[~.BatchTranslateTextRequest], + Awaitable[~.Operation]]: + 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 "batch_translate_text" not in self._stubs: + self._stubs["batch_translate_text"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/BatchTranslateText", + request_serializer=translation_service.BatchTranslateTextRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["batch_translate_text"] + + @property + def create_glossary( + self, + ) -> Callable[ + [translation_service.CreateGlossaryRequest], Awaitable[operations.Operation] + ]: + r"""Return a callable for the create glossary method over gRPC. + + Creates a glossary and returns the long-running operation. + Returns NOT_FOUND, if the project doesn't exist. + + Returns: + Callable[[~.CreateGlossaryRequest], + Awaitable[~.Operation]]: + 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 "create_glossary" not in self._stubs: + self._stubs["create_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/CreateGlossary", + request_serializer=translation_service.CreateGlossaryRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["create_glossary"] + + @property + def list_glossaries( + self, + ) -> Callable[ + [translation_service.ListGlossariesRequest], + Awaitable[translation_service.ListGlossariesResponse], + ]: + r"""Return a callable for the list glossaries method over gRPC. + + Lists glossaries in a project. Returns NOT_FOUND, if the project + doesn't exist. + + Returns: + Callable[[~.ListGlossariesRequest], + Awaitable[~.ListGlossariesResponse]]: + 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_glossaries" not in self._stubs: + self._stubs["list_glossaries"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/ListGlossaries", + request_serializer=translation_service.ListGlossariesRequest.serialize, + response_deserializer=translation_service.ListGlossariesResponse.deserialize, + ) + return self._stubs["list_glossaries"] + + @property + def get_glossary( + self, + ) -> Callable[ + [translation_service.GetGlossaryRequest], + Awaitable[translation_service.Glossary], + ]: + r"""Return a callable for the get glossary method over gRPC. + + Gets a glossary. Returns NOT_FOUND, if the glossary doesn't + exist. + + Returns: + Callable[[~.GetGlossaryRequest], + Awaitable[~.Glossary]]: + 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_glossary" not in self._stubs: + self._stubs["get_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/GetGlossary", + request_serializer=translation_service.GetGlossaryRequest.serialize, + response_deserializer=translation_service.Glossary.deserialize, + ) + return self._stubs["get_glossary"] + + @property + def delete_glossary( + self, + ) -> Callable[ + [translation_service.DeleteGlossaryRequest], Awaitable[operations.Operation] + ]: + r"""Return a callable for the delete glossary method over gRPC. + + Deletes a glossary, or cancels glossary construction if the + glossary isn't created yet. Returns NOT_FOUND, if the glossary + doesn't exist. + + Returns: + Callable[[~.DeleteGlossaryRequest], + Awaitable[~.Operation]]: + 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_glossary" not in self._stubs: + self._stubs["delete_glossary"] = self.grpc_channel.unary_unary( + "/google.cloud.translate.v3beta1.TranslationService/DeleteGlossary", + request_serializer=translation_service.DeleteGlossaryRequest.serialize, + response_deserializer=operations.Operation.FromString, + ) + return self._stubs["delete_glossary"] + + +__all__ = ("TranslationServiceGrpcAsyncIOTransport",) diff --git a/google/cloud/translate_v3beta1/types.py b/google/cloud/translate_v3beta1/types.py deleted file mode 100644 index 0512ce19..00000000 --- a/google/cloud/translate_v3beta1/types.py +++ /dev/null @@ -1,54 +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. - - -from __future__ import absolute_import -import sys - -from google.api_core.protobuf_helpers import get_messages - -from google.cloud.translate_v3beta1.proto import translation_service_pb2 -from google.longrunning import operations_pb2 -from google.protobuf import any_pb2 -from google.protobuf import timestamp_pb2 -from google.rpc import status_pb2 - - -_shared_modules = [ - operations_pb2, - any_pb2, - timestamp_pb2, - status_pb2, -] - -_local_modules = [ - translation_service_pb2, -] - -names = [] - -for module in _shared_modules: # pragma: NO COVER - 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.translate_v3beta1.types" - setattr(sys.modules[__name__], name, message) - names.append(name) - - -__all__ = tuple(sorted(names)) diff --git a/google/cloud/translate_v3beta1/types/__init__.py b/google/cloud/translate_v3beta1/types/__init__.py new file mode 100644 index 00000000..60c0f41d --- /dev/null +++ b/google/cloud/translate_v3beta1/types/__init__.py @@ -0,0 +1,77 @@ +# -*- 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 .translation_service import ( + TranslateTextGlossaryConfig, + TranslateTextRequest, + TranslateTextResponse, + Translation, + DetectLanguageRequest, + DetectedLanguage, + DetectLanguageResponse, + GetSupportedLanguagesRequest, + SupportedLanguages, + SupportedLanguage, + GcsSource, + InputConfig, + GcsDestination, + OutputConfig, + BatchTranslateTextRequest, + BatchTranslateMetadata, + BatchTranslateResponse, + GlossaryInputConfig, + Glossary, + CreateGlossaryRequest, + GetGlossaryRequest, + DeleteGlossaryRequest, + ListGlossariesRequest, + ListGlossariesResponse, + CreateGlossaryMetadata, + DeleteGlossaryMetadata, + DeleteGlossaryResponse, +) + + +__all__ = ( + "TranslateTextGlossaryConfig", + "TranslateTextRequest", + "TranslateTextResponse", + "Translation", + "DetectLanguageRequest", + "DetectedLanguage", + "DetectLanguageResponse", + "GetSupportedLanguagesRequest", + "SupportedLanguages", + "SupportedLanguage", + "GcsSource", + "InputConfig", + "GcsDestination", + "OutputConfig", + "BatchTranslateTextRequest", + "BatchTranslateMetadata", + "BatchTranslateResponse", + "GlossaryInputConfig", + "Glossary", + "CreateGlossaryRequest", + "GetGlossaryRequest", + "DeleteGlossaryRequest", + "ListGlossariesRequest", + "ListGlossariesResponse", + "CreateGlossaryMetadata", + "DeleteGlossaryMetadata", + "DeleteGlossaryResponse", +) diff --git a/google/cloud/translate_v3beta1/types/translation_service.py b/google/cloud/translate_v3beta1/types/translation_service.py new file mode 100644 index 00000000..56f1e1eb --- /dev/null +++ b/google/cloud/translate_v3beta1/types/translation_service.py @@ -0,0 +1,1020 @@ +# -*- 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.cloud.translate.v3beta1", + manifest={ + "TranslateTextGlossaryConfig", + "TranslateTextRequest", + "TranslateTextResponse", + "Translation", + "DetectLanguageRequest", + "DetectedLanguage", + "DetectLanguageResponse", + "GetSupportedLanguagesRequest", + "SupportedLanguages", + "SupportedLanguage", + "GcsSource", + "InputConfig", + "GcsDestination", + "OutputConfig", + "BatchTranslateTextRequest", + "BatchTranslateMetadata", + "BatchTranslateResponse", + "GlossaryInputConfig", + "Glossary", + "CreateGlossaryRequest", + "GetGlossaryRequest", + "DeleteGlossaryRequest", + "ListGlossariesRequest", + "ListGlossariesResponse", + "CreateGlossaryMetadata", + "DeleteGlossaryMetadata", + "DeleteGlossaryResponse", + }, +) + + +class TranslateTextGlossaryConfig(proto.Message): + r"""Configures which glossary should be used for a specific + target language, and defines options for applying that glossary. + + Attributes: + glossary (str): + Required. Specifies the glossary used for this translation. + Use this format: projects/\ */locations/*/glossaries/\* + ignore_case (bool): + Optional. Indicates match is case- + nsensitive. Default value is false if missing. + """ + + glossary = proto.Field(proto.STRING, number=1) + + ignore_case = proto.Field(proto.BOOL, number=2) + + +class TranslateTextRequest(proto.Message): + r"""The request message for synchronous translation. + + Attributes: + contents (Sequence[str]): + Required. The content of the input in string + format. We recommend the total content be less + than 30k codepoints. Use BatchTranslateText for + larger text. + mime_type (str): + Optional. The format of the source text, for + example, "text/html", "text/plain". If left + blank, the MIME type defaults to "text/html". + source_language_code (str): + Optional. The BCP-47 language code of the + input text if known, for example, "en-US" or + "sr-Latn". Supported language codes are listed + in Language Support. If the source language + isn't specified, the API attempts to identify + the source language automatically and returns + the source language within the response. + target_language_code (str): + Required. The BCP-47 language code to use for + translation of the input text, set to one of the + language codes listed in Language Support. + parent (str): + Required. Project or location to make a call. Must refer to + a caller's project. + + Format: ``projects/{project-id}`` or + ``projects/{project-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-id}/locations/global`` or + ``projects/{project-id}``. + + Non-global location is required for requests using AutoML + models or custom glossaries. + + Models and glossaries must be within the same region (have + same location-id), otherwise an INVALID_ARGUMENT (400) error + is returned. + model (str): + Optional. The ``model`` type requested for this translation. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-id}/locations/{location-id}/models/general/base`` + + For global (non-regionalized) requests, use ``location-id`` + ``global``. For example, + ``projects/{project-id}/locations/global/models/general/nmt``. + + If missing, the system decides which google base model to + use. + glossary_config (~.translation_service.TranslateTextGlossaryConfig): + Optional. Glossary to be applied. The glossary must be + within the same region (have the same location-id) as the + model, otherwise an INVALID_ARGUMENT (400) error is + returned. + labels (Sequence[~.translation_service.TranslateTextRequest.LabelsEntry]): + Optional. The labels with user-defined + metadata for the request. + Label keys and values can be no longer than 63 + characters (Unicode codepoints), can only + contain lowercase letters, numeric characters, + underscores and dashes. International characters + are allowed. Label values are optional. Label + keys must start with a letter. + See + https://cloud.google.com/translate/docs/labels + for more information. + """ + + contents = proto.RepeatedField(proto.STRING, number=1) + + mime_type = proto.Field(proto.STRING, number=3) + + source_language_code = proto.Field(proto.STRING, number=4) + + target_language_code = proto.Field(proto.STRING, number=5) + + parent = proto.Field(proto.STRING, number=8) + + model = proto.Field(proto.STRING, number=6) + + glossary_config = proto.Field( + proto.MESSAGE, number=7, message=TranslateTextGlossaryConfig, + ) + + labels = proto.MapField(proto.STRING, proto.STRING, number=10) + + +class TranslateTextResponse(proto.Message): + r""" + + Attributes: + translations (Sequence[~.translation_service.Translation]): + Text translation responses with no glossary applied. This + field has the same length as + [``contents``][google.cloud.translate.v3beta1.TranslateTextRequest.contents]. + glossary_translations (Sequence[~.translation_service.Translation]): + Text translation responses if a glossary is provided in the + request. This can be the same as + [``translations``][google.cloud.translate.v3beta1.TranslateTextResponse.translations] + if no terms apply. This field has the same length as + [``contents``][google.cloud.translate.v3beta1.TranslateTextRequest.contents]. + """ + + translations = proto.RepeatedField(proto.MESSAGE, number=1, message="Translation",) + + glossary_translations = proto.RepeatedField( + proto.MESSAGE, number=3, message="Translation", + ) + + +class Translation(proto.Message): + r"""A single translation response. + + Attributes: + translated_text (str): + Text translated into the target language. + model (str): + Only present when ``model`` is present in the request. This + is same as ``model`` provided in the request. + detected_language_code (str): + The BCP-47 language code of source text in + the initial request, detected automatically, if + no source language was passed within the initial + request. If the source language was passed, + auto-detection of the language does not occur + and this field is empty. + glossary_config (~.translation_service.TranslateTextGlossaryConfig): + The ``glossary_config`` used for this translation. + """ + + translated_text = proto.Field(proto.STRING, number=1) + + model = proto.Field(proto.STRING, number=2) + + detected_language_code = proto.Field(proto.STRING, number=4) + + glossary_config = proto.Field( + proto.MESSAGE, number=3, message=TranslateTextGlossaryConfig, + ) + + +class DetectLanguageRequest(proto.Message): + r"""The request message for language detection. + + Attributes: + parent (str): + Required. Project or location to make a call. Must refer to + a caller's project. + + Format: ``projects/{project-id}/locations/{location-id}`` or + ``projects/{project-id}``. + + For global calls, use + ``projects/{project-id}/locations/global`` or + ``projects/{project-id}``. + + Only models within the same region (has same location-id) + can be used. Otherwise an INVALID_ARGUMENT (400) error is + returned. + model (str): + Optional. The language detection model to be used. + + Format: + ``projects/{project-id}/locations/{location-id}/models/language-detection/{model-id}`` + + Only one language detection model is currently supported: + ``projects/{project-id}/locations/{location-id}/models/language-detection/default``. + + If not specified, the default model is used. + content (str): + The content of the input stored as a string. + mime_type (str): + Optional. The format of the source text, for + example, "text/html", "text/plain". If left + blank, the MIME type defaults to "text/html". + labels (Sequence[~.translation_service.DetectLanguageRequest.LabelsEntry]): + Optional. The labels with user-defined + metadata for the request. + Label keys and values can be no longer than 63 + characters (Unicode codepoints), can only + contain lowercase letters, numeric characters, + underscores and dashes. International characters + are allowed. Label values are optional. Label + keys must start with a letter. + See + https://cloud.google.com/translate/docs/labels + for more information. + """ + + parent = proto.Field(proto.STRING, number=5) + + model = proto.Field(proto.STRING, number=4) + + content = proto.Field(proto.STRING, number=1, oneof="source") + + mime_type = proto.Field(proto.STRING, number=3) + + labels = proto.MapField(proto.STRING, proto.STRING, number=6) + + +class DetectedLanguage(proto.Message): + r"""The response message for language detection. + + Attributes: + language_code (str): + The BCP-47 language code of source content in + the request, detected automatically. + confidence (float): + The confidence of the detection result for + this language. + """ + + language_code = proto.Field(proto.STRING, number=1) + + confidence = proto.Field(proto.FLOAT, number=2) + + +class DetectLanguageResponse(proto.Message): + r"""The response message for language detection. + + Attributes: + languages (Sequence[~.translation_service.DetectedLanguage]): + A list of detected languages sorted by + detection confidence in descending order. The + most probable language first. + """ + + languages = proto.RepeatedField(proto.MESSAGE, number=1, message=DetectedLanguage,) + + +class GetSupportedLanguagesRequest(proto.Message): + r"""The request message for discovering supported languages. + + Attributes: + parent (str): + Required. Project or location to make a call. Must refer to + a caller's project. + + Format: ``projects/{project-id}`` or + ``projects/{project-id}/locations/{location-id}``. + + For global calls, use + ``projects/{project-id}/locations/global`` or + ``projects/{project-id}``. + + Non-global location is required for AutoML models. + + Only models within the same region (have same location-id) + can be used, otherwise an INVALID_ARGUMENT (400) error is + returned. + display_language_code (str): + Optional. The language to use to return + localized, human readable names of supported + languages. If missing, then display names are + not returned in a response. + model (str): + Optional. Get supported languages of this model. + + The format depends on model type: + + - AutoML Translation models: + ``projects/{project-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-id}/locations/{location-id}/models/general/base`` + + Returns languages supported by the specified model. If + missing, we get supported languages of Google general base + (PBMT) model. + """ + + parent = proto.Field(proto.STRING, number=3) + + display_language_code = proto.Field(proto.STRING, number=1) + + model = proto.Field(proto.STRING, number=2) + + +class SupportedLanguages(proto.Message): + r"""The response message for discovering supported languages. + + Attributes: + languages (Sequence[~.translation_service.SupportedLanguage]): + A list of supported language responses. This + list contains an entry for each language the + Translation API supports. + """ + + languages = proto.RepeatedField( + proto.MESSAGE, number=1, message="SupportedLanguage", + ) + + +class SupportedLanguage(proto.Message): + r"""A single supported language response corresponds to + information related to one supported language. + + Attributes: + language_code (str): + Supported language code, generally consisting + of its ISO 639-1 identifier, for example, 'en', + 'ja'. In certain cases, BCP-47 codes including + language and region identifiers are returned + (for example, 'zh-TW' and 'zh-CN') + display_name (str): + Human readable name of the language localized + in the display language specified in the + request. + support_source (bool): + Can be used as source language. + support_target (bool): + Can be used as target language. + """ + + language_code = proto.Field(proto.STRING, number=1) + + display_name = proto.Field(proto.STRING, number=2) + + support_source = proto.Field(proto.BOOL, number=3) + + support_target = proto.Field(proto.BOOL, number=4) + + +class GcsSource(proto.Message): + r"""The Google Cloud Storage location for the input content. + + Attributes: + input_uri (str): + Required. Source data URI. For example, + ``gs://my_bucket/my_object``. + """ + + input_uri = proto.Field(proto.STRING, number=1) + + +class InputConfig(proto.Message): + r"""Input configuration for BatchTranslateText request. + + Attributes: + mime_type (str): + Optional. Can be "text/plain" or "text/html". For ``.tsv``, + "text/html" is used if mime_type is missing. For ``.html``, + this field must be "text/html" or empty. For ``.txt``, this + field must be "text/plain" or empty. + gcs_source (~.translation_service.GcsSource): + Required. Google Cloud Storage location for the source + input. This can be a single file (for example, + ``gs://translation-test/input.tsv``) or a wildcard (for + example, ``gs://translation-test/*``). If a file extension + is ``.tsv``, it can contain either one or two columns. The + first column (optional) is the id of the text request. If + the first column is missing, we use the row number (0-based) + from the input file as the ID in the output file. The second + column is the actual text to be translated. We recommend + each row be <= 10K Unicode codepoints, otherwise an error + might be returned. Note that the input tsv must be RFC 4180 + compliant. + + You could use https://github.com/Clever/csvlint to check + potential formatting errors in your tsv file. csvlint + --delimiter='\t' your_input_file.tsv + + The other supported file extensions are ``.txt`` or + ``.html``, which is treated as a single large chunk of text. + """ + + mime_type = proto.Field(proto.STRING, number=1) + + gcs_source = proto.Field( + proto.MESSAGE, number=2, oneof="source", message=GcsSource, + ) + + +class GcsDestination(proto.Message): + r"""The Google Cloud Storage location for the output content. + + Attributes: + output_uri_prefix (str): + Required. There must be no files under 'output_uri_prefix'. + 'output_uri_prefix' must end with "/" and start with + "gs://", otherwise an INVALID_ARGUMENT (400) error is + returned. + """ + + output_uri_prefix = proto.Field(proto.STRING, number=1) + + +class OutputConfig(proto.Message): + r"""Output configuration for BatchTranslateText request. + + Attributes: + gcs_destination (~.translation_service.GcsDestination): + Google Cloud Storage destination for output content. For + every single input file (for example, + gs://a/b/c.[extension]), we generate at most 2 \* n output + files. (n is the # of target_language_codes in the + BatchTranslateTextRequest). + + Output files (tsv) generated are compliant with RFC 4180 + except that record delimiters are '\n' instead of '\r\n'. We + don't provide any way to change record delimiters. + + While the input files are being processed, we write/update + an index file 'index.csv' under 'output_uri_prefix' (for + example, gs://translation-test/index.csv) The index file is + generated/updated as new files are being translated. The + format is: + + input_file,target_language_code,translations_file,errors_file, + glossary_translations_file,glossary_errors_file + + input_file is one file we matched using + gcs_source.input_uri. target_language_code is provided in + the request. translations_file contains the translations. + (details provided below) errors_file contains the errors + during processing of the file. (details below). Both + translations_file and errors_file could be empty strings if + we have no content to output. glossary_translations_file and + glossary_errors_file are always empty strings if the + input_file is tsv. They could also be empty if we have no + content to output. + + Once a row is present in index.csv, the input/output + matching never changes. Callers should also expect all the + content in input_file are processed and ready to be consumed + (that is, no partial output file is written). + + The format of translations_file (for target language code + 'trg') is: + gs://translation_test/a_b_c\_'trg'_translations.[extension] + + If the input file extension is tsv, the output has the + following columns: Column 1: ID of the request provided in + the input, if it's not provided in the input, then the input + row number is used (0-based). Column 2: source sentence. + Column 3: translation without applying a glossary. Empty + string if there is an error. Column 4 (only present if a + glossary is provided in the request): translation after + applying the glossary. Empty string if there is an error + applying the glossary. Could be same string as column 3 if + there is no glossary applied. + + If input file extension is a txt or html, the translation is + directly written to the output file. If glossary is + requested, a separate glossary_translations_file has format + of + gs://translation_test/a_b_c\_'trg'_glossary_translations.[extension] + + The format of errors file (for target language code 'trg') + is: gs://translation_test/a_b_c\_'trg'_errors.[extension] + + If the input file extension is tsv, errors_file contains the + following: Column 1: ID of the request provided in the + input, if it's not provided in the input, then the input row + number is used (0-based). Column 2: source sentence. Column + 3: Error detail for the translation. Could be empty. Column + 4 (only present if a glossary is provided in the request): + Error when applying the glossary. + + If the input file extension is txt or html, + glossary_error_file will be generated that contains error + details. glossary_error_file has format of + gs://translation_test/a_b_c\_'trg'_glossary_errors.[extension] + """ + + gcs_destination = proto.Field( + proto.MESSAGE, number=1, oneof="destination", message=GcsDestination, + ) + + +class BatchTranslateTextRequest(proto.Message): + r"""The batch translation request. + + Attributes: + parent (str): + Required. Location to make a call. Must refer to a caller's + project. + + Format: ``projects/{project-id}/locations/{location-id}``. + + The ``global`` location is not supported for batch + translation. + + Only AutoML Translation models or glossaries within the same + region (have the same location-id) can be used, otherwise an + INVALID_ARGUMENT (400) error is returned. + source_language_code (str): + Required. Source language code. + target_language_codes (Sequence[str]): + Required. Specify up to 10 language codes + here. + models (Sequence[~.translation_service.BatchTranslateTextRequest.ModelsEntry]): + Optional. The models to use for translation. Map's key is + target language code. Map's value is model name. Value can + be a built-in general model, or an AutoML Translation model. + + The value format depends on model type: + + - AutoML Translation models: + ``projects/{project-id}/locations/{location-id}/models/{model-id}`` + + - General (built-in) models: + ``projects/{project-id}/locations/{location-id}/models/general/nmt``, + ``projects/{project-id}/locations/{location-id}/models/general/base`` + + If the map is empty or a specific model is not requested for + a language pair, then default google model (nmt) is used. + input_configs (Sequence[~.translation_service.InputConfig]): + Required. Input configurations. + The total number of files matched should be <= + 1000. The total content size should be <= 100M + Unicode codepoints. The files must use UTF-8 + encoding. + output_config (~.translation_service.OutputConfig): + Required. Output configuration. + If 2 input configs match to the same file (that + is, same input path), we don't generate output + for duplicate inputs. + glossaries (Sequence[~.translation_service.BatchTranslateTextRequest.GlossariesEntry]): + Optional. Glossaries to be applied for + translation. It's keyed by target language code. + labels (Sequence[~.translation_service.BatchTranslateTextRequest.LabelsEntry]): + Optional. The labels with user-defined + metadata for the request. + Label keys and values can be no longer than 63 + characters (Unicode codepoints), can only + contain lowercase letters, numeric characters, + underscores and dashes. International characters + are allowed. Label values are optional. Label + keys must start with a letter. + See + https://cloud.google.com/translate/docs/labels + for more information. + """ + + parent = proto.Field(proto.STRING, number=1) + + source_language_code = proto.Field(proto.STRING, number=2) + + target_language_codes = proto.RepeatedField(proto.STRING, number=3) + + models = proto.MapField(proto.STRING, proto.STRING, number=4) + + input_configs = proto.RepeatedField(proto.MESSAGE, number=5, message=InputConfig,) + + output_config = proto.Field(proto.MESSAGE, number=6, message=OutputConfig,) + + glossaries = proto.MapField( + proto.STRING, proto.MESSAGE, number=7, message=TranslateTextGlossaryConfig, + ) + + labels = proto.MapField(proto.STRING, proto.STRING, number=9) + + +class BatchTranslateMetadata(proto.Message): + r"""State metadata for the batch translation operation. + + Attributes: + state (~.translation_service.BatchTranslateMetadata.State): + The state of the operation. + translated_characters (int): + Number of successfully translated characters + so far (Unicode codepoints). + failed_characters (int): + Number of characters that have failed to + process so far (Unicode codepoints). + total_characters (int): + Total number of characters (Unicode + codepoints). This is the total number of + codepoints from input files times the number of + target languages and appears here shortly after + the call is submitted. + submit_time (~.timestamp.Timestamp): + Time when the operation was submitted. + """ + + class State(proto.Enum): + r"""State of the job.""" + STATE_UNSPECIFIED = 0 + RUNNING = 1 + SUCCEEDED = 2 + FAILED = 3 + CANCELLING = 4 + CANCELLED = 5 + + state = proto.Field(proto.ENUM, number=1, enum=State,) + + translated_characters = proto.Field(proto.INT64, number=2) + + failed_characters = proto.Field(proto.INT64, number=3) + + total_characters = proto.Field(proto.INT64, number=4) + + submit_time = proto.Field(proto.MESSAGE, number=5, message=timestamp.Timestamp,) + + +class BatchTranslateResponse(proto.Message): + r"""Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by BatchTranslateText if at least one sentence is + translated successfully. + + Attributes: + total_characters (int): + Total number of characters (Unicode + codepoints). + translated_characters (int): + Number of successfully translated characters + (Unicode codepoints). + failed_characters (int): + Number of characters that have failed to + process (Unicode codepoints). + submit_time (~.timestamp.Timestamp): + Time when the operation was submitted. + end_time (~.timestamp.Timestamp): + The time when the operation is finished and + [google.longrunning.Operation.done][google.longrunning.Operation.done] + is set to true. + """ + + total_characters = proto.Field(proto.INT64, number=1) + + translated_characters = proto.Field(proto.INT64, number=2) + + failed_characters = proto.Field(proto.INT64, number=3) + + submit_time = proto.Field(proto.MESSAGE, number=4, message=timestamp.Timestamp,) + + end_time = proto.Field(proto.MESSAGE, number=5, message=timestamp.Timestamp,) + + +class GlossaryInputConfig(proto.Message): + r"""Input configuration for glossaries. + + Attributes: + gcs_source (~.translation_service.GcsSource): + Required. Google Cloud Storage location of glossary data. + File format is determined based on the filename extension. + API returns [google.rpc.Code.INVALID_ARGUMENT] for + unsupported URI-s and file formats. Wildcards are not + allowed. This must be a single file in one of the following + formats: + + For unidirectional glossaries: + + - TSV/CSV (``.tsv``/``.csv``): 2 column file, tab- or + comma-separated. The first column is source text. The + second column is target text. The file must not contain + headers. That is, the first row is data, not column + names. + + - TMX (``.tmx``): TMX file with parallel data defining + source/target term pairs. + + For equivalent term sets glossaries: + + - CSV (``.csv``): Multi-column CSV file defining equivalent + glossary terms in multiple languages. The format is + defined for Google Translation Toolkit and documented in + `Use a + glossary `__. + """ + + gcs_source = proto.Field( + proto.MESSAGE, number=1, oneof="source", message=GcsSource, + ) + + +class Glossary(proto.Message): + r"""Represents a glossary built from user provided data. + + Attributes: + name (str): + Required. The resource name of the glossary. Glossary names + have the form + ``projects/{project-id}/locations/{location-id}/glossaries/{glossary-id}``. + language_pair (~.translation_service.Glossary.LanguageCodePair): + Used with unidirectional glossaries. + language_codes_set (~.translation_service.Glossary.LanguageCodesSet): + Used with equivalent term set glossaries. + input_config (~.translation_service.GlossaryInputConfig): + Required. Provides examples to build the + glossary from. Total glossary must not exceed + 10M Unicode codepoints. + entry_count (int): + Output only. The number of entries defined in + the glossary. + submit_time (~.timestamp.Timestamp): + Output only. When CreateGlossary was called. + end_time (~.timestamp.Timestamp): + Output only. When the glossary creation was + finished. + """ + + class LanguageCodePair(proto.Message): + r"""Used with unidirectional glossaries. + + Attributes: + source_language_code (str): + Required. The BCP-47 language code of the input text, for + example, "en-US". Expected to be an exact match for + GlossaryTerm.language_code. + target_language_code (str): + Required. The BCP-47 language code for translation output, + for example, "zh-CN". Expected to be an exact match for + GlossaryTerm.language_code. + """ + + source_language_code = proto.Field(proto.STRING, number=1) + + target_language_code = proto.Field(proto.STRING, number=2) + + class LanguageCodesSet(proto.Message): + r"""Used with equivalent term set glossaries. + + Attributes: + language_codes (Sequence[str]): + The BCP-47 language code(s) for terms defined in the + glossary. All entries are unique. The list contains at least + two entries. Expected to be an exact match for + GlossaryTerm.language_code. + """ + + language_codes = proto.RepeatedField(proto.STRING, number=1) + + name = proto.Field(proto.STRING, number=1) + + language_pair = proto.Field( + proto.MESSAGE, number=3, oneof="languages", message=LanguageCodePair, + ) + + language_codes_set = proto.Field( + proto.MESSAGE, number=4, oneof="languages", message=LanguageCodesSet, + ) + + input_config = proto.Field(proto.MESSAGE, number=5, message=GlossaryInputConfig,) + + entry_count = proto.Field(proto.INT32, number=6) + + submit_time = proto.Field(proto.MESSAGE, number=7, message=timestamp.Timestamp,) + + end_time = proto.Field(proto.MESSAGE, number=8, message=timestamp.Timestamp,) + + +class CreateGlossaryRequest(proto.Message): + r"""Request message for CreateGlossary. + + Attributes: + parent (str): + Required. The project name. + glossary (~.translation_service.Glossary): + Required. The glossary to create. + """ + + parent = proto.Field(proto.STRING, number=1) + + glossary = proto.Field(proto.MESSAGE, number=2, message=Glossary,) + + +class GetGlossaryRequest(proto.Message): + r"""Request message for GetGlossary. + + Attributes: + name (str): + Required. The name of the glossary to + retrieve. + """ + + name = proto.Field(proto.STRING, number=1) + + +class DeleteGlossaryRequest(proto.Message): + r"""Request message for DeleteGlossary. + + Attributes: + name (str): + Required. The name of the glossary to delete. + """ + + name = proto.Field(proto.STRING, number=1) + + +class ListGlossariesRequest(proto.Message): + r"""Request message for ListGlossaries. + + Attributes: + parent (str): + Required. The name of the project from which + to list all of the glossaries. + page_size (int): + Optional. Requested page size. The server may + return fewer glossaries than requested. If + unspecified, the server picks an appropriate + default. + page_token (str): + Optional. A token identifying a page of results the server + should return. Typically, this is the value of + [ListGlossariesResponse.next_page_token] returned from the + previous call to ``ListGlossaries`` method. The first page + is returned if ``page_token``\ is empty or missing. + filter (str): + Optional. Filter specifying constraints of a + list operation. Filtering is not supported yet, + and the parameter currently has no effect. If + missing, no filtering is performed. + """ + + parent = proto.Field(proto.STRING, number=1) + + page_size = proto.Field(proto.INT32, number=2) + + page_token = proto.Field(proto.STRING, number=3) + + filter = proto.Field(proto.STRING, number=4) + + +class ListGlossariesResponse(proto.Message): + r"""Response message for ListGlossaries. + + Attributes: + glossaries (Sequence[~.translation_service.Glossary]): + The list of glossaries for a project. + next_page_token (str): + A token to retrieve a page of results. Pass this value in + the [ListGlossariesRequest.page_token] field in the + subsequent call to ``ListGlossaries`` method to retrieve the + next page of results. + """ + + @property + def raw_page(self): + return self + + glossaries = proto.RepeatedField(proto.MESSAGE, number=1, message=Glossary,) + + next_page_token = proto.Field(proto.STRING, number=2) + + +class CreateGlossaryMetadata(proto.Message): + r"""Stored in the + [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata] + field returned by CreateGlossary. + + Attributes: + name (str): + The name of the glossary that is being + created. + state (~.translation_service.CreateGlossaryMetadata.State): + The current state of the glossary creation + operation. + submit_time (~.timestamp.Timestamp): + The time when the operation was submitted to + the server. + """ + + class State(proto.Enum): + r"""Enumerates the possible states that the creation request can + be in. + """ + STATE_UNSPECIFIED = 0 + RUNNING = 1 + SUCCEEDED = 2 + FAILED = 3 + CANCELLING = 4 + CANCELLED = 5 + + name = proto.Field(proto.STRING, number=1) + + state = proto.Field(proto.ENUM, number=2, enum=State,) + + submit_time = proto.Field(proto.MESSAGE, number=3, message=timestamp.Timestamp,) + + +class DeleteGlossaryMetadata(proto.Message): + r"""Stored in the + [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata] + field returned by DeleteGlossary. + + Attributes: + name (str): + The name of the glossary that is being + deleted. + state (~.translation_service.DeleteGlossaryMetadata.State): + The current state of the glossary deletion + operation. + submit_time (~.timestamp.Timestamp): + The time when the operation was submitted to + the server. + """ + + class State(proto.Enum): + r"""Enumerates the possible states that the creation request can + be in. + """ + STATE_UNSPECIFIED = 0 + RUNNING = 1 + SUCCEEDED = 2 + FAILED = 3 + CANCELLING = 4 + CANCELLED = 5 + + name = proto.Field(proto.STRING, number=1) + + state = proto.Field(proto.ENUM, number=2, enum=State,) + + submit_time = proto.Field(proto.MESSAGE, number=3, message=timestamp.Timestamp,) + + +class DeleteGlossaryResponse(proto.Message): + r"""Stored in the + [google.longrunning.Operation.response][google.longrunning.Operation.response] + field returned by DeleteGlossary. + + Attributes: + name (str): + The name of the deleted glossary. + submit_time (~.timestamp.Timestamp): + The time when the operation was submitted to + the server. + end_time (~.timestamp.Timestamp): + The time when the glossary deletion is finished and + [google.longrunning.Operation.done][google.longrunning.Operation.done] + is set to true. + """ + + name = proto.Field(proto.STRING, number=1) + + submit_time = proto.Field(proto.MESSAGE, number=2, message=timestamp.Timestamp,) + + end_time = proto.Field(proto.MESSAGE, number=3, message=timestamp.Timestamp,) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 00000000..4505b485 --- /dev/null +++ b/mypy.ini @@ -0,0 +1,3 @@ +[mypy] +python_version = 3.6 +namespace_packages = True diff --git a/noxfile.py b/noxfile.py index a8bbe3ca..7d9b5601 100644 --- a/noxfile.py +++ b/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", ".") @@ -118,7 +120,6 @@ def system(session): session.install( "mock", "pytest", "google-cloud-testutils", ) - session.install("-e", "test_utils") session.install("-e", ".") # Run py.test against the system tests. @@ -136,7 +137,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=95") + session.run("coverage", "report", "--show-missing", "--fail-under=100") session.run("coverage", "erase") @@ -146,7 +147,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( diff --git a/scripts/fixup_translation_v3_keywords.py b/scripts/fixup_translation_v3_keywords.py new file mode 100644 index 00000000..60b6c6d3 --- /dev/null +++ b/scripts/fixup_translation_v3_keywords.py @@ -0,0 +1,185 @@ +# -*- 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 translationCallTransformer(cst.CSTTransformer): + CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') + METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { + 'batch_translate_text': ('parent', 'source_language_code', 'target_language_codes', 'input_configs', 'output_config', 'models', 'glossaries', 'labels', ), + 'create_glossary': ('parent', 'glossary', ), + 'delete_glossary': ('name', ), + 'detect_language': ('parent', 'model', 'content', 'mime_type', 'labels', ), + 'get_glossary': ('name', ), + 'get_supported_languages': ('parent', 'display_language_code', 'model', ), + 'list_glossaries': ('parent', 'page_size', 'page_token', 'filter', ), + 'translate_text': ('contents', 'target_language_code', 'parent', 'mime_type', 'source_language_code', 'model', 'glossary_config', 'labels', ), + + } + + 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=translationCallTransformer(), +): + """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 translation 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/scripts/fixup_translation_v3beta1_keywords.py b/scripts/fixup_translation_v3beta1_keywords.py new file mode 100644 index 00000000..60b6c6d3 --- /dev/null +++ b/scripts/fixup_translation_v3beta1_keywords.py @@ -0,0 +1,185 @@ +# -*- 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 translationCallTransformer(cst.CSTTransformer): + CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') + METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { + 'batch_translate_text': ('parent', 'source_language_code', 'target_language_codes', 'input_configs', 'output_config', 'models', 'glossaries', 'labels', ), + 'create_glossary': ('parent', 'glossary', ), + 'delete_glossary': ('name', ), + 'detect_language': ('parent', 'model', 'content', 'mime_type', 'labels', ), + 'get_glossary': ('name', ), + 'get_supported_languages': ('parent', 'display_language_code', 'model', ), + 'list_glossaries': ('parent', 'page_size', 'page_token', 'filter', ), + 'translate_text': ('contents', 'target_language_code', 'parent', 'mime_type', 'source_language_code', 'model', 'glossary_config', 'labels', ), + + } + + 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=translationCallTransformer(), +): + """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 translation 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/setup.py b/setup.py index 98c71901..db5196e8 100644 --- a/setup.py +++ b/setup.py @@ -29,8 +29,10 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 5 - Production/Stable" dependencies = [ - "google-api-core[grpc] >= 1.15.0, < 2.0.0dev", + "google-api-core[grpc] >= 1.22.0, < 2.0.0dev", "google-cloud-core >= 1.1.0, < 2.0dev", + "libcst >= 0.2.5", + "proto-plus >= 0.4.0", ] extras = {} @@ -46,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. @@ -69,21 +73,23 @@ "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", ], platforms="Posix; MacOS X; Windows", packages=packages, + scripts=[ + "scripts/fixup_translation_v3_keywords.py", + "scripts/fixup_translation_v3beta1_keywords.py", + ], 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", include_package_data=True, zip_safe=False, ) diff --git a/synth.metadata b/synth.metadata index 213dcd68..71a579dd 100644 --- a/synth.metadata +++ b/synth.metadata @@ -3,30 +3,30 @@ { "git": { "name": ".", - "remote": "git@github.com:googleapis/python-translate.git", - "sha": "0f9c7550afa7341d0b83b47a2ba9be57dde02209" + "remote": "git@github.com:danoscarmike/python-translate", + "sha": "0714f6de6f8574d519719324e0a6b1f2b75f8482" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "e26e1839a45445d13cd45b1be3b1523defb72fee", - "internalRef": "322867095" + "sha": "6a813acf535e4746fa4a135ce23547bb6425c26d", + "internalRef": "323472217" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "2686d7075fa456972bf4d08680d99617f5eb32b1" + "sha": "5506723fef367557d83cf072d0c18020c049fcb8" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "2686d7075fa456972bf4d08680d99617f5eb32b1" + "sha": "5506723fef367557d83cf072d0c18020c049fcb8" } } ], @@ -37,7 +37,7 @@ "apiName": "translate", "apiVersion": "v3beta1", "language": "python", - "generator": "bazel" + "generator": "gapic-generator-python" } }, { @@ -46,7 +46,7 @@ "apiName": "translate", "apiVersion": "v3", "language": "python", - "generator": "bazel" + "generator": "gapic-generator-python" } } ] diff --git a/synth.py b/synth.py index 6f128fd6..f4d0d864 100644 --- a/synth.py +++ b/synth.py @@ -18,7 +18,7 @@ from synthtool import gcp from synthtool.languages import python -gapic = gcp.GAPICBazel() +gapic = gcp.GAPICMicrogenerator() common = gcp.CommonTemplates() versions = ["v3beta1", "v3"] @@ -37,69 +37,36 @@ for version in versions: library = gapic.py_library( service="translate", - version=version, - bazel_target=f"//google/cloud/translate/{version}:translation-{version}-py", - include_protos=True, + version=version ) - # s.move(library / f'google/cloud/translation_{version}', f'google/cloud/translate_{version}', excludes=excludes) - s.move(library / f"google/cloud/translate_{version}", excludes=excludes) - s.move(library / "tests") - s.move(library / f"docs/gapic/{version}") - - # translation -> translate - s.replace( - "google/**/translation_service_pb2_grpc.py", - f"google.cloud.translation_{version}.proto", - f"google.cloud.translate_{version}.proto", - ) - s.replace( - f"google/cloud/translate_{version}/gapic/translation_service_client.py", - "google-cloud-translation", - "google-cloud-translate", - ) - -# Use the highest version library to generate documentation import alias. -s.move(library / "google/cloud/translate.py") + s.move(library / "google/cloud/translation", "google/cloud/translate") + s.move(library / f"google/cloud/translation_{version}", f"google/cloud/translate_{version}") + s.move(library / f"docs/translation_{version}", f"docs/translate_{version}") + s.move(library / "tests", f"tests/unit/gapic/translate_{version}") +# Escape underscores in gs:\\ URLs s.replace( - "google/cloud/**/translation_service_pb2.py", - r"""record delimiters are ‘:raw-latex:`\\n`’ instead of - ‘:raw-latex:`\\r`:raw-latex:`\\n`’.""", - r"""record delimiters are ``\\\\\\\\n`` instead of - ``\\\\\\\\r\\\\\\\\n``.""", + "google/cloud/translate_v3*/types/translation_service.py", + r"""a_b_c_""", + """a_b_c\_""" ) -# Fix docstring issue for classes with no summary line +# google.cloud.translation -> google.cloud.translate s.replace( - "google/cloud/**/proto/*_pb2.py", - ''''__doc__': """Attributes:''', - ''''__doc__': """ - Attributes:''', -) - -# Fix wrapping for literal string -s.replace( - "google/cloud/**/translation_service_pb2.py", - r"""This field has the same length as \[``contents` -\s+`\]\[google\.cloud\.translation\.v3beta1\.TranslateTextRequest\.conte -\s+nts\]\.""", - """This field has the same length as [``contents``][google.cloud.translation.v3beta1.TranslateTextRequest.contents].""", + ["google/cloud/translate*/**/*.py", "tests/**/*.py", "docs/translate_v*/*"], + "google.cloud.translation", + "google.cloud.translate" ) # ---------------------------------------------------------------------------- # Add templated files # ---------------------------------------------------------------------------- -# templated_files = gcp.CommonTemplates().py_library(unit_cov_level=100, cov_level=100) -# Pass dependencies to system tests templated_files = common.py_library( - unit_cov_level=95, cov_level=95, samples=True, - system_test_dependencies=['test_utils'] + samples=True, + microgenerator=True, ) -s.move(templated_files) - -# TODO(busunkim): Use latest sphinx after microgenerator transition -s.replace("noxfile.py", '''["']sphinx["']''', '"sphinx<3.0.0"') +s.move(templated_files, excludes=[".coveragerc"]) # microgenerator has a good .coveragerc file # ---------------------------------------------------------------------------- # Samples templates diff --git a/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/__init__.py b/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/test_translation_service.py b/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/test_translation_service.py new file mode 100644 index 00000000..a1fc3c3a --- /dev/null +++ b/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/test_translation_service.py @@ -0,0 +1,2494 @@ +# -*- 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 future +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 operation_async +from google.api_core import operations_v1 +from google.auth import credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.translate_v3.services.translation_service import ( + TranslationServiceAsyncClient, +) +from google.cloud.translate_v3.services.translation_service import ( + TranslationServiceClient, +) +from google.cloud.translate_v3.services.translation_service import pagers +from google.cloud.translate_v3.services.translation_service import transports +from google.cloud.translate_v3.types import translation_service +from google.longrunning import operations_pb2 +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 TranslationServiceClient._get_default_mtls_endpoint(None) is None + assert ( + TranslationServiceClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + TranslationServiceClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + TranslationServiceClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + TranslationServiceClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + TranslationServiceClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class", [TranslationServiceClient, TranslationServiceAsyncClient] +) +def test_translation_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 == "translate.googleapis.com:443" + + +def test_translation_service_client_get_transport_class(): + transport = TranslationServiceClient.get_transport_class() + assert transport == transports.TranslationServiceGrpcTransport + + transport = TranslationServiceClient.get_transport_class("grpc") + assert transport == transports.TranslationServiceGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (TranslationServiceClient, transports.TranslationServiceGrpcTransport, "grpc"), + ( + TranslationServiceAsyncClient, + transports.TranslationServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + TranslationServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(TranslationServiceClient), +) +@mock.patch.object( + TranslationServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(TranslationServiceAsyncClient), +) +def test_translation_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(TranslationServiceClient, "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(TranslationServiceClient, "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, + ) + + # 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, + ) + + # 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, + ) + + # 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, + ) + + # 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, + ) + + # 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, + ) + + # 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", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (TranslationServiceClient, transports.TranslationServiceGrpcTransport, "grpc"), + ( + TranslationServiceAsyncClient, + transports.TranslationServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_translation_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, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (TranslationServiceClient, transports.TranslationServiceGrpcTransport, "grpc"), + ( + TranslationServiceAsyncClient, + transports.TranslationServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_translation_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, + ) + + +def test_translation_service_client_client_options_from_dict(): + with mock.patch( + "google.cloud.translate_v3.services.translation_service.transports.TranslationServiceGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = TranslationServiceClient( + 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, + ) + + +def test_translate_text(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.TranslateTextRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.translate_text), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.TranslateTextResponse() + + response = client.translate_text(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 response is the type that we expect. + assert isinstance(response, translation_service.TranslateTextResponse) + + +@pytest.mark.asyncio +async def test_translate_text_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.TranslateTextRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.translate_text), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.TranslateTextResponse() + ) + + response = await client.translate_text(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, translation_service.TranslateTextResponse) + + +def test_translate_text_field_headers(): + client = TranslationServiceClient(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 = translation_service.TranslateTextRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.translate_text), "__call__") as call: + call.return_value = translation_service.TranslateTextResponse() + + client.translate_text(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_translate_text_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.TranslateTextRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.translate_text), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.TranslateTextResponse() + ) + + await client.translate_text(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", "parent=parent/value",) in kw["metadata"] + + +def test_translate_text_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.translate_text), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.TranslateTextResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.translate_text( + parent="parent_value", + target_language_code="target_language_code_value", + contents=["contents_value"], + model="model_value", + mime_type="mime_type_value", + source_language_code="source_language_code_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].parent == "parent_value" + + assert args[0].target_language_code == "target_language_code_value" + + assert args[0].contents == ["contents_value"] + + assert args[0].model == "model_value" + + assert args[0].mime_type == "mime_type_value" + + assert args[0].source_language_code == "source_language_code_value" + + +def test_translate_text_flattened_error(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.translate_text( + translation_service.TranslateTextRequest(), + parent="parent_value", + target_language_code="target_language_code_value", + contents=["contents_value"], + model="model_value", + mime_type="mime_type_value", + source_language_code="source_language_code_value", + ) + + +@pytest.mark.asyncio +async def test_translate_text_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.translate_text), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.TranslateTextResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.TranslateTextResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.translate_text( + parent="parent_value", + target_language_code="target_language_code_value", + contents=["contents_value"], + model="model_value", + mime_type="mime_type_value", + source_language_code="source_language_code_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].parent == "parent_value" + + assert args[0].target_language_code == "target_language_code_value" + + assert args[0].contents == ["contents_value"] + + assert args[0].model == "model_value" + + assert args[0].mime_type == "mime_type_value" + + assert args[0].source_language_code == "source_language_code_value" + + +@pytest.mark.asyncio +async def test_translate_text_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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.translate_text( + translation_service.TranslateTextRequest(), + parent="parent_value", + target_language_code="target_language_code_value", + contents=["contents_value"], + model="model_value", + mime_type="mime_type_value", + source_language_code="source_language_code_value", + ) + + +def test_detect_language(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.DetectLanguageRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.detect_language), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.DetectLanguageResponse() + + response = client.detect_language(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 response is the type that we expect. + assert isinstance(response, translation_service.DetectLanguageResponse) + + +@pytest.mark.asyncio +async def test_detect_language_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.DetectLanguageRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.detect_language), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.DetectLanguageResponse() + ) + + response = await client.detect_language(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, translation_service.DetectLanguageResponse) + + +def test_detect_language_field_headers(): + client = TranslationServiceClient(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 = translation_service.DetectLanguageRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.detect_language), "__call__") as call: + call.return_value = translation_service.DetectLanguageResponse() + + client.detect_language(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_detect_language_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.DetectLanguageRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.detect_language), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.DetectLanguageResponse() + ) + + await client.detect_language(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", "parent=parent/value",) in kw["metadata"] + + +def test_detect_language_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.detect_language), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.DetectLanguageResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.detect_language( + parent="parent_value", + model="model_value", + mime_type="mime_type_value", + content="content_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].parent == "parent_value" + + assert args[0].model == "model_value" + + assert args[0].mime_type == "mime_type_value" + + assert args[0].content == "content_value" + + +def test_detect_language_flattened_error(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.detect_language( + translation_service.DetectLanguageRequest(), + parent="parent_value", + model="model_value", + mime_type="mime_type_value", + content="content_value", + ) + + +@pytest.mark.asyncio +async def test_detect_language_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.detect_language), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.DetectLanguageResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.DetectLanguageResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.detect_language( + parent="parent_value", + model="model_value", + mime_type="mime_type_value", + content="content_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].parent == "parent_value" + + assert args[0].model == "model_value" + + assert args[0].mime_type == "mime_type_value" + + assert args[0].content == "content_value" + + +@pytest.mark.asyncio +async def test_detect_language_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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.detect_language( + translation_service.DetectLanguageRequest(), + parent="parent_value", + model="model_value", + mime_type="mime_type_value", + content="content_value", + ) + + +def test_get_supported_languages(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.GetSupportedLanguagesRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.get_supported_languages), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.SupportedLanguages() + + response = client.get_supported_languages(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 response is the type that we expect. + assert isinstance(response, translation_service.SupportedLanguages) + + +@pytest.mark.asyncio +async def test_get_supported_languages_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.GetSupportedLanguagesRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_supported_languages), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.SupportedLanguages() + ) + + response = await client.get_supported_languages(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, translation_service.SupportedLanguages) + + +def test_get_supported_languages_field_headers(): + client = TranslationServiceClient(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 = translation_service.GetSupportedLanguagesRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.get_supported_languages), "__call__" + ) as call: + call.return_value = translation_service.SupportedLanguages() + + client.get_supported_languages(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_supported_languages_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.GetSupportedLanguagesRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_supported_languages), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.SupportedLanguages() + ) + + await client.get_supported_languages(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", "parent=parent/value",) in kw["metadata"] + + +def test_get_supported_languages_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.get_supported_languages), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.SupportedLanguages() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_supported_languages( + parent="parent_value", + model="model_value", + display_language_code="display_language_code_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].parent == "parent_value" + + assert args[0].model == "model_value" + + assert args[0].display_language_code == "display_language_code_value" + + +def test_get_supported_languages_flattened_error(): + client = TranslationServiceClient(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_supported_languages( + translation_service.GetSupportedLanguagesRequest(), + parent="parent_value", + model="model_value", + display_language_code="display_language_code_value", + ) + + +@pytest.mark.asyncio +async def test_get_supported_languages_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_supported_languages), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.SupportedLanguages() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.SupportedLanguages() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_supported_languages( + parent="parent_value", + model="model_value", + display_language_code="display_language_code_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].parent == "parent_value" + + assert args[0].model == "model_value" + + assert args[0].display_language_code == "display_language_code_value" + + +@pytest.mark.asyncio +async def test_get_supported_languages_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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_supported_languages( + translation_service.GetSupportedLanguagesRequest(), + parent="parent_value", + model="model_value", + display_language_code="display_language_code_value", + ) + + +def test_batch_translate_text(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.BatchTranslateTextRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.batch_translate_text), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + + response = client.batch_translate_text(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 response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_batch_translate_text_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.BatchTranslateTextRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.batch_translate_text), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + + response = await client.batch_translate_text(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, future.Future) + + +def test_batch_translate_text_field_headers(): + client = TranslationServiceClient(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 = translation_service.BatchTranslateTextRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.batch_translate_text), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + + client.batch_translate_text(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_batch_translate_text_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.BatchTranslateTextRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.batch_translate_text), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + + await client.batch_translate_text(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", "parent=parent/value",) in kw["metadata"] + + +def test_create_glossary(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.CreateGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.create_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + + response = client.create_glossary(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 response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_create_glossary_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.CreateGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.create_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + + response = await client.create_glossary(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, future.Future) + + +def test_create_glossary_field_headers(): + client = TranslationServiceClient(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 = translation_service.CreateGlossaryRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.create_glossary), "__call__") as call: + call.return_value = operations_pb2.Operation(name="operations/op") + + client.create_glossary(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_glossary_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.CreateGlossaryRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.create_glossary), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + + await client.create_glossary(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", "parent=parent/value",) in kw["metadata"] + + +def test_create_glossary_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.create_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_glossary( + parent="parent_value", + glossary=translation_service.Glossary(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].parent == "parent_value" + + assert args[0].glossary == translation_service.Glossary(name="name_value") + + +def test_create_glossary_flattened_error(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_glossary( + translation_service.CreateGlossaryRequest(), + parent="parent_value", + glossary=translation_service.Glossary(name="name_value"), + ) + + +@pytest.mark.asyncio +async def test_create_glossary_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.create_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_glossary( + parent="parent_value", + glossary=translation_service.Glossary(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].parent == "parent_value" + + assert args[0].glossary == translation_service.Glossary(name="name_value") + + +@pytest.mark.asyncio +async def test_create_glossary_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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.create_glossary( + translation_service.CreateGlossaryRequest(), + parent="parent_value", + glossary=translation_service.Glossary(name="name_value"), + ) + + +def test_list_glossaries(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.ListGlossariesRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.ListGlossariesResponse( + next_page_token="next_page_token_value", + ) + + response = client.list_glossaries(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 response is the type that we expect. + assert isinstance(response, pagers.ListGlossariesPager) + + assert response.next_page_token == "next_page_token_value" + + +@pytest.mark.asyncio +async def test_list_glossaries_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.ListGlossariesRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.ListGlossariesResponse( + next_page_token="next_page_token_value", + ) + ) + + response = await client.list_glossaries(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.ListGlossariesAsyncPager) + + assert response.next_page_token == "next_page_token_value" + + +def test_list_glossaries_field_headers(): + client = TranslationServiceClient(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 = translation_service.ListGlossariesRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + call.return_value = translation_service.ListGlossariesResponse() + + client.list_glossaries(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_glossaries_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.ListGlossariesRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.ListGlossariesResponse() + ) + + await client.list_glossaries(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", "parent=parent/value",) in kw["metadata"] + + +def test_list_glossaries_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.ListGlossariesResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_glossaries(parent="parent_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].parent == "parent_value" + + +def test_list_glossaries_flattened_error(): + client = TranslationServiceClient(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_glossaries( + translation_service.ListGlossariesRequest(), parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_glossaries_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.ListGlossariesResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.ListGlossariesResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_glossaries(parent="parent_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].parent == "parent_value" + + +@pytest.mark.asyncio +async def test_list_glossaries_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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_glossaries( + translation_service.ListGlossariesRequest(), parent="parent_value", + ) + + +def test_list_glossaries_pager(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + translation_service.Glossary(), + ], + next_page_token="abc", + ), + translation_service.ListGlossariesResponse( + glossaries=[], next_page_token="def", + ), + translation_service.ListGlossariesResponse( + glossaries=[translation_service.Glossary(),], next_page_token="ghi", + ), + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_glossaries(request={}) + + assert pager._metadata == metadata + + results = [i for i in pager] + assert len(results) == 6 + assert all(isinstance(i, translation_service.Glossary) for i in results) + + +def test_list_glossaries_pages(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + translation_service.Glossary(), + ], + next_page_token="abc", + ), + translation_service.ListGlossariesResponse( + glossaries=[], next_page_token="def", + ), + translation_service.ListGlossariesResponse( + glossaries=[translation_service.Glossary(),], next_page_token="ghi", + ), + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + ], + ), + RuntimeError, + ) + pages = list(client.list_glossaries(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_glossaries_async_pager(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + translation_service.Glossary(), + ], + next_page_token="abc", + ), + translation_service.ListGlossariesResponse( + glossaries=[], next_page_token="def", + ), + translation_service.ListGlossariesResponse( + glossaries=[translation_service.Glossary(),], next_page_token="ghi", + ), + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_glossaries(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, translation_service.Glossary) for i in responses) + + +@pytest.mark.asyncio +async def test_list_glossaries_async_pages(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + translation_service.Glossary(), + ], + next_page_token="abc", + ), + translation_service.ListGlossariesResponse( + glossaries=[], next_page_token="def", + ), + translation_service.ListGlossariesResponse( + glossaries=[translation_service.Glossary(),], next_page_token="ghi", + ), + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + ], + ), + RuntimeError, + ) + pages = [] + async for page in (await client.list_glossaries(request={})).pages: + pages.append(page) + for page, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page.raw_page.next_page_token == token + + +def test_get_glossary(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.GetGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.Glossary( + name="name_value", + entry_count=1210, + language_pair=translation_service.Glossary.LanguageCodePair( + source_language_code="source_language_code_value" + ), + ) + + response = client.get_glossary(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 response is the type that we expect. + assert isinstance(response, translation_service.Glossary) + + assert response.name == "name_value" + + assert response.entry_count == 1210 + + +@pytest.mark.asyncio +async def test_get_glossary_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.GetGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.Glossary(name="name_value", entry_count=1210,) + ) + + response = await client.get_glossary(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, translation_service.Glossary) + + assert response.name == "name_value" + + assert response.entry_count == 1210 + + +def test_get_glossary_field_headers(): + client = TranslationServiceClient(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 = translation_service.GetGlossaryRequest() + request.name = "name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_glossary), "__call__") as call: + call.return_value = translation_service.Glossary() + + client.get_glossary(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", "name=name/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_glossary_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.GetGlossaryRequest() + request.name = "name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_glossary), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.Glossary() + ) + + await client.get_glossary(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", "name=name/value",) in kw["metadata"] + + +def test_get_glossary_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.Glossary() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_glossary(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].name == "name_value" + + +def test_get_glossary_flattened_error(): + client = TranslationServiceClient(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_glossary( + translation_service.GetGlossaryRequest(), name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_glossary_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.Glossary() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.Glossary() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_glossary(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].name == "name_value" + + +@pytest.mark.asyncio +async def test_get_glossary_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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_glossary( + translation_service.GetGlossaryRequest(), name="name_value", + ) + + +def test_delete_glossary(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.DeleteGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + + response = client.delete_glossary(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 response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_delete_glossary_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.DeleteGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + + response = await client.delete_glossary(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, future.Future) + + +def test_delete_glossary_field_headers(): + client = TranslationServiceClient(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 = translation_service.DeleteGlossaryRequest() + request.name = "name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_glossary), "__call__") as call: + call.return_value = operations_pb2.Operation(name="operations/op") + + client.delete_glossary(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", "name=name/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_glossary_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.DeleteGlossaryRequest() + request.name = "name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_glossary), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + + await client.delete_glossary(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", "name=name/value",) in kw["metadata"] + + +def test_delete_glossary_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_glossary(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].name == "name_value" + + +def test_delete_glossary_flattened_error(): + client = TranslationServiceClient(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_glossary( + translation_service.DeleteGlossaryRequest(), name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_glossary_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_glossary(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].name == "name_value" + + +@pytest.mark.asyncio +async def test_delete_glossary_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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_glossary( + translation_service.DeleteGlossaryRequest(), name="name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TranslationServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TranslationServiceClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TranslationServiceClient( + client_options={"scopes": ["1", "2"]}, transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + client = TranslationServiceClient(transport=transport) + assert client._transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.TranslationServiceGrpcAsyncIOTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + assert isinstance(client._transport, transports.TranslationServiceGrpcTransport,) + + +def test_translation_service_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(exceptions.DuplicateCredentialArgs): + transport = transports.TranslationServiceTransport( + credentials=credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_translation_service_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.translate_v3.services.translation_service.transports.TranslationServiceTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.TranslationServiceTransport( + credentials=credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "translate_text", + "detect_language", + "get_supported_languages", + "batch_translate_text", + "create_glossary", + "list_glossaries", + "get_glossary", + "delete_glossary", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + +def test_translation_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.translate_v3.services.translation_service.transports.TranslationServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (credentials.AnonymousCredentials(), None) + transport = transports.TranslationServiceTransport( + credentials_file="credentials.json", quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=( + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-translation", + ), + quota_project_id="octopus", + ) + + +def test_translation_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) + TranslationServiceClient() + adc.assert_called_once_with( + scopes=( + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-translation", + ), + quota_project_id=None, + ) + + +def test_translation_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.TranslationServiceGrpcTransport( + host="squid.clam.whelk", quota_project_id="octopus" + ) + adc.assert_called_once_with( + scopes=( + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-translation", + ), + quota_project_id="octopus", + ) + + +def test_translation_service_host_no_port(): + client = TranslationServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="translate.googleapis.com" + ), + ) + assert client._transport._host == "translate.googleapis.com:443" + + +def test_translation_service_host_with_port(): + client = TranslationServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="translate.googleapis.com:8000" + ), + ) + assert client._transport._host == "translate.googleapis.com:8000" + + +def test_translation_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.TranslationServiceGrpcTransport( + 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_translation_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.TranslationServiceGrpcAsyncIOTransport( + 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_translation_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.TranslationServiceGrpcTransport( + 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", + "https://www.googleapis.com/auth/cloud-translation", + ), + 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_translation_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.TranslationServiceGrpcAsyncIOTransport( + 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", + "https://www.googleapis.com/auth/cloud-translation", + ), + 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_translation_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.TranslationServiceGrpcTransport( + 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", + "https://www.googleapis.com/auth/cloud-translation", + ), + 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_translation_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.TranslationServiceGrpcAsyncIOTransport( + 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", + "https://www.googleapis.com/auth/cloud-translation", + ), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_translation_service_grpc_lro_client(): + client = TranslationServiceClient( + credentials=credentials.AnonymousCredentials(), transport="grpc", + ) + transport = client._transport + + # Ensure that we have a api-core operations client. + assert isinstance(transport.operations_client, operations_v1.OperationsClient,) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_translation_service_grpc_lro_async_client(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), transport="grpc_asyncio", + ) + transport = client._client._transport + + # Ensure that we have a api-core operations client. + assert isinstance(transport.operations_client, operations_v1.OperationsAsyncClient,) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_glossary_path(): + project = "squid" + location = "clam" + glossary = "whelk" + + expected = "projects/{project}/locations/{location}/glossaries/{glossary}".format( + project=project, location=location, glossary=glossary, + ) + actual = TranslationServiceClient.glossary_path(project, location, glossary) + assert expected == actual + + +def test_parse_glossary_path(): + expected = { + "project": "octopus", + "location": "oyster", + "glossary": "nudibranch", + } + path = TranslationServiceClient.glossary_path(**expected) + + # Check that the path construction is reversible. + actual = TranslationServiceClient.parse_glossary_path(path) + assert expected == actual diff --git a/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/__init__.py b/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/test_translation_service.py b/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/test_translation_service.py new file mode 100644 index 00000000..559d9dd5 --- /dev/null +++ b/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/test_translation_service.py @@ -0,0 +1,2375 @@ +# -*- 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 future +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 operation_async +from google.api_core import operations_v1 +from google.auth import credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.translate_v3beta1.services.translation_service import ( + TranslationServiceAsyncClient, +) +from google.cloud.translate_v3beta1.services.translation_service import ( + TranslationServiceClient, +) +from google.cloud.translate_v3beta1.services.translation_service import pagers +from google.cloud.translate_v3beta1.services.translation_service import transports +from google.cloud.translate_v3beta1.types import translation_service +from google.longrunning import operations_pb2 +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 TranslationServiceClient._get_default_mtls_endpoint(None) is None + assert ( + TranslationServiceClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + TranslationServiceClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + TranslationServiceClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + TranslationServiceClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + TranslationServiceClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class", [TranslationServiceClient, TranslationServiceAsyncClient] +) +def test_translation_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 == "translate.googleapis.com:443" + + +def test_translation_service_client_get_transport_class(): + transport = TranslationServiceClient.get_transport_class() + assert transport == transports.TranslationServiceGrpcTransport + + transport = TranslationServiceClient.get_transport_class("grpc") + assert transport == transports.TranslationServiceGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (TranslationServiceClient, transports.TranslationServiceGrpcTransport, "grpc"), + ( + TranslationServiceAsyncClient, + transports.TranslationServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + TranslationServiceClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(TranslationServiceClient), +) +@mock.patch.object( + TranslationServiceAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(TranslationServiceAsyncClient), +) +def test_translation_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(TranslationServiceClient, "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(TranslationServiceClient, "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, + ) + + # 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, + ) + + # 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, + ) + + # 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, + ) + + # 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, + ) + + # 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, + ) + + # 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", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (TranslationServiceClient, transports.TranslationServiceGrpcTransport, "grpc"), + ( + TranslationServiceAsyncClient, + transports.TranslationServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_translation_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, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (TranslationServiceClient, transports.TranslationServiceGrpcTransport, "grpc"), + ( + TranslationServiceAsyncClient, + transports.TranslationServiceGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_translation_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, + ) + + +def test_translation_service_client_client_options_from_dict(): + with mock.patch( + "google.cloud.translate_v3beta1.services.translation_service.transports.TranslationServiceGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = TranslationServiceClient( + 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, + ) + + +def test_translate_text(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.TranslateTextRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.translate_text), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.TranslateTextResponse() + + response = client.translate_text(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 response is the type that we expect. + assert isinstance(response, translation_service.TranslateTextResponse) + + +@pytest.mark.asyncio +async def test_translate_text_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.TranslateTextRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.translate_text), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.TranslateTextResponse() + ) + + response = await client.translate_text(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, translation_service.TranslateTextResponse) + + +def test_translate_text_field_headers(): + client = TranslationServiceClient(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 = translation_service.TranslateTextRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.translate_text), "__call__") as call: + call.return_value = translation_service.TranslateTextResponse() + + client.translate_text(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_translate_text_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.TranslateTextRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.translate_text), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.TranslateTextResponse() + ) + + await client.translate_text(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", "parent=parent/value",) in kw["metadata"] + + +def test_detect_language(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.DetectLanguageRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.detect_language), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.DetectLanguageResponse() + + response = client.detect_language(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 response is the type that we expect. + assert isinstance(response, translation_service.DetectLanguageResponse) + + +@pytest.mark.asyncio +async def test_detect_language_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.DetectLanguageRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.detect_language), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.DetectLanguageResponse() + ) + + response = await client.detect_language(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, translation_service.DetectLanguageResponse) + + +def test_detect_language_field_headers(): + client = TranslationServiceClient(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 = translation_service.DetectLanguageRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.detect_language), "__call__") as call: + call.return_value = translation_service.DetectLanguageResponse() + + client.detect_language(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_detect_language_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.DetectLanguageRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.detect_language), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.DetectLanguageResponse() + ) + + await client.detect_language(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", "parent=parent/value",) in kw["metadata"] + + +def test_detect_language_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.detect_language), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.DetectLanguageResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.detect_language( + parent="parent_value", model="model_value", mime_type="mime_type_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].parent == "parent_value" + + assert args[0].model == "model_value" + + assert args[0].mime_type == "mime_type_value" + + +def test_detect_language_flattened_error(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.detect_language( + translation_service.DetectLanguageRequest(), + parent="parent_value", + model="model_value", + mime_type="mime_type_value", + ) + + +@pytest.mark.asyncio +async def test_detect_language_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.detect_language), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.DetectLanguageResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.DetectLanguageResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.detect_language( + parent="parent_value", model="model_value", mime_type="mime_type_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].parent == "parent_value" + + assert args[0].model == "model_value" + + assert args[0].mime_type == "mime_type_value" + + +@pytest.mark.asyncio +async def test_detect_language_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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.detect_language( + translation_service.DetectLanguageRequest(), + parent="parent_value", + model="model_value", + mime_type="mime_type_value", + ) + + +def test_get_supported_languages(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.GetSupportedLanguagesRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.get_supported_languages), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.SupportedLanguages() + + response = client.get_supported_languages(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 response is the type that we expect. + assert isinstance(response, translation_service.SupportedLanguages) + + +@pytest.mark.asyncio +async def test_get_supported_languages_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.GetSupportedLanguagesRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_supported_languages), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.SupportedLanguages() + ) + + response = await client.get_supported_languages(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, translation_service.SupportedLanguages) + + +def test_get_supported_languages_field_headers(): + client = TranslationServiceClient(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 = translation_service.GetSupportedLanguagesRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.get_supported_languages), "__call__" + ) as call: + call.return_value = translation_service.SupportedLanguages() + + client.get_supported_languages(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_supported_languages_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.GetSupportedLanguagesRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_supported_languages), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.SupportedLanguages() + ) + + await client.get_supported_languages(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", "parent=parent/value",) in kw["metadata"] + + +def test_get_supported_languages_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.get_supported_languages), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.SupportedLanguages() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_supported_languages( + parent="parent_value", + display_language_code="display_language_code_value", + model="model_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].parent == "parent_value" + + assert args[0].display_language_code == "display_language_code_value" + + assert args[0].model == "model_value" + + +def test_get_supported_languages_flattened_error(): + client = TranslationServiceClient(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_supported_languages( + translation_service.GetSupportedLanguagesRequest(), + parent="parent_value", + display_language_code="display_language_code_value", + model="model_value", + ) + + +@pytest.mark.asyncio +async def test_get_supported_languages_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_supported_languages), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.SupportedLanguages() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.SupportedLanguages() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_supported_languages( + parent="parent_value", + display_language_code="display_language_code_value", + model="model_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].parent == "parent_value" + + assert args[0].display_language_code == "display_language_code_value" + + assert args[0].model == "model_value" + + +@pytest.mark.asyncio +async def test_get_supported_languages_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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_supported_languages( + translation_service.GetSupportedLanguagesRequest(), + parent="parent_value", + display_language_code="display_language_code_value", + model="model_value", + ) + + +def test_batch_translate_text(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.BatchTranslateTextRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.batch_translate_text), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + + response = client.batch_translate_text(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 response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_batch_translate_text_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.BatchTranslateTextRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.batch_translate_text), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + + response = await client.batch_translate_text(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, future.Future) + + +def test_batch_translate_text_field_headers(): + client = TranslationServiceClient(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 = translation_service.BatchTranslateTextRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._transport.batch_translate_text), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + + client.batch_translate_text(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_batch_translate_text_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.BatchTranslateTextRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.batch_translate_text), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + + await client.batch_translate_text(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", "parent=parent/value",) in kw["metadata"] + + +def test_create_glossary(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.CreateGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.create_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + + response = client.create_glossary(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 response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_create_glossary_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.CreateGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.create_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + + response = await client.create_glossary(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, future.Future) + + +def test_create_glossary_field_headers(): + client = TranslationServiceClient(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 = translation_service.CreateGlossaryRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.create_glossary), "__call__") as call: + call.return_value = operations_pb2.Operation(name="operations/op") + + client.create_glossary(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_glossary_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.CreateGlossaryRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.create_glossary), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + + await client.create_glossary(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", "parent=parent/value",) in kw["metadata"] + + +def test_create_glossary_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.create_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_glossary( + parent="parent_value", + glossary=translation_service.Glossary(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].parent == "parent_value" + + assert args[0].glossary == translation_service.Glossary(name="name_value") + + +def test_create_glossary_flattened_error(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_glossary( + translation_service.CreateGlossaryRequest(), + parent="parent_value", + glossary=translation_service.Glossary(name="name_value"), + ) + + +@pytest.mark.asyncio +async def test_create_glossary_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.create_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_glossary( + parent="parent_value", + glossary=translation_service.Glossary(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].parent == "parent_value" + + assert args[0].glossary == translation_service.Glossary(name="name_value") + + +@pytest.mark.asyncio +async def test_create_glossary_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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.create_glossary( + translation_service.CreateGlossaryRequest(), + parent="parent_value", + glossary=translation_service.Glossary(name="name_value"), + ) + + +def test_list_glossaries(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.ListGlossariesRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.ListGlossariesResponse( + next_page_token="next_page_token_value", + ) + + response = client.list_glossaries(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 response is the type that we expect. + assert isinstance(response, pagers.ListGlossariesPager) + + assert response.next_page_token == "next_page_token_value" + + +@pytest.mark.asyncio +async def test_list_glossaries_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.ListGlossariesRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.ListGlossariesResponse( + next_page_token="next_page_token_value", + ) + ) + + response = await client.list_glossaries(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.ListGlossariesAsyncPager) + + assert response.next_page_token == "next_page_token_value" + + +def test_list_glossaries_field_headers(): + client = TranslationServiceClient(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 = translation_service.ListGlossariesRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + call.return_value = translation_service.ListGlossariesResponse() + + client.list_glossaries(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", "parent=parent/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_glossaries_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.ListGlossariesRequest() + request.parent = "parent/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.ListGlossariesResponse() + ) + + await client.list_glossaries(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", "parent=parent/value",) in kw["metadata"] + + +def test_list_glossaries_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.ListGlossariesResponse() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_glossaries( + parent="parent_value", filter="filter_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].parent == "parent_value" + + assert args[0].filter == "filter_value" + + +def test_list_glossaries_flattened_error(): + client = TranslationServiceClient(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_glossaries( + translation_service.ListGlossariesRequest(), + parent="parent_value", + filter="filter_value", + ) + + +@pytest.mark.asyncio +async def test_list_glossaries_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.ListGlossariesResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.ListGlossariesResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_glossaries( + parent="parent_value", filter="filter_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].parent == "parent_value" + + assert args[0].filter == "filter_value" + + +@pytest.mark.asyncio +async def test_list_glossaries_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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_glossaries( + translation_service.ListGlossariesRequest(), + parent="parent_value", + filter="filter_value", + ) + + +def test_list_glossaries_pager(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + translation_service.Glossary(), + ], + next_page_token="abc", + ), + translation_service.ListGlossariesResponse( + glossaries=[], next_page_token="def", + ), + translation_service.ListGlossariesResponse( + glossaries=[translation_service.Glossary(),], next_page_token="ghi", + ), + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_glossaries(request={}) + + assert pager._metadata == metadata + + results = [i for i in pager] + assert len(results) == 6 + assert all(isinstance(i, translation_service.Glossary) for i in results) + + +def test_list_glossaries_pages(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials,) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + translation_service.Glossary(), + ], + next_page_token="abc", + ), + translation_service.ListGlossariesResponse( + glossaries=[], next_page_token="def", + ), + translation_service.ListGlossariesResponse( + glossaries=[translation_service.Glossary(),], next_page_token="ghi", + ), + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + ], + ), + RuntimeError, + ) + pages = list(client.list_glossaries(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_glossaries_async_pager(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + translation_service.Glossary(), + ], + next_page_token="abc", + ), + translation_service.ListGlossariesResponse( + glossaries=[], next_page_token="def", + ), + translation_service.ListGlossariesResponse( + glossaries=[translation_service.Glossary(),], next_page_token="ghi", + ), + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_glossaries(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, translation_service.Glossary) for i in responses) + + +@pytest.mark.asyncio +async def test_list_glossaries_async_pages(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.list_glossaries), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + translation_service.Glossary(), + ], + next_page_token="abc", + ), + translation_service.ListGlossariesResponse( + glossaries=[], next_page_token="def", + ), + translation_service.ListGlossariesResponse( + glossaries=[translation_service.Glossary(),], next_page_token="ghi", + ), + translation_service.ListGlossariesResponse( + glossaries=[ + translation_service.Glossary(), + translation_service.Glossary(), + ], + ), + RuntimeError, + ) + pages = [] + async for page in (await client.list_glossaries(request={})).pages: + pages.append(page) + for page, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page.raw_page.next_page_token == token + + +def test_get_glossary(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.GetGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.Glossary( + name="name_value", + entry_count=1210, + language_pair=translation_service.Glossary.LanguageCodePair( + source_language_code="source_language_code_value" + ), + ) + + response = client.get_glossary(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 response is the type that we expect. + assert isinstance(response, translation_service.Glossary) + + assert response.name == "name_value" + + assert response.entry_count == 1210 + + +@pytest.mark.asyncio +async def test_get_glossary_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.GetGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.Glossary(name="name_value", entry_count=1210,) + ) + + response = await client.get_glossary(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, translation_service.Glossary) + + assert response.name == "name_value" + + assert response.entry_count == 1210 + + +def test_get_glossary_field_headers(): + client = TranslationServiceClient(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 = translation_service.GetGlossaryRequest() + request.name = "name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_glossary), "__call__") as call: + call.return_value = translation_service.Glossary() + + client.get_glossary(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", "name=name/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_glossary_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.GetGlossaryRequest() + request.name = "name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_glossary), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.Glossary() + ) + + await client.get_glossary(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", "name=name/value",) in kw["metadata"] + + +def test_get_glossary_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.get_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.Glossary() + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_glossary(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].name == "name_value" + + +def test_get_glossary_flattened_error(): + client = TranslationServiceClient(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_glossary( + translation_service.GetGlossaryRequest(), name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_glossary_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.get_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = translation_service.Glossary() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + translation_service.Glossary() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_glossary(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].name == "name_value" + + +@pytest.mark.asyncio +async def test_get_glossary_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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_glossary( + translation_service.GetGlossaryRequest(), name="name_value", + ) + + +def test_delete_glossary(transport: str = "grpc"): + client = TranslationServiceClient( + 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 = translation_service.DeleteGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + + response = client.delete_glossary(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 response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_delete_glossary_async(transport: str = "grpc_asyncio"): + client = TranslationServiceAsyncClient( + 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 = translation_service.DeleteGlossaryRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + + response = await client.delete_glossary(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, future.Future) + + +def test_delete_glossary_field_headers(): + client = TranslationServiceClient(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 = translation_service.DeleteGlossaryRequest() + request.name = "name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_glossary), "__call__") as call: + call.return_value = operations_pb2.Operation(name="operations/op") + + client.delete_glossary(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", "name=name/value",) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_glossary_field_headers_async(): + client = TranslationServiceAsyncClient( + 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 = translation_service.DeleteGlossaryRequest() + request.name = "name/value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_glossary), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + + await client.delete_glossary(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", "name=name/value",) in kw["metadata"] + + +def test_delete_glossary_flattened(): + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client._transport.delete_glossary), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_glossary(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].name == "name_value" + + +def test_delete_glossary_flattened_error(): + client = TranslationServiceClient(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_glossary( + translation_service.DeleteGlossaryRequest(), name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_glossary_flattened_async(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client._client._transport.delete_glossary), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_glossary(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].name == "name_value" + + +@pytest.mark.asyncio +async def test_delete_glossary_flattened_error_async(): + client = TranslationServiceAsyncClient( + 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_glossary( + translation_service.DeleteGlossaryRequest(), name="name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TranslationServiceClient( + credentials=credentials.AnonymousCredentials(), transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TranslationServiceClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TranslationServiceClient( + client_options={"scopes": ["1", "2"]}, transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + client = TranslationServiceClient(transport=transport) + assert client._transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.TranslationServiceGrpcTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.TranslationServiceGrpcAsyncIOTransport( + credentials=credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = TranslationServiceClient(credentials=credentials.AnonymousCredentials(),) + assert isinstance(client._transport, transports.TranslationServiceGrpcTransport,) + + +def test_translation_service_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(exceptions.DuplicateCredentialArgs): + transport = transports.TranslationServiceTransport( + credentials=credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_translation_service_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.translate_v3beta1.services.translation_service.transports.TranslationServiceTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.TranslationServiceTransport( + credentials=credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "translate_text", + "detect_language", + "get_supported_languages", + "batch_translate_text", + "create_glossary", + "list_glossaries", + "get_glossary", + "delete_glossary", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + +def test_translation_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.translate_v3beta1.services.translation_service.transports.TranslationServiceTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (credentials.AnonymousCredentials(), None) + transport = transports.TranslationServiceTransport( + credentials_file="credentials.json", quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=( + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-translation", + ), + quota_project_id="octopus", + ) + + +def test_translation_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) + TranslationServiceClient() + adc.assert_called_once_with( + scopes=( + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-translation", + ), + quota_project_id=None, + ) + + +def test_translation_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.TranslationServiceGrpcTransport( + host="squid.clam.whelk", quota_project_id="octopus" + ) + adc.assert_called_once_with( + scopes=( + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-translation", + ), + quota_project_id="octopus", + ) + + +def test_translation_service_host_no_port(): + client = TranslationServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="translate.googleapis.com" + ), + ) + assert client._transport._host == "translate.googleapis.com:443" + + +def test_translation_service_host_with_port(): + client = TranslationServiceClient( + credentials=credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="translate.googleapis.com:8000" + ), + ) + assert client._transport._host == "translate.googleapis.com:8000" + + +def test_translation_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.TranslationServiceGrpcTransport( + 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_translation_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.TranslationServiceGrpcAsyncIOTransport( + 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_translation_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.TranslationServiceGrpcTransport( + 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", + "https://www.googleapis.com/auth/cloud-translation", + ), + 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_translation_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.TranslationServiceGrpcAsyncIOTransport( + 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", + "https://www.googleapis.com/auth/cloud-translation", + ), + 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_translation_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.TranslationServiceGrpcTransport( + 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", + "https://www.googleapis.com/auth/cloud-translation", + ), + 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_translation_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.TranslationServiceGrpcAsyncIOTransport( + 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", + "https://www.googleapis.com/auth/cloud-translation", + ), + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_translation_service_grpc_lro_client(): + client = TranslationServiceClient( + credentials=credentials.AnonymousCredentials(), transport="grpc", + ) + transport = client._transport + + # Ensure that we have a api-core operations client. + assert isinstance(transport.operations_client, operations_v1.OperationsClient,) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_translation_service_grpc_lro_async_client(): + client = TranslationServiceAsyncClient( + credentials=credentials.AnonymousCredentials(), transport="grpc_asyncio", + ) + transport = client._client._transport + + # Ensure that we have a api-core operations client. + assert isinstance(transport.operations_client, operations_v1.OperationsAsyncClient,) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_glossary_path(): + project = "squid" + location = "clam" + glossary = "whelk" + + expected = "projects/{project}/locations/{location}/glossaries/{glossary}".format( + project=project, location=location, glossary=glossary, + ) + actual = TranslationServiceClient.glossary_path(project, location, glossary) + assert expected == actual + + +def test_parse_glossary_path(): + expected = { + "project": "octopus", + "location": "oyster", + "glossary": "nudibranch", + } + path = TranslationServiceClient.glossary_path(**expected) + + # Check that the path construction is reversible. + actual = TranslationServiceClient.parse_glossary_path(path) + assert expected == actual diff --git a/tests/unit/gapic/v3/test_translation_service_client_v3.py b/tests/unit/gapic/v3/test_translation_service_client_v3.py deleted file mode 100644 index 65b0d020..00000000 --- a/tests/unit/gapic/v3/test_translation_service_client_v3.py +++ /dev/null @@ -1,470 +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.rpc import status_pb2 - -from google.cloud import translate_v3 -from google.cloud.translate_v3.proto import translation_service_pb2 -from google.longrunning import operations_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 TestTranslationServiceClient(object): - def test_translate_text(self): - # Setup Expected Response - expected_response = {} - expected_response = translation_service_pb2.TranslateTextResponse( - **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 = translate_v3.TranslationServiceClient() - - # Setup Request - contents = [] - target_language_code = "targetLanguageCode1323228230" - parent = client.location_path("[PROJECT]", "[LOCATION]") - - response = client.translate_text(contents, target_language_code, parent) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.TranslateTextRequest( - contents=contents, target_language_code=target_language_code, parent=parent - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_translate_text_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 = translate_v3.TranslationServiceClient() - - # Setup request - contents = [] - target_language_code = "targetLanguageCode1323228230" - parent = client.location_path("[PROJECT]", "[LOCATION]") - - with pytest.raises(CustomException): - client.translate_text(contents, target_language_code, parent) - - def test_detect_language(self): - # Setup Expected Response - expected_response = {} - expected_response = translation_service_pb2.DetectLanguageResponse( - **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 = translate_v3.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - response = client.detect_language(parent) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.DetectLanguageRequest(parent=parent) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_detect_language_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 = translate_v3.TranslationServiceClient() - - # Setup request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - with pytest.raises(CustomException): - client.detect_language(parent) - - def test_get_supported_languages(self): - # Setup Expected Response - expected_response = {} - expected_response = translation_service_pb2.SupportedLanguages( - **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 = translate_v3.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - response = client.get_supported_languages(parent) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.GetSupportedLanguagesRequest( - parent=parent - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_get_supported_languages_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 = translate_v3.TranslationServiceClient() - - # Setup request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - with pytest.raises(CustomException): - client.get_supported_languages(parent) - - def test_batch_translate_text(self): - # Setup Expected Response - total_characters = 1368640955 - translated_characters = 1337326221 - failed_characters = 1723028396 - expected_response = { - "total_characters": total_characters, - "translated_characters": translated_characters, - "failed_characters": failed_characters, - } - expected_response = translation_service_pb2.BatchTranslateResponse( - **expected_response - ) - operation = operations_pb2.Operation( - name="operations/test_batch_translate_text", done=True - ) - operation.response.Pack(expected_response) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - source_language_code = "sourceLanguageCode1687263568" - target_language_codes = [] - input_configs = [] - output_config = {} - - response = client.batch_translate_text( - parent, - source_language_code, - target_language_codes, - input_configs, - output_config, - ) - result = response.result() - assert expected_response == result - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.BatchTranslateTextRequest( - parent=parent, - source_language_code=source_language_code, - target_language_codes=target_language_codes, - input_configs=input_configs, - output_config=output_config, - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_batch_translate_text_exception(self): - # Setup Response - error = status_pb2.Status() - operation = operations_pb2.Operation( - name="operations/test_batch_translate_text_exception", done=True - ) - operation.error.CopyFrom(error) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - source_language_code = "sourceLanguageCode1687263568" - target_language_codes = [] - input_configs = [] - output_config = {} - - response = client.batch_translate_text( - parent, - source_language_code, - target_language_codes, - input_configs, - output_config, - ) - exception = response.exception() - assert exception.errors[0] == error - - def test_create_glossary(self): - # Setup Expected Response - name = "name3373707" - entry_count = 811131134 - expected_response = {"name": name, "entry_count": entry_count} - expected_response = translation_service_pb2.Glossary(**expected_response) - operation = operations_pb2.Operation( - name="operations/test_create_glossary", done=True - ) - operation.response.Pack(expected_response) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - glossary = {} - - response = client.create_glossary(parent, glossary) - result = response.result() - assert expected_response == result - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.CreateGlossaryRequest( - parent=parent, glossary=glossary - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_create_glossary_exception(self): - # Setup Response - error = status_pb2.Status() - operation = operations_pb2.Operation( - name="operations/test_create_glossary_exception", done=True - ) - operation.error.CopyFrom(error) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - glossary = {} - - response = client.create_glossary(parent, glossary) - exception = response.exception() - assert exception.errors[0] == error - - def test_list_glossaries(self): - # Setup Expected Response - next_page_token = "" - glossaries_element = {} - glossaries = [glossaries_element] - expected_response = { - "next_page_token": next_page_token, - "glossaries": glossaries, - } - expected_response = translation_service_pb2.ListGlossariesResponse( - **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 = translate_v3.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - paged_list_response = client.list_glossaries(parent) - resources = list(paged_list_response) - assert len(resources) == 1 - - assert expected_response.glossaries[0] == resources[0] - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.ListGlossariesRequest(parent=parent) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_list_glossaries_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 = translate_v3.TranslationServiceClient() - - # Setup request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - paged_list_response = client.list_glossaries(parent) - with pytest.raises(CustomException): - list(paged_list_response) - - def test_get_glossary(self): - # Setup Expected Response - name_2 = "name2-1052831874" - entry_count = 811131134 - expected_response = {"name": name_2, "entry_count": entry_count} - expected_response = translation_service_pb2.Glossary(**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 = translate_v3.TranslationServiceClient() - - # Setup Request - name = client.glossary_path("[PROJECT]", "[LOCATION]", "[GLOSSARY]") - - response = client.get_glossary(name) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.GetGlossaryRequest(name=name) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_get_glossary_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 = translate_v3.TranslationServiceClient() - - # Setup request - name = client.glossary_path("[PROJECT]", "[LOCATION]", "[GLOSSARY]") - - with pytest.raises(CustomException): - client.get_glossary(name) - - def test_delete_glossary(self): - # Setup Expected Response - name_2 = "name2-1052831874" - expected_response = {"name": name_2} - expected_response = translation_service_pb2.DeleteGlossaryResponse( - **expected_response - ) - operation = operations_pb2.Operation( - name="operations/test_delete_glossary", done=True - ) - operation.response.Pack(expected_response) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3.TranslationServiceClient() - - # Setup Request - name = client.glossary_path("[PROJECT]", "[LOCATION]", "[GLOSSARY]") - - response = client.delete_glossary(name) - result = response.result() - assert expected_response == result - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.DeleteGlossaryRequest(name=name) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_delete_glossary_exception(self): - # Setup Response - error = status_pb2.Status() - operation = operations_pb2.Operation( - name="operations/test_delete_glossary_exception", done=True - ) - operation.error.CopyFrom(error) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3.TranslationServiceClient() - - # Setup Request - name = client.glossary_path("[PROJECT]", "[LOCATION]", "[GLOSSARY]") - - response = client.delete_glossary(name) - exception = response.exception() - assert exception.errors[0] == error diff --git a/tests/unit/gapic/v3beta1/test_translation_service_client_v3beta1.py b/tests/unit/gapic/v3beta1/test_translation_service_client_v3beta1.py deleted file mode 100644 index fa2bccc2..00000000 --- a/tests/unit/gapic/v3beta1/test_translation_service_client_v3beta1.py +++ /dev/null @@ -1,470 +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.rpc import status_pb2 - -from google.cloud import translate_v3beta1 -from google.cloud.translate_v3beta1.proto import translation_service_pb2 -from google.longrunning import operations_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 TestTranslationServiceClient(object): - def test_translate_text(self): - # Setup Expected Response - expected_response = {} - expected_response = translation_service_pb2.TranslateTextResponse( - **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 = translate_v3beta1.TranslationServiceClient() - - # Setup Request - contents = [] - target_language_code = "targetLanguageCode1323228230" - parent = client.location_path("[PROJECT]", "[LOCATION]") - - response = client.translate_text(contents, target_language_code, parent) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.TranslateTextRequest( - contents=contents, target_language_code=target_language_code, parent=parent - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_translate_text_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 = translate_v3beta1.TranslationServiceClient() - - # Setup request - contents = [] - target_language_code = "targetLanguageCode1323228230" - parent = client.location_path("[PROJECT]", "[LOCATION]") - - with pytest.raises(CustomException): - client.translate_text(contents, target_language_code, parent) - - def test_detect_language(self): - # Setup Expected Response - expected_response = {} - expected_response = translation_service_pb2.DetectLanguageResponse( - **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 = translate_v3beta1.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - response = client.detect_language(parent) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.DetectLanguageRequest(parent=parent) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_detect_language_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 = translate_v3beta1.TranslationServiceClient() - - # Setup request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - with pytest.raises(CustomException): - client.detect_language(parent) - - def test_get_supported_languages(self): - # Setup Expected Response - expected_response = {} - expected_response = translation_service_pb2.SupportedLanguages( - **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 = translate_v3beta1.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - response = client.get_supported_languages(parent) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.GetSupportedLanguagesRequest( - parent=parent - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_get_supported_languages_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 = translate_v3beta1.TranslationServiceClient() - - # Setup request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - with pytest.raises(CustomException): - client.get_supported_languages(parent) - - def test_batch_translate_text(self): - # Setup Expected Response - total_characters = 1368640955 - translated_characters = 1337326221 - failed_characters = 1723028396 - expected_response = { - "total_characters": total_characters, - "translated_characters": translated_characters, - "failed_characters": failed_characters, - } - expected_response = translation_service_pb2.BatchTranslateResponse( - **expected_response - ) - operation = operations_pb2.Operation( - name="operations/test_batch_translate_text", done=True - ) - operation.response.Pack(expected_response) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3beta1.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - source_language_code = "sourceLanguageCode1687263568" - target_language_codes = [] - input_configs = [] - output_config = {} - - response = client.batch_translate_text( - parent, - source_language_code, - target_language_codes, - input_configs, - output_config, - ) - result = response.result() - assert expected_response == result - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.BatchTranslateTextRequest( - parent=parent, - source_language_code=source_language_code, - target_language_codes=target_language_codes, - input_configs=input_configs, - output_config=output_config, - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_batch_translate_text_exception(self): - # Setup Response - error = status_pb2.Status() - operation = operations_pb2.Operation( - name="operations/test_batch_translate_text_exception", done=True - ) - operation.error.CopyFrom(error) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3beta1.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - source_language_code = "sourceLanguageCode1687263568" - target_language_codes = [] - input_configs = [] - output_config = {} - - response = client.batch_translate_text( - parent, - source_language_code, - target_language_codes, - input_configs, - output_config, - ) - exception = response.exception() - assert exception.errors[0] == error - - def test_create_glossary(self): - # Setup Expected Response - name = "name3373707" - entry_count = 811131134 - expected_response = {"name": name, "entry_count": entry_count} - expected_response = translation_service_pb2.Glossary(**expected_response) - operation = operations_pb2.Operation( - name="operations/test_create_glossary", done=True - ) - operation.response.Pack(expected_response) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3beta1.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - glossary = {} - - response = client.create_glossary(parent, glossary) - result = response.result() - assert expected_response == result - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.CreateGlossaryRequest( - parent=parent, glossary=glossary - ) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_create_glossary_exception(self): - # Setup Response - error = status_pb2.Status() - operation = operations_pb2.Operation( - name="operations/test_create_glossary_exception", done=True - ) - operation.error.CopyFrom(error) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3beta1.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - glossary = {} - - response = client.create_glossary(parent, glossary) - exception = response.exception() - assert exception.errors[0] == error - - def test_list_glossaries(self): - # Setup Expected Response - next_page_token = "" - glossaries_element = {} - glossaries = [glossaries_element] - expected_response = { - "next_page_token": next_page_token, - "glossaries": glossaries, - } - expected_response = translation_service_pb2.ListGlossariesResponse( - **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 = translate_v3beta1.TranslationServiceClient() - - # Setup Request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - paged_list_response = client.list_glossaries(parent) - resources = list(paged_list_response) - assert len(resources) == 1 - - assert expected_response.glossaries[0] == resources[0] - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.ListGlossariesRequest(parent=parent) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_list_glossaries_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 = translate_v3beta1.TranslationServiceClient() - - # Setup request - parent = client.location_path("[PROJECT]", "[LOCATION]") - - paged_list_response = client.list_glossaries(parent) - with pytest.raises(CustomException): - list(paged_list_response) - - def test_get_glossary(self): - # Setup Expected Response - name_2 = "name2-1052831874" - entry_count = 811131134 - expected_response = {"name": name_2, "entry_count": entry_count} - expected_response = translation_service_pb2.Glossary(**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 = translate_v3beta1.TranslationServiceClient() - - # Setup Request - name = client.glossary_path("[PROJECT]", "[LOCATION]", "[GLOSSARY]") - - response = client.get_glossary(name) - assert expected_response == response - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.GetGlossaryRequest(name=name) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_get_glossary_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 = translate_v3beta1.TranslationServiceClient() - - # Setup request - name = client.glossary_path("[PROJECT]", "[LOCATION]", "[GLOSSARY]") - - with pytest.raises(CustomException): - client.get_glossary(name) - - def test_delete_glossary(self): - # Setup Expected Response - name_2 = "name2-1052831874" - expected_response = {"name": name_2} - expected_response = translation_service_pb2.DeleteGlossaryResponse( - **expected_response - ) - operation = operations_pb2.Operation( - name="operations/test_delete_glossary", done=True - ) - operation.response.Pack(expected_response) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3beta1.TranslationServiceClient() - - # Setup Request - name = client.glossary_path("[PROJECT]", "[LOCATION]", "[GLOSSARY]") - - response = client.delete_glossary(name) - result = response.result() - assert expected_response == result - - assert len(channel.requests) == 1 - expected_request = translation_service_pb2.DeleteGlossaryRequest(name=name) - actual_request = channel.requests[0][1] - assert expected_request == actual_request - - def test_delete_glossary_exception(self): - # Setup Response - error = status_pb2.Status() - operation = operations_pb2.Operation( - name="operations/test_delete_glossary_exception", done=True - ) - operation.error.CopyFrom(error) - - # Mock the API response - channel = ChannelStub(responses=[operation]) - patch = mock.patch("google.api_core.grpc_helpers.create_channel") - with patch as create_channel: - create_channel.return_value = channel - client = translate_v3beta1.TranslationServiceClient() - - # Setup Request - name = client.glossary_path("[PROJECT]", "[LOCATION]", "[GLOSSARY]") - - response = client.delete_glossary(name) - exception = response.exception() - assert exception.errors[0] == error From 5217b383f2856e19c6eb83b6be34a8168b220c41 Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Fri, 31 Jul 2020 13:19:13 -0700 Subject: [PATCH 88/94] feat!: move API to python microgenerator --- .coveragerc | 35 +- .gitignore | 3 +- .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 ++ UPGRADING.md | 29 +- docs/conf.py | 3 + .../translation_service/async_client.py | 4 +- .../services/translation_service/client.py | 191 ++++--- .../translation_service/transports/base.py | 5 +- .../translation_service/transports/grpc.py | 16 +- .../transports/grpc_asyncio.py | 16 +- .../translate_v3/types/translation_service.py | 16 +- .../translation_service/async_client.py | 4 +- .../services/translation_service/client.py | 150 ++++-- .../translation_service/transports/base.py | 5 +- .../translation_service/transports/grpc.py | 16 +- .../transports/grpc_asyncio.py | 16 +- .../types/translation_service.py | 16 +- noxfile.py | 35 +- samples/snippets/beta_snippets.py | 80 +-- .../translate_v3_batch_translate_text.py | 15 +- ...e_v3_batch_translate_text_with_glossary.py | 18 +- .../snippets/translate_v3_create_glossary.py | 2 +- .../snippets/translate_v3_delete_glossary.py | 4 +- .../snippets/translate_v3_detect_language.py | 4 +- samples/snippets/translate_v3_get_glossary.py | 2 +- .../translate_v3_get_supported_languages.py | 2 +- ..._v3_get_supported_languages_with_target.py | 5 +- .../snippets/translate_v3_list_glossary.py | 6 +- .../snippets/translate_v3_translate_text.py | 17 +- ...anslate_v3_translate_text_with_glossary.py | 22 +- .../translate_v3_translate_text_with_model.py | 22 +- synth.metadata | 10 +- synth.py | 22 +- test_utils/credentials.json.enc | 49 -- .../scripts/circleci/get_tagged_package.py | 64 --- test_utils/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 ----- tests/system.py | 73 ++- .../gapic/translation_v3 => }/__init__.py | 0 .../test_translation_service.py | 97 +++- .../translation_v3beta1 => }/__init__.py | 0 .../test_translation_service.py | 97 +++- 57 files changed, 1461 insertions(+), 1670 deletions(-) create mode 100644 .kokoro/docker/docs/Dockerfile create mode 100755 .kokoro/docker/docs/fetch_gpg_keys.sh create mode 100644 .kokoro/docs/docs-presubmit.cfg create mode 100755 .kokoro/trampoline_v2.sh create mode 100644 .trampolinerc delete mode 100644 test_utils/credentials.json.enc delete mode 100644 test_utils/scripts/circleci/get_tagged_package.py delete mode 100755 test_utils/scripts/circleci/twine_upload.sh delete mode 100644 test_utils/scripts/get_target_packages.py delete mode 100644 test_utils/scripts/get_target_packages_kokoro.py delete mode 100644 test_utils/scripts/run_emulator.py delete mode 100755 test_utils/scripts/update_docs.sh delete mode 100644 test_utils/setup.py delete mode 100644 test_utils/test_utils/__init__.py delete mode 100644 test_utils/test_utils/imports.py delete mode 100644 test_utils/test_utils/retry.py delete mode 100644 test_utils/test_utils/system.py delete mode 100644 test_utils/test_utils/vpcsc_config.py rename tests/unit/gapic/translate_v3/{unit/gapic/translation_v3 => }/__init__.py (100%) rename tests/unit/gapic/translate_v3/{unit/gapic/translation_v3 => }/test_translation_service.py (97%) rename tests/unit/gapic/translate_v3beta1/{unit/gapic/translation_v3beta1 => }/__init__.py (100%) rename tests/unit/gapic/translate_v3beta1/{unit/gapic/translation_v3beta1 => }/test_translation_service.py (97%) diff --git a/.coveragerc b/.coveragerc index 8a34e3a5..b6b6f7b3 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,18 +1,39 @@ +# -*- 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/translate/__init__.py exclude_lines = # Re-enable the standard pragma 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 + # Ignore abstract methods + raise NotImplementedError +omit = + */gapic/*.py + */proto/*.py + */core/*.py + */site-packages/*.py + google/cloud/__init__.py + google/cloud/translate.py + google/cloud/translate/__init__.py + google/cloud/translation*/*.py \ No newline at end of file diff --git a/.gitignore b/.gitignore index b87e1ed5..b9daa52f 100644 --- a/.gitignore +++ b/.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/.kokoro/docker/docs/Dockerfile b/.kokoro/docker/docs/Dockerfile new file mode 100644 index 00000000..412b0b56 --- /dev/null +++ b/.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/.kokoro/docker/docs/fetch_gpg_keys.sh b/.kokoro/docker/docs/fetch_gpg_keys.sh new file mode 100755 index 00000000..d653dd86 --- /dev/null +++ b/.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/.kokoro/docs/common.cfg b/.kokoro/docs/common.cfg index e499bab7..95963d11 100644 --- a/.kokoro/docs/common.cfg +++ b/.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-translate/.kokoro/trampoline.sh" +build_file: "python-translate/.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/.kokoro/docs/docs-presubmit.cfg b/.kokoro/docs/docs-presubmit.cfg new file mode 100644 index 00000000..11181078 --- /dev/null +++ b/.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/.kokoro/publish-docs.sh b/.kokoro/publish-docs.sh index 1796acba..8acb14e8 100755 --- a/.kokoro/publish-docs.sh +++ b/.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-translate - -# 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/.kokoro/trampoline_v2.sh b/.kokoro/trampoline_v2.sh new file mode 100755 index 00000000..719bcd5b --- /dev/null +++ b/.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/.trampolinerc b/.trampolinerc new file mode 100644 index 00000000..995ee291 --- /dev/null +++ b/.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/UPGRADING.md b/UPGRADING.md index 151a2640..246e0457 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -149,9 +149,34 @@ response = client.translate_text( -## Enums +## Enums and types > **WARNING**: Breaking change -The submodules `enums` (containing enum classes for long running operation State) has been removed. \ No newline at end of file +The submodule `enums` (containing enum classes for long running operation State) has been removed. + +The submodule `types` is still present. When using the primary version module alias (`translate`) +it is possible to access the types classes directly. + +```py +from google.cloud import translate # the primary version is imported by default + +client = translate.TranslationServiceClient() + +glossary_config = client.TranslateTextGlossaryConfig( + glossary=glossary_path +) +``` + +When a specific version is imported, the full module name must be specified to access types classes. + +```py +from google.cloud import translate_v3beta1 as translate + +client = translate.TranslationServiceClient() + +glossary_config = client.types.TranslateTextGlossaryConfig( + glossary=glossary_path +) +``` diff --git a/docs/conf.py b/docs/conf.py index f6b4a465..f70d6a32 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -20,6 +20,9 @@ # 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. +sys.path.insert(0, os.path.abspath(".")) + __version__ = "" # -- General configuration ------------------------------------------------ diff --git a/google/cloud/translate_v3/services/translation_service/async_client.py b/google/cloud/translate_v3/services/translation_service/async_client.py index a189fe76..66552ce7 100644 --- a/google/cloud/translate_v3/services/translation_service/async_client.py +++ b/google/cloud/translate_v3/services/translation_service/async_client.py @@ -901,7 +901,9 @@ async def delete_glossary( try: _client_info = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + gapic_version=pkg_resources.get_distribution( + "google-cloud-translation", + ).version, ) except pkg_resources.DistributionNotFound: _client_info = gapic_v1.client_info.ClientInfo() diff --git a/google/cloud/translate_v3/services/translation_service/client.py b/google/cloud/translate_v3/services/translation_service/client.py index 5ec222fa..097743cb 100644 --- a/google/cloud/translate_v3/services/translation_service/client.py +++ b/google/cloud/translate_v3/services/translation_service/client.py @@ -351,7 +351,7 @@ def translate_text( # 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( + has_flattened_params = any( [ parent, target_language_code, @@ -360,29 +360,35 @@ def translate_text( mime_type, source_language_code, ] - ): + ) + 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." ) - request = translation_service.TranslateTextRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - - if parent is not None: - request.parent = parent - if target_language_code is not None: - request.target_language_code = target_language_code - if contents is not None: - request.contents = contents - if model is not None: - request.model = model - if mime_type is not None: - request.mime_type = mime_type - if source_language_code is not None: - request.source_language_code = source_language_code + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.TranslateTextRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.TranslateTextRequest): + request = translation_service.TranslateTextRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if target_language_code is not None: + request.target_language_code = target_language_code + if contents is not None: + request.contents = contents + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type + if source_language_code is not None: + request.source_language_code = source_language_code # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -480,25 +486,31 @@ def detect_language( # 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([parent, model, mime_type, content]): + has_flattened_params = any([parent, model, mime_type, content]) + 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." ) - request = translation_service.DetectLanguageRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - - if parent is not None: - request.parent = parent - if model is not None: - request.model = model - if mime_type is not None: - request.mime_type = mime_type - if content is not None: - request.content = content + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.DetectLanguageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.DetectLanguageRequest): + request = translation_service.DetectLanguageRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type + if content is not None: + request.content = content # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -596,23 +608,29 @@ def get_supported_languages( # 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([parent, model, display_language_code]): + has_flattened_params = any([parent, model, display_language_code]) + 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." ) - request = translation_service.GetSupportedLanguagesRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.GetSupportedLanguagesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.GetSupportedLanguagesRequest): + request = translation_service.GetSupportedLanguagesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if parent is not None: - request.parent = parent - if model is not None: - request.model = model - if display_language_code is not None: - request.display_language_code = display_language_code + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if display_language_code is not None: + request.display_language_code = display_language_code # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -672,7 +690,12 @@ def batch_translate_text( """ # Create or coerce a protobuf request object. - request = translation_service.BatchTranslateTextRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.BatchTranslateTextRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.BatchTranslateTextRequest): + request = translation_service.BatchTranslateTextRequest(request) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -743,21 +766,27 @@ def create_glossary( # 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([parent, glossary]): + has_flattened_params = any([parent, glossary]) + 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." ) - request = translation_service.CreateGlossaryRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.CreateGlossaryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.CreateGlossaryRequest): + request = translation_service.CreateGlossaryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if parent is not None: - request.parent = parent - if glossary is not None: - request.glossary = glossary + if parent is not None: + request.parent = parent + if glossary is not None: + request.glossary = glossary # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -823,19 +852,25 @@ def list_glossaries( # 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([parent]): + has_flattened_params = any([parent]) + 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." ) - request = translation_service.ListGlossariesRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.ListGlossariesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.ListGlossariesRequest): + request = translation_service.ListGlossariesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if parent is not None: - request.parent = parent + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -896,19 +931,25 @@ def get_glossary( # 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([name]): + has_flattened_params = any([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." ) - request = translation_service.GetGlossaryRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.GetGlossaryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.GetGlossaryRequest): + request = translation_service.GetGlossaryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if name is not None: - request.name = name + if name is not None: + request.name = name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -969,19 +1010,25 @@ def delete_glossary( # 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([name]): + has_flattened_params = any([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." ) - request = translation_service.DeleteGlossaryRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.DeleteGlossaryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.DeleteGlossaryRequest): + request = translation_service.DeleteGlossaryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if name is not None: - request.name = name + if name is not None: + request.name = name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -1010,7 +1057,9 @@ def delete_glossary( try: _client_info = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + gapic_version=pkg_resources.get_distribution( + "google-cloud-translation", + ).version, ) except pkg_resources.DistributionNotFound: _client_info = gapic_v1.client_info.ClientInfo() diff --git a/google/cloud/translate_v3/services/translation_service/transports/base.py b/google/cloud/translate_v3/services/translation_service/transports/base.py index b62c1308..d32c016c 100644 --- a/google/cloud/translate_v3/services/translation_service/transports/base.py +++ b/google/cloud/translate_v3/services/translation_service/transports/base.py @@ -22,6 +22,7 @@ from google import auth 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.api_core import operations_v1 # type: ignore from google.auth import credentials # type: ignore @@ -31,7 +32,9 @@ try: _client_info = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + gapic_version=pkg_resources.get_distribution( + "google-cloud-translation", + ).version, ) except pkg_resources.DistributionNotFound: _client_info = gapic_v1.client_info.ClientInfo() diff --git a/google/cloud/translate_v3/services/translation_service/transports/grpc.py b/google/cloud/translate_v3/services/translation_service/transports/grpc.py index 443d20f7..f8ee5ef5 100644 --- a/google/cloud/translate_v3/services/translation_service/transports/grpc.py +++ b/google/cloud/translate_v3/services/translation_service/transports/grpc.py @@ -244,7 +244,7 @@ def translate_text( # to pass in the functions for each. if "translate_text" not in self._stubs: self._stubs["translate_text"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/TranslateText", + "/google.cloud.translation.v3.TranslationService/TranslateText", request_serializer=translation_service.TranslateTextRequest.serialize, response_deserializer=translation_service.TranslateTextResponse.deserialize, ) @@ -273,7 +273,7 @@ def detect_language( # to pass in the functions for each. if "detect_language" not in self._stubs: self._stubs["detect_language"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/DetectLanguage", + "/google.cloud.translation.v3.TranslationService/DetectLanguage", request_serializer=translation_service.DetectLanguageRequest.serialize, response_deserializer=translation_service.DetectLanguageResponse.deserialize, ) @@ -303,7 +303,7 @@ def get_supported_languages( # to pass in the functions for each. if "get_supported_languages" not in self._stubs: self._stubs["get_supported_languages"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/GetSupportedLanguages", + "/google.cloud.translation.v3.TranslationService/GetSupportedLanguages", request_serializer=translation_service.GetSupportedLanguagesRequest.serialize, response_deserializer=translation_service.SupportedLanguages.deserialize, ) @@ -339,7 +339,7 @@ def batch_translate_text( # to pass in the functions for each. if "batch_translate_text" not in self._stubs: self._stubs["batch_translate_text"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/BatchTranslateText", + "/google.cloud.translation.v3.TranslationService/BatchTranslateText", request_serializer=translation_service.BatchTranslateTextRequest.serialize, response_deserializer=operations.Operation.FromString, ) @@ -366,7 +366,7 @@ def create_glossary( # to pass in the functions for each. if "create_glossary" not in self._stubs: self._stubs["create_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/CreateGlossary", + "/google.cloud.translation.v3.TranslationService/CreateGlossary", request_serializer=translation_service.CreateGlossaryRequest.serialize, response_deserializer=operations.Operation.FromString, ) @@ -396,7 +396,7 @@ def list_glossaries( # to pass in the functions for each. if "list_glossaries" not in self._stubs: self._stubs["list_glossaries"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/ListGlossaries", + "/google.cloud.translation.v3.TranslationService/ListGlossaries", request_serializer=translation_service.ListGlossariesRequest.serialize, response_deserializer=translation_service.ListGlossariesResponse.deserialize, ) @@ -425,7 +425,7 @@ def get_glossary( # to pass in the functions for each. if "get_glossary" not in self._stubs: self._stubs["get_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/GetGlossary", + "/google.cloud.translation.v3.TranslationService/GetGlossary", request_serializer=translation_service.GetGlossaryRequest.serialize, response_deserializer=translation_service.Glossary.deserialize, ) @@ -453,7 +453,7 @@ def delete_glossary( # to pass in the functions for each. if "delete_glossary" not in self._stubs: self._stubs["delete_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/DeleteGlossary", + "/google.cloud.translation.v3.TranslationService/DeleteGlossary", request_serializer=translation_service.DeleteGlossaryRequest.serialize, response_deserializer=operations.Operation.FromString, ) diff --git a/google/cloud/translate_v3/services/translation_service/transports/grpc_asyncio.py b/google/cloud/translate_v3/services/translation_service/transports/grpc_asyncio.py index bcc770e2..7fb7d890 100644 --- a/google/cloud/translate_v3/services/translation_service/transports/grpc_asyncio.py +++ b/google/cloud/translate_v3/services/translation_service/transports/grpc_asyncio.py @@ -237,7 +237,7 @@ def translate_text( # to pass in the functions for each. if "translate_text" not in self._stubs: self._stubs["translate_text"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/TranslateText", + "/google.cloud.translation.v3.TranslationService/TranslateText", request_serializer=translation_service.TranslateTextRequest.serialize, response_deserializer=translation_service.TranslateTextResponse.deserialize, ) @@ -266,7 +266,7 @@ def detect_language( # to pass in the functions for each. if "detect_language" not in self._stubs: self._stubs["detect_language"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/DetectLanguage", + "/google.cloud.translation.v3.TranslationService/DetectLanguage", request_serializer=translation_service.DetectLanguageRequest.serialize, response_deserializer=translation_service.DetectLanguageResponse.deserialize, ) @@ -296,7 +296,7 @@ def get_supported_languages( # to pass in the functions for each. if "get_supported_languages" not in self._stubs: self._stubs["get_supported_languages"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/GetSupportedLanguages", + "/google.cloud.translation.v3.TranslationService/GetSupportedLanguages", request_serializer=translation_service.GetSupportedLanguagesRequest.serialize, response_deserializer=translation_service.SupportedLanguages.deserialize, ) @@ -332,7 +332,7 @@ def batch_translate_text( # to pass in the functions for each. if "batch_translate_text" not in self._stubs: self._stubs["batch_translate_text"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/BatchTranslateText", + "/google.cloud.translation.v3.TranslationService/BatchTranslateText", request_serializer=translation_service.BatchTranslateTextRequest.serialize, response_deserializer=operations.Operation.FromString, ) @@ -361,7 +361,7 @@ def create_glossary( # to pass in the functions for each. if "create_glossary" not in self._stubs: self._stubs["create_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/CreateGlossary", + "/google.cloud.translation.v3.TranslationService/CreateGlossary", request_serializer=translation_service.CreateGlossaryRequest.serialize, response_deserializer=operations.Operation.FromString, ) @@ -391,7 +391,7 @@ def list_glossaries( # to pass in the functions for each. if "list_glossaries" not in self._stubs: self._stubs["list_glossaries"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/ListGlossaries", + "/google.cloud.translation.v3.TranslationService/ListGlossaries", request_serializer=translation_service.ListGlossariesRequest.serialize, response_deserializer=translation_service.ListGlossariesResponse.deserialize, ) @@ -421,7 +421,7 @@ def get_glossary( # to pass in the functions for each. if "get_glossary" not in self._stubs: self._stubs["get_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/GetGlossary", + "/google.cloud.translation.v3.TranslationService/GetGlossary", request_serializer=translation_service.GetGlossaryRequest.serialize, response_deserializer=translation_service.Glossary.deserialize, ) @@ -451,7 +451,7 @@ def delete_glossary( # to pass in the functions for each. if "delete_glossary" not in self._stubs: self._stubs["delete_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3.TranslationService/DeleteGlossary", + "/google.cloud.translation.v3.TranslationService/DeleteGlossary", request_serializer=translation_service.DeleteGlossaryRequest.serialize, response_deserializer=operations.Operation.FromString, ) diff --git a/google/cloud/translate_v3/types/translation_service.py b/google/cloud/translate_v3/types/translation_service.py index ad14007a..4733b901 100644 --- a/google/cloud/translate_v3/types/translation_service.py +++ b/google/cloud/translate_v3/types/translation_service.py @@ -22,7 +22,7 @@ __protobuf__ = proto.module( - package="google.cloud.translate.v3", + package="google.cloud.translation.v3", manifest={ "TranslateTextGlossaryConfig", "TranslateTextRequest", @@ -178,13 +178,13 @@ class TranslateTextResponse(proto.Message): translations (Sequence[~.translation_service.Translation]): Text translation responses with no glossary applied. This field has the same length as - [``contents``][google.cloud.translate.v3.TranslateTextRequest.contents]. + [``contents``][google.cloud.translation.v3.TranslateTextRequest.contents]. glossary_translations (Sequence[~.translation_service.Translation]): Text translation responses if a glossary is provided in the request. This can be the same as - [``translations``][google.cloud.translate.v3.TranslateTextResponse.translations] + [``translations``][google.cloud.translation.v3.TranslateTextResponse.translations] if no terms apply. This field has the same length as - [``contents``][google.cloud.translate.v3.TranslateTextRequest.contents]. + [``contents``][google.cloud.translation.v3.TranslateTextRequest.contents]. """ translations = proto.RepeatedField(proto.MESSAGE, number=1, message="Translation",) @@ -521,7 +521,7 @@ class OutputConfig(proto.Message): The format of translations_file (for target language code 'trg') is: - gs://translation_test/a_b_c\_'trg'_translations.[extension] + ``gs://translation_test/a_b_c_'trg'_translations.[extension]`` If the input file extension is tsv, the output has the following columns: Column 1: ID of the request provided in @@ -538,10 +538,10 @@ class OutputConfig(proto.Message): directly written to the output file. If glossary is requested, a separate glossary_translations_file has format of - gs://translation_test/a_b_c\_'trg'_glossary_translations.[extension] + ``gs://translation_test/a_b_c_'trg'_glossary_translations.[extension]`` The format of errors file (for target language code 'trg') - is: gs://translation_test/a_b_c\_'trg'_errors.[extension] + is: ``gs://translation_test/a_b_c_'trg'_errors.[extension]`` If the input file extension is tsv, errors_file contains the following: Column 1: ID of the request provided in the @@ -554,7 +554,7 @@ class OutputConfig(proto.Message): If the input file extension is txt or html, glossary_error_file will be generated that contains error details. glossary_error_file has format of - gs://translation_test/a_b_c\_'trg'_glossary_errors.[extension] + ``gs://translation_test/a_b_c_'trg'_glossary_errors.[extension]`` """ gcs_destination = proto.Field( diff --git a/google/cloud/translate_v3beta1/services/translation_service/async_client.py b/google/cloud/translate_v3beta1/services/translation_service/async_client.py index 123e0a07..c7908f2b 100644 --- a/google/cloud/translate_v3beta1/services/translation_service/async_client.py +++ b/google/cloud/translate_v3beta1/services/translation_service/async_client.py @@ -788,7 +788,9 @@ async def delete_glossary( try: _client_info = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + gapic_version=pkg_resources.get_distribution( + "google-cloud-translation", + ).version, ) except pkg_resources.DistributionNotFound: _client_info = gapic_v1.client_info.ClientInfo() diff --git a/google/cloud/translate_v3beta1/services/translation_service/client.py b/google/cloud/translate_v3beta1/services/translation_service/client.py index 64bcc138..b4efa659 100644 --- a/google/cloud/translate_v3beta1/services/translation_service/client.py +++ b/google/cloud/translate_v3beta1/services/translation_service/client.py @@ -266,7 +266,12 @@ def translate_text( """ # Create or coerce a protobuf request object. - request = translation_service.TranslateTextRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.TranslateTextRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.TranslateTextRequest): + request = translation_service.TranslateTextRequest(request) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -357,23 +362,29 @@ def detect_language( # 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([parent, model, mime_type]): + has_flattened_params = any([parent, model, mime_type]) + 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." ) - request = translation_service.DetectLanguageRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.DetectLanguageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.DetectLanguageRequest): + request = translation_service.DetectLanguageRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if parent is not None: - request.parent = parent - if model is not None: - request.model = model - if mime_type is not None: - request.mime_type = mime_type + if parent is not None: + request.parent = parent + if model is not None: + request.model = model + if mime_type is not None: + request.mime_type = mime_type # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -471,23 +482,29 @@ def get_supported_languages( # 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([parent, display_language_code, model]): + has_flattened_params = any([parent, display_language_code, model]) + 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." ) - request = translation_service.GetSupportedLanguagesRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.GetSupportedLanguagesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.GetSupportedLanguagesRequest): + request = translation_service.GetSupportedLanguagesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if parent is not None: - request.parent = parent - if display_language_code is not None: - request.display_language_code = display_language_code - if model is not None: - request.model = model + if parent is not None: + request.parent = parent + if display_language_code is not None: + request.display_language_code = display_language_code + if model is not None: + request.model = model # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -547,7 +564,12 @@ def batch_translate_text( """ # Create or coerce a protobuf request object. - request = translation_service.BatchTranslateTextRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.BatchTranslateTextRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.BatchTranslateTextRequest): + request = translation_service.BatchTranslateTextRequest(request) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -618,21 +640,27 @@ def create_glossary( # 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([parent, glossary]): + has_flattened_params = any([parent, glossary]) + 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." ) - request = translation_service.CreateGlossaryRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.CreateGlossaryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.CreateGlossaryRequest): + request = translation_service.CreateGlossaryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if parent is not None: - request.parent = parent - if glossary is not None: - request.glossary = glossary + if parent is not None: + request.parent = parent + if glossary is not None: + request.glossary = glossary # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -708,21 +736,27 @@ def list_glossaries( # 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([parent, filter]): + has_flattened_params = any([parent, filter]) + 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." ) - request = translation_service.ListGlossariesRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.ListGlossariesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.ListGlossariesRequest): + request = translation_service.ListGlossariesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if parent is not None: - request.parent = parent - if filter is not None: - request.filter = filter + if parent is not None: + request.parent = parent + if filter is not None: + request.filter = filter # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -783,19 +817,25 @@ def get_glossary( # 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([name]): + has_flattened_params = any([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." ) - request = translation_service.GetGlossaryRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.GetGlossaryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.GetGlossaryRequest): + request = translation_service.GetGlossaryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if name is not None: - request.name = name + if name is not None: + request.name = name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -856,19 +896,25 @@ def delete_glossary( # 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([name]): + has_flattened_params = any([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." ) - request = translation_service.DeleteGlossaryRequest(request) + # Minor optimization to avoid making a copy if the user passes + # in a translation_service.DeleteGlossaryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, translation_service.DeleteGlossaryRequest): + request = translation_service.DeleteGlossaryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. + # If we have keyword arguments corresponding to fields on the + # request, apply these. - if name is not None: - request.name = name + if name is not None: + request.name = name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. @@ -897,7 +943,9 @@ def delete_glossary( try: _client_info = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + gapic_version=pkg_resources.get_distribution( + "google-cloud-translation", + ).version, ) except pkg_resources.DistributionNotFound: _client_info = gapic_v1.client_info.ClientInfo() diff --git a/google/cloud/translate_v3beta1/services/translation_service/transports/base.py b/google/cloud/translate_v3beta1/services/translation_service/transports/base.py index dcd3e417..35c84f1c 100644 --- a/google/cloud/translate_v3beta1/services/translation_service/transports/base.py +++ b/google/cloud/translate_v3beta1/services/translation_service/transports/base.py @@ -22,6 +22,7 @@ from google import auth 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.api_core import operations_v1 # type: ignore from google.auth import credentials # type: ignore @@ -31,7 +32,9 @@ try: _client_info = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution("google.cloud.translate",).version, + gapic_version=pkg_resources.get_distribution( + "google-cloud-translation", + ).version, ) except pkg_resources.DistributionNotFound: _client_info = gapic_v1.client_info.ClientInfo() diff --git a/google/cloud/translate_v3beta1/services/translation_service/transports/grpc.py b/google/cloud/translate_v3beta1/services/translation_service/transports/grpc.py index ea1b9764..f6dadf28 100644 --- a/google/cloud/translate_v3beta1/services/translation_service/transports/grpc.py +++ b/google/cloud/translate_v3beta1/services/translation_service/transports/grpc.py @@ -244,7 +244,7 @@ def translate_text( # to pass in the functions for each. if "translate_text" not in self._stubs: self._stubs["translate_text"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/TranslateText", + "/google.cloud.translation.v3beta1.TranslationService/TranslateText", request_serializer=translation_service.TranslateTextRequest.serialize, response_deserializer=translation_service.TranslateTextResponse.deserialize, ) @@ -273,7 +273,7 @@ def detect_language( # to pass in the functions for each. if "detect_language" not in self._stubs: self._stubs["detect_language"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/DetectLanguage", + "/google.cloud.translation.v3beta1.TranslationService/DetectLanguage", request_serializer=translation_service.DetectLanguageRequest.serialize, response_deserializer=translation_service.DetectLanguageResponse.deserialize, ) @@ -303,7 +303,7 @@ def get_supported_languages( # to pass in the functions for each. if "get_supported_languages" not in self._stubs: self._stubs["get_supported_languages"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/GetSupportedLanguages", + "/google.cloud.translation.v3beta1.TranslationService/GetSupportedLanguages", request_serializer=translation_service.GetSupportedLanguagesRequest.serialize, response_deserializer=translation_service.SupportedLanguages.deserialize, ) @@ -339,7 +339,7 @@ def batch_translate_text( # to pass in the functions for each. if "batch_translate_text" not in self._stubs: self._stubs["batch_translate_text"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/BatchTranslateText", + "/google.cloud.translation.v3beta1.TranslationService/BatchTranslateText", request_serializer=translation_service.BatchTranslateTextRequest.serialize, response_deserializer=operations.Operation.FromString, ) @@ -366,7 +366,7 @@ def create_glossary( # to pass in the functions for each. if "create_glossary" not in self._stubs: self._stubs["create_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/CreateGlossary", + "/google.cloud.translation.v3beta1.TranslationService/CreateGlossary", request_serializer=translation_service.CreateGlossaryRequest.serialize, response_deserializer=operations.Operation.FromString, ) @@ -396,7 +396,7 @@ def list_glossaries( # to pass in the functions for each. if "list_glossaries" not in self._stubs: self._stubs["list_glossaries"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/ListGlossaries", + "/google.cloud.translation.v3beta1.TranslationService/ListGlossaries", request_serializer=translation_service.ListGlossariesRequest.serialize, response_deserializer=translation_service.ListGlossariesResponse.deserialize, ) @@ -425,7 +425,7 @@ def get_glossary( # to pass in the functions for each. if "get_glossary" not in self._stubs: self._stubs["get_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/GetGlossary", + "/google.cloud.translation.v3beta1.TranslationService/GetGlossary", request_serializer=translation_service.GetGlossaryRequest.serialize, response_deserializer=translation_service.Glossary.deserialize, ) @@ -453,7 +453,7 @@ def delete_glossary( # to pass in the functions for each. if "delete_glossary" not in self._stubs: self._stubs["delete_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/DeleteGlossary", + "/google.cloud.translation.v3beta1.TranslationService/DeleteGlossary", request_serializer=translation_service.DeleteGlossaryRequest.serialize, response_deserializer=operations.Operation.FromString, ) diff --git a/google/cloud/translate_v3beta1/services/translation_service/transports/grpc_asyncio.py b/google/cloud/translate_v3beta1/services/translation_service/transports/grpc_asyncio.py index 682ba389..e7f63e99 100644 --- a/google/cloud/translate_v3beta1/services/translation_service/transports/grpc_asyncio.py +++ b/google/cloud/translate_v3beta1/services/translation_service/transports/grpc_asyncio.py @@ -237,7 +237,7 @@ def translate_text( # to pass in the functions for each. if "translate_text" not in self._stubs: self._stubs["translate_text"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/TranslateText", + "/google.cloud.translation.v3beta1.TranslationService/TranslateText", request_serializer=translation_service.TranslateTextRequest.serialize, response_deserializer=translation_service.TranslateTextResponse.deserialize, ) @@ -266,7 +266,7 @@ def detect_language( # to pass in the functions for each. if "detect_language" not in self._stubs: self._stubs["detect_language"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/DetectLanguage", + "/google.cloud.translation.v3beta1.TranslationService/DetectLanguage", request_serializer=translation_service.DetectLanguageRequest.serialize, response_deserializer=translation_service.DetectLanguageResponse.deserialize, ) @@ -296,7 +296,7 @@ def get_supported_languages( # to pass in the functions for each. if "get_supported_languages" not in self._stubs: self._stubs["get_supported_languages"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/GetSupportedLanguages", + "/google.cloud.translation.v3beta1.TranslationService/GetSupportedLanguages", request_serializer=translation_service.GetSupportedLanguagesRequest.serialize, response_deserializer=translation_service.SupportedLanguages.deserialize, ) @@ -332,7 +332,7 @@ def batch_translate_text( # to pass in the functions for each. if "batch_translate_text" not in self._stubs: self._stubs["batch_translate_text"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/BatchTranslateText", + "/google.cloud.translation.v3beta1.TranslationService/BatchTranslateText", request_serializer=translation_service.BatchTranslateTextRequest.serialize, response_deserializer=operations.Operation.FromString, ) @@ -361,7 +361,7 @@ def create_glossary( # to pass in the functions for each. if "create_glossary" not in self._stubs: self._stubs["create_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/CreateGlossary", + "/google.cloud.translation.v3beta1.TranslationService/CreateGlossary", request_serializer=translation_service.CreateGlossaryRequest.serialize, response_deserializer=operations.Operation.FromString, ) @@ -391,7 +391,7 @@ def list_glossaries( # to pass in the functions for each. if "list_glossaries" not in self._stubs: self._stubs["list_glossaries"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/ListGlossaries", + "/google.cloud.translation.v3beta1.TranslationService/ListGlossaries", request_serializer=translation_service.ListGlossariesRequest.serialize, response_deserializer=translation_service.ListGlossariesResponse.deserialize, ) @@ -421,7 +421,7 @@ def get_glossary( # to pass in the functions for each. if "get_glossary" not in self._stubs: self._stubs["get_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/GetGlossary", + "/google.cloud.translation.v3beta1.TranslationService/GetGlossary", request_serializer=translation_service.GetGlossaryRequest.serialize, response_deserializer=translation_service.Glossary.deserialize, ) @@ -451,7 +451,7 @@ def delete_glossary( # to pass in the functions for each. if "delete_glossary" not in self._stubs: self._stubs["delete_glossary"] = self.grpc_channel.unary_unary( - "/google.cloud.translate.v3beta1.TranslationService/DeleteGlossary", + "/google.cloud.translation.v3beta1.TranslationService/DeleteGlossary", request_serializer=translation_service.DeleteGlossaryRequest.serialize, response_deserializer=operations.Operation.FromString, ) diff --git a/google/cloud/translate_v3beta1/types/translation_service.py b/google/cloud/translate_v3beta1/types/translation_service.py index 56f1e1eb..2df8c43d 100644 --- a/google/cloud/translate_v3beta1/types/translation_service.py +++ b/google/cloud/translate_v3beta1/types/translation_service.py @@ -22,7 +22,7 @@ __protobuf__ = proto.module( - package="google.cloud.translate.v3beta1", + package="google.cloud.translation.v3beta1", manifest={ "TranslateTextGlossaryConfig", "TranslateTextRequest", @@ -178,13 +178,13 @@ class TranslateTextResponse(proto.Message): translations (Sequence[~.translation_service.Translation]): Text translation responses with no glossary applied. This field has the same length as - [``contents``][google.cloud.translate.v3beta1.TranslateTextRequest.contents]. + [``contents``][google.cloud.translation.v3beta1.TranslateTextRequest.contents]. glossary_translations (Sequence[~.translation_service.Translation]): Text translation responses if a glossary is provided in the request. This can be the same as - [``translations``][google.cloud.translate.v3beta1.TranslateTextResponse.translations] + [``translations``][google.cloud.translation.v3beta1.TranslateTextResponse.translations] if no terms apply. This field has the same length as - [``contents``][google.cloud.translate.v3beta1.TranslateTextRequest.contents]. + [``contents``][google.cloud.translation.v3beta1.TranslateTextRequest.contents]. """ translations = proto.RepeatedField(proto.MESSAGE, number=1, message="Translation",) @@ -514,7 +514,7 @@ class OutputConfig(proto.Message): The format of translations_file (for target language code 'trg') is: - gs://translation_test/a_b_c\_'trg'_translations.[extension] + ``gs://translation_test/a_b_c_'trg'_translations.[extension]`` If the input file extension is tsv, the output has the following columns: Column 1: ID of the request provided in @@ -531,10 +531,10 @@ class OutputConfig(proto.Message): directly written to the output file. If glossary is requested, a separate glossary_translations_file has format of - gs://translation_test/a_b_c\_'trg'_glossary_translations.[extension] + ``gs://translation_test/a_b_c_'trg'_glossary_translations.[extension]`` The format of errors file (for target language code 'trg') - is: gs://translation_test/a_b_c\_'trg'_errors.[extension] + is: ``gs://translation_test/a_b_c_'trg'_errors.[extension]`` If the input file extension is tsv, errors_file contains the following: Column 1: ID of the request provided in the @@ -547,7 +547,7 @@ class OutputConfig(proto.Message): If the input file extension is txt or html, glossary_error_file will be generated that contains error details. glossary_error_file has format of - gs://translation_test/a_b_c\_'trg'_glossary_errors.[extension] + ``gs://translation_test/a_b_c_'trg'_glossary_errors.[extension]`` """ gcs_destination = proto.Field( diff --git a/noxfile.py b/noxfile.py index 7d9b5601..7af72637 100644 --- a/noxfile.py +++ b/noxfile.py @@ -79,7 +79,7 @@ def default(session): session.run( "py.test", "--quiet", - "--cov=google.cloud.translation", + "--cov=google.cloud.translate", "--cov=google.cloud", "--cov=tests.unit", "--cov-append", @@ -162,3 +162,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", "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/samples/snippets/beta_snippets.py b/samples/snippets/beta_snippets.py index 96b19f5d..10ec2dc6 100644 --- a/samples/snippets/beta_snippets.py +++ b/samples/snippets/beta_snippets.py @@ -25,14 +25,17 @@ def translate_text(project_id, text): # text = 'Text you wish to translate' location = 'global' - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" response = client.translate_text( - parent=parent, - contents=[text], - mime_type='text/plain', # mime types: text/plain, text/html - source_language_code='en-US', - target_language_code='sr-Latn') + request={ + "parent": parent, + "contents": [text], + "mime_type": "text/plain", # mime types: text/plain, text/html + "source_language_code": "en-US", + "target_language_code": "sr-Latn" + } + ) for translation in response.translations: print(u'Translated Text: {}'.format(translation)) @@ -49,7 +52,7 @@ def batch_translate_text(project_id, input_uri, output_uri): # output_uri = 'gs://YOUR_BUCKET_ID/path_to_store_results/' location = 'us-central1' - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" gcs_source = translate.types.GcsSource(input_uri=input_uri) @@ -64,11 +67,14 @@ def batch_translate_text(project_id, input_uri, output_uri): gcs_destination=gcs_destination) operation = client.batch_translate_text( - parent=parent, - source_language_code='en-US', - target_language_codes=['sr-Latn'], - input_configs=[input_config], - output_config=output_config) + request={ + "parent": parent, + "source_language_code": "en-US", + "target_language_codes": ["sr-Latn"], + "input_configs": [input_config], + "output_config": output_config + } + ) result = operation.result(timeout=240) @@ -86,12 +92,15 @@ def detect_language(project_id, text): # text = 'Text you wish to translate' location = 'global' - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" response = client.detect_language( - parent=parent, - content=text, - mime_type='text/plain') # mime types: text/plain, text/html + request={ + "parent": parent, + "content": text, + "mime_type": "text/plain" # mime types: text/plain, text/html + } + ) for language in response.languages: print(u'Language Code: {} (Confidence: {})'.format( @@ -108,9 +117,9 @@ def list_languages(project_id): # project_id = YOUR_PROJECT_ID location = 'global' - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" - response = client.get_supported_languages(parent) + response = client.get_supported_languages(parent=parent) print('Supported Languages:') for language in response.languages: @@ -127,7 +136,7 @@ def list_languages_with_target(project_id, display_language_code): # display_language_code = 'is' location = 'global' - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" response = client.get_supported_languages( parent=parent, @@ -168,7 +177,7 @@ def create_glossary(project_id, glossary_id): language_codes_set=language_codes_set, input_config=input_config) - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" operation = client.create_glossary(parent=parent, glossary=glossary) @@ -186,9 +195,9 @@ def list_glossaries(project_id): # project_id = 'YOUR_PROJECT_ID' location = 'us-central1' # The location of the glossary - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" - for glossary in client.list_glossaries(parent): + for glossary in client.list_glossaries(parent=parent): print(u'Name: {}'.format(glossary.name)) print(u'Entry count: {}'.format(glossary.entry_count)) print(u'Input uri: {}'.format( @@ -206,12 +215,12 @@ def get_glossary(project_id, glossary_id): # project_id = 'YOUR_PROJECT_ID' # glossary_id = 'GLOSSARY_ID' - parent = client.glossary_path( + name = client.glossary_path( project_id, 'us-central1', # The location of the glossary glossary_id) - response = client.get_glossary(parent) + response = client.get_glossary(name=name) print(u'Name: {}'.format(response.name)) print(u'Language Pair:') print(u'\tSource Language Code: {}'.format( @@ -231,12 +240,12 @@ def delete_glossary(project_id, glossary_id): # project_id = 'YOUR_PROJECT_ID' # glossary_id = 'GLOSSARY_ID' - parent = client.glossary_path( + name = client.glossary_path( project_id, 'us-central1', # The location of the glossary glossary_id) - operation = client.delete_glossary(parent) + operation = client.delete_glossary(name=name) result = operation.result(timeout=90) print(u'Deleted: {}'.format(result.name)) # [END translate_delete_glossary_beta] @@ -260,15 +269,18 @@ def translate_text_with_glossary(project_id, glossary_id, text): glossary_config = translate.types.TranslateTextGlossaryConfig( glossary=glossary) - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" result = client.translate_text( - parent=parent, - contents=[text], - mime_type='text/plain', # mime types: text/plain, text/html - source_language_code='en', - target_language_code='es', - glossary_config=glossary_config) + request={ + "parent": parent, + "contents": [text], + "mime_type": "text/plain", + "source_language_code": "en", + "target_language_code": "es", + "glossary_config": glossary_config + } + ) for translation in result.glossary_translations: print(translation) @@ -355,4 +367,4 @@ def translate_text_with_glossary(project_id, glossary_id, text): delete_glossary(args.project_id, args.glossary_id) elif args.command == 'translate-with-glossary': translate_text_with_glossary( - args.project_id, args.glossary_id, args.text) + args.project_id, args.glossary_id, args.text) diff --git a/samples/snippets/translate_v3_batch_translate_text.py b/samples/snippets/translate_v3_batch_translate_text.py index 4454afb4..487b0965 100644 --- a/samples/snippets/translate_v3_batch_translate_text.py +++ b/samples/snippets/translate_v3_batch_translate_text.py @@ -36,15 +36,18 @@ def batch_translate_text( } gcs_destination = {"output_uri_prefix": output_uri} output_config = {"gcs_destination": gcs_destination} - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" # Supported language codes: https://cloud.google.com/translate/docs/language operation = client.batch_translate_text( - parent=parent, - source_language_code="en", - target_language_codes=["ja"], # Up to 10 language codes here. - input_configs=[input_configs_element], - output_config=output_config) + request={ + "parent": parent, + "source_language_code": "en", + "target_language_codes": ["ja"], # Up to 10 language codes here. + "input_configs": [input_configs_element], + "output_config": output_config + } + ) print(u"Waiting for operation to complete...") response = operation.result(timeout) diff --git a/samples/snippets/translate_v3_batch_translate_text_with_glossary.py b/samples/snippets/translate_v3_batch_translate_text_with_glossary.py index 97845e2a..e9c4a7c2 100644 --- a/samples/snippets/translate_v3_batch_translate_text_with_glossary.py +++ b/samples/snippets/translate_v3_batch_translate_text_with_glossary.py @@ -42,7 +42,7 @@ def batch_translate_text_with_glossary( gcs_destination = {"output_uri_prefix": output_uri} output_config = {"gcs_destination": gcs_destination} - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" # glossary is a custom dictionary Translation API uses # to translate the domain-specific terminology. @@ -50,19 +50,21 @@ def batch_translate_text_with_glossary( project_id, "us-central1", glossary_id # The location of the glossary ) - glossary_config = translate.types.TranslateTextGlossaryConfig( + glossary_config = translate.TranslateTextGlossaryConfig( glossary=glossary_path ) glossaries = {"ja": glossary_config} # target lang as key operation = client.batch_translate_text( - parent=parent, - source_language_code="en", - target_language_codes=["ja"], # Up to 10 language codes here. - input_configs=[input_configs_element], - glossaries=glossaries, - output_config=output_config, + request={ + "parent": parent, + "source_language_code": "en", + "target_language_codes": ["ja"], # Up to 10 language codes here. + "input_configs": [input_configs_element], + "glossaries": glossaries, + "output_config": output_config + } ) print(u"Waiting for operation to complete...") diff --git a/samples/snippets/translate_v3_create_glossary.py b/samples/snippets/translate_v3_create_glossary.py index 603cb4cc..2955acaa 100644 --- a/samples/snippets/translate_v3_create_glossary.py +++ b/samples/snippets/translate_v3_create_glossary.py @@ -47,7 +47,7 @@ def create_glossary( name=name, language_codes_set=language_codes_set, input_config=input_config ) - parent = client.location_path(project_id, location) + parent = f"projects/{project_id}/locations/{location}" # glossary is a custom dictionary Translation API uses # to translate the domain-specific terminology. operation = client.create_glossary(parent=parent, glossary=glossary) diff --git a/samples/snippets/translate_v3_delete_glossary.py b/samples/snippets/translate_v3_delete_glossary.py index e8acf76c..fb9f86af 100644 --- a/samples/snippets/translate_v3_delete_glossary.py +++ b/samples/snippets/translate_v3_delete_glossary.py @@ -24,9 +24,9 @@ def delete_glossary( """Delete a specific glossary based on the glossary ID.""" client = translate.TranslationServiceClient() - parent = client.glossary_path(project_id, "us-central1", glossary_id) + name = client.glossary_path(project_id, "us-central1", glossary_id) - operation = client.delete_glossary(parent) + operation = client.delete_glossary(name=name) result = operation.result(timeout) print("Deleted: {}".format(result.name)) diff --git a/samples/snippets/translate_v3_detect_language.py b/samples/snippets/translate_v3_detect_language.py index 759eb41a..9e92b607 100644 --- a/samples/snippets/translate_v3_detect_language.py +++ b/samples/snippets/translate_v3_detect_language.py @@ -21,7 +21,9 @@ def detect_language(project_id="YOUR_PROJECT_ID"): client = translate.TranslationServiceClient() - parent = client.location_path(project_id, "global") + location = "global" + + parent = f"projects/{project_id}/locations/{location}" # Detail on supported types can be found here: # https://cloud.google.com/translate/docs/supported-formats diff --git a/samples/snippets/translate_v3_get_glossary.py b/samples/snippets/translate_v3_get_glossary.py index 99753136..f4c2aaae 100644 --- a/samples/snippets/translate_v3_get_glossary.py +++ b/samples/snippets/translate_v3_get_glossary.py @@ -23,7 +23,7 @@ def get_glossary(project_id="YOUR_PROJECT_ID", glossary_id="YOUR_GLOSSARY_ID"): name = client.glossary_path(project_id, "us-central1", glossary_id) - response = client.get_glossary(name) + response = client.get_glossary(name=name) print(u"Glossary name: {}".format(response.name)) print(u"Entry count: {}".format(response.entry_count)) print(u"Input URI: {}".format(response.input_config.gcs_source.input_uri)) diff --git a/samples/snippets/translate_v3_get_supported_languages.py b/samples/snippets/translate_v3_get_supported_languages.py index 6e15458d..db779278 100644 --- a/samples/snippets/translate_v3_get_supported_languages.py +++ b/samples/snippets/translate_v3_get_supported_languages.py @@ -21,7 +21,7 @@ def get_supported_languages(project_id="YOUR_PROJECT_ID"): client = translate.TranslationServiceClient() - parent = client.location_path(project_id, "global") + parent = f"projects/{project_id}" # Supported language codes: https://cloud.google.com/translate/docs/languages response = client.get_supported_languages(parent=parent) diff --git a/samples/snippets/translate_v3_get_supported_languages_with_target.py b/samples/snippets/translate_v3_get_supported_languages_with_target.py index f71138b5..3a164dcb 100644 --- a/samples/snippets/translate_v3_get_supported_languages_with_target.py +++ b/samples/snippets/translate_v3_get_supported_languages_with_target.py @@ -20,7 +20,10 @@ def get_supported_languages_with_target(project_id="YOUR_PROJECT_ID"): """Listing supported languages with target language name.""" client = translate.TranslationServiceClient() - parent = client.location_path(project_id, "global") + + location = "global" + + parent = f"projects/{project_id}/locations/{location}" # Supported language codes: https://cloud.google.com/translate/docs/languages response = client.get_supported_languages( diff --git a/samples/snippets/translate_v3_list_glossary.py b/samples/snippets/translate_v3_list_glossary.py index 53e51d85..934194b4 100644 --- a/samples/snippets/translate_v3_list_glossary.py +++ b/samples/snippets/translate_v3_list_glossary.py @@ -21,10 +21,12 @@ def list_glossaries(project_id="YOUR_PROJECT_ID"): client = translate.TranslationServiceClient() - parent = client.location_path(project_id, "us-central1") + location = "us-central1" + + parent = f"projects/{project_id}/locations/{location}" # Iterate over all results - for glossary in client.list_glossaries(parent): + for glossary in client.list_glossaries(parent=parent): print("Name: {}".format(glossary.name)) print("Entry count: {}".format(glossary.entry_count)) print("Input uri: {}".format(glossary.input_config.gcs_source.input_uri)) diff --git a/samples/snippets/translate_v3_translate_text.py b/samples/snippets/translate_v3_translate_text.py index 086f775a..78a79b4e 100644 --- a/samples/snippets/translate_v3_translate_text.py +++ b/samples/snippets/translate_v3_translate_text.py @@ -21,17 +21,22 @@ def translate_text(text="YOUR_TEXT_TO_TRANSLATE", project_id="YOUR_PROJECT_ID"): client = translate.TranslationServiceClient() - parent = client.location_path(project_id, "global") + location = "global" + + parent = f"projects/{project_id}/locations/{location}" # Detail on supported types can be found here: # https://cloud.google.com/translate/docs/supported-formats response = client.translate_text( - parent=parent, - contents=[text], - mime_type="text/plain", # mime types: text/plain, text/html - source_language_code="en-US", - target_language_code="fr", + request={ + "parent": parent, + "contents": [text], + "mime_type": "text/plain", # mime types: text/plain, text/html + "source_language_code": "en-US", + "target_language_code": "fr" + } ) + # Display the translation for each input text provided for translation in response.translations: print(u"Translated text: {}".format(translation.translated_text)) diff --git a/samples/snippets/translate_v3_translate_text_with_glossary.py b/samples/snippets/translate_v3_translate_text_with_glossary.py index ca0eeacc..b62d5413 100644 --- a/samples/snippets/translate_v3_translate_text_with_glossary.py +++ b/samples/snippets/translate_v3_translate_text_with_glossary.py @@ -14,7 +14,7 @@ # [START translate_v3_translate_text_with_glossary] -from google.cloud import translate_v3 +from google.cloud import translate def translate_text_with_glossary( @@ -24,24 +24,28 @@ def translate_text_with_glossary( ): """Translates a given text using a glossary.""" - client = translate_v3.TranslationServiceClient() - parent = client.location_path(project_id, "us-central1") + client = translate.TranslationServiceClient() + location = "us-central1" + parent = f"projects/{project_id}/locations/{location}" glossary = client.glossary_path( project_id, "us-central1", glossary_id # The location of the glossary ) - glossary_config = translate_v3.types.TranslateTextGlossaryConfig( + glossary_config = translate.TranslateTextGlossaryConfig( glossary=glossary) # Supported language codes: https://cloud.google.com/translate/docs/languages response = client.translate_text( - contents=[text], - target_language_code="ja", - source_language_code="en", - parent=parent, - glossary_config=glossary_config, + request={ + "contents": [text], + "target_language_code": "ja", + "source_language_code": "en", + "parent": parent, + "glossary_config": glossary_config + } ) + print("Translated text: \n") for translation in response.glossary_translations: print(u"\t {}".format(translation.translated_text)) diff --git a/samples/snippets/translate_v3_translate_text_with_model.py b/samples/snippets/translate_v3_translate_text_with_model.py index 8a0b0bb7..44c92f96 100644 --- a/samples/snippets/translate_v3_translate_text_with_model.py +++ b/samples/snippets/translate_v3_translate_text_with_model.py @@ -26,19 +26,21 @@ def translate_text_with_model( client = translate.TranslationServiceClient() - parent = client.location_path(project_id, "us-central1") - model_path = "projects/{}/locations/{}/models/{}".format( - project_id, "us-central1", model_id - ) + location = "us-central1" + parent = f"projects/{project_id}/locations/{location}" + model_path = f"{parent}/models/{model_id}" # Supported language codes: https://cloud.google.com/translate/docs/languages response = client.translate_text( - contents=[text], - target_language_code="ja", - model=model_path, - source_language_code="en", - parent=parent, - mime_type="text/plain", # mime types: text/plain, text/html + request={ + "contents": [text], + "target_language_code": "ja", + "model": model_path, + "source_language_code": "en", + "parent": parent, + "mime_type": "text/plain", # mime types: text/plain, text/html + } + ) # Display the translation for each input text provided for translation in response.translations: diff --git a/synth.metadata b/synth.metadata index 71a579dd..48de54da 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,29 +4,29 @@ "git": { "name": ".", "remote": "git@github.com:danoscarmike/python-translate", - "sha": "0714f6de6f8574d519719324e0a6b1f2b75f8482" + "sha": "3e7b19c784c3cdcf0b6cf1d099f78643e8fd54ef" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "6a813acf535e4746fa4a135ce23547bb6425c26d", - "internalRef": "323472217" + "sha": "fbf9396664b766a08d92da9d4f31be019a847c39", + "internalRef": "324209019" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "5506723fef367557d83cf072d0c18020c049fcb8" + "sha": "39b527a39f5cd56d4882b3874fc08eed4756cebe" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "5506723fef367557d83cf072d0c18020c049fcb8" + "sha": "39b527a39f5cd56d4882b3874fc08eed4756cebe" } } ], diff --git a/synth.py b/synth.py index f4d0d864..1e8b3008 100644 --- a/synth.py +++ b/synth.py @@ -43,8 +43,18 @@ s.move(library / "google/cloud/translation", "google/cloud/translate") s.move(library / f"google/cloud/translation_{version}", f"google/cloud/translate_{version}") s.move(library / f"docs/translation_{version}", f"docs/translate_{version}") - s.move(library / "tests", f"tests/unit/gapic/translate_{version}") + s.move(library / f"tests/unit/gapic/translation_{version}", f"tests/unit/gapic/translate_{version}") + s.move(library / "scripts") +# google.cloud.translation -> google.cloud.translate +s.replace( + ["google/cloud/translate*/**/*.py", "docs/translate_v*/*"], + " google.cloud.translation", + " google.cloud.translate" +) +s.replace("tests/**/*.py", "google.cloud.translation", "google.cloud.translate") + +# TODO(danoscarmike): remove once upstream protos have been fixed # Escape underscores in gs:\\ URLs s.replace( "google/cloud/translate_v3*/types/translation_service.py", @@ -52,13 +62,6 @@ """a_b_c\_""" ) -# google.cloud.translation -> google.cloud.translate -s.replace( - ["google/cloud/translate*/**/*.py", "tests/**/*.py", "docs/translate_v*/*"], - "google.cloud.translation", - "google.cloud.translate" -) - # ---------------------------------------------------------------------------- # Add templated files # ---------------------------------------------------------------------------- @@ -68,6 +71,9 @@ ) s.move(templated_files, excludes=[".coveragerc"]) # microgenerator has a good .coveragerc file +# Correct namespace in noxfile +s.replace("noxfile.py", "google.cloud.translation", "google.cloud.translate") + # ---------------------------------------------------------------------------- # Samples templates # ---------------------------------------------------------------------------- diff --git a/test_utils/credentials.json.enc b/test_utils/credentials.json.enc deleted file mode 100644 index f073c7e4..00000000 --- a/test_utils/credentials.json.enc +++ /dev/null @@ -1,49 +0,0 @@ -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 diff --git a/test_utils/scripts/circleci/get_tagged_package.py b/test_utils/scripts/circleci/get_tagged_package.py deleted file mode 100644 index c148b9dc..00000000 --- a/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/test_utils/scripts/circleci/twine_upload.sh b/test_utils/scripts/circleci/twine_upload.sh deleted file mode 100755 index 23a4738e..00000000 --- a/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/test_utils/scripts/get_target_packages.py b/test_utils/scripts/get_target_packages.py deleted file mode 100644 index 1d51830c..00000000 --- a/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/test_utils/scripts/get_target_packages_kokoro.py b/test_utils/scripts/get_target_packages_kokoro.py deleted file mode 100644 index 27d3a0c9..00000000 --- a/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/test_utils/scripts/run_emulator.py b/test_utils/scripts/run_emulator.py deleted file mode 100644 index 287b0864..00000000 --- a/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/test_utils/scripts/update_docs.sh b/test_utils/scripts/update_docs.sh deleted file mode 100755 index 8cbab9f0..00000000 --- a/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/test_utils/setup.py b/test_utils/setup.py deleted file mode 100644 index 8e9222a7..00000000 --- a/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/test_utils/test_utils/__init__.py b/test_utils/test_utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test_utils/test_utils/imports.py b/test_utils/test_utils/imports.py deleted file mode 100644 index 5991af7f..00000000 --- a/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/test_utils/test_utils/retry.py b/test_utils/test_utils/retry.py deleted file mode 100644 index e61c001a..00000000 --- a/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/test_utils/test_utils/system.py b/test_utils/test_utils/system.py deleted file mode 100644 index 590dc62a..00000000 --- a/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/test_utils/test_utils/vpcsc_config.py b/test_utils/test_utils/vpcsc_config.py deleted file mode 100644 index 36b15d6b..00000000 --- a/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() diff --git a/tests/system.py b/tests/system.py index 975d3a22..5d555091 100644 --- a/tests/system.py +++ b/tests/system.py @@ -14,9 +14,11 @@ # limitations under the License. +import os import unittest from google.cloud import translate_v2 +from google.cloud import translate class Config(object): @@ -26,16 +28,20 @@ class Config(object): global state. """ - CLIENT = None + CLIENT_V2 = None + CLIENT_V3 = None + location = "global" + project_id = os.environ["GOOGLE_CLOUD_PROJECT"] def setUpModule(): - Config.CLIENT = translate_v2.Client() + Config.CLIENT_V2 = translate_v2.Client() + Config.CLIENT_V3 = translate.TranslationServiceClient() class TestTranslate(unittest.TestCase): def test_get_languages(self): - result = Config.CLIENT.get_languages() + result = Config.CLIENT_V2.get_languages() # There are **many** more than 10 languages. self.assertGreater(len(result), 10) @@ -46,8 +52,8 @@ def test_get_languages(self): self.assertEqual(lang_map["zu"], "Zulu") def test_detect_language(self): - values = ["takoy", u"fa\xe7ade", "s'il vous plait"] - detections = Config.CLIENT.detect_language(values) + values = ["takoy", "fa\xe7ade", "s'il vous plait"] + detections = Config.CLIENT_V2.detect_language(values) self.assertEqual(len(values), len(detections)) self.assertEqual(detections[0]["language"], "ru") self.assertEqual(detections[1]["language"], "fr") @@ -55,25 +61,72 @@ def test_detect_language(self): def test_translate(self): values = ["petnaest", "dek kvin", "Me llamo Jeff", "My name is Jeff"] - translations = Config.CLIENT.translate( + translations = Config.CLIENT_V2.translate( values, target_language="de", model="nmt" ) self.assertEqual(len(values), len(translations)) self.assertEqual(translations[0]["detectedSourceLanguage"].lower(), "hr") - self.assertEqual(translations[0]["translatedText"].lower(), u"fünfzehn") + self.assertEqual(translations[0]["translatedText"].lower(), "fünfzehn") self.assertEqual(translations[1]["detectedSourceLanguage"], "eo") - self.assertEqual(translations[1]["translatedText"].lower(), u"fünfzehn") + self.assertEqual(translations[1]["translatedText"].lower(), "fünfzehn") self.assertEqual(translations[2]["detectedSourceLanguage"], "es") es_translation = translations[2]["translatedText"].lower() self.assertTrue( - es_translation == u"ich heiße jeff" - or es_translation == u"mein name ist jeff" + es_translation == "ich heiße jeff" or es_translation == "mein name ist jeff" ) self.assertEqual(translations[3]["detectedSourceLanguage"], "en") self.assertEqual( translations[3]["translatedText"].lower(), "mein name ist jeff" ) + + def test_get_languages_v3(self): + parent = f"projects/{Config.project_id}/locations/{Config.location}" + result = Config.CLIENT_V3.get_supported_languages(parent=parent) + languages = [lang.language_code for lang in result.languages] + self.assertGreater( + len(languages), 10 + ) # There are **many** more than 10 languages. + self.assertIn("zu", languages) # Zulu is supported + self.assertIn("fr", languages) # English is supported + self.assertIn("ga", languages) # Irish is supported + + def test_detect_language_v3(self): + parent = f"projects/{Config.project_id}/locations/{Config.location}" + value = "s'il vous plait" + response = Config.CLIENT_V3.detect_language( + request={"parent": parent, "content": value, "mime_type": "text/plain"} + ) + languages = [detection.language_code for detection in response.languages] + self.assertEqual(languages[0], "fr") + + def test_translate_v3(self): + parent = f"projects/{Config.project_id}/locations/{Config.location}" + values = ["petnaest", "dek kvin", "Me llamo Jeff", "My name is Jeff"] + translations = Config.CLIENT_V3.translate_text( + parent=parent, contents=values, target_language_code="de" + ) + + results_map = { + result.detected_language_code: result.translated_text + for result in translations.translations + } + self.assertEqual(len(values), len(results_map)) + + self.assertIn("hr", results_map.keys()) + self.assertIn("eo", results_map.keys()) + self.assertIn("es", results_map.keys()) + self.assertIn("en", results_map.keys()) + + self.assertEqual(results_map["hr"].lower(), "fünfzehn") + self.assertEqual(results_map["eo"].lower(), "fünfzehn") + + es_translation = results_map["es"].lower() + self.assertTrue( + es_translation == "ich heiße jeff" or es_translation == "mein name ist jeff" + ) + + self.assertEqual(results_map["en"].lower(), "mein name ist jeff") diff --git a/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/__init__.py b/tests/unit/gapic/translate_v3/__init__.py similarity index 100% rename from tests/unit/gapic/translate_v3/unit/gapic/translation_v3/__init__.py rename to tests/unit/gapic/translate_v3/__init__.py diff --git a/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/test_translation_service.py b/tests/unit/gapic/translate_v3/test_translation_service.py similarity index 97% rename from tests/unit/gapic/translate_v3/unit/gapic/translation_v3/test_translation_service.py rename to tests/unit/gapic/translate_v3/test_translation_service.py index a1fc3c3a..556a93a2 100644 --- a/tests/unit/gapic/translate_v3/unit/gapic/translation_v3/test_translation_service.py +++ b/tests/unit/gapic/translate_v3/test_translation_service.py @@ -362,14 +362,16 @@ def test_translation_service_client_client_options_from_dict(): ) -def test_translate_text(transport: str = "grpc"): +def test_translate_text( + transport: str = "grpc", request_type=translation_service.TranslateTextRequest +): client = TranslationServiceClient( 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 = translation_service.TranslateTextRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.translate_text), "__call__") as call: @@ -382,12 +384,16 @@ def test_translate_text(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.TranslateTextRequest() # Establish that the response is the type that we expect. assert isinstance(response, translation_service.TranslateTextResponse) +def test_translate_text_from_dict(): + test_translate_text(request_type=dict) + + @pytest.mark.asyncio async def test_translate_text_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -593,14 +599,16 @@ async def test_translate_text_flattened_error_async(): ) -def test_detect_language(transport: str = "grpc"): +def test_detect_language( + transport: str = "grpc", request_type=translation_service.DetectLanguageRequest +): client = TranslationServiceClient( 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 = translation_service.DetectLanguageRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.detect_language), "__call__") as call: @@ -613,12 +621,16 @@ def test_detect_language(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.DetectLanguageRequest() # Establish that the response is the type that we expect. assert isinstance(response, translation_service.DetectLanguageResponse) +def test_detect_language_from_dict(): + test_detect_language(request_type=dict) + + @pytest.mark.asyncio async def test_detect_language_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -808,14 +820,17 @@ async def test_detect_language_flattened_error_async(): ) -def test_get_supported_languages(transport: str = "grpc"): +def test_get_supported_languages( + transport: str = "grpc", + request_type=translation_service.GetSupportedLanguagesRequest, +): client = TranslationServiceClient( 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 = translation_service.GetSupportedLanguagesRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -830,12 +845,16 @@ def test_get_supported_languages(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.GetSupportedLanguagesRequest() # Establish that the response is the type that we expect. assert isinstance(response, translation_service.SupportedLanguages) +def test_get_supported_languages_from_dict(): + test_get_supported_languages(request_type=dict) + + @pytest.mark.asyncio async def test_get_supported_languages_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1021,14 +1040,16 @@ async def test_get_supported_languages_flattened_error_async(): ) -def test_batch_translate_text(transport: str = "grpc"): +def test_batch_translate_text( + transport: str = "grpc", request_type=translation_service.BatchTranslateTextRequest +): client = TranslationServiceClient( 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 = translation_service.BatchTranslateTextRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -1043,12 +1064,16 @@ def test_batch_translate_text(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.BatchTranslateTextRequest() # Establish that the response is the type that we expect. assert isinstance(response, future.Future) +def test_batch_translate_text_from_dict(): + test_batch_translate_text(request_type=dict) + + @pytest.mark.asyncio async def test_batch_translate_text_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1137,14 +1162,16 @@ async def test_batch_translate_text_field_headers_async(): assert ("x-goog-request-params", "parent=parent/value",) in kw["metadata"] -def test_create_glossary(transport: str = "grpc"): +def test_create_glossary( + transport: str = "grpc", request_type=translation_service.CreateGlossaryRequest +): client = TranslationServiceClient( 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 = translation_service.CreateGlossaryRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.create_glossary), "__call__") as call: @@ -1157,12 +1184,16 @@ def test_create_glossary(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.CreateGlossaryRequest() # Establish that the response is the type that we expect. assert isinstance(response, future.Future) +def test_create_glossary_from_dict(): + test_create_glossary(request_type=dict) + + @pytest.mark.asyncio async def test_create_glossary_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1336,14 +1367,16 @@ async def test_create_glossary_flattened_error_async(): ) -def test_list_glossaries(transport: str = "grpc"): +def test_list_glossaries( + transport: str = "grpc", request_type=translation_service.ListGlossariesRequest +): client = TranslationServiceClient( 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 = translation_service.ListGlossariesRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: @@ -1358,7 +1391,7 @@ def test_list_glossaries(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.ListGlossariesRequest() # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListGlossariesPager) @@ -1366,6 +1399,10 @@ def test_list_glossaries(transport: str = "grpc"): assert response.next_page_token == "next_page_token_value" +def test_list_glossaries_from_dict(): + test_list_glossaries(request_type=dict) + + @pytest.mark.asyncio async def test_list_glossaries_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1695,14 +1732,16 @@ async def test_list_glossaries_async_pages(): assert page.raw_page.next_page_token == token -def test_get_glossary(transport: str = "grpc"): +def test_get_glossary( + transport: str = "grpc", request_type=translation_service.GetGlossaryRequest +): client = TranslationServiceClient( 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 = translation_service.GetGlossaryRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.get_glossary), "__call__") as call: @@ -1721,7 +1760,7 @@ def test_get_glossary(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.GetGlossaryRequest() # Establish that the response is the type that we expect. assert isinstance(response, translation_service.Glossary) @@ -1731,6 +1770,10 @@ def test_get_glossary(transport: str = "grpc"): assert response.entry_count == 1210 +def test_get_glossary_from_dict(): + test_get_glossary(request_type=dict) + + @pytest.mark.asyncio async def test_get_glossary_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1894,14 +1937,16 @@ async def test_get_glossary_flattened_error_async(): ) -def test_delete_glossary(transport: str = "grpc"): +def test_delete_glossary( + transport: str = "grpc", request_type=translation_service.DeleteGlossaryRequest +): client = TranslationServiceClient( 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 = translation_service.DeleteGlossaryRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.delete_glossary), "__call__") as call: @@ -1914,12 +1959,16 @@ def test_delete_glossary(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.DeleteGlossaryRequest() # Establish that the response is the type that we expect. assert isinstance(response, future.Future) +def test_delete_glossary_from_dict(): + test_delete_glossary(request_type=dict) + + @pytest.mark.asyncio async def test_delete_glossary_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( diff --git a/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/__init__.py b/tests/unit/gapic/translate_v3beta1/__init__.py similarity index 100% rename from tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/__init__.py rename to tests/unit/gapic/translate_v3beta1/__init__.py diff --git a/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/test_translation_service.py b/tests/unit/gapic/translate_v3beta1/test_translation_service.py similarity index 97% rename from tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/test_translation_service.py rename to tests/unit/gapic/translate_v3beta1/test_translation_service.py index 559d9dd5..1dd49ee1 100644 --- a/tests/unit/gapic/translate_v3beta1/unit/gapic/translation_v3beta1/test_translation_service.py +++ b/tests/unit/gapic/translate_v3beta1/test_translation_service.py @@ -362,14 +362,16 @@ def test_translation_service_client_client_options_from_dict(): ) -def test_translate_text(transport: str = "grpc"): +def test_translate_text( + transport: str = "grpc", request_type=translation_service.TranslateTextRequest +): client = TranslationServiceClient( 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 = translation_service.TranslateTextRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.translate_text), "__call__") as call: @@ -382,12 +384,16 @@ def test_translate_text(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.TranslateTextRequest() # Establish that the response is the type that we expect. assert isinstance(response, translation_service.TranslateTextResponse) +def test_translate_text_from_dict(): + test_translate_text(request_type=dict) + + @pytest.mark.asyncio async def test_translate_text_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -474,14 +480,16 @@ async def test_translate_text_field_headers_async(): assert ("x-goog-request-params", "parent=parent/value",) in kw["metadata"] -def test_detect_language(transport: str = "grpc"): +def test_detect_language( + transport: str = "grpc", request_type=translation_service.DetectLanguageRequest +): client = TranslationServiceClient( 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 = translation_service.DetectLanguageRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.detect_language), "__call__") as call: @@ -494,12 +502,16 @@ def test_detect_language(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.DetectLanguageRequest() # Establish that the response is the type that we expect. assert isinstance(response, translation_service.DetectLanguageResponse) +def test_detect_language_from_dict(): + test_detect_language(request_type=dict) + + @pytest.mark.asyncio async def test_detect_language_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -677,14 +689,17 @@ async def test_detect_language_flattened_error_async(): ) -def test_get_supported_languages(transport: str = "grpc"): +def test_get_supported_languages( + transport: str = "grpc", + request_type=translation_service.GetSupportedLanguagesRequest, +): client = TranslationServiceClient( 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 = translation_service.GetSupportedLanguagesRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -699,12 +714,16 @@ def test_get_supported_languages(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.GetSupportedLanguagesRequest() # Establish that the response is the type that we expect. assert isinstance(response, translation_service.SupportedLanguages) +def test_get_supported_languages_from_dict(): + test_get_supported_languages(request_type=dict) + + @pytest.mark.asyncio async def test_get_supported_languages_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -890,14 +909,16 @@ async def test_get_supported_languages_flattened_error_async(): ) -def test_batch_translate_text(transport: str = "grpc"): +def test_batch_translate_text( + transport: str = "grpc", request_type=translation_service.BatchTranslateTextRequest +): client = TranslationServiceClient( 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 = translation_service.BatchTranslateTextRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( @@ -912,12 +933,16 @@ def test_batch_translate_text(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.BatchTranslateTextRequest() # Establish that the response is the type that we expect. assert isinstance(response, future.Future) +def test_batch_translate_text_from_dict(): + test_batch_translate_text(request_type=dict) + + @pytest.mark.asyncio async def test_batch_translate_text_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1006,14 +1031,16 @@ async def test_batch_translate_text_field_headers_async(): assert ("x-goog-request-params", "parent=parent/value",) in kw["metadata"] -def test_create_glossary(transport: str = "grpc"): +def test_create_glossary( + transport: str = "grpc", request_type=translation_service.CreateGlossaryRequest +): client = TranslationServiceClient( 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 = translation_service.CreateGlossaryRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.create_glossary), "__call__") as call: @@ -1026,12 +1053,16 @@ def test_create_glossary(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.CreateGlossaryRequest() # Establish that the response is the type that we expect. assert isinstance(response, future.Future) +def test_create_glossary_from_dict(): + test_create_glossary(request_type=dict) + + @pytest.mark.asyncio async def test_create_glossary_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1205,14 +1236,16 @@ async def test_create_glossary_flattened_error_async(): ) -def test_list_glossaries(transport: str = "grpc"): +def test_list_glossaries( + transport: str = "grpc", request_type=translation_service.ListGlossariesRequest +): client = TranslationServiceClient( 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 = translation_service.ListGlossariesRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.list_glossaries), "__call__") as call: @@ -1227,7 +1260,7 @@ def test_list_glossaries(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.ListGlossariesRequest() # Establish that the response is the type that we expect. assert isinstance(response, pagers.ListGlossariesPager) @@ -1235,6 +1268,10 @@ def test_list_glossaries(transport: str = "grpc"): assert response.next_page_token == "next_page_token_value" +def test_list_glossaries_from_dict(): + test_list_glossaries(request_type=dict) + + @pytest.mark.asyncio async def test_list_glossaries_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1576,14 +1613,16 @@ async def test_list_glossaries_async_pages(): assert page.raw_page.next_page_token == token -def test_get_glossary(transport: str = "grpc"): +def test_get_glossary( + transport: str = "grpc", request_type=translation_service.GetGlossaryRequest +): client = TranslationServiceClient( 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 = translation_service.GetGlossaryRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.get_glossary), "__call__") as call: @@ -1602,7 +1641,7 @@ def test_get_glossary(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.GetGlossaryRequest() # Establish that the response is the type that we expect. assert isinstance(response, translation_service.Glossary) @@ -1612,6 +1651,10 @@ def test_get_glossary(transport: str = "grpc"): assert response.entry_count == 1210 +def test_get_glossary_from_dict(): + test_get_glossary(request_type=dict) + + @pytest.mark.asyncio async def test_get_glossary_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( @@ -1775,14 +1818,16 @@ async def test_get_glossary_flattened_error_async(): ) -def test_delete_glossary(transport: str = "grpc"): +def test_delete_glossary( + transport: str = "grpc", request_type=translation_service.DeleteGlossaryRequest +): client = TranslationServiceClient( 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 = translation_service.DeleteGlossaryRequest() + request = request_type() # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object(type(client._transport.delete_glossary), "__call__") as call: @@ -1795,12 +1840,16 @@ def test_delete_glossary(transport: str = "grpc"): assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == request + assert args[0] == translation_service.DeleteGlossaryRequest() # Establish that the response is the type that we expect. assert isinstance(response, future.Future) +def test_delete_glossary_from_dict(): + test_delete_glossary(request_type=dict) + + @pytest.mark.asyncio async def test_delete_glossary_async(transport: str = "grpc_asyncio"): client = TranslationServiceAsyncClient( From 67f317e5e0d4b82664f159d661983cfe59dbb9e7 Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Fri, 31 Jul 2020 13:24:11 -0700 Subject: [PATCH 89/94] docs: readmegen updates --- samples/snippets/README.rst | 29 ++++--------------- samples/snippets/hybrid_glossaries/README.rst | 23 ++++----------- 2 files changed, 10 insertions(+), 42 deletions(-) diff --git a/samples/snippets/README.rst b/samples/snippets/README.rst index 559b57e2..c94428ba 100644 --- a/samples/snippets/README.rst +++ b/samples/snippets/README.rst @@ -1,4 +1,3 @@ - .. This file is automatically generated. Do not edit this file directly. Google Translation API Python Samples @@ -16,11 +15,13 @@ This directory contains samples for Google Translation API. With `Google Transla .. _Google Translation API: https://cloud.google.com/translate/docs + + + Setup ------------------------------------------------------------------------------- - Authentication ++++++++++++++ @@ -31,9 +32,6 @@ credentials for applications. .. _Authentication Getting Started Guide: https://cloud.google.com/docs/authentication/getting-started - - - Install Dependencies ++++++++++++++++++++ @@ -48,7 +46,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 2.7 and 3.4+. .. code-block:: bash @@ -64,15 +62,9 @@ Install Dependencies .. _pip: https://pip.pypa.io/ .. _virtualenv: https://virtualenv.pypa.io/ - - - - - Samples ------------------------------------------------------------------------------- - Quickstart +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -89,8 +81,6 @@ To run this sample: $ python quickstart.py - - Snippets +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -106,7 +96,6 @@ To run this sample: $ python snippets.py - usage: snippets.py [-h] {detect-language,list-languages,list-languages-with-target,translate-text} ... @@ -137,8 +126,6 @@ To run this sample: - - Beta Snippets +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -154,7 +141,6 @@ To run this sample: $ python beta_snippets.py - usage: beta_snippets.py [-h] {translate-text,batch-translate-text,detect-language,list-languages,list-languages-with-target,create-glossary,get-glossary,list-glossaries,delete-glossary,translate-with-glossary} ... @@ -179,10 +165,6 @@ To run this sample: - - - - The client library ------------------------------------------------------------------------------- @@ -198,5 +180,4 @@ to `browse the source`_ and `report issues`_. https://github.com/GoogleCloudPlatform/google-cloud-python/issues - -.. _Google Cloud SDK: https://cloud.google.com/sdk/ +.. _Google Cloud SDK: https://cloud.google.com/sdk/ \ No newline at end of file diff --git a/samples/snippets/hybrid_glossaries/README.rst b/samples/snippets/hybrid_glossaries/README.rst index e68b8114..61fdc27f 100644 --- a/samples/snippets/hybrid_glossaries/README.rst +++ b/samples/snippets/hybrid_glossaries/README.rst @@ -1,4 +1,3 @@ - .. This file is automatically generated. Do not edit this file directly. Google Translation API Python Samples @@ -16,11 +15,13 @@ This directory contains samples for Google Translation API. With `Google Transla .. _Google Translation API: https://cloud.google.com/translate/docs + + + Setup ------------------------------------------------------------------------------- - Authentication ++++++++++++++ @@ -31,9 +32,6 @@ credentials for applications. .. _Authentication Getting Started Guide: https://cloud.google.com/docs/authentication/getting-started - - - Install Dependencies ++++++++++++++++++++ @@ -48,7 +46,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 2.7 and 3.4+. .. code-block:: bash @@ -64,15 +62,9 @@ Install Dependencies .. _pip: https://pip.pypa.io/ .. _virtualenv: https://virtualenv.pypa.io/ - - - - - Samples ------------------------------------------------------------------------------- - Using glossaries with vision and text-to-speech +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -91,10 +83,6 @@ To run this sample: - - - - The client library ------------------------------------------------------------------------------- @@ -110,5 +98,4 @@ to `browse the source`_ and `report issues`_. https://github.com/GoogleCloudPlatform/google-cloud-python/issues - -.. _Google Cloud SDK: https://cloud.google.com/sdk/ +.. _Google Cloud SDK: https://cloud.google.com/sdk/ \ No newline at end of file From 063306408e4c4bf67d2356720af2acc2e888c132 Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Fri, 31 Jul 2020 15:50:36 -0700 Subject: [PATCH 90/94] chore: add build config for docs-presubmit --- .kokoro/docs/docs-presubmit.cfg | 1 + 1 file changed, 1 insertion(+) create mode 100644 .kokoro/docs/docs-presubmit.cfg diff --git a/.kokoro/docs/docs-presubmit.cfg b/.kokoro/docs/docs-presubmit.cfg new file mode 100644 index 00000000..8f43917d --- /dev/null +++ b/.kokoro/docs/docs-presubmit.cfg @@ -0,0 +1 @@ +# Format: //devtools/kokoro/config/proto/build.proto \ No newline at end of file From d3f4bfd1a1ab92509e1422fbf2d2ed54f0bef14b Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Mon, 3 Aug 2020 12:42:31 -0700 Subject: [PATCH 91/94] chore: rm protos --- .../proto/translation_service_pb2.py | 4050 ----------------- .../proto/translation_service_pb2.py | 4042 ---------------- 2 files changed, 8092 deletions(-) delete mode 100644 google/cloud/translate_v3/proto/translation_service_pb2.py delete mode 100644 google/cloud/translate_v3beta1/proto/translation_service_pb2.py diff --git a/google/cloud/translate_v3/proto/translation_service_pb2.py b/google/cloud/translate_v3/proto/translation_service_pb2.py deleted file mode 100644 index 3ca7286d..00000000 --- a/google/cloud/translate_v3/proto/translation_service_pb2.py +++ /dev/null @@ -1,4050 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/translate_v3/proto/translation_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.longrunning import ( - operations_pb2 as google_dot_longrunning_dot_operations__pb2, -) -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="google/cloud/translate_v3/proto/translation_service.proto", - package="google.cloud.translation.v3", - syntax="proto3", - serialized_options=b"\n\035com.google.cloud.translate.v3B\027TranslationServiceProtoP\001ZBgoogle.golang.org/genproto/googleapis/cloud/translate/v3;translate\370\001\001\252\002\031Google.Cloud.Translate.V3\312\002\031Google\\Cloud\\Translate\\V3\352\002\034Google::Cloud::Translate::V3", - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n9google/cloud/translate_v3/proto/translation_service.proto\x12\x1bgoogle.cloud.translation.v3\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a#google/longrunning/operations.proto\x1a\x1fgoogle/protobuf/timestamp.proto"N\n\x1bTranslateTextGlossaryConfig\x12\x15\n\x08glossary\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x18\n\x0bignore_case\x18\x02 \x01(\x08\x42\x03\xe0\x41\x01"\xb5\x03\n\x14TranslateTextRequest\x12\x15\n\x08\x63ontents\x18\x01 \x03(\tB\x03\xe0\x41\x02\x12\x16\n\tmime_type\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12!\n\x14source_language_code\x18\x04 \x01(\tB\x03\xe0\x41\x01\x12!\n\x14target_language_code\x18\x05 \x01(\tB\x03\xe0\x41\x02\x12\x39\n\x06parent\x18\x08 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x12\n\x05model\x18\x06 \x01(\tB\x03\xe0\x41\x01\x12V\n\x0fglossary_config\x18\x07 \x01(\x0b\x32\x38.google.cloud.translation.v3.TranslateTextGlossaryConfigB\x03\xe0\x41\x01\x12R\n\x06labels\x18\n \x03(\x0b\x32=.google.cloud.translation.v3.TranslateTextRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\xa0\x01\n\x15TranslateTextResponse\x12>\n\x0ctranslations\x18\x01 \x03(\x0b\x32(.google.cloud.translation.v3.Translation\x12G\n\x15glossary_translations\x18\x03 \x03(\x0b\x32(.google.cloud.translation.v3.Translation"\xa8\x01\n\x0bTranslation\x12\x17\n\x0ftranslated_text\x18\x01 \x01(\t\x12\r\n\x05model\x18\x02 \x01(\t\x12\x1e\n\x16\x64\x65tected_language_code\x18\x04 \x01(\t\x12Q\n\x0fglossary_config\x18\x03 \x01(\x0b\x32\x38.google.cloud.translation.v3.TranslateTextGlossaryConfig"\x9f\x02\n\x15\x44\x65tectLanguageRequest\x12\x39\n\x06parent\x18\x05 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x12\n\x05model\x18\x04 \x01(\tB\x03\xe0\x41\x01\x12\x11\n\x07\x63ontent\x18\x01 \x01(\tH\x00\x12\x16\n\tmime_type\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12S\n\x06labels\x18\x06 \x03(\x0b\x32>.google.cloud.translation.v3.DetectLanguageRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06source"=\n\x10\x44\x65tectedLanguage\x12\x15\n\rlanguage_code\x18\x01 \x01(\t\x12\x12\n\nconfidence\x18\x02 \x01(\x02"Z\n\x16\x44\x65tectLanguageResponse\x12@\n\tlanguages\x18\x01 \x03(\x0b\x32-.google.cloud.translation.v3.DetectedLanguage"\x91\x01\n\x1cGetSupportedLanguagesRequest\x12\x39\n\x06parent\x18\x03 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12"\n\x15\x64isplay_language_code\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12\x12\n\x05model\x18\x02 \x01(\tB\x03\xe0\x41\x01"W\n\x12SupportedLanguages\x12\x41\n\tlanguages\x18\x01 \x03(\x0b\x32..google.cloud.translation.v3.SupportedLanguage"p\n\x11SupportedLanguage\x12\x15\n\rlanguage_code\x18\x01 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x02 \x01(\t\x12\x16\n\x0esupport_source\x18\x03 \x01(\x08\x12\x16\n\x0esupport_target\x18\x04 \x01(\x08"\x1e\n\tGcsSource\x12\x11\n\tinput_uri\x18\x01 \x01(\t"m\n\x0bInputConfig\x12\x16\n\tmime_type\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12<\n\ngcs_source\x18\x02 \x01(\x0b\x32&.google.cloud.translation.v3.GcsSourceH\x00\x42\x08\n\x06source"+\n\x0eGcsDestination\x12\x19\n\x11output_uri_prefix\x18\x01 \x01(\t"e\n\x0cOutputConfig\x12\x46\n\x0fgcs_destination\x18\x01 \x01(\x0b\x32+.google.cloud.translation.v3.GcsDestinationH\x00\x42\r\n\x0b\x64\x65stination"\x88\x06\n\x19\x42\x61tchTranslateTextRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12!\n\x14source_language_code\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12"\n\x15target_language_codes\x18\x03 \x03(\tB\x03\xe0\x41\x02\x12W\n\x06models\x18\x04 \x03(\x0b\x32\x42.google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntryB\x03\xe0\x41\x01\x12\x44\n\rinput_configs\x18\x05 \x03(\x0b\x32(.google.cloud.translation.v3.InputConfigB\x03\xe0\x41\x02\x12\x45\n\routput_config\x18\x06 \x01(\x0b\x32).google.cloud.translation.v3.OutputConfigB\x03\xe0\x41\x02\x12_\n\nglossaries\x18\x07 \x03(\x0b\x32\x46.google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntryB\x03\xe0\x41\x01\x12W\n\x06labels\x18\t \x03(\x0b\x32\x42.google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bModelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1ak\n\x0fGlossariesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12G\n\x05value\x18\x02 \x01(\x0b\x32\x38.google.cloud.translation.v3.TranslateTextGlossaryConfig:\x02\x38\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\xce\x02\n\x16\x42\x61tchTranslateMetadata\x12H\n\x05state\x18\x01 \x01(\x0e\x32\x39.google.cloud.translation.v3.BatchTranslateMetadata.State\x12\x1d\n\x15translated_characters\x18\x02 \x01(\x03\x12\x19\n\x11\x66\x61iled_characters\x18\x03 \x01(\x03\x12\x18\n\x10total_characters\x18\x04 \x01(\x03\x12/\n\x0bsubmit_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\xcb\x01\n\x16\x42\x61tchTranslateResponse\x12\x18\n\x10total_characters\x18\x01 \x01(\x03\x12\x1d\n\x15translated_characters\x18\x02 \x01(\x03\x12\x19\n\x11\x66\x61iled_characters\x18\x03 \x01(\x03\x12/\n\x0bsubmit_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"]\n\x13GlossaryInputConfig\x12<\n\ngcs_source\x18\x01 \x01(\x0b\x32&.google.cloud.translation.v3.GcsSourceH\x00\x42\x08\n\x06source"\xfa\x04\n\x08Glossary\x12\x0c\n\x04name\x18\x01 \x01(\t\x12O\n\rlanguage_pair\x18\x03 \x01(\x0b\x32\x36.google.cloud.translation.v3.Glossary.LanguageCodePairH\x00\x12T\n\x12language_codes_set\x18\x04 \x01(\x0b\x32\x36.google.cloud.translation.v3.Glossary.LanguageCodesSetH\x00\x12\x46\n\x0cinput_config\x18\x05 \x01(\x0b\x32\x30.google.cloud.translation.v3.GlossaryInputConfig\x12\x18\n\x0b\x65ntry_count\x18\x06 \x01(\x05\x42\x03\xe0\x41\x03\x12\x34\n\x0bsubmit_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x31\n\x08\x65nd_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x1aN\n\x10LanguageCodePair\x12\x1c\n\x14source_language_code\x18\x01 \x01(\t\x12\x1c\n\x14target_language_code\x18\x02 \x01(\t\x1a*\n\x10LanguageCodesSet\x12\x16\n\x0elanguage_codes\x18\x01 \x03(\t:e\xea\x41\x62\n!translate.googleapis.com/Glossary\x12=projects/{project}/locations/{location}/glossaries/{glossary}B\x0b\n\tlanguages"\x90\x01\n\x15\x43reateGlossaryRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12<\n\x08glossary\x18\x02 \x01(\x0b\x32%.google.cloud.translation.v3.GlossaryB\x03\xe0\x41\x02"M\n\x12GetGlossaryRequest\x12\x37\n\x04name\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!translate.googleapis.com/Glossary"P\n\x15\x44\x65leteGlossaryRequest\x12\x37\n\x04name\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!translate.googleapis.com/Glossary"\x98\x01\n\x15ListGlossariesRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x16\n\tpage_size\x18\x02 \x01(\x05\x42\x03\xe0\x41\x01\x12\x17\n\npage_token\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12\x13\n\x06\x66ilter\x18\x04 \x01(\tB\x03\xe0\x41\x01"l\n\x16ListGlossariesResponse\x12\x39\n\nglossaries\x18\x01 \x03(\x0b\x32%.google.cloud.translation.v3.Glossary\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t"\x88\x02\n\x16\x43reateGlossaryMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12H\n\x05state\x18\x02 \x01(\x0e\x32\x39.google.cloud.translation.v3.CreateGlossaryMetadata.State\x12/\n\x0bsubmit_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\x88\x02\n\x16\x44\x65leteGlossaryMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12H\n\x05state\x18\x02 \x01(\x0e\x32\x39.google.cloud.translation.v3.DeleteGlossaryMetadata.State\x12/\n\x0bsubmit_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\x85\x01\n\x16\x44\x65leteGlossaryResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\x0bsubmit_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp2\x8e\x10\n\x12TranslationService\x12\xd4\x02\n\rTranslateText\x12\x31.google.cloud.translation.v3.TranslateTextRequest\x1a\x32.google.cloud.translation.v3.TranslateTextResponse"\xdb\x01\x82\xd3\xe4\x93\x02\x62"1/v3/{parent=projects/*/locations/*}:translateText:\x01*Z*"%/v3/{parent=projects/*}:translateText:\x01*\xda\x41$parent,target_language_code,contents\xda\x41Iparent,model,mime_type,source_language_code,target_language_code,contents\x12\x87\x02\n\x0e\x44\x65tectLanguage\x12\x32.google.cloud.translation.v3.DetectLanguageRequest\x1a\x33.google.cloud.translation.v3.DetectLanguageResponse"\x8b\x01\x82\xd3\xe4\x93\x02\x64"2/v3/{parent=projects/*/locations/*}:detectLanguage:\x01*Z+"&/v3/{parent=projects/*}:detectLanguage:\x01*\xda\x41\x1eparent,model,mime_type,content\x12\x97\x02\n\x15GetSupportedLanguages\x12\x39.google.cloud.translation.v3.GetSupportedLanguagesRequest\x1a/.google.cloud.translation.v3.SupportedLanguages"\x91\x01\x82\xd3\xe4\x93\x02\x66\x12\x36/v3/{parent=projects/*/locations/*}/supportedLanguagesZ,\x12*/v3/{parent=projects/*}/supportedLanguages\xda\x41"parent,model,display_language_code\x12\xe1\x01\n\x12\x42\x61tchTranslateText\x12\x36.google.cloud.translation.v3.BatchTranslateTextRequest\x1a\x1d.google.longrunning.Operation"t\x82\xd3\xe4\x93\x02;"6/v3/{parent=projects/*/locations/*}:batchTranslateText:\x01*\xca\x41\x30\n\x16\x42\x61tchTranslateResponse\x12\x16\x42\x61tchTranslateMetadata\x12\xdc\x01\n\x0e\x43reateGlossary\x12\x32.google.cloud.translation.v3.CreateGlossaryRequest\x1a\x1d.google.longrunning.Operation"w\x82\xd3\xe4\x93\x02:"./v3/{parent=projects/*/locations/*}/glossaries:\x08glossary\xda\x41\x0fparent,glossary\xca\x41"\n\x08Glossary\x12\x16\x43reateGlossaryMetadata\x12\xba\x01\n\x0eListGlossaries\x12\x32.google.cloud.translation.v3.ListGlossariesRequest\x1a\x33.google.cloud.translation.v3.ListGlossariesResponse"?\x82\xd3\xe4\x93\x02\x30\x12./v3/{parent=projects/*/locations/*}/glossaries\xda\x41\x06parent\x12\xa4\x01\n\x0bGetGlossary\x12/.google.cloud.translation.v3.GetGlossaryRequest\x1a%.google.cloud.translation.v3.Glossary"=\x82\xd3\xe4\x93\x02\x30\x12./v3/{name=projects/*/locations/*/glossaries/*}\xda\x41\x04name\x12\xd5\x01\n\x0e\x44\x65leteGlossary\x12\x32.google.cloud.translation.v3.DeleteGlossaryRequest\x1a\x1d.google.longrunning.Operation"p\x82\xd3\xe4\x93\x02\x30*./v3/{name=projects/*/locations/*/glossaries/*}\xda\x41\x04name\xca\x41\x30\n\x16\x44\x65leteGlossaryResponse\x12\x16\x44\x65leteGlossaryMetadata\x1a~\xca\x41\x18translate.googleapis.com\xd2\x41`https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translationB\xd8\x01\n\x1d\x63om.google.cloud.translate.v3B\x17TranslationServiceProtoP\x01ZBgoogle.golang.org/genproto/googleapis/cloud/translate/v3;translate\xf8\x01\x01\xaa\x02\x19Google.Cloud.Translate.V3\xca\x02\x19Google\\Cloud\\Translate\\V3\xea\x02\x1cGoogle::Cloud::Translate::V3b\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_longrunning_dot_operations__pb2.DESCRIPTOR, - google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, - ], -) - - -_BATCHTRANSLATEMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3229, - serialized_end=3330, -) -_sym_db.RegisterEnumDescriptor(_BATCHTRANSLATEMETADATA_STATE) - -_CREATEGLOSSARYMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3229, - serialized_end=3330, -) -_sym_db.RegisterEnumDescriptor(_CREATEGLOSSARYMETADATA_STATE) - -_DELETEGLOSSARYMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3229, - serialized_end=3330, -) -_sym_db.RegisterEnumDescriptor(_DELETEGLOSSARYMETADATA_STATE) - - -_TRANSLATETEXTGLOSSARYCONFIG = _descriptor.Descriptor( - name="TranslateTextGlossaryConfig", - full_name="google.cloud.translation.v3.TranslateTextGlossaryConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="glossary", - full_name="google.cloud.translation.v3.TranslateTextGlossaryConfig.glossary", - 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", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="ignore_case", - full_name="google.cloud.translation.v3.TranslateTextGlossaryConfig.ignore_case", - index=1, - number=2, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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=275, - serialized_end=353, -) - - -_TRANSLATETEXTREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3.TranslateTextRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.TranslateTextRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3.TranslateTextRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=748, - serialized_end=793, -) - -_TRANSLATETEXTREQUEST = _descriptor.Descriptor( - name="TranslateTextRequest", - full_name="google.cloud.translation.v3.TranslateTextRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="contents", - full_name="google.cloud.translation.v3.TranslateTextRequest.contents", - index=0, - number=1, - 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\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="mime_type", - full_name="google.cloud.translation.v3.TranslateTextRequest.mime_type", - 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="source_language_code", - full_name="google.cloud.translation.v3.TranslateTextRequest.source_language_code", - 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, - ), - _descriptor.FieldDescriptor( - name="target_language_code", - full_name="google.cloud.translation.v3.TranslateTextRequest.target_language_code", - index=3, - number=5, - 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="parent", - full_name="google.cloud.translation.v3.TranslateTextRequest.parent", - index=4, - number=8, - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3.TranslateTextRequest.model", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossary_config", - full_name="google.cloud.translation.v3.TranslateTextRequest.glossary_config", - index=6, - number=7, - 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="labels", - full_name="google.cloud.translation.v3.TranslateTextRequest.labels", - index=7, - number=10, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_TRANSLATETEXTREQUEST_LABELSENTRY,], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=356, - serialized_end=793, -) - - -_TRANSLATETEXTRESPONSE = _descriptor.Descriptor( - name="TranslateTextResponse", - full_name="google.cloud.translation.v3.TranslateTextResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="translations", - full_name="google.cloud.translation.v3.TranslateTextResponse.translations", - 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="glossary_translations", - full_name="google.cloud.translation.v3.TranslateTextResponse.glossary_translations", - index=1, - 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=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=796, - serialized_end=956, -) - - -_TRANSLATION = _descriptor.Descriptor( - name="Translation", - full_name="google.cloud.translation.v3.Translation", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="translated_text", - full_name="google.cloud.translation.v3.Translation.translated_text", - 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="model", - full_name="google.cloud.translation.v3.Translation.model", - 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="detected_language_code", - full_name="google.cloud.translation.v3.Translation.detected_language_code", - 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, - ), - _descriptor.FieldDescriptor( - name="glossary_config", - full_name="google.cloud.translation.v3.Translation.glossary_config", - index=3, - 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=959, - serialized_end=1127, -) - - -_DETECTLANGUAGEREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3.DetectLanguageRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.DetectLanguageRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3.DetectLanguageRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=748, - serialized_end=793, -) - -_DETECTLANGUAGEREQUEST = _descriptor.Descriptor( - name="DetectLanguageRequest", - full_name="google.cloud.translation.v3.DetectLanguageRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.DetectLanguageRequest.parent", - index=0, - number=5, - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3.DetectLanguageRequest.model", - index=1, - 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, - ), - _descriptor.FieldDescriptor( - name="content", - full_name="google.cloud.translation.v3.DetectLanguageRequest.content", - index=2, - 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="mime_type", - full_name="google.cloud.translation.v3.DetectLanguageRequest.mime_type", - index=3, - 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="labels", - full_name="google.cloud.translation.v3.DetectLanguageRequest.labels", - index=4, - number=6, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_DETECTLANGUAGEREQUEST_LABELSENTRY,], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3.DetectLanguageRequest.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=1130, - serialized_end=1417, -) - - -_DETECTEDLANGUAGE = _descriptor.Descriptor( - name="DetectedLanguage", - full_name="google.cloud.translation.v3.DetectedLanguage", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_code", - full_name="google.cloud.translation.v3.DetectedLanguage.language_code", - 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="confidence", - full_name="google.cloud.translation.v3.DetectedLanguage.confidence", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(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=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1419, - serialized_end=1480, -) - - -_DETECTLANGUAGERESPONSE = _descriptor.Descriptor( - name="DetectLanguageResponse", - full_name="google.cloud.translation.v3.DetectLanguageResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="languages", - full_name="google.cloud.translation.v3.DetectLanguageResponse.languages", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1482, - serialized_end=1572, -) - - -_GETSUPPORTEDLANGUAGESREQUEST = _descriptor.Descriptor( - name="GetSupportedLanguagesRequest", - full_name="google.cloud.translation.v3.GetSupportedLanguagesRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.GetSupportedLanguagesRequest.parent", - index=0, - 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\372A#\n!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="display_language_code", - full_name="google.cloud.translation.v3.GetSupportedLanguagesRequest.display_language_code", - index=1, - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3.GetSupportedLanguagesRequest.model", - index=2, - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1575, - serialized_end=1720, -) - - -_SUPPORTEDLANGUAGES = _descriptor.Descriptor( - name="SupportedLanguages", - full_name="google.cloud.translation.v3.SupportedLanguages", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="languages", - full_name="google.cloud.translation.v3.SupportedLanguages.languages", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1722, - serialized_end=1809, -) - - -_SUPPORTEDLANGUAGE = _descriptor.Descriptor( - name="SupportedLanguage", - full_name="google.cloud.translation.v3.SupportedLanguage", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_code", - full_name="google.cloud.translation.v3.SupportedLanguage.language_code", - 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="display_name", - full_name="google.cloud.translation.v3.SupportedLanguage.display_name", - 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="support_source", - full_name="google.cloud.translation.v3.SupportedLanguage.support_source", - index=2, - number=3, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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="support_target", - full_name="google.cloud.translation.v3.SupportedLanguage.support_target", - index=3, - number=4, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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=1811, - serialized_end=1923, -) - - -_GCSSOURCE = _descriptor.Descriptor( - name="GcsSource", - full_name="google.cloud.translation.v3.GcsSource", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="input_uri", - full_name="google.cloud.translation.v3.GcsSource.input_uri", - 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=1925, - serialized_end=1955, -) - - -_INPUTCONFIG = _descriptor.Descriptor( - name="InputConfig", - full_name="google.cloud.translation.v3.InputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="mime_type", - full_name="google.cloud.translation.v3.InputConfig.mime_type", - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="gcs_source", - full_name="google.cloud.translation.v3.InputConfig.gcs_source", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3.InputConfig.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=1957, - serialized_end=2066, -) - - -_GCSDESTINATION = _descriptor.Descriptor( - name="GcsDestination", - full_name="google.cloud.translation.v3.GcsDestination", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="output_uri_prefix", - full_name="google.cloud.translation.v3.GcsDestination.output_uri_prefix", - 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=2068, - serialized_end=2111, -) - - -_OUTPUTCONFIG = _descriptor.Descriptor( - name="OutputConfig", - full_name="google.cloud.translation.v3.OutputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="gcs_destination", - full_name="google.cloud.translation.v3.OutputConfig.gcs_destination", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="destination", - full_name="google.cloud.translation.v3.OutputConfig.destination", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=2113, - serialized_end=2214, -) - - -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY = _descriptor.Descriptor( - name="ModelsEntry", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2792, - serialized_end=2837, -) - -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY = _descriptor.Descriptor( - name="GlossariesEntry", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntry.key", - 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="value", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2839, - serialized_end=2946, -) - -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=748, - serialized_end=793, -) - -_BATCHTRANSLATETEXTREQUEST = _descriptor.Descriptor( - name="BatchTranslateTextRequest", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="source_language_code", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.source_language_code", - 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="target_language_codes", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.target_language_codes", - index=2, - number=3, - 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\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="models", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.models", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="input_configs", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.input_configs", - index=4, - number=5, - 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=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="output_config", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.output_config", - 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=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossaries", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.glossaries", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="labels", - full_name="google.cloud.translation.v3.BatchTranslateTextRequest.labels", - index=7, - number=9, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[ - _BATCHTRANSLATETEXTREQUEST_MODELSENTRY, - _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY, - _BATCHTRANSLATETEXTREQUEST_LABELSENTRY, - ], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2217, - serialized_end=2993, -) - - -_BATCHTRANSLATEMETADATA = _descriptor.Descriptor( - name="BatchTranslateMetadata", - full_name="google.cloud.translation.v3.BatchTranslateMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="state", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.state", - 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, - ), - _descriptor.FieldDescriptor( - name="translated_characters", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.translated_characters", - 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="failed_characters", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.failed_characters", - 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="total_characters", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.total_characters", - index=3, - number=4, - 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="submit_time", - full_name="google.cloud.translation.v3.BatchTranslateMetadata.submit_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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[_BATCHTRANSLATEMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2996, - serialized_end=3330, -) - - -_BATCHTRANSLATERESPONSE = _descriptor.Descriptor( - name="BatchTranslateResponse", - full_name="google.cloud.translation.v3.BatchTranslateResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="total_characters", - full_name="google.cloud.translation.v3.BatchTranslateResponse.total_characters", - 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="translated_characters", - full_name="google.cloud.translation.v3.BatchTranslateResponse.translated_characters", - 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="failed_characters", - full_name="google.cloud.translation.v3.BatchTranslateResponse.failed_characters", - 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="submit_time", - full_name="google.cloud.translation.v3.BatchTranslateResponse.submit_time", - 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=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.cloud.translation.v3.BatchTranslateResponse.end_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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=3333, - serialized_end=3536, -) - - -_GLOSSARYINPUTCONFIG = _descriptor.Descriptor( - name="GlossaryInputConfig", - full_name="google.cloud.translation.v3.GlossaryInputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="gcs_source", - full_name="google.cloud.translation.v3.GlossaryInputConfig.gcs_source", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3.GlossaryInputConfig.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=3538, - serialized_end=3631, -) - - -_GLOSSARY_LANGUAGECODEPAIR = _descriptor.Descriptor( - name="LanguageCodePair", - full_name="google.cloud.translation.v3.Glossary.LanguageCodePair", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="source_language_code", - full_name="google.cloud.translation.v3.Glossary.LanguageCodePair.source_language_code", - 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="target_language_code", - full_name="google.cloud.translation.v3.Glossary.LanguageCodePair.target_language_code", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4030, - serialized_end=4108, -) - -_GLOSSARY_LANGUAGECODESSET = _descriptor.Descriptor( - name="LanguageCodesSet", - full_name="google.cloud.translation.v3.Glossary.LanguageCodesSet", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_codes", - full_name="google.cloud.translation.v3.Glossary.LanguageCodesSet.language_codes", - index=0, - number=1, - 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=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=4110, - serialized_end=4152, -) - -_GLOSSARY = _descriptor.Descriptor( - name="Glossary", - full_name="google.cloud.translation.v3.Glossary", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.Glossary.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="language_pair", - full_name="google.cloud.translation.v3.Glossary.language_pair", - index=1, - 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, - ), - _descriptor.FieldDescriptor( - name="language_codes_set", - full_name="google.cloud.translation.v3.Glossary.language_codes_set", - 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, - ), - _descriptor.FieldDescriptor( - name="input_config", - full_name="google.cloud.translation.v3.Glossary.input_config", - 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, - ), - _descriptor.FieldDescriptor( - name="entry_count", - full_name="google.cloud.translation.v3.Glossary.entry_count", - 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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3.Glossary.submit_time", - index=5, - number=7, - 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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.cloud.translation.v3.Glossary.end_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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_GLOSSARY_LANGUAGECODEPAIR, _GLOSSARY_LANGUAGECODESSET,], - enum_types=[], - serialized_options=b"\352Ab\n!translate.googleapis.com/Glossary\022=projects/{project}/locations/{location}/glossaries/{glossary}", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="languages", - full_name="google.cloud.translation.v3.Glossary.languages", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=3634, - serialized_end=4268, -) - - -_CREATEGLOSSARYREQUEST = _descriptor.Descriptor( - name="CreateGlossaryRequest", - full_name="google.cloud.translation.v3.CreateGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.CreateGlossaryRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossary", - full_name="google.cloud.translation.v3.CreateGlossaryRequest.glossary", - 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=4271, - serialized_end=4415, -) - - -_GETGLOSSARYREQUEST = _descriptor.Descriptor( - name="GetGlossaryRequest", - full_name="google.cloud.translation.v3.GetGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.GetGlossaryRequest.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!translate.googleapis.com/Glossary", - 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=4417, - serialized_end=4494, -) - - -_DELETEGLOSSARYREQUEST = _descriptor.Descriptor( - name="DeleteGlossaryRequest", - full_name="google.cloud.translation.v3.DeleteGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.DeleteGlossaryRequest.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!translate.googleapis.com/Glossary", - 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=4496, - serialized_end=4576, -) - - -_LISTGLOSSARIESREQUEST = _descriptor.Descriptor( - name="ListGlossariesRequest", - full_name="google.cloud.translation.v3.ListGlossariesRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3.ListGlossariesRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_size", - full_name="google.cloud.translation.v3.ListGlossariesRequest.page_size", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_token", - full_name="google.cloud.translation.v3.ListGlossariesRequest.page_token", - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="filter", - full_name="google.cloud.translation.v3.ListGlossariesRequest.filter", - 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=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=4579, - serialized_end=4731, -) - - -_LISTGLOSSARIESRESPONSE = _descriptor.Descriptor( - name="ListGlossariesResponse", - full_name="google.cloud.translation.v3.ListGlossariesResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="glossaries", - full_name="google.cloud.translation.v3.ListGlossariesResponse.glossaries", - 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.cloud.translation.v3.ListGlossariesResponse.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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4733, - serialized_end=4841, -) - - -_CREATEGLOSSARYMETADATA = _descriptor.Descriptor( - name="CreateGlossaryMetadata", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata.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="state", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata.state", - index=1, - number=2, - 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, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3.CreateGlossaryMetadata.submit_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=[_CREATEGLOSSARYMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4844, - serialized_end=5108, -) - - -_DELETEGLOSSARYMETADATA = _descriptor.Descriptor( - name="DeleteGlossaryMetadata", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata.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="state", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata.state", - index=1, - number=2, - 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, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3.DeleteGlossaryMetadata.submit_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=[_DELETEGLOSSARYMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=5111, - serialized_end=5375, -) - - -_DELETEGLOSSARYRESPONSE = _descriptor.Descriptor( - name="DeleteGlossaryResponse", - full_name="google.cloud.translation.v3.DeleteGlossaryResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3.DeleteGlossaryResponse.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="submit_time", - full_name="google.cloud.translation.v3.DeleteGlossaryResponse.submit_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.cloud.translation.v3.DeleteGlossaryResponse.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=5378, - serialized_end=5511, -) - -_TRANSLATETEXTREQUEST_LABELSENTRY.containing_type = _TRANSLATETEXTREQUEST -_TRANSLATETEXTREQUEST.fields_by_name[ - "glossary_config" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_TRANSLATETEXTREQUEST.fields_by_name[ - "labels" -].message_type = _TRANSLATETEXTREQUEST_LABELSENTRY -_TRANSLATETEXTRESPONSE.fields_by_name["translations"].message_type = _TRANSLATION -_TRANSLATETEXTRESPONSE.fields_by_name[ - "glossary_translations" -].message_type = _TRANSLATION -_TRANSLATION.fields_by_name[ - "glossary_config" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_DETECTLANGUAGEREQUEST_LABELSENTRY.containing_type = _DETECTLANGUAGEREQUEST -_DETECTLANGUAGEREQUEST.fields_by_name[ - "labels" -].message_type = _DETECTLANGUAGEREQUEST_LABELSENTRY -_DETECTLANGUAGEREQUEST.oneofs_by_name["source"].fields.append( - _DETECTLANGUAGEREQUEST.fields_by_name["content"] -) -_DETECTLANGUAGEREQUEST.fields_by_name[ - "content" -].containing_oneof = _DETECTLANGUAGEREQUEST.oneofs_by_name["source"] -_DETECTLANGUAGERESPONSE.fields_by_name["languages"].message_type = _DETECTEDLANGUAGE -_SUPPORTEDLANGUAGES.fields_by_name["languages"].message_type = _SUPPORTEDLANGUAGE -_INPUTCONFIG.fields_by_name["gcs_source"].message_type = _GCSSOURCE -_INPUTCONFIG.oneofs_by_name["source"].fields.append( - _INPUTCONFIG.fields_by_name["gcs_source"] -) -_INPUTCONFIG.fields_by_name[ - "gcs_source" -].containing_oneof = _INPUTCONFIG.oneofs_by_name["source"] -_OUTPUTCONFIG.fields_by_name["gcs_destination"].message_type = _GCSDESTINATION -_OUTPUTCONFIG.oneofs_by_name["destination"].fields.append( - _OUTPUTCONFIG.fields_by_name["gcs_destination"] -) -_OUTPUTCONFIG.fields_by_name[ - "gcs_destination" -].containing_oneof = _OUTPUTCONFIG.oneofs_by_name["destination"] -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY.fields_by_name[ - "value" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "models" -].message_type = _BATCHTRANSLATETEXTREQUEST_MODELSENTRY -_BATCHTRANSLATETEXTREQUEST.fields_by_name["input_configs"].message_type = _INPUTCONFIG -_BATCHTRANSLATETEXTREQUEST.fields_by_name["output_config"].message_type = _OUTPUTCONFIG -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "glossaries" -].message_type = _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "labels" -].message_type = _BATCHTRANSLATETEXTREQUEST_LABELSENTRY -_BATCHTRANSLATEMETADATA.fields_by_name[ - "state" -].enum_type = _BATCHTRANSLATEMETADATA_STATE -_BATCHTRANSLATEMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_BATCHTRANSLATEMETADATA_STATE.containing_type = _BATCHTRANSLATEMETADATA -_BATCHTRANSLATERESPONSE.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_BATCHTRANSLATERESPONSE.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARYINPUTCONFIG.fields_by_name["gcs_source"].message_type = _GCSSOURCE -_GLOSSARYINPUTCONFIG.oneofs_by_name["source"].fields.append( - _GLOSSARYINPUTCONFIG.fields_by_name["gcs_source"] -) -_GLOSSARYINPUTCONFIG.fields_by_name[ - "gcs_source" -].containing_oneof = _GLOSSARYINPUTCONFIG.oneofs_by_name["source"] -_GLOSSARY_LANGUAGECODEPAIR.containing_type = _GLOSSARY -_GLOSSARY_LANGUAGECODESSET.containing_type = _GLOSSARY -_GLOSSARY.fields_by_name["language_pair"].message_type = _GLOSSARY_LANGUAGECODEPAIR -_GLOSSARY.fields_by_name["language_codes_set"].message_type = _GLOSSARY_LANGUAGECODESSET -_GLOSSARY.fields_by_name["input_config"].message_type = _GLOSSARYINPUTCONFIG -_GLOSSARY.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARY.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARY.oneofs_by_name["languages"].fields.append( - _GLOSSARY.fields_by_name["language_pair"] -) -_GLOSSARY.fields_by_name["language_pair"].containing_oneof = _GLOSSARY.oneofs_by_name[ - "languages" -] -_GLOSSARY.oneofs_by_name["languages"].fields.append( - _GLOSSARY.fields_by_name["language_codes_set"] -) -_GLOSSARY.fields_by_name[ - "language_codes_set" -].containing_oneof = _GLOSSARY.oneofs_by_name["languages"] -_CREATEGLOSSARYREQUEST.fields_by_name["glossary"].message_type = _GLOSSARY -_LISTGLOSSARIESRESPONSE.fields_by_name["glossaries"].message_type = _GLOSSARY -_CREATEGLOSSARYMETADATA.fields_by_name[ - "state" -].enum_type = _CREATEGLOSSARYMETADATA_STATE -_CREATEGLOSSARYMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_CREATEGLOSSARYMETADATA_STATE.containing_type = _CREATEGLOSSARYMETADATA -_DELETEGLOSSARYMETADATA.fields_by_name[ - "state" -].enum_type = _DELETEGLOSSARYMETADATA_STATE -_DELETEGLOSSARYMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_DELETEGLOSSARYMETADATA_STATE.containing_type = _DELETEGLOSSARYMETADATA -_DELETEGLOSSARYRESPONSE.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_DELETEGLOSSARYRESPONSE.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -DESCRIPTOR.message_types_by_name[ - "TranslateTextGlossaryConfig" -] = _TRANSLATETEXTGLOSSARYCONFIG -DESCRIPTOR.message_types_by_name["TranslateTextRequest"] = _TRANSLATETEXTREQUEST -DESCRIPTOR.message_types_by_name["TranslateTextResponse"] = _TRANSLATETEXTRESPONSE -DESCRIPTOR.message_types_by_name["Translation"] = _TRANSLATION -DESCRIPTOR.message_types_by_name["DetectLanguageRequest"] = _DETECTLANGUAGEREQUEST -DESCRIPTOR.message_types_by_name["DetectedLanguage"] = _DETECTEDLANGUAGE -DESCRIPTOR.message_types_by_name["DetectLanguageResponse"] = _DETECTLANGUAGERESPONSE -DESCRIPTOR.message_types_by_name[ - "GetSupportedLanguagesRequest" -] = _GETSUPPORTEDLANGUAGESREQUEST -DESCRIPTOR.message_types_by_name["SupportedLanguages"] = _SUPPORTEDLANGUAGES -DESCRIPTOR.message_types_by_name["SupportedLanguage"] = _SUPPORTEDLANGUAGE -DESCRIPTOR.message_types_by_name["GcsSource"] = _GCSSOURCE -DESCRIPTOR.message_types_by_name["InputConfig"] = _INPUTCONFIG -DESCRIPTOR.message_types_by_name["GcsDestination"] = _GCSDESTINATION -DESCRIPTOR.message_types_by_name["OutputConfig"] = _OUTPUTCONFIG -DESCRIPTOR.message_types_by_name[ - "BatchTranslateTextRequest" -] = _BATCHTRANSLATETEXTREQUEST -DESCRIPTOR.message_types_by_name["BatchTranslateMetadata"] = _BATCHTRANSLATEMETADATA -DESCRIPTOR.message_types_by_name["BatchTranslateResponse"] = _BATCHTRANSLATERESPONSE -DESCRIPTOR.message_types_by_name["GlossaryInputConfig"] = _GLOSSARYINPUTCONFIG -DESCRIPTOR.message_types_by_name["Glossary"] = _GLOSSARY -DESCRIPTOR.message_types_by_name["CreateGlossaryRequest"] = _CREATEGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["GetGlossaryRequest"] = _GETGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["DeleteGlossaryRequest"] = _DELETEGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["ListGlossariesRequest"] = _LISTGLOSSARIESREQUEST -DESCRIPTOR.message_types_by_name["ListGlossariesResponse"] = _LISTGLOSSARIESRESPONSE -DESCRIPTOR.message_types_by_name["CreateGlossaryMetadata"] = _CREATEGLOSSARYMETADATA -DESCRIPTOR.message_types_by_name["DeleteGlossaryMetadata"] = _DELETEGLOSSARYMETADATA -DESCRIPTOR.message_types_by_name["DeleteGlossaryResponse"] = _DELETEGLOSSARYRESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -TranslateTextGlossaryConfig = _reflection.GeneratedProtocolMessageType( - "TranslateTextGlossaryConfig", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTGLOSSARYCONFIG, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Configures which glossary should be used for a specific target - language, and defines options for applying that glossary. - - Attributes: - glossary: - Required. Specifies the glossary used for this translation. - Use this format: projects/\ */locations/*/glossaries/\* - ignore_case: - Optional. Indicates match is case-insensitive. Default value - is false if missing. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.TranslateTextGlossaryConfig) - }, -) -_sym_db.RegisterMessage(TranslateTextGlossaryConfig) - -TranslateTextRequest = _reflection.GeneratedProtocolMessageType( - "TranslateTextRequest", - (_message.Message,), - { - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.TranslateTextRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _TRANSLATETEXTREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The request message for synchronous translation. - - Attributes: - contents: - Required. The content of the input in string format. We - recommend the total content be less than 30k codepoints. Use - BatchTranslateText for larger text. - mime_type: - Optional. The format of the source text, for example, - “text/html”, “text/plain”. If left blank, the MIME type - defaults to “text/html”. - source_language_code: - Optional. The BCP-47 language code of the input text if known, - for example, “en-US” or “sr-Latn”. Supported language codes - are listed in Language Support. If the source language isn’t - specified, the API attempts to identify the source language - automatically and returns the source language within the - response. - target_language_code: - Required. The BCP-47 language code to use for translation of - the input text, set to one of the language codes listed in - Language Support. - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-number-or-id}`` - or ``projects/{project-number-or-id}/locations/{location- - id}``. For global calls, use ``projects/{project-number-or- - id}/locations/global`` or ``projects/{project-number-or-id}``. - Non-global location is required for requests using AutoML - models or custom glossaries. Models and glossaries must be - within the same region (have same location-id), otherwise an - INVALID_ARGUMENT (400) error is returned. - model: - Optional. The ``model`` type requested for this translation. - The format depends on model type: - AutoML Translation - models: ``projects/{project-number-or- - id}/locations/{location-id}/models/{model-id}`` - General - (built-in) models: ``projects/{project-number-or- - id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-number-or-id}/locations/{location- - id}/models/general/base`` For global (non-regionalized) - requests, use ``location-id`` ``global``. For example, - ``projects/{project-number-or- - id}/locations/global/models/general/nmt``. If missing, the - system decides which google base model to use. - glossary_config: - Optional. Glossary to be applied. The glossary must be within - the same region (have the same location-id) as the model, - otherwise an INVALID_ARGUMENT (400) error is returned. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.TranslateTextRequest) - }, -) -_sym_db.RegisterMessage(TranslateTextRequest) -_sym_db.RegisterMessage(TranslateTextRequest.LabelsEntry) - -TranslateTextResponse = _reflection.GeneratedProtocolMessageType( - "TranslateTextResponse", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTRESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """ - Attributes: - translations: - Text translation responses with no glossary applied. This - field has the same length as [``contents``][google.cloud.trans - lation.v3.TranslateTextRequest.contents]. - glossary_translations: - Text translation responses if a glossary is provided in the - request. This can be the same as [``translations``][google.clo - ud.translation.v3.TranslateTextResponse.translations] if no - terms apply. This field has the same length as [``contents``][ - google.cloud.translation.v3.TranslateTextRequest.contents]. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.TranslateTextResponse) - }, -) -_sym_db.RegisterMessage(TranslateTextResponse) - -Translation = _reflection.GeneratedProtocolMessageType( - "Translation", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATION, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """A single translation response. - - Attributes: - translated_text: - Text translated into the target language. - model: - Only present when ``model`` is present in the request. - ``model`` here is normalized to have project number. For - example: If the ``model`` requested in TranslationTextRequest - is ``projects/{project-id}/locations/{location- - id}/models/general/nmt`` then ``model`` here would be - normalized to ``projects/{project-number}/locations/{location- - id}/models/general/nmt``. - detected_language_code: - The BCP-47 language code of source text in the initial - request, detected automatically, if no source language was - passed within the initial request. If the source language was - passed, auto-detection of the language does not occur and this - field is empty. - glossary_config: - The ``glossary_config`` used for this translation. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.Translation) - }, -) -_sym_db.RegisterMessage(Translation) - -DetectLanguageRequest = _reflection.GeneratedProtocolMessageType( - "DetectLanguageRequest", - (_message.Message,), - { - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _DETECTLANGUAGEREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DetectLanguageRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _DETECTLANGUAGEREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The request message for language detection. - - Attributes: - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-number-or- - id}/locations/{location-id}`` or ``projects/{project-number- - or-id}``. For global calls, use ``projects/{project-number- - or-id}/locations/global`` or ``projects/{project-number-or- - id}``. Only models within the same region (has same location- - id) can be used. Otherwise an INVALID_ARGUMENT (400) error is - returned. - model: - Optional. The language detection model to be used. Format: - ``projects/{project-number-or-id}/locations/{location- - id}/models/language-detection/{model-id}`` Only one language - detection model is currently supported: ``projects/{project- - number-or-id}/locations/{location-id}/models/language- - detection/default``. If not specified, the default model is - used. - source: - Required. The source of the document from which to detect the - language. - content: - The content of the input stored as a string. - mime_type: - Optional. The format of the source text, for example, - “text/html”, “text/plain”. If left blank, the MIME type - defaults to “text/html”. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DetectLanguageRequest) - }, -) -_sym_db.RegisterMessage(DetectLanguageRequest) -_sym_db.RegisterMessage(DetectLanguageRequest.LabelsEntry) - -DetectedLanguage = _reflection.GeneratedProtocolMessageType( - "DetectedLanguage", - (_message.Message,), - { - "DESCRIPTOR": _DETECTEDLANGUAGE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The response message for language detection. - - Attributes: - language_code: - The BCP-47 language code of source content in the request, - detected automatically. - confidence: - The confidence of the detection result for this language. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DetectedLanguage) - }, -) -_sym_db.RegisterMessage(DetectedLanguage) - -DetectLanguageResponse = _reflection.GeneratedProtocolMessageType( - "DetectLanguageResponse", - (_message.Message,), - { - "DESCRIPTOR": _DETECTLANGUAGERESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The response message for language detection. - - Attributes: - languages: - A list of detected languages sorted by detection confidence in - descending order. The most probable language first. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DetectLanguageResponse) - }, -) -_sym_db.RegisterMessage(DetectLanguageResponse) - -GetSupportedLanguagesRequest = _reflection.GeneratedProtocolMessageType( - "GetSupportedLanguagesRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETSUPPORTEDLANGUAGESREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The request message for discovering supported languages. - - Attributes: - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-number-or-id}`` - or ``projects/{project-number-or-id}/locations/{location- - id}``. For global calls, use ``projects/{project-number-or- - id}/locations/global`` or ``projects/{project-number-or-id}``. - Non-global location is required for AutoML models. Only - models within the same region (have same location-id) can be - used, otherwise an INVALID_ARGUMENT (400) error is returned. - display_language_code: - Optional. The language to use to return localized, human - readable names of supported languages. If missing, then - display names are not returned in a response. - model: - Optional. Get supported languages of this model. The format - depends on model type: - AutoML Translation models: - ``projects/{project-number-or-id}/locations/{location- - id}/models/{model-id}`` - General (built-in) models: - ``projects/{project-number-or-id}/locations/{location- - id}/models/general/nmt``, ``projects/{project-number-or- - id}/locations/{location-id}/models/general/base`` Returns - languages supported by the specified model. If missing, we get - supported languages of Google general base (PBMT) model. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GetSupportedLanguagesRequest) - }, -) -_sym_db.RegisterMessage(GetSupportedLanguagesRequest) - -SupportedLanguages = _reflection.GeneratedProtocolMessageType( - "SupportedLanguages", - (_message.Message,), - { - "DESCRIPTOR": _SUPPORTEDLANGUAGES, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The response message for discovering supported languages. - - Attributes: - languages: - A list of supported language responses. This list contains an - entry for each language the Translation API supports. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.SupportedLanguages) - }, -) -_sym_db.RegisterMessage(SupportedLanguages) - -SupportedLanguage = _reflection.GeneratedProtocolMessageType( - "SupportedLanguage", - (_message.Message,), - { - "DESCRIPTOR": _SUPPORTEDLANGUAGE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """A single supported language response corresponds to information - related to one supported language. - - Attributes: - language_code: - Supported language code, generally consisting of its ISO 639-1 - identifier, for example, ‘en’, ‘ja’. In certain cases, BCP-47 - codes including language and region identifiers are returned - (for example, ‘zh-TW’ and ‘zh-CN’) - display_name: - Human readable name of the language localized in the display - language specified in the request. - support_source: - Can be used as source language. - support_target: - Can be used as target language. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.SupportedLanguage) - }, -) -_sym_db.RegisterMessage(SupportedLanguage) - -GcsSource = _reflection.GeneratedProtocolMessageType( - "GcsSource", - (_message.Message,), - { - "DESCRIPTOR": _GCSSOURCE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The Google Cloud Storage location for the input content. - - Attributes: - input_uri: - Required. Source data URI. For example, - ``gs://my_bucket/my_object``. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GcsSource) - }, -) -_sym_db.RegisterMessage(GcsSource) - -InputConfig = _reflection.GeneratedProtocolMessageType( - "InputConfig", - (_message.Message,), - { - "DESCRIPTOR": _INPUTCONFIG, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Input configuration for BatchTranslateText request. - - Attributes: - mime_type: - Optional. Can be “text/plain” or “text/html”. For ``.tsv``, - “text/html” is used if mime_type is missing. For ``.html``, - this field must be “text/html” or empty. For ``.txt``, this - field must be “text/plain” or empty. - source: - Required. Specify the input. - gcs_source: - Required. Google Cloud Storage location for the source input. - This can be a single file (for example, ``gs://translation- - test/input.tsv``) or a wildcard (for example, - ``gs://translation-test/*``). If a file extension is ``.tsv``, - it can contain either one or two columns. The first column - (optional) is the id of the text request. If the first column - is missing, we use the row number (0-based) from the input - file as the ID in the output file. The second column is the - actual text to be translated. We recommend each row be <= 10K - Unicode codepoints, otherwise an error might be returned. Note - that the input tsv must be RFC 4180 compliant. You could use - https://github.com/Clever/csvlint to check potential - formatting errors in your tsv file. csvlint –delimiter=‘:raw- - latex:`\t`’ your_input_file.tsv The other supported file - extensions are ``.txt`` or ``.html``, which is treated as a - single large chunk of text. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.InputConfig) - }, -) -_sym_db.RegisterMessage(InputConfig) - -GcsDestination = _reflection.GeneratedProtocolMessageType( - "GcsDestination", - (_message.Message,), - { - "DESCRIPTOR": _GCSDESTINATION, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The Google Cloud Storage location for the output content. - - Attributes: - output_uri_prefix: - Required. There must be no files under ‘output_uri_prefix’. - ‘output_uri_prefix’ must end with “/” and start with “gs://”, - otherwise an INVALID_ARGUMENT (400) error is returned. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GcsDestination) - }, -) -_sym_db.RegisterMessage(GcsDestination) - -OutputConfig = _reflection.GeneratedProtocolMessageType( - "OutputConfig", - (_message.Message,), - { - "DESCRIPTOR": _OUTPUTCONFIG, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Output configuration for BatchTranslateText request. - - Attributes: - destination: - Required. The destination of output. - gcs_destination: - Google Cloud Storage destination for output content. For every - single input file (for example, gs://a/b/c.[extension]), we - generate at most 2 \* n output files. (n is the # of - target_language_codes in the BatchTranslateTextRequest). - Output files (tsv) generated are compliant with RFC 4180 - except that record delimiters are ``\\\\n`` instead of - ``\\\\r\\\\n``. We don’t provide any way to - change record delimiters. While the input files are being - processed, we write/update an index file ‘index.csv’ under - ‘output_uri_prefix’ (for example, gs://translation- - test/index.csv) The index file is generated/updated as new - files are being translated. The format is: - input_file,target_language_code,translations_file,errors_file, - glossary_translations_file,glossary_errors_file input_file is - one file we matched using gcs_source.input_uri. - target_language_code is provided in the request. - translations_file contains the translations. (details provided - below) errors_file contains the errors during processing of - the file. (details below). Both translations_file and - errors_file could be empty strings if we have no content to - output. glossary_translations_file and glossary_errors_file - are always empty strings if the input_file is tsv. They could - also be empty if we have no content to output. Once a row is - present in index.csv, the input/output matching never changes. - Callers should also expect all the content in input_file are - processed and ready to be consumed (that is, no partial output - file is written). The format of translations_file (for target - language code ‘trg’) is: - gs://translation_test/a_b_c\_‘trg’\_translations.[extension] - If the input file extension is tsv, the output has the - following columns: Column 1: ID of the request provided in the - input, if it’s not provided in the input, then the input row - number is used (0-based). Column 2: source sentence. Column 3: - translation without applying a glossary. Empty string if there - is an error. Column 4 (only present if a glossary is provided - in the request): translation after applying the glossary. - Empty string if there is an error applying the glossary. Could - be same string as column 3 if there is no glossary applied. - If input file extension is a txt or html, the translation is - directly written to the output file. If glossary is requested, - a separate glossary_translations_file has format of gs://trans - lation_test/a_b_c\_‘trg’\_glossary_translations.[extension] - The format of errors file (for target language code ‘trg’) is: - gs://translation_test/a_b_c\_‘trg’\_errors.[extension] If the - input file extension is tsv, errors_file contains the - following: Column 1: ID of the request provided in the input, - if it’s not provided in the input, then the input row number - is used (0-based). Column 2: source sentence. Column 3: Error - detail for the translation. Could be empty. Column 4 (only - present if a glossary is provided in the request): Error when - applying the glossary. If the input file extension is txt or - html, glossary_error_file will be generated that contains - error details. glossary_error_file has format of gs://translat - ion_test/a_b_c\_‘trg’\_glossary_errors.[extension] - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.OutputConfig) - }, -) -_sym_db.RegisterMessage(OutputConfig) - -BatchTranslateTextRequest = _reflection.GeneratedProtocolMessageType( - "BatchTranslateTextRequest", - (_message.Message,), - { - "ModelsEntry": _reflection.GeneratedProtocolMessageType( - "ModelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_MODELSENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateTextRequest.ModelsEntry) - }, - ), - "GlossariesEntry": _reflection.GeneratedProtocolMessageType( - "GlossariesEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateTextRequest.GlossariesEntry) - }, - ), - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateTextRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """The batch translation request. - - Attributes: - parent: - Required. Location to make a call. Must refer to a caller’s - project. Format: ``projects/{project-number-or- - id}/locations/{location-id}``. The ``global`` location is not - supported for batch translation. Only AutoML Translation - models or glossaries within the same region (have the same - location-id) can be used, otherwise an INVALID_ARGUMENT (400) - error is returned. - source_language_code: - Required. Source language code. - target_language_codes: - Required. Specify up to 10 language codes here. - models: - Optional. The models to use for translation. Map’s key is - target language code. Map’s value is model name. Value can be - a built-in general model, or an AutoML Translation model. The - value format depends on model type: - AutoML Translation - models: ``projects/{project-number-or- - id}/locations/{location-id}/models/{model-id}`` - General - (built-in) models: ``projects/{project-number-or- - id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-number-or-id}/locations/{location- - id}/models/general/base`` If the map is empty or a specific - model is not requested for a language pair, then default - google model (nmt) is used. - input_configs: - Required. Input configurations. The total number of files - matched should be <= 1000. The total content size should be <= - 100M Unicode codepoints. The files must use UTF-8 encoding. - output_config: - Required. Output configuration. If 2 input configs match to - the same file (that is, same input path), we don’t generate - output for duplicate inputs. - glossaries: - Optional. Glossaries to be applied for translation. It’s keyed - by target language code. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateTextRequest) - }, -) -_sym_db.RegisterMessage(BatchTranslateTextRequest) -_sym_db.RegisterMessage(BatchTranslateTextRequest.ModelsEntry) -_sym_db.RegisterMessage(BatchTranslateTextRequest.GlossariesEntry) -_sym_db.RegisterMessage(BatchTranslateTextRequest.LabelsEntry) - -BatchTranslateMetadata = _reflection.GeneratedProtocolMessageType( - "BatchTranslateMetadata", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATEMETADATA, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """State metadata for the batch translation operation. - - Attributes: - state: - The state of the operation. - translated_characters: - Number of successfully translated characters so far (Unicode - codepoints). - failed_characters: - Number of characters that have failed to process so far - (Unicode codepoints). - total_characters: - Total number of characters (Unicode codepoints). This is the - total number of codepoints from input files times the number - of target languages and appears here shortly after the call is - submitted. - submit_time: - Time when the operation was submitted. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateMetadata) - }, -) -_sym_db.RegisterMessage(BatchTranslateMetadata) - -BatchTranslateResponse = _reflection.GeneratedProtocolMessageType( - "BatchTranslateResponse", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATERESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.response][google.longrunni - ng.Operation.response] field returned by BatchTranslateText if at - least one sentence is translated successfully. - - Attributes: - total_characters: - Total number of characters (Unicode codepoints). - translated_characters: - Number of successfully translated characters (Unicode - codepoints). - failed_characters: - Number of characters that have failed to process (Unicode - codepoints). - submit_time: - Time when the operation was submitted. - end_time: - The time when the operation is finished and [google.longrunnin - g.Operation.done][google.longrunning.Operation.done] is set to - true. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.BatchTranslateResponse) - }, -) -_sym_db.RegisterMessage(BatchTranslateResponse) - -GlossaryInputConfig = _reflection.GeneratedProtocolMessageType( - "GlossaryInputConfig", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARYINPUTCONFIG, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Input configuration for glossaries. - - Attributes: - source: - Required. Specify the input. - gcs_source: - Required. Google Cloud Storage location of glossary data. File - format is determined based on the filename extension. API - returns [google.rpc.Code.INVALID_ARGUMENT] for unsupported - URI-s and file formats. Wildcards are not allowed. This must - be a single file in one of the following formats: For - unidirectional glossaries: - TSV/CSV (``.tsv``/``.csv``): 2 - column file, tab- or comma-separated. The first column is - source text. The second column is target text. The file - must not contain headers. That is, the first row is data, - not column names. - TMX (``.tmx``): TMX file with parallel - data defining source/target term pairs. For equivalent - term sets glossaries: - CSV (``.csv``): Multi-column CSV - file defining equivalent glossary terms in multiple - languages. The format is defined for Google Translation - Toolkit and documented in `Use a glossary `__. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GlossaryInputConfig) - }, -) -_sym_db.RegisterMessage(GlossaryInputConfig) - -Glossary = _reflection.GeneratedProtocolMessageType( - "Glossary", - (_message.Message,), - { - "LanguageCodePair": _reflection.GeneratedProtocolMessageType( - "LanguageCodePair", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARY_LANGUAGECODEPAIR, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Used with unidirectional glossaries. - - Attributes: - source_language_code: - Required. The BCP-47 language code of the input text, for - example, “en-US”. Expected to be an exact match for - GlossaryTerm.language_code. - target_language_code: - Required. The BCP-47 language code for translation output, for - example, “zh-CN”. Expected to be an exact match for - GlossaryTerm.language_code. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.Glossary.LanguageCodePair) - }, - ), - "LanguageCodesSet": _reflection.GeneratedProtocolMessageType( - "LanguageCodesSet", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARY_LANGUAGECODESSET, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Used with equivalent term set glossaries. - - Attributes: - language_codes: - The BCP-47 language code(s) for terms defined in the glossary. - All entries are unique. The list contains at least two - entries. Expected to be an exact match for - GlossaryTerm.language_code. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.Glossary.LanguageCodesSet) - }, - ), - "DESCRIPTOR": _GLOSSARY, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Represents a glossary built from user provided data. - - Attributes: - name: - Required. The resource name of the glossary. Glossary names - have the form ``projects/{project-number-or- - id}/locations/{location-id}/glossaries/{glossary-id}``. - languages: - Languages supported by the glossary. - language_pair: - Used with unidirectional glossaries. - language_codes_set: - Used with equivalent term set glossaries. - input_config: - Required. Provides examples to build the glossary from. Total - glossary must not exceed 10M Unicode codepoints. - entry_count: - Output only. The number of entries defined in the glossary. - submit_time: - Output only. When CreateGlossary was called. - end_time: - Output only. When the glossary creation was finished. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.Glossary) - }, -) -_sym_db.RegisterMessage(Glossary) -_sym_db.RegisterMessage(Glossary.LanguageCodePair) -_sym_db.RegisterMessage(Glossary.LanguageCodesSet) - -CreateGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "CreateGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _CREATEGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Request message for CreateGlossary. - - Attributes: - parent: - Required. The project name. - glossary: - Required. The glossary to create. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.CreateGlossaryRequest) - }, -) -_sym_db.RegisterMessage(CreateGlossaryRequest) - -GetGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "GetGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Request message for GetGlossary. - - Attributes: - name: - Required. The name of the glossary to retrieve. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.GetGlossaryRequest) - }, -) -_sym_db.RegisterMessage(GetGlossaryRequest) - -DeleteGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Request message for DeleteGlossary. - - Attributes: - name: - Required. The name of the glossary to delete. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DeleteGlossaryRequest) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryRequest) - -ListGlossariesRequest = _reflection.GeneratedProtocolMessageType( - "ListGlossariesRequest", - (_message.Message,), - { - "DESCRIPTOR": _LISTGLOSSARIESREQUEST, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Request message for ListGlossaries. - - Attributes: - parent: - Required. The name of the project from which to list all of - the glossaries. - page_size: - Optional. Requested page size. The server may return fewer - glossaries than requested. If unspecified, the server picks an - appropriate default. - page_token: - Optional. A token identifying a page of results the server - should return. Typically, this is the value of - [ListGlossariesResponse.next_page_token] returned from the - previous call to ``ListGlossaries`` method. The first page is - returned if ``page_token``\ is empty or missing. - filter: - Optional. Filter specifying constraints of a list operation. - Filtering is not supported yet, and the parameter currently - has no effect. If missing, no filtering is performed. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.ListGlossariesRequest) - }, -) -_sym_db.RegisterMessage(ListGlossariesRequest) - -ListGlossariesResponse = _reflection.GeneratedProtocolMessageType( - "ListGlossariesResponse", - (_message.Message,), - { - "DESCRIPTOR": _LISTGLOSSARIESRESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Response message for ListGlossaries. - - Attributes: - glossaries: - The list of glossaries for a project. - next_page_token: - A token to retrieve a page of results. Pass this value in the - [ListGlossariesRequest.page_token] field in the subsequent - call to ``ListGlossaries`` method to retrieve the next page of - results. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.ListGlossariesResponse) - }, -) -_sym_db.RegisterMessage(ListGlossariesResponse) - -CreateGlossaryMetadata = _reflection.GeneratedProtocolMessageType( - "CreateGlossaryMetadata", - (_message.Message,), - { - "DESCRIPTOR": _CREATEGLOSSARYMETADATA, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.metadata][google.longrunni - ng.Operation.metadata] field returned by CreateGlossary. - - Attributes: - name: - The name of the glossary that is being created. - state: - The current state of the glossary creation operation. - submit_time: - The time when the operation was submitted to the server. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.CreateGlossaryMetadata) - }, -) -_sym_db.RegisterMessage(CreateGlossaryMetadata) - -DeleteGlossaryMetadata = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryMetadata", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYMETADATA, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.metadata][google.longrunni - ng.Operation.metadata] field returned by DeleteGlossary. - - Attributes: - name: - The name of the glossary that is being deleted. - state: - The current state of the glossary deletion operation. - submit_time: - The time when the operation was submitted to the server. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DeleteGlossaryMetadata) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryMetadata) - -DeleteGlossaryResponse = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryResponse", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYRESPONSE, - "__module__": "google.cloud.translate_v3.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.response][google.longrunni - ng.Operation.response] field returned by DeleteGlossary. - - Attributes: - name: - The name of the deleted glossary. - submit_time: - The time when the operation was submitted to the server. - end_time: - The time when the glossary deletion is finished and [google.lo - ngrunning.Operation.done][google.longrunning.Operation.done] - is set to true. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3.DeleteGlossaryResponse) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryResponse) - - -DESCRIPTOR._options = None -_TRANSLATETEXTGLOSSARYCONFIG.fields_by_name["glossary"]._options = None -_TRANSLATETEXTGLOSSARYCONFIG.fields_by_name["ignore_case"]._options = None -_TRANSLATETEXTREQUEST_LABELSENTRY._options = None -_TRANSLATETEXTREQUEST.fields_by_name["contents"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["mime_type"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["source_language_code"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["target_language_code"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["parent"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["model"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["glossary_config"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["labels"]._options = None -_DETECTLANGUAGEREQUEST_LABELSENTRY._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["parent"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["model"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["mime_type"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["labels"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["parent"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["display_language_code"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["model"]._options = None -_INPUTCONFIG.fields_by_name["mime_type"]._options = None -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY._options = None -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY._options = None -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["parent"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["source_language_code"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["target_language_codes"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["models"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["input_configs"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["output_config"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["glossaries"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["labels"]._options = None -_GLOSSARY.fields_by_name["entry_count"]._options = None -_GLOSSARY.fields_by_name["submit_time"]._options = None -_GLOSSARY.fields_by_name["end_time"]._options = None -_GLOSSARY._options = None -_CREATEGLOSSARYREQUEST.fields_by_name["parent"]._options = None -_CREATEGLOSSARYREQUEST.fields_by_name["glossary"]._options = None -_GETGLOSSARYREQUEST.fields_by_name["name"]._options = None -_DELETEGLOSSARYREQUEST.fields_by_name["name"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["parent"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["page_size"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["page_token"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["filter"]._options = None - -_TRANSLATIONSERVICE = _descriptor.ServiceDescriptor( - name="TranslationService", - full_name="google.cloud.translation.v3.TranslationService", - file=DESCRIPTOR, - index=0, - serialized_options=b"\312A\030translate.googleapis.com\322A`https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translation", - create_key=_descriptor._internal_create_key, - serialized_start=5514, - serialized_end=7576, - methods=[ - _descriptor.MethodDescriptor( - name="TranslateText", - full_name="google.cloud.translation.v3.TranslationService.TranslateText", - index=0, - containing_service=None, - input_type=_TRANSLATETEXTREQUEST, - output_type=_TRANSLATETEXTRESPONSE, - serialized_options=b'\202\323\344\223\002b"1/v3/{parent=projects/*/locations/*}:translateText:\001*Z*"%/v3/{parent=projects/*}:translateText:\001*\332A$parent,target_language_code,contents\332AIparent,model,mime_type,source_language_code,target_language_code,contents', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DetectLanguage", - full_name="google.cloud.translation.v3.TranslationService.DetectLanguage", - index=1, - containing_service=None, - input_type=_DETECTLANGUAGEREQUEST, - output_type=_DETECTLANGUAGERESPONSE, - serialized_options=b'\202\323\344\223\002d"2/v3/{parent=projects/*/locations/*}:detectLanguage:\001*Z+"&/v3/{parent=projects/*}:detectLanguage:\001*\332A\036parent,model,mime_type,content', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="GetSupportedLanguages", - full_name="google.cloud.translation.v3.TranslationService.GetSupportedLanguages", - index=2, - containing_service=None, - input_type=_GETSUPPORTEDLANGUAGESREQUEST, - output_type=_SUPPORTEDLANGUAGES, - serialized_options=b'\202\323\344\223\002f\0226/v3/{parent=projects/*/locations/*}/supportedLanguagesZ,\022*/v3/{parent=projects/*}/supportedLanguages\332A"parent,model,display_language_code', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="BatchTranslateText", - full_name="google.cloud.translation.v3.TranslationService.BatchTranslateText", - index=3, - containing_service=None, - input_type=_BATCHTRANSLATETEXTREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b'\202\323\344\223\002;"6/v3/{parent=projects/*/locations/*}:batchTranslateText:\001*\312A0\n\026BatchTranslateResponse\022\026BatchTranslateMetadata', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="CreateGlossary", - full_name="google.cloud.translation.v3.TranslationService.CreateGlossary", - index=4, - containing_service=None, - input_type=_CREATEGLOSSARYREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b'\202\323\344\223\002:"./v3/{parent=projects/*/locations/*}/glossaries:\010glossary\332A\017parent,glossary\312A"\n\010Glossary\022\026CreateGlossaryMetadata', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="ListGlossaries", - full_name="google.cloud.translation.v3.TranslationService.ListGlossaries", - index=5, - containing_service=None, - input_type=_LISTGLOSSARIESREQUEST, - output_type=_LISTGLOSSARIESRESPONSE, - serialized_options=b"\202\323\344\223\0020\022./v3/{parent=projects/*/locations/*}/glossaries\332A\006parent", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="GetGlossary", - full_name="google.cloud.translation.v3.TranslationService.GetGlossary", - index=6, - containing_service=None, - input_type=_GETGLOSSARYREQUEST, - output_type=_GLOSSARY, - serialized_options=b"\202\323\344\223\0020\022./v3/{name=projects/*/locations/*/glossaries/*}\332A\004name", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DeleteGlossary", - full_name="google.cloud.translation.v3.TranslationService.DeleteGlossary", - index=7, - containing_service=None, - input_type=_DELETEGLOSSARYREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b"\202\323\344\223\0020*./v3/{name=projects/*/locations/*/glossaries/*}\332A\004name\312A0\n\026DeleteGlossaryResponse\022\026DeleteGlossaryMetadata", - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_TRANSLATIONSERVICE) - -DESCRIPTOR.services_by_name["TranslationService"] = _TRANSLATIONSERVICE - -# @@protoc_insertion_point(module_scope) diff --git a/google/cloud/translate_v3beta1/proto/translation_service_pb2.py b/google/cloud/translate_v3beta1/proto/translation_service_pb2.py deleted file mode 100644 index 7eebb631..00000000 --- a/google/cloud/translate_v3beta1/proto/translation_service_pb2.py +++ /dev/null @@ -1,4042 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/translate_v3beta1/proto/translation_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.longrunning import ( - operations_pb2 as google_dot_longrunning_dot_operations__pb2, -) -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="google/cloud/translate_v3beta1/proto/translation_service.proto", - package="google.cloud.translation.v3beta1", - syntax="proto3", - serialized_options=b'\n"com.google.cloud.translate.v3beta1B\027TranslationServiceProtoP\001ZGgoogle.golang.org/genproto/googleapis/cloud/translate/v3beta1;translate\370\001\001\252\002\036Google.Cloud.Translate.V3Beta1\312\002\036Google\\Cloud\\Translate\\V3beta1\352\002!Google::Cloud::Translate::V3beta1', - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n>google/cloud/translate_v3beta1/proto/translation_service.proto\x12 google.cloud.translation.v3beta1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a#google/longrunning/operations.proto\x1a\x1fgoogle/protobuf/timestamp.proto"N\n\x1bTranslateTextGlossaryConfig\x12\x15\n\x08glossary\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12\x18\n\x0bignore_case\x18\x02 \x01(\x08\x42\x03\xe0\x41\x01"\xbf\x03\n\x14TranslateTextRequest\x12\x15\n\x08\x63ontents\x18\x01 \x03(\tB\x03\xe0\x41\x02\x12\x16\n\tmime_type\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12!\n\x14source_language_code\x18\x04 \x01(\tB\x03\xe0\x41\x01\x12!\n\x14target_language_code\x18\x05 \x01(\tB\x03\xe0\x41\x02\x12\x39\n\x06parent\x18\x08 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x12\n\x05model\x18\x06 \x01(\tB\x03\xe0\x41\x01\x12[\n\x0fglossary_config\x18\x07 \x01(\x0b\x32=.google.cloud.translation.v3beta1.TranslateTextGlossaryConfigB\x03\xe0\x41\x01\x12W\n\x06labels\x18\n \x03(\x0b\x32\x42.google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\xaa\x01\n\x15TranslateTextResponse\x12\x43\n\x0ctranslations\x18\x01 \x03(\x0b\x32-.google.cloud.translation.v3beta1.Translation\x12L\n\x15glossary_translations\x18\x03 \x03(\x0b\x32-.google.cloud.translation.v3beta1.Translation"\xad\x01\n\x0bTranslation\x12\x17\n\x0ftranslated_text\x18\x01 \x01(\t\x12\r\n\x05model\x18\x02 \x01(\t\x12\x1e\n\x16\x64\x65tected_language_code\x18\x04 \x01(\t\x12V\n\x0fglossary_config\x18\x03 \x01(\x0b\x32=.google.cloud.translation.v3beta1.TranslateTextGlossaryConfig"\x9f\x02\n\x15\x44\x65tectLanguageRequest\x12\x39\n\x06parent\x18\x05 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x12\n\x05model\x18\x04 \x01(\tB\x03\xe0\x41\x01\x12\x11\n\x07\x63ontent\x18\x01 \x01(\tH\x00\x12\x16\n\tmime_type\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12S\n\x06labels\x18\x06 \x03(\x0b\x32\x43.google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06source"=\n\x10\x44\x65tectedLanguage\x12\x15\n\rlanguage_code\x18\x01 \x01(\t\x12\x12\n\nconfidence\x18\x02 \x01(\x02"_\n\x16\x44\x65tectLanguageResponse\x12\x45\n\tlanguages\x18\x01 \x03(\x0b\x32\x32.google.cloud.translation.v3beta1.DetectedLanguage"\x91\x01\n\x1cGetSupportedLanguagesRequest\x12\x39\n\x06parent\x18\x03 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12"\n\x15\x64isplay_language_code\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12\x12\n\x05model\x18\x02 \x01(\tB\x03\xe0\x41\x01"\\\n\x12SupportedLanguages\x12\x46\n\tlanguages\x18\x01 \x03(\x0b\x32\x33.google.cloud.translation.v3beta1.SupportedLanguage"p\n\x11SupportedLanguage\x12\x15\n\rlanguage_code\x18\x01 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x02 \x01(\t\x12\x16\n\x0esupport_source\x18\x03 \x01(\x08\x12\x16\n\x0esupport_target\x18\x04 \x01(\x08"#\n\tGcsSource\x12\x16\n\tinput_uri\x18\x01 \x01(\tB\x03\xe0\x41\x02"r\n\x0bInputConfig\x12\x16\n\tmime_type\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12\x41\n\ngcs_source\x18\x02 \x01(\x0b\x32+.google.cloud.translation.v3beta1.GcsSourceH\x00\x42\x08\n\x06source"0\n\x0eGcsDestination\x12\x1e\n\x11output_uri_prefix\x18\x01 \x01(\tB\x03\xe0\x41\x02"j\n\x0cOutputConfig\x12K\n\x0fgcs_destination\x18\x01 \x01(\x0b\x32\x30.google.cloud.translation.v3beta1.GcsDestinationH\x00\x42\r\n\x0b\x64\x65stination"\xa6\x06\n\x19\x42\x61tchTranslateTextRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12!\n\x14source_language_code\x18\x02 \x01(\tB\x03\xe0\x41\x02\x12"\n\x15target_language_codes\x18\x03 \x03(\tB\x03\xe0\x41\x02\x12\\\n\x06models\x18\x04 \x03(\x0b\x32G.google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntryB\x03\xe0\x41\x01\x12I\n\rinput_configs\x18\x05 \x03(\x0b\x32-.google.cloud.translation.v3beta1.InputConfigB\x03\xe0\x41\x02\x12J\n\routput_config\x18\x06 \x01(\x0b\x32..google.cloud.translation.v3beta1.OutputConfigB\x03\xe0\x41\x02\x12\x64\n\nglossaries\x18\x07 \x03(\x0b\x32K.google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntryB\x03\xe0\x41\x01\x12\\\n\x06labels\x18\t \x03(\x0b\x32G.google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntryB\x03\xe0\x41\x01\x1a-\n\x0bModelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1ap\n\x0fGlossariesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12L\n\x05value\x18\x02 \x01(\x0b\x32=.google.cloud.translation.v3beta1.TranslateTextGlossaryConfig:\x02\x38\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\xd3\x02\n\x16\x42\x61tchTranslateMetadata\x12M\n\x05state\x18\x01 \x01(\x0e\x32>.google.cloud.translation.v3beta1.BatchTranslateMetadata.State\x12\x1d\n\x15translated_characters\x18\x02 \x01(\x03\x12\x19\n\x11\x66\x61iled_characters\x18\x03 \x01(\x03\x12\x18\n\x10total_characters\x18\x04 \x01(\x03\x12/\n\x0bsubmit_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\xcb\x01\n\x16\x42\x61tchTranslateResponse\x12\x18\n\x10total_characters\x18\x01 \x01(\x03\x12\x1d\n\x15translated_characters\x18\x02 \x01(\x03\x12\x19\n\x11\x66\x61iled_characters\x18\x03 \x01(\x03\x12/\n\x0bsubmit_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"b\n\x13GlossaryInputConfig\x12\x41\n\ngcs_source\x18\x01 \x01(\x0b\x32+.google.cloud.translation.v3beta1.GcsSourceH\x00\x42\x08\n\x06source"\x8e\x05\n\x08Glossary\x12\x11\n\x04name\x18\x01 \x01(\tB\x03\xe0\x41\x02\x12T\n\rlanguage_pair\x18\x03 \x01(\x0b\x32;.google.cloud.translation.v3beta1.Glossary.LanguageCodePairH\x00\x12Y\n\x12language_codes_set\x18\x04 \x01(\x0b\x32;.google.cloud.translation.v3beta1.Glossary.LanguageCodesSetH\x00\x12K\n\x0cinput_config\x18\x05 \x01(\x0b\x32\x35.google.cloud.translation.v3beta1.GlossaryInputConfig\x12\x18\n\x0b\x65ntry_count\x18\x06 \x01(\x05\x42\x03\xe0\x41\x03\x12\x34\n\x0bsubmit_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x12\x31\n\x08\x65nd_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03\x1aN\n\x10LanguageCodePair\x12\x1c\n\x14source_language_code\x18\x01 \x01(\t\x12\x1c\n\x14target_language_code\x18\x02 \x01(\t\x1a*\n\x10LanguageCodesSet\x12\x16\n\x0elanguage_codes\x18\x01 \x03(\t:e\xea\x41\x62\n!translate.googleapis.com/Glossary\x12=projects/{project}/locations/{location}/glossaries/{glossary}B\x0b\n\tlanguages"\x95\x01\n\x15\x43reateGlossaryRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x41\n\x08glossary\x18\x02 \x01(\x0b\x32*.google.cloud.translation.v3beta1.GlossaryB\x03\xe0\x41\x02"M\n\x12GetGlossaryRequest\x12\x37\n\x04name\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!translate.googleapis.com/Glossary"P\n\x15\x44\x65leteGlossaryRequest\x12\x37\n\x04name\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!translate.googleapis.com/Glossary"\x98\x01\n\x15ListGlossariesRequest\x12\x39\n\x06parent\x18\x01 \x01(\tB)\xe0\x41\x02\xfa\x41#\n!locations.googleapis.com/Location\x12\x16\n\tpage_size\x18\x02 \x01(\x05\x42\x03\xe0\x41\x01\x12\x17\n\npage_token\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12\x13\n\x06\x66ilter\x18\x04 \x01(\tB\x03\xe0\x41\x01"q\n\x16ListGlossariesResponse\x12>\n\nglossaries\x18\x01 \x03(\x0b\x32*.google.cloud.translation.v3beta1.Glossary\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t"\x8d\x02\n\x16\x43reateGlossaryMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12M\n\x05state\x18\x02 \x01(\x0e\x32>.google.cloud.translation.v3beta1.CreateGlossaryMetadata.State\x12/\n\x0bsubmit_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\x8d\x02\n\x16\x44\x65leteGlossaryMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12M\n\x05state\x18\x02 \x01(\x0e\x32>.google.cloud.translation.v3beta1.DeleteGlossaryMetadata.State\x12/\n\x0bsubmit_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp"e\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0e\n\nCANCELLING\x10\x04\x12\r\n\tCANCELLED\x10\x05"\x85\x01\n\x16\x44\x65leteGlossaryResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\x0bsubmit_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp2\x9a\x10\n\x12TranslationService\x12\xf4\x01\n\rTranslateText\x12\x36.google.cloud.translation.v3beta1.TranslateTextRequest\x1a\x37.google.cloud.translation.v3beta1.TranslateTextResponse"r\x82\xd3\xe4\x93\x02l"6/v3beta1/{parent=projects/*/locations/*}:translateText:\x01*Z/"*/v3beta1/{parent=projects/*}:translateText:\x01*\x12\x93\x02\n\x0e\x44\x65tectLanguage\x12\x37.google.cloud.translation.v3beta1.DetectLanguageRequest\x1a\x38.google.cloud.translation.v3beta1.DetectLanguageResponse"\x8d\x01\x82\xd3\xe4\x93\x02n"7/v3beta1/{parent=projects/*/locations/*}:detectLanguage:\x01*Z0"+/v3beta1/{parent=projects/*}:detectLanguage:\x01*\xda\x41\x16parent,model,mime_type\x12\xab\x02\n\x15GetSupportedLanguages\x12>.google.cloud.translation.v3beta1.GetSupportedLanguagesRequest\x1a\x34.google.cloud.translation.v3beta1.SupportedLanguages"\x9b\x01\x82\xd3\xe4\x93\x02p\x12;/v3beta1/{parent=projects/*/locations/*}/supportedLanguagesZ1\x12//v3beta1/{parent=projects/*}/supportedLanguages\xda\x41"parent,display_language_code,model\x12\xeb\x01\n\x12\x42\x61tchTranslateText\x12;.google.cloud.translation.v3beta1.BatchTranslateTextRequest\x1a\x1d.google.longrunning.Operation"y\x82\xd3\xe4\x93\x02@";/v3beta1/{parent=projects/*/locations/*}:batchTranslateText:\x01*\xca\x41\x30\n\x16\x42\x61tchTranslateResponse\x12\x16\x42\x61tchTranslateMetadata\x12\xe6\x01\n\x0e\x43reateGlossary\x12\x37.google.cloud.translation.v3beta1.CreateGlossaryRequest\x1a\x1d.google.longrunning.Operation"|\x82\xd3\xe4\x93\x02?"3/v3beta1/{parent=projects/*/locations/*}/glossaries:\x08glossary\xda\x41\x0fparent,glossary\xca\x41"\n\x08Glossary\x12\x16\x43reateGlossaryMetadata\x12\xd9\x01\n\x0eListGlossaries\x12\x37.google.cloud.translation.v3beta1.ListGlossariesRequest\x1a\x38.google.cloud.translation.v3beta1.ListGlossariesResponse"T\x82\xd3\xe4\x93\x02\x35\x12\x33/v3beta1/{parent=projects/*/locations/*}/glossaries\xda\x41\x06parent\xda\x41\rparent,filter\x12\xb3\x01\n\x0bGetGlossary\x12\x34.google.cloud.translation.v3beta1.GetGlossaryRequest\x1a*.google.cloud.translation.v3beta1.Glossary"B\x82\xd3\xe4\x93\x02\x35\x12\x33/v3beta1/{name=projects/*/locations/*/glossaries/*}\xda\x41\x04name\x12\xdf\x01\n\x0e\x44\x65leteGlossary\x12\x37.google.cloud.translation.v3beta1.DeleteGlossaryRequest\x1a\x1d.google.longrunning.Operation"u\x82\xd3\xe4\x93\x02\x35*3/v3beta1/{name=projects/*/locations/*/glossaries/*}\xda\x41\x04name\xca\x41\x30\n\x16\x44\x65leteGlossaryResponse\x12\x16\x44\x65leteGlossaryMetadata\x1a~\xca\x41\x18translate.googleapis.com\xd2\x41`https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translationB\xf1\x01\n"com.google.cloud.translate.v3beta1B\x17TranslationServiceProtoP\x01ZGgoogle.golang.org/genproto/googleapis/cloud/translate/v3beta1;translate\xf8\x01\x01\xaa\x02\x1eGoogle.Cloud.Translate.V3Beta1\xca\x02\x1eGoogle\\Cloud\\Translate\\V3beta1\xea\x02!Google::Cloud::Translate::V3beta1b\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_longrunning_dot_operations__pb2.DESCRIPTOR, - google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR, - ], -) - - -_BATCHTRANSLATEMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3329, - serialized_end=3430, -) -_sym_db.RegisterEnumDescriptor(_BATCHTRANSLATEMETADATA_STATE) - -_CREATEGLOSSARYMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3329, - serialized_end=3430, -) -_sym_db.RegisterEnumDescriptor(_CREATEGLOSSARYMETADATA_STATE) - -_DELETEGLOSSARYMETADATA_STATE = _descriptor.EnumDescriptor( - name="State", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata.State", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="STATE_UNSPECIFIED", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="RUNNING", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="SUCCEEDED", - index=2, - number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="FAILED", - index=3, - number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLING", - index=4, - number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="CANCELLED", - index=5, - number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=3329, - serialized_end=3430, -) -_sym_db.RegisterEnumDescriptor(_DELETEGLOSSARYMETADATA_STATE) - - -_TRANSLATETEXTGLOSSARYCONFIG = _descriptor.Descriptor( - name="TranslateTextGlossaryConfig", - full_name="google.cloud.translation.v3beta1.TranslateTextGlossaryConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="glossary", - full_name="google.cloud.translation.v3beta1.TranslateTextGlossaryConfig.glossary", - 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", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="ignore_case", - full_name="google.cloud.translation.v3beta1.TranslateTextGlossaryConfig.ignore_case", - index=1, - number=2, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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=285, - serialized_end=363, -) - - -_TRANSLATETEXTREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=768, - serialized_end=813, -) - -_TRANSLATETEXTREQUEST = _descriptor.Descriptor( - name="TranslateTextRequest", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="contents", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.contents", - index=0, - number=1, - 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\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="mime_type", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.mime_type", - 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="source_language_code", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.source_language_code", - 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, - ), - _descriptor.FieldDescriptor( - name="target_language_code", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.target_language_code", - index=3, - number=5, - 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="parent", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.parent", - index=4, - number=8, - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.model", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossary_config", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.glossary_config", - index=6, - number=7, - 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="labels", - full_name="google.cloud.translation.v3beta1.TranslateTextRequest.labels", - index=7, - number=10, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_TRANSLATETEXTREQUEST_LABELSENTRY,], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=366, - serialized_end=813, -) - - -_TRANSLATETEXTRESPONSE = _descriptor.Descriptor( - name="TranslateTextResponse", - full_name="google.cloud.translation.v3beta1.TranslateTextResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="translations", - full_name="google.cloud.translation.v3beta1.TranslateTextResponse.translations", - 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="glossary_translations", - full_name="google.cloud.translation.v3beta1.TranslateTextResponse.glossary_translations", - index=1, - 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=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=816, - serialized_end=986, -) - - -_TRANSLATION = _descriptor.Descriptor( - name="Translation", - full_name="google.cloud.translation.v3beta1.Translation", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="translated_text", - full_name="google.cloud.translation.v3beta1.Translation.translated_text", - 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="model", - full_name="google.cloud.translation.v3beta1.Translation.model", - 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="detected_language_code", - full_name="google.cloud.translation.v3beta1.Translation.detected_language_code", - 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, - ), - _descriptor.FieldDescriptor( - name="glossary_config", - full_name="google.cloud.translation.v3beta1.Translation.glossary_config", - index=3, - 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=989, - serialized_end=1162, -) - - -_DETECTLANGUAGEREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=768, - serialized_end=813, -) - -_DETECTLANGUAGEREQUEST = _descriptor.Descriptor( - name="DetectLanguageRequest", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.parent", - index=0, - number=5, - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.model", - index=1, - 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, - ), - _descriptor.FieldDescriptor( - name="content", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.content", - index=2, - 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="mime_type", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.mime_type", - index=3, - 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="labels", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.labels", - index=4, - number=6, - 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=[_DETECTLANGUAGEREQUEST_LABELSENTRY,], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3beta1.DetectLanguageRequest.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=1165, - serialized_end=1452, -) - - -_DETECTEDLANGUAGE = _descriptor.Descriptor( - name="DetectedLanguage", - full_name="google.cloud.translation.v3beta1.DetectedLanguage", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_code", - full_name="google.cloud.translation.v3beta1.DetectedLanguage.language_code", - 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="confidence", - full_name="google.cloud.translation.v3beta1.DetectedLanguage.confidence", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(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=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1454, - serialized_end=1515, -) - - -_DETECTLANGUAGERESPONSE = _descriptor.Descriptor( - name="DetectLanguageResponse", - full_name="google.cloud.translation.v3beta1.DetectLanguageResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="languages", - full_name="google.cloud.translation.v3beta1.DetectLanguageResponse.languages", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1517, - serialized_end=1612, -) - - -_GETSUPPORTEDLANGUAGESREQUEST = _descriptor.Descriptor( - name="GetSupportedLanguagesRequest", - full_name="google.cloud.translation.v3beta1.GetSupportedLanguagesRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.GetSupportedLanguagesRequest.parent", - index=0, - 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\372A#\n!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="display_language_code", - full_name="google.cloud.translation.v3beta1.GetSupportedLanguagesRequest.display_language_code", - index=1, - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="model", - full_name="google.cloud.translation.v3beta1.GetSupportedLanguagesRequest.model", - index=2, - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1615, - serialized_end=1760, -) - - -_SUPPORTEDLANGUAGES = _descriptor.Descriptor( - name="SupportedLanguages", - full_name="google.cloud.translation.v3beta1.SupportedLanguages", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="languages", - full_name="google.cloud.translation.v3beta1.SupportedLanguages.languages", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1762, - serialized_end=1854, -) - - -_SUPPORTEDLANGUAGE = _descriptor.Descriptor( - name="SupportedLanguage", - full_name="google.cloud.translation.v3beta1.SupportedLanguage", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_code", - full_name="google.cloud.translation.v3beta1.SupportedLanguage.language_code", - 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="display_name", - full_name="google.cloud.translation.v3beta1.SupportedLanguage.display_name", - 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="support_source", - full_name="google.cloud.translation.v3beta1.SupportedLanguage.support_source", - index=2, - number=3, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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="support_target", - full_name="google.cloud.translation.v3beta1.SupportedLanguage.support_target", - index=3, - number=4, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - 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=1856, - serialized_end=1968, -) - - -_GCSSOURCE = _descriptor.Descriptor( - name="GcsSource", - full_name="google.cloud.translation.v3beta1.GcsSource", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="input_uri", - full_name="google.cloud.translation.v3beta1.GcsSource.input_uri", - 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", - 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=1970, - serialized_end=2005, -) - - -_INPUTCONFIG = _descriptor.Descriptor( - name="InputConfig", - full_name="google.cloud.translation.v3beta1.InputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="mime_type", - full_name="google.cloud.translation.v3beta1.InputConfig.mime_type", - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="gcs_source", - full_name="google.cloud.translation.v3beta1.InputConfig.gcs_source", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3beta1.InputConfig.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=2007, - serialized_end=2121, -) - - -_GCSDESTINATION = _descriptor.Descriptor( - name="GcsDestination", - full_name="google.cloud.translation.v3beta1.GcsDestination", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="output_uri_prefix", - full_name="google.cloud.translation.v3beta1.GcsDestination.output_uri_prefix", - 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", - 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=2123, - serialized_end=2171, -) - - -_OUTPUTCONFIG = _descriptor.Descriptor( - name="OutputConfig", - full_name="google.cloud.translation.v3beta1.OutputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="gcs_destination", - full_name="google.cloud.translation.v3beta1.OutputConfig.gcs_destination", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="destination", - full_name="google.cloud.translation.v3beta1.OutputConfig.destination", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=2173, - serialized_end=2279, -) - - -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY = _descriptor.Descriptor( - name="ModelsEntry", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2882, - serialized_end=2927, -) - -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY = _descriptor.Descriptor( - name="GlossariesEntry", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2929, - serialized_end=3041, -) - -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY = _descriptor.Descriptor( - name="LabelsEntry", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntry", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="key", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntry.key", - 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="value", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntry.value", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=b"8\001", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=768, - serialized_end=813, -) - -_BATCHTRANSLATETEXTREQUEST = _descriptor.Descriptor( - name="BatchTranslateTextRequest", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="source_language_code", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.source_language_code", - 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="target_language_codes", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.target_language_codes", - index=2, - number=3, - 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\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="models", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.models", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="input_configs", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.input_configs", - index=4, - number=5, - 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=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="output_config", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.output_config", - 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=b"\340A\002", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossaries", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.glossaries", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="labels", - full_name="google.cloud.translation.v3beta1.BatchTranslateTextRequest.labels", - index=7, - number=9, - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[ - _BATCHTRANSLATETEXTREQUEST_MODELSENTRY, - _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY, - _BATCHTRANSLATETEXTREQUEST_LABELSENTRY, - ], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=2282, - serialized_end=3088, -) - - -_BATCHTRANSLATEMETADATA = _descriptor.Descriptor( - name="BatchTranslateMetadata", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="state", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.state", - 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, - ), - _descriptor.FieldDescriptor( - name="translated_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.translated_characters", - 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="failed_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.failed_characters", - 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="total_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.total_characters", - index=3, - number=4, - 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="submit_time", - full_name="google.cloud.translation.v3beta1.BatchTranslateMetadata.submit_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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[_BATCHTRANSLATEMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=3091, - serialized_end=3430, -) - - -_BATCHTRANSLATERESPONSE = _descriptor.Descriptor( - name="BatchTranslateResponse", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="total_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.total_characters", - 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="translated_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.translated_characters", - 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="failed_characters", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.failed_characters", - 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="submit_time", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.submit_time", - 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=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.cloud.translation.v3beta1.BatchTranslateResponse.end_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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=3433, - serialized_end=3636, -) - - -_GLOSSARYINPUTCONFIG = _descriptor.Descriptor( - name="GlossaryInputConfig", - full_name="google.cloud.translation.v3beta1.GlossaryInputConfig", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="gcs_source", - full_name="google.cloud.translation.v3beta1.GlossaryInputConfig.gcs_source", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="source", - full_name="google.cloud.translation.v3beta1.GlossaryInputConfig.source", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=3638, - serialized_end=3736, -) - - -_GLOSSARY_LANGUAGECODEPAIR = _descriptor.Descriptor( - name="LanguageCodePair", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodePair", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="source_language_code", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodePair.source_language_code", - 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="target_language_code", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodePair.target_language_code", - 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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4155, - serialized_end=4233, -) - -_GLOSSARY_LANGUAGECODESSET = _descriptor.Descriptor( - name="LanguageCodesSet", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodesSet", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="language_codes", - full_name="google.cloud.translation.v3beta1.Glossary.LanguageCodesSet.language_codes", - index=0, - number=1, - 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=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=4235, - serialized_end=4277, -) - -_GLOSSARY = _descriptor.Descriptor( - name="Glossary", - full_name="google.cloud.translation.v3beta1.Glossary", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.Glossary.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", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="language_pair", - full_name="google.cloud.translation.v3beta1.Glossary.language_pair", - index=1, - 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, - ), - _descriptor.FieldDescriptor( - name="language_codes_set", - full_name="google.cloud.translation.v3beta1.Glossary.language_codes_set", - 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, - ), - _descriptor.FieldDescriptor( - name="input_config", - full_name="google.cloud.translation.v3beta1.Glossary.input_config", - 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, - ), - _descriptor.FieldDescriptor( - name="entry_count", - full_name="google.cloud.translation.v3beta1.Glossary.entry_count", - 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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3beta1.Glossary.submit_time", - index=5, - number=7, - 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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_time", - full_name="google.cloud.translation.v3beta1.Glossary.end_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\003", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[_GLOSSARY_LANGUAGECODEPAIR, _GLOSSARY_LANGUAGECODESSET,], - enum_types=[], - serialized_options=b"\352Ab\n!translate.googleapis.com/Glossary\022=projects/{project}/locations/{location}/glossaries/{glossary}", - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name="languages", - full_name="google.cloud.translation.v3beta1.Glossary.languages", - index=0, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - ), - ], - serialized_start=3739, - serialized_end=4393, -) - - -_CREATEGLOSSARYREQUEST = _descriptor.Descriptor( - name="CreateGlossaryRequest", - full_name="google.cloud.translation.v3beta1.CreateGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.CreateGlossaryRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="glossary", - full_name="google.cloud.translation.v3beta1.CreateGlossaryRequest.glossary", - 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=4396, - serialized_end=4545, -) - - -_GETGLOSSARYREQUEST = _descriptor.Descriptor( - name="GetGlossaryRequest", - full_name="google.cloud.translation.v3beta1.GetGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.GetGlossaryRequest.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!translate.googleapis.com/Glossary", - 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=4547, - serialized_end=4624, -) - - -_DELETEGLOSSARYREQUEST = _descriptor.Descriptor( - name="DeleteGlossaryRequest", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryRequest.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!translate.googleapis.com/Glossary", - 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=4626, - serialized_end=4706, -) - - -_LISTGLOSSARIESREQUEST = _descriptor.Descriptor( - name="ListGlossariesRequest", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="parent", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest.parent", - 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!locations.googleapis.com/Location", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_size", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest.page_size", - 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=b"\340A\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="page_token", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest.page_token", - 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\001", - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="filter", - full_name="google.cloud.translation.v3beta1.ListGlossariesRequest.filter", - 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=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=4709, - serialized_end=4861, -) - - -_LISTGLOSSARIESRESPONSE = _descriptor.Descriptor( - name="ListGlossariesResponse", - full_name="google.cloud.translation.v3beta1.ListGlossariesResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="glossaries", - full_name="google.cloud.translation.v3beta1.ListGlossariesResponse.glossaries", - 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.cloud.translation.v3beta1.ListGlossariesResponse.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, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4863, - serialized_end=4976, -) - - -_CREATEGLOSSARYMETADATA = _descriptor.Descriptor( - name="CreateGlossaryMetadata", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata.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="state", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata.state", - index=1, - number=2, - 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, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3beta1.CreateGlossaryMetadata.submit_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=[_CREATEGLOSSARYMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=4979, - serialized_end=5248, -) - - -_DELETEGLOSSARYMETADATA = _descriptor.Descriptor( - name="DeleteGlossaryMetadata", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata.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="state", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata.state", - index=1, - number=2, - 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, - ), - _descriptor.FieldDescriptor( - name="submit_time", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryMetadata.submit_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=[_DELETEGLOSSARYMETADATA_STATE,], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=5251, - serialized_end=5520, -) - - -_DELETEGLOSSARYRESPONSE = _descriptor.Descriptor( - name="DeleteGlossaryResponse", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryResponse.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="submit_time", - full_name="google.cloud.translation.v3beta1.DeleteGlossaryResponse.submit_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.cloud.translation.v3beta1.DeleteGlossaryResponse.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=5523, - serialized_end=5656, -) - -_TRANSLATETEXTREQUEST_LABELSENTRY.containing_type = _TRANSLATETEXTREQUEST -_TRANSLATETEXTREQUEST.fields_by_name[ - "glossary_config" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_TRANSLATETEXTREQUEST.fields_by_name[ - "labels" -].message_type = _TRANSLATETEXTREQUEST_LABELSENTRY -_TRANSLATETEXTRESPONSE.fields_by_name["translations"].message_type = _TRANSLATION -_TRANSLATETEXTRESPONSE.fields_by_name[ - "glossary_translations" -].message_type = _TRANSLATION -_TRANSLATION.fields_by_name[ - "glossary_config" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_DETECTLANGUAGEREQUEST_LABELSENTRY.containing_type = _DETECTLANGUAGEREQUEST -_DETECTLANGUAGEREQUEST.fields_by_name[ - "labels" -].message_type = _DETECTLANGUAGEREQUEST_LABELSENTRY -_DETECTLANGUAGEREQUEST.oneofs_by_name["source"].fields.append( - _DETECTLANGUAGEREQUEST.fields_by_name["content"] -) -_DETECTLANGUAGEREQUEST.fields_by_name[ - "content" -].containing_oneof = _DETECTLANGUAGEREQUEST.oneofs_by_name["source"] -_DETECTLANGUAGERESPONSE.fields_by_name["languages"].message_type = _DETECTEDLANGUAGE -_SUPPORTEDLANGUAGES.fields_by_name["languages"].message_type = _SUPPORTEDLANGUAGE -_INPUTCONFIG.fields_by_name["gcs_source"].message_type = _GCSSOURCE -_INPUTCONFIG.oneofs_by_name["source"].fields.append( - _INPUTCONFIG.fields_by_name["gcs_source"] -) -_INPUTCONFIG.fields_by_name[ - "gcs_source" -].containing_oneof = _INPUTCONFIG.oneofs_by_name["source"] -_OUTPUTCONFIG.fields_by_name["gcs_destination"].message_type = _GCSDESTINATION -_OUTPUTCONFIG.oneofs_by_name["destination"].fields.append( - _OUTPUTCONFIG.fields_by_name["gcs_destination"] -) -_OUTPUTCONFIG.fields_by_name[ - "gcs_destination" -].containing_oneof = _OUTPUTCONFIG.oneofs_by_name["destination"] -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY.fields_by_name[ - "value" -].message_type = _TRANSLATETEXTGLOSSARYCONFIG -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY.containing_type = _BATCHTRANSLATETEXTREQUEST -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "models" -].message_type = _BATCHTRANSLATETEXTREQUEST_MODELSENTRY -_BATCHTRANSLATETEXTREQUEST.fields_by_name["input_configs"].message_type = _INPUTCONFIG -_BATCHTRANSLATETEXTREQUEST.fields_by_name["output_config"].message_type = _OUTPUTCONFIG -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "glossaries" -].message_type = _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY -_BATCHTRANSLATETEXTREQUEST.fields_by_name[ - "labels" -].message_type = _BATCHTRANSLATETEXTREQUEST_LABELSENTRY -_BATCHTRANSLATEMETADATA.fields_by_name[ - "state" -].enum_type = _BATCHTRANSLATEMETADATA_STATE -_BATCHTRANSLATEMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_BATCHTRANSLATEMETADATA_STATE.containing_type = _BATCHTRANSLATEMETADATA -_BATCHTRANSLATERESPONSE.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_BATCHTRANSLATERESPONSE.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARYINPUTCONFIG.fields_by_name["gcs_source"].message_type = _GCSSOURCE -_GLOSSARYINPUTCONFIG.oneofs_by_name["source"].fields.append( - _GLOSSARYINPUTCONFIG.fields_by_name["gcs_source"] -) -_GLOSSARYINPUTCONFIG.fields_by_name[ - "gcs_source" -].containing_oneof = _GLOSSARYINPUTCONFIG.oneofs_by_name["source"] -_GLOSSARY_LANGUAGECODEPAIR.containing_type = _GLOSSARY -_GLOSSARY_LANGUAGECODESSET.containing_type = _GLOSSARY -_GLOSSARY.fields_by_name["language_pair"].message_type = _GLOSSARY_LANGUAGECODEPAIR -_GLOSSARY.fields_by_name["language_codes_set"].message_type = _GLOSSARY_LANGUAGECODESSET -_GLOSSARY.fields_by_name["input_config"].message_type = _GLOSSARYINPUTCONFIG -_GLOSSARY.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARY.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_GLOSSARY.oneofs_by_name["languages"].fields.append( - _GLOSSARY.fields_by_name["language_pair"] -) -_GLOSSARY.fields_by_name["language_pair"].containing_oneof = _GLOSSARY.oneofs_by_name[ - "languages" -] -_GLOSSARY.oneofs_by_name["languages"].fields.append( - _GLOSSARY.fields_by_name["language_codes_set"] -) -_GLOSSARY.fields_by_name[ - "language_codes_set" -].containing_oneof = _GLOSSARY.oneofs_by_name["languages"] -_CREATEGLOSSARYREQUEST.fields_by_name["glossary"].message_type = _GLOSSARY -_LISTGLOSSARIESRESPONSE.fields_by_name["glossaries"].message_type = _GLOSSARY -_CREATEGLOSSARYMETADATA.fields_by_name[ - "state" -].enum_type = _CREATEGLOSSARYMETADATA_STATE -_CREATEGLOSSARYMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_CREATEGLOSSARYMETADATA_STATE.containing_type = _CREATEGLOSSARYMETADATA -_DELETEGLOSSARYMETADATA.fields_by_name[ - "state" -].enum_type = _DELETEGLOSSARYMETADATA_STATE -_DELETEGLOSSARYMETADATA.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_DELETEGLOSSARYMETADATA_STATE.containing_type = _DELETEGLOSSARYMETADATA -_DELETEGLOSSARYRESPONSE.fields_by_name[ - "submit_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_DELETEGLOSSARYRESPONSE.fields_by_name[ - "end_time" -].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -DESCRIPTOR.message_types_by_name[ - "TranslateTextGlossaryConfig" -] = _TRANSLATETEXTGLOSSARYCONFIG -DESCRIPTOR.message_types_by_name["TranslateTextRequest"] = _TRANSLATETEXTREQUEST -DESCRIPTOR.message_types_by_name["TranslateTextResponse"] = _TRANSLATETEXTRESPONSE -DESCRIPTOR.message_types_by_name["Translation"] = _TRANSLATION -DESCRIPTOR.message_types_by_name["DetectLanguageRequest"] = _DETECTLANGUAGEREQUEST -DESCRIPTOR.message_types_by_name["DetectedLanguage"] = _DETECTEDLANGUAGE -DESCRIPTOR.message_types_by_name["DetectLanguageResponse"] = _DETECTLANGUAGERESPONSE -DESCRIPTOR.message_types_by_name[ - "GetSupportedLanguagesRequest" -] = _GETSUPPORTEDLANGUAGESREQUEST -DESCRIPTOR.message_types_by_name["SupportedLanguages"] = _SUPPORTEDLANGUAGES -DESCRIPTOR.message_types_by_name["SupportedLanguage"] = _SUPPORTEDLANGUAGE -DESCRIPTOR.message_types_by_name["GcsSource"] = _GCSSOURCE -DESCRIPTOR.message_types_by_name["InputConfig"] = _INPUTCONFIG -DESCRIPTOR.message_types_by_name["GcsDestination"] = _GCSDESTINATION -DESCRIPTOR.message_types_by_name["OutputConfig"] = _OUTPUTCONFIG -DESCRIPTOR.message_types_by_name[ - "BatchTranslateTextRequest" -] = _BATCHTRANSLATETEXTREQUEST -DESCRIPTOR.message_types_by_name["BatchTranslateMetadata"] = _BATCHTRANSLATEMETADATA -DESCRIPTOR.message_types_by_name["BatchTranslateResponse"] = _BATCHTRANSLATERESPONSE -DESCRIPTOR.message_types_by_name["GlossaryInputConfig"] = _GLOSSARYINPUTCONFIG -DESCRIPTOR.message_types_by_name["Glossary"] = _GLOSSARY -DESCRIPTOR.message_types_by_name["CreateGlossaryRequest"] = _CREATEGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["GetGlossaryRequest"] = _GETGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["DeleteGlossaryRequest"] = _DELETEGLOSSARYREQUEST -DESCRIPTOR.message_types_by_name["ListGlossariesRequest"] = _LISTGLOSSARIESREQUEST -DESCRIPTOR.message_types_by_name["ListGlossariesResponse"] = _LISTGLOSSARIESRESPONSE -DESCRIPTOR.message_types_by_name["CreateGlossaryMetadata"] = _CREATEGLOSSARYMETADATA -DESCRIPTOR.message_types_by_name["DeleteGlossaryMetadata"] = _DELETEGLOSSARYMETADATA -DESCRIPTOR.message_types_by_name["DeleteGlossaryResponse"] = _DELETEGLOSSARYRESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -TranslateTextGlossaryConfig = _reflection.GeneratedProtocolMessageType( - "TranslateTextGlossaryConfig", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTGLOSSARYCONFIG, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Configures which glossary should be used for a specific target - language, and defines options for applying that glossary. - - Attributes: - glossary: - Required. Specifies the glossary used for this translation. - Use this format: projects/\ */locations/*/glossaries/\* - ignore_case: - Optional. Indicates match is case-insensitive. Default value - is false if missing. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.TranslateTextGlossaryConfig) - }, -) -_sym_db.RegisterMessage(TranslateTextGlossaryConfig) - -TranslateTextRequest = _reflection.GeneratedProtocolMessageType( - "TranslateTextRequest", - (_message.Message,), - { - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.TranslateTextRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _TRANSLATETEXTREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The request message for synchronous translation. - - Attributes: - contents: - Required. The content of the input in string format. We - recommend the total content be less than 30k codepoints. Use - BatchTranslateText for larger text. - mime_type: - Optional. The format of the source text, for example, - “text/html”, “text/plain”. If left blank, the MIME type - defaults to “text/html”. - source_language_code: - Optional. The BCP-47 language code of the input text if known, - for example, “en-US” or “sr-Latn”. Supported language codes - are listed in Language Support. If the source language isn’t - specified, the API attempts to identify the source language - automatically and returns the source language within the - response. - target_language_code: - Required. The BCP-47 language code to use for translation of - the input text, set to one of the language codes listed in - Language Support. - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-id}`` or - ``projects/{project-id}/locations/{location-id}``. For global - calls, use ``projects/{project-id}/locations/global`` or - ``projects/{project-id}``. Non-global location is required - for requests using AutoML models or custom glossaries. Models - and glossaries must be within the same region (have same - location-id), otherwise an INVALID_ARGUMENT (400) error is - returned. - model: - Optional. The ``model`` type requested for this translation. - The format depends on model type: - AutoML Translation - models: ``projects/{project-id}/locations/{location- - id}/models/{model-id}`` - General (built-in) models: - ``projects/{project-id}/locations/{location- - id}/models/general/nmt``, ``projects/{project- - id}/locations/{location-id}/models/general/base`` For global - (non-regionalized) requests, use ``location-id`` ``global``. - For example, ``projects/{project- - id}/locations/global/models/general/nmt``. If missing, the - system decides which google base model to use. - glossary_config: - Optional. Glossary to be applied. The glossary must be within - the same region (have the same location-id) as the model, - otherwise an INVALID_ARGUMENT (400) error is returned. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.TranslateTextRequest) - }, -) -_sym_db.RegisterMessage(TranslateTextRequest) -_sym_db.RegisterMessage(TranslateTextRequest.LabelsEntry) - -TranslateTextResponse = _reflection.GeneratedProtocolMessageType( - "TranslateTextResponse", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATETEXTRESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """ - Attributes: - translations: - Text translation responses with no glossary applied. This - field has the same length as [``contents``][google.cloud.trans - lation.v3beta1.TranslateTextRequest.contents]. - glossary_translations: - Text translation responses if a glossary is provided in the - request. This can be the same as [``translations``][google.clo - ud.translation.v3beta1.TranslateTextResponse.translations] if - no terms apply. This field has the same length as [``contents``][google.cloud.translation.v3beta1.TranslateTextRequest.contents]. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.TranslateTextResponse) - }, -) -_sym_db.RegisterMessage(TranslateTextResponse) - -Translation = _reflection.GeneratedProtocolMessageType( - "Translation", - (_message.Message,), - { - "DESCRIPTOR": _TRANSLATION, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """A single translation response. - - Attributes: - translated_text: - Text translated into the target language. - model: - Only present when ``model`` is present in the request. This is - same as ``model`` provided in the request. - detected_language_code: - The BCP-47 language code of source text in the initial - request, detected automatically, if no source language was - passed within the initial request. If the source language was - passed, auto-detection of the language does not occur and this - field is empty. - glossary_config: - The ``glossary_config`` used for this translation. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.Translation) - }, -) -_sym_db.RegisterMessage(Translation) - -DetectLanguageRequest = _reflection.GeneratedProtocolMessageType( - "DetectLanguageRequest", - (_message.Message,), - { - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _DETECTLANGUAGEREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DetectLanguageRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _DETECTLANGUAGEREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The request message for language detection. - - Attributes: - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project- - id}/locations/{location-id}`` or ``projects/{project-id}``. - For global calls, use ``projects/{project- - id}/locations/global`` or ``projects/{project-id}``. Only - models within the same region (has same location-id) can be - used. Otherwise an INVALID_ARGUMENT (400) error is returned. - model: - Optional. The language detection model to be used. Format: - ``projects/{project-id}/locations/{location- - id}/models/language-detection/{model-id}`` Only one language - detection model is currently supported: ``projects/{project- - id}/locations/{location-id}/models/language- - detection/default``. If not specified, the default model is - used. - source: - Required. The source of the document from which to detect the - language. - content: - The content of the input stored as a string. - mime_type: - Optional. The format of the source text, for example, - “text/html”, “text/plain”. If left blank, the MIME type - defaults to “text/html”. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DetectLanguageRequest) - }, -) -_sym_db.RegisterMessage(DetectLanguageRequest) -_sym_db.RegisterMessage(DetectLanguageRequest.LabelsEntry) - -DetectedLanguage = _reflection.GeneratedProtocolMessageType( - "DetectedLanguage", - (_message.Message,), - { - "DESCRIPTOR": _DETECTEDLANGUAGE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The response message for language detection. - - Attributes: - language_code: - The BCP-47 language code of source content in the request, - detected automatically. - confidence: - The confidence of the detection result for this language. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DetectedLanguage) - }, -) -_sym_db.RegisterMessage(DetectedLanguage) - -DetectLanguageResponse = _reflection.GeneratedProtocolMessageType( - "DetectLanguageResponse", - (_message.Message,), - { - "DESCRIPTOR": _DETECTLANGUAGERESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The response message for language detection. - - Attributes: - languages: - A list of detected languages sorted by detection confidence in - descending order. The most probable language first. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DetectLanguageResponse) - }, -) -_sym_db.RegisterMessage(DetectLanguageResponse) - -GetSupportedLanguagesRequest = _reflection.GeneratedProtocolMessageType( - "GetSupportedLanguagesRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETSUPPORTEDLANGUAGESREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The request message for discovering supported languages. - - Attributes: - parent: - Required. Project or location to make a call. Must refer to a - caller’s project. Format: ``projects/{project-id}`` or - ``projects/{project-id}/locations/{location-id}``. For global - calls, use ``projects/{project-id}/locations/global`` or - ``projects/{project-id}``. Non-global location is required - for AutoML models. Only models within the same region (have - same location-id) can be used, otherwise an INVALID_ARGUMENT - (400) error is returned. - display_language_code: - Optional. The language to use to return localized, human - readable names of supported languages. If missing, then - display names are not returned in a response. - model: - Optional. Get supported languages of this model. The format - depends on model type: - AutoML Translation models: - ``projects/{project-id}/locations/{location-id}/models/{model- - id}`` - General (built-in) models: ``projects/{project- - id}/locations/{location-id}/models/general/nmt``, - ``projects/{project-id}/locations/{location- - id}/models/general/base`` Returns languages supported by the - specified model. If missing, we get supported languages of - Google general base (PBMT) model. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GetSupportedLanguagesRequest) - }, -) -_sym_db.RegisterMessage(GetSupportedLanguagesRequest) - -SupportedLanguages = _reflection.GeneratedProtocolMessageType( - "SupportedLanguages", - (_message.Message,), - { - "DESCRIPTOR": _SUPPORTEDLANGUAGES, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The response message for discovering supported languages. - - Attributes: - languages: - A list of supported language responses. This list contains an - entry for each language the Translation API supports. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.SupportedLanguages) - }, -) -_sym_db.RegisterMessage(SupportedLanguages) - -SupportedLanguage = _reflection.GeneratedProtocolMessageType( - "SupportedLanguage", - (_message.Message,), - { - "DESCRIPTOR": _SUPPORTEDLANGUAGE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """A single supported language response corresponds to information - related to one supported language. - - Attributes: - language_code: - Supported language code, generally consisting of its ISO 639-1 - identifier, for example, ‘en’, ‘ja’. In certain cases, BCP-47 - codes including language and region identifiers are returned - (for example, ‘zh-TW’ and ‘zh-CN’) - display_name: - Human readable name of the language localized in the display - language specified in the request. - support_source: - Can be used as source language. - support_target: - Can be used as target language. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.SupportedLanguage) - }, -) -_sym_db.RegisterMessage(SupportedLanguage) - -GcsSource = _reflection.GeneratedProtocolMessageType( - "GcsSource", - (_message.Message,), - { - "DESCRIPTOR": _GCSSOURCE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The Google Cloud Storage location for the input content. - - Attributes: - input_uri: - Required. Source data URI. For example, - ``gs://my_bucket/my_object``. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GcsSource) - }, -) -_sym_db.RegisterMessage(GcsSource) - -InputConfig = _reflection.GeneratedProtocolMessageType( - "InputConfig", - (_message.Message,), - { - "DESCRIPTOR": _INPUTCONFIG, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Input configuration for BatchTranslateText request. - - Attributes: - mime_type: - Optional. Can be “text/plain” or “text/html”. For ``.tsv``, - “text/html” is used if mime_type is missing. For ``.html``, - this field must be “text/html” or empty. For ``.txt``, this - field must be “text/plain” or empty. - source: - Required. Specify the input. - gcs_source: - Required. Google Cloud Storage location for the source input. - This can be a single file (for example, ``gs://translation- - test/input.tsv``) or a wildcard (for example, - ``gs://translation-test/*``). If a file extension is ``.tsv``, - it can contain either one or two columns. The first column - (optional) is the id of the text request. If the first column - is missing, we use the row number (0-based) from the input - file as the ID in the output file. The second column is the - actual text to be translated. We recommend each row be <= 10K - Unicode codepoints, otherwise an error might be returned. Note - that the input tsv must be RFC 4180 compliant. You could use - https://github.com/Clever/csvlint to check potential - formatting errors in your tsv file. csvlint –delimiter=‘:raw- - latex:`\t`’ your_input_file.tsv The other supported file - extensions are ``.txt`` or ``.html``, which is treated as a - single large chunk of text. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.InputConfig) - }, -) -_sym_db.RegisterMessage(InputConfig) - -GcsDestination = _reflection.GeneratedProtocolMessageType( - "GcsDestination", - (_message.Message,), - { - "DESCRIPTOR": _GCSDESTINATION, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The Google Cloud Storage location for the output content. - - Attributes: - output_uri_prefix: - Required. There must be no files under ‘output_uri_prefix’. - ‘output_uri_prefix’ must end with “/” and start with “gs://”, - otherwise an INVALID_ARGUMENT (400) error is returned. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GcsDestination) - }, -) -_sym_db.RegisterMessage(GcsDestination) - -OutputConfig = _reflection.GeneratedProtocolMessageType( - "OutputConfig", - (_message.Message,), - { - "DESCRIPTOR": _OUTPUTCONFIG, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Output configuration for BatchTranslateText request. - - Attributes: - destination: - Required. The destination of output. - gcs_destination: - Google Cloud Storage destination for output content. For every - single input file (for example, gs://a/b/c.[extension]), we - generate at most 2 \* n output files. (n is the # of - target_language_codes in the BatchTranslateTextRequest). - Output files (tsv) generated are compliant with RFC 4180 - except that record delimiters are ``\\\\n`` instead of - ``\\\\r\\\\n``. We don’t provide any way to - change record delimiters. While the input files are being - processed, we write/update an index file ‘index.csv’ under - ‘output_uri_prefix’ (for example, gs://translation- - test/index.csv) The index file is generated/updated as new - files are being translated. The format is: - input_file,target_language_code,translations_file,errors_file, - glossary_translations_file,glossary_errors_file input_file is - one file we matched using gcs_source.input_uri. - target_language_code is provided in the request. - translations_file contains the translations. (details provided - below) errors_file contains the errors during processing of - the file. (details below). Both translations_file and - errors_file could be empty strings if we have no content to - output. glossary_translations_file and glossary_errors_file - are always empty strings if the input_file is tsv. They could - also be empty if we have no content to output. Once a row is - present in index.csv, the input/output matching never changes. - Callers should also expect all the content in input_file are - processed and ready to be consumed (that is, no partial output - file is written). The format of translations_file (for target - language code ‘trg’) is: - gs://translation_test/a_b_c\_‘trg’\_translations.[extension] - If the input file extension is tsv, the output has the - following columns: Column 1: ID of the request provided in the - input, if it’s not provided in the input, then the input row - number is used (0-based). Column 2: source sentence. Column 3: - translation without applying a glossary. Empty string if there - is an error. Column 4 (only present if a glossary is provided - in the request): translation after applying the glossary. - Empty string if there is an error applying the glossary. Could - be same string as column 3 if there is no glossary applied. - If input file extension is a txt or html, the translation is - directly written to the output file. If glossary is requested, - a separate glossary_translations_file has format of gs://trans - lation_test/a_b_c\_‘trg’\_glossary_translations.[extension] - The format of errors file (for target language code ‘trg’) is: - gs://translation_test/a_b_c\_‘trg’\_errors.[extension] If the - input file extension is tsv, errors_file contains the - following: Column 1: ID of the request provided in the input, - if it’s not provided in the input, then the input row number - is used (0-based). Column 2: source sentence. Column 3: Error - detail for the translation. Could be empty. Column 4 (only - present if a glossary is provided in the request): Error when - applying the glossary. If the input file extension is txt or - html, glossary_error_file will be generated that contains - error details. glossary_error_file has format of gs://translat - ion_test/a_b_c\_‘trg’\_glossary_errors.[extension] - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.OutputConfig) - }, -) -_sym_db.RegisterMessage(OutputConfig) - -BatchTranslateTextRequest = _reflection.GeneratedProtocolMessageType( - "BatchTranslateTextRequest", - (_message.Message,), - { - "ModelsEntry": _reflection.GeneratedProtocolMessageType( - "ModelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_MODELSENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateTextRequest.ModelsEntry) - }, - ), - "GlossariesEntry": _reflection.GeneratedProtocolMessageType( - "GlossariesEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateTextRequest.GlossariesEntry) - }, - ), - "LabelsEntry": _reflection.GeneratedProtocolMessageType( - "LabelsEntry", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST_LABELSENTRY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateTextRequest.LabelsEntry) - }, - ), - "DESCRIPTOR": _BATCHTRANSLATETEXTREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """The batch translation request. - - Attributes: - parent: - Required. Location to make a call. Must refer to a caller’s - project. Format: ``projects/{project-id}/locations/{location- - id}``. The ``global`` location is not supported for batch - translation. Only AutoML Translation models or glossaries - within the same region (have the same location-id) can be - used, otherwise an INVALID_ARGUMENT (400) error is returned. - source_language_code: - Required. Source language code. - target_language_codes: - Required. Specify up to 10 language codes here. - models: - Optional. The models to use for translation. Map’s key is - target language code. Map’s value is model name. Value can be - a built-in general model, or an AutoML Translation model. The - value format depends on model type: - AutoML Translation - models: ``projects/{project-id}/locations/{location- - id}/models/{model-id}`` - General (built-in) models: - ``projects/{project-id}/locations/{location- - id}/models/general/nmt``, ``projects/{project- - id}/locations/{location-id}/models/general/base`` If the map - is empty or a specific model is not requested for a language - pair, then default google model (nmt) is used. - input_configs: - Required. Input configurations. The total number of files - matched should be <= 1000. The total content size should be <= - 100M Unicode codepoints. The files must use UTF-8 encoding. - output_config: - Required. Output configuration. If 2 input configs match to - the same file (that is, same input path), we don’t generate - output for duplicate inputs. - glossaries: - Optional. Glossaries to be applied for translation. It’s keyed - by target language code. - labels: - Optional. The labels with user-defined metadata for the - request. Label keys and values can be no longer than 63 - characters (Unicode codepoints), can only contain lowercase - letters, numeric characters, underscores and dashes. - International characters are allowed. Label values are - optional. Label keys must start with a letter. See - https://cloud.google.com/translate/docs/labels for more - information. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateTextRequest) - }, -) -_sym_db.RegisterMessage(BatchTranslateTextRequest) -_sym_db.RegisterMessage(BatchTranslateTextRequest.ModelsEntry) -_sym_db.RegisterMessage(BatchTranslateTextRequest.GlossariesEntry) -_sym_db.RegisterMessage(BatchTranslateTextRequest.LabelsEntry) - -BatchTranslateMetadata = _reflection.GeneratedProtocolMessageType( - "BatchTranslateMetadata", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATEMETADATA, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """State metadata for the batch translation operation. - - Attributes: - state: - The state of the operation. - translated_characters: - Number of successfully translated characters so far (Unicode - codepoints). - failed_characters: - Number of characters that have failed to process so far - (Unicode codepoints). - total_characters: - Total number of characters (Unicode codepoints). This is the - total number of codepoints from input files times the number - of target languages and appears here shortly after the call is - submitted. - submit_time: - Time when the operation was submitted. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateMetadata) - }, -) -_sym_db.RegisterMessage(BatchTranslateMetadata) - -BatchTranslateResponse = _reflection.GeneratedProtocolMessageType( - "BatchTranslateResponse", - (_message.Message,), - { - "DESCRIPTOR": _BATCHTRANSLATERESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.response][google.longrunni - ng.Operation.response] field returned by BatchTranslateText if at - least one sentence is translated successfully. - - Attributes: - total_characters: - Total number of characters (Unicode codepoints). - translated_characters: - Number of successfully translated characters (Unicode - codepoints). - failed_characters: - Number of characters that have failed to process (Unicode - codepoints). - submit_time: - Time when the operation was submitted. - end_time: - The time when the operation is finished and [google.longrunnin - g.Operation.done][google.longrunning.Operation.done] is set to - true. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.BatchTranslateResponse) - }, -) -_sym_db.RegisterMessage(BatchTranslateResponse) - -GlossaryInputConfig = _reflection.GeneratedProtocolMessageType( - "GlossaryInputConfig", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARYINPUTCONFIG, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Input configuration for glossaries. - - Attributes: - source: - Required. Specify the input. - gcs_source: - Required. Google Cloud Storage location of glossary data. File - format is determined based on the filename extension. API - returns [google.rpc.Code.INVALID_ARGUMENT] for unsupported - URI-s and file formats. Wildcards are not allowed. This must - be a single file in one of the following formats: For - unidirectional glossaries: - TSV/CSV (``.tsv``/``.csv``): 2 - column file, tab- or comma-separated. The first column is - source text. The second column is target text. The file - must not contain headers. That is, the first row is data, - not column names. - TMX (``.tmx``): TMX file with parallel - data defining source/target term pairs. For equivalent - term sets glossaries: - CSV (``.csv``): Multi-column CSV - file defining equivalent glossary terms in multiple - languages. The format is defined for Google Translation - Toolkit and documented in `Use a glossary `__. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GlossaryInputConfig) - }, -) -_sym_db.RegisterMessage(GlossaryInputConfig) - -Glossary = _reflection.GeneratedProtocolMessageType( - "Glossary", - (_message.Message,), - { - "LanguageCodePair": _reflection.GeneratedProtocolMessageType( - "LanguageCodePair", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARY_LANGUAGECODEPAIR, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Used with unidirectional glossaries. - - Attributes: - source_language_code: - Required. The BCP-47 language code of the input text, for - example, “en-US”. Expected to be an exact match for - GlossaryTerm.language_code. - target_language_code: - Required. The BCP-47 language code for translation output, for - example, “zh-CN”. Expected to be an exact match for - GlossaryTerm.language_code. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.Glossary.LanguageCodePair) - }, - ), - "LanguageCodesSet": _reflection.GeneratedProtocolMessageType( - "LanguageCodesSet", - (_message.Message,), - { - "DESCRIPTOR": _GLOSSARY_LANGUAGECODESSET, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Used with equivalent term set glossaries. - - Attributes: - language_codes: - The BCP-47 language code(s) for terms defined in the glossary. - All entries are unique. The list contains at least two - entries. Expected to be an exact match for - GlossaryTerm.language_code. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.Glossary.LanguageCodesSet) - }, - ), - "DESCRIPTOR": _GLOSSARY, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Represents a glossary built from user provided data. - - Attributes: - name: - Required. The resource name of the glossary. Glossary names - have the form ``projects/{project-id}/locations/{location- - id}/glossaries/{glossary-id}``. - languages: - Languages supported by the glossary. - language_pair: - Used with unidirectional glossaries. - language_codes_set: - Used with equivalent term set glossaries. - input_config: - Required. Provides examples to build the glossary from. Total - glossary must not exceed 10M Unicode codepoints. - entry_count: - Output only. The number of entries defined in the glossary. - submit_time: - Output only. When CreateGlossary was called. - end_time: - Output only. When the glossary creation was finished. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.Glossary) - }, -) -_sym_db.RegisterMessage(Glossary) -_sym_db.RegisterMessage(Glossary.LanguageCodePair) -_sym_db.RegisterMessage(Glossary.LanguageCodesSet) - -CreateGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "CreateGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _CREATEGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Request message for CreateGlossary. - - Attributes: - parent: - Required. The project name. - glossary: - Required. The glossary to create. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.CreateGlossaryRequest) - }, -) -_sym_db.RegisterMessage(CreateGlossaryRequest) - -GetGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "GetGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _GETGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Request message for GetGlossary. - - Attributes: - name: - Required. The name of the glossary to retrieve. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.GetGlossaryRequest) - }, -) -_sym_db.RegisterMessage(GetGlossaryRequest) - -DeleteGlossaryRequest = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryRequest", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Request message for DeleteGlossary. - - Attributes: - name: - Required. The name of the glossary to delete. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DeleteGlossaryRequest) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryRequest) - -ListGlossariesRequest = _reflection.GeneratedProtocolMessageType( - "ListGlossariesRequest", - (_message.Message,), - { - "DESCRIPTOR": _LISTGLOSSARIESREQUEST, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Request message for ListGlossaries. - - Attributes: - parent: - Required. The name of the project from which to list all of - the glossaries. - page_size: - Optional. Requested page size. The server may return fewer - glossaries than requested. If unspecified, the server picks an - appropriate default. - page_token: - Optional. A token identifying a page of results the server - should return. Typically, this is the value of - [ListGlossariesResponse.next_page_token] returned from the - previous call to ``ListGlossaries`` method. The first page is - returned if ``page_token``\ is empty or missing. - filter: - Optional. Filter specifying constraints of a list operation. - Filtering is not supported yet, and the parameter currently - has no effect. If missing, no filtering is performed. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.ListGlossariesRequest) - }, -) -_sym_db.RegisterMessage(ListGlossariesRequest) - -ListGlossariesResponse = _reflection.GeneratedProtocolMessageType( - "ListGlossariesResponse", - (_message.Message,), - { - "DESCRIPTOR": _LISTGLOSSARIESRESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Response message for ListGlossaries. - - Attributes: - glossaries: - The list of glossaries for a project. - next_page_token: - A token to retrieve a page of results. Pass this value in the - [ListGlossariesRequest.page_token] field in the subsequent - call to ``ListGlossaries`` method to retrieve the next page of - results. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.ListGlossariesResponse) - }, -) -_sym_db.RegisterMessage(ListGlossariesResponse) - -CreateGlossaryMetadata = _reflection.GeneratedProtocolMessageType( - "CreateGlossaryMetadata", - (_message.Message,), - { - "DESCRIPTOR": _CREATEGLOSSARYMETADATA, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.metadata][google.longrunni - ng.Operation.metadata] field returned by CreateGlossary. - - Attributes: - name: - The name of the glossary that is being created. - state: - The current state of the glossary creation operation. - submit_time: - The time when the operation was submitted to the server. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.CreateGlossaryMetadata) - }, -) -_sym_db.RegisterMessage(CreateGlossaryMetadata) - -DeleteGlossaryMetadata = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryMetadata", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYMETADATA, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.metadata][google.longrunni - ng.Operation.metadata] field returned by DeleteGlossary. - - Attributes: - name: - The name of the glossary that is being deleted. - state: - The current state of the glossary deletion operation. - submit_time: - The time when the operation was submitted to the server. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DeleteGlossaryMetadata) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryMetadata) - -DeleteGlossaryResponse = _reflection.GeneratedProtocolMessageType( - "DeleteGlossaryResponse", - (_message.Message,), - { - "DESCRIPTOR": _DELETEGLOSSARYRESPONSE, - "__module__": "google.cloud.translate_v3beta1.proto.translation_service_pb2", - "__doc__": """Stored in the [google.longrunning.Operation.response][google.longrunni - ng.Operation.response] field returned by DeleteGlossary. - - Attributes: - name: - The name of the deleted glossary. - submit_time: - The time when the operation was submitted to the server. - end_time: - The time when the glossary deletion is finished and [google.lo - ngrunning.Operation.done][google.longrunning.Operation.done] - is set to true. - """, - # @@protoc_insertion_point(class_scope:google.cloud.translation.v3beta1.DeleteGlossaryResponse) - }, -) -_sym_db.RegisterMessage(DeleteGlossaryResponse) - - -DESCRIPTOR._options = None -_TRANSLATETEXTGLOSSARYCONFIG.fields_by_name["glossary"]._options = None -_TRANSLATETEXTGLOSSARYCONFIG.fields_by_name["ignore_case"]._options = None -_TRANSLATETEXTREQUEST_LABELSENTRY._options = None -_TRANSLATETEXTREQUEST.fields_by_name["contents"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["mime_type"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["source_language_code"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["target_language_code"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["parent"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["model"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["glossary_config"]._options = None -_TRANSLATETEXTREQUEST.fields_by_name["labels"]._options = None -_DETECTLANGUAGEREQUEST_LABELSENTRY._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["parent"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["model"]._options = None -_DETECTLANGUAGEREQUEST.fields_by_name["mime_type"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["parent"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["display_language_code"]._options = None -_GETSUPPORTEDLANGUAGESREQUEST.fields_by_name["model"]._options = None -_GCSSOURCE.fields_by_name["input_uri"]._options = None -_INPUTCONFIG.fields_by_name["mime_type"]._options = None -_GCSDESTINATION.fields_by_name["output_uri_prefix"]._options = None -_BATCHTRANSLATETEXTREQUEST_MODELSENTRY._options = None -_BATCHTRANSLATETEXTREQUEST_GLOSSARIESENTRY._options = None -_BATCHTRANSLATETEXTREQUEST_LABELSENTRY._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["parent"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["source_language_code"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["target_language_codes"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["models"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["input_configs"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["output_config"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["glossaries"]._options = None -_BATCHTRANSLATETEXTREQUEST.fields_by_name["labels"]._options = None -_GLOSSARY.fields_by_name["name"]._options = None -_GLOSSARY.fields_by_name["entry_count"]._options = None -_GLOSSARY.fields_by_name["submit_time"]._options = None -_GLOSSARY.fields_by_name["end_time"]._options = None -_GLOSSARY._options = None -_CREATEGLOSSARYREQUEST.fields_by_name["parent"]._options = None -_CREATEGLOSSARYREQUEST.fields_by_name["glossary"]._options = None -_GETGLOSSARYREQUEST.fields_by_name["name"]._options = None -_DELETEGLOSSARYREQUEST.fields_by_name["name"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["parent"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["page_size"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["page_token"]._options = None -_LISTGLOSSARIESREQUEST.fields_by_name["filter"]._options = None - -_TRANSLATIONSERVICE = _descriptor.ServiceDescriptor( - name="TranslationService", - full_name="google.cloud.translation.v3beta1.TranslationService", - file=DESCRIPTOR, - index=0, - serialized_options=b"\312A\030translate.googleapis.com\322A`https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translation", - create_key=_descriptor._internal_create_key, - serialized_start=5659, - serialized_end=7733, - methods=[ - _descriptor.MethodDescriptor( - name="TranslateText", - full_name="google.cloud.translation.v3beta1.TranslationService.TranslateText", - index=0, - containing_service=None, - input_type=_TRANSLATETEXTREQUEST, - output_type=_TRANSLATETEXTRESPONSE, - serialized_options=b'\202\323\344\223\002l"6/v3beta1/{parent=projects/*/locations/*}:translateText:\001*Z/"*/v3beta1/{parent=projects/*}:translateText:\001*', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DetectLanguage", - full_name="google.cloud.translation.v3beta1.TranslationService.DetectLanguage", - index=1, - containing_service=None, - input_type=_DETECTLANGUAGEREQUEST, - output_type=_DETECTLANGUAGERESPONSE, - serialized_options=b'\202\323\344\223\002n"7/v3beta1/{parent=projects/*/locations/*}:detectLanguage:\001*Z0"+/v3beta1/{parent=projects/*}:detectLanguage:\001*\332A\026parent,model,mime_type', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="GetSupportedLanguages", - full_name="google.cloud.translation.v3beta1.TranslationService.GetSupportedLanguages", - index=2, - containing_service=None, - input_type=_GETSUPPORTEDLANGUAGESREQUEST, - output_type=_SUPPORTEDLANGUAGES, - serialized_options=b'\202\323\344\223\002p\022;/v3beta1/{parent=projects/*/locations/*}/supportedLanguagesZ1\022//v3beta1/{parent=projects/*}/supportedLanguages\332A"parent,display_language_code,model', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="BatchTranslateText", - full_name="google.cloud.translation.v3beta1.TranslationService.BatchTranslateText", - index=3, - containing_service=None, - input_type=_BATCHTRANSLATETEXTREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b'\202\323\344\223\002@";/v3beta1/{parent=projects/*/locations/*}:batchTranslateText:\001*\312A0\n\026BatchTranslateResponse\022\026BatchTranslateMetadata', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="CreateGlossary", - full_name="google.cloud.translation.v3beta1.TranslationService.CreateGlossary", - index=4, - containing_service=None, - input_type=_CREATEGLOSSARYREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b'\202\323\344\223\002?"3/v3beta1/{parent=projects/*/locations/*}/glossaries:\010glossary\332A\017parent,glossary\312A"\n\010Glossary\022\026CreateGlossaryMetadata', - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="ListGlossaries", - full_name="google.cloud.translation.v3beta1.TranslationService.ListGlossaries", - index=5, - containing_service=None, - input_type=_LISTGLOSSARIESREQUEST, - output_type=_LISTGLOSSARIESRESPONSE, - serialized_options=b"\202\323\344\223\0025\0223/v3beta1/{parent=projects/*/locations/*}/glossaries\332A\006parent\332A\rparent,filter", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="GetGlossary", - full_name="google.cloud.translation.v3beta1.TranslationService.GetGlossary", - index=6, - containing_service=None, - input_type=_GETGLOSSARYREQUEST, - output_type=_GLOSSARY, - serialized_options=b"\202\323\344\223\0025\0223/v3beta1/{name=projects/*/locations/*/glossaries/*}\332A\004name", - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="DeleteGlossary", - full_name="google.cloud.translation.v3beta1.TranslationService.DeleteGlossary", - index=7, - containing_service=None, - input_type=_DELETEGLOSSARYREQUEST, - output_type=google_dot_longrunning_dot_operations__pb2._OPERATION, - serialized_options=b"\202\323\344\223\0025*3/v3beta1/{name=projects/*/locations/*/glossaries/*}\332A\004name\312A0\n\026DeleteGlossaryResponse\022\026DeleteGlossaryMetadata", - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_TRANSLATIONSERVICE) - -DESCRIPTOR.services_by_name["TranslationService"] = _TRANSLATIONSERVICE - -# @@protoc_insertion_point(module_scope) From 6378ceaf4c4ced1c751d11138253633709fd1bf0 Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Mon, 3 Aug 2020 13:08:50 -0700 Subject: [PATCH 92/94] chore: uses PROJECT_ID env var in system test --- tests/system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system.py b/tests/system.py index 5d555091..56b16091 100644 --- a/tests/system.py +++ b/tests/system.py @@ -31,7 +31,7 @@ class Config(object): CLIENT_V2 = None CLIENT_V3 = None location = "global" - project_id = os.environ["GOOGLE_CLOUD_PROJECT"] + project_id = os.environ["PROJECT_ID"] def setUpModule(): From ec4ec309e22dde1f093dbb8c275b5fcba992068c Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Mon, 3 Aug 2020 21:39:56 -0700 Subject: [PATCH 93/94] chore: clarifies examples in migration guide --- UPGRADING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/UPGRADING.md b/UPGRADING.md index 246e0457..4fba8086 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -35,7 +35,8 @@ $ fixup_translation_v3_keywords.py --input-directory .samples/ --output-director from google.cloud import translate client = translate.TranslationServiceClient() -parent = client.location_path(, ) +parent = client.location_path("", "") +text = "Good morning!" response = client.translate_text( parent=parent, From 688987e891ca87edfdf145ecfd6d144ea6dfa6ee Mon Sep 17 00:00:00 2001 From: Dan O'Meara Date: Mon, 3 Aug 2020 21:41:44 -0700 Subject: [PATCH 94/94] chore: adds explicit variable --- UPGRADING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/UPGRADING.md b/UPGRADING.md index 4fba8086..7c564789 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -54,6 +54,7 @@ from google.cloud import translate client = translate.TranslationServiceClient() parent = "projects//locations/" +text = "Good morning!" response = client.translate_text( request={