def test_output(): """ test that outputs are the expected values for a test list with 2 events each day. Also, test that when the date range is one day to itself get_free_times returns an enrty for a single day and contains the correct values. """ li1 = get_free_times(t1, t3, d1, d2, ev4) assert len(li1) == 5 days = [] times = [[0, 2], [4, 5], [11, 15]] for i in range(3): days.append(arrow.get(d1).replace(days=i)) assert len(li1[i]) == 3 for j in range(3): assert li1[i][j]['begin'] == days[i].replace( hour=times[j][0]).isoformat() assert li1[i][j]['end'] == days[i].replace( hour=times[j][1]).isoformat() li2 = get_free_times(t1, t3, d1, d1, ev4) assert len(li2) == 1 for i in range(3): assert li1[0][i]['begin'] == li2[0][i]['begin'] assert li1[0][i]['end'] == li2[0][i]['end']
def test_overlapping(): """ make sure no free times are given between overlapping appointments """ li1 = get_free_times(t1, t4, d1, d2, ev1) li2 = get_free_times(t1, t4, d1, d2, ev3) assert len(li1) == len(li2) for i in range(len(li1)): assert len(li1[i]) == len(li2[i]) for j in range(len(li1[i])): assert li1[i][j]['begin'] == li2[i][j]['begin'] assert li1[i][j]['end'] == li2[i][j]['end']
def test_invalid(): """ test for invalid inputs """ assert get_free_times(t2, t1, d1, d2, ev1) == [] #time range can't go backwards assert get_free_times(t1, t1, d1, d2, ev1) == [] #no time gap would crash Appt class assert get_free_times(t1, t3, d2, d1, ev1) == [] #date range can't go backwards assert get_free_times(t2, t3, d1, d1, ev1) != [ ] #searching for 1 day is okay
def get_free_times_10_test(): """ Tests a complex busy schedule. """ begin_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=9, minute=0, second=0, microsecond=0, day=16, month=11, year=2015) end_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=17, minute=0, second=0, microsecond=0, day=20, month=11, year=2015) busy = [{'start': {'dateTime': '2015-11-16T09:00:00-08:00'}, 'end': {'dateTime': '2015-11-18T11:00:00-08:00'}}, {'start': {'dateTime': '2015-11-19T09:00:00-08:00'}, 'end': {'dateTime': '2015-11-19T13:00:00-08:00'}}, {'start': {'dateTime': '2015-11-19T15:00:00-08:00'}, 'end': {'dateTime': '2015-11-19T16:00:00-08:00'}}, {'start': {'dateTime': '2015-11-20T16:00:00-08:00'}, 'end': {'dateTime': '2015-11-20T17:00:00-08:00'}}] free = [('2015-11-18T11:00:00-08:00', '2015-11-18T17:00:00-08:00'), ('2015-11-19T13:00:00-08:00', '2015-11-19T15:00:00-08:00'), ('2015-11-19T16:00:00-08:00', '2015-11-20T16:00:00-08:00')] assert free == get_free_times(busy, begin_date, end_date)
def flash_free_times(): """ flash free times, from get_free_times """ event_list = [] for event in flask.session['events']: event_list.append([ arrow.get(event['begin']), arrow.get(event['end']), event['name'] ]) start_time = flask.session['begin_time'] end_time = flask.session['end_time'] start_date = flask.session['begin_date'] end_date = flask.session['end_date'] free_times = get_free_times(start_time, end_time, start_date, end_date, event_list) if free_times == []: flask.flash("Invalid date or time range was entered") else: for day in free_times: if day == []: #there are no free times today flask.flash("Busy all day") flask.flash("") continue flask.flash("Free times on {}:".format( arrow.get(day[0]['begin']).format("YYYY/MM/DD"))) for t in day: flask.flash("{} to {}".format( arrow.get(t['begin']).format("h:mm A"), arrow.get(t['end']).format("h:mm A"))) flask.flash("")
def init_times_list(): """ Initializes the free times list. """ busy_dict = get_times_db() busy = get_busy_times(busy_dict) flask.session["free_times"] = get_free_times(busy, flask.session["begin_date"], flask.session["end_date"])
def get_free_times_1_test(): """ Tests no busy times. """ begin_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=9, minute=0, second=0, microsecond=0, day=16, month=11, year=2015) end_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=17, minute=0, second=0, microsecond=0, day=20, month=11, year=2015) busy = [] free = [('2015-11-16T09:00:00-08:00', '2015-11-20T17:00:00-08:00')] assert free == get_free_times(busy, begin_date, end_date)
def get_free_times_3_test(): """ Tests only one busy time at end of the interval. """ begin_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=9, minute=0, second=0, microsecond=0, day=16, month=11, year=2015) end_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=17, minute=0, second=0, microsecond=0, day=20, month=11, year=2015) busy = [{'start': {'dateTime': '2015-11-20T16:00:00-08:00'}, 'end': {'dateTime': '2015-11-20T17:00:00-08:00'}}] free = [('2015-11-16T09:00:00-08:00', '2015-11-20T16:00:00-08:00')] assert free == get_free_times(busy, begin_date, end_date)
def list_times(service): """ Lists the times from the selected calendar in ascending order. :param service: a google 'service' object :return: busy is a sorted list of busy times and free is a sorted list of free times for the selected calendar(s) """ app.logger.debug('Entering list_times') print('begin {}'.format(flask.session['begin_date'])) print('end {}'.format(flask.session['end_date'])) events = get_events(service) busy = get_busy_times(events) free = get_free_times(busy, flask.session["begin_date"], flask.session['end_date']) return busy, free
def get_free_times_11_test(): """ Tests two busy times, last one ends at end of a day that is not the end day. """ begin_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=9, minute=0, second=0, microsecond=0, day=16, month=11, year=2015) end_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=17, minute=0, second=0, microsecond=0, day=20, month=11, year=2015) busy = [{'start': {'dateTime': '2015-11-16T09:00:00-08:00'}, 'end': {'dateTime': '2015-11-16T17:00:00-08:00'}}, {'start': {'dateTime': '2015-11-18T09:00:00-08:00'}, 'end': {'dateTime': '2015-11-18T17:00:00-08:00'}}] free = [('2015-11-17T09:00:00-08:00', '2015-11-17T17:00:00-08:00'), ('2015-11-19T09:00:00-08:00', '2015-11-20T17:00:00-08:00')] assert free == get_free_times(busy, begin_date, end_date)
def get_free_times_9_test(): """ Tests two busy times, one in the middle on the start day and one at the end. """ begin_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=9, minute=0, second=0, microsecond=0, day=16, month=11, year=2015) end_date = arrow.get().replace( tzinfo=tz.tzlocal(), hour=17, minute=0, second=0, microsecond=0, day=20, month=11, year=2015) busy = [{'start': {'dateTime': '2015-11-16T10:00:00-08:00'}, 'end': {'dateTime': '2015-11-16T11:00:00-08:00'}}, {'start': {'dateTime': '2015-11-20T16:00:00-08:00'}, 'end': {'dateTime': '2015-11-20T17:00:00-08:00'}}] free = [('2015-11-16T09:00:00-08:00', '2015-11-16T10:00:00-08:00'), ('2015-11-16T11:00:00-08:00', '2015-11-20T16:00:00-08:00')] assert free == get_free_times(busy, begin_date, end_date)
def list_times(service): """ Lists the times from the selected calendar in ascending order. :param service: a google 'service' object :return: busy is a sorted list of busy times and free is a sorted list of free times for the selected calendar(s) """ app.logger.debug("Entering list_times") events = get_events(service) busy = get_busy_times(events) add_times_db(busy) if flask.session["main-page"] == "add-times.html": busy_dict = get_times_db() busy = get_busy_times(busy_dict) free = get_free_times(busy, flask.session["begin_date"], flask.session["end_date"]) return busy, free
def create_ordered_free_times(meeting_id): info = db_interactions.get_meeting_info(meeting_id) start_time = info['st_time'] end_time = info['end_time'] start_date = info['st_date'] end_date = info['end_date'] ev_list = info['busy_times'] free_times = get_free_times(start_time, end_time, start_date, end_date, ev_list) #put string values in for display final_list = [] for day in free_times: final_list.append([]) for apt in day: to_add = {} to_add['day'] = arrow.get(apt['begin']).format("MM/DD") to_add['begin'] = arrow.get(apt['begin']).format("h:mm A") to_add['end'] = arrow.get(apt['end']).format("h:mm A") final_list[-1].append(to_add) flask.session['ordered_free_time'] = final_list