Skip to content

Commit d792f63

Browse files
arithmetic1728andrewsgdpebotmichaelawyuellenevans
authored
docs: add samples from python-docs-samples/tasks (#36)
* Add samples for Cloud Tasks [(#1068)](#1068) * Add samples for Cloud Tasks * Respond to tasks sample review * Update app engine queues samples * Address review feedback * Address review issues and convert pull queue sample to not use API key auth * Reform pull queues to match appengine queues changes to auth, command line input, readme * flake8 and fix comment * Fix Tasks sample test issues. * Remove queue.yaml, now unused * Add required flag on certain arguments to command-line tools * Auto-update dependencies. [(#1116)](#1116) * Auto-update dependencies. [(#1133)](#1133) * Auto-update dependencies. * Fix missing http library Change-Id: I99faa600f2f3f1f50f57694fc9835d7f35bda250 * Update Task Queue samples for beta * Use full import to get client * Auto-update dependencies. [(#1186)](#1186) * Auto-update dependencies. [(#1217)](#1217) * Added "Open in Cloud Shell" buttons to README files [(#1254)](#1254) * Add comments and region tags to Cloud Tasks samples [(#1271)](#1271) * Standardize on CamelCase, reword confusing endpoint name [(#1288)](#1288) * Auto-update dependencies. [(#1309)](#1309) * Rename pull to lease and fix name/parent confusion [(#1311)](#1311) * Updated region tags for pull queue samples [(#1329)](#1329) * Auto-update dependencies. [(#1320)](#1320) * Auto-update dependencies. [(#1355)](#1355) * Auto-update dependencies. [(#1359)](#1359) * Auto-update dependencies. * Update Cloud Tasks Samples [(#1529)](#1529) * passing create task * Passing tests * updates to region tags * update region tags [(#1532)](#1532) * update Tasks Sample for App Engine [(#1541)](#1541) * update gcloud command for creating queues * deploys and runs * update license * passing tests * Fix run command [(#1563)](#1563) * Updated library for TTS GA [(#1552)](#1552) * update gcloud command for Cloud Tasks [(#1566)](#1566) * update gcloud command * update pull queue command * update pull queue command * Update Cloud Tasks Push Queue Sample [(#1698)](#1698) * deleted pull queues * updated samples * fix dependency versions * [Cloud Tasks] Move samples to new folder [(#2114)](#2114) * Move samples to keep consistent with other langauges * Ad system tests as well * [Cloud Tasks] Add task with authentication sample [(#2113)](#2113) * Add task with authentication sample * Fix linting * Fix linting * Fix spacing * Update tests with service account * Move samples and update READMEs * Update version and linting * Update task sample comments [(#2156)](#2156) * Update task comments * Update readme * Update queue name * update gcloud [(#2208)](#2208) * Add protobuf dep and install instructions [(#2250)](#2250) * Add Migration Guide Snippets for Cloud Tasks [(#2316)](#2316) * Migration guide * remove app and update migraitonn * snippets for migration guide - tests added * lint * remove print statements * Styling changes * Travis trigger * Update create_http_task.py [(#2187)](#2187) Updates `create_http_task.py` to have missing `in_seconds` variable * Adds updates for samples profiler ... vision [(#2439)](#2439) * Update Cloud Tasks library version [(#2516)](#2516) * Update to new library * update library version * Adds Task name while creating Task [(#2543)](#2543) * Task Name in Creating HTTP Task with Token [(#2700)](#2700) * chore(deps): update dependency google-cloud-tasks to v1.5.0 [(#3168)](#3168) * chore(deps): update dependency googleapis-common-protos to v1.51.0 [(#3171)](#3171) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [googleapis-common-protos](https://togithub.com/googleapis/googleapis) | minor | `==1.6.0` -> `==1.51.0` | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples). * Simplify noxfile setup. [(#2806)](#2806) * chore(deps): update dependency requests to v2.23.0 * Simplify noxfile and add version control. * Configure appengine/standard to only test Python 2.7. * Update Kokokro configs to match noxfile. * Add requirements-test to each folder. * Remove Py2 versions from everything execept appengine/standard. * Remove conftest.py. * Remove appengine/standard/conftest.py * Remove 'no-sucess-flaky-report' from pytest.ini. * Add GAE SDK back to appengine/standard tests. * Fix typo. * Roll pytest to python 2 version. * Add a bunch of testing requirements. * Remove typo. * Add appengine lib directory back in. * Add some additional requirements. * Fix issue with flake8 args. * Even more requirements. * Readd appengine conftest.py. * Add a few more requirements. * Even more Appengine requirements. * Add webtest for appengine/standard/mailgun. * Add some additional requirements. * Add workaround for issue with mailjet-rest. * Add responses for appengine/standard/mailjet. Co-authored-by: Renovate Bot <[email protected]> * Remove dependency googleapis-common-protos [(#3955)](#3955) * Update dependency googleapis-common-protos to v1.52.0 * Update requirements.txt * Update requirements.txt * Update requirements.txt Co-authored-by: Bu Sun Kim <[email protected]> * Replace GCLOUD_PROJECT with GOOGLE_CLOUD_PROJECT. [(#4022)](#4022) * [tasks] testing: use fixtures for the queue [(#4049)](#4049) fixes #4045 fixes #4044 I don't know why these tests started to fail, but anyways we'd better use fixtures and temporary queues. * add python snippets and tests for creating, listing, and deleting queues [(#4012)](#4012) * add python snippets and tests for creating, listing, and deleting queues * fix grammar * update licenses * apply suggested fixes and format with black * refine delete_queue_test with fixture for setup * utilize fixtures and match format of create_http_task_test * utilize fixtures in list_queues_test and create_queue_test * make create_queue_test call the right function * still attempt to delete queue after test runs in case of failure * attempt to delete queue in case of failure, using try/except approach * add print when NotFound is caught * fix import Co-authored-by: Averi Kitsch <[email protected]> Co-authored-by: Takashi Matsuo <[email protected]> * docs(tasks): service_account_email parameter example [(#4183)](#4183) * docs(tasks): serviceAccountEmail parameter example * docs(tasks): parameter name camel => snake case * docs(tasks): comment order = function param order * chore(deps): update dependency pytest to v5.4.3 [(#4279)](#4279) * chore(deps): update dependency pytest to v5.4.3 * specify pytest for python 2 in appengine Co-authored-by: Leah Cole <[email protected]> * Update dependency pytest to v6 [(#4390)](#4390) * tasks: added json content-type request [(#4473)](#4473) - added json payload compatibility - fix imports and code block used on https://cloud.google.com/tasks/docs/creating-http-target-tasks#python ## Description Fixes #<ISSUE-NUMBER> Note: It's a good idea to open an issue first for discussion. ## Checklist - [ ] I have followed [Sample Guidelines from AUTHORING_GUIDE.MD](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md) - [ ] README is updated to include [all relevant information](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#readme-file) - [ ] **Tests** pass: `nox -s py-3.6` (see [Test Environment Setup](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#test-environment-setup)) - [ ] **Lint** pass: `nox -s lint` (see [Test Environment Setup](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#test-environment-setup)) - [ ] These samples need a new **API enabled** in testing projects to pass (let us know which ones) - [ ] These samples need a new/updated **env vars** in testing projects set to pass (let us know which ones) - [ ] Please **merge** this PR for me once it is approved. - [ ] This sample adds a new sample directory, and I updated the [CODEOWNERS file](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/.github/CODEOWNERS) with the codeowners for this sample * docs: add samples from python-docs-samples/tasks * chore: update templates Co-authored-by: Andrew Gorcester <[email protected]> Co-authored-by: Andrew Gorcester <[email protected]> Co-authored-by: DPE bot <[email protected]> Co-authored-by: michaelawyu <[email protected]> Co-authored-by: ellenevans <[email protected]> Co-authored-by: Averi Kitsch <[email protected]> Co-authored-by: michaelawyu <[email protected]> Co-authored-by: Noah Negrey <[email protected]> Co-authored-by: Alex Voorhees <[email protected]> Co-authored-by: Gus Class <[email protected]> Co-authored-by: Sarath Kaul <[email protected]> Co-authored-by: Sarath Kaul <[email protected]> Co-authored-by: WhiteSource Renovate <[email protected]> Co-authored-by: Kurtis Van Gent <[email protected]> Co-authored-by: Bu Sun Kim <[email protected]> Co-authored-by: Takashi Matsuo <[email protected]> Co-authored-by: Aaron Johnson <[email protected]> Co-authored-by: Adam Ross <[email protected]> Co-authored-by: Leah Cole <[email protected]> Co-authored-by: Joab Leite S. Neto <[email protected]>
0 parents  commit d792f63

7 files changed

+551
-0
lines changed
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# Copyright 2019 Google LLC All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from __future__ import print_function
16+
17+
import argparse
18+
19+
20+
def create_http_task(project,
21+
queue,
22+
location,
23+
url,
24+
payload=None,
25+
in_seconds=None,
26+
task_name=None):
27+
# [START cloud_tasks_create_http_task]
28+
"""Create a task for a given queue with an arbitrary payload."""
29+
30+
from google.cloud import tasks_v2
31+
from google.protobuf import timestamp_pb2
32+
import datetime
33+
import json
34+
35+
# Create a client.
36+
client = tasks_v2.CloudTasksClient()
37+
38+
# TODO(developer): Uncomment these lines and replace with your values.
39+
# project = 'my-project-id'
40+
# queue = 'my-queue'
41+
# location = 'us-central1'
42+
# url = 'https://example.com/task_handler'
43+
# payload = 'hello' or {'param': 'value'} for application/json
44+
45+
# Construct the fully qualified queue name.
46+
parent = client.queue_path(project, location, queue)
47+
48+
# Construct the request body.
49+
task = {
50+
'http_request': { # Specify the type of request.
51+
'http_method': 'POST',
52+
'url': url # The full url path that the task will be sent to.
53+
}
54+
}
55+
if payload is not None:
56+
if isinstance(payload, dict):
57+
# Convert dict to JSON string
58+
payload = json.dumps(payload)
59+
# specify http content-type to application/json
60+
task['http_request']['headers'] = {'Content-type': 'application/json'}
61+
62+
# The API expects a payload of type bytes.
63+
converted_payload = payload.encode()
64+
65+
# Add the payload to the request.
66+
task['http_request']['body'] = converted_payload
67+
68+
if in_seconds is not None:
69+
# Convert "seconds from now" into an rfc3339 datetime string.
70+
d = datetime.datetime.utcnow() + datetime.timedelta(seconds=in_seconds)
71+
72+
# Create Timestamp protobuf.
73+
timestamp = timestamp_pb2.Timestamp()
74+
timestamp.FromDatetime(d)
75+
76+
# Add the timestamp to the tasks.
77+
task['schedule_time'] = timestamp
78+
79+
if task_name is not None:
80+
# Add the name to tasks.
81+
task['name'] = task_name
82+
83+
# Use the client to build and send the task.
84+
response = client.create_task(parent, task)
85+
86+
print('Created task {}'.format(response.name))
87+
# [END cloud_tasks_create_http_task]
88+
return response
89+
90+
91+
if __name__ == '__main__':
92+
parser = argparse.ArgumentParser(
93+
description=create_http_task.__doc__,
94+
formatter_class=argparse.RawDescriptionHelpFormatter)
95+
96+
parser.add_argument(
97+
'--project',
98+
help='Project of the queue to add the task to.',
99+
required=True,
100+
)
101+
102+
parser.add_argument(
103+
'--queue',
104+
help='ID (short name) of the queue to add the task to.',
105+
required=True,
106+
)
107+
108+
parser.add_argument(
109+
'--location',
110+
help='Location of the queue to add the task to.',
111+
required=True,
112+
)
113+
114+
parser.add_argument(
115+
'--url',
116+
help='The full url path that the request will be sent to.',
117+
required=True,
118+
)
119+
120+
parser.add_argument(
121+
'--payload',
122+
help='Optional payload to attach to the push queue.'
123+
)
124+
125+
parser.add_argument(
126+
'--in_seconds', type=int,
127+
help='The number of seconds from now to schedule task attempt.'
128+
)
129+
130+
parser.add_argument(
131+
'--task_name',
132+
help='Task name of the task to create'
133+
)
134+
args = parser.parse_args()
135+
136+
create_http_task(
137+
args.project, args.queue, args.location, args.url,
138+
args.payload, args.in_seconds, args.task_name)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Copyright 2019 Google LLC All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
import os
16+
import uuid
17+
18+
from google.cloud import tasks_v2
19+
import pytest
20+
21+
import create_http_task
22+
23+
TEST_PROJECT_ID = os.getenv('GOOGLE_CLOUD_PROJECT')
24+
TEST_LOCATION = os.getenv('TEST_QUEUE_LOCATION', 'us-central1')
25+
TEST_QUEUE_NAME = f'my-queue-{uuid.uuid4().hex}'
26+
27+
28+
@pytest.fixture()
29+
def test_queue():
30+
client = tasks_v2.CloudTasksClient()
31+
parent = client.location_path(TEST_PROJECT_ID, TEST_LOCATION)
32+
queue = {
33+
# The fully qualified path to the queue
34+
'name': client.queue_path(
35+
TEST_PROJECT_ID, TEST_LOCATION, TEST_QUEUE_NAME),
36+
}
37+
q = client.create_queue(parent, queue)
38+
39+
yield q
40+
41+
client.delete_queue(q.name)
42+
43+
44+
def test_create_http_task(test_queue):
45+
url = 'https://example.com/task_handler'
46+
result = create_http_task.create_http_task(
47+
TEST_PROJECT_ID, TEST_QUEUE_NAME, TEST_LOCATION, url)
48+
assert TEST_QUEUE_NAME in result.name
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Copyright 2019 Google LLC All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from __future__ import print_function
16+
17+
import datetime
18+
19+
20+
def create_http_task(project,
21+
queue,
22+
location,
23+
url,
24+
service_account_email,
25+
payload=None,
26+
in_seconds=None,
27+
task_name=None):
28+
# [START cloud_tasks_create_http_task_with_token]
29+
"""Create a task for a given queue with an arbitrary payload."""
30+
31+
from google.cloud import tasks_v2
32+
from google.protobuf import timestamp_pb2
33+
34+
# Create a client.
35+
client = tasks_v2.CloudTasksClient()
36+
37+
# TODO(developer): Uncomment these lines and replace with your values.
38+
# project = 'my-project-id'
39+
# queue = 'my-queue'
40+
# location = 'us-central1'
41+
# url = 'https://example.com/task_handler'
42+
# service_account_email = '[email protected]';
43+
# payload = 'hello'
44+
45+
# Construct the fully qualified queue name.
46+
parent = client.queue_path(project, location, queue)
47+
48+
# Construct the request body.
49+
task = {
50+
'http_request': { # Specify the type of request.
51+
'http_method': 'POST',
52+
'url': url, # The full url path that the task will be sent to.
53+
'oidc_token': {
54+
'service_account_email': service_account_email
55+
}
56+
}
57+
}
58+
59+
if payload is not None:
60+
# The API expects a payload of type bytes.
61+
converted_payload = payload.encode()
62+
63+
# Add the payload to the request.
64+
task['http_request']['body'] = converted_payload
65+
66+
if in_seconds is not None:
67+
# Convert "seconds from now" into an rfc3339 datetime string.
68+
d = datetime.datetime.utcnow() + datetime.timedelta(seconds=in_seconds)
69+
70+
# Create Timestamp protobuf.
71+
timestamp = timestamp_pb2.Timestamp()
72+
timestamp.FromDatetime(d)
73+
74+
# Add the timestamp to the tasks.
75+
task['schedule_time'] = timestamp
76+
77+
if task_name is not None:
78+
# Add the name to tasks.
79+
task['name'] = task_name
80+
81+
# Use the client to build and send the task.
82+
response = client.create_task(parent, task)
83+
84+
print('Created task {}'.format(response.name))
85+
return response
86+
# [END cloud_tasks_create_http_task_with_token]
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Copyright 2019 Google LLC All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
import os
16+
import uuid
17+
18+
from google.cloud import tasks_v2
19+
import pytest
20+
21+
import create_http_task_with_token
22+
23+
TEST_PROJECT_ID = os.getenv('GOOGLE_CLOUD_PROJECT')
24+
TEST_LOCATION = os.getenv('TEST_QUEUE_LOCATION', 'us-central1')
25+
TEST_QUEUE_NAME = f'my-queue-{uuid.uuid4().hex}'
26+
TEST_SERVICE_ACCOUNT = (
27+
'test-run-invoker@python-docs-samples-tests.iam.gserviceaccount.com')
28+
29+
30+
@pytest.fixture()
31+
def test_queue():
32+
client = tasks_v2.CloudTasksClient()
33+
parent = client.location_path(TEST_PROJECT_ID, TEST_LOCATION)
34+
queue = {
35+
# The fully qualified path to the queue
36+
'name': client.queue_path(
37+
TEST_PROJECT_ID, TEST_LOCATION, TEST_QUEUE_NAME),
38+
}
39+
q = client.create_queue(parent, queue)
40+
41+
yield q
42+
43+
client.delete_queue(q.name)
44+
45+
46+
def test_create_http_task_with_token(test_queue):
47+
url = 'https://example.com/task_handler'
48+
result = create_http_task_with_token.create_http_task(TEST_PROJECT_ID,
49+
TEST_QUEUE_NAME,
50+
TEST_LOCATION,
51+
url,
52+
TEST_SERVICE_ACCOUNT)
53+
assert TEST_QUEUE_NAME in result.name

0 commit comments

Comments
 (0)