Skip to content

Commit 274ef3b

Browse files
committed
fix(clash_of_code): add defaults to api data
allows more failsafes and less exposed to minor api changes
1 parent aea0a6f commit 274ef3b

File tree

4 files changed

+46
-42
lines changed

4 files changed

+46
-42
lines changed

codingame/clash_of_code/clash_of_code.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,21 +125,26 @@ def _set_data(self, data: ClashOfCodeDict):
125125
)
126126

127127
self._setattr("public", data.get("type", "PUBLIC") == "PUBLIC")
128-
self._setattr("min_players", data["nbPlayersMin"])
129-
self._setattr("max_players", data["nbPlayersMax"])
128+
self._setattr("min_players", data.get("nbPlayersMin", 2))
129+
self._setattr("max_players", data.get("nbPlayersMax", 100))
130130
self._setattr("modes", data.get("modes"))
131131
self._setattr("programming_languages", data.get("programmingLanguages"))
132132

133-
self._setattr("started", data["started"])
134-
self._setattr("finished", data["finished"])
133+
self._setattr("started", data.get("started"))
134+
self._setattr("finished", data.get("finished"))
135135
self._setattr("mode", data.get("mode"))
136136

137137
self._setattr("creation_time", to_datetime(data.get("creationTime")))
138138
self._setattr("start_time", to_datetime(data.get("startTimestamp")))
139139
self._setattr("end_time", to_datetime(data.get("endTime")))
140140

141141
self._setattr(
142-
"time_before_start", timedelta(milliseconds=data["msBeforeStart"])
142+
"time_before_start",
143+
(
144+
timedelta(milliseconds=data["msBeforeStart"])
145+
if "msBeforeStart" in data
146+
else None
147+
),
143148
)
144149
self._setattr(
145150
"time_before_end",
@@ -160,9 +165,13 @@ def _set_data(self, data: ClashOfCodeDict):
160165
self.finished,
161166
player,
162167
)
163-
for player in data.get("players", [])
164-
]
165-
or minified_players_to_players(data.get("minifiedPlayers", [])),
168+
for player in data.get(
169+
"players",
170+
minified_players_to_players(
171+
data.get("minifiedPlayers", [])
172+
),
173+
)
174+
],
166175
)
167176

168177
def __repr__(self) -> str:

codingame/clash_of_code/player.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ def __init__(
137137
self.started = started
138138
self.finished = finished
139139

140-
self.status = data["status"]
140+
self.status = data.get("status", "STANDARD")
141141
self.owner = self.status == "OWNER"
142142
self.position = data.get("position")
143143
self.rank = data.get("rank")

codingame/clash_of_code/question.py

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ class TestCase(BaseObject):
2020
output_binary_id: int
2121

2222
def __init__(self, state: "ConnectionState", data: TestCaseDict):
23-
self.index = data["index"]
23+
self.index = data.get("index")
2424
self.label = data.get("label")
25-
self.input_binary_id = data["inputBinaryId"]
26-
self.output_binary_id = data["outputBinaryId"]
25+
self.input_binary_id = data.get("inputBinaryId")
26+
self.output_binary_id = data.get("outputBinaryId")
2727

2828
super().__init__(state)
2929

@@ -66,14 +66,11 @@ def __init__(
6666
):
6767
self.clash_of_code = clash_of_code
6868
self.test_case = test_case
69-
self.success = data["comparison"]["success"]
70-
self.found = (
71-
data["comparison"]["found"]
72-
if "found" in data["comparison"]
73-
else data["output"]
74-
)
69+
comparison = data.get("comparison", {})
70+
self.success = comparison.get("success")
71+
self.found = comparison.get("found", data.get("output"))
7572
self.expected = (
76-
data["output"] if self.success else data["comparison"]["expected"]
73+
data.get("output") if self.success else comparison.get("expected")
7774
)
7875

7976
super().__init__(state)
@@ -91,14 +88,12 @@ def __init__(
9188
contributor: Optional[PartialCodinGamer],
9289
data: ContributionDict,
9390
):
94-
self.type = data["type"]
95-
self.status = data["status"]
91+
self.type = data.get("type")
92+
self.status = data.get("status")
9693
self.contributor = contributor
97-
self.moderators = (
98-
[PartialCodinGamer(state, mod) for mod in data["moderators"]]
99-
if "moderators" in data
100-
else []
101-
)
94+
self.moderators = [
95+
PartialCodinGamer(state, mod) for mod in data.get("moderators", [])
96+
]
10297

10398
super().__init__(state)
10499

@@ -125,19 +120,19 @@ def __init__(
125120
):
126121
self.clash_of_code = clash_of_code
127122
self.id = data["id"]
128-
self.initial_id = data["initialId"]
129-
self.type = data["type"]
130-
self.mode = data["mode"]
131-
self.raw_statement = data["statement"]
132-
self.stub_generator = data["stubGenerator"]
133-
self.duration = data["duration"]
134-
self.index = data["index"]
123+
self.initial_id = data.get("initialId")
124+
self.type = data.get("type")
125+
self.mode = data.get("mode")
126+
self.raw_statement = data.get("statement")
127+
self.stub_generator = data.get("stubGenerator")
128+
self.duration = data.get("duration")
129+
self.index = data.get("index")
135130
self.test_cases = sorted(
136-
[TestCase(state, case) for case in data["testCases"]],
131+
[TestCase(state, case) for case in data.get("testCases", [])],
137132
key=lambda t: t.index,
138133
)
139134
self.available_language_ids = [
140-
lang["id"] for lang in data["availableLanguages"]
135+
lang["id"] for lang in data.get("availableLanguages", [])
141136
]
142137
contributor = (
143138
PartialCodinGamer(state, data["contributor"])

codingame/clash_of_code/solution.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ def __init__(
4949
),
5050
)
5151

52-
self.submission_id = data["testSessionQuestionSubmissionId"]
53-
self.commentable_id = data["commentableId"]
54-
self.votable_id = data["votableId"]
52+
self.submission_id = data.get("testSessionQuestionSubmissionId")
53+
self.commentable_id = data.get("commentableId")
54+
self.votable_id = data.get("votableId")
5555

56-
self.creation_time = to_datetime(data["creationTime"])
57-
self.language_id = data["programmingLanguageId"]
58-
self.code = data["code"]
59-
self.shared = data["shared"]
56+
self.creation_time = to_datetime(data.get("creationTime"))
57+
self.language_id = data.get("programmingLanguageId")
58+
self.code = data.get("code")
59+
self.shared = data.get("shared")
6060

6161
super().__init__(state)
6262

0 commit comments

Comments
 (0)