def overview(station: int, tabname: str = "readings", fields: List[str] = None, with_rows: bool = False) -> List[Timeframe]: assert isinstance(station, int) assert isinstance(tabname, str) if not fields: fields = get_data_fields(tabname=tabname) assert isinstance(fields, list) assert isinstance(with_rows, bool) sql = get_indicator_select(tabname=tabname, fields=fields) with johanna.Connection(f"select from {tabname}") as c: rows = c.cur.execute(sql, (station, )).fetchall() tfs = [] ts0 = PointInTime(rows[0][0]) srow0 = "".join(rows[0][1:]) # indicator string tf = Timeframe(ts0, None, srow0, None, None) tfs.append(tf) for i, row in enumerate(rows[1:]): ts = PointInTime(row[0]) srow = "".join(row[1:]) # indicator string if ts - ts0 > 1: # not next day # we passed an occurence of '---------' ('-' only) # -> insert n/a interval: [x, _, old] -> [x, ts0, old], [ts0+1, ts-1, n/a], [ts, _, new] tf.ts_to = ts0 tfs.append(Timeframe(ts0.next(), ts.prev(), "no data", None, None)) tf = Timeframe(ts, None, srow, None, None) tfs.append(tf) elif srow != srow0: tf.ts_to = ts0 tf = Timeframe(ts, None, srow, None, None) tfs.append(tf) ts0 = ts srow0 = srow tf.ts_to = ts for tf in tfs: tf.days = tf.ts_to - tf.ts_from + 1 if with_rows: for tf in tfs: tf.rows = get_two(station, tf.ts_to.dwdts(), tabname=tabname, fields=fields) return tfs
def test_funny(self): silvester = PointInTime("2021-12-31") neujahr = silvester.next() self.assertEqual(neujahr - silvester, 1)
def test_next_hourly(self): silvester = PointInTime("2021-12-31 23") neujahr = silvester.next() self.assertEqual(neujahr.iso(), "2022-01-01 00")