Пример #1
0
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
Пример #2
0
    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>",
            ]),
        )
Пример #3
0
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)
Пример #4
0
    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",
                "",
            ]),
        )
Пример #5
0
    def test_render_with_emojis(self):
        renderer = RichTextRenderer()

        self.assertEqual(renderer.render(mock_document_with_unicode),
                         "\n".join(["<p>😇</p>"]))
Пример #6
0
    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)