import datetime import pandas as pd from flask import Flask, render_template, request from download_digital import construct_dataframe, get_bez_data app = Flask(__name__) def get_tables(url: str) -> tuple[pd.DataFrame, pd.DataFrame]: bez_data = get_bez_data(["bez_data_0", "bez_data_2"], url) df = construct_dataframe( bez_data=bez_data[0], grouped=False, special_tag="stud", ) df_state = construct_dataframe( bez_data=bez_data[1], grouped=False, no_processing=True ) return df, df_state @app.route("/") def tables( url: str = "https://beschaeftigtenbefragung.verdi.de/", ): 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") output_str = [] def _print_as_html(df: pd.DataFrame): df = df.astype({"Digitale Befragung": "Int32"}) with pd.option_context("display.max_rows", None): table = df.to_html( index_names=False, justify="left", index=False, classes="sortable dataframe", ) tfoot = [ " ", " Gesamt", ] for i in range(len(df.columns) - 2): tfoot.append(" ") tfoot.extend( [ f" {df['Digitale Befragung'].sum()}", " ", " ", ] ) tfoot = "\n".join(tfoot) idx = table.index("") output_str.append(table[: idx - 1]) output_str.append(tfoot) output_str.append(table[idx:]) _print_as_html(df_state) _print_as_html(df) return render_template( "base.html", tables="\n".join(output_str), timestamp=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), ) if __name__ == "__main__": app.run()