annotate roundup/cgi/MultiMapping.py @ 2467:76ead526113d

client instances may be used as translation engines. any backend translator may be passed as constructor argument or via setTranslator() method. by default, templating.translationService is used. use this engine to translate client messages.
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Tue, 15 Jun 2004 09:19:49 +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/