| from typing import Dict, Tuple, Callable | |
| CacheValues = Tuple[str, str, str] | |
| CacheValuesCallback = Callable[[], CacheValues] | |
| _cache: Dict[str, Dict[str, CacheValues]] = {} | |
| def save_entry(module_name: str, name: str, cache: CacheValues) -> None: | |
| try: | |
| module_cache = _cache[module_name] | |
| except KeyError: | |
| module_cache = _cache[module_name] = {} | |
| module_cache[name] = cache | |
| def _create_get_from_cache(number: int) -> Callable[[str, str, CacheValuesCallback], str]: | |
| def _get_from_cache(module_name: str, name: str, get_cache_values: CacheValuesCallback) -> str: | |
| try: | |
| return _cache[module_name][name][number] | |
| except KeyError: | |
| v = get_cache_values() | |
| save_entry(module_name, name, v) | |
| return v[number] | |
| return _get_from_cache | |
| get_type = _create_get_from_cache(0) | |
| get_docstring_signature = _create_get_from_cache(1) | |
| get_docstring = _create_get_from_cache(2) | |