annotate libervia/pages/g/page_meta.py @ 1146:76d75423ef53

server: tasks manager first draft: A new task manager will check /tasks directory of website to scripts to execute before launching the site. This allows to generate docs, scripts, or do anything else useful. Generated files are put in in sat local dir, in cache, and are accessible from the website using the new "build_dir" variable.
author Goffi <goffi@goffi.org>
date Fri, 25 Jan 2019 08:58:41 +0100
parents 29eb15062416
children 0f37b65fe7c2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python2.7
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
3
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
4 from libervia.server.constants import Const as C
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
5 from sat.core.i18n import _
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
6 from twisted.internet import defer
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
7 from libervia.server import session_iface
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
8 from sat.core.log import getLogger
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
9
1145
29eb15062416 pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
10 log = getLogger(__name__)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
11
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
12 access = C.PAGES_ACCESS_PUBLIC
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
13 template = u"invitation/welcome.html"
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
14
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
15
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
16 @defer.inlineCallbacks
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
17 def parse_url(self, request):
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
18 """check invitation id in URL and start session if needed
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
19
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
20 if a session already exists for an other guest/profile, it will be purged
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
21 """
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
22 try:
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
23 invitation_id = self.nextPath(request)
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
24 except IndexError:
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
25 self.pageError(request)
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
26
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
27 sat_session, guest_session = self.host.getSessionData(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
28 request, session_iface.ISATSession, session_iface.ISATGuestSession
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
29 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
30 current_id = guest_session.id
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
31
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
32 if current_id is not None and current_id != invitation_id:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
33 log.info(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
34 _(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
35 u"killing guest session [{old_id}] because it is connecting with an other ID [{new_id}]"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
36 ).format(old_id=current_id, new_id=invitation_id)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
37 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
38 self.host.purgeSession(request)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
39 sat_session, guest_session = self.host.getSessionData(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
40 request, session_iface.ISATSession, session_iface.ISATGuestSession
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
41 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
42 current_id = None # FIXME: id non mis à zéro ici
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
43 profile = None
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
44
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
45 profile = sat_session.profile
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
46 if profile is not None and current_id is None:
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
47 log.info(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
48 _(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
49 u"killing current profile session [{profile}] because a guest id is used"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
50 ).format(profile=profile)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
51 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
52 self.host.purgeSession(request)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
53 sat_session, guest_session = self.host.getSessionData(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
54 request, session_iface.ISATSession, session_iface.ISATGuestSession
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
55 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
56 profile = None
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
57
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
58 if current_id is None:
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
59 log.debug(_(u"checking invitation [{id}]").format(id=invitation_id))
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
60 try:
1098
01e95ec9df9e server, pages: fixed blocking calls to bridge by using bridgeCall instead
Goffi <goffi@goffi.org>
parents: 953
diff changeset
61 data = yield self.host.bridgeCall("invitationGet", invitation_id)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
62 except Exception:
938
9be057e23ce6 pages (g): use new constants
Goffi <goffi@goffi.org>
parents: 930
diff changeset
63 self.pageError(request, C.HTTP_UNAUTHORIZED)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
64 else:
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
65 guest_session.id = invitation_id
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
66 guest_session.data = data
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
67 else:
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
68 data = guest_session.data
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
69
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
70 if profile is None:
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
71 log.debug(_(u"connecting profile [{}]").format(profile))
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
72 # we need to connect the profile
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
73 profile = data["guest_profile"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
74 password = data["password"]
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
75 try:
1100
5976dcd42591 pages (g): use server's connect method to connect instead of bridge, this way normal Libervia workflow is used, and session attributes are initialised.
Goffi <goffi@goffi.org>
parents: 1098
diff changeset
76 yield self.host.connect(request, profile, password)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
77 except Exception as e:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
78 log.warning(_(u"Can't connect profile: {msg}").format(msg=e))
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
79 # FIXME: no good error code correspond
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
80 # maybe use a custom one?
938
9be057e23ce6 pages (g): use new constants
Goffi <goffi@goffi.org>
parents: 930
diff changeset
81 self.pageError(request, code=C.HTTP_SERVICE_UNAVAILABLE)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
82
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
83 log.info(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
84 _(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
85 u"guest session started, connected with profile [{profile}]".format(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
86 profile=profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
87 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
88 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
89 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
90
941
aba7208d9d50 pages (g): guest name is added to template data
Goffi <goffi@goffi.org>
parents: 938
diff changeset
91 # we copy data useful in templates
aba7208d9d50 pages (g): guest name is added to template data
Goffi <goffi@goffi.org>
parents: 938
diff changeset
92 template_data = request.template_data
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
93 template_data["norobots"] = True
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
94 if u"name" in data:
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
95 template_data[u"name"] = data[u"name"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
96 if u"language" in data:
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
97 template_data[u"locale"] = data[u"language"]
941
aba7208d9d50 pages (g): guest name is added to template data
Goffi <goffi@goffi.org>
parents: 938
diff changeset
98
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
99
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
100 def prepare_render(self, request):
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
101 template_data = request.template_data
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
102 guest_session = self.host.getSessionData(request, session_iface.ISATGuestSession)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
103 main_uri = guest_session.data.get("main_uri")
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
104 template_data[u"include_url"] = self.getPagePathFromURI(main_uri)