diff --git a/wsgi.py b/wsgi.py index 31f9295..154c9c5 100644 --- a/wsgi.py +++ b/wsgi.py @@ -183,6 +183,53 @@ def plot( return fig +def create_fig(url: str = "https://beschaeftigtenbefragung.verdi.de/", importance_factor: float = 1.0): + curr_datetime = datetime.datetime.now() + try: + df, df_state = get_tables(url) + + df = df.sort_values( + ["Digitale Befragung", "Bundesland", "Bezirk"], + ascending=[False, True, True], + ) + + df_state = df_state.sort_values("Landesbezirk") + + plot_df = create_plot_df(curr_datetime, df_state) + annotate_current = True + timestamp = curr_datetime.strftime("%Y-%m-%d %H:%M:%S") + + except Exception as e: + print(e) + last_file = sorted(Path("data").iterdir())[-1] + key = last_file.name[:10] + + with (Path("data") / f"{key}_data.ods").open("rb") as ff: + df = pd.read_excel(ff, sheet_name="digital", index_col=0).astype( + {"Digitale Befragung": "Int32"} + ) + with (Path("data") / f"{key}_state_data.ods").open("rb") as ff: + df_state = pd.read_excel(ff, sheet_name="digital", index_col=0).astype( + {"Digitale Befragung": "Int32"} + ) + + plot_df = create_plot_df(curr_datetime) + annotate_current = False + timestamp = Markup(f'{key} 10:00:00') + + total = plot_df.loc[curr_datetime].sum() + landesbez_strs = [None] + [ + bez + for bez in plot_df.columns + if plot_df.loc[curr_datetime][bez] >= importance_factor * total + ] + return plot( + curr_datetime, + plot_df, + annotate_current=annotate_current, + landesbez_str=landesbez_strs, + ), df, df_state, timestamp + def convert_fig_to_svg(fig: plt.Figure) -> str: # Convert plot to SVG image @@ -195,10 +242,7 @@ def convert_fig_to_svg(fig: plt.Figure) -> str: @app.route("/") @cache.cached() -def tables( - url: str = "https://beschaeftigtenbefragung.verdi.de/", - importance_factor: float = 1, -): +def tables(): def _print_as_html(df: pd.DataFrame): df = df.astype({"Digitale Befragung": "Int32"}) with pd.option_context("display.max_rows", None): @@ -231,52 +275,7 @@ def tables( output_str = [] - curr_datetime = datetime.datetime.now() - - try: - df, df_state = get_tables(url) - - df = df.sort_values( - ["Digitale Befragung", "Bundesland", "Bezirk"], - ascending=[False, True, True], - ) - - df_state = df_state.sort_values("Landesbezirk") - - plot_df = create_plot_df(curr_datetime, df_state) - annotate_current = True - timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - - except Exception as e: - print(e) - last_file = sorted(Path("data").iterdir())[-1] - key = last_file.name[:10] - - with (Path("data") / f"{key}_data.ods").open("rb") as ff: - df = pd.read_excel(ff, sheet_name="digital", index_col=0).astype( - {"Digitale Befragung": "Int32"} - ) - with (Path("data") / f"{key}_state_data.ods").open("rb") as ff: - df_state = pd.read_excel(ff, sheet_name="digital", index_col=0).astype( - {"Digitale Befragung": "Int32"} - ) - - plot_df = create_plot_df(curr_datetime) - annotate_current = False - timestamp = Markup(f'{key} 10:00:00') - - total = plot_df.loc[curr_datetime].sum() - landesbez_strs = [None] + [ - bez - for bez in plot_df.columns - if plot_df.loc[curr_datetime][bez] >= importance_factor * total - ] - fig = plot( - curr_datetime, - plot_df, - annotate_current=annotate_current, - landesbez_str=landesbez_strs, - ) + fig, df, df_state, timestamp = create_fig() svg_string = convert_fig_to_svg(fig) plt.close()