annotate libervia/server/session_iface.py @ 1216:b2d067339de3

python 3 port: /!\ Python 3.6+ is now needed to use libervia /!\ instability may occur and features may not be working anymore, this will improve with time /!\ TxJSONRPC dependency has been removed The same procedure as in backend has been applied (check backend commit ab2696e34d29 logs for details). Removed now deprecated code (Pyjamas compiled browser part, legacy blog, JSON RPC related code). Adapted code to work without `html` and `themes` dirs.
author Goffi <goffi@goffi.org>
date Tue, 13 Aug 2019 19:12:31 +0200
parents 352865f4a268
children 987595a254b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
3
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Libervia: a SAT frontend
1144
2af117bfe6cc dates update
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org)
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
6
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
11
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
16
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
19 from zope.interface import Interface, Attribute
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
20 from zope.interface import implementer
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 919
diff changeset
21 from sat.tools.common import data_objects
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 964
diff changeset
22 from libervia.server.constants import Const as C
1186
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
23 from libervia.server.classes import Notification
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
24 from collections import OrderedDict
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 964
diff changeset
25 import os.path
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
26 import shortuuid
1090
9c41b7e91172 server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents: 1055
diff changeset
27 import time
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
28
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1101
diff changeset
29 FLAGS_KEY = "_flags"
1186
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
30 NOTIFICATIONS_KEY = "_notifications"
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
31 MAX_CACHE_AFFILIATIONS = 100 # number of nodes to keep in cache
960
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
32
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1101
diff changeset
33
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
34 class ISATSession(Interface):
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
35 profile = Attribute("Sat profile")
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
36 jid = Attribute("JID associated with the profile")
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
37 uuid = Attribute("uuid associated with the profile session")
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 919
diff changeset
38 identities = Attribute("Identities of XMPP entities")
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
39
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
40
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
41 @implementer(ISATSession)
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
42 class SATSession(object):
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
43
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
44 def __init__(self, session):
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
45 self.profile = None
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
46 self.jid = None
1090
9c41b7e91172 server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents: 1055
diff changeset
47 self.started = time.time()
9c41b7e91172 server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents: 1055
diff changeset
48 # time when the backend session was started
9c41b7e91172 server: set jid and started time in session on log-in:
Goffi <goffi@goffi.org>
parents: 1055
diff changeset
49 self.backend_started = None
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
50 self.uuid = str(shortuuid.uuid())
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 919
diff changeset
51 self.identities = data_objects.Identities()
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
52 self.csrf_token = str(shortuuid.uuid())
1165
6424d3684d1e pages: locale handling:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
53 self.locale = None # i18n of the pages
960
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
54 self.pages_data = {} # used to keep data accross reloads (key is page instance)
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
55 self.affiliations = OrderedDict() # cache for node affiliations
960
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
56
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 964
diff changeset
57 @property
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 964
diff changeset
58 def cache_dir(self):
1055
c2037b44f84e server: fixed cache_dir for service profile in session interface
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
59 if self.profile is None:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
60 return self.service_cache_url + "/"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
61 return os.path.join("/", C.CACHE_DIR, self.uuid) + "/"
995
f88325b56a6a server: dynamic pages first draft:
Goffi <goffi@goffi.org>
parents: 964
diff changeset
62
1094
8a270f32de81 server (session): new "connected" property, which is True when a user is logged
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
63 @property
8a270f32de81 server (session): new "connected" property, which is True when a user is logged
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
64 def connected(self):
8a270f32de81 server (session): new "connected" property, which is True when a user is logged
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
65 return self.profile is not None
8a270f32de81 server (session): new "connected" property, which is True when a user is logged
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
66
1101
9f7a628ce893 server (session): new "guest" property, True when connected user is a guest
Goffi <goffi@goffi.org>
parents: 1094
diff changeset
67 @property
9f7a628ce893 server (session): new "guest" property, True when connected user is a guest
Goffi <goffi@goffi.org>
parents: 1094
diff changeset
68 def guest(self):
9f7a628ce893 server (session): new "guest" property, True when connected user is a guest
Goffi <goffi@goffi.org>
parents: 1094
diff changeset
69 """True if this is a guest session"""
9f7a628ce893 server (session): new "guest" property, True when connected user is a guest
Goffi <goffi@goffi.org>
parents: 1094
diff changeset
70 if self.profile is None:
9f7a628ce893 server (session): new "guest" property, True when connected user is a guest
Goffi <goffi@goffi.org>
parents: 1094
diff changeset
71 return False
9f7a628ce893 server (session): new "guest" property, True when connected user is a guest
Goffi <goffi@goffi.org>
parents: 1094
diff changeset
72 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1101
diff changeset
73 return self.profile.startswith("guest@@")
1101
9f7a628ce893 server (session): new "guest" property, True when connected user is a guest
Goffi <goffi@goffi.org>
parents: 1094
diff changeset
74
960
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
75 def getPageData(self, page, key):
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
76 """get session data for a page
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
77
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
78 @param page(LiberviaPage): instance of the page
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
79 @param key(object): data key
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
80 return (None, object): value of the key
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
81 None if not found or page_data doesn't exist
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
82 """
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
83 return self.pages_data.get(page, {}).get(key)
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
84
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
85 def popPageData(self, page, key, default=None):
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
86 """like getPageData, but remove key once value is gotten
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
87
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
88 @param page(LiberviaPage): instance of the page
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
89 @param key(object): data key
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
90 @param default(object): value to return if key is not found
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
91 @return (object): found value or default
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
92 """
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
93 page_data = self.pages_data.get(page)
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
94 if page_data is None:
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
95 return default
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
96 value = page_data.pop(key, default)
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
97 if not page_data:
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
98 # no need to keep unused page_data
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
99 del self.pages_data[page]
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
100 return value
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
101
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
102 def setPageData(self, page, key, value):
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
103 """set data to persist on reload
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
104
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
105 @param page(LiberviaPage): instance of the page
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
106 @param key(object): data key
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
107 @param value(object): value to set
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
108 @return (object): set value
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
109 """
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
110 page_data = self.pages_data.setdefault(page, {})
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
111 page_data[key] = value
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
112 return value
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
113
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
114 def setPageFlag(self, page, flag):
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
115 """set a flag for this page
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
116
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
117 @param page(LiberviaPage): instance of the page
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
118 @param flag(unicode): flag to set
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
119 """
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
120 flags = self.getPageData(page, FLAGS_KEY)
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
121 if flags is None:
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
122 flags = self.setPageData(page, FLAGS_KEY, set())
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
123 flags.add(flag)
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
124
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
125 def popPageFlag(self, page, flag):
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
126 """return True if flag is set
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
127
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
128 flag is removed if it was set
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
129 @param page(LiberviaPage): instance of the page
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
130 @param flag(unicode): flag to set
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
131 @return (bool): True if flaag was set
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
132 """
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
133 page_data = self.pages_data.get(page, {})
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
134 flags = page_data.get(FLAGS_KEY)
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
135 if flags is None:
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
136 return False
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
137 if flag in flags:
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
138 flags.remove(flag)
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
139 # we remove data if they are not used anymore
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
140 if not flags:
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
141 del page_data[FLAGS_KEY]
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
142 if not page_data:
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
143 del self.pages_data[page]
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
144 return True
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
145 else:
e59edcae4c18 pages(session): added method to handle reload resistant page specific data:
Goffi <goffi@goffi.org>
parents: 957
diff changeset
146 return False
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
147
1186
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
148 def setPageNotification(self, page, message, level=C.LVL_INFO):
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
149 """set a flag for this page
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
150
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
151 @param page(LiberviaPage): instance of the page
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
152 @param flag(unicode): flag to set
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
153 """
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
154 notif = Notification(message, level)
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
155 notifs = self.getPageData(page, NOTIFICATIONS_KEY)
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
156 if notifs is None:
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
157 notifs = self.setPageData(page, NOTIFICATIONS_KEY, [])
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
158 notifs.append(notif)
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
159
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
160 def popPageNotifications(self, page):
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
161 """Return and remove last page notification
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
162
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
163 @param page(LiberviaPage): instance of the page
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
164 @return (list[Notification]): notifications if any
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
165 """
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
166 page_data = self.pages_data.get(page, {})
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
167 notifs = page_data.get(NOTIFICATIONS_KEY)
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
168 if not notifs:
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
169 return []
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
170 ret = notifs[:]
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
171 del notifs[:]
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
172 return ret
352865f4a268 server: added a generic way to have notification messages in pages
Goffi <goffi@goffi.org>
parents: 1165
diff changeset
173
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
174 def getAffiliation(self, service, node):
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
175 """retrieve affiliation for a pubsub node
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
176
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
177 @param service(jid.JID): pubsub service
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
178 @param node(unicode): pubsub node
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
179 @return (unicode, None): affiliation, or None if it is not in cache
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
180 """
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
181 if service.resource:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
182 raise ValueError("Service must not have a resource")
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
183 if not node:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
184 raise ValueError("node must be set")
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
185 try:
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
186 affiliation = self.affiliations.pop((service, node))
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
187 except KeyError:
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
188 return None
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
189 else:
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
190 # we replace at the top to get the most recently used on top
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
191 # so less recently used will be removed if cache is full
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
192 self.affiliations[(service, node)] = affiliation
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
193 return affiliation
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
194
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
195 def setAffiliation(self, service, node, affiliation):
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
196 """cache affiliation for a node
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
197
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
198 will empty cache when it become too big
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
199 @param service(jid.JID): pubsub service
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
200 @param node(unicode): pubsub node
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
201 @param affiliation(unicode): affiliation to this node
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
202 """
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
203 if service.resource:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
204 raise ValueError("Service must not have a resource")
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
205 if not node:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
206 raise ValueError("node must be set")
1093
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
207 self.affiliations[(service, node)] = affiliation
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
208 while len(self.affiliations) > MAX_CACHE_AFFILIATIONS:
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
209 self.affiliations.popitem(last=False)
eda7a1c6532a server: new getAffiliation method:
Goffi <goffi@goffi.org>
parents: 1090
diff changeset
210
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
211
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
212 class ISATGuestSession(Interface):
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
213 id = Attribute("UUID of the guest")
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
214 data = Attribute("data associated with the guest")
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
215
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
216
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1186
diff changeset
217 @implementer(ISATGuestSession)
919
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
218 class SATGuestSession(object):
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
219
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
220 def __init__(self, session):
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
221 self.id = None
7b267496da1d server: moved session interfaces to session_iface module + added SATGuestSession
Goffi <goffi@goffi.org>
parents:
diff changeset
222 self.data = None