Skip to content

Event

kloppy.domain.Event dataclass

Event(period, timestamp, statistics, ball_owning_team, ball_state, event_id, team, player, coordinates, raw_event, state, related_event_ids, freeze_frame)

Bases: DataRecord, ABC

Abstract event baseclass. All other event classes inherit from this class.

ATTRIBUTE DESCRIPTION
event_id

Event identifier given by provider. Alias for record_id.

TYPE: str

event_type

The type of event.

TYPE: EventType

event_name

Name of the event type.

TYPE: str

time

Time in the match the event takes place.

TYPE: Time

coordinates

Coordinates where event happened.

TYPE: Point

team

Team related to the event.

TYPE: Team

player

Player related to the event.

TYPE: Player

ball_owning_team

Team in control of the ball during the event.

TYPE: Optional[Team]

ball_state

Whether the ball is in play.

TYPE: Optional[BallState]

raw_event

The data provider's raw representation of the event.

TYPE: object

dataset

A reference to the dataset the event is part of.

TYPE: Dataset

prev_record

A reference to the previous event.

TYPE: Optional[Self]

next_record

A reference to the next event.

TYPE: Optional[Self]

related_event_ids

Event identifiers of related events.

TYPE: list[str]

freeze_frame

A snapshot with the location of other players at the time of the event.

TYPE: Optional[Frame]

attacking_direction

The playing direction of team during the event.

TYPE: AttackingDirection

state

Additional game state information.

TYPE: dict[str, Any]

event_id instance-attribute

event_id

team instance-attribute

team

player instance-attribute

player

coordinates instance-attribute

coordinates

raw_event instance-attribute

raw_event

state instance-attribute

state

related_event_ids instance-attribute

related_event_ids

freeze_frame instance-attribute

freeze_frame

record_id property

record_id

event_type abstractmethod property

event_type

event_name abstractmethod property

event_name

attacking_direction property

attacking_direction

dataset class-attribute instance-attribute

dataset = field(init=False)

prev_record class-attribute instance-attribute

prev_record = field(init=False)

next_record class-attribute instance-attribute

next_record = field(init=False)

period instance-attribute

period

timestamp instance-attribute

timestamp

statistics instance-attribute

statistics

ball_owning_team instance-attribute

ball_owning_team

ball_state instance-attribute

ball_state

time property

time
get_related_events()
Source code in kloppy/domain/models/event.py
def get_related_events(self) -> list["Event"]:
    if not self.dataset:
        raise OrphanedRecordError()

    return [
        event
        for event_id in self.related_event_ids
        if (event := self.dataset.get_record_by_id(event_id)) is not None
    ]
get_related_event(type_)
Source code in kloppy/domain/models/event.py
def get_related_event(
    self, type_: Union[str, EventType]
) -> Optional["Event"]:
    event_type = (
        EventType[type_.upper()] if isinstance(type_, str) else type_
    )
    for related_event in self.get_related_events():
        if related_event.event_type == event_type:
            return related_event
    return None

related_pass

related_pass()
Source code in kloppy/domain/models/event.py
def related_pass(self) -> Optional["PassEvent"]:
    return cast(Optional[PassEvent], self.get_related_event(EventType.PASS))

related_shot

related_shot()
Source code in kloppy/domain/models/event.py
def related_shot(self) -> Optional["ShotEvent"]:
    return cast(Optional[ShotEvent], self.get_related_event(EventType.SHOT))

related_take_on

related_take_on()
Source code in kloppy/domain/models/event.py
def related_take_on(self) -> Optional["TakeOnEvent"]:
    return cast(
        Optional[TakeOnEvent], self.get_related_event(EventType.TAKE_ON)
    )

related_carry

related_carry()
Source code in kloppy/domain/models/event.py
def related_carry(self) -> Optional["CarryEvent"]:
    return cast(
        Optional[CarryEvent], self.get_related_event(EventType.CARRY)
    )

related_substitution

related_substitution()
Source code in kloppy/domain/models/event.py
def related_substitution(self) -> Optional["SubstitutionEvent"]:
    return cast(
        Optional[SubstitutionEvent],
        self.get_related_event(EventType.SUBSTITUTION),
    )

related_card

related_card()
Source code in kloppy/domain/models/event.py
def related_card(self) -> Optional["CardEvent"]:
    return cast(Optional[CardEvent], self.get_related_event(EventType.CARD))

related_player_on

related_player_on()
Source code in kloppy/domain/models/event.py
def related_player_on(self) -> Optional["PlayerOnEvent"]:
    return cast(
        Optional[PlayerOnEvent],
        self.get_related_event(EventType.PLAYER_ON),
    )

related_player_off

related_player_off()
Source code in kloppy/domain/models/event.py
def related_player_off(self) -> Optional["PlayerOffEvent"]:
    return cast(
        Optional[PlayerOffEvent],
        self.get_related_event(EventType.PLAYER_OFF),
    )

related_recovery

related_recovery()
Source code in kloppy/domain/models/event.py
def related_recovery(self) -> Optional["RecoveryEvent"]:
    return cast(
        Optional[RecoveryEvent], self.get_related_event(EventType.RECOVERY)
    )

related_ball_out

related_ball_out()
Source code in kloppy/domain/models/event.py
def related_ball_out(self) -> Optional["BallOutEvent"]:
    return cast(
        Optional[BallOutEvent], self.get_related_event(EventType.BALL_OUT)
    )

related_foul_committed

related_foul_committed()
Source code in kloppy/domain/models/event.py
def related_foul_committed(self) -> Optional["FoulCommittedEvent"]:
    return cast(
        Optional[FoulCommittedEvent],
        self.get_related_event(EventType.FOUL_COMMITTED),
    )

related_formation_change

related_formation_change()
Source code in kloppy/domain/models/event.py
def related_formation_change(self) -> Optional["FormationChangeEvent"]:
    return cast(
        Optional[FormationChangeEvent],
        self.get_related_event(EventType.FORMATION_CHANGE),
    )

matches

matches(filter_)
Source code in kloppy/domain/models/event.py
def matches(
    self, filter_: Optional[Union[str, Callable[["Event"], bool]]]
) -> bool:
    if filter_ is None:
        return True
    elif callable(filter_):
        return filter_(self)
    elif isinstance(filter_, str):
        """
        Allowed formats:
        1. <event_type>
        2. <event_type>.<result>

        This format always us to go to css selectors without breaking existing code.
        """
        parts = filter_.upper().split(".")
        if len(parts) == 2:
            event_type, result = parts
        elif len(parts) == 1:
            event_type = parts[0]
            result = None
        else:
            raise InvalidFilterError(
                f"Don't know how to apply filter {filter_}"
            )

        if event_type:
            try:
                if self.event_type != EventType[event_type]:
                    return False
            except KeyError:
                raise InvalidFilterError(
                    f"Cannot find event type {event_type}. Possible options: {[e.value.lower() for e in EventType]}"
                )

        if result:
            return False

        return True

set_refs

set_refs(dataset, prev, next_)
Source code in kloppy/domain/models/event.py
    "GoalkeeperActionType",
    "CounterAttackQualifier",
    "UnderPressureQualifier",
    "DuelEvent",
    "DuelType",
    "DuelQualifier",
    "DuelResult",
    "BoolQualifier",
    "PressureEvent",
    "ResultMixin",
    "QualifierMixin",
]

prev

prev(filter_=None)

next

next(filter_=None)

replace

replace(**changes)

kloppy.domain.EventFactory

build_pass

build_pass(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_pass(self, **kwargs) -> PassEvent:
    return create_event(PassEvent, **kwargs)

build_shot

build_shot(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_shot(self, **kwargs) -> ShotEvent:
    return create_event(ShotEvent, **kwargs)

build_generic

build_generic(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_generic(self, **kwargs) -> GenericEvent:
    return create_event(GenericEvent, **kwargs)

build_recovery

build_recovery(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_recovery(self, **kwargs) -> RecoveryEvent:
    return create_event(RecoveryEvent, **kwargs)

build_miscontrol

build_miscontrol(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_miscontrol(self, **kwargs) -> MiscontrolEvent:
    return create_event(MiscontrolEvent, **kwargs)

build_take_on

build_take_on(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_take_on(self, **kwargs) -> TakeOnEvent:
    return create_event(TakeOnEvent, **kwargs)

build_carry

build_carry(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_carry(self, **kwargs) -> CarryEvent:
    return create_event(CarryEvent, **kwargs)

build_interception

build_interception(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_interception(self, **kwargs) -> InterceptionEvent:
    return create_event(InterceptionEvent, **kwargs)

build_clearance

build_clearance(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_clearance(self, **kwargs) -> ClearanceEvent:
    return create_event(ClearanceEvent, **kwargs)

build_duel

build_duel(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_duel(self, **kwargs) -> DuelEvent:
    return create_event(DuelEvent, **kwargs)

build_formation_change

build_formation_change(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_formation_change(self, **kwargs) -> FormationChangeEvent:
    return create_event(FormationChangeEvent, **kwargs)

build_ball_out

build_ball_out(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_ball_out(self, **kwargs) -> BallOutEvent:
    return create_event(BallOutEvent, **kwargs)

build_player_on

build_player_on(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_player_on(self, **kwargs) -> PlayerOnEvent:
    return create_event(PlayerOnEvent, **kwargs)

build_player_off

build_player_off(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_player_off(self, **kwargs) -> PlayerOffEvent:
    return create_event(PlayerOffEvent, **kwargs)

build_card

build_card(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_card(self, **kwargs) -> CardEvent:
    return create_event(CardEvent, **kwargs)

build_foul_committed

build_foul_committed(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_foul_committed(self, **kwargs) -> FoulCommittedEvent:
    return create_event(FoulCommittedEvent, **kwargs)

build_substitution

build_substitution(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_substitution(self, **kwargs) -> SubstitutionEvent:
    return create_event(SubstitutionEvent, **kwargs)

build_goalkeeper_event

build_goalkeeper_event(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_goalkeeper_event(self, **kwargs) -> GoalkeeperEvent:
    return create_event(GoalkeeperEvent, **kwargs)

build_pressure_event

build_pressure_event(**kwargs)
Source code in kloppy/domain/services/event_factory.py
def build_pressure_event(self, **kwargs) -> PressureEvent:
    return create_event(PressureEvent, **kwargs)