Path: blob/master/elisp/emacs-for-python/rope-dist/rope/base/oi/memorydb.py
1419 views
from rope.base.oi import objectdb123class MemoryDB(objectdb.FileDict):45def __init__(self, project, persist=None):6self.project = project7self._persist = persist8self.files = self9self._load_files()10self.project.data_files.add_write_hook(self.write)1112def _load_files(self):13self._files = {}14if self.persist:15result = self.project.data_files.read_data(16'objectdb', compress=self.compress, import_=True)17if result is not None:18self._files = result1920def keys(self):21return self._files.keys()2223def __contains__(self, key):24return key in self._files2526def __getitem__(self, key):27return FileInfo(self._files[key])2829def create(self, path):30self._files[path] = {}3132def rename(self, file, newfile):33if file not in self._files:34return35self._files[newfile] = self._files[file]36del self[file]3738def __delitem__(self, file):39del self._files[file]4041def write(self):42if self.persist:43self.project.data_files.write_data('objectdb', self._files,44self.compress)4546@property47def compress(self):48return self.project.prefs.get('compress_objectdb', False)4950@property51def persist(self):52if self._persist is not None:53return self._persist54else:55return self.project.prefs.get('save_objectdb', False)565758class FileInfo(objectdb.FileInfo):5960def __init__(self, scopes):61self.scopes = scopes6263def create_scope(self, key):64self.scopes[key] = ScopeInfo()6566def keys(self):67return self.scopes.keys()6869def __contains__(self, key):70return key in self.scopes7172def __getitem__(self, key):73return self.scopes[key]7475def __delitem__(self, key):76del self.scopes[key]777879class ScopeInfo(objectdb.ScopeInfo):8081def __init__(self):82self.call_info = {}83self.per_name = {}8485def get_per_name(self, name):86return self.per_name.get(name, None)8788def save_per_name(self, name, value):89self.per_name[name] = value9091def get_returned(self, parameters):92return self.call_info.get(parameters, None)9394def get_call_infos(self):95for args, returned in self.call_info.items():96yield objectdb.CallInfo(args, returned)9798def add_call(self, parameters, returned):99self.call_info[parameters] = returned100101def __getstate__(self):102return (self.call_info, self.per_name)103104def __setstate__(self, data):105self.call_info, self.per_name = data106107108