Mercurial > piecrust2
annotate piecrust/admin/views/mentions.py @ 1195:ae9387338db1 draft default tip
admin: add option to publish immediately
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 30 Dec 2022 16:48:04 -0800 |
parents | 8af2ea1f5c34 |
children |
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, []) |