Skip to content

Commit

Permalink
docs: add samples from python-docs-samples/tasks (#36)
Browse files Browse the repository at this point in the history
* 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://github.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 <bot@renovateapp.com>

* 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 <8822365+busunkim96@users.noreply.github.com>

* 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 <akitsch@google.com>
Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* 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 <coleleah@google.com>

* 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 <andrew.gorcester@gmail.com>
Co-authored-by: Andrew Gorcester <gorcester@google.com>
Co-authored-by: DPE bot <dpebot@google.com>
Co-authored-by: michaelawyu <chenyumic@google.com>
Co-authored-by: ellenevans <35748459+ellenevans@users.noreply.github.com>
Co-authored-by: Averi Kitsch <akitsch@google.com>
Co-authored-by: michaelawyu <michael.a.w.yu@hotmail.com>
Co-authored-by: Noah Negrey <nnegrey@users.noreply.github.com>
Co-authored-by: Alex Voorhees <alex@cloudbakers.com>
Co-authored-by: Gus Class <gguuss@gmail.com>
Co-authored-by: Sarath Kaul <kaul.sarath@gmail.com>
Co-authored-by: Sarath Kaul <sarath.kaul@searce.com>
Co-authored-by: WhiteSource Renovate <bot@renovateapp.com>
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
Co-authored-by: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com>
Co-authored-by: Takashi Matsuo <tmatsuo@google.com>
Co-authored-by: Aaron Johnson <aaronmjohnson29@gmail.com>
Co-authored-by: Adam Ross <adamross@google.com>
Co-authored-by: Leah Cole <coleleah@google.com>
Co-authored-by: Joab Leite S. Neto <leitejoab@gmail.com>
  • Loading branch information
21 people authored Aug 31, 2020
0 parents commit 5273fff
Show file tree
Hide file tree
Showing 7 changed files with 339 additions and 0 deletions.
87 changes: 87 additions & 0 deletions cloud_tasks/snippets/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Google Cloud Tasks Samples

[![Open in Cloud Shell][shell_img]][shell_link]

[shell_img]: http://gstatic.com/cloudssh/images/open-btn.png
[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

This sample demonstrates how to use the
[Cloud Tasks](https://cloud.google.com/tasks/docs/) client library.

`create_http_task.py` is a simple command-line program to create
tasks to be pushed to an URL endpoint.

`create_http_task_with_token.py` is a simple command-line program to create
tasks to be pushed to an URL endpoint with authorization header.

## Prerequisites to run locally:

Please refer to [Setting Up a Python Development Environment](https://cloud.google.com/python/setup).

## Authentication

To set up authentication, please refer to our
[authentication getting started guide](https://cloud.google.com/docs/authentication/getting-started).

## Install Dependencies

To install the dependencies for this sample, use the following command:

```
pip install -r requirements.txt
```

This sample uses the common protos in the [googleapis](https://github.com/googleapis/googleapis)
repository. For more info, see
[Protocol Buffer Basics](https://developers.google.com/protocol-buffers/docs/pythontutorial).

## Creating a queue

To create a queue (named `my-queue`) using the Cloud SDK, use the following
gcloud command:

```
gcloud tasks queues create my-queue
```

## Run the Sample Using the Command Line

Set environment variables:

First, your project ID:

```
export PROJECT_ID=my-project-id
```

Then the queue ID, as specified at queue creation time. Queue IDs already
created can be listed with `gcloud tasks queues list`.

```
export QUEUE_ID=my-queue
```

And finally the location ID, which can be discovered with
`gcloud tasks queues describe my-queue`, with the location embedded in
the "name" value (for instance, if the name is
"projects/my-project/locations/us-central1/queues/my-queue", then the
location is "us-central1").

```
export LOCATION_ID=us-central1
```

### Creating Tasks with HTTP Targets

Set an environment variable for the endpoint to your task handler. This is an
example url:
```
export URL=https://example.com/task_handler
```

Running the sample will create a task and send the task to the specific URL
endpoint, with a payload specified:

```
python create_http_task.py --project=$PROJECT_ID --queue=$QUEUE_ID --location=$LOCATION_ID --url=$URL --payload=hello
```
35 changes: 35 additions & 0 deletions cloud_tasks/snippets/create_queue.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# 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_tasks_create_queue]
def create_queue(project, queue_name, location):
"""Create a task queue."""

from google.cloud import tasks_v2

# Create a client.
client = tasks_v2.CloudTasksClient()

# Construct the fully qualified location path.
parent = client.location_path(project, location)

# Construct the create queue request.
queue = {'name': client.queue_path(project, location, queue_name)}

# Use the client to create the queue.
response = client.create_queue(parent, queue)

print('Created queue {}'.format(response.name))
return response
# [END cloud_tasks_create_queue]
40 changes: 40 additions & 0 deletions cloud_tasks/snippets/create_queue_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# 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 uuid

from google.cloud import tasks_v2
import pytest

import create_queue

TEST_PROJECT_ID = os.environ['GOOGLE_CLOUD_PROJECT']
TEST_LOCATION = os.getenv('TEST_QUEUE_LOCATION', 'us-central1')
TEST_QUEUE_NAME = f'my-queue-{uuid.uuid4().hex}'


@pytest.fixture()
def test_queue():
client = tasks_v2.CloudTasksClient()
q = create_queue.create_queue(TEST_PROJECT_ID, TEST_QUEUE_NAME, TEST_LOCATION)

yield q

client.delete_queue(q.name)


def test_create_queue(capsys, test_queue):
out, _ = capsys.readouterr()
assert 'Created queue' in out
30 changes: 30 additions & 0 deletions cloud_tasks/snippets/delete_queue.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# 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_tasks_delete_queue]
def delete_queue(project, queue_name, location):
"""Delete a task queue."""

from google.cloud import tasks_v2

# Create a client.
client = tasks_v2.CloudTasksClient()

# Get the fully qualified path to queue.
queue = client.queue_path(project, location, queue_name)

# Use the client to delete the queue.
client.delete_queue(queue)
print('Deleted queue')
# [END cloud_tasks_delete_queue]
56 changes: 56 additions & 0 deletions cloud_tasks/snippets/delete_queue_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# 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 uuid

from google.api_core import exceptions
from google.cloud import tasks_v2
import pytest

import delete_queue


TEST_PROJECT_ID = os.environ['GOOGLE_CLOUD_PROJECT']
TEST_LOCATION = os.getenv('TEST_QUEUE_LOCATION', 'us-central1')
TEST_QUEUE_NAME = f'my-queue-{uuid.uuid4().hex}'


@pytest.fixture()
def test_queue():
client = tasks_v2.CloudTasksClient()
parent = client.location_path(TEST_PROJECT_ID, TEST_LOCATION)
queue = {
# The fully qualified path to the queue
'name': client.queue_path(
TEST_PROJECT_ID, TEST_LOCATION, TEST_QUEUE_NAME),
}
q = client.create_queue(parent, queue)

yield q

try:
# Attempt to delete the queue in case the sample failed.
client.delete_queue(q.name)
except exceptions.NotFound:
# The queue was already successfully deleted.
print('Queue already deleted successfully')


def test_delete_queue(capsys, test_queue):
delete_queue.delete_queue(
TEST_PROJECT_ID, TEST_QUEUE_NAME, TEST_LOCATION
)
out, _ = capsys.readouterr()
assert 'Deleted queue' in out
36 changes: 36 additions & 0 deletions cloud_tasks/snippets/list_queues.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# 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_tasks_list_queues]
def list_queues(project, location):
"""List all task queues."""

from google.cloud import tasks_v2

# Create a client.
client = tasks_v2.CloudTasksClient()

# Construct the fully qualified location path.
parent = client.location_path(project, location)

# Use the client to obtain the queues.
response = client.list_queues(parent)

# Print the results.
for queue in response:
print(queue.name)

if response.num_results == 0:
print('No queues found!')
# [END cloud_tasks_list_queues]
55 changes: 55 additions & 0 deletions cloud_tasks/snippets/list_queues_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# 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 uuid

from google.cloud import tasks_v2
import pytest

import list_queues

TEST_PROJECT_ID = os.environ['GOOGLE_CLOUD_PROJECT']
TEST_LOCATION = os.getenv('TEST_QUEUE_LOCATION', 'us-central1')
TEST_QUEUE_NAME = f'my-queue-{uuid.uuid4().hex}'


@pytest.fixture()
def test_queue():
client = tasks_v2.CloudTasksClient()
parent = client.location_path(TEST_PROJECT_ID, TEST_LOCATION)
queue = {
# The fully qualified path to the queue
'name': client.queue_path(
TEST_PROJECT_ID, TEST_LOCATION, TEST_QUEUE_NAME),
}
q = client.create_queue(parent, queue)

yield q

client.delete_queue(q.name)


def test_list_queues_not_present(capsys):
list_queues.list_queues(TEST_PROJECT_ID, TEST_LOCATION)
out, _ = capsys.readouterr()

assert(TEST_QUEUE_NAME not in out)


def test_list_queues_present(capsys, test_queue):
list_queues.list_queues(TEST_PROJECT_ID, TEST_LOCATION)
out, _ = capsys.readouterr()

assert(TEST_QUEUE_NAME in out)

0 comments on commit 5273fff

Please sign in to comment.