From cf682ac7c3ac0c6fb3dc7d3b16ee162459296d47 Mon Sep 17 00:00:00 2001 From: HemangChothani Date: Thu, 23 Jan 2020 16:42:12 +0530 Subject: [PATCH 1/2] refactor(bigquery): update code sample of table properites --- bigquery/docs/snippets.py | 141 ------------------ bigquery/docs/usage/tables.rst | 37 ++++- bigquery/samples/delete_table_labels.py | 36 +++++ bigquery/samples/get_table_labels.py | 38 +++++ bigquery/samples/label_table.py | 35 +++++ .../samples/tests/test_table_label_samples.py | 33 ++++ .../tests/test_update_table_description.py | 22 +++ .../tests/test_update_table_expiration.py | 28 ++++ bigquery/samples/update_table_description.py | 44 ++++++ bigquery/samples/update_table_expiration.py | 49 ++++++ 10 files changed, 320 insertions(+), 143 deletions(-) create mode 100644 bigquery/samples/delete_table_labels.py create mode 100644 bigquery/samples/get_table_labels.py create mode 100644 bigquery/samples/label_table.py create mode 100644 bigquery/samples/tests/test_table_label_samples.py create mode 100644 bigquery/samples/tests/test_update_table_description.py create mode 100644 bigquery/samples/tests/test_update_table_expiration.py create mode 100644 bigquery/samples/update_table_description.py create mode 100644 bigquery/samples/update_table_expiration.py diff --git a/bigquery/docs/snippets.py b/bigquery/docs/snippets.py index bb584fa0494a..2c1c2e9212e4 100644 --- a/bigquery/docs/snippets.py +++ b/bigquery/docs/snippets.py @@ -228,147 +228,6 @@ def test_create_partitioned_table(client, to_delete): assert table.time_partitioning.expiration_ms == 7776000000 -@pytest.mark.skip( - reason=( - "update_table() is flaky " - "https://github.com/GoogleCloudPlatform/google-cloud-python/issues/5589" - ) -) -def test_manage_table_labels(client, to_delete): - dataset_id = "label_table_dataset_{}".format(_millis()) - table_id = "label_table_{}".format(_millis()) - dataset = bigquery.Dataset(client.dataset(dataset_id)) - client.create_dataset(dataset) - to_delete.append(dataset) - - table = bigquery.Table(dataset.table(table_id), schema=SCHEMA) - table = client.create_table(table) - - # [START bigquery_label_table] - # from google.cloud import bigquery - # client = bigquery.Client() - # table_ref = client.dataset('my_dataset').table('my_table') - # table = client.get_table(table_ref) # API request - - assert table.labels == {} - labels = {"color": "green"} - table.labels = labels - - table = client.update_table(table, ["labels"]) # API request - - assert table.labels == labels - # [END bigquery_label_table] - - # [START bigquery_get_table_labels] - # from google.cloud import bigquery - # client = bigquery.Client() - # dataset_id = 'my_dataset' - # table_id = 'my_table' - - dataset_ref = client.dataset(dataset_id) - table_ref = dataset_ref.table(table_id) - table = client.get_table(table_ref) # API Request - - # View table labels - print("Table ID: {}".format(table_id)) - print("Labels:") - if table.labels: - for label, value in table.labels.items(): - print("\t{}: {}".format(label, value)) - else: - print("\tTable has no labels defined.") - # [END bigquery_get_table_labels] - assert table.labels == labels - - # [START bigquery_delete_label_table] - # from google.cloud import bigquery - # client = bigquery.Client() - # table_ref = client.dataset('my_dataset').table('my_table') - # table = client.get_table(table_ref) # API request - - # This example table starts with one label - assert table.labels == {"color": "green"} - # To delete a label from a table, set its value to None - table.labels["color"] = None - - table = client.update_table(table, ["labels"]) # API request - - assert table.labels == {} - # [END bigquery_delete_label_table] - - -@pytest.mark.skip( - reason=( - "update_table() is flaky " - "https://github.com/GoogleCloudPlatform/google-cloud-python/issues/5589" - ) -) -def test_update_table_description(client, to_delete): - """Update a table's description.""" - dataset_id = "update_table_description_dataset_{}".format(_millis()) - table_id = "update_table_description_table_{}".format(_millis()) - dataset = bigquery.Dataset(client.dataset(dataset_id)) - client.create_dataset(dataset) - to_delete.append(dataset) - - table = bigquery.Table(dataset.table(table_id), schema=SCHEMA) - table.description = "Original description." - table = client.create_table(table) - - # [START bigquery_update_table_description] - # from google.cloud import bigquery - # client = bigquery.Client() - # table_ref = client.dataset('my_dataset').table('my_table') - # table = client.get_table(table_ref) # API request - - assert table.description == "Original description." - table.description = "Updated description." - - table = client.update_table(table, ["description"]) # API request - - assert table.description == "Updated description." - # [END bigquery_update_table_description] - - -@pytest.mark.skip( - reason=( - "update_table() is flaky " - "https://github.com/GoogleCloudPlatform/google-cloud-python/issues/5589" - ) -) -def test_update_table_expiration(client, to_delete): - """Update a table's expiration time.""" - dataset_id = "update_table_expiration_dataset_{}".format(_millis()) - table_id = "update_table_expiration_table_{}".format(_millis()) - dataset = bigquery.Dataset(client.dataset(dataset_id)) - client.create_dataset(dataset) - to_delete.append(dataset) - - table = bigquery.Table(dataset.table(table_id), schema=SCHEMA) - table = client.create_table(table) - - # [START bigquery_update_table_expiration] - import datetime - import pytz - - # from google.cloud import bigquery - # client = bigquery.Client() - # table_ref = client.dataset('my_dataset').table('my_table') - # table = client.get_table(table_ref) # API request - - assert table.expires is None - - # set table to expire 5 days from now - expiration = datetime.datetime.now(pytz.utc) + datetime.timedelta(days=5) - table.expires = expiration - table = client.update_table(table, ["expires"]) # API request - - # expiration is stored in milliseconds - margin = datetime.timedelta(microseconds=1000) - assert expiration - margin <= table.expires <= expiration + margin - # [END bigquery_update_table_expiration] - - @pytest.mark.skip( reason=( "update_table() is flaky " diff --git a/bigquery/docs/usage/tables.rst b/bigquery/docs/usage/tables.rst index b6f8dbdde646..4e2b76bbb5d1 100644 --- a/bigquery/docs/usage/tables.rst +++ b/bigquery/docs/usage/tables.rst @@ -46,6 +46,14 @@ Browse data rows in a table with the :start-after: [START bigquery_browse_table] :end-before: [END bigquery_browse_table] +Get a labels to the existing table: + +.. literalinclude:: ../samples/get_table_labels.py + :language: python + :dedent: 4 + :start-after: [START bigquery_get_table_labels] + :end-before: [END bigquery_get_table_labels] + Creating a Table ^^^^^^^^^^^^^^^^ @@ -113,15 +121,24 @@ See also: `Loading Parquet data from Cloud Storage Updating a Table ^^^^^^^^^^^^^^^^ -Update a property in a table's metadata with the +Update a description property in a table's metadata with the :func:`~google.cloud.bigquery.client.Client.update_table` method: -.. literalinclude:: ../snippets.py +.. literalinclude:: ../samples/update_table_description.py :language: python :dedent: 4 :start-after: [START bigquery_update_table_description] :end-before: [END bigquery_update_table_description] +Update a expires property in a table's metadata with the +:func:`~google.cloud.bigquery.client.Client.update_table` method: + +.. literalinclude:: ../samples/update_table_expiration.py + :language: python + :dedent: 4 + :start-after: [START bigquery_update_table_expiration] + :end-before: [END bigquery_update_table_expiration] + Insert rows into a table's data with the :func:`~google.cloud.bigquery.client.Client.insert_rows` method: @@ -154,6 +171,22 @@ Add an empty column to the existing table with the :start-after: [START bigquery_add_empty_column] :end-before: [END bigquery_add_empty_column] +Add a labels to the existing table: + +.. literalinclude:: ../samples/label_table.py + :language: python + :dedent: 4 + :start-after: [START bigquery_label_table] + :end-before: [END bigquery_label_table] + +Delete a labels to the existing table: + +.. literalinclude:: ../samples/delete_table_labels.py + :language: python + :dedent: 4 + :start-after: [START bigquery_delete_label_table] + :end-before: [END bigquery_delete_label_table] + Copying a Table ^^^^^^^^^^^^^^^ diff --git a/bigquery/samples/delete_table_labels.py b/bigquery/samples/delete_table_labels.py new file mode 100644 index 000000000000..7464078c047b --- /dev/null +++ b/bigquery/samples/delete_table_labels.py @@ -0,0 +1,36 @@ +# 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. + + +def delete_table_labels(table_id): + + # [START bigquery_delete_label_table] + + from google.cloud import bigquery + + # Construct a BigQuery client object. + client = bigquery.Client() + + # TODO(developer): Set table_id to the ID of the table to create. + # table_id = "your-project.your_dataset.your_table_name" + + table = client.get_table(table_id) # Make an API request. + + # To delete a label from a dataset, set its value to None. + table.labels["color"] = None + + table = client.update_table(table, ["labels"]) # Make an API request. + print("Labels deleted from {}".format(table_id)) + # [END bigquery_delete_label_table] + return table diff --git a/bigquery/samples/get_table_labels.py b/bigquery/samples/get_table_labels.py new file mode 100644 index 000000000000..97007fd0cec2 --- /dev/null +++ b/bigquery/samples/get_table_labels.py @@ -0,0 +1,38 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# 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. + + +def get_table_labels(table_id): + + # [START bigquery_get_table_labels] + + from google.cloud import bigquery + + # Construct a BigQuery client object. + client = bigquery.Client() + + # TODO(developer): Set table_id to the ID of the table to create. + # table_id = "your-project.your_dataset.your_table_name" + + table = client.get_table(table_id) # Make an API request. + + # View table labels. + print("Table ID: {}".format(table_id)) + print("Labels:") + if table.labels: + for label, value in table.labels.items(): + print("\t{}: {}".format(label, value)) + else: + print("\tTable has no labels defined.") + # [END bigquery_get_table_labels] diff --git a/bigquery/samples/label_table.py b/bigquery/samples/label_table.py new file mode 100644 index 000000000000..5a179ef46f39 --- /dev/null +++ b/bigquery/samples/label_table.py @@ -0,0 +1,35 @@ +# 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. + + +def label_table(table_id): + + # [START bigquery_label_table] + + from google.cloud import bigquery + + # Construct a BigQuery client object. + client = bigquery.Client() + + # TODO(developer): Set table_id to the ID of the table to create. + # table_id = "your-project.your_dataset.your_table_name" + + table = client.get_table(table_id) # Make an API request. + assert table.labels == {} + labels = {"color": "green"} + table.labels = labels + + table = client.update_table(table, ["labels"]) # API request + print("Labels added to {}".format(table_id)) + # [END bigquery_label_table] diff --git a/bigquery/samples/tests/test_table_label_samples.py b/bigquery/samples/tests/test_table_label_samples.py new file mode 100644 index 000000000000..bc40353a222e --- /dev/null +++ b/bigquery/samples/tests/test_table_label_samples.py @@ -0,0 +1,33 @@ +# 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. + +from .. import label_table +from .. import get_table_labels +from .. import delete_table_labels + + +def test_table_label_samples(capsys, table_id): + + label_table.label_table(table_id) + out, err = capsys.readouterr() + assert "Labels added to {}".format(table_id) in out + + get_table_labels.get_table_labels(table_id) + out, err = capsys.readouterr() + assert "color: green" in out + + dataset = delete_table_labels.delete_table_labels(table_id) + out, err = capsys.readouterr() + assert "Labels deleted from {}".format(table_id) in out + assert dataset.labels.get("color") is None diff --git a/bigquery/samples/tests/test_update_table_description.py b/bigquery/samples/tests/test_update_table_description.py new file mode 100644 index 000000000000..da5d13c5438a --- /dev/null +++ b/bigquery/samples/tests/test_update_table_description.py @@ -0,0 +1,22 @@ +# 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. + +from .. import update_table_description + + +def test_update_table_descritpion(capsys, random_table_id): + + update_table_description.update_table_description(random_table_id) + out, _ = capsys.readouterr() + assert "Updated description." in out diff --git a/bigquery/samples/tests/test_update_table_expiration.py b/bigquery/samples/tests/test_update_table_expiration.py new file mode 100644 index 000000000000..36188c194806 --- /dev/null +++ b/bigquery/samples/tests/test_update_table_expiration.py @@ -0,0 +1,28 @@ +# 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 datetime + +from .. import update_table_expiration + + +def test_update_table_expiration(capsys, random_table_id): + + table, expiration = update_table_expiration.update_table_expiration(random_table_id) + out, _ = capsys.readouterr() + assert "Updated table {} with new expiration".format(table.table_id) in out + + # expiration is stored in milliseconds + margin = datetime.timedelta(microseconds=1000) + assert expiration - margin <= table.expires <= expiration + margin diff --git a/bigquery/samples/update_table_description.py b/bigquery/samples/update_table_description.py new file mode 100644 index 000000000000..2c832d7a7a31 --- /dev/null +++ b/bigquery/samples/update_table_description.py @@ -0,0 +1,44 @@ +# 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. + + +def update_table_description(table_id): + + # [START bigquery_update_table_description] + from google.cloud import bigquery + + # Construct a BigQuery client object. + client = bigquery.Client() + + # TODO(developer): Set table_id to the ID of the model to fetch. + # table_id = 'your-project.your_dataset.your_table' + + table = bigquery.Table( + table_id, + schema=[ + bigquery.SchemaField("full_name", "STRING", mode="REQUIRED"), + bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"), + ], + ) + table = client.create_table(table) + table.description = "Updated description." + table = client.update_table(table, ["description"]) # Make an API request. + + full_table_id = "{}.{}.{}".format(table.project, table.dataset_id, table.table_id) + print( + "Updated table '{}' with description '{}'.".format( + full_table_id, table.description + ) + ) + # [END bigquery_update_table_description] diff --git a/bigquery/samples/update_table_expiration.py b/bigquery/samples/update_table_expiration.py new file mode 100644 index 000000000000..4d6c88165f89 --- /dev/null +++ b/bigquery/samples/update_table_expiration.py @@ -0,0 +1,49 @@ +# 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. + + +def update_table_expiration(table_id): + + # [START bigquery_update_table_expiration] + from google.cloud import bigquery + + import datetime + import pytz + + # Construct a BigQuery client object. + client = bigquery.Client() + + # TODO(developer): Set table_id to the ID of the model to fetch. + # table_id = 'your-project.your_dataset.your_table' + + table = bigquery.Table( + table_id, + schema=[ + bigquery.SchemaField("full_name", "STRING", mode="REQUIRED"), + bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"), + ], + ) + table = client.create_table(table) + assert table.expires is None + + # set table to expire 5 days from now + expiration = datetime.datetime.now(pytz.utc) + datetime.timedelta(days=5) + table.expires = expiration + table = client.update_table(table, ["expires"]) # Make an API request. + + print( + "Updated table {} with new expiration {}".format(table.table_id, table.expires) + ) + # [END bigquery_update_table_expiration] + return table, expiration From 7dc7b8406025535d476d5b61b53a6e2240a710a7 Mon Sep 17 00:00:00 2001 From: HemangChothani Date: Fri, 24 Jan 2020 13:12:27 +0530 Subject: [PATCH 2/2] refactor(bigquery): update copyright to 2020 --- bigquery/docs/usage/tables.rst | 6 +++--- bigquery/samples/delete_table_labels.py | 2 +- bigquery/samples/get_table_labels.py | 2 +- bigquery/samples/label_table.py | 2 +- bigquery/samples/tests/test_table_label_samples.py | 2 +- bigquery/samples/tests/test_update_table_description.py | 2 +- bigquery/samples/tests/test_update_table_expiration.py | 2 +- bigquery/samples/update_table_description.py | 2 +- bigquery/samples/update_table_expiration.py | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bigquery/docs/usage/tables.rst b/bigquery/docs/usage/tables.rst index 4e2b76bbb5d1..bed8be260049 100644 --- a/bigquery/docs/usage/tables.rst +++ b/bigquery/docs/usage/tables.rst @@ -46,7 +46,7 @@ Browse data rows in a table with the :start-after: [START bigquery_browse_table] :end-before: [END bigquery_browse_table] -Get a labels to the existing table: +Get labels from the existing table: .. literalinclude:: ../samples/get_table_labels.py :language: python @@ -171,7 +171,7 @@ Add an empty column to the existing table with the :start-after: [START bigquery_add_empty_column] :end-before: [END bigquery_add_empty_column] -Add a labels to the existing table: +Add labels to the existing table: .. literalinclude:: ../samples/label_table.py :language: python @@ -179,7 +179,7 @@ Add a labels to the existing table: :start-after: [START bigquery_label_table] :end-before: [END bigquery_label_table] -Delete a labels to the existing table: +Delete labels from the existing table: .. literalinclude:: ../samples/delete_table_labels.py :language: python diff --git a/bigquery/samples/delete_table_labels.py b/bigquery/samples/delete_table_labels.py index 7464078c047b..8e70dca61c55 100644 --- a/bigquery/samples/delete_table_labels.py +++ b/bigquery/samples/delete_table_labels.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/bigquery/samples/get_table_labels.py b/bigquery/samples/get_table_labels.py index 97007fd0cec2..1f9d8e1636cc 100644 --- a/bigquery/samples/get_table_labels.py +++ b/bigquery/samples/get_table_labels.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/bigquery/samples/label_table.py b/bigquery/samples/label_table.py index 5a179ef46f39..28218692a359 100644 --- a/bigquery/samples/label_table.py +++ b/bigquery/samples/label_table.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/bigquery/samples/tests/test_table_label_samples.py b/bigquery/samples/tests/test_table_label_samples.py index bc40353a222e..76a400829f47 100644 --- a/bigquery/samples/tests/test_table_label_samples.py +++ b/bigquery/samples/tests/test_table_label_samples.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/bigquery/samples/tests/test_update_table_description.py b/bigquery/samples/tests/test_update_table_description.py index da5d13c5438a..ddd01a96320c 100644 --- a/bigquery/samples/tests/test_update_table_description.py +++ b/bigquery/samples/tests/test_update_table_description.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/bigquery/samples/tests/test_update_table_expiration.py b/bigquery/samples/tests/test_update_table_expiration.py index 36188c194806..eab1a21df217 100644 --- a/bigquery/samples/tests/test_update_table_expiration.py +++ b/bigquery/samples/tests/test_update_table_expiration.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/bigquery/samples/update_table_description.py b/bigquery/samples/update_table_description.py index 2c832d7a7a31..84690ce5be8e 100644 --- a/bigquery/samples/update_table_description.py +++ b/bigquery/samples/update_table_description.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/bigquery/samples/update_table_expiration.py b/bigquery/samples/update_table_expiration.py index 4d6c88165f89..b34261efa9f6 100644 --- a/bigquery/samples/update_table_expiration.py +++ b/bigquery/samples/update_table_expiration.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License.