annotate roundup/cgi/MultiMapping.py @ 3192:eb00a2fa0e0e maint-0.8 0.8.0

pre-release stuff
author Richard Jones <richard@users.sourceforge.net>
date Wed, 16 Feb 2005 00:29:18 +0000
parents 53c600091f17
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 class MultiMapping:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 def __init__(self, *stores):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 self.stores = list(stores)
2162
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
4 self.stores.reverse()
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
5
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 def __getitem__(self, key):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 for store in self.stores:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 if store.has_key(key):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 return store[key]
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 raise KeyError, key
2162
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
11
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
12 def __setitem__(self, key, val):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
13 self.stores[0][key] = val
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
14
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 _marker = []
2162
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
16
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 def get(self, key, default=_marker):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 for store in self.stores:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 if store.has_key(key):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 return store[key]
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 if default is self._marker:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 raise KeyError, key
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 return default
2162
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
24
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 def __len__(self):
2162
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
26 return len(self.items())
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
27
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
28 def has_key(self, key):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
29 for store in self.stores:
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
30 if store.has_key(key):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
31 return 1
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
32 return 0
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
33
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 def push(self, store):
2162
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
35 self.stores = [store] + self.stores
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
36
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 def pop(self):
2162
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
38 if not len(self.stores):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
39 return None
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
40 store, self.stores = self.stores[0], self.stores[1:]
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
41 return store
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
42
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
43 def keys(self):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
44 return [ _[0] for _ in self.items() ]
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
45
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
46 def values(self):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
47 return [ _[1] for _ in self.items() ]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48
2162
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
49 def copy(self):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
50 copy = MultiMapping()
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
51 copy.stores = [_.copy() for _ in self.stores]
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
52 return copy
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
53
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
54 def items(self):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
55 l = []
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
56 seen = {}
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
57 for store in self.stores:
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
58 for k, v in store.items():
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
59 if not seen.has_key(k):
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
60 l.append((k, v))
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
61 seen[k] = 1
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
62 return l
53c600091f17 fixed MultiMapping
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
63

Roundup Issue Tracker: http://roundup-tracker.org/