1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 """
20 Common implementation of in-memory result sets and views.
21
22 The result sets use a Pyblio.Arrays.KeyArray to store their
23 content. Views are implemented with plain lists of keys.
24 """
25
26 from Pyblio import Store, Callback, Arrays, Sort
27
28 -class ResultSet(Store.ResultSet, Callback.Publisher):
29 - def __init__(self, rsid, db, contents=None):
40
41 - def view (self, criterion):
42 return View(self, criterion)
43
45 self._contents.add(k)
46 self.emit('add-item', k)
47 return
48
50 del self._contents[k]
51 self.emit ('delete-item', k)
52 return
53
55 for k in self._contents:
56 yield self._db[k]
57
59 for k in self._contents:
60 yield (k, self._db[k])
61
63 return iter(self._contents)
64
65 __iter__ = iterkeys
66
68 return len(self._contents)
69
71 for k in list(self._contents):
72 del self._db[k]
73
75 self._contents = contents
76
78 """ invoked when the database removes an item """
79 try:
80 del self[k]
81 except IndexError:
82 pass
83
85 if k in self._contents:
86 self.emit('update-item', k)
87
88
89
90 -class View(Callback.Publisher):
91
104
112
114 return len(self._view)
115
118
120 return iter (self._view)
121
123 return iter(self._view)
124
126 for i in self._view:
127 yield (i, self._src._db[i])
128
130 for i in self._view:
131 yield self._src._db[i]
132
134 try:
135 return self._view.index(key)
136 except ValueError:
137 raise KeyError(key)
138