From 909ce794a8d6d4c207d5b96c0200c8bde326e8be Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Fri, 12 Feb 2021 16:24:45 +0200 Subject: Add date parsing --- hommaexceli_py/parser.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 hommaexceli_py/parser.py (limited to 'hommaexceli_py/parser.py') diff --git a/hommaexceli_py/parser.py b/hommaexceli_py/parser.py new file mode 100644 index 0000000..b4abb46 --- /dev/null +++ b/hommaexceli_py/parser.py @@ -0,0 +1,45 @@ +import datetime +import logging +import re +from sheets_client import SheetsRow + +INTERVAL_ABBREVS = { + "pv": datetime.timedelta(days=1), + "vk": datetime.timedelta(days=7), + "kk": datetime.timedelta(days=30), + "v": datetime.timedelta(days=365), +} + + +def _calculate_interval(interval_str: str): + match = re.search(r"(\d+)(\w+)", interval_str) + number = int(match[1]) + abbrev = match[2] + + try: + interval = INTERVAL_ABBREVS[abbrev] + except KeyError: + raise Exception(f'"{interval_str}" is an invalid interval string!') + + total_interval = datetime.timedelta(seconds=interval.total_seconds() * number) + return total_interval + + +def _timestamp_to_date(timestamp: str): + return datetime.datetime.strptime(timestamp, "%Y-%m-%d") + + +def _date_to_timestamp(date): + return datetime.datetime.strftime(date, "%Y-%m-%d") + + +def _process_row(row: SheetsRow): + interval = _calculate_interval(row.interval) + last_done_date = _timestamp_to_date(row.last_done) + next_date = last_done_date + interval + next_date_str = _date_to_timestamp(next_date) + return (row.last_done, row.interval, next_date_str, row.name) + + +def process_rows(rows: list[SheetsRow]): + return map(_process_row, rows) -- cgit v1.3