Mercurial > libervia-web
annotate src/server/blog.py @ 713:d75935e2b279
browser_side (blog): do not fail when target server doesn't handle RSM
author | souliane <souliane@mailoo.org> |
---|---|
date | Wed, 15 Jul 2015 13:34:17 +0200 |
parents | bf562fb9c273 |
children | 29b84af2ff7b |
rev | line source |
---|---|
10 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
4 # Libervia: a Salut à Toi frontend |
685 | 5 # Copyright (C) 2011, 2012, 2013, 2014, 2015 Jérôme Poisson <goffi@goffi.org> |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
6 # Copyright (C) 2013, 2014, 2015 Adrien Cossa <souliane@mailoo.org> |
10 | 7 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
8 # This program is free software: you can redistribute it and/or modify |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
9 # it under the terms of the GNU Affero General Public License as published by |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
10 # the Free Software Foundation, either version 3 of the License, or |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
11 # (at your option) any later version. |
10 | 12 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
13 # This program is distributed in the hope that it will be useful, |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
16 # GNU Affero General Public License for more details. |
10 | 17 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
18 # You should have received a copy of the GNU Affero General Public License |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
19 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
10 | 20 |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
21 from sat.core.i18n import _, D_ |
306
52b1afd7ac3f
server_side: display rich text in blogs (addURLToText is now in sat_frontends/tools/strings)
souliane <souliane@mailoo.org>
parents:
243
diff
changeset
|
22 from sat_frontends.tools.strings import addURLToText |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
23 from sat.core.log import getLogger |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
24 from django.conf.urls import url |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
25 log = getLogger(__name__) |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
446
diff
changeset
|
26 |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
27 from twisted.internet import defer |
10 | 28 from twisted.web import server |
29 from twisted.web.resource import Resource | |
30 from twisted.words.protocols.jabber.jid import JID | |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
31 from jinja2 import Environment, PackageLoader |
10 | 32 from datetime import datetime |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
33 from sys import path |
389
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
34 import uuid |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
35 import re |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
36 import os |
229
e632f77c4219
bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents:
228
diff
changeset
|
37 |
588
c8cca1a373dd
server_side: static blog: convert \n in raw text message to <br/>
souliane <souliane@mailoo.org>
parents:
586
diff
changeset
|
38 from libervia.server.html_tools import sanitizeHtml, convertNewLinesToXHTML |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
446
diff
changeset
|
39 from libervia.server.constants import Const as C |
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
446
diff
changeset
|
40 |
229
e632f77c4219
bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents:
228
diff
changeset
|
41 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
42 class TemplateProcessor(object): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
43 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
44 THEME = 'default' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
45 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
46 def __init__(self, host): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
47 self.host = host |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
48 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
49 # add Libervia's themes directory to the python path |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
50 path.append(os.path.dirname(os.path.normpath(self.host.themes_dir))) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
51 themes = os.path.basename(os.path.normpath(self.host.themes_dir)) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
52 self.env = Environment(loader=PackageLoader(themes, self.THEME)) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
53 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
54 def useTemplate(self, request, tpl, data=None): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
55 root_url = '../' * len(request.postpath) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
56 theme_url = os.path.join(root_url, 'themes', self.THEME) |
10 | 57 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
58 data_ = {'images': os.path.join(theme_url, 'images'), |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
59 'styles': os.path.join(theme_url, 'styles'), |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
60 } |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
61 if data: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
62 data_.update(data) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
63 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
64 template = self.env.get_template('%s.html' % tpl) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
65 return template.render(**data_).encode('utf-8') |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
66 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
67 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
68 class MicroBlog(Resource, TemplateProcessor): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
69 isLeaf = True |
10 | 70 |
243
63e9b680d3e7
browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
71 def __init__(self, host): |
10 | 72 self.host = host |
73 Resource.__init__(self) | |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
74 TemplateProcessor.__init__(self, host) |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
75 self.host.bridge.register('entityDataUpdated', self.entityDataUpdatedCb) |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
76 self.host.bridge.register('actionResult', self.actionResultCb) # FIXME: actionResult is to be removed |
484
ae86b32b959c
server side (blog): manage our own avatars cache because existing entity data are not updated
souliane <souliane@mailoo.org>
parents:
483
diff
changeset
|
77 self.avatars_cache = {} |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
78 self.waiting_deferreds = {} |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
79 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
80 def entityDataUpdatedCb(self, entity_jid_s, key, value, dummy): |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
81 """Retrieve the avatar we've been waiting for and fires the callback |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
82 for self.getAvatar to return. |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
83 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
84 @param entity_jid_s (str): JID of the contact |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
85 @param key (str): entity data key |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
86 @param value (str): entity data value |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
87 @param dummy (str): that would be C.SERVICE_PROFILE |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
88 """ |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
89 if key != 'avatar': |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
90 return |
487
e588335b6aa8
browser and server side: force lower case for the profile name at new account creation + fixes CSS for textarea
souliane <souliane@mailoo.org>
parents:
484
diff
changeset
|
91 entity_jid_s = entity_jid_s.lower() |
694
82123705474b
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
92 log.debug(_(u"Received a new avatar for entity %s") % entity_jid_s) |
484
ae86b32b959c
server side (blog): manage our own avatars cache because existing entity data are not updated
souliane <souliane@mailoo.org>
parents:
483
diff
changeset
|
93 avatar = C.AVATARS_DIR + value |
ae86b32b959c
server side (blog): manage our own avatars cache because existing entity data are not updated
souliane <souliane@mailoo.org>
parents:
483
diff
changeset
|
94 self.avatars_cache[entity_jid_s] = avatar |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
95 try: |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
96 self.waiting_deferreds[entity_jid_s][1].callback(avatar) |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
97 del self.waiting_deferreds[entity_jid_s] |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
98 except KeyError: |
484
ae86b32b959c
server side (blog): manage our own avatars cache because existing entity data are not updated
souliane <souliane@mailoo.org>
parents:
483
diff
changeset
|
99 pass |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
100 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
101 def actionResultCb(self, answer_type, action_id, data, dummy): |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
102 """Fires the callback for self.getAvatar to return |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
103 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
104 @param answer_type (str): 'SUPPRESS' or another value that we would ignore |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
105 @param action_id (str): the request ID |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
106 @param data (dict): ignored |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
107 @param dummy (str): that would be C.SERVICE_PROFILE |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
108 """ |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
109 # FIXME: actionResult is to be removed. For now we use it to get notified |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
110 # when the requested vCard hasn't been found. Replace with the new system. |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
111 if answer_type != 'SUPPRESS': |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
112 return |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
113 try: |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
114 entity_jid_s = [key for (key, value) in self.waiting_deferreds.items() if value[0] == action_id][0] |
484
ae86b32b959c
server side (blog): manage our own avatars cache because existing entity data are not updated
souliane <souliane@mailoo.org>
parents:
483
diff
changeset
|
115 except IndexError: # impossible to guess the entity |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
116 return |
694
82123705474b
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
117 log.debug(_(u"Using default avatar for entity %s") % entity_jid_s) |
606
7af8f4ab3675
browser side: fixed avatar getting + better DEFAULT/EMPTY avatars constants + use of jid.JID for microblog's author
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
118 self.avatars_cache[entity_jid_s] = C.DEFAULT_AVATAR_URL |
7af8f4ab3675
browser side: fixed avatar getting + better DEFAULT/EMPTY avatars constants + use of jid.JID for microblog's author
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
119 self.waiting_deferreds[entity_jid_s][1].callback(C.DEFAULT_AVATAR_URL) |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
120 del self.waiting_deferreds[entity_jid_s] |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
121 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
122 def getAvatar(self, profile): |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
123 """Get the avatar of the given profile |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
124 |
606
7af8f4ab3675
browser side: fixed avatar getting + better DEFAULT/EMPTY avatars constants + use of jid.JID for microblog's author
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
125 @param profile(unicode): %(doc_profile)s |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
126 @return: deferred avatar path, relative to the server's root |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
127 """ |
487
e588335b6aa8
browser and server side: force lower case for the profile name at new account creation + fixes CSS for textarea
souliane <souliane@mailoo.org>
parents:
484
diff
changeset
|
128 jid_s = (profile + '@' + self.host.bridge.getNewAccountDomain()).lower() |
484
ae86b32b959c
server side (blog): manage our own avatars cache because existing entity data are not updated
souliane <souliane@mailoo.org>
parents:
483
diff
changeset
|
129 if jid_s in self.avatars_cache: |
ae86b32b959c
server side (blog): manage our own avatars cache because existing entity data are not updated
souliane <souliane@mailoo.org>
parents:
483
diff
changeset
|
130 return defer.succeed(self.avatars_cache[jid_s]) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
131 # FIXME: request_id is no more needed when actionResult is removed |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
132 request_id = self.host.bridge.getCard(jid_s, C.SERVICE_PROFILE) |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
133 self.waiting_deferreds[jid_s] = (request_id, defer.Deferred()) |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
134 return self.waiting_deferreds[jid_s][1] |
10 | 135 |
136 def render_GET(self, request): | |
137 if not request.postpath: | |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
138 return self.useTemplate(request, "static_blog_error", {'message': "You must indicate a nickname"}) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
139 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
140 prof_requested = request.postpath[0] |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
141 #TODO : char check: only use alphanumeric chars + some extra(_,-,...) here |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
142 prof_found = self.host.bridge.getProfileName(prof_requested) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
143 if not prof_found or prof_found == C.SERVICE_PROFILE: |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
144 return self.useTemplate(request, "static_blog_error", {'message': "Invalid nickname"}) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
145 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
146 d = defer.Deferred() |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
147 JID(self.host.bridge.asyncGetParamA('JabberID', 'Connection', 'value', C.SERVER_SECURITY_LIMIT, prof_found, callback=d.callback, errback=d.errback)) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
148 d.addCallbacks(lambda pub_jid_s: self.gotJID(pub_jid_s, request, prof_found)) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
149 return server.NOT_DONE_YET |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
150 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
151 def gotJID(self, pub_jid_s, request, profile): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
152 pub_jid = JID(pub_jid_s) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
153 d = defer.Deferred() |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
154 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
155 self.parseURLParams(request) |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
156 item_id, rsm_ = request.item_id, request.rsm_data |
705
531eacb82e9f
browser and server sides: renamed max to max_ after sat's changeset 1423 (882e5fabf68c)
souliane <souliane@mailoo.org>
parents:
704
diff
changeset
|
157 max_items = int(rsm_['max_']) |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
158 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
159 if request.atom: |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
160 d.addCallbacks(self.render_atom_feed, self.render_error_blog, [request], None, [request, profile], None) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
161 self.host.bridge.getGroupBlogsAtom(pub_jid.userhost(), rsm_, C.SERVICE_PROFILE, d.callback, d.errback) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
162 return |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
163 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
164 d.addCallbacks(self.render_html_blog, self.render_error_blog, [request, profile], None, [request, profile], None) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
165 if item_id: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
166 if max_items > 0: # display one message and its comments |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
167 self.host.bridge.getGroupBlogsWithComments(pub_jid.userhost(), [item_id], {}, max_items, C.SERVICE_PROFILE, d.callback, d.errback) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
168 else: # display one message, count its comments |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
169 self.host.bridge.getGroupBlogs(pub_jid.userhost(), [item_id], {}, True, C.SERVICE_PROFILE, d.callback, d.errback) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
170 else: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
171 if max_items == 1: # display one message and its comments |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
172 self.host.bridge.getGroupBlogsWithComments(pub_jid.userhost(), [], rsm_, C.RSM_MAX_COMMENTS, C.SERVICE_PROFILE, d.callback, d.errback) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
173 else: # display the last messages, count their comments |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
174 self.host.bridge.getGroupBlogs(pub_jid.userhost(), [], rsm_, True, C.SERVICE_PROFILE, d.callback, d.errback) |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
175 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
176 def parseURLParams(self, request): |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
177 """Parse the request URL parameters. |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
178 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
179 @param request: HTTP request |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
180 """ |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
181 request.item_id = None |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
182 request.atom = False |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
183 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
184 if len(request.postpath) > 1: |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
185 if request.postpath[1] == 'atom.xml': # return the atom feed |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
186 request.atom = True |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
187 else: |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
188 try: # check if the given path is a valid UUID |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
189 uuid.UUID(request.postpath[1]) |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
190 request.item_id = request.postpath[1] |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
191 except ValueError: |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
192 pass |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
193 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
194 self.parseURLParamsRSM(request) |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
195 request.display_single = (request.item_id is not None) or int(request.rsm_data['max_']) == 1 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
196 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
197 def parseURLParamsRSM(self, request): |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
198 """Parse RSM request data from the URL parameters. |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
199 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
200 @param request: HTTP request |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
201 """ |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
202 rsm_ = {} |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
203 try: |
705
531eacb82e9f
browser and server sides: renamed max to max_ after sat's changeset 1423 (882e5fabf68c)
souliane <souliane@mailoo.org>
parents:
704
diff
changeset
|
204 rsm_['max_'] = request.args['max'][0] |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
205 except (ValueError, KeyError): |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
206 rsm_['max_'] = unicode(C.RSM_MAX_ITEMS if request.item_id else C.RSM_MAX_COMMENTS) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
207 try: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
208 rsm_['index'] = request.args['index'][0] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
209 except (ValueError, KeyError): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
210 try: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
211 rsm_['before'] = request.args['before'][0] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
212 except KeyError: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
213 try: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
214 rsm_['after'] = request.args['after'][0] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
215 except KeyError: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
216 pass |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
217 request.rsm_data = rsm_ |
10 | 218 |
389
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
219 def render_html_blog(self, mblog_data, request, profile): |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
220 """Retrieve the user parameters before actually rendering the static blog |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
221 |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
222 @param mblog_data (list): couple (list, dict) with: |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
223 - a list of microblog data, or a list of couple containing: |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
224 - microblog data (main item) |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
225 - couple (comments data, RSM response data for the comments) |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
226 - RSM response data for the main items |
389
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
227 @param request: HTTP request |
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
228 @param profile |
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
229 """ |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
230 d_list = [] |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
231 options = {} |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
232 |
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
233 def getCallback(param_name): |
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
234 d = defer.Deferred() |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
235 d.addCallback(lambda value: options.update({param_name: value})) |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
236 d_list.append(d) |
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
237 return d.callback |
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
238 |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
239 eb = lambda failure: self.render_error_blog(failure, request, profile) |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
240 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
241 self.getAvatar(profile).addCallbacks(getCallback('avatar'), eb) |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
242 for param_name in (C.STATIC_BLOG_PARAM_TITLE, C.STATIC_BLOG_PARAM_BANNER, C.STATIC_BLOG_PARAM_KEYWORDS, C.STATIC_BLOG_PARAM_DESCRIPTION): |
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
243 self.host.bridge.asyncGetParamA(param_name, C.STATIC_BLOG_KEY, 'value', C.SERVER_SECURITY_LIMIT, profile, callback=getCallback(param_name), errback=eb) |
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
244 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
245 cb = lambda dummy: self.__render_html_blog(mblog_data, options, request, profile) |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
246 defer.DeferredList(d_list).addCallback(cb) |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
247 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
248 def __render_html_blog(self, mblog_data, options, request, profile): |
389
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
249 """Actually render the static blog. If mblog_data is a list of dict, we are missing |
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
250 the comments items so we just display the main items. If mblog_data is a list of couple, |
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
251 each couple is associating a main item data with the list of its comments, so we render all. |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
252 |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
253 @param mblog_data (list): couple (list, dict) with: |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
254 - a list of microblog data, or a list of couple containing: |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
255 - microblog data (main item) |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
256 - couple (comments data, RSM response data for the comments) |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
257 - RSM response data for the main items |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
258 @param options: dict defining the blog's parameters |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
259 @param request: the HTTP request |
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
260 @profile |
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
261 """ |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
262 if not isinstance(options, dict): |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
263 options = {} |
10 | 264 user = sanitizeHtml(profile).encode('utf-8') |
389
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
265 root_url = '../' * len(request.postpath) |
2d782349b88a
server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents:
388
diff
changeset
|
266 base_url = root_url + 'blog/' + user |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
267 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
268 def getOption(key): |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
269 return sanitizeHtml(options[key]).encode('utf-8') if key in options else '' |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
270 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
271 def getImageParams(key, default, alt): |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
272 """regexp from http://answers.oreilly.com/topic/280-how-to-validate-urls-with-regular-expressions/""" |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
273 url = options[key].encode('utf-8') if key in options else '' |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
274 regexp = r"^(https?|ftp)://[a-z0-9-]+(\.[a-z0-9-]+)+(/[\w-]+)*/[\w-]+\.(gif|png|jpg)$" |
702
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
275 if re.match(regexp, url): |
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
276 url = url |
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
277 else: |
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
278 url = default |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
279 return BlogImage(url, alt) |
441
63017904c4d4
server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents:
436
diff
changeset
|
280 |
702
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
281 avatar = os.path.normpath(root_url + getOption('avatar')) |
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
282 title = getOption(C.STATIC_BLOG_PARAM_TITLE) or user |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
283 data = {'base_url': base_url, |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
284 'keywords': getOption(C.STATIC_BLOG_PARAM_KEYWORDS), |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
285 'description': getOption(C.STATIC_BLOG_PARAM_DESCRIPTION), |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
286 'title': title, |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
287 'favicon': avatar, |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
288 'banner_img': getImageParams(C.STATIC_BLOG_PARAM_BANNER, avatar, title) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
289 } |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
290 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
291 mblog_data, main_rsm = mblog_data |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
292 mblog_data = [(entry if isinstance(entry, tuple) else (entry, ([], {}))) for entry in mblog_data] |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
293 mblog_data.sort(key=lambda entry: (-float(entry[0].get('updated', 0)))) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
294 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
295 data['navlinks'] = NavigationLinks(request, mblog_data, main_rsm, base_url) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
296 data['messages'] = [BlogMessage(request, base_url, entry, comments[0]) for entry, comments in mblog_data] |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
297 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
298 request.write(self.useTemplate(request, 'static_blog', data)) |
10 | 299 request.finish() |
243
63e9b680d3e7
browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
300 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
301 def render_atom_feed(self, feed, request): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
302 request.write(feed.encode('utf-8')) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
303 request.finish() |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
304 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
305 def render_error_blog(self, error, request, profile): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
306 request.write(self.useTemplate(request, "static_blog_error", {'message': "Can't access requested data"})) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
307 request.finish() |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
308 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
309 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
310 class NavigationLinks(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
311 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
312 def __init__(self, request, mblog_data, rsm_data, base_url): |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
313 """Build the navigation links. |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
314 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
315 @param mblog_data (dict): the microblogs that are displayed on the page |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
316 @param rsm_data (dict): rsm data |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
317 @param base_url (unicode): the base URL for this user's blog |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
318 @return: dict |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
319 """ |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
320 for key in ('later_message', 'later_messages', 'older_message', 'older_messages'): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
321 count = int(rsm_data.get('count', 0)) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
322 setattr(self, key, '') # key must exist when using the template |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
323 if count <= 0 or (request.display_single == key.endswith('s')): |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
324 continue |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
325 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
326 index = int(rsm_data['index']) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
327 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
328 link_data = {'base_url': base_url, 'suffix': ''} |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
329 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
330 if key.startswith('later_message'): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
331 if index <= 0: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
332 continue |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
333 link_data['item_id'] = rsm_data['first'] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
334 link_data['post_arg'] = 'before' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
335 else: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
336 if index + len(mblog_data) >= count: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
337 continue |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
338 link_data['item_id'] = rsm_data['last'] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
339 link_data['post_arg'] = 'after' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
340 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
341 if request.display_single: |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
342 link_data['suffix'] = '&max=1' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
343 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
344 link = "%(base_url)s?%(post_arg)s=%(item_id)s%(suffix)s" % link_data |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
345 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
346 setattr(self, key, BlogLink(link, key, key.replace('_', ' '))) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
347 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
348 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
349 class BlogImage(object): |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
350 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
351 def __init__(self, url_, alt): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
352 self.url = url_ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
353 self.alt = alt |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
354 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
355 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
356 class BlogLink(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
357 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
358 def __init__(self, url_, style, text): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
359 self.url = url_ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
360 self.style = style |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
361 self.text = text |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
362 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
363 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
364 class BlogMessage(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
365 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
366 def __init__(self, request, base_url, entry, comments=None): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
367 """ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
368 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
369 @param request: HTTP request |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
370 @param base_url (unicode): the base URL |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
371 @param entry (dict{unicode:unicode]): microblog entry received from the backend |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
372 @param comments (list[dict]): comments |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
373 """ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
374 timestamp = float(entry.get('published', 0)) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
375 is_comment = entry['type'] == 'comment' |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
376 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
377 self.date = datetime.fromtimestamp(timestamp) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
378 self.type = entry['type'] |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
379 self.style = 'mblog_comment' if entry['type'] == 'comment' else '' |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
380 self.content = self.getText(entry, 'content') |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
381 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
382 if is_comment: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
383 self.author = (_("from %s") % entry['author']).encode('utf-8') |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
384 else: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
385 self.author = ' ' |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
386 self.url = (u"%s/%s" % (base_url, entry['id'])).encode('utf-8') |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
387 self.title = self.getText(entry, 'title') |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
388 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
389 comments_count = int(entry['comments_count']) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
390 count_text = lambda count: D_('comments') if count > 1 else D_('comment') |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
391 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
392 self.comments_text = "%s %s" % (comments_count, count_text(comments_count)) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
393 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
394 delta = comments_count - len(comments) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
395 if request.display_single and delta > 0: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
396 prev_url = "%s?max=%s" % (self.url, entry['comments_count']) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
397 prev_text = D_("show %(count)d previous %(comments)s") % \ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
398 {'count': delta, 'comments': count_text(delta)} |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
399 self.all_comments_link = BlogLink(prev_url, "comments_link", prev_text) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
400 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
401 if comments: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
402 comments.sort(key=lambda entry: float(entry.get('published', 0))) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
403 self.comments = [BlogMessage(request, base_url, comment) for comment in comments] |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
404 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
405 def getText(self, entry, key): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
406 if ('%s_xhtml' % key) in entry: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
407 return entry['%s_xhtml' % key].encode('utf-8') |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
408 elif key in entry: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
409 processor = addURLToText if key.startswith('content') else sanitizeHtml |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
410 return convertNewLinesToXHTML(processor(entry[key])).encode('utf-8') |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
411 return None |