banking-breakdown/banking_breakdown/document_builder/__init__.py

49 lines
1.9 KiB
Python

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)