completion_cache.py 954 B

12345678910111213141516171819202122232425262728293031
  1. from typing import Dict, Tuple, Callable
  2. CacheValues = Tuple[str, str, str]
  3. CacheValuesCallback = Callable[[], CacheValues]
  4. _cache: Dict[str, Dict[str, CacheValues]] = {}
  5. def save_entry(module_name: str, name: str, cache: CacheValues) -> None:
  6. try:
  7. module_cache = _cache[module_name]
  8. except KeyError:
  9. module_cache = _cache[module_name] = {}
  10. module_cache[name] = cache
  11. def _create_get_from_cache(number: int) -> Callable[[str, str, CacheValuesCallback], str]:
  12. def _get_from_cache(module_name: str, name: str, get_cache_values: CacheValuesCallback) -> str:
  13. try:
  14. return _cache[module_name][name][number]
  15. except KeyError:
  16. v = get_cache_values()
  17. save_entry(module_name, name, v)
  18. return v[number]
  19. return _get_from_cache
  20. get_type = _create_get_from_cache(0)
  21. get_docstring_signature = _create_get_from_cache(1)
  22. get_docstring = _create_get_from_cache(2)