class DataParser: def __init__(self, content_type, single_entry=False): self.content_type = content_type self.data_parsed = [] self.renderer = RichTextRenderer() self.single_entry = single_entry def set_data(self, data): self.data = data def parse(self): self.__parse_default() if (self.single_entry == True): return self.data_parsed[0] else: return self.data_parsed def __parse_default(self): items = self.data['items'] for item in items: parsed_item = item.get('fields') self.data_parsed.append(self.__parse_document_field(parsed_item)) def __parse_document_field(self, item): parsed_item = {} for key, value in item.items(): if (isinstance(value, dict)): #is not None means has nodeType value if (value.get('nodeType') and value.get('nodeType') == 'document'): list_content = self.renderer.render(value) value = list_content parsed_item.update({key: value}) return parsed_item
def test_render_with_defaults(self): renderer = RichTextRenderer() self.assertEqual( renderer.render(full_document), "\n".join([ "<h1>Some heading</h1>", "<p></p>", "<div>{0}</div>".format({ "sys": { "id": "49rofLvvxCOiIMIi6mk8ai", "type": "Link", "linkType": "Entry", } }), "<h2>Some subheading</h2>", "<p><b>Some bold</b></p>", "<p><i>Some italics</i></p>", "<p><u>Some underline</u></p>", "<p></p>", "<p></p>", "<div>{0}</div>".format({ "sys": { "id": "5ZF9Q4K6iWSYIU2OUs0UaQ", "type": "Link", "linkType": "Entry", } }), "<p></p>", "<p>Some raw content</p>", "<p></p>", "<p>An unpublished embed:</p>", "<p></p>", "<div>{0}</div>".format({ "sys": { "id": "q2hGXkd5tICym64AcgeKK", "type": "Link", "linkType": "Entry", } }), "<p>Some more content</p>", ]), )
def article(slug): article = Contentful.get_article_by_slug(slug) renderer = RichTextRenderer() article.html = renderer.render(article.content) return render_template('article.html', navbar=navbar, article=article)
def test_render_with_all_renderers_overridden_for_markdown(self): self.maxDiff = None renderer = RichTextRenderer({ "heading-1": HeadingOneMarkdownRenderer, "heading-2": HeadingTwoMarkdownRenderer, "paragraph": ParagraphMarkdownRenderer, "embedded-entry-block": EntryBlockMarkdownRenderer, "bold": BoldMarkdownRenderer, "italic": ItalicMarkdownRenderer, "underline": UnderlineMarkdownRenderer, }) self.assertEqual( renderer.render(full_document), "\n".join([ "# Some heading", "", "", "", "", "```", "{0}".format({ "sys": { "id": "49rofLvvxCOiIMIi6mk8ai", "type": "Link", "linkType": "Entry", } }), "```", "", "## Some subheading", "", "**Some bold**", "", "", "*Some italics*", "", "", "__Some underline__", "", "", "", "", "", "", "", "", "```", "{0}".format({ "sys": { "id": "5ZF9Q4K6iWSYIU2OUs0UaQ", "type": "Link", "linkType": "Entry", } }), "```", "", "", "", "", "", "Some raw content", "", "", "", "", "", "An unpublished embed:", "", "", "", "", "", "```", "{0}".format({ "sys": { "id": "q2hGXkd5tICym64AcgeKK", "type": "Link", "linkType": "Entry", } }), "```", "", "", "Some more content", "", ]), )
def test_render_with_emojis(self): renderer = RichTextRenderer() self.assertEqual(renderer.render(mock_document_with_unicode), "\n".join(["<p>😇</p>"]))
def test_null_renderer_will_raise_an_error_if_unknown_node_type_is_not_mapped( self): renderer = RichTextRenderer() with self.assertRaises(Exception): renderer.render(mock_unknown_node)