condition_archiver.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 = 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)
  19. monthly_conditions = WeatherConditions.objects.filter(town__slug='stonington', observation_time__year=yesterday.date.year).filter(observation_time__month=yesterday.date.month)
  20. yearly_conditions = WeatherConditions.objects.filter(town__slug='stonington', observation_time__year=yesterday.date.year)
  21. if daily_conditions:
  22. for c in daily_conditions:
  23. daily['avg'] += c.temperature
  24. if c.temperature > daily['high']:
  25. daily['high'] = c.temperature
  26. if c.temperature < daily['low']:
  27. daily['low'] = c.temperature
  28. for c in monthly_conditions:
  29. monthly_avg += c.temperature
  30. for c in yearly_conditions:
  31. yearly_avg += c.temperature
  32. if monthly_avg != 0:
  33. monthly_avg = monthly_avg / len(monthly_conditions)
  34. if yearly_avg != 0:
  35. yearly_avg = yearly_avg / len(yearly_conditions)
  36. if daily_conditions:
  37. daily['avg'] = daily['avg'] / len(daily_conditions)
  38. yesterday.daily_avg_temp=str(daily['avg'])
  39. yesterday.daily_high_temp=str(daily['high'])
  40. yesterday.daily_low_temp=str(daily['low'])
  41. yesterday.monthly_avg_temp=str(monthly_avg)
  42. yesterday.yearly_avg_temp=str(yearly_avg)
  43. yesterday.save()