import types from .utils import ExactWeakKeyDictionary class CodeContextDict: def __init__(self): self.code_context = ExactWeakKeyDictionary() def has_context(self, code: types.CodeType): return code in self.code_context def get_context(self, code: types.CodeType): ctx = self.code_context.get(code) if ctx is None: ctx = {} self.code_context[code] = ctx return ctx def pop_context(self, code: types.CodeType): ctx = self.get_context(code) self.code_context._remove_id(id(code)) return ctx def clear(self): self.code_context.clear() code_context = CodeContextDict()