comparison piecrust/commands/builtin/tasks.py @ 1114:8af2ea1f5c34

tasks: Add new `tasks` command and infrastructure, with `mention` task. * The new command lets `chef` run tasks from a queue. * The webmention endpoint now adds a mention task. * Moved mention handling code to a task runner.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 22 Feb 2018 22:12:45 -0800
parents
children
comparison
equal deleted inserted replaced
1113:29c51b981c17 1114:8af2ea1f5c34
1 import os.path
2 import logging
3 from piecrust.commands.base import ChefCommand
4
5
6 logger = logging.getLogger(__name__)
7
8
9 class TasksCommand(ChefCommand):
10 """ Command for managing and running task queues.
11 """
12 def __init__(self):
13 super().__init__()
14 self.name = 'tasks'
15 self.description = "Manages and runs various tasks."
16
17 def setupParser(self, parser, app):
18 subparsers = parser.add_subparsers()
19
20 p = subparsers.add_parser(
21 'list',
22 help="Show the list of tasks current in the queue.")
23 p.set_defaults(sub_func=self._listTasks)
24
25 p = subparsers.add_parser(
26 'run',
27 help="Runs the current task queue.")
28 p.add_argument(
29 '-k', '--keep-queue',
30 action='store_true',
31 help="Don't delete the task queue files.")
32 p.add_argument(
33 '-t', '--task',
34 help="Specify which task to run.")
35 p.set_defaults(sub_func=self._runTasks)
36
37 def run(self, ctx):
38 if hasattr(ctx.args, 'sub_func'):
39 ctx.args.sub_func(ctx)
40
41 def _listTasks(self, ctx):
42 from piecrust.tasks.base import TaskManager
43
44 root_dir = ctx.app.root_dir
45 tm = TaskManager(ctx.app)
46 tm.getTasks()
47 tasks = list(tm.getTasks())
48 logger.info("Task queue contains %d tasks" % len(tasks))
49 for path, task_type, task_data in tasks:
50 logger.info(" - [%s] %s" %
51 (task_type, os.path.relpath(path, root_dir)))
52
53 def _runTasks(self, ctx):
54 from piecrust.tasks.base import TaskManager
55
56 only_task = ctx.args.task
57 if only_task and os.path.isfile(only_task):
58 only_task, _ = os.path.splitext(os.path.basename(only_task))
59
60 tm = TaskManager(ctx.app)
61 tm.runQueue(
62 only_task=only_task,
63 clear_queue=False) # (not ctx.args.keep_queue))
64