From 3cc3e8c9d84093f8cb8da7ac82147b2d16179bcc Mon Sep 17 00:00:00 2001 From: cellarspoon Date: Mon, 6 Dec 2021 11:55:47 +0100 Subject: [PATCH] sidea/b interface --- README.md | 10 +++++- temp_index.py | 97 +++++++++++++++++++++++++++------------------------ 2 files changed, 61 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index f02e7f0..6634908 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,13 @@ pip install temp-index ## use it +`make_cards` accepts the following arguments: + +- **filepath**: where the pdf will go +- **metadata db**: where your metadata db is +- **side_a**: the fields for the side a of the card +- **side_b**: the fields for the side b of the card + ```python from temp_index import make_cards @@ -17,6 +24,7 @@ from temp_index import make_cards make_cards( "/home/me/catalogue.pdf", "sqlite:///metadata.db", - ["title", "timestamp", "comments", "authors", "tags"] + ["title", "timestamp", "comments", "authors"], + ["tags"], ) ``` diff --git a/temp_index.py b/temp_index.py index 59a7cf7..52a1e5a 100644 --- a/temp_index.py +++ b/temp_index.py @@ -14,64 +14,71 @@ from reportlab.platypus import PageBreak, Paragraph, SimpleDocTemplate, Spacer CWD = Path().resolve() -def make_cards(filepath, db_path, fields): +def make_cards(filepath, db_path, side_a, side_b): """The main entrypoint for card generation.""" filename = os.path.basename(filepath) doc = create_doc(filename) - content = get_fields(db_path, fields) + content = get_fields(db_path, side_a, side_b) doc.build(content) shutil.move(os.path.join(CWD, filename), filepath) -def get_fields(db_path, fields): +def select_fields(fields, content, styles, book): + if "title" in fields: + tag = "{}".format(book.title) + ptitle = Paragraph(tag, styles["Italic"]) + content.append(ptitle) + content.append(Spacer(1, 12)) + + if "timestamp" in fields: + tag = "Timestamp: {}".format(book.timestamp) + ptime = Paragraph(tag, styles["Normal"]) + content.append(ptime) + content.append(Spacer(1, 12)) + + if "comments" in fields: + comments = ", ".join( + [ + shorten(comment.text, width=50, placeholder="...") + for comment in book.comments + ] + ) + tag = "{}".format(comments) + pcomments = Paragraph(tag) + content.append(pcomments) + + if "authors" in fields: + format_string = "{}" + all_authors = [author.name for author in book.authors] + glued_together = format_string.format(", ".join(all_authors)) + + p = Paragraph(glued_together, styles["Normal"]) + content.append(p) + content.append(Spacer(6, 12)) + + if "tags" in fields: + format_string = "{}" + all_tags = [tag.name for tag in book.tags] + tags_glued_together = format_string.format(", ".join(all_tags)) + + p = Paragraph(tags_glued_together, styles["Normal"]) + content.append(p) + content.append(Spacer(6, 12)) + + return content + + +def get_fields(db_path, side_a, side_b): """Retrieve fields from the metadata.""" content = [] styles = getSampleStyleSheet() session = init_session(db_path) for book in session.query(Book).all(): - if "title" in fields: - tag = "{}".format(book.title) - ptitle = Paragraph(tag, styles["Italic"]) - content.append(ptitle) - content.append(Spacer(1, 12)) - - if "timestamp" in fields: - tag = "Timestamp: {}".format(book.timestamp) - ptime = Paragraph(tag, styles["Normal"]) - content.append(ptime) - content.append(Spacer(1, 12)) - - if "comments" in fields: - comments = ", ".join( - [ - shorten(comment.text, width=50, placeholder="...") - for comment in book.comments - ] - ) - tag = "{}".format(comments) - pcomments = Paragraph(tag) - content.append(pcomments) - - if "authors" in fields: - format_string = "{}" - all_authors = [author.name for author in book.authors] - glued_together = format_string.format(", ".join(all_authors)) - - p = Paragraph(glued_together, styles["Normal"]) - content.append(p) - content.append(PageBreak()) - content.append(Spacer(6, 12)) - - if "tags" in fields: - format_string = "{}" - all_tags = [tag.name for tag in book.tags] - tags_glued_together = format_string.format(", ".join(all_tags)) - - p = Paragraph(tags_glued_together, styles["Normal"]) - content.append(p) - content.append(PageBreak()) - content.append(Spacer(6, 12)) + content = select_fields(side_a, content, styles, book) + content.append(PageBreak()) + content = select_fields(side_b, content, styles, book) + content.append(PageBreak()) return content