annotate piecrust/admin/views/mentions.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 98c7dd6ea4ac
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1111
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import logging
1114
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
2 from flask import g, request, make_response, abort
1111
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 from ..blueprint import foodtruck_bp
1114
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
4 from piecrust.tasks.base import TaskManager
1111
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 logger = logging.getLogger(__name__)
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 @foodtruck_bp.route('/webmention', methods=['POST'])
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 def post_webmention():
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 # Basic validation of source/target.
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 src_url = request.form.get('source')
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 tgt_url = request.form.get('target')
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 if not src_url or not tgt_url:
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 logger.error("No source or target specified.")
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 abort(400)
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 if src_url.lower().rstrip('/') == tgt_url.lower().rstrip('/'):
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 logger.error("Source and target are the same.")
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 abort(400)
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21
1114
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
22 # Create the task for handling this mention.
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
23 pcapp = g.site.piecrust_app
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
24 task_manager = TaskManager(pcapp)
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
25 task_id = task_manager.createTask('mention', {
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
26 'source': src_url,
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
27 'target': tgt_url})
1111
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28
1114
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
29 # Either run the task now in a background process (for cheap and simple
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
30 # setups), or leave the task there to be picked up later when someone
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
31 # runs the task queue eventually.
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
32 wmcfg = pcapp.config.get('webmention')
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
33 if not wmcfg.get('use_task_queue'):
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
34 g.site.runTask(task_id)
1111
98c7dd6ea4ac admin: Early version of webmention endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35
1114
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1111
diff changeset
36 return make_response("Webmention queued.", 202, [])