registry.py (2709B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\content\client\registry.py 2 if False: 3 from content.client.repository import BaseContentRepository 4 from content.client.consumer import BaseContentConsumer 5 from content.client.repository_definition import RepositoryDefinition 6 from typing import Dict, List 7 8 class ContentRegistry(object): 9 10 def __init__(self, definitions, public_gateway = None): 11 self._public_gateway = public_gateway 12 self._definitions = definitions 13 self._repositories_by_content_id = {} 14 self._consumers_by_content_id = {} 15 16 def set_definitions(self, definitions): 17 self._definitions = definitions 18 19 def register_repository(self, repository): 20 content_id = repository.content_id 21 repository.on_content_updated.connect(self._on_repository_content_updated) 22 self._repositories_by_content_id[content_id] = repository 23 24 def register_consumer(self, consumer): 25 content_id = consumer.content_id 26 if content_id not in self._consumers_by_content_id: 27 self._consumers_by_content_id[content_id] = [] 28 self._consumers_by_content_id[content_id].append(consumer) 29 30 def unregister_consumer(self, consumer): 31 content_id = consumer.content_id 32 if content_id in self._consumers_by_content_id: 33 self._consumers_by_content_id[content_id].remove(consumer) 34 35 def get(self, content_id, key, **kwargs): 36 return self._get_repository(content_id).get(key, **kwargs) 37 38 def get_all(self, content_id, **kwargs): 39 return self._get_repository(content_id).get_all(**kwargs) 40 41 def refresh(self, content_id, refresh_interval): 42 self._get_repository(content_id, create_if_missing=False).refresh(refresh_interval) 43 44 def _get_repository(self, content_id, create_if_missing = True): 45 repository = self._repositories_by_content_id.get(content_id, None) 46 if repository is None and create_if_missing: 47 definition = self._definitions.get(content_id, None) 48 if definition is None: 49 raise KeyError("No repository definition found for content_id '{content_id}'".format(content_id=content_id)) 50 repository = definition.construct(public_gateway=self._public_gateway) 51 self.register_repository(repository) 52 return repository 53 54 def _on_repository_content_updated(self, content_id): 55 consumers = self._consumers_by_content_id.get(content_id, []) 56 for consumer in consumers: 57 consumer.on_content_updated() 58 59 def clear(self): 60 self._repositories_by_content_id.clear() 61 self._consumers_by_content_id.clear()