Skip to content

markdown_converter

django_spire.knowledge.entry.version.converters.markdown_converter

MARKO_BLOCK_TYPE_TO_BLOCK_CHOICES = defaultdict(lambda: BlockTypeChoices.TEXT, {Paragraph: models.BlockTypeChoices.TEXT, BlankLine: models.BlockTypeChoices.TEXT, Heading: models.BlockTypeChoices.HEADING, List: models.BlockTypeChoices.LIST}) module-attribute

MarkdownConverter

Bases: BaseConverter

Converts Markdown content to a list of EntryVersionBlocks using Marko.

For more info on Marko: https://marko-py.readthedocs.io/en/latest/api.html#marko.block.BlockElement

Source code in django_spire/knowledge/entry/version/converters/markdown_converter.py
def __init__(self, entry_version: EntryVersion):
    super().__init__(entry_version)
    self._order = 0

html_converter = HtmlConverter() class-attribute instance-attribute

convert_file_to_blocks

Source code in django_spire/knowledge/entry/version/converters/markdown_converter.py
def convert_file_to_blocks(self, file: File) -> list[models.EntryVersionBlock]:
    with default_storage.open(file.file.name, 'r') as f:
        return self.convert_markdown_to_blocks(f.read())

convert_markdown_to_blocks

Source code in django_spire/knowledge/entry/version/converters/markdown_converter.py
def convert_markdown_to_blocks(
    self,
    markdown_content: str
) -> list[models.EntryVersionBlock]:
    marko_blocks = marko.parse(markdown_content).children

    return [
        models.EntryVersionBlock.services.factory.create_validated_block(
            entry_version=self.entry_version,
            type=MARKO_BLOCK_TYPE_TO_BLOCK_CHOICES[marko_block.__class__],
            data=self._marko_block_to_editor_block_data_dict(marko_block),
            order=order,
            tunes={}
        )
        for order, marko_block in enumerate(marko_blocks)
    ]

html_to_markdown classmethod

Source code in django_spire/knowledge/entry/version/converters/markdown_converter.py
@classmethod
def html_to_markdown(cls, html_content: str) -> str:
    return cls.html_converter.convert_string(html_content).markdown

marko_block_to_markdown_string classmethod

Source code in django_spire/knowledge/entry/version/converters/markdown_converter.py
@classmethod
def marko_block_to_markdown_string(cls, marko_block: BlockElement) -> str:
    return cls.html_to_markdown(marko.render(marko_block))