repository.py (3252B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\character\title\repository\flatbuffer\repository.py 2 import logging 3 from cosmetics.client.character.title.const import LOGGER_NAME 4 from cosmetics.client.character.title.model.flatbuffer.generated import TitleData as fb_model_root 5 from cosmetics.client.character.title.api.error import DefinitionNotFoundError 6 from cosmetics.client.character.title.model.definition.attributes import TitleAttributes 7 from cosmetics.client.character.title.model.definition.identifier import TitleIdentifier 8 from cosmetics.client.character.title.repository.flatbuffer.content_provider import TitleLocalizedDefinitionsProvider 9 from cosmetics.client.character.title.repository.flatbuffer.in_memory_cache import TitleDefinitionsInMemoryCache 10 from publicGateway.gateway import PublicGateway 11 from caching.client.storage.version_disk_storage import VersionedBinaryDiskStorage 12 from content.client.flatbuffer.repository import VersionCachedFlatbufferRepository 13 from semantic_version import SemanticVersion 14 from collections import OrderedDict 15 logger = logging.getLogger(LOGGER_NAME) 16 17 class TitleLocalizedDefinitionsRepository(VersionCachedFlatbufferRepository): 18 content_id = 'character_titles' 19 provider_type = TitleLocalizedDefinitionsProvider 20 disk_storage_type = VersionedBinaryDiskStorage 21 in_memory_storage_type = TitleDefinitionsInMemoryCache 22 in_memory_ttl = 86400 23 24 def __init__(self, public_gateway, language_code): 25 self._language_code = language_code 26 super(TitleLocalizedDefinitionsRepository, self).__init__(public_gateway=public_gateway, language_code=language_code) 27 28 @property 29 def content_name(self): 30 return '{id}_{language}'.format(id=self.content_id, language=self._language_code) 31 32 def get_all_titles(self): 33 return self._in_memory_cache.titles_by_id 34 35 def get_title(self, identifier): 36 if identifier not in self._in_memory_cache.titles_by_id: 37 raise DefinitionNotFoundError 38 return self._in_memory_cache.titles_by_id[identifier] 39 40 def get_current_version_in_memory(self): 41 return self._in_memory_cache.get_version() 42 43 def get_current_version_on_disk(self): 44 return self._disk_storage.get_version() 45 46 def check_version_and_prime(self, latest_version): 47 self._start_request_update_task(self._disk_storage.get_version(), latest_version) 48 49 def admin_clear_disk_cache(self): 50 self._disk_storage.clear() 51 52 def _construct_data_from_binary(self, binary_data): 53 root = fb_model_root.GetRootAs(binary_data) 54 titles = OrderedDict() 55 self._load_titles([ root.Titles(i) for i in range(root.TitlesLength()) ], titles) 56 return titles 57 58 def _get_default_data(self): 59 return {} 60 61 @staticmethod 62 def _load_titles(fb_titles, titles): 63 for fb_title in fb_titles: 64 title_identifier = TitleIdentifier.from_flatbuffer(fb_title.Id()) 65 titles[title_identifier] = TitleAttributes.from_flatbuffer(fb_title) 66 67 def print_definitions(self): 68 self._in_memory_cache.print_definitions() 69 70 def get(self, key, **kwargs): 71 pass 72 73 def get_all(self, **kwargs): 74 pass