condition_archiver.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from datetime import datetime, timedelta
  2. from almanac.models import WeatherConditions, Day
  3. from directory.models import Town
  4. """ Condition archiver.
  5. This script is designed to be run once a day, preferably as early as possible.
  6. It does the following things:
  7. * Grabs all conditions for previous day.
  8. * Generates avg, high, and low temps for past day
  9. * Generates avg. pressure and humidity
  10. * Grabs the first Conditions weather condition
  11. * Stores all results in the corresponding "Day" object
  12. The purpose of this script is to develop and "archive" of weather, so we
  13. can provide our own weather history for each day."""
  14. yesterday = Day.objects.get(date__exact=(datetime.now() + timedelta(days=-1)).date())
  15. daily = {"avg": 0, "high": -60, "low": 120}
  16. monthly_avg = 0
  17. yearly_avg = 0
  18. daily_conditions = (
  19. WeatherConditions.objects.filter(
  20. town__slug="stonington", observation_time__year=yesterday.date.year
  21. )
  22. .filter(observation_time__month=yesterday.date.month)
  23. .filter(observation_time__day=yesterday.date.day)
  24. )
  25. monthly_conditions = WeatherConditions.objects.filter(
  26. town__slug="stonington", observation_time__year=yesterday.date.year
  27. ).filter(observation_time__month=yesterday.date.month)
  28. yearly_conditions = WeatherConditions.objects.filter(
  29. town__slug="stonington", observation_time__year=yesterday.date.year
  30. )
  31. if daily_conditions:
  32. for c in daily_conditions:
  33. daily["avg"] += c.temperature
  34. if c.temperature > daily["high"]:
  35. daily["high"] = c.temperature
  36. if c.temperature < daily["low"]:
  37. daily["low"] = c.temperature
  38. for c in monthly_conditions:
  39. monthly_avg += c.temperature
  40. for c in yearly_conditions:
  41. yearly_avg += c.temperature
  42. if monthly_avg != 0:
  43. monthly_avg = monthly_avg / len(monthly_conditions)
  44. if yearly_avg != 0:
  45. yearly_avg = yearly_avg / len(yearly_conditions)
  46. if daily_conditions:
  47. daily["avg"] = daily["avg"] / len(daily_conditions)
  48. yesterday.daily_avg_temp = str(daily["avg"])
  49. yesterday.daily_high_temp = str(daily["high"])
  50. yesterday.daily_low_temp = str(daily["low"])
  51. yesterday.monthly_avg_temp = str(monthly_avg)
  52. yesterday.yearly_avg_temp = str(yearly_avg)
  53. yesterday.save()