"""HuntLibrary.py
Schedule and calendar calculations for determining state of the HL A11 performance space and environs.
"""
import datetime
#================================================================
holidays = [
datetime.date(2023, 9, 4), # Labor Day
datetime.date(2023, 10, 16), # Mon of Fall Break
datetime.date(2023, 10, 17),
datetime.date(2023, 10, 18),
datetime.date(2023, 10, 19),
datetime.date(2023, 10, 20), # Fri of Fall Break
datetime.date(2023, 11, 7), # Tue Democracy Day
datetime.date(2023, 11, 22), # Wed of Thanksgiving break
datetime.date(2023, 11, 23), # Thu of Thanksgiving break
datetime.date(2023, 11, 24), # Fri of Thanksgiving break
]
class_start_time = datetime.time(14,0,0) # 2:00 PM
class_end_time = datetime.time(15,50,0) # 3:50 PM
#================================================================
[docs]
def datetime_properties(now):
"""Given a datetime object, return a dictionary with the time and a number
of properties useful for time-based policy decisions.
"""
now_date = now.date() # extract a date object
now_time = now.time() # extract a time object
weekday = now_date.weekday() # Monday is 0, Sunday is 6
hour = now_time.hour
minute = now_time.minute
result = dict()
result['time'] = now
result['string'] = now.strftime("%Y-%m-%d %a %b %d %H:%M:%S")
# true if the day is on a weekend
result['is_weekend'] = (weekday == 5) or (weekday == 6)
# true if the date falls on a campus holiday
result['is_campus_holiday'] = (now_date in holidays)
# true if the time falls during the regular business day on a non-holiday
result['is_business_hours'] = (not result['is_weekend']
and (not result['is_campus_holiday'])
and (hour >= 8) and (hour < 18))
# true if the date and time fall during class
result['is_class_time'] = (((weekday == 1) or (weekday == 3)) # Tue or Thu
and (not result['is_campus_holiday'])
and (now_time >= class_start_time)
and (now_time < class_end_time))
# true if time and date are reasonable for active operation
result['is_show_time'] = result['is_business_hours'] and (not result['is_class_time']) and (minute > 49)
return result
#================================================================
[docs]
def current_time_properties():
"""Return a dictionary with the current time and a number of properties useful for time-based policy decisions.
"""
now = datetime.datetime.now() # datetime() object with both date and time
return datetime_properties(now)
#================================================================
# The following section is run when this is loaded as a script.
if __name__ == "__main__":
def test(sample):
print(datetime_properties(sample))
test(datetime.datetime(2023, 8, 28, 17, 59))
test(datetime.datetime(2023, 8, 28, 18, 0))
test(datetime.datetime(2023, 8, 29, 14, 1))
test(datetime.datetime(2023, 9, 3, 4, 0))
test(datetime.datetime(2023, 10, 17, 14, 1))