Question: from dateutil import parser from dateutil import tz import datetime import pytz def daytime ( time , daycycle ) : Returns True

from dateutil import parser
from dateutil import tz
import datetime
import pytz
def daytime(time,daycycle):
"""
Returns True if the time takes place during the day, False otherwise (and
returns None if a key does not exist in the dictionary).
A time is during the day if it is after sunrise but before sunset, as
indicated by the daycycle dictionary.
A daycycle dictionary has keys for several years (as strings). The value for
each year is also a dictionary, taking strings of the form 'mm-dd'. The
value for that key is a THIRD dictionary, with two keys "sunrise" and
"sunset". The value for each of those two keys is a string in 24-hour
time format.
For example, here is what part of a daycycle dictionary might look like:
"2015": {
"01-01": {
"sunrise": "07:35",
"sunset": "16:44"
},
"01-02": {
"sunrise": "07:36",
"sunset": "16:45"
},
...
}
In addition, the daycycle dictionary has a key 'timezone' that expresses the
timezone as a string. This function uses that timezone when constructing
datetime objects using data from the daycycle dictionary. Also, if the time
parameter does not have a timezone, we assume that it is in the same timezone
as the daycycle dictionary.
Parameter time: The time to check
Precondition: time is a datetime object
Parameter daycycle: The daycycle dictionary
Precondition: daycycle is a valid daycycle dictionary, as described above
"""
# HINT: Use the code from the previous exercise to get sunset AND sunrise
# Add a timezone to time if one is missing (the one from the daycycle)
# Add timezone to time if one is missing
year = str(time.year)
if year in daycycle:
month_day ="{:02d}-{:02d}".format(time.month, time.day)
if month_day in daycycle[year]:
sunrise = daycycle[year][month_day]["sunrise"]
sunset = daycycle[year][month_day]["sunset"]
sunrise_time = datetime.datetime.strptime(sunrise,"%H:%M").time()
sunset_time = datetime.datetime.strptime(sunset,"%H:%M").time()
return sunrise_time < time.time()< sunset_time Errror "The call daytime(datetime.datetime(2015,10,31,6,0, tzinfo=),daycycle) returns False, not True." tests: def test_daytime():
"""
Test procedure for the function daytime()
"""
print('Testing daytime()')
# Find the directory with this file in it
parent = os.path.split(__file__)[0]
filepath = os.path.join(parent,'daycycle.json')
file = open(filepath)
daycycle = json.loads(file.read())
file.close()
times =[('2015-06-05T07:00:00',True,True),('2015-06-05T17:00:00',True,True),
('2015-10-31T06:00:00',False,True),('2015-10-31T17:00:00',True,False),
('2015-11-17T07:00:00',True,True),('2015-11-17T17:00:00',False,False),
('2015-12-11T07:00:00',False,True),('2015-06-05T17:00:00',True,True),
('2016-11-01T07:00:00',True,True),('2016-11-01T17:00:00',False,False),
('2017-11-17T07:00:00',False,True),('2017-11-17T17:00:00',False,False),
('2018-06-05T07:00:00',True,True),('2018-06-05T17:00:00',True,True),
('2018-11-15T07:00:00',True,True),('2018-11-15T17:00:00',False,False),
('2019-11-15T07:00:00',True,True),('2019-11-15T17:00:00',False,False)]
# CHECK THE TEST CASES
for time in times:
act = funcs.str_to_time(time[0],"America/New_York")
day = funcs.daytime(act,daycycle)
introcs.assert_equals(time[1], day)
act = funcs.str_to_time(time[0],"America/Chicago")
day = funcs.daytime(act,daycycle)
introcs.assert_equals(time[2], day)
# Test the case of no time zone (Same result as first test above.)(Added by STT)
act = funcs.str_to_time(time[0])
day = funcs.daytime(act,daycycle)
introcs.assert_equals(time[1], day)
if __name__=='__main__':
test_str_to_time()
test_daytime()
print('Module funcs passed all tests.')

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!