repository.py (4874B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\communitytracks\client\repository.py 2 from clientsettings.qa.setting import BaseQASetting 3 from communitytracks.client.api.signal import on_community_track_completed 4 from communitytracks.client.data.instance_attributes import InstanceAttributes 5 from communitytracks.client.data.instance_identifier import InstanceIdentifier 6 from communitytracks.client.data.definition_identifier import DefinitionIdentifier 7 from communitytracks.client.listener.listener_signals import on_completed_notice 8 from communitytracks.client.listener.notice_listener import CommunityTracksNoticeListener 9 from communitytracks.client.mock.mock_gateway import MockCommunityTracksGateway 10 from communitytracks.common.const import LOGGER_NAME 11 from communitytracks.common.data.definition_attributes import DefinitionAttributes, get_definitions_raw_data 12 from eve.common.script.util.notificationconst import notificationTypeVanguardNemesisConvoyStarted 13 from publicGateway.gateway import PublicGateway 14 from communitytracks.client.messenger.request_messenger import CommunityTracksRequestMessenger 15 from logging import getLogger 16 if False: 17 from typing import Dict 18 logger = getLogger(LOGGER_NAME) 19 20 class CommunityTracksRepository(object): 21 22 def __init__(self, public_gateway, service_manager, enable_mocks_setting): 23 self._service_manager = service_manager 24 self._public_gateway = public_gateway 25 self._enable_mocks_setting = enable_mocks_setting 26 self._request_messenger = None 27 self._notice_listener = CommunityTracksNoticeListener(self._public_gateway) 28 self._instances_cache = {} 29 self._definitions_cache = None 30 logger.info('Community Tracks repository initialized') 31 self._connect_signals() 32 33 def __del__(self): 34 self._disconnect_signals() 35 36 def _clear_cache(self): 37 self._instances_cache = {} 38 self._definitions_cache = None 39 40 def _connect_signals(self): 41 self._enable_mocks_setting.register_to_updates(self._on_mocking_enabled_changed) 42 on_completed_notice.connect(self._on_completed_notice) 43 44 def _disconnect_signals(self): 45 self._enable_mocks_setting.unregister_from_updates(self._on_mocking_enabled_changed) 46 on_completed_notice.disconnect(self._on_completed_notice) 47 48 @property 49 def request_messenger(self): 50 if self._request_messenger is None: 51 self._request_messenger = CommunityTracksRequestMessenger(self._public_gateway) 52 self._update_gateway() 53 return self._request_messenger 54 55 def _update_gateway(self): 56 if self._enable_mocks_setting.is_enabled(): 57 gateway = MockCommunityTracksGateway() 58 else: 59 gateway = self._public_gateway 60 self.request_messenger.public_gateway = gateway 61 self._notice_listener.public_gateway = gateway 62 63 def _on_mocking_enabled_changed(self, *args): 64 self._clear_cache() 65 self._update_gateway() 66 67 def get_definition_attributes(self, definition_id): 68 self._cache_definitions() 69 return self._definitions_cache.get(definition_id, None) 70 71 def get_instance_attributes(self, instance_id, force_refresh = False): 72 if instance_id not in self._instances_cache or force_refresh: 73 def_id, progress = self._service_manager.RemoteSvc('communityTrackMgr').get_instance_attributes_public(instance_id.sequential) 74 if def_id is not None and progress is not None: 75 instance_attributes = InstanceAttributes(definition_identifier=DefinitionIdentifier(fsd_identifier=def_id), progress=progress) 76 if self._enable_mocks_setting.is_enabled(): 77 return instance_attributes 78 if instance_attributes: 79 self._instances_cache[instance_id] = instance_attributes 80 else: 81 logger.error('could not find instance attributes for id %s' % instance_id) 82 return self._instances_cache.get(instance_id, None) 83 84 def _cache_definitions(self): 85 if self._definitions_cache is not None: 86 return 87 info_log = 'Caching definitions...\n' 88 self._definitions_cache = {} 89 for key, val in get_definitions_raw_data().items(): 90 identifier = DefinitionIdentifier(key) 91 attributes = DefinitionAttributes(val.goal, [ t for t in val.tale_templates ]) 92 info_log += 'Id: %s\nAttributes: %s\n' % (identifier, attributes) 93 self._definitions_cache[identifier] = attributes 94 95 info_log += 'Done!' 96 logger.info(info_log) 97 98 def _on_completed_notice(self, instance_id): 99 on_community_track_completed(instance_id) 100 sm.GetService('notificationSvc').MakeAndScatterNotification(type=notificationTypeVanguardNemesisConvoyStarted, data=None)