Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Unified Diff: tools/telemetry/third_party/rope/rope/base/oi/memorydb.py

Issue 1132103009: Example of refactoring using rope library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « tools/telemetry/third_party/rope/rope/base/oi/doa.py ('k') | tools/telemetry/third_party/rope/rope/base/oi/objectdb.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698