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>')
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>')
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)
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)