from app import db from app.models import Day, Hour, Activity import csv import datetime class Tracker(): def __init__(self, codes_path=None, sheets_path=None): self.codes_path = codes_path self.sheets_path = sheets_path def __repr__(self): return "".format(self.__hash__()) def parse_activity(self, str): try: return int(str) except ValueError: try: return float(str) except: return -1 def import_codes(self): with open(self.codes_path) as csv_file: data = csv_file.readlines() lines = csv.reader(data) for line in lines: [code_str, name] = line code = self.parse_activity(code_str) exists = db.session.query(Activity).filter( Activity.code == code).first() if exists: pass else: activity = Activity( code=code, name=name.strip()) db.session.add(activity) db.session.commit() def import_csv(self): with open(self.sheets_path) as csv_file: # Skip the header row data = csv_file.readlines()[1:] lines = csv.reader(data) for line in lines: # Parse each row date_str = line[0] hours_str = line[2:26] note = line[27] # Create the right date [month, day] = date_str.split("/") date = datetime.datetime(2023, int(month), int(day)) # Initialize the Day try: entry = db.session.execute( db.select(Day).filter_by(date=date.strftime("%F"))).scalar_one() except: entry = Day(date=date, note=note) db.session.add(entry) db.session.commit() print("Parsed {}".format(entry.date)) # Create an Hour for each hour for t in range(len(hours_str)): activity_code = self.parse_activity(hours_str[t]) activity = db.session.query(Activity).filter( Activity.code == activity_code).first() hour = Hour( time=t, activity_code=activity.code, day_id=entry.day_id) db.session.add(hour) db.session.commit()