diff --git a/temp_index.py b/temp_index.py index 6ba9ad8..5184043 100644 --- a/temp_index.py +++ b/temp_index.py @@ -1,85 +1,69 @@ +"""Generates PDF cards from a calibre metadata.db.""" + from calibrestekje import Book, Comment, Publisher, init_session from reportlab.lib.pagesizes import * from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet from reportlab.pdfgen import canvas from reportlab.platypus import PageBreak, Paragraph, SimpleDocTemplate, Spacer -pagewidth, pageheight = landscape(A6) - -doc = SimpleDocTemplate( - "text.pdf", - pagesize=landscape(A6), - rightMargin=18, - leftMargin=18, - topMargin=0, - bottomMargin=18, -) -content = [] -styles = getSampleStyleSheet() +def make_cards(): + """The main entrypoint for card generation.""" + # TODO: thread arguments into this logic + doc = create_doc("text.pdf") + content = get_fields(doc) + doc.build(content) -session = init_session("sqlite:///metadata.db") -# if book id from book table is the same as book id from comment table, show me that -for book in session.query(Book).all(): - for comment in session.query(Comment).all(): - if (book.id) == (comment.book): - print(book.id) - print(book.title) - print(book.authors) - print(book.timestamp) - print(book.path) - print(book.tags) - print(comment.text) +def get_fields(): + """Retrieve fields from the metadata.""" + content = [] + styles = getSampleStyleSheet() + session = init_session("sqlite:///metadata.db") - # create a paragraph and append content to it - e.g. book.title, book.authors etc - ptitle = Paragraph("{}".format(book.title), styles["Italic"]) - ptime = Paragraph( - "Uploaded: {}".format(book.timestamp), styles["Normal"] - ) - pcomments = Paragraph("{}".format(comment.text)) + for book in session.query(Book).all(): + ptitle = Paragraph( + "{}".format(book.title), styles["Italic"] + ) + ptime = Paragraph( + "Uploaded: {}".format(book.timestamp), styles["Normal"] + ) + pcomments = Paragraph("{}".format(comment.text)) - # list comprehensions for authors and tags - format_string = "{}" - all_authors = [author.name for author in book.authors] - glued_together = format_string.format(", ".join(all_authors)) + format_string = "{}" + all_authors = [author.name for author in book.authors] + glued_together = format_string.format(", ".join(all_authors)) - format_string = "{}" - all_tags = [tag.name for tag in book.tags] - tags_glued_together = format_string.format(", ".join(all_tags)) + format_string = "{}" + all_tags = [tag.name for tag in book.tags] + tags_glued_together = format_string.format(", ".join(all_tags)) - # format_string = '{}' - # all_comments = [comment.name for comment in comment.text] - # comments_split_apart = format_string.format("".split(all_comments)[:50]) + content.append(ptitle) + content.append(Spacer(1, 12)) + content.append(ptime) + content.append(Spacer(1, 12)) + content.append(pcomments) - # import ipdb; ipdb.set_trace() + p = Paragraph(glued_together, styles["Normal"]) + content.append(p) + content.append(PageBreak()) + content.append(Spacer(6, 12)) - # append the other content - content.append(ptitle) - content.append(Spacer(1, 12)) - content.append(ptime) - content.append(Spacer(1, 12)) - content.append(pcomments) + p = Paragraph(tags_glued_together, styles["Normal"]) + content.append(p) + content.append(PageBreak()) + content.append(Spacer(6, 12)) - # alternative way to list multiple authors... (without list comprehensions) - # first = True - # author_text = "" - # for author in book.authors: - # if not first: - # author_text += ", " - # author_text += author.name - # first = False - # author_text = "{}".format(author_text) + return content - # gluing together authors, tags - p = Paragraph(glued_together, styles["Normal"]) - content.append(p) - content.append(PageBreak()) - content.append(Spacer(6, 12)) - p = Paragraph(tags_glued_together, styles["Normal"]) - content.append(p) - content.append(PageBreak()) - content.append(Spacer(6, 12)) - -doc.build(content) +def create_doc(filename): + """Build the Report Lab document template.""" + return SimpleDocTemplate( + filename, + pagesize=landscape(A6), + rightMargin=18, + leftMargin=18, + topMargin=0, + bottomMargin=18, + )