Skip to content

Commit 1a2f5c9

Browse files
authored
refactor(statsbomb): minor code improvements (#425)
1 parent 23388b5 commit 1a2f5c9

File tree

1 file changed

+23
-32
lines changed

1 file changed

+23
-32
lines changed

kloppy/infra/serializers/event/statsbomb/specification.py

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -274,38 +274,31 @@ def deserialize(self, event_factory: EventFactory) -> List[Event]:
274274
275275
Args:
276276
event_factory: The event factory to use to build the event.
277-
periods: The periods in the match.
278-
teams: The teams in the match.
279-
events: All events in the match.
280-
data_version: The x/y and shot fidelity versions of the data.
281277
282278
Returns:
283279
A list of kloppy events.
284280
"""
285281
generic_event_kwargs = self._parse_generic_kwargs()
286-
aerial_won_events = self._create_aerial_won_event(
282+
283+
# create events
284+
base_events = self._create_events(
287285
event_factory, **generic_event_kwargs
288286
)
289-
base_events = self._create_events(
287+
aerial_won_events = self._create_aerial_won_event(
290288
event_factory, **generic_event_kwargs
291289
)
292290
ball_out_events = self._create_ball_out_event(
293291
event_factory, **generic_event_kwargs
294292
)
295-
under_pressure_events = aerial_won_events + base_events
296-
for event in under_pressure_events:
293+
294+
# add qualifiers
295+
for event in aerial_won_events + base_events:
297296
self._add_under_pressure_qualifier(event)
298-
events = under_pressure_events + ball_out_events
299-
for event in events:
300-
play_pattern_qualifiers = _get_play_pattern_qualifiers(
301-
event.raw_event
302-
)
303-
if len(play_pattern_qualifiers) > 0:
304-
event.qualifiers = (
305-
event.qualifiers or []
306-
) + play_pattern_qualifiers
297+
for event in aerial_won_events + base_events + ball_out_events:
298+
self._add_play_pattern_qualifiers(event)
307299

308-
return events
300+
# return events (note: order is important)
301+
return aerial_won_events + base_events + ball_out_events
309302

310303
def _parse_generic_kwargs(self) -> Dict:
311304
game_state_value = parse_obv_values(self.raw_event)
@@ -370,14 +363,22 @@ def _create_ball_out_event(
370363
return [ball_out_event]
371364
return []
372365

366+
def _add_play_pattern_qualifiers(self, event: Event) -> Event:
367+
if "play_pattern" in event.raw_event:
368+
pattern_id = PLAY_PATTERN(event.raw_event["play_pattern"]["id"])
369+
if pattern_id == PLAY_PATTERN.FROM_COUNTER:
370+
q = CounterAttackQualifier(value=True)
371+
event.qualifiers = event.qualifiers or []
372+
event.qualifiers.append(q)
373+
return event
374+
373375
def _add_under_pressure_qualifier(self, event: Event) -> Event:
374376
if ("under_pressure" in self.raw_event) and (
375377
self.raw_event["under_pressure"]
376378
):
377-
if event.qualifiers:
378-
event.qualifiers.append(UnderPressureQualifier(True))
379-
else:
380-
event.qualifiers = [UnderPressureQualifier(True)]
379+
q = UnderPressureQualifier(True)
380+
event.qualifiers = event.qualifiers or []
381+
event.qualifiers.append(q)
381382

382383
return event
383384

@@ -1463,16 +1464,6 @@ def _get_set_piece_qualifiers(
14631464
return []
14641465

14651466

1466-
def _get_play_pattern_qualifiers(
1467-
event_dict: Dict,
1468-
) -> List[CounterAttackQualifier]:
1469-
if "play_pattern" in event_dict:
1470-
pattern_id = PLAY_PATTERN(event_dict["play_pattern"]["id"])
1471-
if pattern_id == PLAY_PATTERN.FROM_COUNTER:
1472-
return [CounterAttackQualifier(value=True)]
1473-
return []
1474-
1475-
14761467
def event_decoder(raw_event: Dict) -> Union[EVENT, Dict]:
14771468
type_to_event = {
14781469
EVENT_TYPE.PASS: PASS,

0 commit comments

Comments
 (0)