Mercurial > libervia-web
annotate libervia/pages/forums/topics/page_meta.py @ 1245:079e8eb6e327
server (tasks): refactoring:
- moved `TasksManager` to `server.tasks.manager`
- tasks modules now must have a `Task` class which will be instanciated by TasksManager
- `server.tasks.task` has a basis for `Task` class
- `Task.prepare` can now be asynchronous
- `importlib` is now used to import tasks, instead of exec
- tasks are now parsed/run after pages are imported
- `server.BackendReady` is now a coroutine
- type hinting for Task attributes
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 25 Apr 2020 16:08:55 +0200 |
parents | 8aff742d0dd0 |
children | 6b7f9c3558cc |
rev | line source |
---|---|
1216 | 1 #!/usr/bin/env python3 |
1239 | 2 |
1058 | 3 |
4 from libervia.server.constants import Const as C | |
5 from twisted.internet import defer | |
6 from sat.core.i18n import _ | |
7 from sat.core.log import getLogger | |
8 from sat.tools.common import uri as xmpp_uri | |
1243
8aff742d0dd0
pages: updated `identityGet` call, following backend changes
Goffi <goffi@goffi.org>
parents:
1239
diff
changeset
|
9 from sat.tools.common import data_format |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
10 |
1145
29eb15062416
pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
11 log = getLogger(__name__) |
1058 | 12 |
1216 | 13 name = "forum_topics" |
1058 | 14 access = C.PAGES_ACCESS_PUBLIC |
1216 | 15 template = "forum/view_topics.html" |
1058 | 16 |
17 | |
18 def parse_url(self, request): | |
1216 | 19 self.getPathArgs(request, ["service", "node"], 2, service="jid") |
1058 | 20 |
21 | |
22 @defer.inlineCallbacks | |
23 def prepare_render(self, request): | |
24 profile = self.getProfile(request) or C.SERVICE_PROFILE | |
25 data = self.getRData(request) | |
1216 | 26 service, node = data["service"], data["node"] |
27 request.template_data.update({"service": service, "node": node}) | |
1058 | 28 template_data = request.template_data |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
29 topics, metadata = yield self.host.bridgeCall( |
1216 | 30 "forumTopicsGet", service.full(), node, {}, profile |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
31 ) |
1216 | 32 template_data["identities"] = identities = {} |
1058 | 33 for topic in topics: |
1216 | 34 parsed_uri = xmpp_uri.parseXMPPUri(topic["uri"]) |
35 author = topic["author"] | |
36 topic["http_uri"] = self.getPageByName("forum_view").getURL( | |
37 parsed_uri["path"], parsed_uri["node"] | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
38 ) |
1058 | 39 if author not in identities: |
1243
8aff742d0dd0
pages: updated `identityGet` call, following backend changes
Goffi <goffi@goffi.org>
parents:
1239
diff
changeset
|
40 id_raw = yield self.host.bridgeCall( |
8aff742d0dd0
pages: updated `identityGet` call, following backend changes
Goffi <goffi@goffi.org>
parents:
1239
diff
changeset
|
41 "identityGet", author, [], True, profile |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
42 ) |
1243
8aff742d0dd0
pages: updated `identityGet` call, following backend changes
Goffi <goffi@goffi.org>
parents:
1239
diff
changeset
|
43 identities[topic["author"]] = data_format.deserialise(id_raw) |
8aff742d0dd0
pages: updated `identityGet` call, following backend changes
Goffi <goffi@goffi.org>
parents:
1239
diff
changeset
|
44 |
1216 | 45 template_data["topics"] = topics |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
46 |
1058 | 47 |
48 @defer.inlineCallbacks | |
49 def on_data_post(self, request): | |
50 profile = self.getProfile(request) | |
51 if profile is None: | |
1173
0f37b65fe7c2
server: replaced wrong usage of C.HTTP_UNAUTHORIZED by C.HTTP_FORBIDDEN
Goffi <goffi@goffi.org>
parents:
1145
diff
changeset
|
52 self.pageError(request, C.HTTP_FORBIDDEN) |
1216 | 53 type_ = self.getPostedData(request, "type") |
54 if type_ == "new_topic": | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
55 service, node, title, body = self.getPostedData( |
1216 | 56 request, ("service", "node", "title", "body") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
57 ) |
1058 | 58 |
59 if not title or not body: | |
60 self.pageError(request, C.HTTP_BAD_REQUEST) | |
1216 | 61 topic_data = {"title": title, "content": body} |
1058 | 62 try: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
63 yield self.host.bridgeCall( |
1216 | 64 "forumTopicCreate", service, node, topic_data, profile |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
65 ) |
1058 | 66 except Exception as e: |
1216 | 67 if "forbidden" in str(e): |
1058 | 68 self.pageError(request, 401) |
69 else: | |
70 raise e | |
71 else: | |
1216 | 72 log.warning(_("Unhandled data type: {}").format(type_)) |