-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathabstract_map.py
40 lines (33 loc) · 994 Bytes
/
abstract_map.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class AbstractMap(dict):
def __init__(self, absobj, h=hash):
self.h = h
self.absobj = absobj
def getAbstract(self, obj):
h = self.h(obj)
if dict.__contains__(self, h):
v = self[h]
else:
v = self.absobj(obj)
self[h] = v
assert all(self.h(i.request) if i.request else True
for i in v.reqresps)
return v
def getAbstractOrDefault(self, obj, default):
h = self.h(obj)
if dict.__contains__(self, h):
v = self[h]
else:
v = default
if v:
self[h] = v
assert all(self.h(i.request) if i.request else True
for i in v.reqresps)
return v
def __iter__(self):
return self.itervalues()
def setAbstract(self, obj, v):
h = self.h(obj)
self[h] = v
def __contains__(self, obj):
h = self.h(obj)
return dict.__contains__(self, h)