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/memorydb.py
1419 views
1
from rope.base.oi import objectdb
2
3
4
class MemoryDB(objectdb.FileDict):
5
6
def __init__(self, project, persist=None):
7
self.project = project
8
self._persist = persist
9
self.files = self
10
self._load_files()
11
self.project.data_files.add_write_hook(self.write)
12
13
def _load_files(self):
14
self._files = {}
15
if self.persist:
16
result = self.project.data_files.read_data(
17
'objectdb', compress=self.compress, import_=True)
18
if result is not None:
19
self._files = result
20
21
def keys(self):
22
return self._files.keys()
23
24
def __contains__(self, key):
25
return key in self._files
26
27
def __getitem__(self, key):
28
return FileInfo(self._files[key])
29
30
def create(self, path):
31
self._files[path] = {}
32
33
def rename(self, file, newfile):
34
if file not in self._files:
35
return
36
self._files[newfile] = self._files[file]
37
del self[file]
38
39
def __delitem__(self, file):
40
del self._files[file]
41
42
def write(self):
43
if self.persist:
44
self.project.data_files.write_data('objectdb', self._files,
45
self.compress)
46
47
@property
48
def compress(self):
49
return self.project.prefs.get('compress_objectdb', False)
50
51
@property
52
def persist(self):
53
if self._persist is not None:
54
return self._persist
55
else:
56
return self.project.prefs.get('save_objectdb', False)
57
58
59
class FileInfo(objectdb.FileInfo):
60
61
def __init__(self, scopes):
62
self.scopes = scopes
63
64
def create_scope(self, key):
65
self.scopes[key] = ScopeInfo()
66
67
def keys(self):
68
return self.scopes.keys()
69
70
def __contains__(self, key):
71
return key in self.scopes
72
73
def __getitem__(self, key):
74
return self.scopes[key]
75
76
def __delitem__(self, key):
77
del self.scopes[key]
78
79
80
class ScopeInfo(objectdb.ScopeInfo):
81
82
def __init__(self):
83
self.call_info = {}
84
self.per_name = {}
85
86
def get_per_name(self, name):
87
return self.per_name.get(name, None)
88
89
def save_per_name(self, name, value):
90
self.per_name[name] = value
91
92
def get_returned(self, parameters):
93
return self.call_info.get(parameters, None)
94
95
def get_call_infos(self):
96
for args, returned in self.call_info.items():
97
yield objectdb.CallInfo(args, returned)
98
99
def add_call(self, parameters, returned):
100
self.call_info[parameters] = returned
101
102
def __getstate__(self):
103
return (self.call_info, self.per_name)
104
105
def __setstate__(self, data):
106
self.call_info, self.per_name = data
107
108