From c9b351c6c566880f47ea23f634cd2039973be4d1 Mon Sep 17 00:00:00 2001 From: emkael Date: Wed, 15 Oct 2014 17:05:51 +0200 Subject: * separation of user interface --- elo.py | 79 +++++++++--------------------------------------------------------- 1 file changed, 10 insertions(+), 69 deletions(-) (limited to 'elo.py') diff --git a/elo.py b/elo.py index 8df3e3c..4034dfa 100755 --- a/elo.py +++ b/elo.py @@ -1,21 +1,15 @@ #!/usr/bin/env python import argparse -import datetime - import dateutil.parser -import dateutil.relativedelta -from f1elo.db import Session -from f1elo.elo import Elo -from f1elo.model import * -session = Session() -elo = Elo(session) +from f1elo.interface import Interface parser = argparse.ArgumentParser(description='Ranks Formula One drivers using Elo rating') parser.add_argument('command', metavar='COMMAND', nargs='?', help='Action to execute against the database: print, reset or rate, print - prints the rankings for all drivers ranked in 12 months, reset - resets the rankings, rate - calculates the rankings', - default='print') + default='print', choices=['print', 'rate', 'reset']) parser.add_argument('--date', help='Date for which the action should be executed. Print ratings for DATE, reset ratings all the way down to DATE or rank the races all the way up to DATE.') +parser.add_argument('-v', help='Display verbose info on rating progress.', action='store_true') arguments = parser.parse_args() command = arguments.command.lower() @@ -23,71 +17,18 @@ date = arguments.date if date: date = dateutil.parser.parse(date).date() -one_day = datetime.timedelta(1) +interface = Interface(date) if command == 'reset': - query = session.query(Race) - if date is not None: - query = query.filter(Race.date > date) - for race in query.all(): - race.ranked = False - query = session.query(Ranking) - if date is not None: - query = query.filter(Ranking.rank_date > date) - query.delete() - if date is not None: - date += one_day + interface.reset(_debug=arguments.v) elif command == 'rate': - race_query = session.query(Race).filter(Race.ranked == False) - if date is not None: - race_query = race_query.filter(Race.date <= date) - races = race_query.order_by(Race.date).all() - - for race in races: - print race - print - - ranks = elo.rank_race(race) - driver_ranks = {} - for entry, rank in ranks.iteritems(): - correction = rank / len(entry.drivers) - for driver in entry.drivers: - if not driver_ranks.has_key(driver): - driver_ranks[driver] = 0; - driver_ranks[driver] += correction - for driver, rank in driver_ranks.iteritems(): - ranking = Ranking() - ranking.rank_date = race.date - ranking.ranking = elo.get_ranking(driver, race.date) + rank - session.add(ranking) - driver.rankings.append(ranking) - - for entry in race.entries: - print entry, elo.get_entry_ranking(entry, race.date), elo.get_entry_ranking(entry) - print - - race.ranked = True - date = race.date + one_day + interface.rate( _debug=arguments.v) -if date is None: - date = datetime.date.today() - date += one_day - -one_year = dateutil.relativedelta.relativedelta(years=1) -rankings = session.query(Ranking).filter(Ranking.rank_date > (date - one_year)).filter(Ranking.rank_date <= date).all() +rankings = interface.fetch() if len(rankings): - print 'Rankings for %s' % date - - drivers = {} - for ranking in rankings: - if not drivers.has_key(ranking.driver): - drivers[ranking.driver] = ranking.driver.get_ranking(date) - - - for rank in sorted(drivers.values(), key=lambda rank: rank.ranking, reverse=True): + print 'Rankings for %s' % interface.date + for rank in rankings: print rank else: - print 'No rankings for %s' % date - -session.commit() + print 'No rankings for %s' % interface.date -- cgit v1.2.3