annotate libervia/pages/blog/view/page_meta.py @ 1513:ff95501abe74

server (websocket): don't crash when a force-close is failing
author Goffi <goffi@goffi.org>
date Mon, 22 May 2023 11:57:49 +0200
parents 106bae41f5c8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
1 #!/usr/bin/env python3
1239
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1229
diff changeset
2
1229
acec8e9185db pages: replaced deprecated `cgi.escape` by `html.escape`
Goffi <goffi@goffi.org>
parents: 1219
diff changeset
3 import html
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
4 from typing import Any, Dict, Optional
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
5
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
6 from sat.core.i18n import D_, _
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
7 from sat.core.log import getLogger
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 from sat.tools.common import uri
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
9 from sat.tools.common import data_format
1406
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
10 from sat.tools.common import regex
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
11 from sat.tools.common.template import safe
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
12 from twisted.web import server
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
13 from twisted.words.protocols.jabber import jid
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
14
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 from libervia.server import utils
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
16 from libervia.server.constants import Const as C
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
17 from libervia.server.utils import SubPage
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
18
1145
29eb15062416 pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents: 1141
diff changeset
19 log = getLogger(__name__)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
20
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 """generic blog (with service/node provided)"""
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
22 name = 'blog_view'
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
23 template = "blog/articles.html"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
24 uri_handlers = {('pubsub', 'microblog'): 'microblog_uri'}
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
25
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 URL_LIMIT_MARK = 90 # if canonical URL is longer than that, text will not be appended
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
27
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
28
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
29 def microblog_uri(self, uri_data):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
30 args = [uri_data['path'], uri_data['node']]
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
31 if 'item' in uri_data:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
32 args.extend(['id', uri_data['item']])
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
33 return self.get_url(*args)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
34
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 def parse_url(self, request):
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 """URL is /[service]/[node]/[filter_keyword]/[item]|[other]
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
37
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 if [node] is '@', default namespace is used
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 if a value is unset, default one will be used
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 keyword can be one of:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 id: next value is a item id
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 tag: next value is a blog tag
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 """
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
44 data = self.get_r_data(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
45
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
47 service = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
48 except IndexError:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
49 data['service'] = ''
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
50 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 try:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
52 data["service"] = jid.JID(service)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 except Exception:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
54 log.warning(_("bad service entered: {}").format(service))
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
55 self.page_error(request, C.HTTP_BAD_REQUEST)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
56
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
58 node = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 except IndexError:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
60 node = '@'
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
61 data['node'] = '' if node == '@' else node
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
62
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
64 filter_kw = data['filter_keyword'] = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 except IndexError:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
66 filter_kw = '@'
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
67 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
68 if filter_kw == '@':
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
69 # No filter, this is used when a subpage is needed, notably Atom feed
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
70 pass
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
71 elif filter_kw == 'id':
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
72 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
73 data['item'] = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 except IndexError:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
75 self.page_error(request, C.HTTP_BAD_REQUEST)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 # we get one more argument in case text has been added to have a nice URL
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
78 self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 except IndexError:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
80 pass
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
81 elif filter_kw == 'tag':
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
83 data['tag'] = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 except IndexError:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
85 self.page_error(request, C.HTTP_BAD_REQUEST)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 # invalid filter keyword
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
88 log.warning(_("invalid filter keyword: {filter_kw}").format(
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
89 filter_kw=filter_kw))
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
90 self.page_error(request, C.HTTP_BAD_REQUEST)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
91
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
92 # if URL is parsed here, we'll have atom.xml available and we need to
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
93 # add the link to the page
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
94 atom_url = self.get_url_by_path(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
95 SubPage('blog_view'),
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
96 service,
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
97 node,
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
98 filter_kw,
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
99 SubPage('blog_feed_atom'),
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
100 )
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
101 request.template_data['atom_url'] = atom_url
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
102 request.template_data.setdefault('links', []).append({
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
103 "href": atom_url,
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
104 "type": "application/atom+xml",
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
105 "rel": "alternate",
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
106 "title": "{service}'s blog".format(service=service)})
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
107
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
108
1419
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
109 def add_breadcrumb(self, request, breadcrumbs):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
110 data = self.get_r_data(request)
1419
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
111 breadcrumbs.append({
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
112 "label": D_("Feed"),
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
113 "url": self.get_url(data["service"].full(), data.get("node", "@"))
1419
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
114 })
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
115 if "item" in data:
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
116 breadcrumbs.append({
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
117 "label": D_("Post"),
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
118 })
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
119
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
120
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
121 async def append_comments(
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
122 self,
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
123 request: server.Request,
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
124 blog_items: dict,
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
125 profile: str,
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
126 _seen: Optional[set] = None
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
127 ) -> None:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
128 """Recursively download and append comments of items
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
129
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
130 @param blog_items: items data
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
131 @param profile: Libervia profile
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
132 @param _seen: used to avoid infinite recursion. For internal use only
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
133 """
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
134 if _seen is None:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
135 _seen = set()
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
136 await self.fill_missing_identities(
1322
a0954b6610aa pages: identities are not using `data_objects` anymore:
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
137 request, [i['author_jid'] for i in blog_items['items']])
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
138 extra: Dict[str, Any] = {C.KEY_ORDER_BY: C.ORDER_BY_CREATION}
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
139 if not self.use_cache(request):
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
140 extra[C.KEY_USE_CACHE] = False
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
141 for blog_item in blog_items['items']:
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
142 for comment_data in blog_item['comments']:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
143 service = comment_data['service']
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
144 node = comment_data['node']
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
145 service_node = (service, node)
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
146 if service_node in _seen:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
147 log.warning(
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
148 f"Items from {node!r} at {service} have already been retrieved, "
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
149 "there is a recursion at this service"
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
150 )
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
151 comment_data["items"] = []
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
152 continue
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
153 else:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
154 _seen.add(service_node)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
155 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
156 comments_data = await self.host.bridge_call('mb_get',
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 service,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 node,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 C.NO_LIMIT,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
160 [],
1447
907f519faaf0 pages: pubsub's `extra` is now serialised, following backend change
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
161 data_format.serialise(
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
162 extra
1447
907f519faaf0 pages: pubsub's `extra` is now serialised, following backend change
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
163 ),
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 profile)
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 except Exception as e:
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
166 log.warning(
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
167 _("Can't get comments at {node} (service: {service}): {msg}").format(
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
168 service=service,
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
169 node=node,
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
170 msg=e))
1403
1357d04107d1 pages (blog/view): set empty comments when comments node is missing
Goffi <goffi@goffi.org>
parents: 1376
diff changeset
171 comment_data['items'] = []
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
172 continue
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
173
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
174 comments = data_format.deserialise(comments_data)
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
175 if comments is None:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
176 log.error(f"Comments should not be None: {comment_data}")
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
177 comment_data["items"] = []
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
178 continue
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
179 comment_data['items'] = comments['items']
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
180 await append_comments(self, request, comments, profile, _seen=_seen)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
181
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
182 async def get_blog_items(
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
183 self,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
184 request: server.Request,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
185 service: jid.JID,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
186 node: str,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
187 item_id,
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
188 extra: Dict[str, Any],
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
189 profile: str
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
190 ) -> dict:
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
191 try:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
192 if item_id:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
193 items_id = [item_id]
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
194 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
195 items_id = []
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
196 if not self.use_cache(request):
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
197 extra[C.KEY_USE_CACHE] = False
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
198 blog_data = await self.host.bridge_call('mb_get',
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
199 service.userhost(),
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
200 node,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
201 C.NO_LIMIT,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
202 items_id,
1447
907f519faaf0 pages: pubsub's `extra` is now serialised, following backend change
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
203 data_format.serialise(extra),
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
204 profile)
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
205 except Exception as e:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
206 # FIXME: need a better way to test errors in bridge errback
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
207 if "forbidden" in str(e):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
208 self.page_error(request, 401)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
209 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
210 log.warning(_("can't retrieve blog for [{service}]: {msg}".format(
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
211 service = service.userhost(), msg=e)))
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
212 blog_data = {"items": []}
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
213 else:
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
214 blog_data = data_format.deserialise(blog_data)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
215
1322
a0954b6610aa pages: identities are not using `data_objects` anymore:
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
216 return blog_data
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
217
1322
a0954b6610aa pages: identities are not using `data_objects` anymore:
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
218 async def prepare_render(self, request):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
219 data = self.get_r_data(request)
1376
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
220 template_data = request.template_data
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
221 page_max = data.get("page_max", 10)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
222 # if the comments are not explicitly hidden, we show them
1376
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
223 service, node, item_id, show_comments = (
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
224 data.get('service', ''),
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
225 data.get('node', ''),
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
226 data.get('item'),
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
227 data.get('show_comments', True)
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
228 )
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
229 profile = self.get_profile(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
230 if profile is None:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
231 profile = C.SERVICE_PROFILE
1133
122dd136d1ab pages (blog/view): allow commenting when profile is connected
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
232 profile_connected = False
122dd136d1ab pages (blog/view): allow commenting when profile is connected
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
233 else:
122dd136d1ab pages (blog/view): allow commenting when profile is connected
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
234 profile_connected = True
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
235
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
236 ## pagination/filtering parameters
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
237 if item_id:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
238 extra = {}
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
239 else:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
240 extra = self.get_pubsub_extra(request, page_max=page_max)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
241 tag = data.get('tag')
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
242 if tag:
1376
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
243 extra[f'mam_filter_{C.MAM_FILTER_CATEGORY}'] = tag
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
244 self.handle_search(request, extra)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
245
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
246 ## main data ##
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
247 # we get data from backend/XMPP here
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
248 blog_items = await get_blog_items(self, request, service, node, item_id, extra, profile)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
249
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 ## navigation ##
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
251 # no let's fill service, node and pagination URLs
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
252 if 'service' not in template_data:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
253 template_data['service'] = service
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
254 if 'node' not in template_data:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
255 template_data['node'] = node
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
256 target_profile = template_data.get('target_profile')
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
257
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
258 if blog_items:
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
259 if item_id:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
260 template_data["previous_page_url"] = self.get_url(
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
261 service.full(),
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
262 node,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
263 before=item_id,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
264 page_max=1
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
265 )
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
266 template_data["next_page_url"] = self.get_url(
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
267 service.full(),
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
268 node,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
269 after=item_id,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
270 page_max=1
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
271 )
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
272 blog_items["rsm"] = {
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
273 "last": item_id,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
274 "first": item_id,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
275 }
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
276 blog_items["complete"] = False
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
277 else:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
278 self.set_pagination(request, blog_items)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
279 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
280 if item_id:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
281 # if item id has been specified in URL and it's not found,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
282 # we must return an error
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
283 self.page_error(request, C.HTTP_NOT_FOUND)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
284
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
285 ## identities ##
1133
122dd136d1ab pages (blog/view): allow commenting when profile is connected
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
286 # identities are used to show nice nickname or avatars
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
287 await self.fill_missing_identities(request, [i['author_jid'] for i in blog_items['items']])
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
288
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
289 ## Comments ##
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
290 # if comments are requested, we need to take them
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
291 if show_comments:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
292 await append_comments(self, request, blog_items, profile)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
293
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
294 ## URLs ##
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
295 # We will fill items_http_uri and tags_http_uri in template_data with suitable urls
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
296 # if we know the profile, we use it instead of service + blog (nicer url)
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
297 if target_profile is None:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
298 blog_base_url_item = self.get_page_by_name('blog_view').get_url(service.full(), node or '@', 'id')
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
299 blog_base_url_tag = self.get_page_by_name('blog_view').get_url(service.full(), node or '@', 'tag')
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
300 else:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
301 blog_base_url_item = self.get_url_by_names([('user', [target_profile]), ('user_blog', ['id'])])
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
302 blog_base_url_tag = self.get_url_by_names([('user', [target_profile]), ('user_blog', ['tag'])])
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
303 # we also set the background image if specified by user
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
304 bg_img = await self.host.bridge_call('param_get_a_async', 'Background', 'Blog page', 'value', -1, template_data['target_profile'])
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
305 if bg_img:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
306 template_data['dynamic_style'] = safe("""
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
307 :root {
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
308 --bg-img: url("%s");
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
309 }
1229
acec8e9185db pages: replaced deprecated `cgi.escape` by `html.escape`
Goffi <goffi@goffi.org>
parents: 1219
diff changeset
310 """ % html.escape(bg_img, True))
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
311
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
312 template_data['blog_items'] = data['blog_items'] = blog_items
1219
0f0c36992f3c pages (blog/view, forums/view): fixed encoding of request.args following Python3 port
Goffi <goffi@goffi.org>
parents: 1216
diff changeset
313 if request.args.get(b'reverse') == ['1']:
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
314 template_data['blog_items'].items.reverse()
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
315 template_data['items_http_uri'] = items_http_uri = {}
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
316 template_data['tags_http_uri'] = tags_http_uri = {}
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
317
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
318
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
319 for item in blog_items['items']:
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
320 blog_canonical_url = '/'.join([blog_base_url_item, utils.quote(item['id'])])
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
321 if len(blog_canonical_url) > URL_LIMIT_MARK:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
322 blog_url = blog_canonical_url
1406
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
323 elif '-' not in item['id']:
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
324 # we add text from title or body at the end of URL
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
325 # to make it more human readable
1406
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
326 # we do it only if there is no "-", as a "-" probably means that
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
327 # item's id is already user friendly.
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
328 # TODO: to be removed, this is only kept for a transition period until
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
329 # user friendly item IDs are more common.
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
330 text = regex.url_friendly_text(item.get('title', item['content']))
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
331 if text:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
332 blog_url = blog_canonical_url + '/' + text
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
333 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
334 blog_url = blog_canonical_url
1406
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
335 else:
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
336 blog_url = blog_canonical_url
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
337
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
338 items_http_uri[item['id']] = self.host.get_ext_base_url(request, blog_url)
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
339 for tag in item['tags']:
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
340 if tag not in tags_http_uri:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
341 tag_url = '/'.join([blog_base_url_tag, utils.quote(tag)])
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
342 tags_http_uri[tag] = self.host.get_ext_base_url(request, tag_url)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
343
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
344 # if True, page should display a comment box
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
345 template_data['allow_commenting'] = data.get('allow_commenting', profile_connected)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
346
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
347 # last but not least, we add a xmpp: link to the node
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
348 uri_args = {'path': service.full()}
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
349 if node:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
350 uri_args['node'] = node
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
351 if item_id:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
352 uri_args['item'] = item_id
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
353 template_data['xmpp_uri'] = uri.build_xmpp_uri(
1478
10ccad665d57 pages (blog/view): use rich content for comments
Goffi <goffi@goffi.org>
parents: 1466
diff changeset
354 'pubsub', subtype='microblog', **uri_args
10ccad665d57 pages (blog/view): use rich content for comments
Goffi <goffi@goffi.org>
parents: 1466
diff changeset
355 )
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
356
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
357
1322
a0954b6610aa pages: identities are not using `data_objects` anymore:
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
358 async def on_data_post(self, request):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
359 profile = self.get_profile(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
360 if profile is None:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
361 self.page_error(request, C.HTTP_FORBIDDEN)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
362 type_ = self.get_posted_data(request, 'type')
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
363 if type_ == 'comment':
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
364 service, node, body = self.get_posted_data(request, ('service', 'node', 'body'))
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
365
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
366 if not body:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
367 self.page_error(request, C.HTTP_BAD_REQUEST)
1478
10ccad665d57 pages (blog/view): use rich content for comments
Goffi <goffi@goffi.org>
parents: 1466
diff changeset
368 comment_data = {"content_rich": body}
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
369 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
370 await self.host.bridge_call('mb_send',
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
371 service,
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
372 node,
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
373 data_format.serialise(comment_data),
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
374 profile)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
375 except Exception as e:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
376 if "forbidden" in str(e):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
377 self.page_error(request, 401)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
378 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
379 raise e
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
380 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
381 log.warning(_("Unhandled data type: {}").format(type_))