ResultIter can now deal with generators of resultproxies
This commit is contained in:
parent
47e7eb5193
commit
187ed2680f
@ -1,4 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from inspect import isgenerator
|
||||||
|
|
||||||
from sqlalchemy import Integer, UnicodeText, Float, DateTime, Boolean
|
from sqlalchemy import Integer, UnicodeText, Float, DateTime, Boolean
|
||||||
|
|
||||||
@ -19,18 +20,33 @@ class ResultIter(object):
|
|||||||
""" SQLAlchemy ResultProxies are not iterable to get a
|
""" SQLAlchemy ResultProxies are not iterable to get a
|
||||||
list of dictionaries. This is to wrap them. """
|
list of dictionaries. This is to wrap them. """
|
||||||
|
|
||||||
def __init__(self, rp):
|
def __init__(self, result_proxies):
|
||||||
self.rp = rp
|
if not isgenerator(result_proxies):
|
||||||
self.count = rp.rowcount
|
result_proxies = iter((result_proxies, ))
|
||||||
self.keys = self.rp.keys()
|
self.result_proxies = result_proxies
|
||||||
|
|
||||||
|
self.count = 0
|
||||||
|
if not self._next_rp():
|
||||||
|
raise StopIteration
|
||||||
|
|
||||||
|
def _next_rp(self):
|
||||||
|
try:
|
||||||
|
self.rp = self.result_proxies.next()
|
||||||
|
self.count += self.rp.rowcount
|
||||||
|
self.keys = self.rp.keys()
|
||||||
|
return True
|
||||||
|
except StopIteration:
|
||||||
|
return False
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
row = self.rp.fetchone()
|
row = self.rp.fetchone()
|
||||||
if row is None:
|
if row is None:
|
||||||
raise StopIteration
|
if self._next_rp():
|
||||||
|
return self.next()
|
||||||
|
else:
|
||||||
|
# stop here
|
||||||
|
raise StopIteration
|
||||||
return dict(zip(self.keys, row))
|
return dict(zip(self.keys, row))
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user