import mock
import os
import pandas as pd
from datetime import datetime
from flexmock import flexmock
from sportsreference import utils
from sportsreference.constants import HOME
from sportsreference.ncaab.constants import BOXSCORES_URL, SCHEDULE_URL
from sportsreference.ncaab.boxscore import Boxscore, Boxscores


MONTH = 11
YEAR = 2017

BOXSCORE = '2017-11-24-21-purdue'


def read_file(filename):
    filepath = os.path.join(os.path.dirname(__file__), 'ncaab', filename)
    return open('%s' % filepath, 'r').read()


def mock_pyquery(url):
    class MockPQ:
        def __init__(self, html_contents):
            self.status_code = 200
            self.html_contents = html_contents
            self.text = html_contents

        def __call__(self, div):
            return read_file('table.html')

    if url == BOXSCORES_URL % (MONTH, 11, YEAR):
        return MockPQ(read_file('boxscores-11-11-2017.html'))
    if url == BOXSCORES_URL % (MONTH, 11, YEAR):
        return MockPQ(read_file('boxscores-11-12-2017.html'))
    boxscore = read_file('%s.html' % BOXSCORE)
    return MockPQ(boxscore)


class MockDateTime:
    def __init__(self, year, month):
        self.year = year
        self.month = month


class TestNCAABBoxscore:
    @mock.patch('requests.get', side_effect=mock_pyquery)
    def setup_method(self, *args, **kwargs):
        self.results = {
            'date': 'November 24, 2017',
            'location': 'Imperial Arena at Atlantis Resort, Paradise Island',
            'winner': HOME,
            'winning_name': 'Purdue',
            'winning_abbr': 'PURDUE',
            'losing_name': 'Arizona',
            'losing_abbr': 'ARIZONA',
            'pace': 71.8,
            'away_ranking': 2,
            'away_win_percentage': .500,
            'away_wins': 3,
            'away_losses': 3,
            'away_minutes_played': 200,
            'away_field_goals': 25,
            'away_field_goal_attempts': 59,
            'away_field_goal_percentage': .424,
            'away_two_point_field_goals': 22,
            'away_two_point_field_goal_attempts': 42,
            'away_two_point_field_goal_percentage': .524,
            'away_three_point_field_goals': 3,
            'away_three_point_field_goal_attempts': 17,
            'away_three_point_field_goal_percentage': .176,
            'away_free_throws': 11,
            'away_free_throw_attempts': 16,
            'away_free_throw_percentage': .688,
            'away_offensive_rebounds': 6,
            'away_defensive_rebounds': 16,
            'away_total_rebounds': 22,
            'away_assists': 13,
            'away_steals': 4,
            'away_blocks': 3,
            'away_turnovers': 11,
            'away_personal_fouls': 20,
            'away_points': 64,
            'away_true_shooting_percentage': .480,
            'away_effective_field_goal_percentage': .449,
            'away_three_point_attempt_rate': .288,
            'away_free_throw_attempt_rate': .271,
            'away_offensive_rebound_percentage': 18.8,
            'away_defensive_rebound_percentage': 72.7,
            'away_total_rebound_percentage': 40.7,
            'away_assist_percentage': 52.0,
            'away_steal_percentage': 5.6,
            'away_block_percentage': 9.4,
            'away_turnover_percentage': 14.3,
            'away_offensive_rating': 88.9,
            'away_defensive_rating': 123.6,
            'home_ranking': 18,
            'home_win_percentage': .714,
            'home_wins': 5,
            'home_losses': 2,
            'home_minutes_played': 200,
            'home_field_goals': 31,
            'home_field_goal_attempts': 54,
            'home_field_goal_percentage': .574,
            'home_two_point_field_goals': 20,
            'home_two_point_field_goal_attempts': 32,
            'home_two_point_field_goal_percentage': .625,
            'home_three_point_field_goals': 11,
            'home_three_point_field_goal_attempts': 22,
            'home_three_point_field_goal_percentage': .500,
            'home_free_throws': 16,
            'home_free_throw_attempts': 21,
            'home_free_throw_percentage': .762,
            'home_offensive_rebounds': 6,
            'home_defensive_rebounds': 26,
            'home_total_rebounds': 32,
            'home_assists': 19,
            'home_steals': 6,
            'home_blocks': 7,
            'home_turnovers': 14,
            'home_personal_fouls': 19,
            'home_points': 89,
            'home_true_shooting_percentage': .696,
            'home_effective_field_goal_percentage': .676,
            'home_three_point_attempt_rate': .407,
            'home_free_throw_attempt_rate': .389,
            'home_offensive_rebound_percentage': 27.3,
            'home_defensive_rebound_percentage': 81.3,
            'home_total_rebound_percentage': 59.3,
            'home_assist_percentage': 61.3,
            'home_steal_percentage': 8.3,
            'home_block_percentage': 16.7,
            'home_turnover_percentage': 18.1,
            'home_offensive_rating': 123.6,
            'home_defensive_rating': 88.9
        }
        flexmock(utils) \
            .should_receive('_todays_date') \
            .and_return(MockDateTime(YEAR, MONTH))

        self.boxscore = Boxscore('2017-11-24-21-purdue')

    def test_ncaab_boxscore_returns_requested_boxscore(self):
        for attribute, value in self.results.items():
            assert getattr(self.boxscore, attribute) == value

    def test_invalid_url_yields_empty_class(self):
        flexmock(Boxscore) \
            .should_receive('_retrieve_html_page') \
            .and_return(None)

        boxscore = Boxscore(BOXSCORE)

        for key, value in boxscore.__dict__.items():
            if key == '_uri':
                continue
            assert value is None

    def test_ncaab_boxscore_dataframe_returns_dataframe_of_all_values(self):
        df = pd.DataFrame([self.results], index=[BOXSCORE])

        # Pandas doesn't natively allow comparisons of DataFrames.
        # Concatenating the two DataFrames (the one generated during the test
        # and the expected one above) and dropping duplicate rows leaves only
        # the rows that are unique between the two frames. This allows a quick
        # check of the DataFrame to see if it is empty - if so, all rows are
        # duplicates, and they are equal.
        frames = [df, self.boxscore.dataframe]
        df1 = pd.concat(frames).drop_duplicates(keep=False)

        assert df1.empty

    def test_ncaab_boxscore_players(self):
        boxscore = Boxscore(BOXSCORE)

        assert len(boxscore.home_players) == 12
        assert len(boxscore.away_players) == 10

        for player in boxscore.home_players:
            assert not player.dataframe.empty
        for player in boxscore.away_players:
            assert not player.dataframe.empty


class TestNCAABBoxscores:
    def setup_method(self):
        self.expected = {
            '11-11-2017': [
                {'boxscore': '2017-11-11-13-buffalo',
                 'away_name': 'Canisius',
                 'away_abbr': 'canisius',
                 'away_score': 75,
                 'away_rank': None,
                 'home_name': 'Buffalo',
                 'home_abbr': 'buffalo',
                 'home_score': 80,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Buffalo',
                 'winning_abbr': 'buffalo',
                 'losing_name': 'Canisius',
                 'losing_abbr': 'canisius'},
                {'boxscore': '2017-11-11-13-fairfield',
                 'away_name': 'Penn',
                 'away_abbr': 'pennsylvania',
                 'away_score': 72,
                 'away_rank': None,
                 'home_name': 'Fairfield',
                 'home_abbr': 'fairfield',
                 'home_score': 80,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Fairfield',
                 'winning_abbr': 'fairfield',
                 'losing_name': 'Penn',
                 'losing_abbr': 'pennsylvania'},
                {'boxscore': '2017-11-11-13-florida-gulf-coast',
                 'away_name': 'Illinois State',
                 'away_abbr': 'illinois-state',
                 'away_score': 87,
                 'away_rank': None,
                 'home_name': 'Florida Gulf Coast',
                 'home_abbr': 'florida-gulf-coast',
                 'home_score': 98,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Florida Gulf Coast',
                 'winning_abbr': 'florida-gulf-coast',
                 'losing_name': 'Illinois State',
                 'losing_abbr': 'illinois-state'},
                {'boxscore': '2017-11-11-14-bradley',
                 'away_name': 'IUPUI',
                 'away_abbr': 'iupui',
                 'away_score': 53,
                 'away_rank': None,
                 'home_name': 'Bradley',
                 'home_abbr': 'bradley',
                 'home_score': 68,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Bradley',
                 'winning_abbr': 'bradley',
                 'losing_name': 'IUPUI',
                 'losing_abbr': 'iupui'},
                {'boxscore': '2017-11-11-14-ohio',
                 'away_name': 'Alabama A&M',
                 'away_abbr': 'alabama-am',
                 'away_score': 53,
                 'away_rank': None,
                 'home_name': 'Ohio',
                 'home_abbr': 'ohio',
                 'home_score': 61,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Ohio',
                 'winning_abbr': 'ohio',
                 'losing_name': 'Alabama A&M',
                 'losing_abbr': 'alabama-am'},
                {'boxscore': '2017-11-11-14-quinnipiac',
                 'away_name': 'Dartmouth',
                 'away_abbr': 'dartmouth',
                 'away_score': 77,
                 'away_rank': None,
                 'home_name': 'Quinnipiac',
                 'home_abbr': 'quinnipiac',
                 'home_score': 78,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Quinnipiac',
                 'winning_abbr': 'quinnipiac',
                 'losing_name': 'Dartmouth',
                 'losing_abbr': 'dartmouth'},
                {'boxscore': '2017-11-11-14-western-michigan',
                 'away_name': 'Siena Heights',
                 'away_abbr': 'Siena Heights',
                 'away_score': 72,
                 'away_rank': None,
                 'home_name': 'Western Michigan',
                 'home_abbr': 'western-michigan',
                 'home_score': 103,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Western Michigan',
                 'winning_abbr': 'western-michigan',
                 'losing_name': 'Siena Heights',
                 'losing_abbr': 'Siena Heights'},
                {'boxscore': '2017-11-11-15-appalachian-state',
                 'away_name': 'Toccoa Falls',
                 'away_abbr': 'Toccoa Falls',
                 'away_score': 34,
                 'away_rank': None,
                 'home_name': 'Appalachian State',
                 'home_abbr': 'appalachian-state',
                 'home_score': 135,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Appalachian State',
                 'winning_abbr': 'appalachian-state',
                 'losing_name': 'Toccoa Falls',
                 'losing_abbr': 'Toccoa Falls'},
                {'boxscore': '2017-11-11-15-brown',
                 'away_name': 'Johnson & Wales (RI)',
                 'away_abbr': 'Johnson & Wales (RI)',
                 'away_score': 78,
                 'away_rank': None,
                 'home_name': 'Brown',
                 'home_abbr': 'brown',
                 'home_score': 106,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Brown',
                 'winning_abbr': 'brown',
                 'losing_name': 'Johnson & Wales (RI)',
                 'losing_abbr': 'Johnson & Wales (RI)'},
                {'boxscore': '2017-11-11-15-drake',
                 'away_name': 'Coe',
                 'away_abbr': 'Coe',
                 'away_score': 54,
                 'away_rank': None,
                 'home_name': 'Drake',
                 'home_abbr': 'drake',
                 'home_score': 101,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Drake',
                 'winning_abbr': 'drake',
                 'losing_name': 'Coe',
                 'losing_abbr': 'Coe'},
                {'boxscore': '2017-11-11-15-la-salle',
                 'away_name': "St. Peter's",
                 'away_abbr': 'saint-peters',
                 'away_score': 40,
                 'away_rank': None,
                 'home_name': 'La Salle',
                 'home_abbr': 'la-salle',
                 'home_score': 61,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'La Salle',
                 'winning_abbr': 'la-salle',
                 'losing_name': "St. Peter's",
                 'losing_abbr': 'saint-peters'},
                {'boxscore': '2017-11-11-15-longwood',
                 'away_name': 'Stephen F. Austin',
                 'away_abbr': 'stephen-f-austin',
                 'away_score': 74,
                 'away_rank': None,
                 'home_name': 'Longwood',
                 'home_abbr': 'longwood',
                 'home_score': 61,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Stephen F. Austin',
                 'winning_abbr': 'stephen-f-austin',
                 'losing_name': 'Longwood',
                 'losing_abbr': 'longwood'},
                {'boxscore': '2017-11-11-16-arkansas-little-rock',
                 'away_name': 'Ouachita',
                 'away_abbr': 'Ouachita',
                 'away_score': 81,
                 'away_rank': None,
                 'home_name': 'Little Rock',
                 'home_abbr': 'arkansas-little-rock',
                 'home_score': 79,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Ouachita',
                 'winning_abbr': 'Ouachita',
                 'losing_name': 'Little Rock',
                 'losing_abbr': 'arkansas-little-rock'},
                {'boxscore': '2017-11-11-16-california-santa-barbara',
                 'away_name': 'North Dakota State',
                 'away_abbr': 'north-dakota-state',
                 'away_score': 66,
                 'away_rank': None,
                 'home_name': 'UCSB',
                 'home_abbr': 'california-santa-barbara',
                 'home_score': 85,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'UCSB',
                 'winning_abbr': 'california-santa-barbara',
                 'losing_name': 'North Dakota State',
                 'losing_abbr': 'north-dakota-state'},
                {'boxscore': '2017-11-11-16-depaul',
                 'away_name': 'Notre Dame',
                 'away_abbr': 'notre-dame',
                 'away_score': 72,
                 'away_rank': 14,
                 'home_name': 'DePaul',
                 'home_abbr': 'depaul',
                 'home_score': 58,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Notre Dame',
                 'winning_abbr': 'notre-dame',
                 'losing_name': 'DePaul',
                 'losing_abbr': 'depaul'},
                {'boxscore': '2017-11-11-17-duquesne',
                 'away_name': 'St. Francis (NY)',
                 'away_abbr': 'st-francis-ny',
                 'away_score': 70,
                 'away_rank': None,
                 'home_name': 'Duquesne',
                 'home_abbr': 'duquesne',
                 'home_score': 80,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Duquesne',
                 'winning_abbr': 'duquesne',
                 'losing_name': 'St. Francis (NY)',
                 'losing_abbr': 'st-francis-ny'},
                {'boxscore': '2017-11-11-18-njit',
                 'away_name': 'Wagner',
                 'away_abbr': 'wagner',
                 'away_score': 60,
                 'away_rank': None,
                 'home_name': 'NJIT',
                 'home_abbr': 'njit',
                 'home_score': 49,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Wagner',
                 'winning_abbr': 'wagner',
                 'losing_name': 'NJIT',
                 'losing_abbr': 'njit'},
                {'boxscore': '2017-11-11-19-akron',
                 'away_name': 'Cleveland State',
                 'away_abbr': 'cleveland-state',
                 'away_score': 57,
                 'away_rank': None,
                 'home_name': 'Akron',
                 'home_abbr': 'akron',
                 'home_score': 67,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Akron',
                 'winning_abbr': 'akron',
                 'losing_name': 'Cleveland State',
                 'losing_abbr': 'cleveland-state'},
                {'boxscore': '2017-11-11-19-duke',
                 'away_name': 'Utah Valley',
                 'away_abbr': 'utah-valley',
                 'away_score': 69,
                 'away_rank': None,
                 'home_name': 'Duke',
                 'home_abbr': 'duke',
                 'home_score': 99,
                 'home_rank': 1,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Duke',
                 'winning_abbr': 'duke',
                 'losing_name': 'Utah Valley',
                 'losing_abbr': 'utah-valley'},
                {'boxscore': '2017-11-11-19-elon',
                 'away_name': 'Peace',
                 'away_abbr': 'Peace',
                 'away_score': 53,
                 'away_rank': None,
                 'home_name': 'Elon',
                 'home_abbr': 'elon',
                 'home_score': 96,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Elon',
                 'winning_abbr': 'elon',
                 'losing_name': 'Peace',
                 'losing_abbr': 'Peace'},
                {'boxscore': '2017-11-11-19-marist',
                 'away_name': 'Lehigh',
                 'away_abbr': 'lehigh',
                 'away_score': 84,
                 'away_rank': None,
                 'home_name': 'Marist',
                 'home_abbr': 'marist',
                 'home_score': 76,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Lehigh',
                 'winning_abbr': 'lehigh',
                 'losing_name': 'Marist',
                 'losing_abbr': 'marist'},
                {'boxscore': '2017-11-11-19-michigan',
                 'away_name': 'North Florida',
                 'away_abbr': 'north-florida',
                 'away_score': 66,
                 'away_rank': None,
                 'home_name': 'Michigan',
                 'home_abbr': 'michigan',
                 'home_score': 86,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Michigan',
                 'winning_abbr': 'michigan',
                 'losing_name': 'North Florida',
                 'losing_abbr': 'north-florida'},
                {'boxscore': '2017-11-11-19-north-carolina-wilmington',
                 'away_name': 'North Carolina Wesleyan',
                 'away_abbr': 'North Carolina Wesleyan',
                 'away_score': 81,
                 'away_rank': None,
                 'home_name': 'North Carolina-Wilmington',
                 'home_abbr': 'north-carolina-wilmington',
                 'home_score': 105,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'North Carolina-Wilmington',
                 'winning_abbr': 'north-carolina-wilmington',
                 'losing_name': 'North Carolina Wesleyan',
                 'losing_abbr': 'North Carolina Wesleyan'},
                {'boxscore': '2017-11-11-19-presbyterian',
                 'away_name': 'Johnson University',
                 'away_abbr': 'Johnson University',
                 'away_score': 87,
                 'away_rank': None,
                 'home_name': 'Presbyterian',
                 'home_abbr': 'presbyterian',
                 'home_score': 107,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Presbyterian',
                 'winning_abbr': 'presbyterian',
                 'losing_name': 'Johnson University',
                 'losing_abbr': 'Johnson University'},
                {'boxscore': '2017-11-11-19-sam-houston-state',
                 'away_name': 'Texas-Tyler',
                 'away_abbr': 'Texas-Tyler',
                 'away_score': 51,
                 'away_rank': None,
                 'home_name': 'Sam Houston State',
                 'home_abbr': 'sam-houston-state',
                 'home_score': 91,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Sam Houston State',
                 'winning_abbr': 'sam-houston-state',
                 'losing_name': 'Texas-Tyler',
                 'losing_abbr': 'Texas-Tyler'},
                {'boxscore': '2017-11-11-19-south-dakota',
                 'away_name': 'Mayville State',
                 'away_abbr': 'Mayville State',
                 'away_score': 59,
                 'away_rank': None,
                 'home_name': 'South Dakota',
                 'home_abbr': 'south-dakota',
                 'home_score': 87,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'South Dakota',
                 'winning_abbr': 'south-dakota',
                 'losing_name': 'Mayville State',
                 'losing_abbr': 'Mayville State'},
                {'boxscore': '2017-11-11-19-toledo',
                 'away_name': "St. Joseph's",
                 'away_abbr': 'saint-josephs',
                 'away_score': 87,
                 'away_rank': None,
                 'home_name': 'Toledo',
                 'home_abbr': 'toledo',
                 'home_score': 98,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Toledo',
                 'winning_abbr': 'toledo',
                 'losing_name': "St. Joseph's",
                 'losing_abbr': 'saint-josephs'},
                {'boxscore': '2017-11-11-20-nebraska',
                 'away_name': 'Eastern Illinois',
                 'away_abbr': 'eastern-illinois',
                 'away_score': 68,
                 'away_rank': None,
                 'home_name': 'Nebraska',
                 'home_abbr': 'nebraska',
                 'home_score': 72,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Nebraska',
                 'winning_abbr': 'nebraska',
                 'losing_name': 'Eastern Illinois',
                 'losing_abbr': 'eastern-illinois'},
                {'boxscore': '2017-11-11-20-saint-marys-ca',
                 'away_name': 'Saint Francis (PA)',
                 'away_abbr': 'saint-francis-pa',
                 'away_score': 68,
                 'away_rank': None,
                 'home_name': "Saint Mary's (CA)",
                 'home_abbr': 'saint-marys-ca',
                 'home_score': 85,
                 'home_rank': 22,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': "Saint Mary's (CA)",
                 'winning_abbr': 'saint-marys-ca',
                 'losing_name': 'Saint Francis (PA)',
                 'losing_abbr': 'saint-francis-pa'},
                {'boxscore': '2017-11-11-20-texas-arlington',
                 'away_name': 'Loyola Marymount',
                 'away_abbr': 'loyola-marymount',
                 'away_score': 80,
                 'away_rank': None,
                 'home_name': 'Texas-Arlington',
                 'home_abbr': 'texas-arlington',
                 'home_score': 85,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Texas-Arlington',
                 'winning_abbr': 'texas-arlington',
                 'losing_name': 'Loyola Marymount',
                 'losing_abbr': 'loyola-marymount'},
                {'boxscore': '2017-11-11-20-western-illinois',
                 'away_name': "Saint Mary's (MN)",
                 'away_abbr': "Saint Mary's (MN)",
                 'away_score': 68,
                 'away_rank': None,
                 'home_name': 'Western Illinois',
                 'home_abbr': 'western-illinois',
                 'home_score': 109,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Western Illinois',
                 'winning_abbr': 'western-illinois',
                 'losing_name': "Saint Mary's (MN)",
                 'losing_abbr': "Saint Mary's (MN)"},
                {'boxscore': '2017-11-11-21-brigham-young',
                 'away_name': 'Mississippi Valley State',
                 'away_abbr': 'mississippi-valley-state',
                 'away_score': 61,
                 'away_rank': None,
                 'home_name': 'BYU',
                 'home_abbr': 'brigham-young',
                 'home_score': 91,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'BYU',
                 'winning_abbr': 'brigham-young',
                 'losing_name': 'Mississippi Valley State',
                 'losing_abbr': 'mississippi-valley-state'},
                {'boxscore': '2017-11-11-21-kent-state',
                 'away_name': 'Youngstown State',
                 'away_abbr': 'youngstown-state',
                 'away_score': 78,
                 'away_rank': None,
                 'home_name': 'Kent State',
                 'home_abbr': 'kent-state',
                 'home_score': 111,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Kent State',
                 'winning_abbr': 'kent-state',
                 'losing_name': 'Youngstown State',
                 'losing_abbr': 'youngstown-state'},
                {'boxscore': '2017-11-11-21-new-mexico',
                 'away_name': 'Northern New Mexico',
                 'away_abbr': 'Northern New Mexico',
                 'away_score': 76,
                 'away_rank': None,
                 'home_name': 'New Mexico',
                 'home_abbr': 'new-mexico',
                 'home_score': 147,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'New Mexico',
                 'winning_abbr': 'new-mexico',
                 'losing_name': 'Northern New Mexico',
                 'losing_abbr': 'Northern New Mexico'},
                {'boxscore': '2017-11-11-22-nevada-las-vegas',
                 'away_name': 'Florida A&M',
                 'away_abbr': 'florida-am',
                 'away_score': 66,
                 'away_rank': None,
                 'home_name': 'UNLV',
                 'home_abbr': 'nevada-las-vegas',
                 'home_score': 108,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'UNLV',
                 'winning_abbr': 'nevada-las-vegas',
                 'losing_name': 'Florida A&M',
                 'losing_abbr': 'florida-am'},
                {'boxscore': '2017-11-11-22-portland',
                 'away_name': 'Portland State',
                 'away_abbr': 'portland-state',
                 'away_score': 80,
                 'away_rank': None,
                 'home_name': 'Portland',
                 'home_abbr': 'portland',
                 'home_score': 75,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Portland State',
                 'winning_abbr': 'portland-state',
                 'losing_name': 'Portland',
                 'losing_abbr': 'portland'}
            ]
        }

    @mock.patch('requests.get', side_effect=mock_pyquery)
    def test_boxscores_search(self, *args, **kwargs):
        result = Boxscores(datetime(2017, 11, 11)).games

        assert result == self.expected

    @mock.patch('requests.get', side_effect=mock_pyquery)
    def test_boxscores_search_invalid_end(self, *args, **kwargs):
        result = Boxscores(datetime(2017, 11, 11),
                           datetime(2017, 11, 10)).games

        assert result == self.expected

    @mock.patch('requests.get', side_effect=mock_pyquery)
    def test_boxscores_search_multiple_days(self, *args, **kwargs):
        expected = {
            '11-11-2017': [
                {'boxscore': '2017-11-11-13-buffalo',
                 'away_name': 'Canisius',
                 'away_abbr': 'canisius',
                 'away_score': 75,
                 'away_rank': None,
                 'home_name': 'Buffalo',
                 'home_abbr': 'buffalo',
                 'home_score': 80,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Buffalo',
                 'winning_abbr': 'buffalo',
                 'losing_name': 'Canisius',
                 'losing_abbr': 'canisius'},
                {'boxscore': '2017-11-11-13-fairfield',
                 'away_name': 'Penn',
                 'away_abbr': 'pennsylvania',
                 'away_score': 72,
                 'away_rank': None,
                 'home_name': 'Fairfield',
                 'home_abbr': 'fairfield',
                 'home_score': 80,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Fairfield',
                 'winning_abbr': 'fairfield',
                 'losing_name': 'Penn',
                 'losing_abbr': 'pennsylvania'},
                {'boxscore': '2017-11-11-13-florida-gulf-coast',
                 'away_name': 'Illinois State',
                 'away_abbr': 'illinois-state',
                 'away_score': 87,
                 'away_rank': None,
                 'home_name': 'Florida Gulf Coast',
                 'home_abbr': 'florida-gulf-coast',
                 'home_score': 98,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Florida Gulf Coast',
                 'winning_abbr': 'florida-gulf-coast',
                 'losing_name': 'Illinois State',
                 'losing_abbr': 'illinois-state'},
                {'boxscore': '2017-11-11-14-bradley',
                 'away_name': 'IUPUI',
                 'away_abbr': 'iupui',
                 'away_score': 53,
                 'away_rank': None,
                 'home_name': 'Bradley',
                 'home_abbr': 'bradley',
                 'home_score': 68,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Bradley',
                 'winning_abbr': 'bradley',
                 'losing_name': 'IUPUI',
                 'losing_abbr': 'iupui'},
                {'boxscore': '2017-11-11-14-ohio',
                 'away_name': 'Alabama A&M',
                 'away_abbr': 'alabama-am',
                 'away_score': 53,
                 'away_rank': None,
                 'home_name': 'Ohio',
                 'home_abbr': 'ohio',
                 'home_score': 61,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Ohio',
                 'winning_abbr': 'ohio',
                 'losing_name': 'Alabama A&M',
                 'losing_abbr': 'alabama-am'},
                {'boxscore': '2017-11-11-14-quinnipiac',
                 'away_name': 'Dartmouth',
                 'away_abbr': 'dartmouth',
                 'away_score': 77,
                 'away_rank': None,
                 'home_name': 'Quinnipiac',
                 'home_abbr': 'quinnipiac',
                 'home_score': 78,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Quinnipiac',
                 'winning_abbr': 'quinnipiac',
                 'losing_name': 'Dartmouth',
                 'losing_abbr': 'dartmouth'},
                {'boxscore': '2017-11-11-14-western-michigan',
                 'away_name': 'Siena Heights',
                 'away_abbr': 'Siena Heights',
                 'away_score': 72,
                 'away_rank': None,
                 'home_name': 'Western Michigan',
                 'home_abbr': 'western-michigan',
                 'home_score': 103,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Western Michigan',
                 'winning_abbr': 'western-michigan',
                 'losing_name': 'Siena Heights',
                 'losing_abbr': 'Siena Heights'},
                {'boxscore': '2017-11-11-15-appalachian-state',
                 'away_name': 'Toccoa Falls',
                 'away_abbr': 'Toccoa Falls',
                 'away_score': 34,
                 'away_rank': None,
                 'home_name': 'Appalachian State',
                 'home_abbr': 'appalachian-state',
                 'home_score': 135,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Appalachian State',
                 'winning_abbr': 'appalachian-state',
                 'losing_name': 'Toccoa Falls',
                 'losing_abbr': 'Toccoa Falls'},
                {'boxscore': '2017-11-11-15-brown',
                 'away_name': 'Johnson & Wales (RI)',
                 'away_abbr': 'Johnson & Wales (RI)',
                 'away_score': 78,
                 'away_rank': None,
                 'home_name': 'Brown',
                 'home_abbr': 'brown',
                 'home_score': 106,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Brown',
                 'winning_abbr': 'brown',
                 'losing_name': 'Johnson & Wales (RI)',
                 'losing_abbr': 'Johnson & Wales (RI)'},
                {'boxscore': '2017-11-11-15-drake',
                 'away_name': 'Coe',
                 'away_abbr': 'Coe',
                 'away_score': 54,
                 'away_rank': None,
                 'home_name': 'Drake',
                 'home_abbr': 'drake',
                 'home_score': 101,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Drake',
                 'winning_abbr': 'drake',
                 'losing_name': 'Coe',
                 'losing_abbr': 'Coe'},
                {'boxscore': '2017-11-11-15-la-salle',
                 'away_name': "St. Peter's",
                 'away_abbr': 'saint-peters',
                 'away_score': 40,
                 'away_rank': None,
                 'home_name': 'La Salle',
                 'home_abbr': 'la-salle',
                 'home_score': 61,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'La Salle',
                 'winning_abbr': 'la-salle',
                 'losing_name': "St. Peter's",
                 'losing_abbr': 'saint-peters'},
                {'boxscore': '2017-11-11-15-longwood',
                 'away_name': 'Stephen F. Austin',
                 'away_abbr': 'stephen-f-austin',
                 'away_score': 74,
                 'away_rank': None,
                 'home_name': 'Longwood',
                 'home_abbr': 'longwood',
                 'home_score': 61,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Stephen F. Austin',
                 'winning_abbr': 'stephen-f-austin',
                 'losing_name': 'Longwood',
                 'losing_abbr': 'longwood'},
                {'boxscore': '2017-11-11-16-arkansas-little-rock',
                 'away_name': 'Ouachita',
                 'away_abbr': 'Ouachita',
                 'away_score': 81,
                 'away_rank': None,
                 'home_name': 'Little Rock',
                 'home_abbr': 'arkansas-little-rock',
                 'home_score': 79,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Ouachita',
                 'winning_abbr': 'Ouachita',
                 'losing_name': 'Little Rock',
                 'losing_abbr': 'arkansas-little-rock'},
                {'boxscore': '2017-11-11-16-california-santa-barbara',
                 'away_name': 'North Dakota State',
                 'away_abbr': 'north-dakota-state',
                 'away_score': 66,
                 'away_rank': None,
                 'home_name': 'UCSB',
                 'home_abbr': 'california-santa-barbara',
                 'home_score': 85,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'UCSB',
                 'winning_abbr': 'california-santa-barbara',
                 'losing_name': 'North Dakota State',
                 'losing_abbr': 'north-dakota-state'},
                {'boxscore': '2017-11-11-16-depaul',
                 'away_name': 'Notre Dame',
                 'away_abbr': 'notre-dame',
                 'away_score': 72,
                 'away_rank': 14,
                 'home_name': 'DePaul',
                 'home_abbr': 'depaul',
                 'home_score': 58,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Notre Dame',
                 'winning_abbr': 'notre-dame',
                 'losing_name': 'DePaul',
                 'losing_abbr': 'depaul'},
                {'boxscore': '2017-11-11-17-duquesne',
                 'away_name': 'St. Francis (NY)',
                 'away_abbr': 'st-francis-ny',
                 'away_score': 70,
                 'away_rank': None,
                 'home_name': 'Duquesne',
                 'home_abbr': 'duquesne',
                 'home_score': 80,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Duquesne',
                 'winning_abbr': 'duquesne',
                 'losing_name': 'St. Francis (NY)',
                 'losing_abbr': 'st-francis-ny'},
                {'boxscore': '2017-11-11-18-njit',
                 'away_name': 'Wagner',
                 'away_abbr': 'wagner',
                 'away_score': 60,
                 'away_rank': None,
                 'home_name': 'NJIT',
                 'home_abbr': 'njit',
                 'home_score': 49,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Wagner',
                 'winning_abbr': 'wagner',
                 'losing_name': 'NJIT',
                 'losing_abbr': 'njit'},
                {'boxscore': '2017-11-11-19-akron',
                 'away_name': 'Cleveland State',
                 'away_abbr': 'cleveland-state',
                 'away_score': 57,
                 'away_rank': None,
                 'home_name': 'Akron',
                 'home_abbr': 'akron',
                 'home_score': 67,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Akron',
                 'winning_abbr': 'akron',
                 'losing_name': 'Cleveland State',
                 'losing_abbr': 'cleveland-state'},
                {'boxscore': '2017-11-11-19-duke',
                 'away_name': 'Utah Valley',
                 'away_abbr': 'utah-valley',
                 'away_score': 69,
                 'away_rank': None,
                 'home_name': 'Duke',
                 'home_abbr': 'duke',
                 'home_score': 99,
                 'home_rank': 1,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Duke',
                 'winning_abbr': 'duke',
                 'losing_name': 'Utah Valley',
                 'losing_abbr': 'utah-valley'},
                {'boxscore': '2017-11-11-19-elon',
                 'away_name': 'Peace',
                 'away_abbr': 'Peace',
                 'away_score': 53,
                 'away_rank': None,
                 'home_name': 'Elon',
                 'home_abbr': 'elon',
                 'home_score': 96,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Elon',
                 'winning_abbr': 'elon',
                 'losing_name': 'Peace',
                 'losing_abbr': 'Peace'},
                {'boxscore': '2017-11-11-19-marist',
                 'away_name': 'Lehigh',
                 'away_abbr': 'lehigh',
                 'away_score': 84,
                 'away_rank': None,
                 'home_name': 'Marist',
                 'home_abbr': 'marist',
                 'home_score': 76,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Lehigh',
                 'winning_abbr': 'lehigh',
                 'losing_name': 'Marist',
                 'losing_abbr': 'marist'},
                {'boxscore': '2017-11-11-19-michigan',
                 'away_name': 'North Florida',
                 'away_abbr': 'north-florida',
                 'away_score': 66,
                 'away_rank': None,
                 'home_name': 'Michigan',
                 'home_abbr': 'michigan',
                 'home_score': 86,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Michigan',
                 'winning_abbr': 'michigan',
                 'losing_name': 'North Florida',
                 'losing_abbr': 'north-florida'},
                {'boxscore': '2017-11-11-19-north-carolina-wilmington',
                 'away_name': 'North Carolina Wesleyan',
                 'away_abbr': 'North Carolina Wesleyan',
                 'away_score': 81,
                 'away_rank': None,
                 'home_name': 'North Carolina-Wilmington',
                 'home_abbr': 'north-carolina-wilmington',
                 'home_score': 105,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'North Carolina-Wilmington',
                 'winning_abbr': 'north-carolina-wilmington',
                 'losing_name': 'North Carolina Wesleyan',
                 'losing_abbr': 'North Carolina Wesleyan'},
                {'boxscore': '2017-11-11-19-presbyterian',
                 'away_name': 'Johnson University',
                 'away_abbr': 'Johnson University',
                 'away_score': 87,
                 'away_rank': None,
                 'home_name': 'Presbyterian',
                 'home_abbr': 'presbyterian',
                 'home_score': 107,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Presbyterian',
                 'winning_abbr': 'presbyterian',
                 'losing_name': 'Johnson University',
                 'losing_abbr': 'Johnson University'},
                {'boxscore': '2017-11-11-19-sam-houston-state',
                 'away_name': 'Texas-Tyler',
                 'away_abbr': 'Texas-Tyler',
                 'away_score': 51,
                 'away_rank': None,
                 'home_name': 'Sam Houston State',
                 'home_abbr': 'sam-houston-state',
                 'home_score': 91,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Sam Houston State',
                 'winning_abbr': 'sam-houston-state',
                 'losing_name': 'Texas-Tyler',
                 'losing_abbr': 'Texas-Tyler'},
                {'boxscore': '2017-11-11-19-south-dakota',
                 'away_name': 'Mayville State',
                 'away_abbr': 'Mayville State',
                 'away_score': 59,
                 'away_rank': None,
                 'home_name': 'South Dakota',
                 'home_abbr': 'south-dakota',
                 'home_score': 87,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'South Dakota',
                 'winning_abbr': 'south-dakota',
                 'losing_name': 'Mayville State',
                 'losing_abbr': 'Mayville State'},
                {'boxscore': '2017-11-11-19-toledo',
                 'away_name': "St. Joseph's",
                 'away_abbr': 'saint-josephs',
                 'away_score': 87,
                 'away_rank': None,
                 'home_name': 'Toledo',
                 'home_abbr': 'toledo',
                 'home_score': 98,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Toledo',
                 'winning_abbr': 'toledo',
                 'losing_name': "St. Joseph's",
                 'losing_abbr': 'saint-josephs'},
                {'boxscore': '2017-11-11-20-nebraska',
                 'away_name': 'Eastern Illinois',
                 'away_abbr': 'eastern-illinois',
                 'away_score': 68,
                 'away_rank': None,
                 'home_name': 'Nebraska',
                 'home_abbr': 'nebraska',
                 'home_score': 72,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Nebraska',
                 'winning_abbr': 'nebraska',
                 'losing_name': 'Eastern Illinois',
                 'losing_abbr': 'eastern-illinois'},
                {'boxscore': '2017-11-11-20-saint-marys-ca',
                 'away_name': 'Saint Francis (PA)',
                 'away_abbr': 'saint-francis-pa',
                 'away_score': 68,
                 'away_rank': None,
                 'home_name': "Saint Mary's (CA)",
                 'home_abbr': 'saint-marys-ca',
                 'home_score': 85,
                 'home_rank': 22,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': "Saint Mary's (CA)",
                 'winning_abbr': 'saint-marys-ca',
                 'losing_name': 'Saint Francis (PA)',
                 'losing_abbr': 'saint-francis-pa'},
                {'boxscore': '2017-11-11-20-texas-arlington',
                 'away_name': 'Loyola Marymount',
                 'away_abbr': 'loyola-marymount',
                 'away_score': 80,
                 'away_rank': None,
                 'home_name': 'Texas-Arlington',
                 'home_abbr': 'texas-arlington',
                 'home_score': 85,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Texas-Arlington',
                 'winning_abbr': 'texas-arlington',
                 'losing_name': 'Loyola Marymount',
                 'losing_abbr': 'loyola-marymount'},
                {'boxscore': '2017-11-11-20-western-illinois',
                 'away_name': "Saint Mary's (MN)",
                 'away_abbr': "Saint Mary's (MN)",
                 'away_score': 68,
                 'away_rank': None,
                 'home_name': 'Western Illinois',
                 'home_abbr': 'western-illinois',
                 'home_score': 109,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Western Illinois',
                 'winning_abbr': 'western-illinois',
                 'losing_name': "Saint Mary's (MN)",
                 'losing_abbr': "Saint Mary's (MN)"},
                {'boxscore': '2017-11-11-21-brigham-young',
                 'away_name': 'Mississippi Valley State',
                 'away_abbr': 'mississippi-valley-state',
                 'away_score': 61,
                 'away_rank': None,
                 'home_name': 'BYU',
                 'home_abbr': 'brigham-young',
                 'home_score': 91,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'BYU',
                 'winning_abbr': 'brigham-young',
                 'losing_name': 'Mississippi Valley State',
                 'losing_abbr': 'mississippi-valley-state'},
                {'boxscore': '2017-11-11-21-kent-state',
                 'away_name': 'Youngstown State',
                 'away_abbr': 'youngstown-state',
                 'away_score': 78,
                 'away_rank': None,
                 'home_name': 'Kent State',
                 'home_abbr': 'kent-state',
                 'home_score': 111,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Kent State',
                 'winning_abbr': 'kent-state',
                 'losing_name': 'Youngstown State',
                 'losing_abbr': 'youngstown-state'},
                {'boxscore': '2017-11-11-21-new-mexico',
                 'away_name': 'Northern New Mexico',
                 'away_abbr': 'Northern New Mexico',
                 'away_score': 76,
                 'away_rank': None,
                 'home_name': 'New Mexico',
                 'home_abbr': 'new-mexico',
                 'home_score': 147,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'New Mexico',
                 'winning_abbr': 'new-mexico',
                 'losing_name': 'Northern New Mexico',
                 'losing_abbr': 'Northern New Mexico'},
                {'boxscore': '2017-11-11-22-nevada-las-vegas',
                 'away_name': 'Florida A&M',
                 'away_abbr': 'florida-am',
                 'away_score': 66,
                 'away_rank': None,
                 'home_name': 'UNLV',
                 'home_abbr': 'nevada-las-vegas',
                 'home_score': 108,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'UNLV',
                 'winning_abbr': 'nevada-las-vegas',
                 'losing_name': 'Florida A&M',
                 'losing_abbr': 'florida-am'},
                {'boxscore': '2017-11-11-22-portland',
                 'away_name': 'Portland State',
                 'away_abbr': 'portland-state',
                 'away_score': 80,
                 'away_rank': None,
                 'home_name': 'Portland',
                 'home_abbr': 'portland',
                 'home_score': 75,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Portland State',
                 'winning_abbr': 'portland-state',
                 'losing_name': 'Portland',
                 'losing_abbr': 'portland'}
            ],
            '11-12-2017': [
                {'boxscore': '2017-11-12-12-georgetown',
                 'away_name': 'Jacksonville',
                 'away_abbr': 'jacksonville',
                 'away_score': 57,
                 'away_rank': None,
                 'home_name': 'Georgetown',
                 'home_abbr': 'georgetown',
                 'home_score': 73,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Georgetown',
                 'winning_abbr': 'georgetown',
                 'losing_name': 'Jacksonville',
                 'losing_abbr': 'jacksonville'},
                {'boxscore': '2017-11-12-13-boston-college',
                 'away_name': 'South Carolina State',
                 'away_abbr': 'south-carolina-state',
                 'away_score': 52,
                 'away_rank': None,
                 'home_name': 'Boston College',
                 'home_abbr': 'boston-college',
                 'home_score': 91,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Boston College',
                 'winning_abbr': 'boston-college',
                 'losing_name': 'South Carolina State',
                 'losing_abbr': 'south-carolina-state'},
                {'boxscore': '2017-11-12-13-massachusetts-lowell',
                 'away_name': 'Massachusetts-Boston',
                 'away_abbr': 'Massachusetts-Boston',
                 'away_score': 63,
                 'away_rank': None,
                 'home_name': 'UMass-Lowell',
                 'home_abbr': 'massachusetts-lowell',
                 'home_score': 102,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'UMass-Lowell',
                 'winning_abbr': 'massachusetts-lowell',
                 'losing_name': 'Massachusetts-Boston',
                 'losing_abbr': 'Massachusetts-Boston'},
                {'boxscore': '2017-11-12-13-northern-kentucky',
                 'away_name': 'Wilmington (OH)',
                 'away_abbr': 'Wilmington (OH)',
                 'away_score': 65,
                 'away_rank': None,
                 'home_name': 'Northern Kentucky',
                 'home_abbr': 'northern-kentucky',
                 'home_score': 93,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Northern Kentucky',
                 'winning_abbr': 'northern-kentucky',
                 'losing_name': 'Wilmington (OH)',
                 'losing_abbr': 'Wilmington (OH)'},
                {'boxscore': '2017-11-12-13-seton-hall',
                 'away_name': 'Monmouth',
                 'away_abbr': 'monmouth',
                 'away_score': 65,
                 'away_rank': None,
                 'home_name': 'Seton Hall',
                 'home_abbr': 'seton-hall',
                 'home_score': 75,
                 'home_rank': 23,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Seton Hall',
                 'winning_abbr': 'seton-hall',
                 'losing_name': 'Monmouth',
                 'losing_abbr': 'monmouth'},
                {'boxscore': '2017-11-12-14-clemson',
                 'away_name': 'North Carolina A&T',
                 'away_abbr': 'north-carolina-at',
                 'away_score': 63,
                 'away_rank': None,
                 'home_name': 'Clemson',
                 'home_abbr': 'clemson',
                 'home_score': 87,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Clemson',
                 'winning_abbr': 'clemson',
                 'losing_name': 'North Carolina A&T',
                 'losing_abbr': 'north-carolina-at'},
                {'boxscore': '2017-11-12-14-eastern-michigan',
                 'away_name': 'Michigan-Dearborn',
                 'away_abbr': 'Michigan-Dearborn',
                 'away_score': 73,
                 'away_rank': None,
                 'home_name': 'Eastern Michigan',
                 'home_abbr': 'eastern-michigan',
                 'home_score': 97,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Eastern Michigan',
                 'winning_abbr': 'eastern-michigan',
                 'losing_name': 'Michigan-Dearborn',
                 'losing_abbr': 'Michigan-Dearborn'},
                {'boxscore': '2017-11-12-14-harvard',
                 'away_name': 'UMass',
                 'away_abbr': 'massachusetts',
                 'away_score': 67,
                 'away_rank': None,
                 'home_name': 'Harvard',
                 'home_abbr': 'harvard',
                 'home_score': 70,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Harvard',
                 'winning_abbr': 'harvard',
                 'losing_name': 'UMass',
                 'losing_abbr': 'massachusetts'},
                {'boxscore': '2017-11-12-14-louisville',
                 'away_name': 'George Mason',
                 'away_abbr': 'george-mason',
                 'away_score': 61,
                 'away_rank': None,
                 'home_name': 'Louisville',
                 'home_abbr': 'louisville',
                 'home_score': 72,
                 'home_rank': 16,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Louisville',
                 'winning_abbr': 'louisville',
                 'losing_name': 'George Mason',
                 'losing_abbr': 'george-mason'},
                {'boxscore': '2017-11-12-14-mercer',
                 'away_name': 'Toccoa Falls',
                 'away_abbr': 'Toccoa Falls',
                 'away_score': 43,
                 'away_rank': None,
                 'home_name': 'Mercer',
                 'home_abbr': 'mercer',
                 'home_score': 110,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Mercer',
                 'winning_abbr': 'mercer',
                 'losing_name': 'Toccoa Falls',
                 'losing_abbr': 'Toccoa Falls'},
                {'boxscore': '2017-11-12-14-ohio-state',
                 'away_name': 'Radford',
                 'away_abbr': 'radford',
                 'away_score': 72,
                 'away_rank': None,
                 'home_name': 'Ohio State',
                 'home_abbr': 'ohio-state',
                 'home_score': 82,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Ohio State',
                 'winning_abbr': 'ohio-state',
                 'losing_name': 'Radford',
                 'losing_abbr': 'radford'},
                {'boxscore': '2017-11-12-14-rutgers',
                 'away_name': 'Central Connecticut',
                 'away_abbr': 'central-connecticut-state',
                 'away_score': 67,
                 'away_rank': None,
                 'home_name': 'Rutgers',
                 'home_abbr': 'rutgers',
                 'home_score': 71,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Rutgers',
                 'winning_abbr': 'rutgers',
                 'losing_name': 'Central Connecticut',
                 'losing_abbr': 'central-connecticut-state'},
                {'boxscore': '2017-11-12-14-wofford',
                 'away_name': 'Washington & Lee',
                 'away_abbr': 'Washington & Lee',
                 'away_score': 66,
                 'away_rank': None,
                 'home_name': 'Wofford',
                 'home_abbr': 'wofford',
                 'home_score': 103,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Wofford',
                 'winning_abbr': 'wofford',
                 'losing_name': 'Washington & Lee',
                 'losing_abbr': 'Washington & Lee'},
                {'boxscore': '2017-11-12-15-appalachian-state',
                 'away_name': 'Bridgewater (VA)',
                 'away_abbr': 'Bridgewater (VA)',
                 'away_score': 57,
                 'away_rank': None,
                 'home_name': 'Appalachian State',
                 'home_abbr': 'appalachian-state',
                 'home_score': 95,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Appalachian State',
                 'winning_abbr': 'appalachian-state',
                 'losing_name': 'Bridgewater (VA)',
                 'losing_abbr': 'Bridgewater (VA)'},
                {'boxscore': '2017-11-12-15-kentucky',
                 'away_name': 'Vermont',
                 'away_abbr': 'vermont',
                 'away_score': 69,
                 'away_rank': None,
                 'home_name': 'Kentucky',
                 'home_abbr': 'kentucky',
                 'home_score': 73,
                 'home_rank': 5,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Kentucky',
                 'winning_abbr': 'kentucky',
                 'losing_name': 'Vermont',
                 'losing_abbr': 'vermont'},
                {'boxscore': '2017-11-12-15-loyola-il',
                 'away_name': 'Eureka',
                 'away_abbr': 'Eureka',
                 'away_score': 69,
                 'away_rank': None,
                 'home_name': 'Loyola (IL)',
                 'home_abbr': 'loyola-il',
                 'home_score': 96,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Loyola (IL)',
                 'winning_abbr': 'loyola-il',
                 'losing_name': 'Eureka',
                 'losing_abbr': 'Eureka'},
                {'boxscore': '2017-11-12-15-oklahoma',
                 'away_name': 'Omaha',
                 'away_abbr': 'nebraska-omaha',
                 'away_score': 89,
                 'away_rank': None,
                 'home_name': 'Oklahoma',
                 'home_abbr': 'oklahoma',
                 'home_score': 108,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Oklahoma',
                 'winning_abbr': 'oklahoma',
                 'losing_name': 'Omaha',
                 'losing_abbr': 'nebraska-omaha'},
                {'boxscore': '2017-11-12-15-south-carolina-upstate',
                 'away_name': 'Allen',
                 'away_abbr': 'Allen',
                 'away_score': 66,
                 'away_rank': None,
                 'home_name': 'USC Upstate',
                 'home_abbr': 'south-carolina-upstate',
                 'home_score': 85,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'USC Upstate',
                 'winning_abbr': 'south-carolina-upstate',
                 'losing_name': 'Allen',
                 'losing_abbr': 'Allen'},
                {'boxscore': '2017-11-12-15-south-dakota-state',
                 'away_name': 'Mary',
                 'away_abbr': 'Mary',
                 'away_score': 54,
                 'away_rank': None,
                 'home_name': 'South Dakota State',
                 'home_abbr': 'south-dakota-state',
                 'home_score': 78,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'South Dakota State',
                 'winning_abbr': 'south-dakota-state',
                 'losing_name': 'Mary',
                 'losing_abbr': 'Mary'},
                {'boxscore': '2017-11-12-16-air-force',
                 'away_name': 'Texas State',
                 'away_abbr': 'texas-state',
                 'away_score': 57,
                 'away_rank': None,
                 'home_name': 'Air Force',
                 'home_abbr': 'air-force',
                 'home_score': 65,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Air Force',
                 'winning_abbr': 'air-force',
                 'losing_name': 'Texas State',
                 'losing_abbr': 'texas-state'},
                {'boxscore': '2017-11-12-16-boise-state',
                 'away_name': 'Southern Utah',
                 'away_abbr': 'southern-utah',
                 'away_score': 69,
                 'away_rank': None,
                 'home_name': 'Boise State',
                 'home_abbr': 'boise-state',
                 'home_score': 90,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Boise State',
                 'winning_abbr': 'boise-state',
                 'losing_name': 'Southern Utah',
                 'losing_abbr': 'southern-utah'},
                {'boxscore': '2017-11-12-16-california',
                 'away_name': 'Cal Poly',
                 'away_abbr': 'cal-poly',
                 'away_score': 82,
                 'away_rank': None,
                 'home_name': 'California',
                 'home_abbr': 'california',
                 'home_score': 85,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'California',
                 'winning_abbr': 'california',
                 'losing_name': 'Cal Poly',
                 'losing_abbr': 'cal-poly'},
                {'boxscore': '2017-11-12-16-hartford',
                 'away_name': 'Gordon',
                 'away_abbr': 'Gordon',
                 'away_score': 63,
                 'away_rank': None,
                 'home_name': 'Hartford',
                 'home_abbr': 'hartford',
                 'home_score': 80,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Hartford',
                 'winning_abbr': 'hartford',
                 'losing_name': 'Gordon',
                 'losing_abbr': 'Gordon'},
                {'boxscore': '2017-11-12-16-iowa',
                 'away_name': 'Alabama State',
                 'away_abbr': 'alabama-state',
                 'away_score': 58,
                 'away_rank': None,
                 'home_name': 'Iowa',
                 'home_abbr': 'iowa',
                 'home_score': 92,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Iowa',
                 'winning_abbr': 'iowa',
                 'losing_name': 'Alabama State',
                 'losing_abbr': 'alabama-state'},
                {'boxscore': '2017-11-12-16-ipfw',
                 'away_name': 'Defiance',
                 'away_abbr': 'Defiance',
                 'away_score': 59,
                 'away_rank': None,
                 'home_name': 'Purdue-Fort Wayne',
                 'home_abbr': 'ipfw',
                 'home_score': 114,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Purdue-Fort Wayne',
                 'winning_abbr': 'ipfw',
                 'losing_name': 'Defiance',
                 'losing_abbr': 'Defiance'},
                {'boxscore': '2017-11-12-16-miami-fl',
                 'away_name': 'Navy',
                 'away_abbr': 'navy',
                 'away_score': 55,
                 'away_rank': None,
                 'home_name': 'Miami (FL)',
                 'home_abbr': 'miami-fl',
                 'home_score': 89,
                 'home_rank': 13,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Miami (FL)',
                 'winning_abbr': 'miami-fl',
                 'losing_name': 'Navy',
                 'losing_abbr': 'navy'},
                {'boxscore': '2017-11-12-16-north-carolina-state',
                 'away_name': 'Charleston Southern',
                 'away_abbr': 'charleston-southern',
                 'away_score': 56,
                 'away_rank': None,
                 'home_name': 'NC State',
                 'home_abbr': 'north-carolina-state',
                 'home_score': 78,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'NC State',
                 'winning_abbr': 'north-carolina-state',
                 'losing_name': 'Charleston Southern',
                 'losing_abbr': 'charleston-southern'},
                {'boxscore': '2017-11-12-16-northeastern',
                 'away_name': 'Wentworth',
                 'away_abbr': 'Wentworth',
                 'away_score': 49,
                 'away_rank': None,
                 'home_name': 'Northeastern',
                 'home_abbr': 'northeastern',
                 'home_score': 83,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Northeastern',
                 'winning_abbr': 'northeastern',
                 'losing_name': 'Wentworth',
                 'losing_abbr': 'Wentworth'},
                {'boxscore': '2017-11-12-16-purdue',
                 'away_name': 'Chicago State',
                 'away_abbr': 'chicago-state',
                 'away_score': 42,
                 'away_rank': None,
                 'home_name': 'Purdue',
                 'home_abbr': 'purdue',
                 'home_score': 111,
                 'home_rank': 20,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Purdue',
                 'winning_abbr': 'purdue',
                 'losing_name': 'Chicago State',
                 'losing_abbr': 'chicago-state'},
                {'boxscore': '2017-11-12-16-southern-methodist',
                 'away_name': 'Louisiana-Monroe',
                 'away_abbr': 'louisiana-monroe',
                 'away_score': 65,
                 'away_rank': None,
                 'home_name': 'SMU',
                 'home_abbr': 'southern-methodist',
                 'home_score': 83,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'SMU',
                 'winning_abbr': 'southern-methodist',
                 'losing_name': 'Louisiana-Monroe',
                 'losing_abbr': 'louisiana-monroe'},
                {'boxscore': '2017-11-12-16-texas-san-antonio',
                 'away_name': 'East Central',
                 'away_abbr': 'East Central',
                 'away_score': 59,
                 'away_rank': None,
                 'home_name': 'UTSA',
                 'home_abbr': 'texas-san-antonio',
                 'home_score': 92,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'UTSA',
                 'winning_abbr': 'texas-san-antonio',
                 'losing_name': 'East Central',
                 'losing_abbr': 'East Central'},
                {'boxscore': '2017-11-12-16-washington-state',
                 'away_name': 'Texas Southern',
                 'away_abbr': 'texas-southern',
                 'away_score': 84,
                 'away_rank': None,
                 'home_name': 'Washington State',
                 'home_abbr': 'washington-state',
                 'home_score': 86,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Washington State',
                 'winning_abbr': 'washington-state',
                 'losing_name': 'Texas Southern',
                 'losing_abbr': 'texas-southern'},
                {'boxscore': '2017-11-12-17-central-arkansas',
                 'away_name': 'University of the Ozarks',
                 'away_abbr': 'University of the Ozarks',
                 'away_score': 51,
                 'away_rank': None,
                 'home_name': 'Central Arkansas',
                 'home_abbr': 'central-arkansas',
                 'home_score': 99,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Central Arkansas',
                 'winning_abbr': 'central-arkansas',
                 'losing_name': 'University of the Ozarks',
                 'losing_abbr': 'University of the Ozarks'},
                {'boxscore': '2017-11-12-17-east-carolina',
                 'away_name': 'Coppin State',
                 'away_abbr': 'coppin-state',
                 'away_score': 50,
                 'away_rank': None,
                 'home_name': 'East Carolina',
                 'home_abbr': 'east-carolina',
                 'home_score': 76,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'East Carolina',
                 'winning_abbr': 'east-carolina',
                 'losing_name': 'Coppin State',
                 'losing_abbr': 'coppin-state'},
                {'boxscore': '2017-11-12-17-hampton',
                 'away_name': 'Bluefield College (VA)',
                 'away_abbr': 'Bluefield College (VA)',
                 'away_score': 68,
                 'away_rank': None,
                 'home_name': 'Hampton',
                 'home_abbr': 'hampton',
                 'home_score': 85,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Hampton',
                 'winning_abbr': 'hampton',
                 'losing_name': 'Bluefield College (VA)',
                 'losing_abbr': 'Bluefield College (VA)'},
                {'boxscore': '2017-11-12-17-lipscomb',
                 'away_name': 'Morehead State',
                 'away_abbr': 'morehead-state',
                 'away_score': 70,
                 'away_rank': None,
                 'home_name': 'Lipscomb',
                 'home_abbr': 'lipscomb',
                 'home_score': 77,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Lipscomb',
                 'winning_abbr': 'lipscomb',
                 'losing_name': 'Morehead State',
                 'losing_abbr': 'morehead-state'},
                {'boxscore': '2017-11-12-17-missouri-kansas-city',
                 'away_name': 'Haskell Indian Nations Institute',
                 'away_abbr': 'Haskell Indian Nations Institute',
                 'away_score': 59,
                 'away_rank': None,
                 'home_name': 'UMKC',
                 'home_abbr': 'missouri-kansas-city',
                 'home_score': 110,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'UMKC',
                 'winning_abbr': 'missouri-kansas-city',
                 'losing_name': 'Haskell Indian Nations Institute',
                 'losing_abbr': 'Haskell Indian Nations Institute'},
                {'boxscore': '2017-11-12-17-northwestern-state',
                 'away_name': 'LeTourneau',
                 'away_abbr': 'LeTourneau',
                 'away_score': 99,
                 'away_rank': None,
                 'home_name': 'Northwestern State',
                 'home_abbr': 'northwestern-state',
                 'home_score': 84,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'LeTourneau',
                 'winning_abbr': 'LeTourneau',
                 'losing_name': 'Northwestern State',
                 'losing_abbr': 'northwestern-state'},
                {'boxscore': '2017-11-12-17-penn-state',
                 'away_name': 'Fairleigh Dickinson',
                 'away_abbr': 'fairleigh-dickinson',
                 'away_score': 57,
                 'away_rank': None,
                 'home_name': 'Penn State',
                 'home_abbr': 'penn-state',
                 'home_score': 81,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Penn State',
                 'winning_abbr': 'penn-state',
                 'losing_name': 'Fairleigh Dickinson',
                 'losing_abbr': 'fairleigh-dickinson'},
                {'boxscore': '2017-11-12-17-san-jose-state',
                 'away_name': 'San Diego',
                 'away_abbr': 'san-diego',
                 'away_score': 81,
                 'away_rank': None,
                 'home_name': 'San Jose State',
                 'home_abbr': 'san-jose-state',
                 'home_score': 64,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'San Diego',
                 'winning_abbr': 'san-diego',
                 'losing_name': 'San Jose State',
                 'losing_abbr': 'san-jose-state'},
                {'boxscore': '2017-11-12-18-arizona',
                 'away_name': 'UMBC',
                 'away_abbr': 'maryland-baltimore-county',
                 'away_score': 78,
                 'away_rank': None,
                 'home_name': 'Arizona',
                 'home_abbr': 'arizona',
                 'home_score': 103,
                 'home_rank': 3,
                 'non_di': False,
                 'top_25': True,
                 'winning_name': 'Arizona',
                 'winning_abbr': 'arizona',
                 'losing_name': 'UMBC',
                 'losing_abbr': 'maryland-baltimore-county'},
                {'boxscore': '2017-11-12-18-arkansas',
                 'away_name': 'Bucknell',
                 'away_abbr': 'bucknell',
                 'away_score': 73,
                 'away_rank': None,
                 'home_name': 'Arkansas',
                 'home_abbr': 'arkansas',
                 'home_score': 101,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Arkansas',
                 'winning_abbr': 'arkansas',
                 'losing_name': 'Bucknell',
                 'losing_abbr': 'bucknell'},
                {'boxscore': '2017-11-12-18-butler',
                 'away_name': 'Princeton',
                 'away_abbr': 'princeton',
                 'away_score': 75,
                 'away_rank': None,
                 'home_name': 'Butler',
                 'home_abbr': 'butler',
                 'home_score': 85,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Butler',
                 'winning_abbr': 'butler',
                 'losing_name': 'Princeton',
                 'losing_abbr': 'princeton'},
                {'boxscore': '2017-11-12-18-denver',
                 'away_name': 'UC-Irvine',
                 'away_abbr': 'california-irvine',
                 'away_score': 83,
                 'away_rank': None,
                 'home_name': 'Denver',
                 'home_abbr': 'denver',
                 'home_score': 69,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'UC-Irvine',
                 'winning_abbr': 'california-irvine',
                 'losing_name': 'Denver',
                 'losing_abbr': 'denver'},
                {'boxscore': '2017-11-12-18-illinois',
                 'away_name': 'UT-Martin',
                 'away_abbr': 'tennessee-martin',
                 'away_score': 74,
                 'away_rank': None,
                 'home_name': 'Illinois',
                 'home_abbr': 'illinois',
                 'home_score': 77,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Illinois',
                 'winning_abbr': 'illinois',
                 'losing_name': 'UT-Martin',
                 'losing_abbr': 'tennessee-martin'},
                {'boxscore': '2017-11-12-18-maryland',
                 'away_name': 'Maryland-Eastern Shore',
                 'away_abbr': 'maryland-eastern-shore',
                 'away_score': 43,
                 'away_rank': None,
                 'home_name': 'Maryland',
                 'home_abbr': 'maryland',
                 'home_score': 96,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Maryland',
                 'winning_abbr': 'maryland',
                 'losing_name': 'Maryland-Eastern Shore',
                 'losing_abbr': 'maryland-eastern-shore'},
                {'boxscore': '2017-11-12-18-wisconsin',
                 'away_name': 'Yale',
                 'away_abbr': 'yale',
                 'away_score': 61,
                 'away_rank': None,
                 'home_name': 'Wisconsin',
                 'home_abbr': 'wisconsin',
                 'home_score': 89,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Wisconsin',
                 'winning_abbr': 'wisconsin',
                 'losing_name': 'Yale',
                 'losing_abbr': 'yale'},
                {'boxscore': '2017-11-12-19-arkansas-pine-bluff',
                 'away_name': 'Troy',
                 'away_abbr': 'troy',
                 'away_score': 81,
                 'away_rank': None,
                 'home_name': 'Arkansas-Pine Bluff',
                 'home_abbr': 'arkansas-pine-bluff',
                 'home_score': 57,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Troy',
                 'winning_abbr': 'troy',
                 'losing_name': 'Arkansas-Pine Bluff',
                 'losing_abbr': 'arkansas-pine-bluff'},
                {'boxscore': '2017-11-12-19-creighton',
                 'away_name': 'Alcorn State',
                 'away_abbr': 'alcorn-state',
                 'away_score': 72,
                 'away_rank': None,
                 'home_name': 'Creighton',
                 'home_abbr': 'creighton',
                 'home_score': 109,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Creighton',
                 'winning_abbr': 'creighton',
                 'losing_name': 'Alcorn State',
                 'losing_abbr': 'alcorn-state'},
                {'boxscore': '2017-11-12-19-florida-international',
                 'away_name': 'Stetson',
                 'away_abbr': 'stetson',
                 'away_score': 70,
                 'away_rank': None,
                 'home_name': 'Florida International',
                 'home_abbr': 'florida-international',
                 'home_score': 64,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Stetson',
                 'winning_abbr': 'stetson',
                 'losing_name': 'Florida International',
                 'losing_abbr': 'florida-international'},
                {'boxscore': '2017-11-12-19-seattle',
                 'away_name': 'Puget Sound',
                 'away_abbr': 'Puget Sound',
                 'away_score': 70,
                 'away_rank': None,
                 'home_name': 'Seattle',
                 'home_abbr': 'seattle',
                 'home_score': 121,
                 'home_rank': None,
                 'non_di': True,
                 'top_25': False,
                 'winning_name': 'Seattle',
                 'winning_abbr': 'seattle',
                 'losing_name': 'Puget Sound',
                 'losing_abbr': 'Puget Sound'},
                {'boxscore': '2017-11-12-19-virginia-tech',
                 'away_name': 'Citadel',
                 'away_abbr': 'citadel',
                 'away_score': 93,
                 'away_rank': None,
                 'home_name': 'Virginia Tech',
                 'home_abbr': 'virginia-tech',
                 'home_score': 132,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Virginia Tech',
                 'winning_abbr': 'virginia-tech',
                 'losing_name': 'Citadel',
                 'losing_abbr': 'citadel'},
                {'boxscore': '2017-11-12-20-indiana',
                 'away_name': 'Howard',
                 'away_abbr': 'howard',
                 'away_score': 77,
                 'away_rank': None,
                 'home_name': 'Indiana',
                 'home_abbr': 'indiana',
                 'home_score': 86,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Indiana',
                 'winning_abbr': 'indiana',
                 'losing_name': 'Howard',
                 'losing_abbr': 'howard'},
                {'boxscore': '2017-11-12-20-washington',
                 'away_name': 'Eastern Washington',
                 'away_abbr': 'eastern-washington',
                 'away_score': 69,
                 'away_rank': None,
                 'home_name': 'Washington',
                 'home_abbr': 'washington',
                 'home_score': 79,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Washington',
                 'winning_abbr': 'washington',
                 'losing_name': 'Eastern Washington',
                 'losing_abbr': 'eastern-washington'},
                {'boxscore': '2017-11-12-22-hawaii',
                 'away_name': 'North Dakota',
                 'away_abbr': 'north-dakota',
                 'away_score': 78,
                 'away_rank': None,
                 'home_name': 'Hawaii',
                 'home_abbr': 'hawaii',
                 'home_score': 81,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Hawaii',
                 'winning_abbr': 'hawaii',
                 'losing_name': 'North Dakota',
                 'losing_abbr': 'north-dakota'},
                {'boxscore': '2017-11-12-22-stanford',
                 'away_name': 'Pacific',
                 'away_abbr': 'pacific',
                 'away_score': 80,
                 'away_rank': None,
                 'home_name': 'Stanford',
                 'home_abbr': 'stanford',
                 'home_score': 89,
                 'home_rank': None,
                 'non_di': False,
                 'top_25': False,
                 'winning_name': 'Stanford',
                 'winning_abbr': 'stanford',
                 'losing_name': 'Pacific',
                 'losing_abbr': 'pacific'}
                ]
            }
