Revision 2667
Added by Aaron Marcuse-Kubitza over 12 years ago
lib/sql_gen.py | ||
---|---|---|
4 | 4 |
import re |
5 | 5 |
import UserDict |
6 | 6 |
|
7 |
import dicts |
|
7 | 8 |
import objects |
8 | 9 |
import strings |
9 | 10 |
import util |
... | ... | |
182 | 183 |
if isinstance(col, NamedCol): col = col.code |
183 | 184 |
return col |
184 | 185 |
|
185 |
class ColDict(UserDict.DictMixin):
|
|
186 |
class ColDict(dicts.DictProxy):
|
|
186 | 187 |
'''A dict that automatically makes inserted entries Col objects''' |
187 | 188 |
|
188 | 189 |
def __init__(self, db, keys_table, dict_={}): |
190 |
dicts.DictProxy.__init__(self, {}) |
|
191 |
|
|
189 | 192 |
keys_table = as_Table(keys_table) |
190 | 193 |
|
191 | 194 |
self.db = db |
192 | 195 |
self.table = keys_table |
193 |
self.dict = {} |
|
194 | 196 |
self.update(dict_) # after setting vars because __setitem__() needs them |
195 | 197 |
|
196 |
def copy(self): return ColDict(self.db, self.table, self.dict.copy())
|
|
198 |
def copy(self): return ColDict(self.db, self.table, self.inner.copy())
|
|
197 | 199 |
|
198 |
def keys(self): return self.dict.keys() |
|
200 |
def __getitem__(self, key): |
|
201 |
return dicts.DictProxy.__getitem__(self, self._key(key)) |
|
199 | 202 |
|
200 |
def __getitem__(self, key): return self.dict[self._key(key)] |
|
201 |
|
|
202 | 203 |
def __setitem__(self, key, value): |
203 | 204 |
key = self._key(key) |
204 | 205 |
if value == None: value = self.db.col_default(key) |
205 |
self.dict[key] = as_Col(value, name=key.name)
|
|
206 |
dicts.DictProxy.__setitem__(self, key, as_Col(value, name=key.name))
|
|
206 | 207 |
|
207 | 208 |
def _key(self, key): return as_Col(key, self.table) |
208 | 209 |
|
Also available in: Unified diff
sql_gen.py: ColDict: Extend dicts.DictProxy instead of UserDict.DictMixin because that already provides some of the functionality needed by ColDict