From b9a9f1f773384177fa7c3a27f93487fb25eb6740 Mon Sep 17 00:00:00 2001 From: averikitsch Date: Wed, 19 Dec 2018 16:06:39 -0800 Subject: [PATCH 01/11] scheduler sample --- scheduler/.gcloudignore | 17 +++++++++++++++ scheduler/app.yaml | 9 ++++++++ scheduler/create_job.py | 42 ++++++++++++++++++++++++++++++++++++++ scheduler/main.py | 41 +++++++++++++++++++++++++++++++++++++ scheduler/requirements.txt | 3 +++ 5 files changed, 112 insertions(+) create mode 100644 scheduler/.gcloudignore create mode 100644 scheduler/app.yaml create mode 100644 scheduler/create_job.py create mode 100644 scheduler/main.py create mode 100644 scheduler/requirements.txt diff --git a/scheduler/.gcloudignore b/scheduler/.gcloudignore new file mode 100644 index 000000000000..a3f0c766722f --- /dev/null +++ b/scheduler/.gcloudignore @@ -0,0 +1,17 @@ +# This file specifies files that are *not* uploaded to Google Cloud Platform +# using gcloud. It follows the same syntax as .gitignore, with the addition of +# "#!include" directives (which insert the entries of the given .gitignore-style +# file at that point). +# +# For more information, run: +# $ gcloud topic gcloudignore +# +.gcloudignore +# If you would like to upload your .git directory, .gitignore file or files +# from your .gitignore file, remove the corresponding line +# below: +.git +.gitignore + +# Node.js dependencies: +node_modules/ \ No newline at end of file diff --git a/scheduler/app.yaml b/scheduler/app.yaml new file mode 100644 index 000000000000..eb6082eead60 --- /dev/null +++ b/scheduler/app.yaml @@ -0,0 +1,9 @@ +runtime: python +env: flex +entrypoint: gunicorn -b :$PORT main:app + +runtime_config: + python_version: 3 + +env_variables: + PYTHONUNBUFFERED: TRUE diff --git a/scheduler/create_job.py b/scheduler/create_job.py new file mode 100644 index 000000000000..d04c4144d380 --- /dev/null +++ b/scheduler/create_job.py @@ -0,0 +1,42 @@ + # 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. + +# [START cloud_scheduler_create_job] +from google.cloud import scheduler + +client = scheduler.CloudSchedulerClient() + +# TODO(developer): Uncomment and set the following variables +# project_id = "PROJECT_ID" +# location_id = "LOCATION_ID" +# app_engine_version = "VERSION_ID" + +parent = client.location_path(project_id, location_id) + +job = { + 'app_engine_http_target': { + 'app_engine_routing': { + 'service':'default', + 'version': app_engine_version + }, + 'relative_uri': '/log_payload', + 'http_method': 'POST', + 'body': 'Hello World'.encode() + }, + 'schedule': "* * * * *", + 'time_zone': "America/Los_Angeles" +} + +response = client.create_job(parent, job) +# [END cloud_scheduler_create_job] diff --git a/scheduler/main.py b/scheduler/main.py new file mode 100644 index 000000000000..2b399a611386 --- /dev/null +++ b/scheduler/main.py @@ -0,0 +1,41 @@ +# 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. + +"""App Engine app to serve as an endpoint for Cloud Scheduler samples.""" + +# [START cloud_scheduler_quickstart] +from flask import Flask, request + +app = Flask(__name__) + + +@app.route('/log_payload', methods=['POST']) +def example_task_handler(): + """Log the request payload.""" + payload = request.get_data(as_text=True) or '(empty payload)' + print('Received job with payload: {}'.format(payload), flush=True) + return 'Printed job payload: {}'.format(payload) +# [END cloud_scheduler_quickstart] + + +@app.route('/') +def hello(): + """Basic index to verify app is serving.""" + return 'Hello World!' + + +if __name__ == '__main__': + # This is used when running locally. Gunicorn is used to run the + # application on Google App Engine. See entrypoint in app.yaml. + app.run(host='127.0.0.1', port=8080, debug=True) diff --git a/scheduler/requirements.txt b/scheduler/requirements.txt new file mode 100644 index 000000000000..6fc789799aab --- /dev/null +++ b/scheduler/requirements.txt @@ -0,0 +1,3 @@ +Flask==1.0.2 +gunicorn==19.9.0 +google-cloud-scheduler==0.1.0 From 61019cdaa5f6863cc708b417a2abc954bd95e472 Mon Sep 17 00:00:00 2001 From: averikitsch Date: Wed, 9 Jan 2019 11:39:42 -0800 Subject: [PATCH 02/11] scheduler tutorial draft --- scheduler/README.md | 0 scheduler/app.yaml | 4 +- scheduler/create_job.py | 91 ++++++++++++++++++++---------------- scheduler/create_job_test.py | 26 +++++++++++ scheduler/main.py | 6 +-- scheduler/main_test.py | 45 ++++++++++++++++++ 6 files changed, 125 insertions(+), 47 deletions(-) create mode 100644 scheduler/README.md create mode 100644 scheduler/create_job_test.py create mode 100644 scheduler/main_test.py diff --git a/scheduler/README.md b/scheduler/README.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/scheduler/app.yaml b/scheduler/app.yaml index eb6082eead60..c0754f622555 100644 --- a/scheduler/app.yaml +++ b/scheduler/app.yaml @@ -1,9 +1,7 @@ runtime: python +service: my-service env: flex entrypoint: gunicorn -b :$PORT main:app runtime_config: python_version: 3 - -env_variables: - PYTHONUNBUFFERED: TRUE diff --git a/scheduler/create_job.py b/scheduler/create_job.py index d04c4144d380..211e9899a35f 100644 --- a/scheduler/create_job.py +++ b/scheduler/create_job.py @@ -1,42 +1,51 @@ - # 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. - -# [START cloud_scheduler_create_job] -from google.cloud import scheduler - -client = scheduler.CloudSchedulerClient() - -# TODO(developer): Uncomment and set the following variables -# project_id = "PROJECT_ID" -# location_id = "LOCATION_ID" -# app_engine_version = "VERSION_ID" - -parent = client.location_path(project_id, location_id) - -job = { - 'app_engine_http_target': { - 'app_engine_routing': { - 'service':'default', - 'version': app_engine_version +# 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. + + +def create_scheduler_job(project_id, location_id, service_id): + # [START cloud_scheduler_quickstart] + """Create a job with an App Engine target via the Cloud Scheduler API""" + from google.cloud import scheduler + + # Create a client. + client = scheduler.CloudSchedulerClient() + + # TODO(developer): Uncomment and set the following variables + # project_id = 'PROJECT_ID' + # location_id = 'LOCATION_ID' + # service_id = 'my-service' + + # Construct the fully qualified location path. + parent = client.location_path(project_id, location_id) + + # Construct the request body. + job = { + 'app_engine_http_target': { + 'app_engine_routing': { + 'service': service_id + }, + 'relative_uri': '/log_payload', + 'http_method': 'POST', + 'body': 'Hello World'.encode() }, - 'relative_uri': '/log_payload', - 'http_method': 'POST', - 'body': 'Hello World'.encode() - }, - 'schedule': "* * * * *", - 'time_zone': "America/Los_Angeles" -} - -response = client.create_job(parent, job) -# [END cloud_scheduler_create_job] + 'schedule': '* * * * *', + 'time_zone': 'America/Los_Angeles' + } + + # Use the client to send job creation request. + response = client.create_job(parent, job) + + print('Created job: {}'.format(response.name)) + return response +# [END cloud_scheduler_quickstart] diff --git a/scheduler/create_job_test.py b/scheduler/create_job_test.py new file mode 100644 index 000000000000..b0eff35e4b32 --- /dev/null +++ b/scheduler/create_job_test.py @@ -0,0 +1,26 @@ +# Copyright 2018 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import create_job + +TEST_PROJECT_ID = os.getenv('GCLOUD_PROJECT') +TEST_LOCATION = os.getenv('TEST_QUEUE_LOCATION', 'us-central1') + + +def test_create_job(): + result = create_job.create_scheduler_job( + TEST_PROJECT_ID, TEST_LOCATION, 'my-service') + assert TEST_PROJECT_ID in result.name diff --git a/scheduler/main.py b/scheduler/main.py index 2b399a611386..b4c432d76dfc 100644 --- a/scheduler/main.py +++ b/scheduler/main.py @@ -14,7 +14,7 @@ """App Engine app to serve as an endpoint for Cloud Scheduler samples.""" -# [START cloud_scheduler_quickstart] +# [START cloud_scheduler_app] from flask import Flask, request app = Flask(__name__) @@ -24,9 +24,9 @@ def example_task_handler(): """Log the request payload.""" payload = request.get_data(as_text=True) or '(empty payload)' - print('Received job with payload: {}'.format(payload), flush=True) + print('Received job with payload: {}'.format(payload)) return 'Printed job payload: {}'.format(payload) -# [END cloud_scheduler_quickstart] +# [END cloud_scheduler_app] @app.route('/') diff --git a/scheduler/main_test.py b/scheduler/main_test.py new file mode 100644 index 000000000000..af395f48d97f --- /dev/null +++ b/scheduler/main_test.py @@ -0,0 +1,45 @@ +# Copyright 2018 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pytest + + +@pytest.fixture +def app(): + import main + main.app.testing = True + return main.app.test_client() + + +def test_index(app): + r = app.get('/') + assert r.status_code == 200 + + +def test_log_payload(capsys, app): + payload = 'test_payload' + + r = app.post('/log_payload', data=payload) + assert r.status_code == 200 + + out, _ = capsys.readouterr() + assert payload in out + + +def test_empty_payload(capsys, app): + r = app.post('/log_payload') + assert r.status_code == 200 + + out, _ = capsys.readouterr() + assert 'empty payload' in out From f211a46e78ef4f3c90160f966ade2cea5e4f89b6 Mon Sep 17 00:00:00 2001 From: averikitsch Date: Fri, 11 Jan 2019 10:06:38 -0800 Subject: [PATCH 03/11] create and delete requests completed --- scheduler/.gcloudignore | 17 ----------------- scheduler/app.yaml | 23 +++++++++++++++++------ scheduler/create_job.py | 33 +++++++++++++++++++++++++++++---- scheduler/create_job_test.py | 19 ++++++++++++++----- scheduler/main.py | 4 ++-- 5 files changed, 62 insertions(+), 34 deletions(-) delete mode 100644 scheduler/.gcloudignore diff --git a/scheduler/.gcloudignore b/scheduler/.gcloudignore deleted file mode 100644 index a3f0c766722f..000000000000 --- a/scheduler/.gcloudignore +++ /dev/null @@ -1,17 +0,0 @@ -# This file specifies files that are *not* uploaded to Google Cloud Platform -# using gcloud. It follows the same syntax as .gitignore, with the addition of -# "#!include" directives (which insert the entries of the given .gitignore-style -# file at that point). -# -# For more information, run: -# $ gcloud topic gcloudignore -# -.gcloudignore -# If you would like to upload your .git directory, .gitignore file or files -# from your .gitignore file, remove the corresponding line -# below: -.git -.gitignore - -# Node.js dependencies: -node_modules/ \ No newline at end of file diff --git a/scheduler/app.yaml b/scheduler/app.yaml index c0754f622555..ff85ea5bed64 100644 --- a/scheduler/app.yaml +++ b/scheduler/app.yaml @@ -1,7 +1,18 @@ -runtime: python -service: my-service -env: flex -entrypoint: gunicorn -b :$PORT main:app +# 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. -runtime_config: - python_version: 3 +# [START cloud_scheduler_yaml] +runtime: python37 +service: my-service +# [END cloud_scheduler_yaml] diff --git a/scheduler/create_job.py b/scheduler/create_job.py index 211e9899a35f..69c8615032b1 100644 --- a/scheduler/create_job.py +++ b/scheduler/create_job.py @@ -12,10 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. - def create_scheduler_job(project_id, location_id, service_id): - # [START cloud_scheduler_quickstart] """Create a job with an App Engine target via the Cloud Scheduler API""" + # [START cloud_scheduler_create_job] from google.cloud import scheduler # Create a client. @@ -43,9 +42,35 @@ def create_scheduler_job(project_id, location_id, service_id): 'time_zone': 'America/Los_Angeles' } - # Use the client to send job creation request. + # Use the client to send the job creation request. response = client.create_job(parent, job) print('Created job: {}'.format(response.name)) + # [END cloud_scheduler_create_job] return response -# [END cloud_scheduler_quickstart] + + +def delete_scheduler_job(project_id, location_id, job_id): + """Delete a job via the Cloud Scheduler API""" + # [START cloud_scheduler_delete_job] + from google.cloud import scheduler + from google.api_core.exceptions import GoogleAPICallError + + # Create a client. + client = scheduler.CloudSchedulerClient() + + # TODO(developer): Uncomment and set the following variables + # project_id = 'PROJECT_ID' + # location_id = 'LOCATION_ID' + # job_id = 'JOB_ID' + + # Construct the fully qualified job path. + job = client.job_path(project_id, location_id, job_id) + + # Use the client to send the job deletion request. + try: + response = client.delete_job(job) + print("Job deleted.") + except GoogleAPICallError: + print("Error when deleting job.") + # [END cloud_scheduler_delete_job] diff --git a/scheduler/create_job_test.py b/scheduler/create_job_test.py index b0eff35e4b32..90ab5d243c2c 100644 --- a/scheduler/create_job_test.py +++ b/scheduler/create_job_test.py @@ -14,13 +14,22 @@ import os +import pytest + import create_job TEST_PROJECT_ID = os.getenv('GCLOUD_PROJECT') -TEST_LOCATION = os.getenv('TEST_QUEUE_LOCATION', 'us-central1') - +TEST_LOCATION = os.getenv('LOCATION_ID', 'us-central1') -def test_create_job(): - result = create_job.create_scheduler_job( +def test_create_job(capsys): + create_result = create_job.create_scheduler_job( TEST_PROJECT_ID, TEST_LOCATION, 'my-service') - assert TEST_PROJECT_ID in result.name + + out, _ = capsys.readouterr() + assert create_result.name in out + + job_name = create_result.name.split('/')[-1] + delete_result = create_job.delete_scheduler_job( + TEST_PROJECT_ID, TEST_LOCATION, job_name) + out, _ = capsys.readouterr() + assert 'Job deleted.' in out diff --git a/scheduler/main.py b/scheduler/main.py index b4c432d76dfc..fd766ca47449 100644 --- a/scheduler/main.py +++ b/scheduler/main.py @@ -19,10 +19,10 @@ app = Flask(__name__) - +# Define relative URI for job endpoint @app.route('/log_payload', methods=['POST']) def example_task_handler(): - """Log the request payload.""" + """Log the job payload.""" payload = request.get_data(as_text=True) or '(empty payload)' print('Received job with payload: {}'.format(payload)) return 'Printed job payload: {}'.format(payload) From f939ae51e60084fe67192e288a135eb18daee2c7 Mon Sep 17 00:00:00 2001 From: averikitsch Date: Fri, 11 Jan 2019 11:25:05 -0800 Subject: [PATCH 04/11] updated region tag --- scheduler/app.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scheduler/app.yaml b/scheduler/app.yaml index ff85ea5bed64..6f2fb33a5990 100644 --- a/scheduler/app.yaml +++ b/scheduler/app.yaml @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# [START cloud_scheduler_yaml] +# [START cloud_scheduler_python_yaml] runtime: python37 service: my-service -# [END cloud_scheduler_yaml] +# [END cloud_scheduler_python_yaml] From d64afe403a921db1f494bf6f975b22fa135ba06c Mon Sep 17 00:00:00 2001 From: averikitsch Date: Fri, 11 Jan 2019 13:41:47 -0800 Subject: [PATCH 05/11] update error --- scheduler/create_job.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scheduler/create_job.py b/scheduler/create_job.py index 69c8615032b1..63c97cd930f7 100644 --- a/scheduler/create_job.py +++ b/scheduler/create_job.py @@ -71,6 +71,6 @@ def delete_scheduler_job(project_id, location_id, job_id): try: response = client.delete_job(job) print("Job deleted.") - except GoogleAPICallError: - print("Error when deleting job.") + except GoogleAPICallError as e: + print("Error: %s" % e) # [END cloud_scheduler_delete_job] From ddb373b415e9a515350d7367fa1235e32a83df96 Mon Sep 17 00:00:00 2001 From: averikitsch Date: Fri, 11 Jan 2019 15:00:31 -0800 Subject: [PATCH 06/11] fix linting --- scheduler/create_job.py | 3 ++- scheduler/create_job_test.py | 15 +++++++-------- scheduler/main.py | 1 + 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/scheduler/create_job.py b/scheduler/create_job.py index 63c97cd930f7..3f57beeef7ff 100644 --- a/scheduler/create_job.py +++ b/scheduler/create_job.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. + def create_scheduler_job(project_id, location_id, service_id): """Create a job with an App Engine target via the Cloud Scheduler API""" # [START cloud_scheduler_create_job] @@ -69,7 +70,7 @@ def delete_scheduler_job(project_id, location_id, job_id): # Use the client to send the job deletion request. try: - response = client.delete_job(job) + client.delete_job(job) print("Job deleted.") except GoogleAPICallError as e: print("Error: %s" % e) diff --git a/scheduler/create_job_test.py b/scheduler/create_job_test.py index 90ab5d243c2c..94e5d002a6c4 100644 --- a/scheduler/create_job_test.py +++ b/scheduler/create_job_test.py @@ -14,22 +14,21 @@ import os -import pytest - import create_job TEST_PROJECT_ID = os.getenv('GCLOUD_PROJECT') TEST_LOCATION = os.getenv('LOCATION_ID', 'us-central1') -def test_create_job(capsys): - create_result = create_job.create_scheduler_job( - TEST_PROJECT_ID, TEST_LOCATION, 'my-service') +def test_create_job(capsys): + create_result = create_job.create_scheduler_job(TEST_PROJECT_ID, + TEST_LOCATION, + 'my-service') out, _ = capsys.readouterr() - assert create_result.name in out + assert 'Created job:' in out job_name = create_result.name.split('/')[-1] - delete_result = create_job.delete_scheduler_job( - TEST_PROJECT_ID, TEST_LOCATION, job_name) + create_job.delete_scheduler_job(TEST_PROJECT_ID, TEST_LOCATION, job_name) + out, _ = capsys.readouterr() assert 'Job deleted.' in out diff --git a/scheduler/main.py b/scheduler/main.py index fd766ca47449..e579629122ad 100644 --- a/scheduler/main.py +++ b/scheduler/main.py @@ -19,6 +19,7 @@ app = Flask(__name__) + # Define relative URI for job endpoint @app.route('/log_payload', methods=['POST']) def example_task_handler(): From a93fc145aac3a886c9fa44f8db8b1bfbc576bf43 Mon Sep 17 00:00:00 2001 From: Averi Kitsch Date: Wed, 24 Jul 2019 14:39:48 -0700 Subject: [PATCH 07/11] Update styling --- scheduler/create_job_test.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scheduler/create_job_test.py b/scheduler/create_job_test.py index 94e5d002a6c4..ab03c1b7629d 100644 --- a/scheduler/create_job_test.py +++ b/scheduler/create_job_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google Inc. All Rights Reserved. +# Copyright 2019 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,9 +21,8 @@ def test_create_job(capsys): - create_result = create_job.create_scheduler_job(TEST_PROJECT_ID, - TEST_LOCATION, - 'my-service') + create_result = create_job.create_scheduler_job( + TEST_PROJECT_ID, TEST_LOCATION, 'my-service') out, _ = capsys.readouterr() assert 'Created job:' in out From 347abc5c7f473b6175ac2f3d5a6b12e0de294a69 Mon Sep 17 00:00:00 2001 From: Averi Kitsch Date: Wed, 24 Jul 2019 14:40:34 -0700 Subject: [PATCH 08/11] Update license --- scheduler/create_job.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/create_job.py b/scheduler/create_job.py index 3f57beeef7ff..f5025ca1a349 100644 --- a/scheduler/create_job.py +++ b/scheduler/create_job.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. From 266503746ca0087455a45128e271edad93b3af28 Mon Sep 17 00:00:00 2001 From: Averi Kitsch Date: Wed, 24 Jul 2019 14:40:47 -0700 Subject: [PATCH 09/11] Update license --- scheduler/app.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/app.yaml b/scheduler/app.yaml index 6f2fb33a5990..8afa34736dad 100644 --- a/scheduler/app.yaml +++ b/scheduler/app.yaml @@ -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. From e757ed50bbea4abfd8fa09dafa6c205d68a27229 Mon Sep 17 00:00:00 2001 From: Averi Kitsch Date: Wed, 24 Jul 2019 14:41:03 -0700 Subject: [PATCH 10/11] Update license --- scheduler/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/main.py b/scheduler/main.py index e579629122ad..9d4d97537d27 100644 --- a/scheduler/main.py +++ b/scheduler/main.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. From 98cd407b55bf34ccb550eebb32b595bc99eedd73 Mon Sep 17 00:00:00 2001 From: Averi Kitsch Date: Wed, 24 Jul 2019 14:41:22 -0700 Subject: [PATCH 11/11] Update license --- scheduler/main_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/main_test.py b/scheduler/main_test.py index af395f48d97f..3d6745a5605c 100644 --- a/scheduler/main_test.py +++ b/scheduler/main_test.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google Inc. All Rights Reserved. +# Copyright 2019 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License.