comparison src/server/server.py @ 1093:eda7a1c6532a

server: new getAffiliation method: getAffiliation allows to retrieve affiliation to a pubsub node for logged user. The method handle cache in user's session, avoiding requesting pubsub service when possible.
author Goffi <goffi@goffi.org>
date Fri, 01 Jun 2018 13:03:52 +0200
parents 9c41b7e91172
children 01e95ec9df9e
comparison
equal deleted inserted replaced
1092:63ed5f6bd4eb 1093:eda7a1c6532a
1918 if len(args) == 1: 1918 if len(args) == 1:
1919 return args[0](session) 1919 return args[0](session)
1920 else: 1920 else:
1921 return (iface(session) for iface in args) 1921 return (iface(session) for iface in args)
1922 1922
1923 @defer.inlineCallbacks
1924 def getAffiliation(self, request, service, node):
1925 """retrieve pubsub node affiliation for current user
1926
1927 use cache first, and request pubsub service if not cache is found
1928 @param request(server.Request): request linked to the session
1929 @param service(jid.JID): pubsub service
1930 @param node(unicode): pubsub node
1931 @return (unicode): affiliation
1932 """
1933 sat_session = self.getSessionData(request, session_iface.ISATSession)
1934 if sat_session.profile is None:
1935 raise exceptions.InternalError(u'profile must be set to use this method')
1936 affiliation = sat_session.getAffiliation(service, node)
1937 if affiliation is not None:
1938 defer.returnValue(affiliation)
1939 else:
1940 try:
1941 affiliations = yield self.bridgeCall('psAffiliationsGet', service.full(), node, sat_session.profile)
1942 except Exception as e:
1943 log.warning("Can't retrieve affiliation for {service}/{node}: {reason}".format(
1944 service=service, node=node, reason=e))
1945 affiliation = u""
1946 else:
1947 try:
1948 affiliation = affiliations[node]
1949 except KeyError:
1950 affiliation = u""
1951 sat_session.setAffiliation(service, node, affiliation)
1952 defer.returnValue(affiliation)
1953
1923 ## Websocket (dynamic pages) ## 1954 ## Websocket (dynamic pages) ##
1924 1955
1925 def getWebsocketURL(self, request): 1956 def getWebsocketURL(self, request):
1926 base_url_split = self.getExtBaseURLData(request) 1957 base_url_split = self.getExtBaseURLData(request)
1927 if base_url_split.scheme.endswith('s'): 1958 if base_url_split.scheme.endswith('s'):