diff --git a/resources/jamstats_version.txt b/resources/jamstats_version.txt index 0d697e4..1545d96 100644 --- a/resources/jamstats_version.txt +++ b/resources/jamstats_version.txt @@ -1 +1 @@ -3.4.15 +3.5.0 diff --git a/setup.py b/setup.py index 777d75b..6258340 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='jamstats', - version='3.4.15', + version='3.5.0', 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 d80a9ab..1680f7d 100644 --- a/setup_nogui.py +++ b/setup_nogui.py @@ -2,7 +2,7 @@ setup( name='jamstats-nogui', - version='3.4.15', + version='3.5.0', 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/resources/jamstats_version.txt b/src/jamstats/resources/jamstats_version.txt index 0d697e4..1545d96 100644 --- a/src/jamstats/resources/jamstats_version.txt +++ b/src/jamstats/resources/jamstats_version.txt @@ -1 +1 @@ -3.4.15 +3.5.0 diff --git a/src/jamstats/tables/jamstats_tables.py b/src/jamstats/tables/jamstats_tables.py index c8d309f..858a1d1 100644 --- a/src/jamstats/tables/jamstats_tables.py +++ b/src/jamstats/tables/jamstats_tables.py @@ -28,10 +28,10 @@ def build_html(self, derby_game: DerbyGame) -> str: """ pdf_team1 = get_oneteam_jammer_pdf(derby_game, 1, anonymize_names=self.anonymize_names) pdf_team2 = get_oneteam_jammer_pdf(derby_game, 2, anonymize_names=self.anonymize_names) - styler_1 = pdf_team1.style - styler_2 = pdf_team2.style - table_html_1 = styler_1.hide(axis="index").to_html() - table_html_2 = styler_2.hide(axis="index").to_html() + styler_1 = _hide_index(pdf_team1.style) + styler_2 = _hide_index(pdf_team2.style) + table_html_1 = styler_1.to_html() + table_html_2 = styler_2.to_html() team1_tablecell_html = f"

{derby_game.team_1_name} ({len(pdf_team1)})

" + table_html_1 team2_tablecell_html = f"

{derby_game.team_2_name} ({len(pdf_team2)})

" + table_html_2 return "
" + team1_tablecell_html + "" + team2_tablecell_html + "
" @@ -104,7 +104,7 @@ def build_html(self, derby_game: DerbyGame) -> str: styler = styler.apply(lambda _: yellow_rows) # gray background styler = styler.set_properties(**{'background-color': '#999999'}) - styler = styler.set_table_attributes("style='display:inline'").hide(axis="index") + styler = _hide_index(styler.set_table_attributes("style='display:inline'")) table_htmls.append(styler.to_html()) table_html_1, table_html_2 = table_htmls @@ -208,8 +208,8 @@ def build_html(self, derby_game: DerbyGame) -> str: for column in pdf_game_teams_summary.columns }) pdf_game_teams_summary.index = range(len(pdf_game_teams_summary)) - styler = pdf_game_teams_summary.style.set_table_attributes( - "style='display:inline'").hide(axis="index") + styler = _hide_index(pdf_game_teams_summary.style.set_table_attributes( + "style='display:inline'")) html_game_summary = styler.to_html() # if we're *not* in a jam, show the jammers for the next jam @@ -314,9 +314,9 @@ def get_singlejam_skaters_html(derby_game: DerbyGame, pdf_one_jam: pd.DataFrame, styler = pdf.style.set_properties(**{'background-color': 'lightgray'}) styler = styler.applymap(map_penalty_to_color, subset=["Penalty"]) - styler = styler.applymap(map_penaltycount_to_color, - subset=["Pen. Count"]).hide(axis="index") - styler = styler.set_table_attributes("style='display:inline'").hide(axis="index") + styler = _hide_index(styler.applymap(map_penaltycount_to_color, + subset=["Pen. Count"])) + styler = _hide_index(styler.set_table_attributes("style='display:inline'")) table_htmls.append(styler.to_html()) _, latest_jam_row_dict = next(pdf_one_jam.iterrows()) @@ -410,6 +410,8 @@ def get_team_jam_skaters_pdf(derby_game: DerbyGame, team_name: str, pdf_skater_penaltycount["Name"] = pdf_skater_penaltycount.index pdf_skater_penaltycount.index = range(len(pdf_skater_penaltycount)) pdf_team_current_skaters = pdf_team_current_skaters.merge(pdf_skater_penaltycount, on="Name", how="left") + if "Pen. Count" not in pdf_team_current_skaters.columns: + pdf_team_current_skaters["Pen. Count"] = 0 pdf_team_current_skaters["Pen. Count"] = pdf_team_current_skaters["Pen. Count"].fillna(0) pdf_team_current_skaters["Pen. Count"] = pdf_team_current_skaters["Pen. Count"].astype(int) @@ -549,13 +551,14 @@ def build_html(self, derby_game: DerbyGame) -> str: map_team_to_color = lambda team: f"color: {derby_game.team_color_1}" if team == derby_game.team_1_name \ else f"color: {derby_game.team_color_2}" if team == derby_game.team_2_name \ else '' - styler = pdf_recent_penalties.style.applymap(map_team_to_color, subset=["Team"]).hide(axis="index") + styler = pdf_recent_penalties.style.applymap(map_team_to_color, subset=["Team"]) + styler = _hide_index(styler) # if either team is white, don't use white background. # This will break if white plays gray #if derby_game.team_color_1.lower() == "#ffffff" or derby_game.team_color_2.lower() == "#ffffff": # styler = styler.set_properties(**{'background-color': 'gray'}) - return styler.to_html(index=False) + return styler.to_html() def make_recent_penalties_dataframe(derby_game: DerbyGame, @@ -684,4 +687,13 @@ def format_team_roster_fordisplay(derby_game: DerbyGame, team_name: str, pdf_team_roster = pdf_team_roster.drop(columns=["Number", "Name"]) - return pdf_team_roster \ No newline at end of file + return pdf_team_roster + +def _hide_index(styler: Styler) -> Styler: + # defensive coding around different pandas versions + try: + styler = styler.hide(axis="index") + except Exception: + logger.info(f"Error hiding table index, pandas version {pd.__version__}. Trying alternate method.") + styler = styler.hide_index() + return styler \ No newline at end of file diff --git a/src/jamstats/tables/table_util.py b/src/jamstats/tables/table_util.py index 904ddbd..30665c5 100644 --- a/src/jamstats/tables/table_util.py +++ b/src/jamstats/tables/table_util.py @@ -68,7 +68,11 @@ def prepare_table_styler(self, derby_game: DerbyGame, Returns: Styler: styler """ - return pdf_table.style.hide(axis="index") + try: + return pdf_table.style.hide(axis="index") + except Exception: + logger.info(f"Error in prepare_table_styler, pandas version {pd.__version__}. Trying alternate method.") + return pdf_table.style.hide_index() def build_html(self, derby_game: DerbyGame) -> str: """Build the table HTML: prepare the data, then style it.