Source code for WunderWeather.forecast

"""
.. module:: forecast
   :platform: Unix, Windows
   :synopsis: Module to abstract the forecast data features for wunderground

.. moduleauthor:: Tyler Santos <1tsantos at gmail.com>

"""
__docformat__ = 'reStructuredText'

# builtin P&Ms
from collections import defaultdict

# local Ms
#from weather_base import WeatherBase
from WunderWeather.weather_base import WeatherBase


[docs]class Forecast(WeatherBase): """Wrapper for one Forecast-y type data feature response. """ def __init__(self, data, *args, **kwargs): super(Forecast, self).__init__(data, *args, **kwargs) """constructor to interface with feature response Args: data (dict): JSON response """ pass @property def date(self): return self.extract_value(['txt_forecast', 'date']) @property def periods(self): """Abstract the periods for given forecast Notes: In a forecast response there are two list of dictionaries. One list is of text representations for each period and the other list is detailed data of each period. This member joins the two lists together, merging dictionaries of matching period keys. Each list is not always sorted in period increasing order and some periods may be missing from each list. Attributes: periods (`defaultdict`): of period data txt_periods (dict): list of dicts representing text period data simple_periods (dict): list of dict representing detailed period data list_of_periods (str): single list of period dicts for processing period_dict (dict): One period in a period list being processed Returns: list of Period instances """ periods = defaultdict(dict) txt_periods = self.extract_value(['txt_forecast', 'forecastday']) simple_periods = self.extract_value(['simpleforecast', 'forecastday']) for list_of_periods in (txt_periods, simple_periods): if list_of_periods: for period_dict in list_of_periods: periods[period_dict['period']] = { **periods[period_dict['period']], **period_dict} if periods: return [Period(data=val) for prd, val in periods.items()]
[docs]class Period(WeatherBase): """Wrapper for one Period in a forecast """ def __init__(self,data,*args,**kwargs): super(Period,self).__init__(data,*args,**kwargs) pass @property def period(self): return self.extract_value(['period']) @property def date_pretty(self): return self.extract_value(['date','pretty']) @property def text(self): return self.extract_value(['fcttext']) @property def text_metric(self): return self.extract_value(['fcttext_metric']) @property def high_temp_f(self): return self.extract_value(['high','fahrenheit'])