import subprocess import os import shutil from banking_breakdown import types import banking_breakdown.document_builder from importlib import resources def _copy_resources(build_dir: str): res_prefix = resources.files(banking_breakdown.document_builder) os.makedirs(os.path.dirname(f"{build_dir}/report.tex"), exist_ok=True) shutil.copyfile(f"{res_prefix}/report.tex", f"{build_dir}/report.tex") shutil.copyfile(f"{res_prefix}/common.tex", f"{build_dir}/common.tex") shutil.copyfile(f"{res_prefix}/.latexmkrc", f"{build_dir}/.latexmkrc") def _serialize_report_data(build_dir: str, report_data: types.ReportData): report_data.net_income.to_csv(f'{build_dir}/net_income.csv', index=False) report_data.category_overview.to_csv(f'{build_dir}/category_overview.csv', index=False) report_data.expenses_by_category.to_csv(f'{build_dir}/expenses_by_category.csv', index=False) report_data.total_value.to_csv(f'{build_dir}/total_value.csv', index=False) report_data.detailed_balance.to_csv(f'{build_dir}/detailed_balance.csv', index=False) def _compile_document(build_dir): res_prefix = resources.files(banking_breakdown.document_builder) subprocess.call(f"docker build . -f {res_prefix}/Dockerfile.alpine" " -t banking-breakdown", shell=True) subprocess.call("docker run --rm -u `id -u`:`id -g`" " -v $(realpath .):/project" f" -w /project/{build_dir} banking-breakdown" " latexmk -pdf report.tex", shell=True) def build_document(build_dir: str, report_data: types.ReportData): _copy_resources(build_dir) _serialize_report_data(build_dir, report_data) _compile_document(build_dir)