public
Description: college football app
Homepage: http://www.fumblerooski.org/
Clone URL: git://github.com/dwillis/fumblerooski.git
Derek Willis (author)
Thu Nov 05 10:17:58 -0800 2009
commit  934bc9878439b45bce72e9e224a1fbc138d04953
tree    d5818d1a467f118d95f1af56e5ddca8594a6d0f4
parent  e8541b94d1c727079465f98661caa47c7cc2a229
fumblerooski / utils.py
100644 185 lines (172 sloc) 8.558 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
import re
import csv
import urllib
import datetime
from django.utils.encoding import smart_unicode, force_unicode
from django.db.models import Avg, Sum, Min, Max, Count
from time import strptime, strftime
import time
from urlparse import urljoin
from BeautifulSoup import BeautifulSoup
from fumblerooski.college.models import State, College, CollegeCoach, Game, Position, Player, PlayerGame, PlayerRush, PlayerPass,PlayerReceiving, PlayerFumble, PlayerScoring, PlayerTackle, PlayerTacklesLoss, PlayerPassDefense, PlayerReturn, PlayerSummary, CollegeYear, Conference, GameOffense, GameDefense, Week, GameDrive, DriveOutcome, Ranking, RankingType, RushingSummary, Coach, CoachingJob, QuarterScore
 
def next_coach_id():
    c = Coach.objects.aggregate(Max("id"))
    return c['id__max']+1
 
def update_conf_games(year):
    games = Game.objects.filter(season=year, team1__updated=True, team2__updated=True)
    for game in games:
        try:
            if game.team1.collegeyear_set.get(year=year).conference == game.team2.collegeyear_set.get(year=year).conference:
                game.is_conference_game = True
                game.save()
        except:
            pass
 
def update_quarter_scores(game):
    "Utility to update quarter scores for existing games. New games handled via ncaa_loader."
    doc = urllib.urlopen(game.get_ncaa_xml_url()).read()
    soup = BeautifulSoup(doc)
    quarters = len(soup.findAll('score')[1:])/2
    t2_quarters = soup.findAll('score')[1:quarters+1] #visiting team
    t1_quarters = soup.findAll('score')[quarters+1:] #home team
    for i in range(quarters):
        vqs, created = QuarterScore.objects.get_or_create(game = game, team = game.team2, season=game.season, quarter = i+1, points = int(t2_quarters[i].contents[0]))
        hqs, created = QuarterScore.objects.get_or_create(game = game, team = game.team1, season=game.season, quarter = i+1, points = int(t1_quarters[i].contents[0]))
        
    
 
def update_college_year(year):
    teams = CollegeYear.objects.select_related().filter(year=year, college__updated=True).order_by('college_college.id')
    for team in teams:
        games = Game.objects.filter(team1=team.college, season=year, t1_result__isnull=False).values("t1_result").annotate(count=Count("id")).order_by('t1_result')
        d = {}
        for i in range(len(games)):
            d[games[i]['t1_result']] = games[i]['count']
        try:
            wins = d['W']
        except KeyError:
            wins = 0
        try:
            losses = d['L']
        except KeyError:
            losses = 0
        try:
            ties = d['T']
        except KeyError:
            ties = 0
        if team.conference:
            conf_games = Game.objects.select_related().filter(team1=team.college, season=year, is_conference_game=True, t1_result__isnull=False).values("t1_result").annotate(count=Count("id")).order_by('t1_result')
            if conf_games:
                c = {}
                for i in range(len(conf_games)):
                    c[conf_games[i]['t1_result']] = conf_games[i]['count']
                try:
                    conf_wins = c['W']
                except KeyError:
                    conf_wins = 0
                try:
                    conf_losses = c['L']
                except KeyError:
                    conf_losses = 0
                try:
                    conf_ties = c['T']
                except KeyError:
                    conf_ties = 0
                team.conference_wins=conf_wins
                team.conference_losses=conf_losses
                team.conference_ties=conf_ties
        team.wins=wins
        team.losses=losses
        team.ties=ties
        team.save()
 
def add_college_years(year):
    teams = College.objects.filter(updated=True).order_by('id')
    for team in teams:
        cy, created = CollegeYear.objects.get_or_create(year=year, college=team)
 
def game_weeks(year):
    weeks = Week.objects.filter(year=year).order_by('week_num')
    for week in weeks:
        games = Game.objects.filter(season=year, date__lte=week.end_date, week__isnull=True)
        for game in games:
            game.week = week
            game.save()
 
 
def update_offense(yr='2007'):
    y = Year.objects.get(year=int(yr))
    py = PlayerYear.objects.select_related().filter(year=yr)
    cursor = connection.cursor()
    for player in py:
        ps = PlayerSummary.objects.get_or_create(playeryear=player)
        cursor.execute("""
update football_playersummary
set rushes = (
select sum(football_playeroffense.rushes)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
rush_gain = (
select sum(football_playeroffense.rush_gain)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
rush_net = (
select sum(football_playeroffense.rush_net)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
rush_td = (
select sum(football_playeroffense.rush_td)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
pass_attempts = (
select sum(football_playeroffense.pass_attempts)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
pass_complete = (
select sum(football_playeroffense.pass_complete)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
pass_yards = (
select sum(football_playeroffense.pass_yards)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
pass_td = (
select sum(football_playeroffense.pass_td)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
receptions = (
select sum(football_playeroffense.receptions)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
reception_yards = (
select sum(football_playeroffense.reception_yards)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
reception_td = (
select sum(football_playeroffense.reception_td)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
offense_plays = (
select sum(football_playeroffense.offense_plays)
from football_playeroffense
where football_playeroffense.playeryear_id = %s),
offense_yards = (
select sum(football_playeroffense.offense_yards)
from football_playeroffense
where football_playeroffense.playeryear_id = %s)
where football_playersummary.playeryear_id = %s""", (player.id, player.id, player.id, player.id, player.id, player.id, player.id, player.id, player.id, player.id, player.id, player.id, player.id, player.id)
            )
 
def load_players(year):
    file = open('csv/DivIA.csv').readlines()
    file = file[1:]
    players = open('players.csv','w')
    for line in file:
        players.write(line)
    players.close()
 
    reader = csv.reader(open('players.csv'))
    for row in reader:
        y, created = Year.objects.get_or_create(id=year)
        t = College.objects.get(id=row[0])
        pos, created = Position.objects.get_or_create(abbrev=row[5])
        if row[4] == '':
            if row[3] != 'Team':
                first = raw_input("Enter a first name for %s on %s: " % (row[3], row[1]))
                p, created=Player.objects.get_or_create(ncaa_id=row[7], last_name=force_unicode(row[3].upper()), first_name='', first_name_fixed=force_unicode(first.upper()))
            else:
                pass
        else:
            # change to match on id and last_name only?
            p, created=Player.objects.get_or_create(ncaa_id=row[7], last_name=force_unicode(row[3].upper()), first_name=force_unicode(row[4].upper()), first_name_fixed=force_unicode(row[4].upper()))
        py, created = PlayerYear.objects.get_or_create(player=p, team=t, year=y, position=pos, number=row[2], ncaa_number=row[2], status=row[6])