Index: tools/telemetry/third_party/rope/rope/base/oi/memorydb.py |
diff --git a/tools/telemetry/third_party/rope/rope/base/oi/memorydb.py b/tools/telemetry/third_party/rope/rope/base/oi/memorydb.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..01c814ce460afc8463a9e5aa26e9ddaefd5f3755 |
--- /dev/null |
+++ b/tools/telemetry/third_party/rope/rope/base/oi/memorydb.py |
@@ -0,0 +1,127 @@ |
+from rope.base.oi import objectdb |
+ |
+ |
+class MemoryDB(objectdb.FileDict): |
+ |
+ def __init__(self, project, persist=None): |
+ self.project = project |
+ self._persist = persist |
+ self.files = self |
+ self._load_files() |
+ self.project.data_files.add_write_hook(self.write) |
+ |
+ def _load_files(self): |
+ self._files = {} |
+ if self.persist: |
+ result = self.project.data_files.read_data( |
+ 'objectdb', compress=self.compress, import_=True) |
+ if result is not None: |
+ self._files = result |
+ |
+ def keys(self): |
+ return self._files.keys() |
+ |
+ def __iter__(self): |
+ for f in self._files: |
+ yield f |
+ |
+ def __len__(self): |
+ return len(self._files) |
+ |
+ def __setitem__(self): |
+ raise NotImplementedError() |
+ |
+ def __contains__(self, key): |
+ return key in self._files |
+ |
+ def __getitem__(self, key): |
+ return FileInfo(self._files[key]) |
+ |
+ def create(self, path): |
+ self._files[path] = {} |
+ |
+ def rename(self, file, newfile): |
+ if file not in self._files: |
+ return |
+ self._files[newfile] = self._files[file] |
+ del self[file] |
+ |
+ def __delitem__(self, file): |
+ del self._files[file] |
+ |
+ def write(self): |
+ if self.persist: |
+ self.project.data_files.write_data('objectdb', self._files, |
+ self.compress) |
+ |
+ @property |
+ def compress(self): |
+ return self.project.prefs.get('compress_objectdb', False) |
+ |
+ @property |
+ def persist(self): |
+ if self._persist is not None: |
+ return self._persist |
+ else: |
+ return self.project.prefs.get('save_objectdb', False) |
+ |
+ |
+class FileInfo(objectdb.FileInfo): |
+ |
+ def __init__(self, scopes): |
+ self.scopes = scopes |
+ |
+ def create_scope(self, key): |
+ self.scopes[key] = ScopeInfo() |
+ |
+ def keys(self): |
+ return self.scopes.keys() |
+ |
+ def __contains__(self, key): |
+ return key in self.scopes |
+ |
+ def __getitem__(self, key): |
+ return self.scopes[key] |
+ |
+ def __delitem__(self, key): |
+ del self.scopes[key] |
+ |
+ def __iter__(self): |
+ for s in self.scopes: |
+ yield s |
+ |
+ def __len__(self): |
+ return len(self.scopes) |
+ |
+ def __setitem__(self): |
+ raise NotImplementedError() |
+ |
+ |
+ |
+class ScopeInfo(objectdb.ScopeInfo): |
+ |
+ def __init__(self): |
+ self.call_info = {} |
+ self.per_name = {} |
+ |
+ def get_per_name(self, name): |
+ return self.per_name.get(name, None) |
+ |
+ def save_per_name(self, name, value): |
+ self.per_name[name] = value |
+ |
+ def get_returned(self, parameters): |
+ return self.call_info.get(parameters, None) |
+ |
+ def get_call_infos(self): |
+ for args, returned in self.call_info.items(): |
+ yield objectdb.CallInfo(args, returned) |
+ |
+ def add_call(self, parameters, returned): |
+ self.call_info[parameters] = returned |
+ |
+ def __getstate__(self): |
+ return (self.call_info, self.per_name) |
+ |
+ def __setstate__(self, data): |
+ self.call_info, self.per_name = data |