123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- from datetime import datetime, timedelta
- from almanac.models import WeatherConditions, Day
- from directory.models import Town
- """ Condition archiver.
- This script is designed to be run once a day, preferably as early as possible.
- It does the following things:
- * Grabs all conditions for previous day.
- * Generates avg, high, and low temps for past day
- * Generates avg. pressure and humidity
- * Grabs the first Conditions weather condition
- * Stores all results in the corresponding "Day" object
- The purpose of this script is to develop and "archive" of weather, so we
- can provide our own weather history for each day."""
- yesterday = Day.objects.get(date__exact=(datetime.now() + timedelta(days=-1)).date())
- daily = {"avg": 0, "high": -60, "low": 120}
- monthly_avg = 0
- yearly_avg = 0
- daily_conditions = (
- WeatherConditions.objects.filter(
- town__slug="stonington", observation_time__year=yesterday.date.year
- )
- .filter(observation_time__month=yesterday.date.month)
- .filter(observation_time__day=yesterday.date.day)
- )
- monthly_conditions = WeatherConditions.objects.filter(
- town__slug="stonington", observation_time__year=yesterday.date.year
- ).filter(observation_time__month=yesterday.date.month)
- yearly_conditions = WeatherConditions.objects.filter(
- town__slug="stonington", observation_time__year=yesterday.date.year
- )
- if daily_conditions:
- for c in daily_conditions:
- daily["avg"] += c.temperature
- if c.temperature > daily["high"]:
- daily["high"] = c.temperature
- if c.temperature < daily["low"]:
- daily["low"] = c.temperature
- for c in monthly_conditions:
- monthly_avg += c.temperature
- for c in yearly_conditions:
- yearly_avg += c.temperature
- if monthly_avg != 0:
- monthly_avg = monthly_avg / len(monthly_conditions)
- if yearly_avg != 0:
- yearly_avg = yearly_avg / len(yearly_conditions)
- if daily_conditions:
- daily["avg"] = daily["avg"] / len(daily_conditions)
- yesterday.daily_avg_temp = str(daily["avg"])
- yesterday.daily_high_temp = str(daily["high"])
- yesterday.daily_low_temp = str(daily["low"])
- yesterday.monthly_avg_temp = str(monthly_avg)
- yesterday.yearly_avg_temp = str(yearly_avg)
- yesterday.save()
|