added a static pages generator

Conflicts:
	pelican/__init__.py
	pelican/generators.py
	pelican/settings.py
This commit is contained in:
Tarek Ziade 2012-03-05 15:52:14 +01:00 committed by Bruno Binet
commit 7127676f71
3 changed files with 36 additions and 4 deletions

View file

@ -9,7 +9,8 @@ from pelican import signals
from pelican.generators import (ArticlesGenerator, PagesGenerator,
StaticGenerator, PdfGenerator,
LessCSSGenerator, SourceFileGenerator)
LessCSSGenerator, SourceFileGenerator,
StaticPageGenerator)
from pelican.log import init
from pelican.settings import read_settings
from pelican.utils import (clean_output_dir, files_changed, file_changed,
@ -170,7 +171,8 @@ class Pelican(object):
signals.finalized.send(self)
def get_generator_classes(self):
generators = [StaticGenerator, ArticlesGenerator, PagesGenerator]
generators = [StaticGenerator, ArticlesGenerator, PagesGenerator,
StaticPageGenerator]
if self.settings['PDF_GENERATOR']:
generators.append(PdfGenerator)
if self.settings['LESS_GENERATOR']: # can be True or PATH to lessc

View file

@ -5,6 +5,7 @@ import random
import logging
import datetime
import subprocess
from os.path import exists, getmtime
from codecs import open
from collections import defaultdict
@ -12,8 +13,8 @@ from functools import partial
from itertools import chain
from operator import attrgetter, itemgetter
from jinja2 import Environment, FileSystemLoader, PrefixLoader, ChoiceLoader
from jinja2.exceptions import TemplateNotFound
from jinja2 import (Environment, FileSystemLoader, PrefixLoader, ChoiceLoader,
BaseLoader, TemplateNotFound)
from pelican.contents import Article, Page, Category, is_valid_content
from pelican.readers import read_file
@ -110,6 +111,34 @@ class Generator(object):
self.context[item] = value
class _FileLoader(BaseLoader):
def __init__(self, path):
self.path = path
def get_source(self, environment, template):
path = template
if not exists(path):
raise TemplateNotFound(template)
mtime = getmtime(path)
with file(path) as f:
source = f.read().decode('utf-8')
return source, path, lambda: mtime == getmtime(path)
class StaticPageGenerator(Generator):
def generate_output(self, writer):
for urlpath, source in self.settings['STATIC_PAGES'].items():
self.env.loader.loaders.insert(0, _FileLoader(source))
try:
template = self.env.get_template(source)
rurls = self.settings.get('RELATIVE_URLS')
writer.write_file(urlpath.strip('/'), template, self.context, rurls)
finally:
del self.env.loader.loaders[0]
class ArticlesGenerator(Generator):
"""Generate blog articles"""

View file

@ -80,6 +80,7 @@ _DEFAULT_CONFIG = {'PATH': '.',
'WEBASSETS': False,
'PLUGINS': [],
'MARKDOWN_EXTENSIONS': ['toc', ],
'STATIC_PAGES': {}
}