SYMBOL INDEX (22 symbols across 3 files) FILE: app.py class CacheDAO (line 22) | class CacheDAO: method __init__ (line 23) | def __init__(self, file: str = "cache.json"): method getCache (line 29) | def getCache(self, question: str) -> Optional[str]: method addCache (line 35) | def addCache(self, question: str, answer: str): function searchXuexiaoyi (line 47) | def searchXuexiaoyi(question: str) -> str: function searchView (line 90) | def searchView(): function decryptView (line 131) | def decryptView(): FILE: cxsecret_font.py class FontHashDAO (line 20) | class FontHashDAO: method __init__ (line 25) | def __init__(self, file: str = "font_map.json"): method find_char (line 31) | def find_char(self, font_hash: str) -> str: method find_hash (line 35) | def find_hash(self, char: str) -> str: function hash_glyph (line 43) | def hash_glyph(glyph: Glyph) -> str: function font2map (line 54) | def font2map(file: Union[IO, Path, str]) -> Dict[str, str]: function decrypt (line 66) | def decrypt(dststr_fontmap: Dict[str, str], dst_str: str) -> str: FILE: xuexiaoyi_API.py class APIError (line 10) | class APIError(Exception): method __init__ (line 11) | def __init__(self, code, msg) -> None: method __str__ (line 16) | def __str__(self) -> str: class XxyWxAPI (line 20) | class XxyWxAPI: method __init__ (line 26) | def __init__(self, open_id: str = "") -> None: method code2session (line 36) | def code2session(self, code: str) -> bool: method search (line 53) | def search(self, question: str) -> bool: method get (line 68) | def get(self, index: int = 0) -> tuple[str, str]: