"""
.. module:: test
:platform: Unix, Windows
:synopsis: Module to run tests for features
.. moduleauthor:: Tyler Santos <1tsantos7 at gmail.com>
"""
__docformat__ = 'reStructuredText'
# builtin P&Ms
import unittest
from pprint import pprint
# TODO: allow for API key to be passed in or Env Var
api_key = ''
[docs]def run_test():
#w = weather.Extract(api_key,settings={"lang":"FR"})
w = weather.Extract(api_key)
# This willa actually run the connx
#now = w.for_today_now(['MA','Boston'])
#now = w.today_now('02481')
# this will use cached version for testing
#feature_key = weather.Extract.FEATURE_RESPONSE_MAP['now']
#now = today.Now(data=today.now_response[feature_key])
# print("TEMP:",now.temp_f)
# print(type(now.temp_f))
# print("Nonshort:",now.data.display_location.full)
# pprint(now.data)
# feature_key = weather.Extract.FEATURE_RESPONSE_MAP['date']
# d = date.Date(data=date.date_response[feature_key])
# print("TEMP:",d.temp_f)
# # print all observations for the date specified
# [print(obs.date_pretty,obs.temp_f,obs.heat_index_f) for obs in d.observations]
# make a composite features request
query = ['MA','Boston']
feature_context = (
('now',''),
('today_historical',''),
('date',"20161111"),
)
[now,history,date] = w.features(query,feature_context)
print(now)
print(history)
print(date)
# this will use cached version for testing
#feature_key = weather.Extract.FEATURE_RESPONSE_MAP['daycast']
#feature_key = weather.Extract.FEATURE_RESPONSE_MAP['weekcast']
# print(feature_key)
# pprint(forecast.forecast_10_day_response)
# print('\n\n')
#response = forecast.daycast_response[feature_key]
#response = forecast.forecast_10_day_response[feature_key]
#futurecast = forecast.Forecast(data=response)
# print("DATE:",futurecast.date)
# for period in futurecast.periods:
# print(period.period)
# pprint(period.data)
# print(period.date_pretty)
# print(period.data.date.pretty)
# print('\n\n')
# Testing hurricane logic
#hurricane = w.hurricane()
# pprint(hurricane.data)
[docs]class TestAlerts(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'alerts'
response = test_responses.alerts_response
# setup for feature
resp_feature_key = Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = Extract.get_feature_class(feature_key)
# create response
self.test_alerts = ctor({resp_feature_key: response[resp_feature_key]})
[docs] def test_get_item_count(self):
self.assertEqual(len(self.test_alerts.data.alerts), 1,
'Incorrect number of items')
[docs] def test_get_one_item_data(self):
self.assertEqual(self.test_alerts.data.alerts[0].description, 'Heat Advisory',
'Incorrect data value')
[docs]class TestTodayHistorical(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'today_historical'
response = test_responses.historical_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_today_historical = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(self.test_today_historical.data.temp_high.normal.F, '71',
'data based gets are broken')
[docs] def test_shorthand_based_get(self):
self.assertEqual(self.test_today_historical.high_avg_temp_f, '71',
'shorhand gets are broken')
[docs]class TestAstronomy(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'astronomy'
response = test_responses.astronomy_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_astronomy = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(self.test_astronomy.data.sunrise.hour, '7',
'data based gets are broken')
[docs]class TestTodayNow(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'now'
response = test_responses.now_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response obj instance
self.test_today_now = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(self.test_today_now.data.display_location.full, 'Boston, MA',
'data based gets are broken')
[docs] def test_shorthand_based_get(self):
self.assertEqual(self.test_today_now.temp_f, 47.1,
'shorhand gets are broken')
[docs]class TestHurricane(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'hurricane'
response = test_responses.hurricane_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_hurricane = ctor(
{resp_feature_key: response[resp_feature_key]})
[docs] def test_data_based_get(self):
self.assertEqual(self.test_hurricane.data.currenthurricane[0].stormInfo.stormName_Nice, "Hurricane Daniel",
'data based gets are broken')
[docs]class TestDaycast(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'daycast'
response = test_responses.daycast_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_daycast = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(len(self.test_daycast.data.txt_forecast.forecastday), 8,
'data based gets are broken')
[docs] def test_shorthand_based_get(self):
self.assertEqual(len(self.test_daycast.periods), 8,
'shorhand gets are broken')
[docs] def test_shorthand_child_based_get(self):
period = self.test_daycast.periods[1]
self.assertEqual(period.high_temp_f, "68",
'shorhand child gets are broken')
[docs]class TestWeekcast(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'weekcast'
response = test_responses.weekcast_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_weekcast = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(len(self.test_weekcast.data.txt_forecast.forecastday), 20,
'data based gets are broken')
[docs] def test_shorthand_based_get(self):
self.assertEqual(len(self.test_weekcast.periods), 20,
'shorhand gets are broken')
[docs] def test_shorthand_child_based_get(self):
period = self.test_weekcast.periods[1]
self.assertEqual(period.high_temp_f, "75",
'shorhand child gets are broken')
[docs]class TestGeolookup(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'geolookup'
response = test_responses.geolookup_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_geolookup = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(len(self.test_geolookup.data.nearby_weather_stations), 2,
'data based gets are broken')
[docs]class TestDate(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'date'
response = test_responses.date_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_date = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(len(self.test_date.data.observations), 25,
'data based gets are broken')
[docs] def test_shorthand_based_get(self):
self.assertEqual(len(self.test_date.observations), 25,
'shorhand gets are broken')
[docs] def test_shorthand_child_based_get(self):
observation = self.test_date.observations[1]
self.assertEqual(observation.temp_f, "39.9",
'shorhand child gets are broken')
[docs]class TestHourlyDaycast(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'hourly_daycast'
response = test_responses.hourly_daycast_response
# setup for feature
resp_feature_key = Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = Extract.get_feature_class(feature_key)
# create response
self.test_hourly_daycast = ctor(
{resp_feature_key: response[resp_feature_key]})
[docs] def test_get_item_count(self):
self.assertEqual(len(self.test_hourly_daycast.data.hourly_forecast), 36,
'Incorrect number of items')
[docs] def test_get_one_item_data(self):
self.assertEqual(self.test_hourly_daycast.data.hourly_forecast[0].temp.english, '66',
'Incorrect data value')
[docs]class TestRange(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'date_range'
response = test_responses.date_range_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_date_range = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(self.test_date_range.data.temp_high.avg.F, '71',
'data based gets are broken')
[docs] def test_shorthand_based_get(self):
self.assertEqual(self.test_date_range.high_avg_temp_f, '71',
'shorhand gets are broken')
[docs]class TestRawtide(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'rawtide'
response = test_responses.rawtide_response
# setup for feature
resp_feature_key = Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = Extract.get_feature_class(feature_key)
# create response
self.test_rawtide = ctor(response[resp_feature_key])
[docs] def test_get_item_count(self):
self.assertEqual(len(self.test_rawtide.data.tideInfo), 1,
'Incorrect number of items')
[docs] def test_get_one_item_data(self):
self.assertEqual(self.test_rawtide.data.tideInfo[0].tideSite,
"Newport Beach, Newport Bay Entrance, Corona del Mar, California",
'Incorrect data value')
[docs]class TestTide(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'tide'
response = test_responses.tide_response
# setup for feature
resp_feature_key = Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = Extract.get_feature_class(feature_key)
# create response
self.test_tide = ctor(response[resp_feature_key])
[docs] def test_get_item_count(self):
self.assertEqual(len(self.test_tide.data.tideInfo), 1,
'Incorrect number of items')
[docs] def test_get_one_item_data(self):
self.assertEqual(self.test_tide.data.tideSummary[0].data.type,
"Full Moon",
'Incorrect data value')
[docs]class TestYesterday(unittest.TestCase):
[docs] def setUp(self):
# feature specific vars
feature_key = 'yesterday'
response = test_responses.yesterday_response
# setup for feature
resp_feature_key = weather.Extract.FEATURE_RESPONSE_MAP[feature_key]
ctor = weather.Extract.get_feature_class(feature_key)
# create response
self.test_yesterday = ctor(response[resp_feature_key])
[docs] def test_data_based_get(self):
self.assertEqual(len(self.test_yesterday.data.observations), 26,
'data based gets are broken')
[docs] def test_shorthand_based_get(self):
self.assertEqual(len(self.test_yesterday.observations), 26,
'shorhand gets are broken')
[docs] def test_shorthand_child_based_get(self):
observation = self.test_yesterday.observations[1]
self.assertEqual(observation.temp_f, "59.0",
'shorhand child gets are broken')
[docs]def run_snippet():
location = 'MA/Boston'
extractor = weather.Extract(api_key)
#[location,current] = extractor.features("MA/Boston",(('geolookup',''),('now','')))
#print("Current Temperature in %s is: %s" %(location.data.city,current.temp_f))
#[satellite] = extractor.features('MA/Boston',(('satellite',''),))
#response = extractor.alerts(location)
#response = extractor.astronomy(location)
#response = extractor.tide(location)
response = extractor.hourly_weekcast(location)
print(response)
pprint(response.data)
pass
[docs]def main():
#run_test()
run_snippet()
if __name__ == '__main__':
# main()
import os
import sys
sys.path.insert(0, os.path.abspath('../'))
#local Ms
import test_responses
import weather
from weather import *
#unittest.main()
main()