Project

General

Profile

« Previous | Next » 

Revision 2667

sql_gen.py: ColDict: Extend dicts.DictProxy instead of UserDict.DictMixin because that already provides some of the functionality needed by ColDict

View differences:

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