Ejemplo n.º 1
0
def even_more_setup(env):
    from vignewton.managers.util import parse_odds_html
    games = parse_odds_html(text)
    env['games'] = games
    #from vignewton.models.main import NFLGame
    gm = NFLGameManager(db)
    env['gm'] = gm
    dbgames = [gm.get_game_from_odds(g) for g in games]
    env['dbgames'] = dbgames
    from vignewton.managers.odds import NFLOddsManager
    om = NFLOddsManager(db)
    env['om'] = om
    om.oddscache.set_url(odds_url)
Ejemplo n.º 2
0
def even_more_setup(env):
    from vignewton.managers.util import parse_odds_html
    games = parse_odds_html(text)
    env['games'] = games
    #from vignewton.models.main import NFLGame
    gm = NFLGameManager(db)
    env['gm'] = gm
    dbgames = [gm.get_game_from_odds(g) for g in games]
    env['dbgames'] = dbgames
    from vignewton.managers.odds import NFLOddsManager
    om = NFLOddsManager(db)
    env['om'] = om
    om.oddscache.set_url(odds_url)
Ejemplo n.º 3
0
class NFLOddsManager(object):
    def __init__(self, session):
        self.session = session
        self.games = NFLGameManager(self.session)
        self.teams = NFLTeamManager(self.session)
        self.oddscache = NFLOddsCache(self.session)

    def query(self):
        return self.session.query(NFLGameOdds)

    def get(self, game_id):
        return self.query().get(game_id)

    def archive_cache_table(self):
        return self.oddscache.archive_table("odds")

    def get_odds(self, game_id):
        q = self.query()
        q = q.filter_by(game_id=game_id)
        return q.one()

    def get_data(self, odds):
        data = dict(favored_id=odds.favored_id, underdog_id=odds.underdog_id, total=odds.total, spread=odds.spread)
        return data

    def _fix_number(self, numstr):
        numstr = numstr.encode("utf-8")
        numstr = numstr.strip()
        add_one_half = False
        if numstr.endswith("\xc2\xbd"):
            add_one_half = True
            numstr = numstr[:-2]
        if not numstr or numstr == "-":
            number = 0
        else:
            number = int(numstr)
        if add_one_half:
            number = number + 0.5
        return number

    def _determine_favored(self, game):
        away = game["away"]
        home = game["home"]
        if game["away_line"] == "-":
            favored_id = self.games.fnlookup[home]
            underdog_id = self.games.fnlookup[home]
            spread = "0"
        else:
            plusminus = game["away_line"][0]
            if plusminus == "-":
                favored_id = self.games.fnlookup[away]
                underdog_id = self.games.fnlookup[home]
                if game["home_line"][0] == "-":
                    raise RuntimeError, "bad values for game %s" % game
            else:
                favored_id = self.games.fnlookup[home]
                underdog_id = self.games.fnlookup[away]
                if game["home_line"][0] == "+":
                    raise RuntimeError, "bad values for game %s" % game
            spread = game["away_line"][1:].split("(")[0]
            spread = self._fix_number(spread)
        return favored_id, underdog_id, spread

    def add_game_odds(self, game_id, game):
        favored_id, underdog_id, spread = self._determine_favored(game)
        total = game["total"]
        total = self._fix_number(total)
        now = datetime.now()
        with transaction.manager:
            odds = NFLGameOdds()
            odds.game_id = game_id
            odds.retrieved = now
            odds.favored_id = favored_id
            odds.underdog_id = underdog_id
            odds.total = total
            odds.spread = spread
            self.session.add(odds)
        return self.session.merge(odds)

    def update_game_odds(self, game_id, game, odds):
        total = self._fix_number(game["total"])
        spread = game["away_line"][1:].split("(")[0]
        spread = self._fix_number(spread)
        now = datetime.now()
        with transaction.manager:
            odds.retrieved = now
            odds.total = total
            odds.spread = spread
            odds = self.session.merge(odds)
        return odds

    def _populate_odds(self, games):
        olist = list()
        for game in games:
            print "GAMEODDS", game
            game_id = self.games.get_game_from_odds(game).id
            odds = self.get(game_id)
            if odds is not None:
                raise OddsPresentError, "odds table should be empty"
            odds = self.add_game_odds(game_id, game)
            olist.append(odds)
        olist = [self.session.merge(o) for o in olist]
        return olist

    # this is for testing and needs
    # an html file to parse
    def populate_current_odds(self, filename):
        oc = self.oddscache
        html = file(filename).read()
        oc.parser.set_html(html)
        oc.parser.parse()
        games = oc.parser.games
        latest = oc.add(games)
        olist = self._populate_odds(latest.content)
        return olist

    def populate_from_pickle(self, filename):
        games = Pickle.load(file(filename))
        return self._populate_odds(games)

    def update_current_odds(self):
        latest, updated = self.oddscache.get_latest()
        oddslist = list()
        for game in latest.content:
            game_id = self.games.get_game_from_odds(game).id
            odds = self.get(game_id)
            if odds is None:
                odds = self.add_game_odds(game_id, game)
            else:
                odds = self.update_game_odds(game_id, game, odds)
            oddslist.append(odds)
        oddslist = [self.session.merge(o) for o in oddslist]
        return oddslist, updated

    def _filter_zero_odds(self, query):
        query = query.filter(NFLGameOdds.total > 0)
        query = query.filter(NFLGameOdds.spread > 0)
        return query

    def get_current_odds(self):
        now = datetime.now()
        q = self.query()
        q = q.filter(NFLGame.start >= now)
        q = q.order_by(NFLGame.start)
        # q = self._filter_zero_odds(q)
        return q.all()
Ejemplo n.º 4
0
class NFLOddsManager(object):
    def __init__(self, session):
        self.session = session
        self.games = NFLGameManager(self.session)
        self.teams = NFLTeamManager(self.session)
        self.oddscache = NFLOddsCache(self.session)

    def query(self):
        return self.session.query(NFLGameOdds)

    def get(self, game_id):
        return self.query().get(game_id)

    def archive_cache_table(self):
        return self.oddscache.archive_table('odds')

    def get_odds(self, game_id):
        q = self.query()
        q = q.filter_by(game_id=game_id)
        return q.one()

    def get_data(self, odds):
        data = dict(favored_id=odds.favored_id,
                    underdog_id=odds.underdog_id,
                    total=odds.total,
                    spread=odds.spread)
        return data

    def _fix_number(self, numstr):
        numstr = numstr.encode('utf-8')
        numstr = numstr.strip()
        add_one_half = False
        if numstr.endswith('\xc2\xbd'):
            add_one_half = True
            numstr = numstr[:-2]
        if not numstr or numstr == '-':
            number = 0
        else:
            number = int(numstr)
        if add_one_half:
            number = number + 0.5
        return number

    def _determine_favored(self, game):
        away = game['away']
        home = game['home']
        if game['away_line'] == '-':
            favored_id = self.games.fnlookup[home]
            underdog_id = self.games.fnlookup[home]
            spread = '0'
        else:
            plusminus = game['away_line'][0]
            if plusminus == '-':
                favored_id = self.games.fnlookup[away]
                underdog_id = self.games.fnlookup[home]
                if game['home_line'][0] == '-':
                    raise RuntimeError, "bad values for game %s" % game
            else:
                favored_id = self.games.fnlookup[home]
                underdog_id = self.games.fnlookup[away]
                if game['home_line'][0] == '+':
                    raise RuntimeError, "bad values for game %s" % game
            spread = game['away_line'][1:].split('(')[0]
            spread = self._fix_number(spread)
        return favored_id, underdog_id, spread

    def add_game_odds(self, game_id, game):
        favored_id, underdog_id, spread = self._determine_favored(game)
        total = game['total']
        total = self._fix_number(total)
        now = datetime.now()
        with transaction.manager:
            odds = NFLGameOdds()
            odds.game_id = game_id
            odds.retrieved = now
            odds.favored_id = favored_id
            odds.underdog_id = underdog_id
            odds.total = total
            odds.spread = spread
            self.session.add(odds)
        return self.session.merge(odds)

    def update_game_odds(self, game_id, game, odds):
        total = self._fix_number(game['total'])
        spread = game['away_line'][1:].split('(')[0]
        spread = self._fix_number(spread)
        now = datetime.now()
        with transaction.manager:
            odds.retrieved = now
            odds.total = total
            odds.spread = spread
            odds = self.session.merge(odds)
        return odds

    def _populate_odds(self, games):
        olist = list()
        for game in games:
            print "GAMEODDS", game
            game_id = self.games.get_game_from_odds(game).id
            odds = self.get(game_id)
            if odds is not None:
                raise OddsPresentError, "odds table should be empty"
            odds = self.add_game_odds(game_id, game)
            olist.append(odds)
        olist = [self.session.merge(o) for o in olist]
        return olist

    # this is for testing and needs
    # an html file to parse
    def populate_current_odds(self, filename):
        oc = self.oddscache
        html = file(filename).read()
        oc.parser.set_html(html)
        oc.parser.parse()
        games = oc.parser.games
        latest = oc.add(games)
        olist = self._populate_odds(latest.content)
        return olist

    def populate_from_pickle(self, filename):
        games = Pickle.load(file(filename))
        return self._populate_odds(games)

    def update_current_odds(self):
        latest, updated = self.oddscache.get_latest()
        oddslist = list()
        for game in latest.content:
            game_id = self.games.get_game_from_odds(game).id
            odds = self.get(game_id)
            if odds is None:
                odds = self.add_game_odds(game_id, game)
            else:
                odds = self.update_game_odds(game_id, game, odds)
            oddslist.append(odds)
        oddslist = [self.session.merge(o) for o in oddslist]
        return oddslist, updated

    def _filter_zero_odds(self, query):
        query = query.filter(NFLGameOdds.total > 0)
        query = query.filter(NFLGameOdds.spread > 0)
        return query

    def get_current_odds(self):
        now = datetime.now()
        q = self.query()
        q = q.filter(NFLGame.start >= now)
        q = q.order_by(NFLGame.start)
        #q = self._filter_zero_odds(q)
        return q.all()