def __iter__(self):
state = self.prepareState(self._endpoint, self._filters, **self._prepareStateParams)
entries = self._endpoint(sort= self._sort, n= self._n, **self._filters)
if self._progbar:
try:
get_ipython
inNotebook = True
except NameError:
inNotebook = False
if not inNotebook:
sys.stderr.write("Locating data...")
entries = list(entries)
if self._progbar and not inNotebook:
sys.stderr.write("\r")
if self._progbar:
try:
get_ipython # will fail faster and more reliably than tqdm_notebook
entriesIterable = tqdm_notebook(entries, unit= "entries")
except (NameError, AttributeError, TypeError):
entriesIterable = tqdm(entries, unit= "entries")
else:
entriesIterable = entries
def iterate():
for entry in entriesIterable:
try:
data = self.parse(entry, state= state) if state is not None else self.parse(entry)
yield entry, data
except KeyboardInterrupt:
self._write('Interrupted while parsing "{}"'.format(entry.path))
break
except GeneratorExit:
raise GeneratorExit
except:
self._write('Error while parsing "{}":'.format(entry.path))
self._write( traceback.format_exc() )
# chain the operations together
# each function in self._chain is a generator which takes an iterator
# (remember that you call a generator to "activate" it: calling a generator returns an iterator)
# so end condition for the loop is that `iterate` refers to an iterator
iterate = iterate()
for do in self._chain:
iterate = do(iterate)
return iterate
评论列表
文章目录