def setup(env): request = env['request'] db = request.db env['db'] = db settings = env['registry'].settings url = settings['vignewton.nfl.schedule.url'] env['url'] = url odds_url = settings['vignewton.nfl.odds.url'] from vignewton.managers.nflgames import NFLTeamManager tm = NFLTeamManager(db) env['tm'] = tm from vignewton.managers.odds import NFLOddsManager om = NFLOddsManager(db) env['om'] = om om.oddscache.set_url(odds_url) if not om.get_current_odds(): filename = 'testdata/o.pickle' if not os.path.isfile(filename): om.update_current_odds() else: om.populate_from_pickle(filename) from vignewton.managers.nflgames import NFLGameManager gm = NFLGameManager(db) env['gm'] = gm gm.set_schedule_url(url) update_game_schedule = False if update_game_schedule: update_games(gm) env['ug'] = update_games from vignewton.managers.accounting import AccountingManager am = AccountingManager(db) am.initialize_bets_manager() env['am'] = am #env['games'] = om.oddscache.get_latest()[0].content #env['bg'] = env['games'][-3] from vignewton.managers.util import determine_max_bet env['dmb'] = determine_max_bet env['game'] = gm.query().get(125) backup_cache(gm, om) from vignewton.managers.bets import BetsManager bm = BetsManager(db) env['bm'] = bm from vignewton.managers.util import chop_ical_nflgame_desc env['cind'] = chop_ical_nflgame_desc env['g'] = gm.get(131)
class UpdateDBViewer(AdminViewer): def __init__(self, request): super(UpdateDBViewer, self).__init__(request) #self.layout.main_menu = make_main_menu(self.request).render() #self.layout.ctx_menu = make_ctx_menu(self.request).output() make_context_menu(self.request) self.games = NFLGameManager(self.request.db) self.odds = NFLOddsManager(self.request.db) self.bets = BetsManager(self.request.db) settings = self.get_app_settings() url = settings['vignewton.nfl.odds.url'] self.odds.oddscache.set_url(url) url = settings['vignewton.nfl.schedule.url'] self.games.schedules.set_url(url) self.mgr = UpdateDBManager(self.request.db) self.context = self.request.matchdict['context'] # make dispatch table self._cntxt_meth = dict( main=self.main_view, games=self.update_games, odds=self.update_odds, bets=self.determine_bets, report=self.show_update_report, ) if self.context in self._cntxt_meth: self._cntxt_meth[self.context]() else: msg = 'Undefined Context: %s' % self.context self.layout.content = '<b>%s</b>' % msg def main_view(self): self.layout.header = 'Main Update View' self.layout.content = 'Main Update View' def update_games(self): updated = self.games.update_games() if updated: self.layout.content = 'Game Schedule updated.' else: self.layout.content = 'No need to update yet.' def update_odds(self): olist, updated = self.odds.update_current_odds() if updated: self.layout.content = 'Game Odds updated.' else: self.layout.content = 'No need to update yet.' def determine_bets(self): template = 'vignewton:templates/admin-determine-bets.mako' clist = self.bets.determine_bets() env = dict(bm=self.bets, clist=clist) content = self.render(template, env) self.layout.content = content def show_update_report(self): reports = self.mgr.get_all() template = 'vignewton:templates/admin-full-update-report.mako' env = dict(reports=reports) content = self.render(template, env) self.layout.content = content
class UpdateDBManager(object): def __init__(self, session): self.session = session self.games = NFLGameManager(self.session) self.odds = NFLOddsManager(self.session) self.bets = BetsManager(self.session) def set_schedule_url(self, url): self.games.schedules.set_url(url) def set_schedule_ttl(self, **kw): self.games.schedules.set_ttl(**kw) def set_odds_url(self, url): self.odds.oddscache.set_url(url) def set_odds_ttl(self, **kw): self.odds.oddscache.set_ttl(**kw) def query(self): return self.session.query(UpdateReport) def get(self, report_id): return self.query().get(report_id) def _order_desc_filter(self, query): return query.order_by(UpdateReport.created.desc()) def get_latest(self): q = self.query() q = self._order_desc_filter(q) return q.first() def get_all(self): q = self.query() q = self._order_desc_filter(q) return q.all() def _add_report(self, content): with transaction.manager: now = datetime.now() ur = UpdateReport() ur.created = now ur.content = content self.session.add(ur) return self.session.merge(ur) def _update_database(self): games_updated = self.games.update_games() #games_updated = False oddslist, odds_updated = self.odds.update_current_odds() determined = self.bets.determine_bets() oddslist = [serialize_odds(o) for o in oddslist] determined = [serialize_closed_bet(b) for b in determined] data = dict(games_updated=games_updated, odds_updated=odds_updated, oddslist=oddslist, determined=determined) return data def update(self): content = self._update_database() report = self._add_report(content) return report