annotate piecrust/admin/views/micropub.py @ 952:94fd4f07da83

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