Skip to content

Commit

Permalink
add python snippets and tests for creating, listing, and deleting que…
Browse files Browse the repository at this point in the history
…ues (#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]>
  • Loading branch information
3 people authored Jun 12, 2020
1 parent b521191 commit 5ffa8ab
Show file tree
Hide file tree
Showing 6 changed files with 252 additions and 0 deletions.
35 changes: 35 additions & 0 deletions tasks/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 tasks/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 tasks/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 tasks/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 tasks/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 tasks/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 5ffa8ab

Please sign in to comment.