From 53355a4549939b7a7b46a9a7b6dbdf3545dbaaff Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Fri, 27 Sep 2024 16:41:26 +0200 Subject: [PATCH] Add frontmatter with aliases to cards. Frontmatter is stripped before sending to API --- favro_sync/favro_markdown.py | 35 ++++++++++++++++++++++++++++++----- test/test_markdown_parsing.py | 11 ++++++++++- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/favro_sync/favro_markdown.py b/favro_sync/favro_markdown.py index 744113d..cc7e6b8 100644 --- a/favro_sync/favro_markdown.py +++ b/favro_sync/favro_markdown.py @@ -5,6 +5,7 @@ import stat from collections.abc import Iterator from logging import getLogger +import frontmatter import marko import marko.md_renderer @@ -18,17 +19,43 @@ class CardContents: markdown = marko.Markdown() renderer = marko.md_renderer.MarkdownRenderer() +OBSIDIAN_MODE = True + def format_card_contents(card: CardContents) -> str: ls = [] + + # Frontmatter + if OBSIDIAN_MODE: + if card.name: + ls.append('---\n') + # TODO: Tags + ls.append('aliases:\n') + ls.append(' - ') + ls.append(card.name) + ls.append('\n') + ls.append('---\n\n') + + # Card name if card.name: ls.append('# ') ls.append(card.name) - ls.append('\n\n') - ls.append(card.description or '') + ls.append('\n\n') + + # Card contents + if card.description: + ls.append(card.description) return ''.join(ls) def parse_card_contents(contents: str) -> CardContents: - document = markdown.parse(contents.strip()) + """ + 1. Strips frontmatter + 2. Parses header + 3. Finds content. + """ + fm = frontmatter.loads(contents) + del contents + + document = markdown.parse(fm.content.strip()) name = None for elem in document.children: if isinstance(elem, marko.block.Heading): @@ -43,5 +70,3 @@ def parse_card_contents(contents: str) -> CardContents: def format_card(card: Card) -> str: return format_card_contents(CardContents(card.name, card.detailed_description)) - - diff --git a/test/test_markdown_parsing.py b/test/test_markdown_parsing.py index 30b5356..f1ad66b 100644 --- a/test/test_markdown_parsing.py +++ b/test/test_markdown_parsing.py @@ -1,8 +1,12 @@ from favro_sync.favro_markdown import parse_card_contents, format_card_contents EXAMPLE_TEXT_1 = ''' +--- +aliases: + - Hello World +--- -# Hello world +# Hello World Test description @@ -15,5 +19,10 @@ Test description def test_parse_and_render(): card_contents = parse_card_contents(EXAMPLE_TEXT_1) + + assert card_contents.name == 'Hello World' + assert '---' not in card_contents.description print(card_contents) + assert False + assert format_card_contents(card_contents) == EXAMPLE_TEXT_1