Esempio n. 1
0
    def test_rst_parser(self):
        """Correctly parse multilingual rst documents"""

        parsed = parse_rst(TEST_DOC)
        generic_metadata, title, content = parsed.next()
        self.assertEqual(generic_metadata, {
            'slug': 'some-post-title-slugified',
            'draft': True,
            'datetime': datetime.datetime(2012, 9, 12, 16, 3, 15),
        })
        self.assertEqual(content.strip(),
                         u'<p>This will be ignored in main meta section</p>')

        en_metadata, en_title, en_content = parsed.next()
        self.assertEqual(en_metadata, {'lang': 'en', 'tags': ['Tag1', 'Tag2']})
        self.assertEqual(en_title, u'English title')
        self.assertEqual(en_content.strip(),
                         u'<p>The content of the English post</p>\n'
                         u'<p>And another paragraph</p>')

        he_metadata, he_title, he_content = parsed.next()
        self.assertEqual(he_metadata, {
            'lang': 'he',
            'tags': ['פייתון|python'.decode('utf-8'), 'Heb Tag2|slug']
        })
        self.assertEqual(he_title, 'כותרת עברית'.decode('utf-8'))
        self.assertEqual(he_content.strip(),
                         u'<p>The content of the post in Hebrew</p>')
Esempio n. 2
0
    def test_rst_parser(self):
        """Correctly parse multilingual rst documents"""

        parsed = parse_rst(TEST_DOC)
        generic_metadata, title, content = parsed.next()
        self.assertEqual(
            generic_metadata, {
                'slug': 'some-post-title-slugified',
                'draft': True,
                'datetime': datetime.datetime(2012, 9, 12, 16, 3, 15),
            })
        self.assertEqual(content.strip(),
                         u'<p>This will be ignored in main meta section</p>')

        en_metadata, en_title, en_content = parsed.next()
        self.assertEqual(en_metadata, {'lang': 'en', 'tags': ['Tag1', 'Tag2']})
        self.assertEqual(en_title, u'English title')
        self.assertEqual(
            en_content.strip(), u'<p>The content of the English post</p>\n'
            u'<p>And another paragraph</p>')

        he_metadata, he_title, he_content = parsed.next()
        self.assertEqual(
            he_metadata, {
                'lang': 'he',
                'tags': ['פייתון|python'.decode('utf-8'), 'Heb Tag2|slug']
            })
        self.assertEqual(he_title, 'כותרת עברית'.decode('utf-8'))
        self.assertEqual(he_content.strip(),
                         u'<p>The content of the post in Hebrew</p>')
Esempio n. 3
0
def rst_reader():
    "Finds rst posts, parses them and loads into the db."

    for post in find_files(get_blog_dir(), ['.rst']):
        print('Processing {0}'.format(post))
        with open(post) as p:
            parsed = parse_rst(p.read())

            generic_metadata, title, content = parsed.next()

            # got those, now go over the languages
            for metadata, title, content in parsed:
                lang = metadata['lang']

                tags = []
                for meta_tag in metadata['tags']:
                    try:
                        name, slug = meta_tag.split('|')
                    except ValueError:
                        name, slug = meta_tag, slugify(meta_tag)

                    i18n_slug = '{0}-{1}'.format(lang, slug)

                    tag, created = I18NTag.objects.get_or_create(
                        slug=i18n_slug,
                        language=lang,
                        defaults={
                            'name': name,
                            'slug_no_locale': slug
                        })

                    if not created:
                        tag.name = name
                        tag.slug_no_locale = slug
                        tag.save()

                    tags.append(tag)

                defaults = dict(title=title,
                                is_published=not generic_metadata['draft'],
                                content=content,
                                pubdate=generic_metadata['datetime'],
                                excerpt=metadata.get('excerpt'),
                                image=generic_metadata.get('image'))

                post, created = Post.objects.get_or_create(
                    slug=generic_metadata['slug'],
                    language=lang,
                    defaults=defaults)

                if not created:
                    for field, val in defaults.iteritems():
                        setattr(post, field, val)
                    post.save()

                post.tags.set(*tags)
Esempio n. 4
0
def rst_reader():
    "Finds rst posts, parses them and loads into the db."

    for post in find_files(get_blog_dir(), [".rst"]):
        print("Processing {0}".format(post))
        with open(post) as p:
            parsed = parse_rst(p.read())

            generic_metadata, title, content = parsed.next()

            # got those, now go over the languages
            for metadata, title, content in parsed:
                lang = metadata["lang"]

                tags = []
                for meta_tag in metadata["tags"]:
                    try:
                        name, slug = meta_tag.split("|")
                    except ValueError:
                        name, slug = meta_tag, slugify(meta_tag)

                    i18n_slug = "{0}-{1}".format(lang, slug)

                    tag, created = I18NTag.objects.get_or_create(
                        slug=i18n_slug, language=lang, defaults={"name": name, "slug_no_locale": slug}
                    )

                    if not created:
                        tag.name = name
                        tag.slug_no_locale = slug
                        tag.save()

                    tags.append(tag)

                defaults = dict(
                    title=title,
                    is_published=not generic_metadata["draft"],
                    content=content,
                    pubdate=generic_metadata["datetime"],
                    excerpt=metadata.get("excerpt"),
                    image=generic_metadata.get("image"),
                )

                post, created = Post.objects.get_or_create(
                    slug=generic_metadata["slug"], language=lang, defaults=defaults
                )

                if not created:
                    for field, val in defaults.iteritems():
                        setattr(post, field, val)
                    post.save()

                post.tags.set(*tags)