def make_team(team_name, scores, str_table): err = "" team = Team() team.name = team_name if (scores == None): scores = [0] * 7 if (len(scores) < 7): scores = scores + [0] * (7 - len(scores)) team.scores = scores for r in range(len(str_table)): row = str_table[r] if (len(row) < 3): err = "format error(row %d): name position PA PA..." % (r + 1) break order = str(r + 1) no = row[0] pos = row[1].upper() PAs = row[2:] team.batters.append(rdBatter(order, no, pos)) team.order_table.append(PAs) if (pos == 'P'): team.pitchers.append(rdPitcher(no)) return team, err
def make_team(team_name, scores, str_table): err = "" team = Team() team.name = team_name if( scores == None ): scores = [0] * 7 if( len(scores) < 7 ): scores = scores + [0] * (7 - len(scores)) team.scores = scores for r in range(len(str_table)): row = str_table[r] if( len(row) < 3 ): err = "format error(row %d): name position PA PA..." %(r+1) break order = str(r+1) no = row[0] pos = row[1].upper() PAs = row[2:] team.batters.append( rdBatter(order, no, pos) ) team.order_table.append( PAs ) if( pos == 'P' ): team.pitchers.append( rdPitcher(no) ) return team, err
def parse_PA(team, order, turn, inning, curr_order): err = "" pa_str = team.order_table[order][turn].upper() s = pa_str.split('/') pa = PA() pa.inning = inning pa.raw_str = pa_str batter = curr_order[order] # pointer to current batter if (s[0] == 'N'): # no play pa.isPlay = False else: pa.isPlay = True while (change_pitcher(s) or change_batter(s)): if (change_pitcher(s)): no = s[0][1:].upper() pa.change_pitcher = no s = s[1:] if (change_batter(s)): # change batter no = s[0][1:].upper() idx = team.batters.index(batter) # current batter index batter = team.find_batter(no) if (batter == None or no == "OB"): # may exist multiple OB batter = rdBatter('R', no) team.batters.insert(idx + 1, batter) curr_order[order] = batter s = s[1:] if (len(s) == 1): # result pa.result = s[0] elif (len(s) == 2): if (s[0].isdigit() or (s[0] in ['L', 'R', 'C'])): # pos-res pa.pos = s[0] pa.result = s[1] else: # res-end pa.result = s[0] pa, err = parse_base(pa, s[1]) elif (len(s) == 3): # pos-res-end pa.pos = s[0] pa.result = s[1] pa, err = parse_base(pa, s[2]) else: err = "Incorrect PA format %s\n" % pa.raw_str return pa, err least_out = check_least_out(pa) if (pa.out < least_out): pa.out = least_out err = batter.AddPA(pa) team.order_table[order][turn] = [batter, pa] return pa, err
def newgame(request): if request.method != 'POST': teams = Team.objects.all() context = {'teams':teams} return render (request , 'sbleague/newgame.html',context) else : teams = Team.objects.all() home_teamID = request.POST.get("hometeamID", "") away_teamID = request.POST.get("awayteamID", "") hometeam = Team.objects.get(pk=home_teamID) awayteam = Team.objects.get(pk=away_teamID) homeplayer = Member.objects.filter(team = home_teamID).order_by("number") awayplayer = Member.objects.filter(team = away_teamID).order_by("number") date = request.POST.get("date", "") location = request.POST.get("location", "") game_id = request.POST.get("game_id", "") ############################################################################# away_record = request.POST.get("away_rd", "") home_record = request.POST.get("home_rd", "") record = None record_err = "" # ===== record parser if( len(away_record) and len(home_record) ): awayteam_name = awayteam.name.encode('utf8')[0:6] hometeam_name = hometeam.name.encode('utf8')[0:6] away_table = text_to_table(away_record.encode('utf8')) home_table = text_to_table(home_record.encode('utf8')) record, record_err = parse_game_record(awayteam_name, None, away_table, hometeam_name, None, home_table) record.game_type = "台大慢壘聯盟" record.date = date record.location = location record.game_id = game_id record.away.raw_record = away_record.encode('utf8') record.home.raw_record = home_record.encode('utf8') else: if( len(away_record) == 0 ): record_err = "Away 沒有記錄" else: record_err = "Home 沒有記錄" ############################################################################# if( date == u'' ): err_message = "請輸入日期" context = {'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message} return render(request, 'sbleague/newgame.html', context) if( game_id == u'' ): err_message = "請輸入場次編號" context = {'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message} return render(request, 'sbleague/newgame.html', context) game_exist = True try: new = Game.objects.get(gameID=game_id) except Game.DoesNotExist: # --- add new game game_exist = False max_batter_nums = 25 max_pitcher_nums = 5 if( record != None and record_err == ""): # --- append batter_num to 25 and pitcher_num to 5 if( record.away.nBatters < max_batter_nums ): for i in range(max_batter_nums-record.away.nBatters): record.away.batters.append(rdBatter()) if( record.home.nBatters < max_batter_nums ): for i in range(max_batter_nums-record.home.nBatters): record.home.batters.append(rdBatter()) if( record.away.nPitchers < max_pitcher_nums ): for i in range(max_pitcher_nums-record.away.nPitchers): record.away.pitchers.append(rdPitcher()) if( record.home.nPitchers < max_pitcher_nums ): for i in range(max_pitcher_nums-record.home.nPitchers): record.home.pitchers.append(rdPitcher()) if( game_exist ): err_message = "重複的場次編號" context = {'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message} return render(request, 'sbleague/newgame.html', context) # === record error if( record_err != "" ): err_message = record_err context = {'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message} return render(request, 'sbleague/newgame.html', context) # === success add new game if 'send' in request.POST: # --- send data context = {'hometeam': hometeam, 'awayteam': awayteam, 'homeplayer': homeplayer ,'awayplayer': awayplayer, 'date': date, 'location': location , 'game_id': game_id, 'home_away': range(2), 'max_batter_nums': max_batter_nums, 'max_pitcher_nums': max_pitcher_nums, 'record': record} return render(request, 'sbleague/newgame_detail.html', context) elif 'download' in request.POST: filename = '%d.txt' %int(game_id) filepath = 'sbleague/static/txt/%s' %filename with open(filepath, 'w') as f: f.write(record.post_ptt) print "save %s" %filepath response = HttpResponse(FileWrapper( file(filepath) ), content_type=mimetypes.guess_type(filepath)[0] ) response['Content-Disposition'] = 'attachment; filename=%s' %filename response['Content-Length'] = os.path.getsize(filepath) return response else: # --- preview err_message = "preview" context = {'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message, 'record': record, 'preview': True} return render(request, 'sbleague/newgame.html', context)
def newgame(request): if request.method != 'POST': teams = Team.objects.all() context = {'teams': teams} return render(request, 'sbleague/newgame.html', context) else: teams = Team.objects.all() home_teamID = request.POST.get("hometeamID", "") away_teamID = request.POST.get("awayteamID", "") hometeam = Team.objects.get(pk=home_teamID) awayteam = Team.objects.get(pk=away_teamID) homeplayer = Member.objects.filter(team=home_teamID).order_by("number") awayplayer = Member.objects.filter(team=away_teamID).order_by("number") date = request.POST.get("date", "") location = request.POST.get("location", "") game_id = request.POST.get("game_id", "") ############################################################################# away_record = request.POST.get("away_rd", "") home_record = request.POST.get("home_rd", "") record = None record_err = "" # ===== record parser if (len(away_record) and len(home_record)): awayteam_name = awayteam.name.encode('utf8')[0:6] hometeam_name = hometeam.name.encode('utf8')[0:6] away_table = text_to_table(away_record.encode('utf8')) home_table = text_to_table(home_record.encode('utf8')) record, record_err = parse_game_record(awayteam_name, None, away_table, hometeam_name, None, home_table) record.game_type = "台大慢壘聯盟" record.date = date record.location = location record.game_id = game_id record.away.raw_record = away_record.encode('utf8') record.home.raw_record = home_record.encode('utf8') else: if (len(away_record) == 0): record_err = "Away 沒有記錄" else: record_err = "Home 沒有記錄" ############################################################################# if (date == u''): err_message = "請輸入日期" context = { 'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message } return render(request, 'sbleague/newgame.html', context) if (game_id == u''): err_message = "請輸入場次編號" context = { 'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message } return render(request, 'sbleague/newgame.html', context) game_exist = True try: new = Game.objects.get(gameID=game_id) except Game.DoesNotExist: # --- add new game game_exist = False max_batter_nums = 25 max_pitcher_nums = 5 if (record != None and record_err == ""): # --- append batter_num to 25 and pitcher_num to 5 if (record.away.nBatters < max_batter_nums): for i in range(max_batter_nums - record.away.nBatters): record.away.batters.append(rdBatter()) if (record.home.nBatters < max_batter_nums): for i in range(max_batter_nums - record.home.nBatters): record.home.batters.append(rdBatter()) if (record.away.nPitchers < max_pitcher_nums): for i in range(max_pitcher_nums - record.away.nPitchers): record.away.pitchers.append(rdPitcher()) if (record.home.nPitchers < max_pitcher_nums): for i in range(max_pitcher_nums - record.home.nPitchers): record.home.pitchers.append(rdPitcher()) if (game_exist): err_message = "重複的場次編號" context = { 'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message } return render(request, 'sbleague/newgame.html', context) # === record error if (record_err != ""): err_message = record_err context = { 'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message } return render(request, 'sbleague/newgame.html', context) # === success add new game if 'send' in request.POST: # --- send data context = { 'hometeam': hometeam, 'awayteam': awayteam, 'homeplayer': homeplayer, 'awayplayer': awayplayer, 'date': date, 'location': location, 'game_id': game_id, 'home_away': range(2), 'max_batter_nums': max_batter_nums, 'max_pitcher_nums': max_pitcher_nums, 'record': record } return render(request, 'sbleague/newgame_detail.html', context) elif 'download' in request.POST: filename = '%d.txt' % int(game_id) filepath = 'sbleague/static/txt/%s' % filename with open(filepath, 'w') as f: f.write(record.post_ptt) print "save %s" % filepath response = HttpResponse( FileWrapper(file(filepath)), content_type=mimetypes.guess_type(filepath)[0]) response[ 'Content-Disposition'] = 'attachment; filename=%s' % filename response['Content-Length'] = os.path.getsize(filepath) return response else: # --- preview err_message = "preview" context = { 'teams': teams, 'awayteam': awayteam, 'hometeam': hometeam, 'date': date, 'location': location, 'game_id': game_id, 'away_record': away_record, 'home_record': home_record, 'warning': err_message, 'record': record, 'preview': True } return render(request, 'sbleague/newgame.html', context)
def parse_PA(team, order, turn, inning, curr_order): err = "" pa_str = team.order_table[order][turn].upper() s = pa_str.split('/') pa = PA() pa.inning = inning pa.raw_str = pa_str batter = curr_order[order] # pointer to current batter if( s[0] == 'N' ): # no play pa.isPlay = False else: pa.isPlay = True while( change_pitcher(s) or change_batter(s) ): if( change_pitcher(s) ): no = s[0][1:].upper() pa.change_pitcher = no s = s[1:] if( change_batter(s) ): # change batter no = s[0][1:].upper() idx = team.batters.index(batter) # current batter index batter = team.find_batter(no) if( batter == None or no == "OB" ): # may exist multiple OB batter = rdBatter('R', no) team.batters.insert(idx+1, batter) curr_order[order] = batter s = s[1:] if( len(s) == 1 ): # result pa.result = s[0] elif( len(s) == 2 ): if( s[0].isdigit() or (s[0] in ['L', 'R', 'C']) ): # pos-res pa.pos = s[0] pa.result = s[1] else: # res-end pa.result = s[0] pa, err = parse_base(pa, s[1]) elif( len(s) == 3 ): # pos-res-end pa.pos = s[0] pa.result = s[1] pa, err = parse_base(pa, s[2]) else: err = "Incorrect PA format %s\n" %pa.raw_str return pa, err least_out = check_least_out(pa) if( pa.out < least_out ): pa.out = least_out err = batter.AddPA(pa) team.order_table[order][turn] = [batter, pa] return pa, err