Mercurial > piecrust2
annotate piecrust/admin/views/micropub.py @ 968:20f49786937c
admin: Fix bug on the publish view.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 08 Oct 2017 09:31:15 -0700 |
parents | d65838abbd90 |
children | 5b735229b6fb |
rev | line source |
---|---|
895
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 import re |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 import os |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 import os.path |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 import logging |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 import datetime |
964
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
6 import yaml |
895
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 from werkzeug.utils import secure_filename |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 from flask import g, request, abort, Response |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 from flask_indieauth import requires_indieauth |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 from ..blueprint import foodtruck_bp |
964
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
11 from piecrust.configuration import merge_dicts |
895
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 from piecrust.page import Page |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 logger = logging.getLogger(__name__) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 re_unsafe_asset_char = re.compile('[^a-zA-Z0-9_]') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 @foodtruck_bp.route('/micropub', methods=['POST']) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 @requires_indieauth |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
22 def micropub(): |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 post_type = request.form.get('h') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 if post_type == 'entry': |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 uri = _create_hentry() |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 _run_publisher() |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
28 return _get_location_response(uri) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 logger.debug("Unknown or unsupported update type.") |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 logger.debug(request.form) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 abort(400) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 def _run_publisher(): |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 pcapp = g.site.piecrust_app |
964
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
37 target = pcapp.config.get('micropub/publish_target') |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
38 if target: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
39 logger.debug("Running pushing target '%s'." % target) |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
40 g.site.publish(target) |
895
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
42 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 def _get_location_response(uri): |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 logger.debug("Redirecting to: %s" % uri) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 r = Response() |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 r.status_code = 201 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
47 r.headers.add('Location', uri) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 return r |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
51 def _create_hentry(): |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 f = request.form |
964
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
53 pcapp = g.site.piecrust_app |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
54 |
895
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 summary = f.get('summary') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 categories = f.getlist('category[]') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 location = f.get('location') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 reply_to = f.get('in-reply-to') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
59 status = f.get('post-status') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 # pubdate = f.get('published', 'now') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 # Figure out the title of the post. |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 name = f.get('name') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 if not name: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 name = f.get('name[]') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
67 # Figure out the contents of the post. |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 post_format = None |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 content = f.get('content') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 if not content: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
71 content = f.get('content[]') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
72 if not content: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
73 content = f.get('content[html]') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
74 post_format = 'none' |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
75 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
76 if not content: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
77 logger.error("No content specified!") |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 logger.error(dict(request.form)) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 abort(400) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
80 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 # TODO: setting to conserve Windows-type line endings? |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 content = content.replace('\r\n', '\n') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 if summary: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
84 summary = summary.replace('\r\n', '\n') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 # Figure out the slug of the post. |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
87 now = datetime.datetime.now() |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
88 slug = f.get('slug') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 if not slug: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 slug = f.get('mp-slug') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
91 if not slug: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 slug = '%02d%02d%02d' % (now.hour, now.minute, now.second) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
93 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
94 # Get the media to attach to the post. |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
95 photo_urls = None |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
96 if 'photo' in f: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 photo_urls = [f['photo']] |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
98 elif 'photo[]' in f: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
99 photo_urls = f.getlist('photo[]') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
100 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
101 photos = None |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
102 if 'photo' in request.files: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
103 photos = [request.files['photo']] |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
104 elif 'photo[]' in request.files: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
105 photos = request.files.getlist('photo[]') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
106 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
107 # Create the post in the correct content source. |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
108 pcapp = g.site.piecrust_app |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
109 source_name = pcapp.config.get('micropub/source', 'posts') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
110 source = pcapp.getSource(source_name) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
111 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
112 metadata = { |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
113 'date': now, |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
114 'slug': slug |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
115 } |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
116 logger.debug("Creating item with metadata: %s" % metadata) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
117 content_item = source.createContent(metadata) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
118 if content_item is None: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
119 logger.error("Can't create item for: %s" % metadata) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
120 abort(500) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
121 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
122 # TODO: add proper APIs for creating related assets. |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
123 photo_names = None |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
124 if photos: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
125 photo_dir, _ = os.path.splitext(content_item.spec) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
126 photo_dir += '-assets' |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
127 if not os.path.exists(photo_dir): |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
128 os.makedirs(photo_dir) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
129 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
130 photo_names = [] |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
131 for photo in photos: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
132 if not photo or not photo.filename: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
133 logger.warning("Got empty photo in request files... skipping.") |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
134 continue |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
135 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
136 fn = secure_filename(photo.filename) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
137 fn = re_unsafe_asset_char.sub('_', fn) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
138 photo_path = os.path.join(photo_dir, fn) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
139 logger.info("Uploading file to: %s" % photo_path) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
140 photo.save(photo_path) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
141 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
142 fn_no_ext, _ = os.path.splitext(fn) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
143 photo_names.append(fn_no_ext) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
144 |
964
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
145 # Build the config. |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
146 post_config = {} |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
147 if name: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
148 post_config['title'] = name |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
149 if categories: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
150 post_config['tags'] = categories |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
151 if location: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
152 post_config['location'] = location |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
153 if reply_to: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
154 post_config['reply_to'] = reply_to |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
155 if status: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
156 post_config['status'] = status |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
157 if post_format: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
158 post_config['format'] = post_format |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
159 post_config['time'] = '%02d:%02d:%02d' % (now.hour, now.minute, now.second) |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
160 |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
161 # If there's no title, this is a "microblogging" post. |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
162 if not name: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
163 micro_config = pcapp.config.get('micropub/microblogging') |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
164 if micro_config: |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
165 merge_dicts(post_config, micro_config) |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
166 |
895
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
167 logger.debug("Writing to item: %s" % content_item.spec) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
168 with source.openItem(content_item, mode='w') as fp: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
169 fp.write('---\n') |
964
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
170 yaml.dump(post_config, fp, |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
171 default_flow_style=False, |
d65838abbd90
admin: Better micropub request handling.
Ludovic Chabant <ludovic@chabant.com>
parents:
895
diff
changeset
|
172 allow_unicode=True) |
895
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
173 fp.write('---\n') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
174 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
175 if summary: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
176 fp.write(summary) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
177 fp.write('\n') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
178 fp.write('<!--break-->\n\n') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
179 fp.write(content) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
180 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
181 if photo_urls: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
182 fp.write('\n\n') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
183 for pu in photo_urls: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
184 fp.write('<img src="{{assets.%s}}" alt=""/>\n\n' % pu) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
185 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
186 if photo_names: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
187 fp.write('\n\n') |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
188 for pn in photo_names: |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
189 fp.write('<img src="{{assets.%s}}" alt="%s"/>\n\n' % |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
190 (pn, pn)) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
191 |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
192 page = Page(source, content_item) |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
193 uri = page.getUri() |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
194 return uri |
accfe8fc8440
admin: Add a Micropub endpoint.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
195 |