Initial commit
This commit is contained in:
commit
a2f2d867d3
163
main.py
Normal file
163
main.py
Normal file
@ -0,0 +1,163 @@
|
||||
from datetime import datetime
|
||||
from os import makedirs, path
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
from locale import setlocale, LC_ALL
|
||||
|
||||
from docxtpl import DocxTemplate
|
||||
|
||||
from modules.utils import json_read
|
||||
|
||||
|
||||
def local_if_available(data: dict, data_local: dict, *args: str) -> Any:
|
||||
return
|
||||
|
||||
|
||||
def main():
|
||||
for lang in config["languages"]:
|
||||
data = json_read(Path("data", "default.json"))
|
||||
local_data = json_read(Path("data", f"{lang}.json"))
|
||||
local_config = json_read(Path("configs", f"{lang}.json"))
|
||||
setlocale(LC_ALL, local_config["locale"])
|
||||
|
||||
template = DocxTemplate(Path("templates", f"{lang}.docx"))
|
||||
|
||||
location_birth = None
|
||||
for alt_name in data["header"]["birth_place"]["alternateNames"]:
|
||||
if alt_name["lang"] == lang:
|
||||
location_birth = alt_name["name"]
|
||||
break
|
||||
if location_birth is None:
|
||||
location_birth = data["header"]["birth_place"]["toponymName"]
|
||||
|
||||
location_live = local_config["header"]["formats"]["address"].format(
|
||||
street=data["header"]["location"]["street"],
|
||||
number=data["header"]["location"]["number"],
|
||||
zip=data["header"]["location"]["zip"],
|
||||
city=data["header"]["location"]["city"],
|
||||
)
|
||||
|
||||
out_table_jobs = []
|
||||
|
||||
for job in data["table_jobs"]:
|
||||
if job["time_start"] == job["time_end"]:
|
||||
job_time = local_config["jobs"]["placeholders"]["single"].format(
|
||||
start=datetime.fromisoformat(job["time_start"]).strftime(
|
||||
local_config["jobs"]["formats"]["default"]
|
||||
)
|
||||
)
|
||||
elif job["time_end"] is None:
|
||||
job_time = local_config["jobs"]["placeholders"]["ongoing"].format(
|
||||
start=datetime.fromisoformat(job["time_start"]).strftime(
|
||||
local_config["jobs"]["formats"]["default"]
|
||||
)
|
||||
)
|
||||
else:
|
||||
job_time = local_config["jobs"]["placeholders"]["from_to"].format(
|
||||
start=datetime.fromisoformat(job["time_start"]).strftime(
|
||||
local_config["jobs"]["formats"]["default"]
|
||||
),
|
||||
end=datetime.fromisoformat(job["time_end"]).strftime(
|
||||
local_config["jobs"]["formats"]["default"]
|
||||
),
|
||||
)
|
||||
out_table_jobs.append(
|
||||
{
|
||||
"time": job_time,
|
||||
"description": job["description"] + "\n",
|
||||
}
|
||||
)
|
||||
|
||||
out_table_education = []
|
||||
|
||||
for education in data["table_education"]:
|
||||
if education["time_start"] == education["time_end"]:
|
||||
education_time = local_config["education"]["placeholders"][
|
||||
"single"
|
||||
].format(
|
||||
start=datetime.fromisoformat(education["time_start"]).strftime(
|
||||
local_config["education"]["formats"]["default"]
|
||||
)
|
||||
)
|
||||
elif education["time_end"] is None:
|
||||
education_time = local_config["education"]["placeholders"][
|
||||
"ongoing"
|
||||
].format(
|
||||
start=datetime.fromisoformat(education["time_start"]).strftime(
|
||||
local_config["education"]["formats"]["default"]
|
||||
)
|
||||
)
|
||||
else:
|
||||
education_time = local_config["education"]["placeholders"][
|
||||
"from_to"
|
||||
].format(
|
||||
start=datetime.fromisoformat(education["time_start"]).strftime(
|
||||
local_config["education"]["formats"]["default"]
|
||||
),
|
||||
end=datetime.fromisoformat(education["time_end"]).strftime(
|
||||
local_config["education"]["formats"]["default"]
|
||||
),
|
||||
)
|
||||
out_table_education.append(
|
||||
{
|
||||
"time": education_time,
|
||||
"description": education["description"] + "\n",
|
||||
}
|
||||
)
|
||||
|
||||
context = {
|
||||
"name": data["header"]["name"],
|
||||
"surname": data["header"]["surname"],
|
||||
"birth_data": local_config["header"]["placeholders"][
|
||||
"birth_date_place"
|
||||
].format(
|
||||
date=datetime.fromisoformat(data["header"]["birth_date"]).strftime(
|
||||
local_config["header"]["formats"]["date"]
|
||||
),
|
||||
city=location_birth,
|
||||
country=data["header"]["birth_place"]["countryName"],
|
||||
),
|
||||
"location": location_live,
|
||||
"family_status": local_data["header"]["family_status"].title(),
|
||||
"nationality": local_data["header"]["nationality"].title(),
|
||||
"email": data["header"]["email"],
|
||||
"phone": data["header"]["phone"],
|
||||
"website": data["header"]["website"],
|
||||
"table_jobs": out_table_jobs,
|
||||
"table_education": out_table_education,
|
||||
"skills": data["skills"],
|
||||
"hobbies": data["hobbies"],
|
||||
"signature": local_config["footer"]["placeholders"]["signature"].format(
|
||||
city=signature_location,
|
||||
date=datetime.now().strftime("%x"),
|
||||
),
|
||||
}
|
||||
|
||||
template.render(context)
|
||||
|
||||
makedirs("output", exist_ok=True)
|
||||
template.save(Path("output", f"{lang}.docx"))
|
||||
|
||||
print(
|
||||
f"Created output for '{lang}' and saved to {Path('output', f'{lang}.docx').absolute()}",
|
||||
flush=True,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
config = json_read(Path("config.json"))
|
||||
makedirs(Path(".cache"), exist_ok=True)
|
||||
if not path.exists(Path(".cache", "location")):
|
||||
signature_location = input("Please, enter signature location: ")
|
||||
with open(Path(".cache", "location"), "w", encoding="utf-8") as file:
|
||||
file.write(signature_location)
|
||||
else:
|
||||
with open(Path(".cache", "location"), "r", encoding="utf-8") as file:
|
||||
cached_location = file.read()
|
||||
signature_location = input(
|
||||
f"Please, enter signature location (send Enter to use previous location '{cached_location}'): "
|
||||
)
|
||||
signature_location = (
|
||||
cached_location if signature_location == "" else signature_location
|
||||
)
|
||||
main()
|
9
modules/utils.py
Normal file
9
modules/utils.py
Normal file
@ -0,0 +1,9 @@
|
||||
from json import loads
|
||||
from pathlib import Path
|
||||
from typing import Any, Union
|
||||
|
||||
|
||||
def json_read(filepath: Union[str, Path]) -> Any:
|
||||
with open(str(filepath), "r", encoding="utf-8") as file:
|
||||
output = loads(file.read())
|
||||
return output
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
docx==0.2.4
|
||||
docxtpl==0.16.6
|
Loading…
Reference in New Issue
Block a user