def chunk_list(lst, n) -> list: for i in range(0, len(lst), n): yield lst[i:i + n] def compile_query_to_plain_sql(query) -> str: return query.compile(compile_kwargs={ 'literal_binds': True }) def to_locale_number(value): return '{:,}'.format(value).replace(',', ' ') def previous_current_next(iterable): """Make an iterator that yields a (previous, current, next) tuple per element. Returns None if the value does not make sense (i.e. previous before first and next after last). """ iterable = iter(iterable) prv = None cur = next(iterable) try: while True: nxt = next(iterable) yield prv, cur, nxt prv = cur cur = nxt except StopIteration: yield prv, cur, None