Skip to content

Commit 26dd3b7

Browse files
arithmetic1728andrewsgdpebotmichaelawyuellenevans
authored andcommitted
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]>
1 parent 473749d commit 26dd3b7

File tree

7 files changed

+339
-0
lines changed

7 files changed

+339
-0
lines changed

cloud_tasks/snippets/README.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Google Cloud Tasks Samples
2+
3+
[![Open in Cloud Shell][shell_img]][shell_link]
4+
5+
[shell_img]: http://gstatic.com/cloudssh/images/open-btn.png
6+
[shell_link]: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/python-docs-samples&page=editor&open_in_editor=tasks/README.md
7+
8+
This sample demonstrates how to use the
9+
[Cloud Tasks](https://cloud.google.com/tasks/docs/) client library.
10+
11+
`create_http_task.py` is a simple command-line program to create
12+
tasks to be pushed to an URL endpoint.
13+
14+
`create_http_task_with_token.py` is a simple command-line program to create
15+
tasks to be pushed to an URL endpoint with authorization header.
16+
17+
## Prerequisites to run locally:
18+
19+
Please refer to [Setting Up a Python Development Environment](https://cloud.google.com/python/setup).
20+
21+
## Authentication
22+
23+
To set up authentication, please refer to our
24+
[authentication getting started guide](https://cloud.google.com/docs/authentication/getting-started).
25+
26+
## Install Dependencies
27+
28+
To install the dependencies for this sample, use the following command:
29+
30+
```
31+
pip install -r requirements.txt
32+
```
33+
34+
This sample uses the common protos in the [googleapis](https://github.com/googleapis/googleapis)
35+
repository. For more info, see
36+
[Protocol Buffer Basics](https://developers.google.com/protocol-buffers/docs/pythontutorial).
37+
38+
## Creating a queue
39+
40+
To create a queue (named `my-queue`) using the Cloud SDK, use the following
41+
gcloud command:
42+
43+
```
44+
gcloud tasks queues create my-queue
45+
```
46+
47+
## Run the Sample Using the Command Line
48+
49+
Set environment variables:
50+
51+
First, your project ID:
52+
53+
```
54+
export PROJECT_ID=my-project-id
55+
```
56+
57+
Then the queue ID, as specified at queue creation time. Queue IDs already
58+
created can be listed with `gcloud tasks queues list`.
59+
60+
```
61+
export QUEUE_ID=my-queue
62+
```
63+
64+
And finally the location ID, which can be discovered with
65+
`gcloud tasks queues describe my-queue`, with the location embedded in
66+
the "name" value (for instance, if the name is
67+
"projects/my-project/locations/us-central1/queues/my-queue", then the
68+
location is "us-central1").
69+
70+
```
71+
export LOCATION_ID=us-central1
72+
```
73+
74+
### Creating Tasks with HTTP Targets
75+
76+
Set an environment variable for the endpoint to your task handler. This is an
77+
example url:
78+
```
79+
export URL=https://example.com/task_handler
80+
```
81+
82+
Running the sample will create a task and send the task to the specific URL
83+
endpoint, with a payload specified:
84+
85+
```
86+
python create_http_task.py --project=$PROJECT_ID --queue=$QUEUE_ID --location=$LOCATION_ID --url=$URL --payload=hello
87+
```

cloud_tasks/snippets/create_queue.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Copyright 2020 Google LLC
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+
# [START cloud_tasks_create_queue]
16+
def create_queue(project, queue_name, location):
17+
"""Create a task queue."""
18+
19+
from google.cloud import tasks_v2
20+
21+
# Create a client.
22+
client = tasks_v2.CloudTasksClient()
23+
24+
# Construct the fully qualified location path.
25+
parent = client.location_path(project, location)
26+
27+
# Construct the create queue request.
28+
queue = {'name': client.queue_path(project, location, queue_name)}
29+
30+
# Use the client to create the queue.
31+
response = client.create_queue(parent, queue)
32+
33+
print('Created queue {}'.format(response.name))
34+
return response
35+
# [END cloud_tasks_create_queue]
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Copyright 2020 Google LLC
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_queue
22+
23+
TEST_PROJECT_ID = os.environ['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+
q = create_queue.create_queue(TEST_PROJECT_ID, TEST_QUEUE_NAME, TEST_LOCATION)
32+
33+
yield q
34+
35+
client.delete_queue(q.name)
36+
37+
38+
def test_create_queue(capsys, test_queue):
39+
out, _ = capsys.readouterr()
40+
assert 'Created queue' in out

cloud_tasks/snippets/delete_queue.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Copyright 2020 Google LLC
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+
# [START cloud_tasks_delete_queue]
16+
def delete_queue(project, queue_name, location):
17+
"""Delete a task queue."""
18+
19+
from google.cloud import tasks_v2
20+
21+
# Create a client.
22+
client = tasks_v2.CloudTasksClient()
23+
24+
# Get the fully qualified path to queue.
25+
queue = client.queue_path(project, location, queue_name)
26+
27+
# Use the client to delete the queue.
28+
client.delete_queue(queue)
29+
print('Deleted queue')
30+
# [END cloud_tasks_delete_queue]
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Copyright 2020 Google LLC
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.api_core import exceptions
19+
from google.cloud import tasks_v2
20+
import pytest
21+
22+
import delete_queue
23+
24+
25+
TEST_PROJECT_ID = os.environ['GOOGLE_CLOUD_PROJECT']
26+
TEST_LOCATION = os.getenv('TEST_QUEUE_LOCATION', 'us-central1')
27+
TEST_QUEUE_NAME = f'my-queue-{uuid.uuid4().hex}'
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+
try:
44+
# Attempt to delete the queue in case the sample failed.
45+
client.delete_queue(q.name)
46+
except exceptions.NotFound:
47+
# The queue was already successfully deleted.
48+
print('Queue already deleted successfully')
49+
50+
51+
def test_delete_queue(capsys, test_queue):
52+
delete_queue.delete_queue(
53+
TEST_PROJECT_ID, TEST_QUEUE_NAME, TEST_LOCATION
54+
)
55+
out, _ = capsys.readouterr()
56+
assert 'Deleted queue' in out

cloud_tasks/snippets/list_queues.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Copyright 2020 Google LLC
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+
# [START cloud_tasks_list_queues]
16+
def list_queues(project, location):
17+
"""List all task queues."""
18+
19+
from google.cloud import tasks_v2
20+
21+
# Create a client.
22+
client = tasks_v2.CloudTasksClient()
23+
24+
# Construct the fully qualified location path.
25+
parent = client.location_path(project, location)
26+
27+
# Use the client to obtain the queues.
28+
response = client.list_queues(parent)
29+
30+
# Print the results.
31+
for queue in response:
32+
print(queue.name)
33+
34+
if response.num_results == 0:
35+
print('No queues found!')
36+
# [END cloud_tasks_list_queues]
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Copyright 2020 Google LLC
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 list_queues
22+
23+
TEST_PROJECT_ID = os.environ['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_list_queues_not_present(capsys):
45+
list_queues.list_queues(TEST_PROJECT_ID, TEST_LOCATION)
46+
out, _ = capsys.readouterr()
47+
48+
assert(TEST_QUEUE_NAME not in out)
49+
50+
51+
def test_list_queues_present(capsys, test_queue):
52+
list_queues.list_queues(TEST_PROJECT_ID, TEST_LOCATION)
53+
out, _ = capsys.readouterr()
54+
55+
assert(TEST_QUEUE_NAME in out)

0 commit comments

Comments
 (0)