Mercurial > libervia-web
annotate src/server/blog.py @ 717:29b84af2ff7b
server (blog): remove accidently added (and unused) import
author | souliane <souliane@mailoo.org> |
---|---|
date | Wed, 19 Aug 2015 16:04:30 +0200 |
parents | bf562fb9c273 |
children | c1abaa91a121 |
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 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
24 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
|
25 |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
26 from twisted.internet import defer |
10 | 27 from twisted.web import server |
28 from twisted.web.resource import Resource | |
29 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
|
30 from jinja2 import Environment, PackageLoader |
10 | 31 from datetime import datetime |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
32 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
|
33 import uuid |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
34 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
|
35 import os |
229
e632f77c4219
bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents:
228
diff
changeset
|
36 |
588
c8cca1a373dd
server_side: static blog: convert \n in raw text message to <br/>
souliane <souliane@mailoo.org>
parents:
586
diff
changeset
|
37 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
|
38 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
|
39 |
229
e632f77c4219
bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents:
228
diff
changeset
|
40 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
41 class TemplateProcessor(object): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
42 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
43 THEME = 'default' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
44 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
45 def __init__(self, host): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
46 self.host = host |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
47 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
48 # 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
|
49 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
|
50 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
|
51 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
|
52 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
53 def useTemplate(self, request, tpl, data=None): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
54 root_url = '../' * len(request.postpath) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
55 theme_url = os.path.join(root_url, 'themes', self.THEME) |
10 | 56 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
57 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
|
58 'styles': os.path.join(theme_url, 'styles'), |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
59 } |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
60 if data: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
61 data_.update(data) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
62 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
63 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
|
64 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
|
65 |
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 class MicroBlog(Resource, TemplateProcessor): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
68 isLeaf = True |
10 | 69 |
243
63e9b680d3e7
browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
70 def __init__(self, host): |
10 | 71 self.host = host |
72 Resource.__init__(self) | |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
73 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
|
74 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
|
75 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
|
76 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
|
77 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
|
78 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
79 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
|
80 """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
|
81 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
|
82 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
83 @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
|
84 @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
|
85 @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
|
86 @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
|
87 """ |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
88 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
|
89 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
|
90 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
|
91 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
|
92 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
|
93 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
|
94 try: |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
95 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
|
96 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
|
97 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
|
98 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
|
99 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
100 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
|
101 """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
|
102 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
103 @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
|
104 @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
|
105 @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
|
106 @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
|
107 """ |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
108 # 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
|
109 # 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
|
110 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
|
111 return |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
112 try: |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
113 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
|
114 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
|
115 return |
694
82123705474b
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
116 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
|
117 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
|
118 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
|
119 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
|
120 |
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
121 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
|
122 """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
|
123 |
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
|
124 @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
|
125 @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
|
126 """ |
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
|
127 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
|
128 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
|
129 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
|
130 # 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
|
131 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
|
132 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
|
133 return self.waiting_deferreds[jid_s][1] |
10 | 134 |
135 def render_GET(self, request): | |
136 if not request.postpath: | |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
137 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
|
138 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
139 prof_requested = request.postpath[0] |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
140 #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
|
141 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
|
142 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
|
143 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
|
144 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
145 d = defer.Deferred() |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
146 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
|
147 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
|
148 return server.NOT_DONE_YET |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
149 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
150 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
|
151 pub_jid = JID(pub_jid_s) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
152 d = defer.Deferred() |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
153 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
154 self.parseURLParams(request) |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
155 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
|
156 max_items = int(rsm_['max_']) |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
157 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
158 if request.atom: |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
159 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
|
160 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
|
161 return |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
162 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
163 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
|
164 if item_id: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
165 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
|
166 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
|
167 else: # display one message, count its comments |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
168 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
|
169 else: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
170 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
|
171 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
|
172 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
|
173 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
|
174 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
175 def parseURLParams(self, request): |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
176 """Parse the request URL parameters. |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
177 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
178 @param request: HTTP request |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
179 """ |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
180 request.item_id = None |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
181 request.atom = False |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
182 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
183 if len(request.postpath) > 1: |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
184 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
|
185 request.atom = True |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
186 else: |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
187 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
|
188 uuid.UUID(request.postpath[1]) |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
189 request.item_id = request.postpath[1] |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
190 except ValueError: |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
191 pass |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
192 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
193 self.parseURLParamsRSM(request) |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
194 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
|
195 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
196 def parseURLParamsRSM(self, request): |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
197 """Parse RSM request data from the URL parameters. |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
198 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
199 @param request: HTTP request |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
200 """ |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
201 rsm_ = {} |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
202 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
|
203 rsm_['max_'] = request.args['max'][0] |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
204 except (ValueError, KeyError): |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
205 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
|
206 try: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
207 rsm_['index'] = request.args['index'][0] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
208 except (ValueError, KeyError): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
209 try: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
210 rsm_['before'] = request.args['before'][0] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
211 except KeyError: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
212 try: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
213 rsm_['after'] = request.args['after'][0] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
214 except KeyError: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
215 pass |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
216 request.rsm_data = rsm_ |
10 | 217 |
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
|
218 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
|
219 """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
|
220 |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
221 @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
|
222 - 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
|
223 - microblog data (main item) |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
224 - 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
|
225 - 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
|
226 @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
|
227 @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
|
228 """ |
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
|
229 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
|
230 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
|
231 |
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 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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
238 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
|
239 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
240 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
|
241 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
|
242 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
|
243 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
244 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
|
245 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
|
246 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
247 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
|
248 """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
|
249 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
|
250 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
|
251 |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
252 @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
|
253 - 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
|
254 - microblog data (main item) |
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
255 - 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
|
256 - 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
|
257 @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
|
258 @param request: the HTTP request |
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
259 @profile |
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
260 """ |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
261 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
|
262 options = {} |
10 | 263 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
|
264 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
|
265 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
|
266 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
267 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
|
268 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
|
269 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
270 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
|
271 """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
|
272 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
|
273 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
|
274 if re.match(regexp, url): |
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
275 url = url |
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
276 else: |
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
277 url = default |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
278 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
|
279 |
702
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
280 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
|
281 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
|
282 data = {'base_url': base_url, |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
283 'keywords': getOption(C.STATIC_BLOG_PARAM_KEYWORDS), |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
284 '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
|
285 'title': title, |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
286 'favicon': avatar, |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
287 '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
|
288 } |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
289 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
290 mblog_data, main_rsm = mblog_data |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
291 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
|
292 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
|
293 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
294 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
|
295 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
|
296 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
297 request.write(self.useTemplate(request, 'static_blog', data)) |
10 | 298 request.finish() |
243
63e9b680d3e7
browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
299 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
300 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
|
301 request.write(feed.encode('utf-8')) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
302 request.finish() |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
303 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
304 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
|
305 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
|
306 request.finish() |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
307 |
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 class NavigationLinks(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
310 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
311 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
|
312 """Build the navigation links. |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
313 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
314 @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
|
315 @param rsm_data (dict): rsm data |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
316 @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
|
317 @return: dict |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
318 """ |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
319 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
|
320 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
|
321 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
|
322 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
|
323 continue |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
324 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
325 index = int(rsm_data['index']) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
326 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
327 link_data = {'base_url': base_url, 'suffix': ''} |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
328 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
329 if key.startswith('later_message'): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
330 if index <= 0: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
331 continue |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
332 link_data['item_id'] = rsm_data['first'] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
333 link_data['post_arg'] = 'before' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
334 else: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
335 if index + len(mblog_data) >= count: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
336 continue |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
337 link_data['item_id'] = rsm_data['last'] |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
338 link_data['post_arg'] = 'after' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
339 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
340 if request.display_single: |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
341 link_data['suffix'] = '&max=1' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
342 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
343 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
|
344 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
345 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
|
346 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
347 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
348 class BlogImage(object): |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
349 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
350 def __init__(self, url_, alt): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
351 self.url = url_ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
352 self.alt = alt |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
353 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
354 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
355 class BlogLink(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
356 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
357 def __init__(self, url_, style, text): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
358 self.url = url_ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
359 self.style = style |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
360 self.text = text |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
361 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
362 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
363 class BlogMessage(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
364 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
365 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
|
366 """ |
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 @param request: HTTP request |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
369 @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
|
370 @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
|
371 @param comments (list[dict]): comments |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
372 """ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
373 timestamp = float(entry.get('published', 0)) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
374 is_comment = entry['type'] == 'comment' |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
375 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
376 self.date = datetime.fromtimestamp(timestamp) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
377 self.type = entry['type'] |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
378 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
|
379 self.content = self.getText(entry, 'content') |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
380 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
381 if is_comment: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
382 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
|
383 else: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
384 self.author = ' ' |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
385 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
|
386 self.title = self.getText(entry, 'title') |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
387 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
388 comments_count = int(entry['comments_count']) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
389 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
|
390 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
391 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
|
392 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
393 delta = comments_count - len(comments) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
394 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
|
395 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
|
396 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
|
397 {'count': delta, 'comments': count_text(delta)} |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
398 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
|
399 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
400 if comments: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
401 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
|
402 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
|
403 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
404 def getText(self, entry, key): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
405 if ('%s_xhtml' % key) in entry: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
406 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
|
407 elif key in entry: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
408 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
|
409 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
|
410 return None |