diff 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
line wrap: on
line diff
--- a/src/memory/disco.py	Thu Feb 05 11:59:26 2015 +0100
+++ b/src/memory/disco.py	Wed Mar 18 10:52:28 2015 +0100
@@ -102,18 +102,19 @@
             jid_ = jid.JID(client.jid.host)
         try:
             cap_hash = self.host.memory.getEntityData(jid_, [C.ENTITY_CAP_HASH], client.profile)[C.ENTITY_CAP_HASH]
-            disco_infos = self.hashes[cap_hash]
-            return defer.succeed(disco_infos)
-        except KeyError:
+        except (KeyError, exceptions.UnknownEntityError):
             # capability hash is not available, we'll compute one
             def infosCb(disco_infos):
                 cap_hash = self.generateHash(disco_infos)
                 self.hashes[cap_hash] = disco_infos
-                self.host.memory.updateEntityData(jid_, C.ENTITY_CAP_HASH, cap_hash, client.profile)
+                self.host.memory.updateEntityData(jid_, C.ENTITY_CAP_HASH, cap_hash, profile_key=client.profile)
                 return disco_infos
             d = client.disco.requestInfo(jid_)
             d.addCallback(infosCb)
             return d
+        else:
+            disco_infos = self.hashes[cap_hash]
+            return defer.succeed(disco_infos)
 
     @defer.inlineCallbacks
     def getItems(self, jid_=None, nodeIdentifier='', profile_key=C.PROF_KEY_NONE):
@@ -131,10 +132,10 @@
             try:
                 items = self.host.memory.getEntityData(jid_, ["DISCO_ITEMS"], client.profile)["DISCO_ITEMS"]
                 log.debug("[%s] disco items are in cache" % jid_.full())
-            except KeyError:
+            except (KeyError, exceptions.UnknownEntityError):
                 log.debug("Caching [%s] disco items" % jid_.full())
                 items = yield client.disco.requestItems(jid_, nodeIdentifier)
-                self.host.memory.updateEntityData(jid_, "DISCO_ITEMS", items, client.profile)
+                self.host.memory.updateEntityData(jid_, "DISCO_ITEMS", items, profile_key=client.profile)
         else:
             items = yield client.disco.requestItems(jid_, nodeIdentifier)