From f147d9ec4a8e5fe00034066b8feacd8ad8b77bf3 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Fri, 4 Jan 2013 15:57:58 -0500 Subject: [PATCH 1/2] readers: Add 'static' to the base Reader's extensions Instead of just being a base class, we can use it to parse static files. It won't actually do any parsing, but we will get path metadata extraction from read_file, and this will make the StaticGenerator implementation simpler. --- pelican/readers.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pelican/readers.py b/pelican/readers.py index 3fd3650b..8dcabb01 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -44,6 +44,7 @@ METADATA_PROCESSORS = { class Reader(object): enabled = True + file_extensions = ['static'] extensions = None def __init__(self, settings): @@ -54,6 +55,12 @@ class Reader(object): return METADATA_PROCESSORS[name](value, self.settings) return value + def read(self, source_path): + "No-op parser" + content = None + metadata = {} + return content, metadata + class _FieldBodyTranslator(HTMLTranslator): @@ -311,7 +318,7 @@ class AsciiDocReader(Reader): EXTENSIONS = {} -for cls in Reader.__subclasses__(): +for cls in [Reader] + Reader.__subclasses__(): for ext in cls.file_extensions: EXTENSIONS[ext] = cls From 29cdb37af3ba021071f7705191d1dabd48afbbe5 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Fri, 4 Jan 2013 16:12:34 -0500 Subject: [PATCH 2/2] generators: Use the static format to read Static metadata This cuts down on the remaining difference between static files and articles/pages. The main difference is that path-based metadata is now parsed for static content. --- pelican/generators.py | 15 +++++++++------ pelican/readers.py | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pelican/generators.py b/pelican/generators.py index 43127099..f748766a 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -563,21 +563,24 @@ class StaticGenerator(Generator): for f in self.get_files( os.path.join(self.path, static_path), extensions=False): f_rel = os.path.relpath(f, self.path) + content, metadata = read_file( + f, fmt='static', settings=self.settings) # TODO remove this hardcoded 'static' subdirectory - dest = os.path.join('static', f_rel) - url = pelican.utils.path_to_url(dest) + metadata['save_as'] = os.path.join('static', f_rel) + metadata['url'] = pelican.utils.path_to_url(metadata['save_as']) sc = Static( content=None, - metadata={ - 'save_as': dest, - 'url': url, - }, + metadata=metadata, settings=self.settings, source_path=f_rel) self.staticfiles.append(sc) self.add_source_path(sc) # same thing for FILES_TO_COPY for src, dest in self.settings['FILES_TO_COPY']: + content, metadata = read_file( + src, fmt='static', settings=self.settings) + metadata['save_as'] = dest + metadata['url'] = pelican.utils.path_to_url(metadata['save_as']) sc = Static( content=None, metadata={'save_as': dest}, diff --git a/pelican/readers.py b/pelican/readers.py index 8dcabb01..a6ff9118 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -347,7 +347,7 @@ def read_file(path, fmt=None, settings=None): metadata.update(reader_metadata) # eventually filter the content with typogrify if asked so - if settings and settings.get('TYPOGRIFY'): + if content and settings and settings.get('TYPOGRIFY'): from typogrify.filters import typogrify content = typogrify(content) metadata['title'] = typogrify(metadata['title'])