def return_json_encoded_scheduled_events_in_range_inclusive(utc_start_datetime, utc_end_datetime):

        assert isinstance(utc_start_datetime, datetime.datetime)
        assert isinstance(utc_end_datetime, datetime.datetime)
        assert utc_start_datetime.tzinfo == pytz.utc
        assert utc_end_datetime.tzinfo == pytz.utc

        assert utc_start_datetime <= utc_end_datetime

        candidate_events_year = utc_start_datetime.year - 1
        candidate_events_end_year = utc_end_datetime.year + 3
        all_events_in_range = False
        parsed_events_in_range = list()

        while not all_events_in_range and candidate_events_year <= candidate_events_end_year:
            raw_events_html = RawEventsHTMLReturner.return_raw_events_html(candidate_events_year)
            first_event_utc_start_time = ParsedRawEventStartTimeInUtcReturner.return_parsed_start_time_in_utc(
                raw_events_html[0:9][0].text_content(),
                raw_events_html[0:9][1].text_content()
            )

            last_event_utc_start_time = ParsedRawEventStartTimeInUtcReturner.return_parsed_start_time_in_utc(
                raw_events_html[raw_events_html.__len__() - 9: raw_events_html.__len__() - 1][0].text_content(),
                raw_events_html[raw_events_html.__len__() - 9: raw_events_html.__len__() - 1][1].text_content(),
            )

            # start time and end time are in season
            if first_event_utc_start_time <= utc_start_datetime and last_event_utc_start_time >= utc_end_datetime:
                parsed_events_in_range.extend(ParsedEventListReturner.return_parsed_json_encoded_event_list_in_range(raw_events_html, utc_start_datetime, utc_end_datetime))
                all_events_in_range = True

            # start time is in season and end time is not
            elif first_event_utc_start_time <= utc_start_datetime and last_event_utc_start_time < utc_end_datetime:
                parsed_events_in_range.extend(ParsedEventListReturner.return_parsed_json_encoded_event_list_in_range(raw_events_html, utc_start_datetime, utc_end_datetime))
                candidate_events_year += 1

            # start time is not in season and end time is
            elif first_event_utc_start_time > utc_start_datetime and last_event_utc_start_time >= utc_end_datetime:
                parsed_events_in_range.extend(ParsedEventListReturner.return_parsed_json_encoded_event_list_in_range(raw_events_html, utc_start_datetime, utc_end_datetime))
                all_events_in_range = True

            # start time is less than season start and end time is greater than season start
            elif first_event_utc_start_time >= utc_start_datetime and last_event_utc_start_time < utc_end_datetime:
                parsed_events_in_range.extend(ParsedEventListReturner.return_parsed_json_encoded_event_list_in_range(raw_events_html, utc_start_datetime, utc_end_datetime))
                candidate_events_year += 1

            # neither start time greater than season
            elif last_event_utc_start_time < utc_start_datetime:
                candidate_events_year += 1

            # end time less than season
            elif first_event_utc_start_time > utc_end_datetime:
                all_events_in_range = True

            else:
                raise RuntimeError("unexpected {0} - {1}".format(first_event_utc_start_time, last_event_utc_start_time))

        return parsed_events_in_range
Beispiel #2
0
    def test_expected(self):
        schedule_html = open("static/schedule.html").read()
        raw_events = TestRawEventsReturner.return_raw_events_html(schedule_html)
        parsed_event_list_result = ParsedEventListReturner.return_parsed_event_list(raw_events)

        assert parsed_event_list_result is not None
        assert 1230 == len(parsed_event_list_result)

        for event in parsed_event_list_result:
            assert isinstance(event, Event)
            assert event.home_team_name is not None
            assert event.visiting_team_name is not None
            assert event.start_time is not None
    def return_scheduled_events_in_range_inclusive(utc_start_datetime,
                                                   utc_end_datetime):

        assert isinstance(utc_start_datetime, datetime.datetime)
        assert isinstance(utc_end_datetime, datetime.datetime)
        assert utc_start_datetime.tzinfo == pytz.utc
        assert utc_end_datetime.tzinfo == pytz.utc

        assert utc_start_datetime <= utc_end_datetime

        candidate_events_year = utc_start_datetime.year - 1
        candidate_events_end_year = utc_end_datetime.year + 3
        all_events_in_range = False
        parsed_events_in_range = list()

        while not all_events_in_range and candidate_events_year <= candidate_events_end_year:
            raw_events_html = RawEventsHTMLReturner.return_raw_events_html(
                candidate_events_year)
            first_event_utc_start_time = ParsedRawEventStartTimeInUtcReturner.return_parsed_start_time_in_utc(
                raw_events_html[0:9][0].text_content(),
                raw_events_html[0:9][1].text_content())

            last_event_utc_start_time = ParsedRawEventStartTimeInUtcReturner.return_parsed_start_time_in_utc(
                raw_events_html[raw_events_html.__len__() -
                                9:raw_events_html.__len__() -
                                1][0].text_content(),
                raw_events_html[raw_events_html.__len__() -
                                9:raw_events_html.__len__() -
                                1][1].text_content(),
            )

            # start time and end time are in season
            if first_event_utc_start_time <= utc_start_datetime and last_event_utc_start_time >= utc_end_datetime:
                parsed_events_in_range.extend(
                    ParsedEventListReturner.return_parsed_event_list_in_range(
                        raw_events_html, utc_start_datetime, utc_end_datetime))
                all_events_in_range = True

            # start time is in season and end time is not
            elif first_event_utc_start_time <= utc_start_datetime and last_event_utc_start_time < utc_end_datetime:
                parsed_events_in_range.extend(
                    ParsedEventListReturner.return_parsed_event_list_in_range(
                        raw_events_html, utc_start_datetime, utc_end_datetime))
                candidate_events_year += 1

            # start time is not in season and end time is
            elif first_event_utc_start_time > utc_start_datetime and last_event_utc_start_time >= utc_end_datetime:
                parsed_events_in_range.extend(
                    ParsedEventListReturner.return_parsed_event_list_in_range(
                        raw_events_html, utc_start_datetime, utc_end_datetime))
                all_events_in_range = True

            # start time is less than season start and end time is greater than season start
            elif first_event_utc_start_time >= utc_start_datetime and last_event_utc_start_time < utc_end_datetime:
                parsed_events_in_range.extend(
                    ParsedEventListReturner.return_parsed_event_list_in_range(
                        raw_events_html, utc_start_datetime, utc_end_datetime))
                candidate_events_year += 1

            # neither start time greater than season
            elif last_event_utc_start_time < utc_start_datetime:
                candidate_events_year += 1

            # end time less than season
            elif first_event_utc_start_time > utc_end_datetime:
                all_events_in_range = True

            else:
                raise RuntimeError("unexpected {0} - {1}".format(
                    first_event_utc_start_time, last_event_utc_start_time))

        return parsed_events_in_range
Beispiel #4
0
def return_json_encoded_schedule(season_start_year):
    raw_events = RawEventsHTMLReturner.return_raw_events_html(season_start_year=season_start_year)
    parsed_event_list = ParsedEventListReturner.return_parsed_json_encoded_event_list(raw_html_events=raw_events)
    # TODO: change hard-coded end year value
    return json.dumps(Schedule(parsed_event_list, start_year=season_start_year, end_year=season_start_year + 1), cls=ScheduleJsonEncoder)
Beispiel #5
0
def return_schedule(season_start_year):
    raw_events = RawEventsHTMLReturner.return_raw_events_html(season_start_year=season_start_year)
    parsed_event_list = ParsedEventListReturner.return_parsed_event_list(raw_html_events=raw_events)
    # TODO: change hard-coded end season_start_year value
    return Schedule(parsed_event_list, start_year=season_start_year, end_year=season_start_year + 1)