123 lines
4.0 KiB
Python
123 lines
4.0 KiB
Python
import os
|
|
import shutil
|
|
|
|
# def file_exists(filename):
|
|
# if os.path.exists(filename):
|
|
# print('Note: Diary \'' + filename + '\' already exists. Will not be modified.')
|
|
# return True
|
|
# return False
|
|
NUMBER_OF_ANSWERS = 5
|
|
BASE_FODLER = "test_data"
|
|
|
|
|
|
class QuestionAndAnswers:
|
|
def __init__(self, question, answerArray, category):
|
|
self.question = question
|
|
self.answerArray = answerArray
|
|
self.category = category
|
|
|
|
def __str__(self):
|
|
return "QuestionAndAnswers: Question: {}, Answers: {}, Category: {}".format(self.question, self.answerArray, self.category)
|
|
|
|
|
|
def convert(csv_path, output_pdf=False):
|
|
write_markdown_file(csv_path)
|
|
if (output_pdf):
|
|
to_pdf("slide-deck.md")
|
|
|
|
|
|
def write_markdown_file(csv_path):
|
|
# csv_path = "quiz-example.csv"
|
|
OUTPUT_FODLER = "output"
|
|
markdown_filename = "slide-deck.md"
|
|
markdown_path = os.path.join(OUTPUT_FODLER, markdown_filename)
|
|
|
|
# read CSV
|
|
list_of_q_and_as = []
|
|
|
|
with open(csv_path, 'r', encoding='UTF-8') as csv_file:
|
|
data = csv_file.readlines()
|
|
current_category = ""
|
|
for line in data:
|
|
if line.startswith("Kategorie"):
|
|
name_of_category = line.split(",")[0]
|
|
print("name_of_category")
|
|
print(name_of_category)
|
|
current_category = name_of_category
|
|
# do nothing if row is empty
|
|
elif line.split(",")[0] is "":
|
|
pass
|
|
else:
|
|
handle_q_and_a_row(line, list_of_q_and_as, current_category)
|
|
# break
|
|
|
|
# static_part = ""
|
|
# copy template
|
|
template_name = "quiz-slides-template.md"
|
|
shutil.copyfile(template_name, markdown_path)
|
|
|
|
# with open(markdown_path, 'w', encoding='UTF-8') as markdown_file:
|
|
# append questions and answers to copy of template
|
|
with open(markdown_path, 'a', encoding='UTF-8') as markdown_file:
|
|
# write month headline
|
|
# markdown_file.writelines(static_part)
|
|
for q_and_a in list_of_q_and_as:
|
|
print(q_and_a)
|
|
write_q_and_a_to_markdown_file(markdown_file, q_and_a)
|
|
|
|
markdown_file.close()
|
|
# return filename
|
|
|
|
|
|
def write_q_and_a_to_markdown_file(markdown_file, q_and_a):
|
|
markdown_file.writelines('\n')
|
|
markdown_file.writelines('# {}'.format(q_and_a.category))
|
|
markdown_file.writelines('\n')
|
|
markdown_file.writelines('## {}'.format(q_and_a.question))
|
|
|
|
import string
|
|
alphabet = string.ascii_lowercase
|
|
|
|
# for i, obj in q_and_a.answerArray:
|
|
for i, obj in enumerate(q_and_a.answerArray):
|
|
markdown_file.writelines('\n')
|
|
alpha = alphabet[i]
|
|
markdown_file.writelines(' - {}) {}'.format(alpha, q_and_a.answerArray[i]))
|
|
|
|
markdown_file.writelines('---')
|
|
return markdown_file
|
|
|
|
|
|
def handle_q_and_a_row(line, list_of_q_and_as, category):
|
|
column_data = line.split(',')
|
|
print(column_data)
|
|
# check size of array
|
|
print(len(column_data))
|
|
if len(column_data) is NUMBER_OF_ANSWERS:
|
|
question = column_data[0]
|
|
answers = column_data[1:] # select all elements from list except first
|
|
# answers = column_data[-3:]
|
|
q_and_a = QuestionAndAnswers(question, answers, category)
|
|
list_of_q_and_as.append(q_and_a)
|
|
print(q_and_a)
|
|
return list_of_q_and_as
|
|
|
|
|
|
# docker run --rm --init -v $PWD:/home/marp/app/ -e LANG=$LANG marpteam/marp-cli slide-deck.md --pdf
|
|
# minimal (windows): docker run -v ${PWD}:/home/marp/app/ marpteam/marp-cli slide-deck.md --pdf
|
|
def to_pdf(filename):
|
|
import docker
|
|
client = docker.from_env()
|
|
current_dir = os.getcwd()
|
|
print(current_dir)
|
|
|
|
OUTPUT_FODLER = "output"
|
|
output_folder_path = os.path.join(current_dir, OUTPUT_FODLER)
|
|
|
|
# https://docker-py.readthedocs.io/en/stable/containers.html
|
|
client.containers.run('marpteam/marp-cli', '{} --pdf'.format(filename), volumes=[output_folder_path + ':/home/marp/app/'],
|
|
name="marp", detach=True, remove=True, init=True)
|
|
|
|
container = client.containers.get('marp')
|
|
print(container.logs())
|