Add a 'clear' command to the Google taskqueue sample.
Fix the handling of per-command flags so that the help displays
correctly.
diff --git a/samples/gtaskqueue_sample/gtaskqueue/gtaskqueue b/samples/gtaskqueue_sample/gtaskqueue/gtaskqueue
old mode 100644
new mode 100755
diff --git a/samples/gtaskqueue_sample/gtaskqueue/task_cmds.py b/samples/gtaskqueue_sample/gtaskqueue/task_cmds.py
index 4adea2b..5bbc2ad 100644
--- a/samples/gtaskqueue_sample/gtaskqueue/task_cmds.py
+++ b/samples/gtaskqueue_sample/gtaskqueue/task_cmds.py
@@ -55,18 +55,21 @@
"""Lease a new task from the queue."""
def __init__(self, name, flag_values):
+ flags.DEFINE_integer('lease_secs',
+ None,
+ 'The lease for the task in seconds',
+ flag_values=flag_values)
+ flags.DEFINE_integer('num_tasks',
+ 1,
+ 'The number of tasks to lease',
+ flag_values=flag_values)
+ flags.DEFINE_integer('payload_size_to_display',
+ 2 * 1024 * 1024,
+ 'Size of the payload for leased tasks to show',
+ flag_values=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.
@@ -143,8 +146,67 @@
taskqueue=flag_values.taskqueue_name)
+class ClearTaskQueueCommand(GoogleTaskCommand):
+ """Deletes all tasks in a queue (default to a max of 100)."""
+
+
+ def __init__(self, name, flag_values):
+ flags.DEFINE_integer('max_delete', 100, 'How many to clear at most',
+ flag_values=flag_values)
+ super(ClearTaskQueueCommand, self).__init__(name,
+ flag_values,
+ need_task_flag=False)
+
+ def run_with_api_and_flags(self, api, flag_values):
+ """Run the command, returning the result.
+
+ Args:
+ api: The handle to the Google TaskQueue API.
+ flag_values: The parsed command flags.
+ Returns:
+ The result of running the command.
+ """
+ tasks_api = api.tasks()
+ self._flag_values = flag_values
+ self._to_delete = flag_values.max_delete
+ total_deleted = 0
+ while self._to_delete > 0:
+ n_deleted = self._delete_a_batch(tasks_api)
+ if n_deleted <= 0:
+ break
+ total_deleted += n_deleted
+ return {'deleted': total_deleted}
+
+ def _delete_a_batch(self, tasks):
+ """Delete a batch of tasks.
+
+ Since the list method only gives us back 100 at a time, we may have
+ to call it several times to clear the entire queue.
+
+ Args:
+ tasks: The handle to the Google TaskQueue API Tasks resource.
+ Returns:
+ The number of tasks deleted.
+ """
+ list_request = tasks.list(project=self._flag_values.project_name,
+ taskqueue=self._flag_values.taskqueue_name)
+ result = list_request.execute()
+ n_deleted = 0
+ if result:
+ for task in result.get('items', []):
+ if self._to_delete > 0:
+ self._to_delete -= 1
+ n_deleted += 1
+ print 'Deleting: %s' % task['id']
+ tasks.delete(project=self._flag_values.project_name,
+ taskqueue=self._flag_values.taskqueue_name,
+ task=task['id']).execute()
+ return n_deleted
+
+
def add_commands():
appcommands.AddCmd('listtasks', ListTasksCommand)
appcommands.AddCmd('gettask', GetTaskCommand)
appcommands.AddCmd('deletetask', DeleteTaskCommand)
appcommands.AddCmd('leasetask', LeaseTaskCommand)
+ appcommands.AddCmd('clear', ClearTaskQueueCommand)
diff --git a/samples/gtaskqueue_sample/gtaskqueue/taskqueue_cmds.py b/samples/gtaskqueue_sample/gtaskqueue/taskqueue_cmds.py
index 99c3f2a..f21840a 100644
--- a/samples/gtaskqueue_sample/gtaskqueue/taskqueue_cmds.py
+++ b/samples/gtaskqueue_sample/gtaskqueue/taskqueue_cmds.py
@@ -33,10 +33,11 @@
"""Get properties of an existing task queue."""
def __init__(self, name, flag_values):
- super(GetTaskQueueCommand, self).__init__(name, flag_values)
flags.DEFINE_boolean('get_stats',
False,
- 'Whether to get Stats')
+ 'Whether to get Stats',
+ flag_values=flag_values)
+ super(GetTaskQueueCommand, self).__init__(name, flag_values)
def build_request(self, taskqueue_api, flag_values):
"""Build a request to get properties of a TaskQueue.