from fastapi import APIRouter from database import session from pyowm import OWM from app.models.auto import Auto_Delivery, Auto_Temp router = APIRouter( prefix="/main", tags=["main"], responses={404: {"description": "Not found"}}, ) @router.route("/update", methods=["GET"]) def update_auto_customers(): today_temp = session\ .query(Auto_Temp)\ .order_by(Auto_Temp.id.desc())\ .first() # get all automatic customers auto_customers = session\ .query(Auto_Delivery)\ .order_by(Auto_Delivery.last_updated.desc())\ .limit(25) for f in auto_customers: # figure out how much temperature effects oil if today_temp >= 60: use_day = 1 elif 40 >= today_temp >= 59: use_day = 3 elif 30 >= today_temp >= 39: use_day = 5 elif 0 >= today_temp >= 29: use_day = 7 elif -20 >= today_temp >= -1: use_day = 10 else: use_day = 0 # times temp factory by house factor gallon_use_today = f.house_factor * use_day # get estimated gallons left get_gallons_left = f.estimated_gallons_left_prev_day - gallon_use_today # get previous day gallons left f.estimated_gallons_left_prev_day = f.estimated_gallons_left + gallon_use_today f.estimated_gallons_left = get_gallons_left session.add(f) session.commit() return ({"ok": True}), 200 @router.get("/temp") def update_temp(): temps = [] owm = OWM('21648d8c8d1a4ae495ace0b7810b4d36') mgr = owm.weather_manager() # Search for current weather in London (Great Britain) and get details observation = mgr.weather_at_place('Worcester, US') w = observation.weather temp_dict_fahrenheit = w.temperature() # a dict in Kelvin units (default when no temperature units provided) temp_dict_fahrenheit['temp_min'] temp_dict_fahrenheit['temp_max'] temp_dict_fahrenheit = w.temperature('fahrenheit') low_temp = temp_dict_fahrenheit['temp_min'] high_temp = temp_dict_fahrenheit['temp_max'] temps.append(temp_dict_fahrenheit['temp_max']) temps.append(temp_dict_fahrenheit['temp_min']) get_avg = Average(temps) rounded_temp = round(get_avg) dday = (65 - ((low_temp + high_temp) /2)) add_new_temp = Auto_Temp( temp = temp_dict_fahrenheit['temp'], temp_max = temp_dict_fahrenheit['temp_max'], temp_min = temp_dict_fahrenheit['temp_min'], temp_avg = rounded_temp, degree_day = dday ) session.add(add_new_temp) session.commit() return ({"ok": True}), 200 def Average(lst): return sum(lst) / len(lst)