Mercurial > libervia-web
annotate src/server/blog.py @ 883:74be6217d913
server (options): Q&D trick to have unicode value from command line arguments and sat.conf
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 09 Mar 2016 20:40:27 +0100 |
parents | d3d2b97aa12c |
children | 763da94ba28b |
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 |
818 | 5 # Copyright (C) 2011-2016 Jérôme Poisson <goffi@goffi.org> |
6 # Copyright (C) 2013-2016 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_ |
847
330db23d4a44
server (blog): call fixXHTMLLinks on XHTML content
souliane <souliane@mailoo.org>
parents:
831
diff
changeset
|
22 from sat_frontends.tools.strings import addURLToText, fixXHTMLLinks |
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__) |
760
78caef6ed8e7
static blog: replaced mbdata2tags by sat.tools.common.dict2iter
Goffi <goffi@goffi.org>
parents:
749
diff
changeset
|
25 from sat.tools import common |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
26 from sat.tools import xml_tools |
728
9d35d75566fb
server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents:
727
diff
changeset
|
27 from dbus.exceptions import DBusException |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
28 from twisted.internet import defer |
10 | 29 from twisted.web import server |
30 from twisted.web.resource import Resource | |
31 from twisted.words.protocols.jabber.jid import JID | |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
32 from twisted.words.xish import domish |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
33 from jinja2 import Environment, PackageLoader |
10 | 34 from datetime import datetime |
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 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
37 import sys |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
38 import urllib |
229
e632f77c4219
bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents:
228
diff
changeset
|
39 |
588
c8cca1a373dd
server_side: static blog: convert \n in raw text message to <br/>
souliane <souliane@mailoo.org>
parents:
586
diff
changeset
|
40 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
|
41 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
|
42 |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
43 NS_ATOM = 'http://www.w3.org/2005/Atom' |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
44 PARAMS_TO_GET = (C.STATIC_BLOG_PARAM_TITLE, C.STATIC_BLOG_PARAM_BANNER, C.STATIC_BLOG_PARAM_KEYWORDS, C.STATIC_BLOG_PARAM_DESCRIPTION) |
854 | 45 re_strip_empty_div = re.compile(r"<div ?/>|<div> *?</div>") |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
46 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
47 # TODO: chech disco features and use max_items when RSM is not available |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
48 # FIXME: Deferred are not used |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
49 # FIXME: change navigation links handling, this is is fragile |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
50 # TODO: refactorise this |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
51 |
827
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
52 |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
53 def getDefaultQueryData(request): |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
54 """Return query data which must be present in all links |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
55 |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
56 @param request(twisted.web.http.Request): request instance comming from render |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
57 @return (dict): a dict with values as expected by urllib.urlencode |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
58 """ |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
59 default_query_data = {} |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
60 try: |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
61 default_query_data['tag'] = request.extra_dict['mam_filter_{}'.format(C.MAM_FILTER_CATEGORY)].encode('utf-8') |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
62 except KeyError: |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
63 pass |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
64 return default_query_data |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
65 |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
66 |
827
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
67 def _quote(value): |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
68 """Quote a value for use in url |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
69 |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
70 @param value(unicode): value to quote |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
71 @return (str): quoted value |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
72 """ |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
73 return urllib.quote(value.encode('utf-8'), '') |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
74 |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
75 |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
76 def _unquote(quoted_value): |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
77 """Unquote a value coming from url |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
78 |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
79 @param unquote_value(str): value to unquote |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
80 @return (unicode): unquoted value |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
81 """ |
854 | 82 assert not isinstance(quoted_value, unicode) |
827
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
83 return urllib.unquote(quoted_value).decode('utf-8') |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
84 |
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
85 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
86 class TemplateProcessor(object): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
87 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
88 THEME = 'default' |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
89 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
90 def __init__(self, host): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
91 self.host = host |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
92 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
93 # add Libervia's themes directory to the python path |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
94 sys.path.append(os.path.dirname(os.path.normpath(self.host.themes_dir))) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
95 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
|
96 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
|
97 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
98 def useTemplate(self, request, tpl, data=None): |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
99 theme_url = os.path.join('/', C.THEMES_URL, self.THEME) |
10 | 100 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
101 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
|
102 'styles': os.path.join(theme_url, 'styles'), |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
103 } |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
104 if data: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
105 data_.update(data) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
106 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
107 template = self.env.get_template('{}.html'.format(tpl)) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
108 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
|
109 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
110 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
111 class MicroBlog(Resource, TemplateProcessor): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
112 isLeaf = True |
10 | 113 |
243
63e9b680d3e7
browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
114 def __init__(self, host): |
10 | 115 self.host = host |
116 Resource.__init__(self) | |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
117 TemplateProcessor.__init__(self, host) |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
118 self.host.bridge.register('entityDataUpdated', self.entityDataUpdatedHandler) |
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
|
119 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
|
120 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
|
121 |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
122 def entityDataUpdatedHandler(self, entity_s, key, value, dummy): |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
123 """Retrieve the avatar we've been waiting for and fires the callback. |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
124 |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
125 @param entity_s (str): JID of the contact |
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 @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
|
127 @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
|
128 @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
|
129 """ |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
130 if key != "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
|
131 return |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
132 log.debug(_(u"Received a new avatar for entity %s") % entity_s) |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
133 |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
134 url = os.path.join(C.AVATARS_DIR, value) |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
135 self.avatars_cache[entity_s] = url |
749
7168a9873dde
server_side (blog): fixes avatar callback
souliane <souliane@mailoo.org>
parents:
747
diff
changeset
|
136 try: |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
137 self.waiting_deferreds.pop(entity_s).callback(url) |
749
7168a9873dde
server_side (blog): fixes avatar callback
souliane <souliane@mailoo.org>
parents:
747
diff
changeset
|
138 except KeyError: |
7168a9873dde
server_side (blog): fixes avatar callback
souliane <souliane@mailoo.org>
parents:
747
diff
changeset
|
139 pass |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
140 |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
141 def getAvatarURL(self, pub_jid): |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
142 """Return avatar of a jid if in cache, else ask for it. |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
143 |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
144 @param pub_jid (JID): publisher JID |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
145 @return: deferred avatar URL (unicode) |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
146 """ |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
147 bare_jid_s = pub_jid.userhost() |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
148 try: |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
149 url = self.avatars_cache[bare_jid_s] |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
150 except KeyError: |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
151 self.avatars_cache[bare_jid_s] = '' # avoid to request the vcard several times |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
152 self.host.bridge.getCard(bare_jid_s, C.SERVICE_PROFILE) |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
153 d = defer.Deferred() |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
154 self.waiting_deferreds[bare_jid_s] = d |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
155 return d |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
156 return defer.succeed(url if url else C.DEFAULT_AVATAR_URL) |
10 | 157 |
158 def render_GET(self, request): | |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
159 if not request.postpath or len(request.postpath) > 2: |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
160 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
|
161 |
827
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
162 prof_requested = _unquote(request.postpath[0]) |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
163 |
728
9d35d75566fb
server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents:
727
diff
changeset
|
164 try: |
9d35d75566fb
server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents:
727
diff
changeset
|
165 prof_found = self.host.bridge.getProfileName(prof_requested) |
9d35d75566fb
server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents:
727
diff
changeset
|
166 except DBusException: |
9d35d75566fb
server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents:
727
diff
changeset
|
167 prof_found = None |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
168 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
|
169 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
|
170 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
171 d = defer.Deferred() |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
172 # TODO: jid caching |
747 | 173 self.host.bridge.asyncGetParamA('JabberID', 'Connection', 'value', profile_key=prof_found, callback=d.callback, errback=d.errback) |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
174 d.addCallback(self.render_gotJID, request, prof_found) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
175 return server.NOT_DONE_YET |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
176 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
177 def render_gotJID(self, pub_jid_s, request, profile): |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
178 pub_jid = JID(pub_jid_s) |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
179 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
180 request.extra_dict = {} # will be used for RSM and MAM |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
181 self.parseURLParams(request) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
182 if request.item_id: |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
183 # FIXME: this part seems useless |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
184 # we want a specific item |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
185 # item_ids = [request.item_id] |
825
a3e888ac4964
server (blog): removed another max_items
Goffi <goffi@goffi.org>
parents:
824
diff
changeset
|
186 # max_items = 1 |
a3e888ac4964
server (blog): removed another max_items
Goffi <goffi@goffi.org>
parents:
824
diff
changeset
|
187 max_items = 0 # FIXME |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
188 else: |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
189 # max_items = int(request.extra_dict['rsm_max']) # FIXME |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
190 max_items = 0 |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
191 # TODO: use max_items only when RSM is not available |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
192 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
193 if request.atom: |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
194 request.extra_dict.update(request.mam_extra) |
882
d3d2b97aa12c
blog (atom): removed hard ATOM_MAX_ITEMS value as it need to be used with MAM, may come back in the future
Goffi <goffi@goffi.org>
parents:
881
diff
changeset
|
195 self.getAtom(pub_jid, max_items, request.extra_dict, request.extra_comments_dict, request, profile) |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
196 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
197 elif request.item_id: |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
198 # we can't merge mam_extra now because we'll use item_ids |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
199 self.getItemById(pub_jid, request.item_id, request.extra_dict, |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
200 request.extra_comments_dict, request, profile) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
201 else: |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
202 request.extra_dict.update(request.mam_extra) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
203 self.getItems(pub_jid, max_items, request.extra_dict, |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
204 request.extra_comments_dict, request, profile) |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
205 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
206 ## URL parsing |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
207 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
208 def parseURLParams(self, request): |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
209 """Parse the request URL parameters. |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
210 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
211 @param request: HTTP request |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
212 """ |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
213 if len(request.postpath) > 1: |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
214 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
|
215 request.atom = True |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
216 request.item_id = None |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
217 else: |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
218 request.atom = False |
827
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
219 request.item_id = _unquote(request.postpath[1]) |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
220 else: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
221 request.item_id = None |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
222 request.atom = False |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
223 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
224 self.parseURLParamsRSM(request) |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
225 # XXX: request.display_single is True when only one blog post is visible |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
226 request.display_single = (request.item_id is not None) or int(request.extra_dict['rsm_max']) == 1 |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
227 self.parseURLParamsCommentsRSM(request) |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
228 self.parseURLParamsMAM(request) |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
229 |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
230 def parseURLParamsRSM(self, request): |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
231 """Parse RSM request data from the URL parameters for main items |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
232 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
233 fill request.extra_dict accordingly |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
234 @param request: HTTP request |
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
235 """ |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
236 if request.item_id: # XXX: item_id and RSM are not compatible |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
237 return |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
238 try: |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
239 rsm_max = int(request.args['max'][0]) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
240 if rsm_max > C.STATIC_RSM_MAX_LIMIT: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
241 log.warning(u"Request with rsm_max over limit ({})".format(rsm_max)) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
242 rsm_max = C.STATIC_RSM_MAX_LIMIT |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
243 request.extra_dict['rsm_max'] = unicode(rsm_max) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
244 except (ValueError, KeyError): |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
245 request.extra_dict['rsm_max'] = unicode(C.STATIC_RSM_MAX_DEFAULT) |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
246 try: |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
247 request.extra_dict['rsm_index'] = request.args['index'][0] |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
248 except (ValueError, KeyError): |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
249 try: |
829
c1000ea40e6c
server (blog): fixed unicode handling for query args
Goffi <goffi@goffi.org>
parents:
828
diff
changeset
|
250 request.extra_dict['rsm_before'] = request.args['before'][0].decode('utf-8') |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
251 except KeyError: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
252 try: |
829
c1000ea40e6c
server (blog): fixed unicode handling for query args
Goffi <goffi@goffi.org>
parents:
828
diff
changeset
|
253 request.extra_dict['rsm_after'] = request.args['after'][0].decode('utf-8') |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
254 except KeyError: |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
255 pass |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
256 |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
257 def parseURLParamsCommentsRSM(self, request): |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
258 """Parse RSM request data from the URL parameters for comments |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
259 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
260 fill request.extra_dict accordingly |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
261 @param request: HTTP request |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
262 """ |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
263 request.extra_comments_dict = {} |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
264 if request.display_single: |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
265 try: |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
266 rsm_max = int(request.args['comments_max'][0]) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
267 if rsm_max > C.STATIC_RSM_MAX_LIMIT: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
268 log.warning(u"Request with rsm_max over limit ({})".format(rsm_max)) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
269 rsm_max = C.STATIC_RSM_MAX_LIMIT |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
270 request.extra_comments_dict['rsm_max'] = unicode(rsm_max) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
271 except (ValueError, KeyError): |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
272 request.extra_comments_dict['rsm_max'] = unicode(C.STATIC_RSM_MAX_COMMENTS_DEFAULT) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
273 else: |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
274 request.extra_comments_dict['rsm_max'] = "0" |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
275 |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
276 def parseURLParamsMAM(self, request): |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
277 """Parse MAM request data from the URL parameters for main items |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
278 |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
279 fill request.extra_dict accordingly |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
280 @param request: HTTP request |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
281 """ |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
282 # XXX: we use a separate dict for MAM as the filters are not used |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
283 # when display_single is set (because it then use item_ids which |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
284 # can't be used with MAM), but it is still used in this case |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
285 # for navigation links. |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
286 request.mam_extra = {} |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
287 try: |
829
c1000ea40e6c
server (blog): fixed unicode handling for query args
Goffi <goffi@goffi.org>
parents:
828
diff
changeset
|
288 request.mam_extra['mam_filter_{}'.format(C.MAM_FILTER_CATEGORY)] = request.args['tag'][0].decode('utf-8') |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
289 except KeyError: |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
290 pass |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
291 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
292 ## Items retrieval |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
293 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
294 def getItemById(self, pub_jid, item_id, extra_dict, extra_comments_dict, request, profile): |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
295 """ |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
296 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
297 @param pub_jid (jid.JID): publisher JID |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
298 @param item_id(unicode): ID of the item to retrieve |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
299 @param extra_dict (dict): extra configuration for initial items only |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
300 @param extra_comments_dict (dict): extra configuration for comments only |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
301 @param request: HTTP request |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
302 @param profile |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
303 """ |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
304 |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
305 def gotItems(items): |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
306 items, metadata = items |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
307 item = items[0] # assume there's only one item |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
308 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
309 def gotMetadata(result): |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
310 dummy, rsm_metadata = result |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
311 try: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
312 metadata['rsm_count'] = rsm_metadata['rsm_count'] |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
313 except KeyError: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
314 pass |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
315 try: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
316 metadata['rsm_index'] = unicode(int(rsm_metadata['rsm_index'])-1) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
317 except KeyError: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
318 pass |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
319 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
320 metadata['rsm_first'] = metadata['rsm_last'] = item["id"] |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
321 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
322 def gotComments(comments): |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
323 # at this point we can merge mam dict |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
324 request.extra_dict.update(request.mam_extra) |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
325 # build the items as self.getItems would do it (and as self.renderHTML expects them to be) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
326 comments = [(item['comments_service'], item['comments_node'], "", comments[0], comments[1])] |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
327 self.renderHTML([(item, comments)], metadata, request, pub_jid, profile) |
10 | 328 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
329 # get the comments |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
330 # max_comments = int(extra_comments_dict['rsm_max']) # FIXME |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
331 max_comments = 0 |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
332 # TODO: use max_comments only when RSM is not available |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
333 self.host.bridge.mbGet(item['comments_service'], item['comments_node'], max_comments, [], |
826
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
334 extra_comments_dict, C.SERVICE_PROFILE, |
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
335 callback=gotComments, |
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
336 errback=lambda failure: self.renderError(failure, request, pub_jid)) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
337 |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
338 # XXX: retrieve RSM information related to the main item. We can't do it while |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
339 # retrieving the item, because item_ids and rsm should not be used together. |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
340 self.host.bridge.mbGet(pub_jid.userhost(), '', 0, [], |
826
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
341 {"rsm_max": "1", "rsm_after": item["id"]}, C.SERVICE_PROFILE, |
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
342 callback=gotMetadata, |
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
343 errback=lambda failure: self.renderError(failure, request, pub_jid)) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
344 |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
345 # get the main item |
826
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
346 self.host.bridge.mbGet(pub_jid.userhost(), '', 0, [item_id], |
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
347 extra_dict, C.SERVICE_PROFILE, |
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
348 callback=gotItems, |
70939916dc80
server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents:
825
diff
changeset
|
349 errback=lambda failure: self.renderError(failure, request, pub_jid)) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
350 |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
351 def getItems(self, pub_jid, max_items, extra_dict, extra_comments_dict, request, profile): |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
352 """ |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
353 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
354 @param pub_jid (jid.JID): publisher JID |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
355 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
356 @param extra_dict (dict): extra configuration for initial items only |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
357 @param extra_comments_dict (dict): extra configuration for comments only |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
358 @param request: HTTP request |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
359 @param profile |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
360 """ |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
361 def getResultCb(data, rt_session): |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
362 remaining, results = data |
824
d990ae5612df
server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
363 # we have requested one node only |
d990ae5612df
server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
364 assert remaining == 0 |
d990ae5612df
server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
365 assert len(results) == 1 |
d990ae5612df
server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
366 service, node, failure, items, metadata = results[0] |
d990ae5612df
server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
367 if failure: |
d990ae5612df
server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
368 self.renderError(failure, request, pub_jid) |
d990ae5612df
server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
369 else: |
d990ae5612df
server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents:
823
diff
changeset
|
370 self.renderHTML(items, metadata, request, pub_jid, profile) |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
371 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
372 def getResult(rt_session): |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
373 self.host.bridge.mbGetFromManyWithCommentsRTResult(rt_session, C.SERVICE_PROFILE, |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
374 callback=lambda data: getResultCb(data, rt_session), |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
375 errback=lambda failure: self.renderError(failure, request, pub_jid)) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
376 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
377 # max_comments = int(extra_comments_dict['rsm_max']) # FIXME |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
378 max_comments = 0 |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
379 # TODO: use max_comments only when RSM is not available |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
380 self.host.bridge.mbGetFromManyWithComments(C.JID, [pub_jid.userhost()], max_items, |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
381 max_comments, extra_dict, extra_comments_dict, |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
382 C.SERVICE_PROFILE, callback=getResult) |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
383 |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
384 def getAtom(self, pub_jid, max_items, extra_dict, extra_comments_dict, request, profile): |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
385 """ |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
386 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
387 @param pub_jid (jid.JID): publisher JID |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
388 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
389 @param extra_dict (dict): extra configuration for initial items only |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
390 @param extra_comments_dict (dict): extra configuration for comments only |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
391 @param request: HTTP request |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
392 @param profile |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
393 """ |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
394 def gotItems(data): |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
395 # Generate a clean atom feed with uri linking to this blog |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
396 # from microblog data |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
397 items, metadata= data |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
398 feed_elt = domish.Element((NS_ATOM, u'feed')) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
399 title = _(u"{user}'s blog").format(user=profile) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
400 feed_elt.addElement(u'title', content=title) |
881
6bdee34fa2f4
server: added base_url_ext option to handle different external URLs (e.g.: if there is a proxy)
Goffi <goffi@goffi.org>
parents:
880
diff
changeset
|
401 if self.host.base_url_ext is not None: |
6bdee34fa2f4
server: added base_url_ext option to handle different external URLs (e.g.: if there is a proxy)
Goffi <goffi@goffi.org>
parents:
880
diff
changeset
|
402 base_blog_url = u"{}blog/{user}".format(self.host.base_url_ext, user=profile) |
6bdee34fa2f4
server: added base_url_ext option to handle different external URLs (e.g.: if there is a proxy)
Goffi <goffi@goffi.org>
parents:
880
diff
changeset
|
403 else: |
6bdee34fa2f4
server: added base_url_ext option to handle different external URLs (e.g.: if there is a proxy)
Goffi <goffi@goffi.org>
parents:
880
diff
changeset
|
404 url_path = request.URLPath() |
6bdee34fa2f4
server: added base_url_ext option to handle different external URLs (e.g.: if there is a proxy)
Goffi <goffi@goffi.org>
parents:
880
diff
changeset
|
405 base_blog_url = u"{0.scheme}://{0.netloc}/blog/{user}".format(url_path, user=profile) |
879
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
406 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
407 # atom link |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
408 link_feed_elt = feed_elt.addElement('link') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
409 link_feed_elt['href'] = u'{base}/atom.xml'.format(base=base_blog_url) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
410 link_feed_elt['type'] = u'application/atom+xml' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
411 link_feed_elt['rel'] = u'self' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
412 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
413 # blog link |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
414 link_blog_elt = feed_elt.addElement('link') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
415 link_blog_elt['rel'] = u'alternate' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
416 link_blog_elt['type'] = u'text/html' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
417 link_blog_elt['href'] = base_blog_url |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
418 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
419 # blog link XMPP uri |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
420 blog_xmpp_uri = metadata['uri'] |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
421 link_blog_elt = feed_elt.addElement('link') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
422 link_blog_elt['rel'] = u'alternate' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
423 link_blog_elt['type'] = u'application/xmpp+xml' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
424 link_blog_elt['href'] = blog_xmpp_uri |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
425 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
426 feed_elt.addElement('id', content=urllib.quote(blog_xmpp_uri)) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
427 updated_unix = max([float(item['updated']) for item in items]) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
428 updated_dt = datetime.fromtimestamp(updated_unix) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
429 feed_elt.addElement(u'updated', u'{}Z'.format(updated_dt.isoformat("T"))) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
430 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
431 for item in items: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
432 entry_elt = feed_elt.addElement(u'entry') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
433 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
434 # Title |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
435 try: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
436 title = item['title'] |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
437 except KeyError: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
438 # for microblog (without title), we use an abstract of content as title |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
439 title = u'{}...'.format(u' '.join(item['content'][:70].split())) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
440 entry_elt.addElement(u'title', content=title) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
441 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
442 # HTTP link |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
443 http_link_elt = entry_elt.addElement(u'link') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
444 http_link_elt['rel'] = u'alternate' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
445 http_link_elt['type'] = u'text/html' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
446 http_link_elt['href'] = u'{base}/{quoted_id}'.format(base=base_blog_url, quoted_id=urllib.quote(item['id'])) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
447 # XMPP link |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
448 xmpp_link_elt = entry_elt.addElement(u'link') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
449 xmpp_link_elt['rel'] = u'alternate' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
450 xmpp_link_elt['type'] = u'application/xmpp+xml' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
451 xmpp_link_elt['href'] = u'{blog_uri};item={item_id}'.format(blog_uri=blog_xmpp_uri, item_id=item['id']) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
452 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
453 # date metadata |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
454 entry_elt.addElement(u'id', content=item['atom_id']) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
455 updated = datetime.fromtimestamp(float(item['updated'])) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
456 entry_elt.addElement(u'updated', u'{}Z'.format(updated.isoformat("T"))) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
457 published = datetime.fromtimestamp(float(item['published'])) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
458 entry_elt.addElement(u'published', u'{}Z'.format(published.isoformat("T"))) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
459 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
460 # author metadata |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
461 author_elt = entry_elt.addElement(u'author') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
462 author_elt.addElement('name', item.get('author', profile)) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
463 try: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
464 author_elt.addElement('uri', u'xmpp:{}'.format(item['author_jid'])) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
465 except KeyError: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
466 pass |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
467 try: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
468 author_elt.addElement('email', item['author_email']) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
469 except KeyError: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
470 pass |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
471 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
472 # content |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
473 try: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
474 content_xhtml = item['content_xhtml'] |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
475 except KeyError: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
476 content_elt = entry_elt.addElement('content', content='content') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
477 content_elt['type'] = 'text' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
478 else: |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
479 content_elt = entry_elt.addElement('content') |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
480 content_elt['type'] = 'xhtml' |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
481 content_elt.addChild(xml_tools.ElementParser()(content_xhtml, namespace=C.NS_XHTML)) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
482 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
483 atom_feed = u'<?xml version="1.0" encoding="utf-8"?>\n{}'.format(feed_elt.toXml()) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
484 self.renderAtomFeed(atom_feed, request), |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
485 |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
486 self.host.bridge.mbGet(pub_jid.userhost(), '', max_items, [], extra_dict, C.SERVICE_PROFILE, callback=gotItems) |
2e0e9cf9efb4
blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents:
855
diff
changeset
|
487 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
488 ## rendering |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
489 |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
490 def _updateDict(self, value, dict_, key): |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
491 dict_[key] = value |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
492 |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
493 def _getImageParams(self, options, key, default, alt): |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
494 """regexp from http://answers.oreilly.com/topic/280-how-to-validate-urls-with-regular-expressions/""" |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
495 url = options[key] if key in options else '' |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
496 regexp = r"^(https?|ftp)://[a-z0-9-]+(\.[a-z0-9-]+)+(/[\w-]+)*/[\w-]+\.(gif|png|jpg)$" |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
497 if re.match(regexp, url): |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
498 url = url |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
499 else: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
500 url = default |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
501 return BlogImage(url, alt) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
502 |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
503 def renderError(self, failure, request, pub_jid): |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
504 request.write(self.useTemplate(request, "static_blog_error", {'message': "Can't access requested data"})) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
505 request.finish() |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
506 |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
507 def renderHTML(self, items, metadata, request, pub_jid, 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
|
508 """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
|
509 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
510 @param items(list[tuple(dict, list)]): same as in self._renderHTML |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
511 @param metadata(dict): original node metadata |
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
|
512 @param request: HTTP request |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
513 @param pub_jid (JID): publisher JID |
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
514 @param profile (unicode): %(doc_profile)s |
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
|
515 """ |
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
|
516 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
|
517 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
|
518 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
519 d = self.getAvatarURL(pub_jid) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
520 d.addCallback(self._updateDict, options, 'avatar') |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
521 d.addErrback(self.renderError, request, pub_jid) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
522 d_list.append(d) |
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
|
523 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
524 for param_name in PARAMS_TO_GET: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
525 d = defer.Deferred() |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
526 self.host.bridge.asyncGetParamA(param_name, C.STATIC_BLOG_KEY, 'value', C.SERVER_SECURITY_LIMIT, profile, callback=d.callback, errback=d.errback) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
527 d.addCallback(self._updateDict, options, param_name) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
528 d.addErrback(self.renderError, request, pub_jid) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
529 d_list.append(d) |
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
|
530 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
531 dlist_d = defer.DeferredList(d_list) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
532 dlist_d.addCallback(lambda dummy: self._renderHTML(items, metadata, options, request, pub_jid)) |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
533 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
534 def _renderHTML(self, items, metadata, options, request, pub_jid): |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
535 """Actually render the static blog. |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
536 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
537 If mblog_data is a list of dict, we are missing the comments items so we just |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
538 display the main items. If mblog_data is a list of couple, each couple is |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
539 associating a main item data with the list of its comments, so we render all. |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
540 @param items(list[tuple(dict, list)]): list of 2-tuple with |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
541 - item(dict): item microblog data |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
542 - comments_list(list[tuple]): list of 5-tuple with |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
543 - service (unicode): pubsub service where the comments node is |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
544 - node (unicode): comments node |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
545 - failure (unicode): empty in case of success, else error message |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
546 - comments(list[dict]): list of microblog data |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
547 - comments_metadata(dict): metadata of the comment node |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
548 @param metadata(dict): original node metadata |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
549 @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
|
550 @param request: the HTTP request |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
551 @param pub_jid (JID): publisher JID |
388
893451e35686
server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents:
375
diff
changeset
|
552 """ |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
553 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
|
554 options = {} |
727
3bd097380da7
server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
555 user = sanitizeHtml(pub_jid.user) |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
556 base_url = os.path.join('/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
|
557 |
483
0bbbef1d53a8
server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents:
481
diff
changeset
|
558 def getOption(key): |
726
e949b7c7ed9c
server side (blog): fixes unicode error
souliane <souliane@mailoo.org>
parents:
725
diff
changeset
|
559 return sanitizeHtml(options[key]) 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
|
560 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
561 avatar = os.path.normpath('/{}'.format(getOption('avatar'))) |
702
d94feb0d849e
server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents:
694
diff
changeset
|
562 title = getOption(C.STATIC_BLOG_PARAM_TITLE) or user |
855
de17f7313cbe
server (blog): fixed atom feed link
Goffi <goffi@goffi.org>
parents:
854
diff
changeset
|
563 query_data = urllib.urlencode(getDefaultQueryData(request)).decode('utf-8') |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
564 |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
565 xmpp_uri = metadata['uri'] |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
566 if len(items) == 1: |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
567 # FIXME: that's really not a good way to get item id |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
568 # this must be changed after static blog refactorisation |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
569 item_id = items[0][0]['id'] |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
570 xmpp_uri+=u";item={}".format(urllib.quote(item_id)) |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
571 |
855
de17f7313cbe
server (blog): fixed atom feed link
Goffi <goffi@goffi.org>
parents:
854
diff
changeset
|
572 data = {'url_base': base_url, |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
573 'xmpp_uri': xmpp_uri, |
855
de17f7313cbe
server (blog): fixed atom feed link
Goffi <goffi@goffi.org>
parents:
854
diff
changeset
|
574 'url_query': u'?{}'.format(query_data) if query_data else '' , |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
575 'keywords': getOption(C.STATIC_BLOG_PARAM_KEYWORDS), |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
576 '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
|
577 'title': title, |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
578 'favicon': avatar, |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
579 'banner_img': self._getImageParams(options, 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
|
580 } |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
581 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
582 data['navlinks'] = NavigationLinks(request, items, metadata, base_url) |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
583 data['messages'] = [] |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
584 for item in items: |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
585 item, comments_list = item |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
586 comments, comments_count = [], 0 |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
587 for node_comments in comments_list: |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
588 comments.extend(node_comments[3]) |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
589 try: |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
590 comments_count += int(node_comments[4]['rsm_count']) |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
591 except KeyError: |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
592 pass |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
593 data['messages'].append(BlogMessage(request, base_url, item, comments, comments_count)) |
586
3eb3a2c0c011
browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
487
diff
changeset
|
594 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
595 request.write(self.useTemplate(request, 'static_blog', data)) |
10 | 596 request.finish() |
243
63e9b680d3e7
browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
597 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
598 def renderAtomFeed(self, feed, request): |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
599 request.write(feed.encode('utf-8')) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
600 request.finish() |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
601 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
602 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
603 class NavigationLinks(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
604 |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
605 def __init__(self, request, items, metadata, base_url): |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
606 """Build the navigation links. |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
607 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
608 @param items (list): list of items |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
609 @param metadata (dict): rsm data |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
610 @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
|
611 @return: dict |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
612 """ |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
613 # FIXME: this code must be refactorized, it is fragile |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
614 # and difficult to maintain |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
615 |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
616 # query data which must be present in all links |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
617 default_query_data = getDefaultQueryData(request) |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
618 |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
619 # which links we need to display |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
620 if request.display_single: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
621 links = ('later_message', 'older_message') |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
622 # key must exist when using the template |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
623 self.later_messages = self.older_messages = '' |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
624 else: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
625 links = ('later_messages', 'older_messages') |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
626 self.later_message = self.older_message = '' |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
627 |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
628 # now we set the links according to RSM |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
629 for key in links: |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
630 query_data = default_query_data.copy() |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
631 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
632 if key.startswith('later_message'): |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
633 try: |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
634 index = int(metadata['rsm_index']) |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
635 except (KeyError, ValueError): |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
636 pass |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
637 else: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
638 if index == 0: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
639 # we don't show this link on first page |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
640 setattr(self, key, '') |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
641 continue |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
642 try: |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
643 query_data['before'] = metadata['rsm_first'].encode('utf-8') |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
644 except KeyError: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
645 pass |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
646 else: |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
647 try: |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
648 index = int(metadata['rsm_index']) |
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
649 count = int(metadata.get('rsm_count')) |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
650 except (KeyError, ValueError): |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
651 # XXX: if we don't have index or count, we can't know if we |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
652 # are on the last page or not |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
653 pass |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
654 else: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
655 # if we have index, we don't show the after link |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
656 # on the last page |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
657 if index + len(items) >= count: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
658 setattr(self, key, '') |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
659 continue |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
660 try: |
880
ccbad50e1426
blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents:
879
diff
changeset
|
661 query_data['after'] = metadata['rsm_last'].encode('utf-8') |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
662 except KeyError: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
663 pass |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
664 |
708
e9a6cbb924e6
server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents:
705
diff
changeset
|
665 if request.display_single: |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
666 query_data['max'] = 1 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
667 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
668 link = "{}?{}".format(base_url, urllib.urlencode(query_data)) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
669 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
|
670 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
671 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
672 class BlogImage(object): |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
673 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
674 def __init__(self, url_, alt): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
675 self.url = url_ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
676 self.alt = alt |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
677 |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
678 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
679 class BlogLink(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
680 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
681 def __init__(self, url_, style, text): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
682 self.url = url_ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
683 self.style = style |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
684 self.text = text |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
685 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
686 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
687 class BlogMessage(object): |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
688 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
689 def __init__(self, request, base_url, entry, comments=None, comments_count=0): |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
690 """ |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
691 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
692 @param request: HTTP request |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
693 @param base_url (unicode): the base URL |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
694 @param entry(dict): item microblog data |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
695 @param comments(list[dict]): list of microblog data |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
696 @param comments_count (int): total number of comments |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
697 """ |
854 | 698 if comments is None: |
699 comments = [] | |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
700 timestamp = float(entry.get('published', 0)) |
746
25984ca4aef2
server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents:
743
diff
changeset
|
701 |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
702 # FIXME: for now we assume that the comments' depth is only 1 |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
703 is_comment = not entry.get('comments', False) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
704 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
705 self.date = datetime.fromtimestamp(timestamp) |
725
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
706 self.type = "comment" if is_comment else "main_item" |
c1abaa91a121
server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
707 self.style = 'mblog_comment' if is_comment else '' |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
708 self.content = self.getText(entry, 'content') |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
709 |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
710 if is_comment: |
854 | 711 self.author = (_(u"from {}").format(entry['author'])) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
712 else: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
713 self.author = ' ' |
827
f1fc7245b910
server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents:
826
diff
changeset
|
714 self.url = "{}/{}".format(base_url, _quote(entry['id'])) |
828
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
715 query_data = getDefaultQueryData(request) |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
716 if query_data: |
0c824ebe9d87
server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents:
827
diff
changeset
|
717 self.url += '?{}'.format(urllib.urlencode(query_data)) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
718 self.title = self.getText(entry, 'title') |
831
25931797db20
server (blog/themes): sanitize tags + display tags URLs
souliane <souliane@mailoo.org>
parents:
830
diff
changeset
|
719 self.tags = [sanitizeHtml(tag) for tag in common.dict2iter('tag', entry)] |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
720 |
854 | 721 count_text = lambda count: D_(u'comments') if count > 1 else D_(u'comment') |
704
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
722 |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
723 self.comments_text = u"{} {}".format(comments_count, count_text(comments_count)) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
724 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
725 delta = comments_count - len(comments) |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
726 if request.display_single and delta > 0: |
830
a825700c01e4
server (blog): fixes typo in a dict declaration
souliane <souliane@mailoo.org>
parents:
829
diff
changeset
|
727 prev_url = "{}?{}".format(self.url, urllib.urlencode({'comments_max': comments_count})) |
854 | 728 prev_text = D_(u"show {count} previous {comments}").format( |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
729 count = delta, comments = count_text(delta)) |
712
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
730 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
|
731 |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
732 if comments: |
bf562fb9c273
server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents:
708
diff
changeset
|
733 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
|
734 |
5319110a862c
server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents:
702
diff
changeset
|
735 def getText(self, entry, key): |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
736 try: |
854 | 737 xhtml = entry['{}_xhtml'.format(key)] |
823
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
738 except KeyError: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
739 try: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
740 processor = addURLToText if key.startswith('content') else sanitizeHtml |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
741 return convertNewLinesToXHTML(processor(entry[key])) |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
742 except KeyError: |
027139763511
server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
743 return None |
854 | 744 else: |
745 # FIXME: empty <div /> elements provoke rendering issue | |
746 # this regex is a temporary workadound, need more investigation | |
747 xhtml = re_strip_empty_div.sub("", xhtml) | |
748 return fixXHTMLLinks(xhtml) |