Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
marvel
GitHub Repository: marvel/qnf
Path: blob/master/elisp/emacs-for-python/rope-dist/rope/base/oi/objectdb.py
1419 views
1
import UserDict
2
3
4
class ObjectDB(object):
5
6
def __init__(self, db, validation):
7
self.db = db
8
self.validation = validation
9
self.observers = []
10
self.files = db.files
11
12
def validate_files(self):
13
for file in list(self.files):
14
if not self.validation.is_file_valid(file):
15
del self.files[file]
16
self._file_removed(file)
17
18
def validate_file(self, file):
19
if file not in self.files:
20
return
21
for key in list(self.files[file]):
22
if not self.validation.is_scope_valid(file, key):
23
del self.files[file][key]
24
25
def file_moved(self, file, newfile):
26
if file not in self.files:
27
return
28
self.files.rename(file, newfile)
29
self._file_removed(file)
30
self._file_added(newfile)
31
32
def get_files(self):
33
return self.files.keys()
34
35
def get_returned(self, path, key, args):
36
scope_info = self._get_scope_info(path, key, readonly=True)
37
result = scope_info.get_returned(args)
38
if self.validation.is_value_valid(result):
39
return result
40
41
def get_pername(self, path, key, name):
42
scope_info = self._get_scope_info(path, key, readonly=True)
43
result = scope_info.get_per_name(name)
44
if self.validation.is_value_valid(result):
45
return result
46
47
def get_callinfos(self, path, key):
48
scope_info = self._get_scope_info(path, key, readonly=True)
49
return scope_info.get_call_infos()
50
51
def add_callinfo(self, path, key, args, returned):
52
scope_info = self._get_scope_info(path, key, readonly=False)
53
old_returned = scope_info.get_returned(args)
54
if self.validation.is_more_valid(returned, old_returned):
55
scope_info.add_call(args, returned)
56
57
def add_pername(self, path, key, name, value):
58
scope_info = self._get_scope_info(path, key, readonly=False)
59
old_value = scope_info.get_per_name(name)
60
if self.validation.is_more_valid(value, old_value):
61
scope_info.save_per_name(name, value)
62
63
def add_file_list_observer(self, observer):
64
self.observers.append(observer)
65
66
def write(self):
67
self.db.write()
68
69
def _get_scope_info(self, path, key, readonly=True):
70
if path not in self.files:
71
if readonly:
72
return _NullScopeInfo()
73
self.files.create(path)
74
self._file_added(path)
75
if key not in self.files[path]:
76
if readonly:
77
return _NullScopeInfo()
78
self.files[path].create_scope(key)
79
result = self.files[path][key]
80
if isinstance(result, dict):
81
print self.files, self.files[path], self.files[path][key]
82
return result
83
84
def _file_removed(self, path):
85
for observer in self.observers:
86
observer.removed(path)
87
88
def _file_added(self, path):
89
for observer in self.observers:
90
observer.added(path)
91
92
def __str__(self):
93
scope_count = 0
94
for file_dict in self.files.values():
95
scope_count += len(file_dict)
96
return 'ObjectDB holds %s file and %s scope infos' % \
97
(len(self.files), scope_count)
98
99
100
class _NullScopeInfo(object):
101
102
def __init__(self, error_on_write=True):
103
self.error_on_write = error_on_write
104
105
def get_per_name(self, name):
106
pass
107
108
def save_per_name(self, name, value):
109
if self.error_on_write:
110
raise NotImplementedError()
111
112
def get_returned(self, parameters):
113
pass
114
115
def get_call_infos(self):
116
return []
117
118
def add_call(self, parameters, returned):
119
if self.error_on_write:
120
raise NotImplementedError()
121
122
123
class FileInfo(UserDict.DictMixin):
124
125
def create_scope(self, key):
126
pass
127
128
129
class FileDict(UserDict.DictMixin):
130
131
def create(self, key):
132
pass
133
134
def rename(self, key, new_key):
135
pass
136
137
138
class ScopeInfo(object):
139
140
def get_per_name(self, name):
141
pass
142
143
def save_per_name(self, name, value):
144
pass
145
146
def get_returned(self, parameters):
147
pass
148
149
def get_call_infos(self):
150
pass
151
152
def add_call(self, parameters, returned):
153
pass
154
155
156
class CallInfo(object):
157
158
def __init__(self, args, returned):
159
self.args = args
160
self.returned = returned
161
162
def get_parameters(self):
163
return self.args
164
165
def get_returned(self):
166
return self.returned
167
168
169
class FileListObserver(object):
170
171
def added(self, path):
172
pass
173
174
def removed(self, path):
175
pass
176
177