NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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()