Mercurial > libervia-backend
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 |