From 65c73dfc42ec2012dcc5c91dff43de25936095b1 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 00:38:45 -0400 Subject: [PATCH] do some internal validation for adding formatters --- tablib/core.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/tablib/core.py b/tablib/core.py index 6c17bc3..c4efce3 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -246,12 +246,15 @@ class Dataset(object): if self._formatters: for row_i, row in enumerate(_data): for col, callback in self._formatters: - if col is None: - for j, c in enumerate(row): - _data[row_i][j] = callback(c) - else: - _data[row_i][col] = callback(row[col]) - + try: + if col is None: + for j, c in enumerate(row): + _data[row_i][j] = callback(c) + else: + _data[row_i][col] = callback(row[col]) + except IndexError: + raise InvalidDatasetIndex + if self.headers: if dicts: @@ -501,8 +504,11 @@ class Dataset(object): col = self.headers.index(key) # get 'key' index from each data else: raise KeyError - - self._formatters.append((col, handler)) + + if not col > self.width: + self._formatters.append((col, handler)) + else: + raise InvalidDatasetIndex return True @@ -798,6 +804,9 @@ class InvalidDatasetType(Exception): class InvalidDimensions(Exception): "Invalid size" + +class InvalidDatasetIndex(Exception): + "Outside of Dataset size" class HeadersNeeded(Exception): "Header parameter must be given when appending a column in this Dataset."