Beispiel #1
0
 def initSettings(self):
     self.old_locale = locale.setlocale(locale.LC_ALL)
     locale.setlocale(locale.LC_ALL, str('C'))
     self.settings = get_my_settings()
     self.settings['THEME'] = "../"
     self.settings['filenames'] = {}
     self.reader = RstReader(self.settings)
     self.writer = Writer("output", self.settings)
def write_feed(gen, items, context, slug):
    if gen.settings['PELICAN_COMMENT_SYSTEM_FEED'] is None:
        return

    path = gen.settings['PELICAN_COMMENT_SYSTEM_FEED'] % slug

    writer = Writer(gen.output_path, settings=gen.settings)
    writer.write_feed(items, context, path)
Beispiel #3
0
def write_feed(gen, items, context, slug):
    if gen.settings['PELICAN_COMMENT_SYSTEM_FEED'] is None:
        return

    path = gen.settings['PELICAN_COMMENT_SYSTEM_FEED'] % slug

    writer = Writer(gen.output_path, settings=gen.settings)
    writer.write_feed(items, context, path)
def add_static_comments(gen, content):
	if gen.settings['PELICAN_COMMENT_SYSTEM'] != True:
		return

	content.comments_count = 0
	content.comments = []

	#Modify the local context, so we get proper values for the feed
	context = copy.copy(gen.context)
	context['SITEURL'] += "/" + content.url
	context['SITENAME'] = "Comments for: " + content.title
	context['SITESUBTITLE'] = ""
	path = gen.settings['PELICAN_COMMENT_SYSTEM_FEED'] % content.slug
	writer = Writer(gen.output_path, settings=gen.settings)

	folder = os.path.join(gen.settings['PELICAN_COMMENT_SYSTEM_DIR'], content.slug)

	if not os.path.isdir(folder):
		logger.debug("No comments found for: " + content.slug)
		writer.write_feed( [], context, path)
		return

	reader = MarkdownReader(gen.settings)
	comments = []
	replies = []

	for file in os.listdir(folder):
		name, extension = os.path.splitext(file)
		if extension[1:].lower() in reader.file_extensions:
			com_content, meta = reader.read(os.path.join(folder, file))
			
			avatar_path = avatars.getAvatarPath(name, meta)

			com = Comment(file, avatar_path, com_content, meta, gen.settings, file, context)

			if 'replyto' in meta:
				replies.append( com )
			else:
				comments.append( com )

	writer.write_feed( comments + replies, context, path)

	#TODO: Fix this O(n²) loop
	for reply in replies:
		for comment in chain(comments, replies):
			if comment.id == reply.metadata['replyto']:
				comment.addReply(reply)

	count = 0
	for comment in comments:
		comment.sortReplies()
		count += comment.countReplies()

	comments = sorted(comments)

	content.comments_count = len(comments) + count
	content.comments = comments
Beispiel #5
0
    def test_turkish_locale(self):
        if platform == 'win32':
            locale_string = 'Turkish'
        else:
            locale_string = 'tr_TR.UTF-8'
        settings = read_settings(
            override={
                'LOCALE': locale_string,
                'TEMPLATE_PAGES': {
                    'template/source.html': 'generated/file.html'
                }
            })

        generator = TemplatePagesGenerator({'date': self.date}, settings,
                                           self.temp_content, '',
                                           self.temp_output)
        generator.env.filters.update({'strftime': utils.DateFormatter()})

        writer = Writer(self.temp_output, settings=settings)
        generator.generate_output(writer)

        output_path = os.path.join(self.temp_output, 'generated', 'file.html')

        # output file has been generated
        self.assertTrue(os.path.exists(output_path))

        # output content is correct
        with utils.pelican_open(output_path) as output_file:
            self.assertEqual(output_file,
                             utils.strftime(self.date, 'date = %A, %d %B %Y'))
Beispiel #6
0
    def test_generate_ctags(self):
        settings = get_settings(filenames={})
        settings['GENERATE_CTAGS'] = True

        context = settings.copy()
        context['generated_content'] = dict()
        context['static_links'] = set()
        generator = ArticlesGenerator(context=context,
                                      settings=settings,
                                      path=TEST_CONTENT_DIR,
                                      theme=settings['THEME'],
                                      output_path=TEST_CONTENT_DIR)
        generator.generate_context()

        writer = Writer(TEST_CONTENT_DIR, settings=settings)
        generate_ctags(generator, writer)

        output_path = os.path.join(TEST_CONTENT_DIR, 'tags')
        self.assertTrue(os.path.exists(output_path))

        try:
            # output content is correct
            with open(output_path, 'r') as output_file:
                ctags = [l.split('\t')[0] for l in output_file.readlines()]
                self.assertEqual([
                    'bar', 'bar', 'foo', 'foo', 'foobar', 'foobar', 'マック',
                    'パイソン'
                ], ctags)
        finally:
            os.remove(output_path)
    def test_generate_ctags(self):
        settings = get_settings(filenames={})
        settings["GENERATE_CTAGS"] = True

        context = settings.copy()
        context["generated_content"] = dict()
        context["static_links"] = set()
        generator = ArticlesGenerator(
            context=context,
            settings=settings,
            path=TEST_CONTENT_DIR,
            theme=settings["THEME"],
            output_path=TEST_CONTENT_DIR,
        )
        generator.generate_context()

        writer = Writer(TEST_CONTENT_DIR, settings=settings)
        generate_ctags(generator, writer)

        output_path = os.path.join(TEST_CONTENT_DIR, "tags")
        self.assertTrue(os.path.exists(output_path))

        try:
            # output content is correct
            with open(output_path, "r") as output_file:
                ctags = [l.split("\t")[0] for l in output_file.readlines()]
                self.assertEqual(
                    [
                        "bar", "bar", "foo", "foo", "foobar", "foobar", "マック",
                        "パイソン"
                    ],
                    ctags,
                )
        finally:
            os.remove(output_path)
Beispiel #8
0
    def test_generate_output(self):

        settings = get_settings()
        settings['STATIC_PATHS'] = ['static']
        settings['TEMPLATE_PAGES'] = {
            'template/source.html': 'generated/file.html'
        }

        generator = TemplatePagesGenerator(context={'foo': 'bar'},
                                           settings=settings,
                                           path=self.temp_content,
                                           theme='',
                                           output_path=self.temp_output)

        # create a dummy template file
        template_dir = os.path.join(self.temp_content, 'template')
        template_path = os.path.join(template_dir, 'source.html')
        os.makedirs(template_dir)
        with open(template_path, 'w') as template_file:
            template_file.write(self.TEMPLATE_CONTENT)

        writer = Writer(self.temp_output, settings=settings)
        generator.generate_output(writer)

        output_path = os.path.join(self.temp_output, 'generated', 'file.html')

        # output file has been generated
        self.assertTrue(os.path.exists(output_path))

        # output content is correct
        with open(output_path, 'r') as output_file:
            self.assertEqual(output_file.read(), 'foo: bar')
Beispiel #9
0
def write_feed_all(gen, writer):
    if gen.settings['PELICAN_COMMENT_SYSTEM'] is not True:
        return
    if gen.settings['PELICAN_COMMENT_SYSTEM_FEED_ALL'] is None:
        return

    context = copy.copy(gen.context)
    context['SITENAME'] += " - All Comments"
    context['SITESUBTITLE'] = ""
    path = gen.settings['PELICAN_COMMENT_SYSTEM_FEED_ALL']

    global _all_comments
    _all_comments = sorted(_all_comments)
    _all_comments.reverse()

    for com in _all_comments:
        com.title = com.article.title + " - " + com.title
        com.override_url = com.article.url + com.url

    writer = Writer(gen.output_path, settings=gen.settings)
    writer.write_feed(_all_comments, context, path)
def write_feed_all(gen, writer):
    if gen.settings["PELICAN_COMMENT_SYSTEM"] is not True:
        return
    if gen.settings["PELICAN_COMMENT_SYSTEM_FEED_ALL"] is None:
        return

    context = copy.copy(gen.context)
    context["SITENAME"] += " - All Comments"
    context["SITESUBTITLE"] = ""
    path = gen.settings["PELICAN_COMMENT_SYSTEM_FEED_ALL"]

    global _all_comments
    _all_comments = sorted(_all_comments)
    _all_comments.reverse()

    for com in _all_comments:
        com.title = com.article.title + " - " + com.title
        com.override_url = com.article.url + com.url

    writer = Writer(gen.output_path, settings=gen.settings)
    writer.write_feed(_all_comments, context, path)
def add_static_comments(gen, content):
    if gen.settings['PELICAN_COMMENT_SYSTEM'] != True:
        return

    content.comments_count = 0
    content.comments = []

    #Modify the local context, so we get proper values for the feed
    context = copy.copy(gen.context)
    context['SITEURL'] += "/" + content.url
    context['SITENAME'] = "Comments for: " + content.title
    context['SITESUBTITLE'] = ""
    path = gen.settings['PELICAN_COMMENT_SYSTEM_FEED'] % content.slug
    writer = Writer(gen.output_path, settings=gen.settings)

    folder = os.path.join(gen.settings['PELICAN_COMMENT_SYSTEM_DIR'],
                          content.slug)

    if not os.path.isdir(folder):
        logger.debug("No comments found for: " + content.slug)
        writer.write_feed([], context, path)
        return

    reader = MarkdownReader(gen.settings)
    comments = []
    replies = []

    for file in os.listdir(folder):
        name, extension = os.path.splitext(file)
        if extension[1:].lower() in reader.file_extensions:
            com_content, meta = reader.read(os.path.join(folder, file))

            avatar_path = avatars.getAvatarPath(name, meta)

            com = Comment(file, avatar_path, com_content, meta, gen.settings,
                          file, context)

            if 'replyto' in meta:
                replies.append(com)
            else:
                comments.append(com)

    writer.write_feed(comments + replies, context, path)

    #TODO: Fix this O(n²) loop
    for reply in replies:
        for comment in chain(comments, replies):
            if comment.id == reply.metadata['replyto']:
                comment.addReply(reply)

    count = 0
    for comment in comments:
        comment.sortReplies()
        count += comment.countReplies()

    comments = sorted(comments)

    content.comments_count = len(comments) + count
    content.comments = comments
Beispiel #12
0
    def _get_writer(self):
        writers = [w for _, w in signals.get_writer.send(self) if isinstance(w, type)]
        num_writers = len(writers)

        if num_writers == 0:
            return Writer(self.output_path, settings=self.settings)

        if num_writers > 1:
            logger.warning("%s writers found, using only first one", num_writers)

        writer = writers[0]

        logger.debug("Found writer: %s", writer)
        return writer(self.output_path, settings=self.settings)
Beispiel #13
0
 def get_writer(self):
     writers = [w for (_, w) in signals.get_writer.send(self)
                if isinstance(w, type)]
     writers_found = len(writers)
     if writers_found == 0:
         return Writer(self.output_path, settings=self.settings)
     else:
         writer = writers[0]
         if writers_found == 1:
             logger.debug('Found writer: %s', writer)
         else:
             logger.warning(
                 '%s writers found, using only first one: %s',
                 writers_found, writer)
         return writer(self.output_path, settings=self.settings)
 def test_ok_on_custom_data(self):
     settings = get_settings(filenames={})
     settings["PATH"] = join(CUR_DIR, "test_data")
     settings["PLUGINS"] = ["pelican-ipynb.markup"]  # to also parse .ipynb files
     configure_settings(settings)
     pelican_mock = PelicanMock(settings)
     pelican_init(pelican_mock)
     Pelican.init_plugins(pelican_mock)
     with TemporaryDirectory() as tmpdirname:
         generator = _build_article_generator(settings, tmpdirname)
         process_rst_and_summaries([generator])
         for article in generator.articles:
             if article.source_path.endswith(".rst"):
                 self.assertIn("mathjaxscript_pelican", article.content)
         generator.generate_output(Writer(tmpdirname, settings=settings))
Beispiel #15
0
    def generate_output(self, article, templates, file_num):
        settings = self.settings
        settings['TEMPLATE_PAGES'] = templates

        generator = TemplatePagesGenerator(context={
            'article': article,
            'current_page': file_num
        },
                                           settings=settings,
                                           path=settings['PATH'],
                                           theme=settings['THEME'],
                                           output_path=self.output_path)

        writer = Writer(self.output_path, settings=settings)
        generator.generate_output(writer)

        output_path = os.path.join(self.output_path, 'generated', 'file.html')

        # output content is correct
        with open(output_path, 'r') as output_file:
            rendered_html = output_file.read()

        return rendered_html
Beispiel #16
0
 def get_writer(self):
     return Writer(self.output_path, settings=self.settings)
Beispiel #17
0
 def get_writer(self, flavour=None):
     path = self.output_path
     if flavour != None:
         path = os.path.join(path, flavour)
     return Writer(path, settings=self.settings)
Beispiel #18
0
class BaseTest(object):
    def __init__(self):
        self.initSettings()

    def initSettings(self):
        self.old_locale = locale.setlocale(locale.LC_ALL)
        locale.setlocale(locale.LC_ALL, str('C'))
        self.settings = get_my_settings()
        self.settings['THEME'] = "../"
        self.settings['filenames'] = {}
        self.reader = RstReader(self.settings)
        self.writer = Writer("output", self.settings)

    def gen_article_and_html_from_rst(self, rstPath):
        content, metadata = self.reader.read(rstPath)
        article = Article(content=content, metadata=metadata)
        context = self.settings.copy()
        context['generated_content'] = {}
        context['static_links'] = set()
        context['static_content'] = {}
        context['localsiteurl'] = self.settings['SITEURL']
        generator = ArticlesGenerator(context=context,
                                      settings=self.settings,
                                      path=CONTENT_DIR,
                                      theme=self.settings['THEME'],
                                      output_path=OUTPUT_DIR)
        generator.generate_context()
        f = lambda a: True if (a.slug == article.slug) else False
        result = list(filter(f, generator.context["articles"]))[0]
        self.writer.write_file(result.save_as,
                               generator.get_template('article'),
                               generator.context,
                               article=result)
        soup = BeautifulSoup(
            open("./" + self.writer.output_path + '/' + result.save_as),
            "html.parser")
        return (result, soup)

    def gen_page_and_html_from_rst(self, rstPath):
        content, metadata = self.reader.read(rstPath)
        page = Page(content=content, metadata=metadata)
        context = self.settings.copy()
        context['generated_content'] = {}
        context['static_links'] = set()
        context['static_content'] = {}
        context['localsiteurl'] = self.settings['SITEURL']
        generator = PagesGenerator(context=context,
                                   settings=self.settings,
                                   path=CONTENT_DIR,
                                   theme=self.settings['THEME'],
                                   output_path=OUTPUT_DIR)
        generator.generate_context()
        f = lambda a: True if (a.slug == page.slug) else False
        result = list(filter(f, generator.context["pages"]))[0]
        self.writer.write_file(result.save_as,
                               generator.get_template('page'),
                               generator.context,
                               page=result)
        soup = BeautifulSoup(
            open("./" + self.writer.output_path + '/' + result.save_as),
            "html.parser")
        return (result, soup)

    def gen_tag_and_html_from_name(self, name):
        context = self.settings.copy()
        context['generated_content'] = {}
        context['static_links'] = set()
        context['static_content'] = {}
        context['localsiteurl'] = self.settings['SITEURL']
        generator = ArticlesGenerator(context=context,
                                      settings=self.settings,
                                      path=CONTENT_DIR,
                                      theme=self.settings['THEME'],
                                      output_path=OUTPUT_DIR)
        generator.generate_context()
        generator.generate_tags(self.writer.write_file)
        selectedTag = None

        for tag, articles in generator.tags.items():
            if tag.name == name:
                selectedTag = tag

        soup = BeautifulSoup(
            open("./" + self.writer.output_path + '/' + selectedTag.save_as),
            "html.parser")
        return (selectedTag, soup)

    def gen_category_and_html_from_name(self, name):
        context = self.settings.copy()
        context['generated_content'] = {}
        context['static_links'] = set()
        context['static_content'] = {}
        context['localsiteurl'] = self.settings['SITEURL']
        generator = ArticlesGenerator(context=context,
                                      settings=self.settings,
                                      path=CONTENT_DIR,
                                      theme=self.settings['THEME'],
                                      output_path=OUTPUT_DIR)
        generator.generate_context()
        generator.generate_categories(self.writer.write_file)
        selectedCategory = None

        for category, articles in generator.categories:
            if category.name == name:
                selectedCategory = category

        soup = BeautifulSoup(
            open("./" + self.writer.output_path + '/' +
                 selectedCategory.save_as), "html.parser")
        return (selectedCategory, soup)

    def gen_author_and_html_from_name(self, name):
        context = self.settings.copy()
        context['generated_content'] = {}
        context['static_links'] = set()
        context['static_content'] = {}
        context['localsiteurl'] = self.settings['SITEURL']
        generator = ArticlesGenerator(context=context,
                                      settings=self.settings,
                                      path=CONTENT_DIR,
                                      theme=self.settings['THEME'],
                                      output_path=OUTPUT_DIR)
        generator.generate_context()
        generator.generate_authors(self.writer.write_file)
        selectedAuthor = None

        for author, articles in generator.authors:
            if author.name == name:
                selectedAuthor = author

        soup = BeautifulSoup(
            open("./" + self.writer.output_path + '/' +
                 selectedAuthor.save_as), "html.parser")
        return (selectedAuthor, soup)
 def setUpClass(cls):
     feed_filter.initialized(None)
     cls.writer = Writer(".", get_settings())