Added microservice to download PDFs
This commit is contained in:
117
pdf-generator.py
Normal file
117
pdf-generator.py
Normal file
@@ -0,0 +1,117 @@
|
||||
"""
|
||||
Reads a key from a txt file. Searches a json file with the key.
|
||||
Exports the key values in a pdf form. Writes the PDF file name
|
||||
to the txt file.
|
||||
"""
|
||||
|
||||
import json
|
||||
from fpdf import FPDF
|
||||
from time import sleep
|
||||
|
||||
TXTFILE = 'recipe.txt' # update to txt file name for read
|
||||
JSONFILE = 'recipes.json' # update to json file name for read
|
||||
CATEGORY = 'recipe' # update category to preceed number in PDF file name
|
||||
|
||||
|
||||
def create_pdf() -> object:
|
||||
"""
|
||||
Create pdf object from FPDF class
|
||||
:return: PDF object
|
||||
"""
|
||||
pdf = FPDF()
|
||||
pdf.add_page()
|
||||
pdf.set_font("Arial", size=15)
|
||||
return pdf
|
||||
|
||||
|
||||
def read_txt(file_name) -> object:
|
||||
"""
|
||||
Open/reads txt file argument
|
||||
:param file_name(str)
|
||||
:return: file content
|
||||
"""
|
||||
with open(file_name, 'r') as txt_file:
|
||||
content = txt_file.read()
|
||||
return content
|
||||
|
||||
|
||||
def load_json(file_name) -> object:
|
||||
"""
|
||||
Opens/loads json file argument
|
||||
:param file_name(str)
|
||||
:return: file contentquit
|
||||
"""
|
||||
with open(file_name, 'r') as json_file:
|
||||
content = json.load(json_file)
|
||||
return content
|
||||
|
||||
|
||||
def add_pdf_content(txt_content, json_content, pdf) -> None:
|
||||
"""
|
||||
Searches json content with key from txt_content. Adds relevant data to pdf object.
|
||||
:param txt_content: txt file content for json search
|
||||
:param json_content: json file content to search
|
||||
:param pdf: pdf object to update
|
||||
:return: none
|
||||
"""
|
||||
for key, value in json_content.items():
|
||||
if key == txt_content:
|
||||
for key, value in value.items():
|
||||
if isinstance(value, dict):
|
||||
pdf.cell(200, 10, txt=key.title() + ":", ln=1, align='C')
|
||||
for key, value in value.items():
|
||||
pdf.cell(200, 10, txt=key + ": " + str(value), ln=1, align='C')
|
||||
else:
|
||||
pdf.cell(200, 10, txt=key.title() + ": " + str(value), ln=1, align='C')
|
||||
|
||||
|
||||
def generate_pdf(category_name, txt_content, pdf) -> str:
|
||||
"""
|
||||
Generate pdf file from pdf object with relevant naming 'category + key from txt file'
|
||||
:param category_name: category for pdf title
|
||||
:param txt_content: txt identifier for pdf title
|
||||
:param pdf: pdf object to generate pdf file
|
||||
:return: pdf file name
|
||||
"""
|
||||
pdf.output(f"{category_name}{txt_content}.pdf")
|
||||
return f"{category_name}{txt_content}.pdf"
|
||||
|
||||
|
||||
def write_txt(file_name, pdf_file) -> None:
|
||||
"""
|
||||
Write generated pdf file name to txt file
|
||||
:param file_name: txt file(str) to write to
|
||||
:param pdf_file: pdf file name to write(str)
|
||||
:return: none
|
||||
"""
|
||||
with open(file_name, 'w') as txt_file:
|
||||
txt_file.write(pdf_file)
|
||||
|
||||
|
||||
def main():
|
||||
initial_content = read_txt(TXTFILE) # initialize variables for while loop comparison
|
||||
|
||||
while True:
|
||||
updated_content = read_txt(TXTFILE)
|
||||
# watch for txt change
|
||||
if updated_content != initial_content:
|
||||
if updated_content == 'QUIT': # exit program upon cue
|
||||
break
|
||||
|
||||
pdf = create_pdf() # create pdf object for file generation
|
||||
|
||||
json_content = load_json(JSONFILE) # load json content for data search
|
||||
|
||||
add_pdf_content(updated_content, json_content, pdf) # update pdf object with data
|
||||
|
||||
pdf_file_name = generate_pdf(CATEGORY, updated_content, pdf) # generate pdf file with appropriate name
|
||||
|
||||
write_txt(TXTFILE, pdf_file_name) # write pdf file name to txt file
|
||||
|
||||
initial_content = read_txt(TXTFILE) # update comparison variable
|
||||
|
||||
sleep(.25)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user