Format: text/x-python
⬇ Download File (954 B)
   1  from typing import Dict, Tuple, Callable
   2  
   3  CacheValues = Tuple[str, str, str]
   4  CacheValuesCallback = Callable[[], CacheValues]
   5  
   6  
   7  _cache: Dict[str, Dict[str, CacheValues]] = {}
   8  
   9  
  10  def save_entry(module_name: str, name: str, cache: CacheValues) -> None:
  11      try:
  12          module_cache = _cache[module_name]
  13      except KeyError:
  14          module_cache = _cache[module_name] = {}
  15      module_cache[name] = cache
  16  
  17  
  18  def _create_get_from_cache(number: int) -> Callable[[str, str, CacheValuesCallback], str]:
  19      def _get_from_cache(module_name: str, name: str, get_cache_values: CacheValuesCallback) -> str:
  20          try:
  21              return _cache[module_name][name][number]
  22          except KeyError:
  23              v = get_cache_values()
  24              save_entry(module_name, name, v)
  25              return v[number]
  26      return _get_from_cache
  27  
  28  
  29  get_type = _create_get_from_cache(0)
  30  get_docstring_signature = _create_get_from_cache(1)
  31  get_docstring = _create_get_from_cache(2)
  32