def generate_bp_chart_data(page_month: int, page_year: int, db_cursor, lock): months_bp = [] lock.acquire(True) db_cursor.execute( """SELECT * FROM tracker WHERE date >= ? and date <= ? """, ( get_months_beginning(page_month, page_year).date(), get_months_end(page_month, page_year).date(), )) months_bp += db_cursor.fetchall() lock.release() chart_bp_min = [] chart_bp_max = [] temp = { x[0]: (x[tracker_settings["BP_Min"]["index"]], x[tracker_settings["BP_Max"]["index"]]) for x in months_bp } for day in range(1, number_of_days_in_month(page_month, page_year) + 1): date = '{:04d}-{:02d}-{:02d}'.format(page_year, page_month, day) if date not in temp: chart_bp_min.append("nan") chart_bp_max.append("nan") else: chart_bp_min.append(str(temp[date][0])) chart_bp_max.append(str(temp[date][1])) return chart_bp_min, chart_bp_max
def generate_spending_chart_data(page_month, page_year, number_of_days, db_cursor, lock): months_finance = [] lock.acquire(True) db_cursor.execute( """SELECT * FROM finance WHERE date >= ? and date <= ? """, ( get_months_beginning(page_month, page_year).date(), get_months_end(page_month, page_year).date(), )) months_vals = db_cursor.fetchall() lock.release() for day in range(1, number_of_days + 1): days_val = 0 for finance_item in months_vals: if int(finance_item[0].split("-")[2]) == day: days_val += float(finance_item[2]) months_finance.append(str(days_val)) return months_finance
def generate_monthly_chart_data(page_month: int, page_year: int, tabel_name: str, db_cursor, lock): lock.acquire(True) months_data = [] db_cursor.execute("SELECT * FROM tracker WHERE date >= ? and date <= ? ", ( get_months_beginning(page_month, page_year).date(), get_months_end(page_month, page_year).date(), )) index = tracker_settings[tabel_name]["index"] temp = {x[0]: x[index] for x in db_cursor.fetchall()} for day in range(1, number_of_days_in_month(page_month, page_year) + 1): date = '{:04d}-{:02d}-{:02d}'.format(page_year, page_month, day) if date not in temp: months_data.append("nan") else: months_data.append(temp[date]) lock.release() return months_data
def gen_year_chart_data(page_year: int, table_name: str, calc_func, db_cursor, lock): if page_year in temporary_data.keys(): if table_name in temporary_data[page_year].keys(): return temporary_data[page_year][table_name] ret_list = [] i = 0 index = tracker_settings[table_name]["index"] while (i + 7) < 364: week_beg = datetime.datetime.strptime( f"{page_year}-01-01", '%Y-%m-%d') + datetime.timedelta(days=i) week_end = datetime.datetime.strptime( f"{page_year}-01-01", '%Y-%m-%d') + datetime.timedelta(days=i + 6) lock.acquire(True) db_cursor.execute( "SELECT * FROM tracker WHERE date >= ? and date <= ? ", ( week_beg.date(), week_end.date(), )) ret_list = calc_func(db_cursor.fetchall(), index, ret_list) lock.release() i += 7 week_end = datetime.datetime.strptime( f"{page_year}-01-01", '%Y-%m-%d') + datetime.timedelta(days=364) lock.acquire(True) db_cursor.execute("SELECT * FROM tracker WHERE date >= ? and date <= ? ", ( week_end.date(), get_months_end(i, page_year).date(), )) ret_list = calc_func(db_cursor.fetchall(), index, ret_list) lock.release() if len(ret_list) != 52: raise ValueError( f"return list for table {table_name} is of length {len(ret_list)} instead of 52." ) temporary_data[page_year] = temporary_data.get(page_year, {}) temporary_data[page_year][table_name] = ret_list return ret_list
def generate_weather_monthly(db_cursor, year: int, lock): # extract the year data return_data = {} for month in range(1, 13): lock.acquire(True) db_cursor.execute( "SELECT * FROM weatherStation WHERE date >= ? and date <= ? ", ( get_months_beginning(month, year).date(), get_months_end(month, year).date(), )) monthly_data = db_cursor.fetchall() lock.release() temp_data = {} for item in monthly_data: room = int(item[0]) temp_data[room] = temp_data.get(room, { "temp": [], "pressure": [], "humidity": [], "moisture": [] }) temp_data[room]["temp"].append(float(item[3])) temp_data[room]["humidity"].append(float(item[4])) temp_data[room]["pressure"].append(float(item[5]) / 1000) temp_data[room]["moisture"].append(float(item[6])) for item in temp_data.keys(): room = item return_data[room] = return_data.get( room, { "months": [], "temp": { "min": [], "max": [], "avg": [] }, "pressure": { "min": [], "max": [], "avg": [] }, "humidity": { "min": [], "max": [], "avg": [] }, "moisture": { "min": [], "max": [], "avg": [] } }) return_data[room]["months"].append(month) for parameter in ["temp", "pressure", "humidity", "moisture"]: temp_data_clean_list = [ x for x in temp_data[room][parameter] if x != 0 ] if len(temp_data_clean_list) > 0: return_data[room][parameter]["min"].append( min(temp_data_clean_list)) return_data[room][parameter]["max"].append( max(temp_data_clean_list)) return_data[room][parameter]["avg"].append( sum(temp_data_clean_list) / len(temp_data_clean_list)) else: return_data[room][parameter]["min"].append("nan") return_data[room][parameter]["max"].append("nan") return_data[room][parameter]["avg"].append("nan") for month in range(1, 13): for room in return_data.keys(): if month not in return_data[room]["months"]: for parameter in ["temp", "pressure", "humidity", "moisture"]: return_data[room][parameter]["min"] = return_data[room][parameter]["min"][:month - 1] + ["nan"] + \ return_data[room][parameter]["min"][month - 1:] return_data[room][parameter]["max"] = return_data[room][parameter]["max"][:month - 1] + ["nan"] + \ return_data[room][parameter]["max"][month - 1:] return_data[room][parameter]["avg"] = return_data[room][parameter]["avg"][:month - 1] + ["nan"] + \ return_data[room][parameter]["avg"][month - 1:] return return_data