From aa30bc7dbe63ef15da6423469f7f8251104afc7e Mon Sep 17 00:00:00 2001 From: nnegrey Date: Thu, 12 Dec 2019 16:17:57 -0700 Subject: [PATCH 1/6] automl: add base model samples for automl ga --- automl/cloud-client/delete_model.py | 33 ++++++++ automl/cloud-client/delete_model_test.py | 33 ++++++++ automl/cloud-client/deploy_model.py | 33 ++++++++ automl/cloud-client/deploy_model_test.py | 45 +++++++++++ automl/cloud-client/get_model.py | 46 +++++++++++ automl/cloud-client/get_model_evaluation.py | 78 +++++++++++++++++++ automl/cloud-client/list_model_evaluations.py | 76 ++++++++++++++++++ automl/cloud-client/list_models.py | 47 +++++++++++ automl/cloud-client/requirements.txt | 2 + automl/cloud-client/undeploy_model.py | 33 ++++++++ 10 files changed, 426 insertions(+) create mode 100644 automl/cloud-client/delete_model.py create mode 100644 automl/cloud-client/delete_model_test.py create mode 100644 automl/cloud-client/deploy_model.py create mode 100644 automl/cloud-client/deploy_model_test.py create mode 100644 automl/cloud-client/get_model.py create mode 100644 automl/cloud-client/get_model_evaluation.py create mode 100644 automl/cloud-client/list_model_evaluations.py create mode 100644 automl/cloud-client/list_models.py create mode 100644 automl/cloud-client/requirements.txt create mode 100644 automl/cloud-client/undeploy_model.py diff --git a/automl/cloud-client/delete_model.py b/automl/cloud-client/delete_model.py new file mode 100644 index 00000000000..8b9e64299bd --- /dev/null +++ b/automl/cloud-client/delete_model.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +# 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. + + +def delete_model(project_id, model_id): + """Delete a model.""" + # [START automl_delete_model] + from google.cloud import automl + + # TODO(developer): Uncomment and set the following variables + # project_id = 'YOUR_PROJECT_ID' + # model_id = 'YOUR_MODEL_ID' + + client = automl.AutoMlClient() + # Get the full path of the model. + model_full_id = client.model_path(project_id, 'us-central1', model_id) + response = client.delete_model(model_full_id) + + print(u'Model deleted. {}'.format(response.result())) + # [END automl_delete_model] diff --git a/automl/cloud-client/delete_model_test.py b/automl/cloud-client/delete_model_test.py new file mode 100644 index 00000000000..0da1a890255 --- /dev/null +++ b/automl/cloud-client/delete_model_test.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +# 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 delete_model + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + + +def test_delete_model(capsys): + # As model creation can take many hours, instead try to delete a + # nonexistent model and confirm that the model was not found, but other + # elements of the request were valid. + try: + delete_model.delete_model(PROJECT_ID, 'TRL0000000000000000000') + out, _ = capsys.readouterr() + assert 'The model does not exist' in out + except Exception as e: + assert 'The model does not exist' in e.message \ No newline at end of file diff --git a/automl/cloud-client/deploy_model.py b/automl/cloud-client/deploy_model.py new file mode 100644 index 00000000000..7783e6b105c --- /dev/null +++ b/automl/cloud-client/deploy_model.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +# 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. + + +def deploy_model(project_id, model_id): + """Deploy a model.""" + # [START automl_deploy_model] + from google.cloud import automl + + # TODO(developer): Uncomment and set the following variables + # project_id = 'YOUR_PROJECT_ID' + # model_id = 'YOUR_MODEL_ID' + + client = automl.AutoMlClient() + # Get the full path of the model. + model_full_id = client.model_path(project_id, 'us-central1', model_id) + response = client.deploy_model(model_full_id) + + print(u'Model deployment finished. {}'.format(response.result())) + # [END automl_deploy_model] diff --git a/automl/cloud-client/deploy_model_test.py b/automl/cloud-client/deploy_model_test.py new file mode 100644 index 00000000000..84da4753305 --- /dev/null +++ b/automl/cloud-client/deploy_model_test.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import pytest + +import deploy_model + +PROJECT_ID = os.environ['GCLOUD_PROJECT'] +MODEL_ID = 'TEN5112482778553778176' + + +@pytest.fixture(scope="function") +def verify_model_state(): + from google.cloud import automl + client = automl.AutoMlClient() + model_full_id = client.model_path(PROJECT_ID, 'us-central1', MODEL_ID) + + model = client.get_model(model_full_id) + if model.deployment_state == automl.enums.Model.DeploymentState.DEPLOYED: + # Undeploy model if it is deployed + response = client.undeploy_model(model_full_id) + response.result() + + +@pytest.mark.slow +def test_deploy_undeploy_model(capsys, verify_model_state): + verify_model_state + deploy_model.deploy_model(PROJECT_ID, MODEL_ID) + out, _ = capsys.readouterr() + assert 'Model deployment finished.' in out diff --git a/automl/cloud-client/get_model.py b/automl/cloud-client/get_model.py new file mode 100644 index 00000000000..6fd5944f5a5 --- /dev/null +++ b/automl/cloud-client/get_model.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +# 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. + + +def get_model(project_id, model_id): + """Get a model.""" + # [START automl_get_model] + from google.cloud import automl + + # TODO(developer): Uncomment and set the following variables + # project_id = 'YOUR_PROJECT_ID' + # model_id = 'YOUR_MODEL_ID' + + client = automl.AutoMlClient() + # Get the full path of the model. + model_full_id = client.model_path(project_id, 'us-central1', model_id) + model = client.get_model(model_full_id) + + # Retrieve deployment state. + if model.deployment_state == automl.enums.Model.DeploymentState.DEPLOYED: + deployment_state = 'deployed' + else: + deployment_state = 'undeployed' + + # Display the model information. + print(u'Model name: {}'.format(model.name)) + print(u'Model id: {}'.format(model.name.split('/')[-1])) + print(u'Model display name: {}'.format(model.display_name)) + print(u'Model create time:') + print(u'\tseconds: {}'.format(model.create_time.seconds)) + print(u'\tnanos: {}'.format(model.create_time.nanos)) + print(u'Model deployment state: {}'.format(deployment_state)) + # [END automl_get_model] diff --git a/automl/cloud-client/get_model_evaluation.py b/automl/cloud-client/get_model_evaluation.py new file mode 100644 index 00000000000..621c84e1ad4 --- /dev/null +++ b/automl/cloud-client/get_model_evaluation.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python + +# 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. + + +def get_model_evaluation(project_id, model_id, model_evaluation_id): + """Get model evaluation.""" + # [START automl_language_entity_extraction_get_model_evaluation] + # [START automl_language_sentiment_analysis_get_model_evaluation] + # [START automl_language_text_classification_get_model_evaluation] + # [START automl_translate_get_model_evaluation] + # [START automl_vision_classification_get_model_evaluation] + # [START automl_vision_object_detection_get_model_evaluation] + from google.cloud import automl + + # TODO(developer): Uncomment and set the following variables + # project_id = 'YOUR_PROJECT_ID' + # model_id = 'YOUR_MODEL_ID' + # model_evaluation_id = 'YOUR_MODEL_EVALUATION_ID' + + client = automl.AutoMlClient() + # Get the full path of the model evaluation. + model_evaluation_full_id = client.model_evaluation_path( + project_id, 'us-central1', model_id, model_evaluation_id + ) + + # Get complete detail of the model evaluation. + response = client.get_model_evaluation(model_evaluation_full_id) + + print(u'Model evaluation name: {}'.format(response.name)) + print(u'Model annotation spec id: {}'.format(response.annotation_spec_id)) + print('Create Time:') + print(u'\tseconds: {}'.format(response.create_time.seconds)) + print(u'\tnanos: {}'.format(response.create_time.nanos / 1e9)) + print(u'Evaluation example count: {}'.format( + response.evaluated_example_count)) + # [END automl_language_sentiment_analysis_get_model_evaluation] + # [END automl_language_text_classification_get_model_evaluation] + # [END automl_translate_get_model_evaluation] + # [END automl_vision_classification_get_model_evaluation] + # [END automl_vision_object_detection_get_model_evaluation] + print('Entity extraction model evaluation metrics: {}'.format( + response.text_extraction_evaluation_metrics)) + # [END automl_language_entity_extraction_get_model_evaluation] + + # [START automl_language_sentiment_analysis_get_model_evaluation] + print('Sentiment analysis model evaluation metrics: {}'.format( + response.text_sentiment_evaluation_metrics)) + # [END automl_language_sentiment_analysis_get_model_evaluation] + + # [START automl_language_text_classification_get_model_evaluation] + # [START automl_vision_classification_get_model_evaluation] + print('Classification model evaluation metrics: {}'.format( + response.classification_evaluation_metrics)) + # [END automl_language_text_classification_get_model_evaluation] + # [END automl_vision_classification_get_model_evaluation] + + # [START automl_translate_get_model_evaluation] + print('Translation model evaluation metrics: {}'.format( + response.translation_evaluation_metrics)) + # [END automl_translate_get_model_evaluation] + + # [START automl_vision_object_detection_get_model_evaluation] + print('Object detection model evaluation metrics: {}'.format( + response.image_object_detection_evaluation_metrics)) + # [END automl_vision_object_detection_get_model_evaluation] diff --git a/automl/cloud-client/list_model_evaluations.py b/automl/cloud-client/list_model_evaluations.py new file mode 100644 index 00000000000..9e138d83651 --- /dev/null +++ b/automl/cloud-client/list_model_evaluations.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +# 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. + + +def list_model_evaluations(project_id, model_id): + """List model evaluations.""" + # [START automl_language_entity_extraction_list_model_evaluations] + # [START automl_language_sentiment_analysis_list_model_evaluations] + # [START automl_language_text_classification_list_model_evaluations] + # [START automl_translate_list_model_evaluations] + # [START automl_vision_classification_list_model_evaluations] + # [START automl_vision_object_detection_list_model_evaluations] + from google.cloud import automl + + # TODO(developer): Uncomment and set the following variables + # project_id = 'YOUR_PROJECT_ID' + # model_id = 'YOUR_MODEL_ID' + + client = automl.AutoMlClient() + # Get the full path of the model. + model_full_id = client.model_path(project_id, 'us-central1', model_id) + + print('List of model evaluations:') + for evaluation in client.list_model_evaluations(model_full_id, ''): + print(u'Model evaluation name: {}'.format(evaluation.name)) + print( + u'Model annotation spec id: {}'.format( + evaluation.annotation_spec_id)) + print(u'Create Time:') + print(u'\tseconds: {}'.format(evaluation.create_time.seconds)) + print(u'\tnanos: {}'.format(evaluation.create_time.nanos / 1e9)) + print(u'Evaluation example count: {}'.format( + evaluation.evaluated_example_count)) + # [END automl_language_sentiment_analysis_list_model_evaluations] + # [END automl_language_text_classification_list_model_evaluations] + # [END automl_translate_list_model_evaluations] + # [END automl_vision_classification_list_model_evaluations] + # [END automl_vision_object_detection_list_model_evaluations] + print('Entity extraction model evaluation metrics: {}'.format( + evaluation.text_extraction_evaluation_metrics)) + # [END automl_language_entity_extraction_list_model_evaluations] + + # [START automl_language_sentiment_analysis_list_model_evaluations] + print('Sentiment analysis model evaluation metrics: {}'.format( + evaluation.text_sentiment_evaluation_metrics)) + # [END automl_language_sentiment_analysis_list_model_evaluations] + + # [START automl_language_text_classification_list_model_evaluations] + # [START automl_vision_classification_list_model_evaluations] + print('Classification model evaluation metrics: {}'.format( + evaluation.classification_evaluation_metrics)) + # [END automl_language_text_classification_list_model_evaluations] + # [END automl_vision_classification_list_model_evaluations] + + # [START automl_translate_list_model_evaluations] + print('Translation model evaluation metrics: {}'.format( + evaluation.translation_evaluation_metrics)) + # [END automl_translate_list_model_evaluations] + + # [START automl_vision_object_detection_list_model_evaluations] + print('Object detection model evaluation metrics: {}\n\n'.format( + evaluation.image_object_detection_evaluation_metrics)) + # [END automl_vision_object_detection_list_model_evaluations] diff --git a/automl/cloud-client/list_models.py b/automl/cloud-client/list_models.py new file mode 100644 index 00000000000..9dc9fde8aca --- /dev/null +++ b/automl/cloud-client/list_models.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +# 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. + + +def list_models(project_id): + """List models.""" + # [START automl_list_models] + from google.cloud import automl + + # TODO(developer): Uncomment and set the following variables + # project_id = 'YOUR_PROJECT_ID' + + client = automl.AutoMlClient() + # A resource that represents Google Cloud Platform location. + project_location = client.location_path(project_id, 'us-central1') + response = client.list_models(project_location, '') + + print('List of models:') + for model in response: + # Display the model information. + if model.deployment_state == \ + automl.enums.Model.DeploymentState.DEPLOYED: + deployment_state = 'deployed' + else: + deployment_state = 'undeployed' + + print(u'Model name: {}'.format(model.name)) + print(u'Model id: {}'.format(model.name.split('/')[-1])) + print(u'Model display name: {}'.format(model.display_name)) + print(u'Model create time:') + print(u'\tseconds: {}'.format(model.create_time.seconds)) + print(u'\tnanos: {}'.format(model.create_time.nanos)) + print(u'Model deployment state: {}'.format(deployment_state)) + # [END automl_list_models] diff --git a/automl/cloud-client/requirements.txt b/automl/cloud-client/requirements.txt new file mode 100644 index 00000000000..d64d7c33cbc --- /dev/null +++ b/automl/cloud-client/requirements.txt @@ -0,0 +1,2 @@ +google-cloud-automl==0.8.0 +google-cloud-storage==1.20.0 \ No newline at end of file diff --git a/automl/cloud-client/undeploy_model.py b/automl/cloud-client/undeploy_model.py new file mode 100644 index 00000000000..8d7277dded2 --- /dev/null +++ b/automl/cloud-client/undeploy_model.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +# 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. + + +def undeploy_model(project_id, model_id): + """Undeploy a model.""" + # [START automl_undeploy_model] + from google.cloud import automl + + # TODO(developer): Uncomment and set the following variables + # project_id = 'YOUR_PROJECT_ID' + # model_id = 'YOUR_MODEL_ID' + + client = automl.AutoMlClient() + # Get the full path of the model. + model_full_id = client.model_path(project_id, 'us-central1', model_id) + response = client.undeploy_model(model_full_id) + + print(u'Model undeployment finished. {}'.format(response.result())) + # [END automl_undeploy_model] From cae70ac6e6785bb7d16aff2488b75a0f55645821 Mon Sep 17 00:00:00 2001 From: nnegrey Date: Fri, 13 Dec 2019 10:19:34 -0700 Subject: [PATCH 2/6] Add tests for each file, provide a unique model for each python version for kokoro --- automl/cloud-client/delete_model.py | 4 +- automl/cloud-client/delete_model_test.py | 6 +- automl/cloud-client/deploy_model.py | 4 +- automl/cloud-client/deploy_model_test.py | 20 +++++-- automl/cloud-client/get_model.py | 20 +++---- automl/cloud-client/get_model_evaluation.py | 50 ++++++++++------ .../cloud-client/get_model_evaluation_test.py | 46 +++++++++++++++ automl/cloud-client/get_model_test.py | 28 +++++++++ .../list_model_evaluation_test.py | 29 ++++++++++ automl/cloud-client/list_model_evaluations.py | 56 +++++++++++------- automl/cloud-client/list_models.py | 27 +++++---- automl/cloud-client/list_models_test.py | 27 +++++++++ automl/cloud-client/undeploy_model.py | 4 +- automl/cloud-client/undeploy_model_test.py | 57 +++++++++++++++++++ 14 files changed, 302 insertions(+), 76 deletions(-) create mode 100644 automl/cloud-client/get_model_evaluation_test.py create mode 100644 automl/cloud-client/get_model_test.py create mode 100644 automl/cloud-client/list_model_evaluation_test.py create mode 100644 automl/cloud-client/list_models_test.py create mode 100644 automl/cloud-client/undeploy_model_test.py diff --git a/automl/cloud-client/delete_model.py b/automl/cloud-client/delete_model.py index 8b9e64299bd..b436c0bbbce 100644 --- a/automl/cloud-client/delete_model.py +++ b/automl/cloud-client/delete_model.py @@ -26,8 +26,8 @@ def delete_model(project_id, model_id): client = automl.AutoMlClient() # Get the full path of the model. - model_full_id = client.model_path(project_id, 'us-central1', model_id) + model_full_id = client.model_path(project_id, "us-central1", model_id) response = client.delete_model(model_full_id) - print(u'Model deleted. {}'.format(response.result())) + print(u"Model deleted. {}".format(response.result())) # [END automl_delete_model] diff --git a/automl/cloud-client/delete_model_test.py b/automl/cloud-client/delete_model_test.py index 0da1a890255..8b310b80bf6 100644 --- a/automl/cloud-client/delete_model_test.py +++ b/automl/cloud-client/delete_model_test.py @@ -26,8 +26,8 @@ def test_delete_model(capsys): # nonexistent model and confirm that the model was not found, but other # elements of the request were valid. try: - delete_model.delete_model(PROJECT_ID, 'TRL0000000000000000000') + delete_model.delete_model(PROJECT_ID, "TRL0000000000000000000") out, _ = capsys.readouterr() - assert 'The model does not exist' in out + assert "The model does not exist" in out except Exception as e: - assert 'The model does not exist' in e.message \ No newline at end of file + assert "The model does not exist" in e.message diff --git a/automl/cloud-client/deploy_model.py b/automl/cloud-client/deploy_model.py index 7783e6b105c..bea669b08a1 100644 --- a/automl/cloud-client/deploy_model.py +++ b/automl/cloud-client/deploy_model.py @@ -26,8 +26,8 @@ def deploy_model(project_id, model_id): client = automl.AutoMlClient() # Get the full path of the model. - model_full_id = client.model_path(project_id, 'us-central1', model_id) + model_full_id = client.model_path(project_id, "us-central1", model_id) response = client.deploy_model(model_full_id) - print(u'Model deployment finished. {}'.format(response.result())) + print(u"Model deployment finished. {}".format(response.result())) # [END automl_deploy_model] diff --git a/automl/cloud-client/deploy_model_test.py b/automl/cloud-client/deploy_model_test.py index 84da4753305..1df7a437fe3 100644 --- a/automl/cloud-client/deploy_model_test.py +++ b/automl/cloud-client/deploy_model_test.py @@ -15,20 +15,32 @@ # limitations under the License. import os +import sys import pytest import deploy_model -PROJECT_ID = os.environ['GCLOUD_PROJECT'] -MODEL_ID = 'TEN5112482778553778176' +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + +if "major=3, minor=7" in sys.version_info: + MODEL_ID = "TEN5112482778553778176" +elif "major=3, minor=6" in sys.version_info: + MODEL_ID = "TCN3472481026502981088" +elif "major=3, minor=5" in sys.version_info: + MODEL_ID = "TST8532792392862639819" +elif "major=2, minor=7" in sys.version_info: + MODEL_ID = "TEN1499896588007374848" +else: + MODEL_ID = "TEN7450981283112419328" @pytest.fixture(scope="function") def verify_model_state(): from google.cloud import automl + client = automl.AutoMlClient() - model_full_id = client.model_path(PROJECT_ID, 'us-central1', MODEL_ID) + model_full_id = client.model_path(PROJECT_ID, "us-central1", MODEL_ID) model = client.get_model(model_full_id) if model.deployment_state == automl.enums.Model.DeploymentState.DEPLOYED: @@ -42,4 +54,4 @@ def test_deploy_undeploy_model(capsys, verify_model_state): verify_model_state deploy_model.deploy_model(PROJECT_ID, MODEL_ID) out, _ = capsys.readouterr() - assert 'Model deployment finished.' in out + assert "Model deployment finished." in out diff --git a/automl/cloud-client/get_model.py b/automl/cloud-client/get_model.py index 6fd5944f5a5..db844dbfecc 100644 --- a/automl/cloud-client/get_model.py +++ b/automl/cloud-client/get_model.py @@ -26,21 +26,21 @@ def get_model(project_id, model_id): client = automl.AutoMlClient() # Get the full path of the model. - model_full_id = client.model_path(project_id, 'us-central1', model_id) + model_full_id = client.model_path(project_id, "us-central1", model_id) model = client.get_model(model_full_id) # Retrieve deployment state. if model.deployment_state == automl.enums.Model.DeploymentState.DEPLOYED: - deployment_state = 'deployed' + deployment_state = "deployed" else: - deployment_state = 'undeployed' + deployment_state = "undeployed" # Display the model information. - print(u'Model name: {}'.format(model.name)) - print(u'Model id: {}'.format(model.name.split('/')[-1])) - print(u'Model display name: {}'.format(model.display_name)) - print(u'Model create time:') - print(u'\tseconds: {}'.format(model.create_time.seconds)) - print(u'\tnanos: {}'.format(model.create_time.nanos)) - print(u'Model deployment state: {}'.format(deployment_state)) + print(u"Model name: {}".format(model.name)) + print(u"Model id: {}".format(model.name.split("/")[-1])) + print(u"Model display name: {}".format(model.display_name)) + print(u"Model create time:") + print(u"\tseconds: {}".format(model.create_time.seconds)) + print(u"\tnanos: {}".format(model.create_time.nanos)) + print(u"Model deployment state: {}".format(deployment_state)) # [END automl_get_model] diff --git a/automl/cloud-client/get_model_evaluation.py b/automl/cloud-client/get_model_evaluation.py index 621c84e1ad4..5bbd4037dc5 100644 --- a/automl/cloud-client/get_model_evaluation.py +++ b/automl/cloud-client/get_model_evaluation.py @@ -33,46 +33,60 @@ def get_model_evaluation(project_id, model_id, model_evaluation_id): client = automl.AutoMlClient() # Get the full path of the model evaluation. model_evaluation_full_id = client.model_evaluation_path( - project_id, 'us-central1', model_id, model_evaluation_id + project_id, "us-central1", model_id, model_evaluation_id ) # Get complete detail of the model evaluation. response = client.get_model_evaluation(model_evaluation_full_id) - print(u'Model evaluation name: {}'.format(response.name)) - print(u'Model annotation spec id: {}'.format(response.annotation_spec_id)) - print('Create Time:') - print(u'\tseconds: {}'.format(response.create_time.seconds)) - print(u'\tnanos: {}'.format(response.create_time.nanos / 1e9)) - print(u'Evaluation example count: {}'.format( - response.evaluated_example_count)) + print(u"Model evaluation name: {}".format(response.name)) + print(u"Model annotation spec id: {}".format(response.annotation_spec_id)) + print("Create Time:") + print(u"\tseconds: {}".format(response.create_time.seconds)) + print(u"\tnanos: {}".format(response.create_time.nanos / 1e9)) + print(u"Evaluation example count: {}".format(response.evaluated_example_count)) # [END automl_language_sentiment_analysis_get_model_evaluation] # [END automl_language_text_classification_get_model_evaluation] # [END automl_translate_get_model_evaluation] # [END automl_vision_classification_get_model_evaluation] # [END automl_vision_object_detection_get_model_evaluation] - print('Entity extraction model evaluation metrics: {}'.format( - response.text_extraction_evaluation_metrics)) + print( + "Entity extraction model evaluation metrics: {}".format( + response.text_extraction_evaluation_metrics + ) + ) # [END automl_language_entity_extraction_get_model_evaluation] # [START automl_language_sentiment_analysis_get_model_evaluation] - print('Sentiment analysis model evaluation metrics: {}'.format( - response.text_sentiment_evaluation_metrics)) + print( + "Sentiment analysis model evaluation metrics: {}".format( + response.text_sentiment_evaluation_metrics + ) + ) # [END automl_language_sentiment_analysis_get_model_evaluation] # [START automl_language_text_classification_get_model_evaluation] # [START automl_vision_classification_get_model_evaluation] - print('Classification model evaluation metrics: {}'.format( - response.classification_evaluation_metrics)) + print( + "Classification model evaluation metrics: {}".format( + response.classification_evaluation_metrics + ) + ) # [END automl_language_text_classification_get_model_evaluation] # [END automl_vision_classification_get_model_evaluation] # [START automl_translate_get_model_evaluation] - print('Translation model evaluation metrics: {}'.format( - response.translation_evaluation_metrics)) + print( + "Translation model evaluation metrics: {}".format( + response.translation_evaluation_metrics + ) + ) # [END automl_translate_get_model_evaluation] # [START automl_vision_object_detection_get_model_evaluation] - print('Object detection model evaluation metrics: {}'.format( - response.image_object_detection_evaluation_metrics)) + print( + "Object detection model evaluation metrics: {}".format( + response.image_object_detection_evaluation_metrics + ) + ) # [END automl_vision_object_detection_get_model_evaluation] diff --git a/automl/cloud-client/get_model_evaluation_test.py b/automl/cloud-client/get_model_evaluation_test.py new file mode 100644 index 00000000000..a3b74f42e7e --- /dev/null +++ b/automl/cloud-client/get_model_evaluation_test.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import pytest + +import get_model_evaluation + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +MODEL_ID = "TEN1499896588007374848" + + +@pytest.fixture(scope="function") +def get_evaluation_id(): + from google.cloud import automl + + client = automl.AutoMlClient() + model_full_id = client.model_path(PROJECT_ID, "us-central1", MODEL_ID) + evaluation = None + for e in client.list_model_evaluations(model_full_id, ""): + evaluation = e + break + model_evaluation_id = evaluation.name.split( + "{}/modelEvaluations/".format(MODEL_ID) + )[1].split("\n")[0] + yield model_evaluation_id + + +def test_get_model_evaluation(capsys, get_evaluation_id): + get_model_evaluation.get_model_evaluation(PROJECT_ID, MODEL_ID, get_evaluation_id) + out, _ = capsys.readouterr() + assert "Model evaluation name: " in out diff --git a/automl/cloud-client/get_model_test.py b/automl/cloud-client/get_model_test.py new file mode 100644 index 00000000000..c58b0ee5090 --- /dev/null +++ b/automl/cloud-client/get_model_test.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import get_model + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +MODEL_ID = "TEN1499896588007374848" + + +def test_get_model(capsys): + get_model.get_model(PROJECT_ID, MODEL_ID) + out, _ = capsys.readouterr() + assert "Model id: " in out diff --git a/automl/cloud-client/list_model_evaluation_test.py b/automl/cloud-client/list_model_evaluation_test.py new file mode 100644 index 00000000000..e824484c5ed --- /dev/null +++ b/automl/cloud-client/list_model_evaluation_test.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import list_model_evaluations + + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] +MODEL_ID = "TEN1499896588007374848" + + +def test_list_get_eval_model(capsys): + list_model_evaluations.list_model_evaluations(PROJECT_ID, MODEL_ID) + out, _ = capsys.readouterr() + assert "Model evaluation name: " in out diff --git a/automl/cloud-client/list_model_evaluations.py b/automl/cloud-client/list_model_evaluations.py index 9e138d83651..083c1c056f3 100644 --- a/automl/cloud-client/list_model_evaluations.py +++ b/automl/cloud-client/list_model_evaluations.py @@ -31,46 +31,60 @@ def list_model_evaluations(project_id, model_id): client = automl.AutoMlClient() # Get the full path of the model. - model_full_id = client.model_path(project_id, 'us-central1', model_id) + model_full_id = client.model_path(project_id, "us-central1", model_id) - print('List of model evaluations:') - for evaluation in client.list_model_evaluations(model_full_id, ''): - print(u'Model evaluation name: {}'.format(evaluation.name)) + print("List of model evaluations:") + for evaluation in client.list_model_evaluations(model_full_id, ""): + print(u"Model evaluation name: {}".format(evaluation.name)) + print(u"Model annotation spec id: {}".format(evaluation.annotation_spec_id)) + print(u"Create Time:") + print(u"\tseconds: {}".format(evaluation.create_time.seconds)) + print(u"\tnanos: {}".format(evaluation.create_time.nanos / 1e9)) print( - u'Model annotation spec id: {}'.format( - evaluation.annotation_spec_id)) - print(u'Create Time:') - print(u'\tseconds: {}'.format(evaluation.create_time.seconds)) - print(u'\tnanos: {}'.format(evaluation.create_time.nanos / 1e9)) - print(u'Evaluation example count: {}'.format( - evaluation.evaluated_example_count)) + u"Evaluation example count: {}".format(evaluation.evaluated_example_count) + ) # [END automl_language_sentiment_analysis_list_model_evaluations] # [END automl_language_text_classification_list_model_evaluations] # [END automl_translate_list_model_evaluations] # [END automl_vision_classification_list_model_evaluations] # [END automl_vision_object_detection_list_model_evaluations] - print('Entity extraction model evaluation metrics: {}'.format( - evaluation.text_extraction_evaluation_metrics)) + print( + "Entity extraction model evaluation metrics: {}".format( + evaluation.text_extraction_evaluation_metrics + ) + ) # [END automl_language_entity_extraction_list_model_evaluations] # [START automl_language_sentiment_analysis_list_model_evaluations] - print('Sentiment analysis model evaluation metrics: {}'.format( - evaluation.text_sentiment_evaluation_metrics)) + print( + "Sentiment analysis model evaluation metrics: {}".format( + evaluation.text_sentiment_evaluation_metrics + ) + ) # [END automl_language_sentiment_analysis_list_model_evaluations] # [START automl_language_text_classification_list_model_evaluations] # [START automl_vision_classification_list_model_evaluations] - print('Classification model evaluation metrics: {}'.format( - evaluation.classification_evaluation_metrics)) + print( + "Classification model evaluation metrics: {}".format( + evaluation.classification_evaluation_metrics + ) + ) # [END automl_language_text_classification_list_model_evaluations] # [END automl_vision_classification_list_model_evaluations] # [START automl_translate_list_model_evaluations] - print('Translation model evaluation metrics: {}'.format( - evaluation.translation_evaluation_metrics)) + print( + "Translation model evaluation metrics: {}".format( + evaluation.translation_evaluation_metrics + ) + ) # [END automl_translate_list_model_evaluations] # [START automl_vision_object_detection_list_model_evaluations] - print('Object detection model evaluation metrics: {}\n\n'.format( - evaluation.image_object_detection_evaluation_metrics)) + print( + "Object detection model evaluation metrics: {}\n\n".format( + evaluation.image_object_detection_evaluation_metrics + ) + ) # [END automl_vision_object_detection_list_model_evaluations] diff --git a/automl/cloud-client/list_models.py b/automl/cloud-client/list_models.py index 9dc9fde8aca..c373571c822 100644 --- a/automl/cloud-client/list_models.py +++ b/automl/cloud-client/list_models.py @@ -25,23 +25,22 @@ def list_models(project_id): client = automl.AutoMlClient() # A resource that represents Google Cloud Platform location. - project_location = client.location_path(project_id, 'us-central1') - response = client.list_models(project_location, '') + project_location = client.location_path(project_id, "us-central1") + response = client.list_models(project_location, "") - print('List of models:') + print("List of models:") for model in response: # Display the model information. - if model.deployment_state == \ - automl.enums.Model.DeploymentState.DEPLOYED: - deployment_state = 'deployed' + if model.deployment_state == automl.enums.Model.DeploymentState.DEPLOYED: + deployment_state = "deployed" else: - deployment_state = 'undeployed' + deployment_state = "undeployed" - print(u'Model name: {}'.format(model.name)) - print(u'Model id: {}'.format(model.name.split('/')[-1])) - print(u'Model display name: {}'.format(model.display_name)) - print(u'Model create time:') - print(u'\tseconds: {}'.format(model.create_time.seconds)) - print(u'\tnanos: {}'.format(model.create_time.nanos)) - print(u'Model deployment state: {}'.format(deployment_state)) + print(u"Model name: {}".format(model.name)) + print(u"Model id: {}".format(model.name.split("/")[-1])) + print(u"Model display name: {}".format(model.display_name)) + print(u"Model create time:") + print(u"\tseconds: {}".format(model.create_time.seconds)) + print(u"\tnanos: {}".format(model.create_time.nanos)) + print(u"Model deployment state: {}".format(deployment_state)) # [END automl_list_models] diff --git a/automl/cloud-client/list_models_test.py b/automl/cloud-client/list_models_test.py new file mode 100644 index 00000000000..bf0d4a3f1a6 --- /dev/null +++ b/automl/cloud-client/list_models_test.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python + +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import list_models + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + + +def test_list_get_eval_model(capsys): + list_models.list_models(PROJECT_ID) + out, _ = capsys.readouterr() + assert "Model id: " in out diff --git a/automl/cloud-client/undeploy_model.py b/automl/cloud-client/undeploy_model.py index 8d7277dded2..bd5a36b0e97 100644 --- a/automl/cloud-client/undeploy_model.py +++ b/automl/cloud-client/undeploy_model.py @@ -26,8 +26,8 @@ def undeploy_model(project_id, model_id): client = automl.AutoMlClient() # Get the full path of the model. - model_full_id = client.model_path(project_id, 'us-central1', model_id) + model_full_id = client.model_path(project_id, "us-central1", model_id) response = client.undeploy_model(model_full_id) - print(u'Model undeployment finished. {}'.format(response.result())) + print(u"Model undeployment finished. {}".format(response.result())) # [END automl_undeploy_model] diff --git a/automl/cloud-client/undeploy_model_test.py b/automl/cloud-client/undeploy_model_test.py new file mode 100644 index 00000000000..bac6f69a7ed --- /dev/null +++ b/automl/cloud-client/undeploy_model_test.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys + +import pytest + +import undeploy_model + +PROJECT_ID = os.environ["GCLOUD_PROJECT"] + +if "major=3, minor=7" in sys.version_info: + MODEL_ID = "TEN5112482778553778176" +elif "major=3, minor=6" in sys.version_info: + MODEL_ID = "TCN3472481026502981088" +elif "major=3, minor=5" in sys.version_info: + MODEL_ID = "TST8532792392862639819" +elif "major=2, minor=7" in sys.version_info: + MODEL_ID = "TEN1499896588007374848" +else: + MODEL_ID = "TEN7450981283112419328" + + +@pytest.fixture(scope="function") +def verify_model_state(): + from google.cloud import automl + + client = automl.AutoMlClient() + model_full_id = client.model_path(PROJECT_ID, "us-central1", MODEL_ID) + + model = client.get_model(model_full_id) + if model.deployment_state == automl.enums.Model.DeploymentState.UNDEPLOYED: + # Deploy model if it is deployed + response = client.deploy_model(model_full_id) + response.result() + + +@pytest.mark.slow +def test_deploy_undeploy_model(capsys, verify_model_state): + verify_model_state + undeploy_model.undeploy_model(PROJECT_ID, MODEL_ID) + out, _ = capsys.readouterr() + assert "Model undeployment finished." in out From 28008ffeafdfbd9a7968a5505d3e5f51af7cf629 Mon Sep 17 00:00:00 2001 From: nnegrey Date: Fri, 13 Dec 2019 10:37:53 -0700 Subject: [PATCH 3/6] Fix version check --- automl/cloud-client/deploy_model_test.py | 16 +++++++++------- automl/cloud-client/undeploy_model_test.py | 16 +++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/automl/cloud-client/deploy_model_test.py b/automl/cloud-client/deploy_model_test.py index 1df7a437fe3..511a130c9a4 100644 --- a/automl/cloud-client/deploy_model_test.py +++ b/automl/cloud-client/deploy_model_test.py @@ -23,13 +23,15 @@ PROJECT_ID = os.environ["GCLOUD_PROJECT"] -if "major=3, minor=7" in sys.version_info: - MODEL_ID = "TEN5112482778553778176" -elif "major=3, minor=6" in sys.version_info: - MODEL_ID = "TCN3472481026502981088" -elif "major=3, minor=5" in sys.version_info: - MODEL_ID = "TST8532792392862639819" -elif "major=2, minor=7" in sys.version_info: +version_info = sys.version_info +if version_info.major == 3: + if version_info.minor == 5: + MODEL_ID = "TEN5112482778553778176" + elif version_info.minor == 6: + MODEL_ID = "TCN3472481026502981088" + elif version_info.minor == 7: + MODEL_ID = "TST8532792392862639819" +elif version_info.major == 2: MODEL_ID = "TEN1499896588007374848" else: MODEL_ID = "TEN7450981283112419328" diff --git a/automl/cloud-client/undeploy_model_test.py b/automl/cloud-client/undeploy_model_test.py index bac6f69a7ed..c2df94c6818 100644 --- a/automl/cloud-client/undeploy_model_test.py +++ b/automl/cloud-client/undeploy_model_test.py @@ -23,13 +23,15 @@ PROJECT_ID = os.environ["GCLOUD_PROJECT"] -if "major=3, minor=7" in sys.version_info: - MODEL_ID = "TEN5112482778553778176" -elif "major=3, minor=6" in sys.version_info: - MODEL_ID = "TCN3472481026502981088" -elif "major=3, minor=5" in sys.version_info: - MODEL_ID = "TST8532792392862639819" -elif "major=2, minor=7" in sys.version_info: +version_info = sys.version_info +if version_info.major == 3: + if version_info.minor == 5: + MODEL_ID = "TEN5112482778553778176" + elif version_info.minor == 6: + MODEL_ID = "TCN3472481026502981088" + elif version_info.minor == 7: + MODEL_ID = "TST8532792392862639819" +elif version_info.major == 2: MODEL_ID = "TEN1499896588007374848" else: MODEL_ID = "TEN7450981283112419328" From 8410b9f7076ba29d9faa23ee60529d0ae73fe2fb Mon Sep 17 00:00:00 2001 From: nnegrey Date: Wed, 18 Dec 2019 14:51:38 -0700 Subject: [PATCH 4/6] Update tests and format --- automl/cloud-client/delete_model.py | 4 +- automl/cloud-client/delete_model_test.py | 2 - automl/cloud-client/deploy_model.py | 4 +- automl/cloud-client/deploy_model_test.py | 46 +++++-------------- automl/cloud-client/get_model.py | 16 +++---- automl/cloud-client/get_model_evaluation.py | 14 +++--- .../cloud-client/get_model_evaluation_test.py | 6 +-- automl/cloud-client/get_model_test.py | 2 - automl/cloud-client/list_model_evaluations.py | 20 ++++---- ...test.py => list_model_evaluations_test.py} | 2 - automl/cloud-client/list_models.py | 21 +++++---- automl/cloud-client/list_models_test.py | 2 - automl/cloud-client/undeploy_model.py | 4 +- automl/cloud-client/undeploy_model_test.py | 46 +++++-------------- 14 files changed, 65 insertions(+), 124 deletions(-) rename automl/cloud-client/{list_model_evaluation_test.py => list_model_evaluations_test.py} (97%) diff --git a/automl/cloud-client/delete_model.py b/automl/cloud-client/delete_model.py index b436c0bbbce..5866ad8db90 100644 --- a/automl/cloud-client/delete_model.py +++ b/automl/cloud-client/delete_model.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,5 +27,5 @@ def delete_model(project_id, model_id): model_full_id = client.model_path(project_id, "us-central1", model_id) response = client.delete_model(model_full_id) - print(u"Model deleted. {}".format(response.result())) + print("Model deleted. {}".format(response.result())) # [END automl_delete_model] diff --git a/automl/cloud-client/delete_model_test.py b/automl/cloud-client/delete_model_test.py index 8b310b80bf6..4b68a647557 100644 --- a/automl/cloud-client/delete_model_test.py +++ b/automl/cloud-client/delete_model_test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/automl/cloud-client/deploy_model.py b/automl/cloud-client/deploy_model.py index bea669b08a1..c395d8ae480 100644 --- a/automl/cloud-client/deploy_model.py +++ b/automl/cloud-client/deploy_model.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,5 +27,5 @@ def deploy_model(project_id, model_id): model_full_id = client.model_path(project_id, "us-central1", model_id) response = client.deploy_model(model_full_id) - print(u"Model deployment finished. {}".format(response.result())) + print("Model deployment finished. {}".format(response.result())) # [END automl_deploy_model] diff --git a/automl/cloud-client/deploy_model_test.py b/automl/cloud-client/deploy_model_test.py index 511a130c9a4..b3a8e87cf80 100644 --- a/automl/cloud-client/deploy_model_test.py +++ b/automl/cloud-client/deploy_model_test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,45 +13,23 @@ # limitations under the License. import os -import sys import pytest import deploy_model PROJECT_ID = os.environ["GCLOUD_PROJECT"] - -version_info = sys.version_info -if version_info.major == 3: - if version_info.minor == 5: - MODEL_ID = "TEN5112482778553778176" - elif version_info.minor == 6: - MODEL_ID = "TCN3472481026502981088" - elif version_info.minor == 7: - MODEL_ID = "TST8532792392862639819" -elif version_info.major == 2: - MODEL_ID = "TEN1499896588007374848" -else: - MODEL_ID = "TEN7450981283112419328" - - -@pytest.fixture(scope="function") -def verify_model_state(): - from google.cloud import automl - - client = automl.AutoMlClient() - model_full_id = client.model_path(PROJECT_ID, "us-central1", MODEL_ID) - - model = client.get_model(model_full_id) - if model.deployment_state == automl.enums.Model.DeploymentState.DEPLOYED: - # Undeploy model if it is deployed - response = client.undeploy_model(model_full_id) - response.result() +MODEL_ID = "TRL0000000000000000000" @pytest.mark.slow -def test_deploy_undeploy_model(capsys, verify_model_state): - verify_model_state - deploy_model.deploy_model(PROJECT_ID, MODEL_ID) - out, _ = capsys.readouterr() - assert "Model deployment finished." in out +def test_deploy_undeploy_model(capsys): + # As model deployment can take a long time, instead try to deploy a + # nonexistent model and confirm that the model was not found, but other + # elements of the request were valid. + try: + deploy_model.deploy_model(PROJECT_ID, MODEL_ID) + out, _ = capsys.readouterr() + assert "The model does not exist" in out + except Exception as e: + assert "The model does not exist" in e.message diff --git a/automl/cloud-client/get_model.py b/automl/cloud-client/get_model.py index db844dbfecc..f561094562c 100644 --- a/automl/cloud-client/get_model.py +++ b/automl/cloud-client/get_model.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -36,11 +34,11 @@ def get_model(project_id, model_id): deployment_state = "undeployed" # Display the model information. - print(u"Model name: {}".format(model.name)) - print(u"Model id: {}".format(model.name.split("/")[-1])) - print(u"Model display name: {}".format(model.display_name)) - print(u"Model create time:") - print(u"\tseconds: {}".format(model.create_time.seconds)) - print(u"\tnanos: {}".format(model.create_time.nanos)) - print(u"Model deployment state: {}".format(deployment_state)) + print("Model name: {}".format(model.name)) + print("Model id: {}".format(model.name.split("/")[-1])) + print("Model display name: {}".format(model.display_name)) + print("Model create time:") + print("\tseconds: {}".format(model.create_time.seconds)) + print("\tnanos: {}".format(model.create_time.nanos)) + print("Model deployment state: {}".format(deployment_state)) # [END automl_get_model] diff --git a/automl/cloud-client/get_model_evaluation.py b/automl/cloud-client/get_model_evaluation.py index 5bbd4037dc5..2e4bb080e8a 100644 --- a/automl/cloud-client/get_model_evaluation.py +++ b/automl/cloud-client/get_model_evaluation.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -39,12 +37,14 @@ def get_model_evaluation(project_id, model_id, model_evaluation_id): # Get complete detail of the model evaluation. response = client.get_model_evaluation(model_evaluation_full_id) - print(u"Model evaluation name: {}".format(response.name)) - print(u"Model annotation spec id: {}".format(response.annotation_spec_id)) + print("Model evaluation name: {}".format(response.name)) + print("Model annotation spec id: {}".format(response.annotation_spec_id)) print("Create Time:") - print(u"\tseconds: {}".format(response.create_time.seconds)) - print(u"\tnanos: {}".format(response.create_time.nanos / 1e9)) - print(u"Evaluation example count: {}".format(response.evaluated_example_count)) + print("\tseconds: {}".format(response.create_time.seconds)) + print("\tnanos: {}".format(response.create_time.nanos / 1e9)) + print( + "Evaluation example count: {}".format(response.evaluated_example_count) + ) # [END automl_language_sentiment_analysis_get_model_evaluation] # [END automl_language_text_classification_get_model_evaluation] # [END automl_translate_get_model_evaluation] diff --git a/automl/cloud-client/get_model_evaluation_test.py b/automl/cloud-client/get_model_evaluation_test.py index a3b74f42e7e..fc4ee84ba4e 100644 --- a/automl/cloud-client/get_model_evaluation_test.py +++ b/automl/cloud-client/get_model_evaluation_test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -41,6 +39,8 @@ def get_evaluation_id(): def test_get_model_evaluation(capsys, get_evaluation_id): - get_model_evaluation.get_model_evaluation(PROJECT_ID, MODEL_ID, get_evaluation_id) + get_model_evaluation.get_model_evaluation( + PROJECT_ID, MODEL_ID, get_evaluation_id + ) out, _ = capsys.readouterr() assert "Model evaluation name: " in out diff --git a/automl/cloud-client/get_model_test.py b/automl/cloud-client/get_model_test.py index c58b0ee5090..dcc4dac0dd9 100644 --- a/automl/cloud-client/get_model_test.py +++ b/automl/cloud-client/get_model_test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/automl/cloud-client/list_model_evaluations.py b/automl/cloud-client/list_model_evaluations.py index 083c1c056f3..5c3675a528c 100644 --- a/automl/cloud-client/list_model_evaluations.py +++ b/automl/cloud-client/list_model_evaluations.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,13 +33,19 @@ def list_model_evaluations(project_id, model_id): print("List of model evaluations:") for evaluation in client.list_model_evaluations(model_full_id, ""): - print(u"Model evaluation name: {}".format(evaluation.name)) - print(u"Model annotation spec id: {}".format(evaluation.annotation_spec_id)) - print(u"Create Time:") - print(u"\tseconds: {}".format(evaluation.create_time.seconds)) - print(u"\tnanos: {}".format(evaluation.create_time.nanos / 1e9)) + print("Model evaluation name: {}".format(evaluation.name)) print( - u"Evaluation example count: {}".format(evaluation.evaluated_example_count) + "Model annotation spec id: {}".format( + evaluation.annotation_spec_id + ) + ) + print("Create Time:") + print("\tseconds: {}".format(evaluation.create_time.seconds)) + print("\tnanos: {}".format(evaluation.create_time.nanos / 1e9)) + print( + "Evaluation example count: {}".format( + evaluation.evaluated_example_count + ) ) # [END automl_language_sentiment_analysis_list_model_evaluations] # [END automl_language_text_classification_list_model_evaluations] diff --git a/automl/cloud-client/list_model_evaluation_test.py b/automl/cloud-client/list_model_evaluations_test.py similarity index 97% rename from automl/cloud-client/list_model_evaluation_test.py rename to automl/cloud-client/list_model_evaluations_test.py index e824484c5ed..a114f76fcf0 100644 --- a/automl/cloud-client/list_model_evaluation_test.py +++ b/automl/cloud-client/list_model_evaluations_test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/automl/cloud-client/list_models.py b/automl/cloud-client/list_models.py index c373571c822..f855dcf71ff 100644 --- a/automl/cloud-client/list_models.py +++ b/automl/cloud-client/list_models.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,16 +29,19 @@ def list_models(project_id): print("List of models:") for model in response: # Display the model information. - if model.deployment_state == automl.enums.Model.DeploymentState.DEPLOYED: + if ( + model.deployment_state + == automl.enums.Model.DeploymentState.DEPLOYED + ): deployment_state = "deployed" else: deployment_state = "undeployed" - print(u"Model name: {}".format(model.name)) - print(u"Model id: {}".format(model.name.split("/")[-1])) - print(u"Model display name: {}".format(model.display_name)) - print(u"Model create time:") - print(u"\tseconds: {}".format(model.create_time.seconds)) - print(u"\tnanos: {}".format(model.create_time.nanos)) - print(u"Model deployment state: {}".format(deployment_state)) + print("Model name: {}".format(model.name)) + print("Model id: {}".format(model.name.split("/")[-1])) + print("Model display name: {}".format(model.display_name)) + print("Model create time:") + print("\tseconds: {}".format(model.create_time.seconds)) + print("\tnanos: {}".format(model.create_time.nanos)) + print("Model deployment state: {}".format(deployment_state)) # [END automl_list_models] diff --git a/automl/cloud-client/list_models_test.py b/automl/cloud-client/list_models_test.py index bf0d4a3f1a6..05208819e66 100644 --- a/automl/cloud-client/list_models_test.py +++ b/automl/cloud-client/list_models_test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/automl/cloud-client/undeploy_model.py b/automl/cloud-client/undeploy_model.py index bd5a36b0e97..02393a43333 100644 --- a/automl/cloud-client/undeploy_model.py +++ b/automl/cloud-client/undeploy_model.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,5 +27,5 @@ def undeploy_model(project_id, model_id): model_full_id = client.model_path(project_id, "us-central1", model_id) response = client.undeploy_model(model_full_id) - print(u"Model undeployment finished. {}".format(response.result())) + print("Model undeployment finished. {}".format(response.result())) # [END automl_undeploy_model] diff --git a/automl/cloud-client/undeploy_model_test.py b/automl/cloud-client/undeploy_model_test.py index c2df94c6818..da5987f02c5 100644 --- a/automl/cloud-client/undeploy_model_test.py +++ b/automl/cloud-client/undeploy_model_test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,45 +13,23 @@ # limitations under the License. import os -import sys import pytest import undeploy_model PROJECT_ID = os.environ["GCLOUD_PROJECT"] - -version_info = sys.version_info -if version_info.major == 3: - if version_info.minor == 5: - MODEL_ID = "TEN5112482778553778176" - elif version_info.minor == 6: - MODEL_ID = "TCN3472481026502981088" - elif version_info.minor == 7: - MODEL_ID = "TST8532792392862639819" -elif version_info.major == 2: - MODEL_ID = "TEN1499896588007374848" -else: - MODEL_ID = "TEN7450981283112419328" - - -@pytest.fixture(scope="function") -def verify_model_state(): - from google.cloud import automl - - client = automl.AutoMlClient() - model_full_id = client.model_path(PROJECT_ID, "us-central1", MODEL_ID) - - model = client.get_model(model_full_id) - if model.deployment_state == automl.enums.Model.DeploymentState.UNDEPLOYED: - # Deploy model if it is deployed - response = client.deploy_model(model_full_id) - response.result() +MODEL_ID = "TRL0000000000000000000" @pytest.mark.slow -def test_deploy_undeploy_model(capsys, verify_model_state): - verify_model_state - undeploy_model.undeploy_model(PROJECT_ID, MODEL_ID) - out, _ = capsys.readouterr() - assert "Model undeployment finished." in out +def test_undeploy_model(capsys): + # As model undeployment can take a long time, instead try to deploy a + # nonexistent model and confirm that the model was not found, but other + # elements of the request were valid. + try: + undeploy_model.undeploy_model(PROJECT_ID, MODEL_ID) + out, _ = capsys.readouterr() + assert "The model does not exist" in out + except Exception as e: + assert "The model does not exist" in e.message From a2ef554603170daefc2dcb23c45b991d199f6c97 Mon Sep 17 00:00:00 2001 From: Noah Negrey Date: Wed, 18 Dec 2019 15:02:25 -0700 Subject: [PATCH 5/6] Update deploy_model_test.py --- automl/cloud-client/deploy_model_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/automl/cloud-client/deploy_model_test.py b/automl/cloud-client/deploy_model_test.py index b3a8e87cf80..a1a74adc386 100644 --- a/automl/cloud-client/deploy_model_test.py +++ b/automl/cloud-client/deploy_model_test.py @@ -23,7 +23,7 @@ @pytest.mark.slow -def test_deploy_undeploy_model(capsys): +def test_deploy_model(capsys): # As model deployment can take a long time, instead try to deploy a # nonexistent model and confirm that the model was not found, but other # elements of the request were valid. From 49667a8706065d142e7a0271dda79904f9acbe65 Mon Sep 17 00:00:00 2001 From: nnegrey Date: Thu, 19 Dec 2019 09:30:53 -0700 Subject: [PATCH 6/6] Update license headers, ensure double quotes is used everywhere, leave black formatting --- automl/cloud-client/delete_model.py | 4 ++-- automl/cloud-client/deploy_model.py | 4 ++-- automl/cloud-client/deploy_model_test.py | 2 +- automl/cloud-client/get_model.py | 4 ++-- automl/cloud-client/get_model_evaluation.py | 6 +++--- automl/cloud-client/get_model_evaluation_test.py | 2 +- automl/cloud-client/get_model_test.py | 2 +- automl/cloud-client/list_model_evaluations.py | 4 ++-- automl/cloud-client/list_model_evaluations_test.py | 2 +- automl/cloud-client/list_models.py | 2 +- automl/cloud-client/list_models_test.py | 2 +- automl/cloud-client/undeploy_model.py | 4 ++-- automl/cloud-client/undeploy_model_test.py | 2 +- 13 files changed, 20 insertions(+), 20 deletions(-) diff --git a/automl/cloud-client/delete_model.py b/automl/cloud-client/delete_model.py index 5866ad8db90..cc6e7546882 100644 --- a/automl/cloud-client/delete_model.py +++ b/automl/cloud-client/delete_model.py @@ -19,8 +19,8 @@ def delete_model(project_id, model_id): from google.cloud import automl # TODO(developer): Uncomment and set the following variables - # project_id = 'YOUR_PROJECT_ID' - # model_id = 'YOUR_MODEL_ID' + # project_id = "YOUR_PROJECT_ID" + # model_id = "YOUR_MODEL_ID" client = automl.AutoMlClient() # Get the full path of the model. diff --git a/automl/cloud-client/deploy_model.py b/automl/cloud-client/deploy_model.py index c395d8ae480..cc55cf1e312 100644 --- a/automl/cloud-client/deploy_model.py +++ b/automl/cloud-client/deploy_model.py @@ -19,8 +19,8 @@ def deploy_model(project_id, model_id): from google.cloud import automl # TODO(developer): Uncomment and set the following variables - # project_id = 'YOUR_PROJECT_ID' - # model_id = 'YOUR_MODEL_ID' + # project_id = "YOUR_PROJECT_ID" + # model_id = "YOUR_MODEL_ID" client = automl.AutoMlClient() # Get the full path of the model. diff --git a/automl/cloud-client/deploy_model_test.py b/automl/cloud-client/deploy_model_test.py index a1a74adc386..8a2026188b8 100644 --- a/automl/cloud-client/deploy_model_test.py +++ b/automl/cloud-client/deploy_model_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/automl/cloud-client/get_model.py b/automl/cloud-client/get_model.py index f561094562c..b1ea5154f60 100644 --- a/automl/cloud-client/get_model.py +++ b/automl/cloud-client/get_model.py @@ -19,8 +19,8 @@ def get_model(project_id, model_id): from google.cloud import automl # TODO(developer): Uncomment and set the following variables - # project_id = 'YOUR_PROJECT_ID' - # model_id = 'YOUR_MODEL_ID' + # project_id = "YOUR_PROJECT_ID" + # model_id = "YOUR_MODEL_ID" client = automl.AutoMlClient() # Get the full path of the model. diff --git a/automl/cloud-client/get_model_evaluation.py b/automl/cloud-client/get_model_evaluation.py index 2e4bb080e8a..4a1a97a393e 100644 --- a/automl/cloud-client/get_model_evaluation.py +++ b/automl/cloud-client/get_model_evaluation.py @@ -24,9 +24,9 @@ def get_model_evaluation(project_id, model_id, model_evaluation_id): from google.cloud import automl # TODO(developer): Uncomment and set the following variables - # project_id = 'YOUR_PROJECT_ID' - # model_id = 'YOUR_MODEL_ID' - # model_evaluation_id = 'YOUR_MODEL_EVALUATION_ID' + # project_id = "YOUR_PROJECT_ID" + # model_id = "YOUR_MODEL_ID" + # model_evaluation_id = "YOUR_MODEL_EVALUATION_ID" client = automl.AutoMlClient() # Get the full path of the model evaluation. diff --git a/automl/cloud-client/get_model_evaluation_test.py b/automl/cloud-client/get_model_evaluation_test.py index fc4ee84ba4e..252c860d6cb 100644 --- a/automl/cloud-client/get_model_evaluation_test.py +++ b/automl/cloud-client/get_model_evaluation_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/automl/cloud-client/get_model_test.py b/automl/cloud-client/get_model_test.py index dcc4dac0dd9..176161bf6fe 100644 --- a/automl/cloud-client/get_model_test.py +++ b/automl/cloud-client/get_model_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/automl/cloud-client/list_model_evaluations.py b/automl/cloud-client/list_model_evaluations.py index 5c3675a528c..3dcb7932a2f 100644 --- a/automl/cloud-client/list_model_evaluations.py +++ b/automl/cloud-client/list_model_evaluations.py @@ -24,8 +24,8 @@ def list_model_evaluations(project_id, model_id): from google.cloud import automl # TODO(developer): Uncomment and set the following variables - # project_id = 'YOUR_PROJECT_ID' - # model_id = 'YOUR_MODEL_ID' + # project_id = "YOUR_PROJECT_ID" + # model_id = "YOUR_MODEL_ID" client = automl.AutoMlClient() # Get the full path of the model. diff --git a/automl/cloud-client/list_model_evaluations_test.py b/automl/cloud-client/list_model_evaluations_test.py index a114f76fcf0..2acad83ed1d 100644 --- a/automl/cloud-client/list_model_evaluations_test.py +++ b/automl/cloud-client/list_model_evaluations_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/automl/cloud-client/list_models.py b/automl/cloud-client/list_models.py index f855dcf71ff..5c5dff6743f 100644 --- a/automl/cloud-client/list_models.py +++ b/automl/cloud-client/list_models.py @@ -19,7 +19,7 @@ def list_models(project_id): from google.cloud import automl # TODO(developer): Uncomment and set the following variables - # project_id = 'YOUR_PROJECT_ID' + # project_id = "YOUR_PROJECT_ID" client = automl.AutoMlClient() # A resource that represents Google Cloud Platform location. diff --git a/automl/cloud-client/list_models_test.py b/automl/cloud-client/list_models_test.py index 05208819e66..adb64190987 100644 --- a/automl/cloud-client/list_models_test.py +++ b/automl/cloud-client/list_models_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/automl/cloud-client/undeploy_model.py b/automl/cloud-client/undeploy_model.py index 02393a43333..b737064dc5f 100644 --- a/automl/cloud-client/undeploy_model.py +++ b/automl/cloud-client/undeploy_model.py @@ -19,8 +19,8 @@ def undeploy_model(project_id, model_id): from google.cloud import automl # TODO(developer): Uncomment and set the following variables - # project_id = 'YOUR_PROJECT_ID' - # model_id = 'YOUR_MODEL_ID' + # project_id = "YOUR_PROJECT_ID" + # model_id = "YOUR_MODEL_ID" client = automl.AutoMlClient() # Get the full path of the model. diff --git a/automl/cloud-client/undeploy_model_test.py b/automl/cloud-client/undeploy_model_test.py index da5987f02c5..caaa78f07fc 100644 --- a/automl/cloud-client/undeploy_model_test.py +++ b/automl/cloud-client/undeploy_model_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License.