from datetime import date from pathlib import Path from pandas import DataFrame from modules import ( METADATA, get_date_range, get_rules_in_window, groupby_agency, groupby_date, ) def save_csv(path: Path, df_all: DataFrame, df_agency: DataFrame, df_ym: DataFrame, transition_year: int): """Save output as CSV files. Args: path (Path): Save data here. df_all (DataFrame): Data at the rule level. df_agency (DataFrame): Data grouped by agency. df_ym (DataFrame): Data grouped by publication year and month. transition_year (int): Presidential transition year. """ files = ( f"rules_{transition_year - 1}_{transition_year}.csv", f"rules_by_agency_{transition_year - 1}_{transition_year}.csv", f"rules_by_month_{transition_year - 1}_{transition_year}.csv" ) dataframes = (df_all, df_agency, df_ym) for data, file in zip(dataframes, files): data.to_csv(path / file, index=False) def main(start_date: str, save_data: bool = True, path: Path | None = None, metadata: dict | None = None, significant: bool = True): """Retrieve rules in CRA window and save resulting data. """ if date.fromisoformat(start_date) < date(2023, 4, 6): significant = False date_range = get_date_range(start_date) transition_year = date_range.get("transition_year") df, _ = get_rules_in_window(start_date, get_significant=significant) df_agency = groupby_agency(df, metadata=metadata, significant=significant) df_ym = groupby_date(df, significant=significant) if save_data: if path is None: path = Path(__file__).parent save_csv(path, df, df_agency, df_ym, transition_year) return df, df_agency, df_ym if __name__ == "__main__": main_path = Path(__file__).parent data_path = main_path.joinpath("data") if not data_path.exists(): data_path.mkdir(parents=True, exist_ok=True) start = input("Enter beginning of CRA window [yyyy-mm-dd]: ") df, agency, ym = main(start, path=data_path, metadata=METADATA, significant=True) print(f"Rules in CRA window: {len(df)}") print("\nRules by agency\n", agency.head(10)) print("\nRules by month\n", ym)