comparison src/memory/memory.py @ 1314:bb9c32249778 frontends_multi_profiles

core: added getEntitiesData which get cache data for several entities at once
author Goffi <goffi@goffi.org>
date Mon, 09 Feb 2015 21:39:51 +0100
parents faa1129559b8
children be3a301540c0
comparison
equal deleted inserted replaced
1313:a8d7500090f6 1314:bb9c32249778
634 if entity_jid in (C.ENTITY_ALL_RESOURCES, C.ENTITY_ALL): 634 if entity_jid in (C.ENTITY_ALL_RESOURCES, C.ENTITY_ALL):
635 continue # we ignore KeyError when deleting keys from several entities 635 continue # we ignore KeyError when deleting keys from several entities
636 else: 636 else:
637 raise e 637 raise e
638 638
639 def _getEntitiesData(self, entities_jids, keys_list, profile_key):
640 ret = self.getEntitiesData([jid.JID(jid_) for jid_ in entities_jids], keys_list, profile_key)
641 return {jid_.full(): data for jid_, data in ret.iteritems()}
642
643 def getEntitiesData(self, entities_jids, keys_list=None, profile_key=C.PROF_KEY_NONE):
644 """Get a list of cached values for several entities at once
645
646 @param entities_jids: jids of the entities, or empty list for all entities in cache
647 @param keys_list (iterable,None): list of keys to get, None for everything
648 @param profile_key: %(doc_profile_key)s
649 @return: dict withs values for each key in keys_list.
650 if there is no value of a given key, resulting dict will
651 have nothing with that key nether
652 if an entity doesn't exist in cache, it will not appear
653 in resulting dict
654
655 @raise exceptions.UnknownEntityError: if entity is not in cache
656 """
657 def fillEntityData(entity_cache_data):
658 entity_data = {}
659 if keys_list is None:
660 entity_data = entity_cache_data
661 else:
662 for key in keys_list:
663 try:
664 entity_data[key] = entity_cache_data[key]
665 except KeyError:
666 continue
667 return entity_data
668
669 profile_cache = self._getProfileCache(profile_key)
670 ret_data = {}
671 if entities_jids:
672 for entity in entities_jids:
673 try:
674 entity_cache_data = profile_cache[entity.userhostJID()][entity.resource]
675 except KeyError:
676 continue
677 ret_data[entity.full()] = fillEntityData(entity_cache_data, keys_list)
678 else:
679 for bare_jid, data in profile_cache.iteritems():
680 for resource, entity_cache_data in data.iteritems():
681 full_jid = copy.copy(bare_jid)
682 full_jid.resource = resource
683 ret_data[full_jid] = fillEntityData(entity_cache_data)
684
685 return ret_data
686
639 def getEntityData(self, entity_jid, keys_list=None, profile_key=C.PROF_KEY_NONE): 687 def getEntityData(self, entity_jid, keys_list=None, profile_key=C.PROF_KEY_NONE):
640 """Get a list of cached values for entity 688 """Get a list of cached values for entity
641 689
642 @param entity_jid: JID of the entity 690 @param entity_jid: JID of the entity
643 @param keys_list (iterable,None): list of keys to get, None for everything 691 @param keys_list (iterable,None): list of keys to get, None for everything