49 lines
1.9 KiB
Python
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)
|