Exemple #1
0
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']
Exemple #2
0
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']
Exemple #3
0
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
Exemple #4
0
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)
Exemple #5
0
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("")
Exemple #6
0
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"])
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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
Exemple #13
0
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