diff --git a/.github/workflows/pyinstaller-windows.yml b/.github/workflows/pyinstaller-windows.yml index 01d22c2..48b176d 100644 --- a/.github/workflows/pyinstaller-windows.yml +++ b/.github/workflows/pyinstaller-windows.yml @@ -52,7 +52,7 @@ jobs: run: python -m PyInstaller jamstats.spec - name: Upload Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: jamstats-${{ runner.os }} path: src/dist/jamstats.exe diff --git a/resources/jamstats_version.txt b/resources/jamstats_version.txt index 323afbc..0d697e4 100644 --- a/resources/jamstats_version.txt +++ b/resources/jamstats_version.txt @@ -1 +1 @@ -1.4.14 +3.4.15 diff --git a/setup.py b/setup.py index 5296965..777d75b 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='jamstats', - version='3.4.14', + version='3.4.15', description='Data processing, stats and plots on roller derby scoreboard JSON files', author='Damon May', package_dir={"":"src"}, diff --git a/setup_nogui.py b/setup_nogui.py index 57e45b2..d80a9ab 100644 --- a/setup_nogui.py +++ b/setup_nogui.py @@ -2,7 +2,7 @@ setup( name='jamstats-nogui', - version='3.4.14', + version='3.4.15', description='Data processing, stats and plots on roller derby scoreboard JSON files. No-GUI version.', author='Damon May', package_dir={"":"src"}, diff --git a/src/jamstats/data/json_to_pandas.py b/src/jamstats/data/json_to_pandas.py index c4428cf..632db49 100644 --- a/src/jamstats/data/json_to_pandas.py +++ b/src/jamstats/data/json_to_pandas.py @@ -77,7 +77,7 @@ def json_to_game_dataframe(game_json: Dict[Any, Any]) -> pd.DataFrame: # annotated with a game identifier. Complete games don't have # "CurrentGame" fields. So, if we find a "CurrentGame" field, # use those and strip out all the fields with a game identifier. - logger.debug(f"Found version 5. Checking for in-progress game...") + logger.debug(f"Found version 5 or later. Checking for in-progress game...") is_in_progress_game = False for key in game_dict: if ".CurrentGame." in key: @@ -127,10 +127,12 @@ def get_json_major_version(game_dict: Dict[str, Any]) -> str: int: major version """ version_str = get_json_version(game_dict) + logger.debug(f"JSON version string: {version_str}") major_version = version_str.split(".")[0] - assert(major_version.startswith("v")) + if major_version.startswith("v"): + major_version = major_version[1:] logger.debug(f"JSON major version string: {major_version}") - return major_version[1:] + return major_version def get_json_version(game_dict: Dict[str, Any]) -> str: @@ -157,8 +159,9 @@ def get_json_major_version_from_pdf(pdf_game_data: pd.DataFrame) -> str: version_str = list( pdf_game_data[pdf_game_data.key == "ScoreBoard.Version(release)"].value)[0] major_version = version_str.split(".")[0] - assert(major_version.startswith("v")) - return major_version[1:] + if major_version.startswith("v"): + major_version = major_version[1:] + return major_version def extract_game_data_dict(pdf_game_state: pd.DataFrame) -> Dict[str, Any]: @@ -443,7 +446,6 @@ def extract_roster(pdf_game_state: pd.DataFrame, else: team_string_1 = f"Team\\(1\\)" team_string_2 = f"Team\\(2\\)" - team_string_1 = cleanup_team_name(team_string_1) team_string_2 = cleanup_team_name(team_string_2) @@ -494,10 +496,20 @@ def extract_roster(pdf_game_state: pd.DataFrame, # paranoia. Somehow a quadmedia game had no Id column, so if that happens # write out a message if "Id" not in pdf_roster.columns: - error_message = "No Id column in roster. This is a bug in the game file." + error_message = "No Id column in roster. This is a bug in the game file.\n" error_message += "Roster columns: " + str(pdf_roster.columns) + error_message += "\nDummying empty roster" logger.error(error_message) - raise ValueError(error_message) + pdf_roster = pd.DataFrame({ + "Id": pd.Series(dtype="str"), + "Name": pd.Series(dtype="str"), + "RosterNumber": pd.Series(dtype="str"), + "Number": pd.Series(dtype="str"), + "team": pd.Series(dtype="str"), + "Pronouns": pd.Series(dtype="str"), + }) + print(pdf_roster) + pdf_roster = pdf_roster[pdf_roster.Id.notnull()] logger.debug("After dropping nulls, length: " + str(len(pdf_roster))) @@ -779,6 +791,8 @@ def extract_penalties(pdf_game_state: pd.DataFrame, # cast is necessary if there are no penalties yet pdf_penalties = pdf_penalties.astype({"prd_jam": str}) pdf_penalties = pdf_penalties.rename(columns={"Code": "penalty_code"}) + if len(pdf_penalties) == 0: + pdf_penalties["Id"] = pdf_penalties.Id.astype(str) logger.debug(f" Before merging with roster: {len(pdf_penalties)}") rosternumber_col = "RosterNumber" if "RosterNumber" in pdf_roster else "Number" diff --git a/src/jamstats/resources/jamstats_version.txt b/src/jamstats/resources/jamstats_version.txt index 323afbc..0d697e4 100644 --- a/src/jamstats/resources/jamstats_version.txt +++ b/src/jamstats/resources/jamstats_version.txt @@ -1 +1 @@ -1.4.14 +3.4.15