Warning:
Can't synchronize with repository "(default)" (Unsupported version control system "svn": No module named svn). Look in the Trac log for more information.
| File turbogears.patch,
4.2 KB
(added by xaka, 2 years ago) |
|
|
-
|
|
|
|
| 109 | 109 | (44, "Pablo Martelli", "Brazil")] |
| 110 | 110 | output = grid.render(data) |
| 111 | 111 | assert '<td>Joe Doe</td><td>Great Britain</td><td>23</td>' in output |
| | 112 | |
| | 113 | def test_another_attrwrapper_implementation(self): |
| | 114 | class TestDataGrid(DataGrid): |
| | 115 | class attrwrapper(object): |
| | 116 | def __init__(self, name): |
| | 117 | self.name = int(name) |
| | 118 | grid = TestDataGrid(fields=[ |
| | 119 | ('Field 1', 0) |
| | 120 | ]) |
| | 121 | assert isinstance(grid.columns[0].getter, TestDataGrid.attrwrapper) |
| | 122 | |
| | 123 | def test_attrwrapper_with_list(self): |
| | 124 | grid = DataGrid(fields=[ |
| | 125 | ('Field 1', 0), |
| | 126 | ('Field 2', 1) |
| | 127 | ]) |
| | 128 | row = [0, 1] |
| | 129 | assert grid.columns[0].getter(row) == 0 |
| | 130 | assert grid.columns[1].getter(row) == 1 |
| | 131 | |
| | 132 | def test_attrwrapper_with_tuple(self): |
| | 133 | grid = DataGrid(fields=[ |
| | 134 | ('Field 1', 0), |
| | 135 | ('Field 2', 1) |
| | 136 | ]) |
| | 137 | row = (0, 1) |
| | 138 | assert grid.columns[0].getter(row) == 0 |
| | 139 | assert grid.columns[1].getter(row) == 1 |
| | 140 | |
| | 141 | def test_attrwrapper_with_dict(self): |
| | 142 | grid = DataGrid(fields=[ |
| | 143 | ('Field 1', 'key1'), |
| | 144 | ('Field 2', 'key2') |
| | 145 | ]) |
| | 146 | row = dict(key1='val1', key2='val2') |
| | 147 | assert grid.columns[0].getter(row) == row['key1'] |
| | 148 | assert grid.columns[1].getter(row) == row['key2'] |
-
|
|
|
|
| 39 | 39 | - options, which is a way to carry arbitrary user-defined data |
| 40 | 40 | |
| 41 | 41 | """ |
| 42 | | def __init__(self, name, getter=None, title=None, options=None): |
| 43 | | if not name: |
| | 42 | def __init__(self, name, getter=None, title=None, options=None, attrwrapper=None): |
| | 43 | if name is None: |
| 44 | 44 | raise ValueError, 'name is required' |
| 45 | | if getter: |
| | 45 | |
| | 46 | if attrwrapper is None: |
| | 47 | attrwrapper = DataGrid.attrwrapper |
| | 48 | |
| | 49 | if getter is None: |
| | 50 | self.getter = attrwrapper(name) |
| | 51 | else: |
| 46 | 52 | if callable(getter): |
| 47 | 53 | self.getter = getter |
| 48 | 54 | else: # assume it's an attribute name |
| 49 | | self.getter = DataGrid.attrwrapper(getter) |
| 50 | | else: |
| 51 | | self.getter = DataGrid.attrwrapper(name) |
| | 55 | self.getter = attrwrapper(getter) |
| 52 | 56 | self.name = name |
| 53 | 57 | self.title = title is None and name.capitalize() or title |
| 54 | 58 | self.options = options or {} |
| … |
… |
|
| 71 | 75 | |
| 72 | 76 | """ |
| 73 | 77 | def __init__(self, name): |
| 74 | | assert isinstance(name, str) |
| 75 | 78 | self.name = name |
| | 79 | |
| 76 | 80 | def __call__(self, obj): |
| | 81 | if isinstance(obj, (list, tuple)): |
| | 82 | return obj[int(self.name)] |
| | 83 | |
| | 84 | if isinstance(obj, dict): |
| | 85 | return obj[self.name] |
| | 86 | |
| 77 | 87 | for name in self.name.split('.'): |
| 78 | 88 | obj = getattr(obj, name) |
| 79 | 89 | return obj |
| … |
… |
|
| 133 | 143 | names = set() # keep track of names to ensure there are no dups |
| 134 | 144 | for n, col in enumerate(fields): |
| 135 | 145 | if not isinstance(col, self.Column): |
| 136 | | if isinstance(col, str) or callable(col): |
| | 146 | if isinstance(col, (basestring, int)) or callable(col): |
| 137 | 147 | name_or_f = col |
| 138 | 148 | title = options = None |
| 139 | 149 | else: |
| … |
… |
|
| 143 | 153 | except IndexError: |
| 144 | 154 | options = None |
| 145 | 155 | name = 'column-' + str(n) |
| 146 | | col = self.Column(name, name_or_f, title, options) |
| | 156 | col = self.Column(name, name_or_f, title, options, self.attrwrapper) |
| 147 | 157 | if col.name in names: |
| 148 | 158 | raise ValueError('Duplicate column name: %s' % name) |
| 149 | 159 | columns.append(col) |
Download in other formats: