import os from datetime import datetime import pandas as pd from pytest import fixture from socceraction.data.opta import OptaEventSchema, OptaGameSchema from socceraction.data.opta.parsers import F24XMLParser @fixture() def f24xml_parser() -> F24XMLParser: path = os.path.join( os.path.dirname(__file__), os.pardir, os.pardir, os.pardir, "datasets", "opta", "f24-23-2018-1009316-eventdetails.xml", ) return F24XMLParser(str(path)) def test_extract_games(f24xml_parser: F24XMLParser) -> None: games = f24xml_parser.extract_games() assert len(games) == 1 assert games[1009316] == { "game_id": 1009316, "season_id": 2018, "competition_id": 23, "game_day": 1, "game_date": datetime(2018, 8, 20, 21, 0), "home_team_id": 174, "away_team_id": 957, "home_score": 2, "away_score": 1, } OptaGameSchema.validate(pd.DataFrame.from_dict(games, orient="index")) def test_extract_events(f24xml_parser: F24XMLParser) -> None: events = f24xml_parser.extract_events() assert len(events) == 1665 assert events[(1009316, 2097423126)] == { "game_id": 1009316, "event_id": 2097423126, "period_id": 2, "team_id": 174, "player_id": 197319, "type_id": 1, "timestamp": datetime(2018, 8, 20, 22, 51, 28, 259000), "minute": 94, "second": 50, "outcome": False, "start_x": 46.4, "start_y": 37.1, "end_x": 74.4, "end_y": 8.9, "qualifiers": { 1: None, 213: "5.7", 212: "35.1", 152: None, 5: None, 155: None, 56: "Right", 140: "74.4", 141: "8.9", }, "assist": False, "keypass": False, } df = pd.DataFrame.from_dict(events, orient="index") df["type_name"] = "Added later" OptaEventSchema.validate(df)