1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from spacewalk.common import usix
18
19
21
22 """Bookkeeping of the state of various channels
23 Argument to constructor is the list of requested channels
24 """
25
26 __lists = [
27 '_requested_imported',
28 '_requested_new',
29 '_requested_channels',
30 '_not_requested',
31 '_end_of_service',
32 '_typos',
33 ]
34
36
37 self._requested = {}
38
39 self._available = {}
40
41 self._imported = {}
42
43
44
45
46 self._requested_imported = []
47 self._requested_new = []
48 self._requested_channels = []
49 self._not_requested = []
50 self._end_of_service = []
51 self._typos = []
52
53 for l in self.__lists:
54 assert hasattr(self, l), "Class does not initialize %s" % l
55 assert isinstance(getattr(self, l), usix.ListType)
56
57
58 self.request(requested)
59
61 assert isinstance(requested, usix.ListType)
62
63 self._requested.clear()
64 for c in requested:
65 self._requested[c] = None
66 return self
67
68 - def _add(self, name, channel):
69 if name not in ['_available', '_imported']:
70 raise AttributeError('add' + name)
71 getattr(self, name)[channel] = None
72 return self
73
74 - def _set(self, name, channel_list):
75 if name not in ['_available', '_imported']:
76 raise AttributeError('set' + name)
77 assert isinstance(channel_list, usix.ListType)
78 h = getattr(self, name)
79 h.clear()
80 for c in channel_list:
81 h[c] = None
82 return self
83
85 del getattr(self, name)[:]
86 return self
87
88 - def _get(self, name):
89 return getattr(self, name)
90
95
100
102 for name in self.__lists:
103 print("Contents of %s: %s" % (name, getattr(self, name)))
104 return self
105
107 self._reset_computed()
108 available = self._available.copy()
109 imported = self._imported.copy()
110 for c in self._requested:
111 if c in self._available:
112 del available[c]
113
114 if c in self._imported:
115 del imported[c]
116 self._requested_imported.append(c)
117 continue
118 self._requested_new.append(c)
119 continue
120
121 if c in self._imported:
122 del imported[c]
123 self._end_of_service.append(c)
124 continue
125
126 self._typos.append(c)
127
128 for c in available.keys():
129 if c in imported:
130
131 del imported[c]
132
133 self._not_requested.append(c)
134
135
136
137 self._end_of_service.extend(list(imported.keys()))
138
139 self._requested_channels.extend(self._requested_new)
140 self._requested_channels.extend(self._requested_imported)
141
142
143 for name in self.__lists:
144 getattr(self, name).sort()
145 return self
146
157
158
160
161
163 self._func = func
164 self._name = name
165
167 return self._func(self._name, *args, **kwargs)
168
169
170
171
173 for k, expected in expectations.items():
174 method_name = 'get' + k
175 val = getattr(c, method_name)()
176 if val == expected:
177 print("ok: %s = %s" % (method_name, expected))
178 else:
179 print("FAILED: %s: expected %s, got %s" % (method_name, expected,
180 val))
181
182
183 -def test1(requested, available, imported, expectations):
194
195
196 -def test2(requested, available, imported, expectations):
205
206
208 requested = ['a', 'b', 'c', 'd']
209 available = ['a', 'd', 'e', 'f']
210 imported = ['d', 'e', 'h']
211 expectations = {
212 '_requested_imported': ['d'],
213 '_requested_new': ['a'],
214 '_not_requested': ['e', 'f'],
215 '_end_of_service': ['h'],
216 '_typos': ['b', 'c'],
217 '_requested_channels': ['a', 'd'],
218 }
219 print("Running test1")
220 test1(requested, available, imported, expectations)
221 print("Running test2")
222 test2(requested, available, imported, expectations)
223
224 if __name__ == '__main__':
225 test()
226