fancy reprs, tablib support for rows

This commit is contained in:
2016-02-09 06:02:41 -05:00
parent 1ca6da9413
commit 2a1a4240ea
+43 -2
View File
@@ -44,6 +44,7 @@ class BetterNamedTupleCursor(NamedTupleCursor):
RecordBase = namedtuple("Record", [d[0] for d in self.description or ()])
class Record(RecordBase):
__slots__ = ()
def keys(self):
return self._fields
@@ -56,6 +57,20 @@ class BetterNamedTupleCursor(NamedTupleCursor):
raise KeyError("Record contains no '{}' field.".format(key))
@property
def dataset(self):
data = tablib.Dataset()
data.headers = self._fields
row = _reduce_datetimes(self)
data.append(row)
return data
def export(self, format, **kwargs):
return self.dataset.export(format, **kwargs)
def get(self, key, default=None):
try:
return self[key]
@@ -76,9 +91,25 @@ class ResultSet(object):
def __init__(self, rows):
self._rows = rows
self._all_rows = []
self.pending = True
def __repr__(self):
return '<ResultSet {:o}>'.format(id(self))
r = '<ResultSet size={} pending={}>'.format(self.size, self.pending)
if not self._all_rows:
return r
for i in range(5):
try:
r += '\n - {}'.format(self._all_rows[i])
except IndexError:
break
more = len(self._all_rows) - i
if more:
r += '\n ({} more)'.format(more)
r += '\n</ResultSet>'
return r
def __iter__(self):
"""Starts by returning the cached items and then consumes the
@@ -102,6 +133,7 @@ class ResultSet(object):
self._all_rows.append(nextrow)
return nextrow
except StopIteration:
self.pending = False
raise StopIteration('ResultSet contains no more rows.')
def __getitem__(self, key):
@@ -120,10 +152,19 @@ class ResultSet(object):
break
item = self._all_rows[key]
item = item[0] if is_int else item
if not is_int:
r = ResultSet(self._rows)
r._all_rows = item
item = r
else:
item = item[0]
return item
@property
def size(self):
return len(self._all_rows)
def export(self, format, **kwargs):
"""Export the ResultSet to a given format (courtesy of Tablib)."""
return self.dataset.export(format, **kwargs)