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 |