diff --git a/docs/settings.rst b/docs/settings.rst index bae7a9f3..c1b3e305 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -59,6 +59,8 @@ Setting name (default value) What doe For example, if you would like to extract both the date and the slug, you could set something like: ``'(?P\d{4}-\d{2}-\d{2})_(?P.*)'``. +`PATH_METADATA` (``''``) Like ``FILENAME_METADATA``, but parsed from a page's + full path relative to the content source directory. `DELETE_OUTPUT_DIRECTORY` (``False``) Delete the content of the output directory before generating new files. `FILES_TO_COPY` (``()``) A list of files (or directories) to copy from the source (inside the diff --git a/pelican/readers.py b/pelican/readers.py index fb8c4bd4..3fd3650b 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -353,19 +353,24 @@ def parse_path_metadata(path, settings=None, process=None): >>> import pprint >>> settings = { ... 'FILENAME_METADATA': '(?P[^.]*).*', + ... 'PATH_METADATA': + ... '(?P[^/]*)/(?P\d{4}-\d{2}-\d{2})/.*', ... } >>> reader = Reader(settings=settings) >>> metadata = parse_path_metadata( ... path='my-cat/2013-01-01/my-slug.html', ... settings=settings, ... process=reader.process_metadata) - >>> pprint.pprint(metadata) - {'slug': 'my-slug'} + >>> pprint.pprint(metadata) # doctest: +ELLIPSIS + {'category': , + 'date': datetime.datetime(2013, 1, 1, 0, 0), + 'slug': 'my-slug'} """ metadata = {} base, ext = os.path.splitext(os.path.basename(path)) if settings: for key,data in [('FILENAME_METADATA', base), + ('PATH_METADATA', path), ]: regexp = settings.get(key) if regexp: diff --git a/pelican/settings.py b/pelican/settings.py index 856c5969..46901ffb 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -77,6 +77,7 @@ _DEFAULT_CONFIG = {'PATH': '.', 'DEFAULT_ORPHANS': 0, 'DEFAULT_METADATA': (), 'FILENAME_METADATA': '(?P\d{4}-\d{2}-\d{2}).*', + 'PATH_METADATA': '', 'FILES_TO_COPY': (), 'DEFAULT_STATUS': 'published', 'ARTICLE_PERMALINK_STRUCTURE': '',