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
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
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