comparison src/memory/disco.py @ 1367:f71a0fc26886

merged branch frontends_multi_profiles
author Goffi <goffi@goffi.org>
date Wed, 18 Mar 2015 10:52:28 +0100
parents be3a301540c0
children 069ad98b360d
comparison
equal deleted inserted replaced
1295:1e3b1f9ad6e2 1367:f71a0fc26886
100 client = self.host.getClient(profile_key) 100 client = self.host.getClient(profile_key)
101 if jid_ is None: 101 if jid_ is None:
102 jid_ = jid.JID(client.jid.host) 102 jid_ = jid.JID(client.jid.host)
103 try: 103 try:
104 cap_hash = self.host.memory.getEntityData(jid_, [C.ENTITY_CAP_HASH], client.profile)[C.ENTITY_CAP_HASH] 104 cap_hash = self.host.memory.getEntityData(jid_, [C.ENTITY_CAP_HASH], client.profile)[C.ENTITY_CAP_HASH]
105 disco_infos = self.hashes[cap_hash] 105 except (KeyError, exceptions.UnknownEntityError):
106 return defer.succeed(disco_infos)
107 except KeyError:
108 # capability hash is not available, we'll compute one 106 # capability hash is not available, we'll compute one
109 def infosCb(disco_infos): 107 def infosCb(disco_infos):
110 cap_hash = self.generateHash(disco_infos) 108 cap_hash = self.generateHash(disco_infos)
111 self.hashes[cap_hash] = disco_infos 109 self.hashes[cap_hash] = disco_infos
112 self.host.memory.updateEntityData(jid_, C.ENTITY_CAP_HASH, cap_hash, client.profile) 110 self.host.memory.updateEntityData(jid_, C.ENTITY_CAP_HASH, cap_hash, profile_key=client.profile)
113 return disco_infos 111 return disco_infos
114 d = client.disco.requestInfo(jid_) 112 d = client.disco.requestInfo(jid_)
115 d.addCallback(infosCb) 113 d.addCallback(infosCb)
116 return d 114 return d
115 else:
116 disco_infos = self.hashes[cap_hash]
117 return defer.succeed(disco_infos)
117 118
118 @defer.inlineCallbacks 119 @defer.inlineCallbacks
119 def getItems(self, jid_=None, nodeIdentifier='', profile_key=C.PROF_KEY_NONE): 120 def getItems(self, jid_=None, nodeIdentifier='', profile_key=C.PROF_KEY_NONE):
120 """get disco items from jid_, cache them for our own server 121 """get disco items from jid_, cache them for our own server
121 122
129 jid_ = jid.JID(client.jid.host) 130 jid_ = jid.JID(client.jid.host)
130 # we cache items only for our own server 131 # we cache items only for our own server
131 try: 132 try:
132 items = self.host.memory.getEntityData(jid_, ["DISCO_ITEMS"], client.profile)["DISCO_ITEMS"] 133 items = self.host.memory.getEntityData(jid_, ["DISCO_ITEMS"], client.profile)["DISCO_ITEMS"]
133 log.debug("[%s] disco items are in cache" % jid_.full()) 134 log.debug("[%s] disco items are in cache" % jid_.full())
134 except KeyError: 135 except (KeyError, exceptions.UnknownEntityError):
135 log.debug("Caching [%s] disco items" % jid_.full()) 136 log.debug("Caching [%s] disco items" % jid_.full())
136 items = yield client.disco.requestItems(jid_, nodeIdentifier) 137 items = yield client.disco.requestItems(jid_, nodeIdentifier)
137 self.host.memory.updateEntityData(jid_, "DISCO_ITEMS", items, client.profile) 138 self.host.memory.updateEntityData(jid_, "DISCO_ITEMS", items, profile_key=client.profile)
138 else: 139 else:
139 items = yield client.disco.requestItems(jid_, nodeIdentifier) 140 items = yield client.disco.requestItems(jid_, nodeIdentifier)
140 141
141 defer.returnValue(items) 142 defer.returnValue(items)
142 143