Make team number a string
Signed-off-by: Emily Markova <emily.markova@gmail.com>
Change-Id: Ia1cff2cfb854e2202cbcaee6f1fd22fc7efd1c15
diff --git a/scouting/webserver/driver_ranking/driver_ranking.go b/scouting/webserver/driver_ranking/driver_ranking.go
index 82e34e1..82445bf 100644
--- a/scouting/webserver/driver_ranking/driver_ranking.go
+++ b/scouting/webserver/driver_ranking/driver_ranking.go
@@ -76,9 +76,9 @@
// Most of the data is unused so we just fill in empty
// strings.
"", "", "", "",
- strconv.Itoa(int(ranking.Rank1)),
- strconv.Itoa(int(ranking.Rank2)),
- strconv.Itoa(int(ranking.Rank3)),
+ ranking.Rank1,
+ ranking.Rank2,
+ ranking.Rank3,
})
}
diff --git a/scouting/webserver/driver_ranking/driver_ranking_test.go b/scouting/webserver/driver_ranking/driver_ranking_test.go
index 47a412e..98a60e8 100644
--- a/scouting/webserver/driver_ranking/driver_ranking_test.go
+++ b/scouting/webserver/driver_ranking/driver_ranking_test.go
@@ -28,8 +28,8 @@
func TestDriverRankingRun(t *testing.T) {
var database MockDatabase
database.rawRankings = []db.DriverRankingData{
- db.DriverRankingData{MatchNumber: 1, Rank1: 1234, Rank2: 1235, Rank3: 1236},
- db.DriverRankingData{MatchNumber: 2, Rank1: 971, Rank2: 972, Rank3: 973},
+ db.DriverRankingData{MatchNumber: 1, Rank1: "1234", Rank2: "1235", Rank3: "1236"},
+ db.DriverRankingData{MatchNumber: 2, Rank1: "971", Rank2: "972", Rank3: "973"},
}
GenerateFullDriverRanking(&database, "./fake_driver_rank_script")
diff --git a/scouting/webserver/match_list/match_list.go b/scouting/webserver/match_list/match_list.go
index c5af661..2ac5133 100644
--- a/scouting/webserver/match_list/match_list.go
+++ b/scouting/webserver/match_list/match_list.go
@@ -6,7 +6,6 @@
"github.com/frc971/971-Robot-Code/scouting/db"
"github.com/frc971/971-Robot-Code/scouting/scraping"
"log"
- "strconv"
"strings"
)
@@ -14,66 +13,32 @@
AddToMatch(db.TeamMatch) error
}
-func parseTeamKey(teamKey string) (int, error) {
+func parseTeamKey(teamKey string) string {
// TBA prefixes teams with "frc". Not sure why. Get rid of that.
teamKey = strings.TrimPrefix(teamKey, "frc")
- magnitude := 0
- if strings.HasSuffix(teamKey, "A") {
- magnitude = 0
- teamKey = strings.TrimSuffix(teamKey, "A")
- } else if strings.HasSuffix(teamKey, "B") {
- magnitude = 9
- teamKey = strings.TrimSuffix(teamKey, "B")
- } else if strings.HasSuffix(teamKey, "C") {
- magnitude = 8
- teamKey = strings.TrimSuffix(teamKey, "C")
- } else if strings.HasSuffix(teamKey, "D") {
- magnitude = 7
- teamKey = strings.TrimSuffix(teamKey, "D")
- } else if strings.HasSuffix(teamKey, "E") {
- magnitude = 6
- teamKey = strings.TrimSuffix(teamKey, "E")
- } else if strings.HasSuffix(teamKey, "F") {
- magnitude = 5
- teamKey = strings.TrimSuffix(teamKey, "F")
- }
-
- if magnitude != 0 {
- teamKey = strconv.Itoa(magnitude) + teamKey
- }
-
- result, err := strconv.Atoi(teamKey)
- return result, err
+ return teamKey
}
// Parses the alliance data from the specified match and returns the three red
// teams and the three blue teams.
-func parseTeamKeys(match *scraping.Match) ([3]int32, [3]int32, error) {
+func parseTeamKeys(match *scraping.Match) ([3]string, [3]string, error) {
redKeys := match.Alliances.Red.TeamKeys
blueKeys := match.Alliances.Blue.TeamKeys
if len(redKeys) != 3 || len(blueKeys) != 3 {
- return [3]int32{}, [3]int32{}, errors.New(fmt.Sprintf(
+ return [3]string{}, [3]string{}, errors.New(fmt.Sprintf(
"Found %d red teams and %d blue teams.", len(redKeys), len(blueKeys)))
}
- var red [3]int32
+ var red [3]string
for i, key := range redKeys {
- team, err := parseTeamKey(key)
- if err != nil {
- return [3]int32{}, [3]int32{}, errors.New(fmt.Sprintf(
- "Failed to parse red %d team '%s' as integer: %v", i+1, key, err))
- }
- red[i] = int32(team)
+ team := parseTeamKey(key)
+ red[i] = team
}
- var blue [3]int32
+ var blue [3]string
for i, key := range blueKeys {
- team, err := parseTeamKey(key)
- if err != nil {
- return [3]int32{}, [3]int32{}, errors.New(fmt.Sprintf(
- "Failed to parse blue %d team '%s' as integer: %v", i+1, key, err))
- }
- blue[i] = int32(team)
+ team := parseTeamKey(key)
+ blue[i] = team
}
return red, blue, nil
}
@@ -97,32 +62,32 @@
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "R", AlliancePosition: 1, TeamNumber: strconv.Itoa(int(red[0])),
+ Alliance: "R", AlliancePosition: 1, TeamNumber: red[0],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "R", AlliancePosition: 2, TeamNumber: strconv.Itoa(int(red[1])),
+ Alliance: "R", AlliancePosition: 2, TeamNumber: red[1],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "R", AlliancePosition: 3, TeamNumber: strconv.Itoa(int(red[2])),
+ Alliance: "R", AlliancePosition: 3, TeamNumber: red[2],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "B", AlliancePosition: 1, TeamNumber: strconv.Itoa(int(blue[0])),
+ Alliance: "B", AlliancePosition: 1, TeamNumber: blue[0],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "B", AlliancePosition: 2, TeamNumber: strconv.Itoa(int(blue[1])),
+ Alliance: "B", AlliancePosition: 2, TeamNumber: blue[1],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "B", AlliancePosition: 3, TeamNumber: strconv.Itoa(int(blue[2])),
+ Alliance: "B", AlliancePosition: 3, TeamNumber: blue[2],
},
}
diff --git a/scouting/webserver/rankings/rankings.go b/scouting/webserver/rankings/rankings.go
index 0d20b54..9ffa503 100644
--- a/scouting/webserver/rankings/rankings.go
+++ b/scouting/webserver/rankings/rankings.go
@@ -4,7 +4,6 @@
"github.com/frc971/971-Robot-Code/scouting/db"
"github.com/frc971/971-Robot-Code/scouting/scraping"
"log"
- "strconv"
"strings"
)
@@ -12,10 +11,10 @@
AddOrUpdateRankings(db.Ranking) error
}
-func parseTeamKey(teamKey string) (int, error) {
+func parseTeamKey(teamKey string) string {
// TBA prefixes teams with "frc". Not sure why. Get rid of that.
teamKey = strings.TrimPrefix(teamKey, "frc")
- return strconv.Atoi(teamKey)
+ return teamKey
}
func GetRankings(database Database, year int32, eventCode string, blueAllianceConfig string) {
@@ -26,12 +25,7 @@
}
for _, rank := range rankings.Rankings {
- teamKey, err := parseTeamKey(rank.TeamKey)
-
- if err != nil {
- log.Println("Failed to parse team key: ", err)
- continue
- }
+ teamKey := parseTeamKey(rank.TeamKey)
rankingInfo := db.Ranking{
TeamNumber: teamKey,
diff --git a/scouting/webserver/rankings/rankings_test.go b/scouting/webserver/rankings/rankings_test.go
index 4ab3c34..748bcf8 100644
--- a/scouting/webserver/rankings/rankings_test.go
+++ b/scouting/webserver/rankings/rankings_test.go
@@ -58,15 +58,15 @@
}
beginningThreeExpected := []db.Ranking{
- {TeamNumber: 359, Losses: 1, Wins: 11, Ties: 0, Rank: 1, Dq: 0},
- {TeamNumber: 5254, Losses: 1, Wins: 11, Ties: 0, Rank: 2, Dq: 0},
- {TeamNumber: 3990, Losses: 1, Wins: 11, Ties: 0, Rank: 3, Dq: 0},
+ {TeamNumber: "359", Losses: 1, Wins: 11, Ties: 0, Rank: 1, Dq: 0},
+ {TeamNumber: "5254", Losses: 1, Wins: 11, Ties: 0, Rank: 2, Dq: 0},
+ {TeamNumber: "3990", Losses: 1, Wins: 11, Ties: 0, Rank: 3, Dq: 0},
}
endThreeExpected := []db.Ranking{
- {TeamNumber: 5943, Losses: 10, Wins: 2, Ties: 0, Rank: 34, Dq: 0},
- {TeamNumber: 4203, Losses: 10, Wins: 2, Ties: 0, Rank: 35, Dq: 0},
- {TeamNumber: 5149, Losses: 10, Wins: 2, Ties: 0, Rank: 36, Dq: 0},
+ {TeamNumber: "5943", Losses: 10, Wins: 2, Ties: 0, Rank: 34, Dq: 0},
+ {TeamNumber: "4203", Losses: 10, Wins: 2, Ties: 0, Rank: 35, Dq: 0},
+ {TeamNumber: "5149", Losses: 10, Wins: 2, Ties: 0, Rank: 36, Dq: 0},
}
if !reflect.DeepEqual(beginningThreeExpected, database.rankings[0:3]) {
diff --git a/scouting/webserver/requests/debug/cli/cli_test.py b/scouting/webserver/requests/debug/cli/cli_test.py
index b944564..d11b506 100644
--- a/scouting/webserver/requests/debug/cli/cli_test.py
+++ b/scouting/webserver/requests/debug/cli/cli_test.py
@@ -101,7 +101,7 @@
# First submit some data to be added to the database.
json_path = write_json_request({
- "team": 100,
+ "team": "100",
"notes": "A very inspiring and useful comment",
"good_driving": True,
"bad_driving": False,
@@ -124,7 +124,7 @@
self.assertIn(
textwrap.dedent("""\
{
- Team: (int32) 100,
+ Team: (string) (len=3) "100",
Notes: (string) (len=35) "A very inspiring and useful comment",
GoodDriving: (bool) true,
BadDriving: (bool) false,
@@ -140,10 +140,10 @@
# First submit some data to be added to the database.
json_path = write_json_request({
- "matchNumber": 100,
- "rank1": 101,
- "rank2": 202,
- "rank3": 303,
+ "match_number": 100,
+ "rank1": "101",
+ "rank2": "202",
+ "rank3": "303",
})
exit_code, _, stderr = run_debug_cli(
["-submitDriverRanking", json_path])
@@ -160,9 +160,9 @@
textwrap.dedent("""\
{
MatchNumber: (int32) 100,
- Rank1: (int32) 101,
- Rank2: (int32) 202,
- Rank3: (int32) 303
+ Rank1: (string) (len=3) "101",
+ Rank2: (string) (len=3) "202",
+ Rank3: (string) (len=3) "303"
}"""), stdout)
def test_request_all_matches(self):
diff --git a/scouting/webserver/requests/messages/request_all_driver_rankings_response.fbs b/scouting/webserver/requests/messages/request_all_driver_rankings_response.fbs
index dcc9712..8ce0ef2 100644
--- a/scouting/webserver/requests/messages/request_all_driver_rankings_response.fbs
+++ b/scouting/webserver/requests/messages/request_all_driver_rankings_response.fbs
@@ -1,10 +1,10 @@
namespace scouting.webserver.requests;
table Ranking {
- matchNumber:int (id: 0);
- rank1:int (id: 1);
- rank2:int (id: 2);
- rank3:int (id: 3);
+ match_number:int (id: 0);
+ rank1:string (id: 1);
+ rank2:string (id: 2);
+ rank3:string (id: 3);
}
table RequestAllDriverRankingsResponse {
diff --git a/scouting/webserver/requests/messages/request_all_notes_response.fbs b/scouting/webserver/requests/messages/request_all_notes_response.fbs
index 70504d3..1afdf25 100644
--- a/scouting/webserver/requests/messages/request_all_notes_response.fbs
+++ b/scouting/webserver/requests/messages/request_all_notes_response.fbs
@@ -1,7 +1,7 @@
namespace scouting.webserver.requests;
table Note {
- team:int (id: 0);
+ team:string (id: 0);
notes:string (id: 1);
good_driving:bool (id: 2);
bad_driving:bool (id: 3);
diff --git a/scouting/webserver/requests/messages/request_notes_for_team.fbs b/scouting/webserver/requests/messages/request_notes_for_team.fbs
index 9bda6d3..aa93a2b 100644
--- a/scouting/webserver/requests/messages/request_notes_for_team.fbs
+++ b/scouting/webserver/requests/messages/request_notes_for_team.fbs
@@ -1,7 +1,7 @@
namespace scouting.webserver.requests;
table RequestNotesForTeam {
- team:int (id: 0);
+ team:string (id: 0);
}
root_type RequestNotesForTeam;
diff --git a/scouting/webserver/requests/messages/submit_driver_ranking.fbs b/scouting/webserver/requests/messages/submit_driver_ranking.fbs
index ac1e218..052728c 100644
--- a/scouting/webserver/requests/messages/submit_driver_ranking.fbs
+++ b/scouting/webserver/requests/messages/submit_driver_ranking.fbs
@@ -1,10 +1,10 @@
namespace scouting.webserver.requests;
table SubmitDriverRanking {
- matchNumber:int (id: 0);
- rank1:int (id: 1);
- rank2:int (id: 2);
- rank3:int (id: 3);
+ match_number:int (id: 0);
+ rank1:string (id: 1);
+ rank2:string (id: 2);
+ rank3:string (id: 3);
}
root_type SubmitDriverRanking;
diff --git a/scouting/webserver/requests/messages/submit_notes.fbs b/scouting/webserver/requests/messages/submit_notes.fbs
index 845a601..332b612 100644
--- a/scouting/webserver/requests/messages/submit_notes.fbs
+++ b/scouting/webserver/requests/messages/submit_notes.fbs
@@ -1,7 +1,7 @@
namespace scouting.webserver.requests;
table SubmitNotes {
- team:int (id: 0);
+ team:string (id: 0);
notes:string (id: 1);
good_driving:bool (id: 2);
bad_driving:bool (id: 3);
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index 51612ff..af67386 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -84,7 +84,7 @@
ReturnStats2023() ([]db.Stats2023, error)
ReturnStats2023ForTeam(teamNumber string, matchNumber int32, setNumber int32, compLevel string, preScouting bool) ([]db.Stats2023, error)
QueryAllShifts(int) ([]db.Shift, error)
- QueryNotes(int32) ([]string, error)
+ QueryNotes(string) ([]string, error)
QueryPitImages(string) ([]db.RequestedPitImage, error)
AddNotes(db.NotesData) error
AddPitImage(db.PitImage) error
@@ -367,7 +367,7 @@
}
err = handler.db.AddNotes(db.NotesData{
- TeamNumber: request.Team(),
+ TeamNumber: string(request.Team()),
Notes: string(request.Notes()),
GoodDriving: bool(request.GoodDriving()),
BadDriving: bool(request.BadDriving()),
@@ -671,7 +671,7 @@
return
}
- notes, err := handler.db.QueryNotes(request.Team())
+ notes, err := handler.db.QueryNotes(string(request.Team()))
if err != nil {
respondWithError(w, http.StatusInternalServerError, fmt.Sprintf("Failed to query notes: %v", err))
return
@@ -790,9 +790,9 @@
err = handler.db.AddDriverRanking(db.DriverRankingData{
MatchNumber: request.MatchNumber(),
- Rank1: request.Rank1(),
- Rank2: request.Rank2(),
- Rank3: request.Rank3(),
+ Rank1: string(request.Rank1()),
+ Rank2: string(request.Rank2()),
+ Rank3: string(request.Rank3()),
})
if err != nil {
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index e50583b..0797bc1 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -449,7 +449,7 @@
builder := flatbuffers.NewBuilder(1024)
builder.Finish((&submit_notes.SubmitNotesT{
- Team: 971,
+ Team: "971",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -467,7 +467,7 @@
expected := []db.NotesData{
{
- TeamNumber: 971,
+ TeamNumber: "971",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -487,7 +487,7 @@
func TestRequestNotes(t *testing.T) {
database := MockDatabase{
notes: []db.NotesData{{
- TeamNumber: 971,
+ TeamNumber: "971A",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -505,7 +505,7 @@
builder := flatbuffers.NewBuilder(1024)
builder.Finish((&request_notes_for_team.RequestNotesForTeamT{
- Team: 971,
+ Team: "971A",
}).Pack(builder))
response, err := debug.RequestNotes("http://localhost:8080", builder.FinishedBytes())
if err != nil {
@@ -714,9 +714,9 @@
builder := flatbuffers.NewBuilder(1024)
builder.Finish((&submit_driver_ranking.SubmitDriverRankingT{
MatchNumber: 36,
- Rank1: 1234,
- Rank2: 1235,
- Rank3: 1236,
+ Rank1: "1234",
+ Rank2: "1235",
+ Rank3: "1236",
}).Pack(builder))
_, err := debug.SubmitDriverRanking("http://localhost:8080", builder.FinishedBytes())
@@ -725,7 +725,7 @@
}
expected := []db.DriverRankingData{
- {MatchNumber: 36, Rank1: 1234, Rank2: 1235, Rank3: 1236},
+ {MatchNumber: 36, Rank1: "1234", Rank2: "1235", Rank3: "1236"},
}
if !reflect.DeepEqual(database.driver_ranking, expected) {
@@ -739,15 +739,15 @@
driver_ranking: []db.DriverRankingData{
{
MatchNumber: 36,
- Rank1: 1234,
- Rank2: 1235,
- Rank3: 1236,
+ Rank1: "1234",
+ Rank2: "1235",
+ Rank3: "1236",
},
{
MatchNumber: 36,
- Rank1: 101,
- Rank2: 202,
- Rank3: 303,
+ Rank1: "101",
+ Rank2: "202",
+ Rank3: "303",
},
},
}
@@ -768,15 +768,15 @@
DriverRankingList: []*request_all_driver_rankings_response.RankingT{
{
MatchNumber: 36,
- Rank1: 1234,
- Rank2: 1235,
- Rank3: 1236,
+ Rank1: "1234",
+ Rank2: "1235",
+ Rank3: "1236",
},
{
MatchNumber: 36,
- Rank1: 101,
- Rank2: 202,
- Rank3: 303,
+ Rank1: "101",
+ Rank2: "202",
+ Rank3: "303",
},
},
}
@@ -795,7 +795,7 @@
db := MockDatabase{
notes: []db.NotesData{
{
- TeamNumber: 971,
+ TeamNumber: "971",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -806,7 +806,7 @@
EasilyDefended: false,
},
{
- TeamNumber: 972,
+ TeamNumber: "972",
Notes: "More Notes",
GoodDriving: false,
BadDriving: false,
@@ -834,7 +834,7 @@
expected := request_all_notes_response.RequestAllNotesResponseT{
NoteList: []*request_all_notes_response.NoteT{
{
- Team: 971,
+ Team: "971",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -845,7 +845,7 @@
EasilyDefended: false,
},
{
- Team: 972,
+ Team: "972",
Notes: "More Notes",
GoodDriving: false,
BadDriving: false,
@@ -1137,7 +1137,7 @@
return results, nil
}
-func (database *MockDatabase) QueryNotes(requestedTeam int32) ([]string, error) {
+func (database *MockDatabase) QueryNotes(requestedTeam string) ([]string, error) {
var results []string
for _, data := range database.notes {
if data.TeamNumber == requestedTeam {