Index: samples/gtaskqueue_sample/README =================================================================== new file mode 100755
151 lines
5.3 KiB
Python
151 lines
5.3 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright (C) 2010 Google Inc.
|
|
#
|
|
# 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.
|
|
|
|
|
|
"""Commands to interact with the Task object of the TaskQueue API."""
|
|
|
|
|
|
__version__ = '0.0.1'
|
|
|
|
|
|
|
|
from gtaskqueue.taskqueue_cmd_base import GoogleTaskCommand
|
|
|
|
from google.apputils import app
|
|
from google.apputils import appcommands
|
|
import gflags as flags
|
|
|
|
FLAGS = flags.FLAGS
|
|
|
|
|
|
class GetTaskCommand(GoogleTaskCommand):
|
|
"""Get properties of an existing task."""
|
|
|
|
def __init__(self, name, flag_values):
|
|
super(GetTaskCommand, self).__init__(name, flag_values)
|
|
|
|
def build_request(self, task_api, flag_values):
|
|
"""Build a request to get properties of a Task.
|
|
|
|
Args:
|
|
task_api: The handle to the task collection API.
|
|
flag_values: The parsed command flags.
|
|
Returns:
|
|
The properties of the task.
|
|
"""
|
|
return task_api.get(project=flag_values.project_name,
|
|
taskqueue=flag_values.taskqueue_name,
|
|
task=flag_values.task_name)
|
|
|
|
|
|
class LeaseTaskCommand(GoogleTaskCommand):
|
|
"""Lease a new task from the queue."""
|
|
|
|
def __init__(self, name, flag_values):
|
|
super(LeaseTaskCommand, self).__init__(name,
|
|
flag_values,
|
|
need_task_flag=False)
|
|
flags.DEFINE_integer('lease_secs',
|
|
None,
|
|
'The lease for the task in seconds')
|
|
flags.DEFINE_integer('num_tasks',
|
|
1,
|
|
'The number of tasks to lease')
|
|
flags.DEFINE_integer('payload_size_to_display',
|
|
2 * 1024 * 1024,
|
|
'Size of the payload for leased tasks to show')
|
|
|
|
def build_request(self, task_api, flag_values):
|
|
"""Build a request to lease a pending task from the TaskQueue.
|
|
|
|
Args:
|
|
task_api: The handle to the task collection API.
|
|
flag_values: The parsed command flags.
|
|
Returns:
|
|
A new leased task.
|
|
"""
|
|
if not flag_values.lease_secs:
|
|
raise app.UsageError('lease_secs must be specified')
|
|
|
|
return task_api.lease(project=flag_values.project_name,
|
|
taskqueue=flag_values.taskqueue_name,
|
|
leaseSecs=flag_values.lease_secs,
|
|
numTasks=flag_values.num_tasks,
|
|
body={})
|
|
|
|
def print_result(self, result):
|
|
"""Override to optionally strip the payload since it can be long."""
|
|
if result.get('items'):
|
|
items = []
|
|
for task in result.get('items'):
|
|
payloadlen = len(task['payloadBase64'])
|
|
if payloadlen > FLAGS.payload_size_to_display:
|
|
extra = payloadlen - FLAGS.payload_size_to_display
|
|
task['payloadBase64'] = ('%s(%d more bytes)' %
|
|
(task['payloadBase64'][:FLAGS.payload_size_to_display],
|
|
extra))
|
|
items.append(task)
|
|
result['items'] = items
|
|
GoogleTaskCommand.print_result(self, result)
|
|
|
|
|
|
class DeleteTaskCommand(GoogleTaskCommand):
|
|
"""Delete an existing task."""
|
|
|
|
def __init__(self, name, flag_values):
|
|
super(DeleteTaskCommand, self).__init__(name, flag_values)
|
|
|
|
def build_request(self, task_api, flag_values):
|
|
"""Build a request to delete a Task.
|
|
|
|
Args:
|
|
task_api: The handle to the taskqueue collection API.
|
|
flag_values: The parsed command flags.
|
|
Returns:
|
|
Whether the delete was successful.
|
|
"""
|
|
return task_api.delete(project=flag_values.project_name,
|
|
taskqueue=flag_values.taskqueue_name,
|
|
task=flag_values.task_name)
|
|
|
|
|
|
class ListTasksCommand(GoogleTaskCommand):
|
|
"""Lists all tasks in a queue (currently upto a max of 100)."""
|
|
|
|
def __init__(self, name, flag_values):
|
|
super(ListTasksCommand, self).__init__(name,
|
|
flag_values,
|
|
need_task_flag=False)
|
|
|
|
def build_request(self, task_api, flag_values):
|
|
"""Build a request to lists tasks in a queue.
|
|
|
|
Args:
|
|
task_api: The handle to the taskqueue collection API.
|
|
flag_values: The parsed command flags.
|
|
Returns:
|
|
A list of pending tasks in the queue.
|
|
"""
|
|
return task_api.list(project=flag_values.project_name,
|
|
taskqueue=flag_values.taskqueue_name)
|
|
|
|
|
|
def add_commands():
|
|
appcommands.AddCmd('listtasks', ListTasksCommand)
|
|
appcommands.AddCmd('gettask', GetTaskCommand)
|
|
appcommands.AddCmd('deletetask', DeleteTaskCommand)
|
|
appcommands.AddCmd('leasetask', LeaseTaskCommand)
|