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

Unified Diff: tools/telemetry/third_party/rope/rope/base/oi/objectdb.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/objectdb.py
diff --git a/tools/telemetry/third_party/rope/rope/base/oi/objectdb.py b/tools/telemetry/third_party/rope/rope/base/oi/objectdb.py
new file mode 100644
index 0000000000000000000000000000000000000000..61f2711dd4e0a3d559798ed5e0471f56b54faff5
--- /dev/null
+++ b/tools/telemetry/third_party/rope/rope/base/oi/objectdb.py
@@ -0,0 +1,179 @@
+from __future__ import print_function
+try:
+ from collections import MutableMapping
+except ImportError:
+ from UserDict import DictMixin as MutableMapping
+
+
+class ObjectDB(object):
+
+ def __init__(self, db, validation):
+ self.db = db
+ self.validation = validation
+ self.observers = []
+ self.files = db.files
+
+ def validate_files(self):
+ for file in list(self.files):
+ if not self.validation.is_file_valid(file):
+ del self.files[file]
+ self._file_removed(file)
+
+ def validate_file(self, file):
+ if file not in self.files:
+ return
+ for key in list(self.files[file]):
+ if not self.validation.is_scope_valid(file, key):
+ del self.files[file][key]
+
+ def file_moved(self, file, newfile):
+ if file not in self.files:
+ return
+ self.files.rename(file, newfile)
+ self._file_removed(file)
+ self._file_added(newfile)
+
+ def get_files(self):
+ return self.files.keys()
+
+ def get_returned(self, path, key, args):
+ scope_info = self._get_scope_info(path, key, readonly=True)
+ result = scope_info.get_returned(args)
+ if self.validation.is_value_valid(result):
+ return result
+
+ def get_pername(self, path, key, name):
+ scope_info = self._get_scope_info(path, key, readonly=True)
+ result = scope_info.get_per_name(name)
+ if self.validation.is_value_valid(result):
+ return result
+
+ def get_callinfos(self, path, key):
+ scope_info = self._get_scope_info(path, key, readonly=True)
+ return scope_info.get_call_infos()
+
+ def add_callinfo(self, path, key, args, returned):
+ scope_info = self._get_scope_info(path, key, readonly=False)
+ old_returned = scope_info.get_returned(args)
+ if self.validation.is_more_valid(returned, old_returned):
+ scope_info.add_call(args, returned)
+
+ def add_pername(self, path, key, name, value):
+ scope_info = self._get_scope_info(path, key, readonly=False)
+ old_value = scope_info.get_per_name(name)
+ if self.validation.is_more_valid(value, old_value):
+ scope_info.save_per_name(name, value)
+
+ def add_file_list_observer(self, observer):
+ self.observers.append(observer)
+
+ def write(self):
+ self.db.write()
+
+ def _get_scope_info(self, path, key, readonly=True):
+ if path not in self.files:
+ if readonly:
+ return _NullScopeInfo()
+ self.files.create(path)
+ self._file_added(path)
+ if key not in self.files[path]:
+ if readonly:
+ return _NullScopeInfo()
+ self.files[path].create_scope(key)
+ result = self.files[path][key]
+ if isinstance(result, dict):
+ print(self.files, self.files[path], self.files[path][key])
+ return result
+
+ def _file_removed(self, path):
+ for observer in self.observers:
+ observer.removed(path)
+
+ def _file_added(self, path):
+ for observer in self.observers:
+ observer.added(path)
+
+ def __str__(self):
+ scope_count = 0
+ for file_dict in self.files.values():
+ scope_count += len(file_dict)
+ return 'ObjectDB holds %s file and %s scope infos' % \
+ (len(self.files), scope_count)
+
+
+class _NullScopeInfo(object):
+
+ def __init__(self, error_on_write=True):
+ self.error_on_write = error_on_write
+
+ def get_per_name(self, name):
+ pass
+
+ def save_per_name(self, name, value):
+ if self.error_on_write:
+ raise NotImplementedError()
+
+ def get_returned(self, parameters):
+ pass
+
+ def get_call_infos(self):
+ return []
+
+ def add_call(self, parameters, returned):
+ if self.error_on_write:
+ raise NotImplementedError()
+
+
+class FileInfo(MutableMapping):
+
+ def create_scope(self, key):
+ pass
+
+
+class FileDict(MutableMapping):
+
+ def create(self, key):
+ pass
+
+ def rename(self, key, new_key):
+ pass
+
+
+class ScopeInfo(object):
+
+ def get_per_name(self, name):
+ pass
+
+ def save_per_name(self, name, value):
+ pass
+
+ def get_returned(self, parameters):
+ pass
+
+ def get_call_infos(self):
+ pass
+
+ def add_call(self, parameters, returned):
+ pass
+
+
+class CallInfo(object):
+
+ def __init__(self, args, returned):
+ self.args = args
+ self.returned = returned
+
+ def get_parameters(self):
+ return self.args
+
+ def get_returned(self):
+ return self.returned
+
+
+class FileListObserver(object):
+
+ def added(self, path):
+ pass
+
+ def removed(self, path):
+ pass
« no previous file with comments | « tools/telemetry/third_party/rope/rope/base/oi/memorydb.py ('k') | tools/telemetry/third_party/rope/rope/base/oi/objectinfo.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698