mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Support configurable URL's & SAVE_AS path for Author, Category and Tag
This commit is contained in:
parent
a39787c1a2
commit
44cf2ad400
4 changed files with 60 additions and 43 deletions
|
|
@ -15,28 +15,30 @@ except ImportError:
|
|||
Markdown = False
|
||||
import re
|
||||
|
||||
from pelican.contents import Category, Tag, Author
|
||||
from pelican.contents import Category, Tag, Author, URLWrapper
|
||||
from pelican.utils import get_date, open
|
||||
|
||||
|
||||
_METADATA_PROCESSORS = {
|
||||
'tags': lambda x: map(Tag, unicode(x).split(',')),
|
||||
'date': lambda x: get_date(x),
|
||||
'status': unicode.strip,
|
||||
'tags': lambda x, y: [Tag(tag, y) for tag in unicode(x).split(',')],
|
||||
'date': lambda x, y: get_date(x),
|
||||
'status': lambda x,y: unicode.strip(x),
|
||||
'category': Category,
|
||||
'author': Author,
|
||||
}
|
||||
|
||||
def _process_metadata(name, value):
|
||||
if name.lower() in _METADATA_PROCESSORS:
|
||||
return _METADATA_PROCESSORS[name.lower()](value)
|
||||
return value
|
||||
|
||||
|
||||
class Reader(object):
|
||||
enabled = True
|
||||
extensions = None
|
||||
|
||||
def __init__(self, settings):
|
||||
self.settings = settings
|
||||
|
||||
def process_metadata(self, name, value):
|
||||
if name.lower() in _METADATA_PROCESSORS:
|
||||
return _METADATA_PROCESSORS[name.lower()](value, self.settings)
|
||||
return value
|
||||
|
||||
class _FieldBodyTranslator(HTMLTranslator):
|
||||
|
||||
def astext(self):
|
||||
|
|
@ -54,29 +56,25 @@ def render_node_to_html(document, node):
|
|||
node.walkabout(visitor)
|
||||
return visitor.astext()
|
||||
|
||||
def get_metadata(document):
|
||||
"""Return the dict containing document metadata"""
|
||||
output = {}
|
||||
for docinfo in document.traverse(docutils.nodes.docinfo):
|
||||
for element in docinfo.children:
|
||||
if element.tagname == 'field': # custom fields (e.g. summary)
|
||||
name_elem, body_elem = element.children
|
||||
name = name_elem.astext()
|
||||
value = render_node_to_html(document, body_elem)
|
||||
else: # standard fields (e.g. address)
|
||||
name = element.tagname
|
||||
value = element.astext()
|
||||
|
||||
output[name] = _process_metadata(name, value)
|
||||
return output
|
||||
|
||||
|
||||
class RstReader(Reader):
|
||||
enabled = bool(docutils)
|
||||
extension = "rst"
|
||||
|
||||
def _parse_metadata(self, document):
|
||||
return get_metadata(document)
|
||||
"""Return the dict containing document metadata"""
|
||||
output = {}
|
||||
for docinfo in document.traverse(docutils.nodes.docinfo):
|
||||
for element in docinfo.children:
|
||||
if element.tagname == 'field': # custom fields (e.g. summary)
|
||||
name_elem, body_elem = element.children
|
||||
name = name_elem.astext()
|
||||
value = render_node_to_html(document, body_elem)
|
||||
else: # standard fields (e.g. address)
|
||||
name = element.tagname
|
||||
value = element.astext()
|
||||
|
||||
output[name] = self.process_metadata(name, value)
|
||||
return output
|
||||
|
||||
def _get_publisher(self, filename):
|
||||
extra_params = {'initial_header_level': '2'}
|
||||
|
|
@ -113,7 +111,7 @@ class MarkdownReader(Reader):
|
|||
metadata = {}
|
||||
for name, value in md.Meta.items():
|
||||
name = name.lower()
|
||||
metadata[name] = _process_metadata(name, value[0])
|
||||
metadata[name] = self.process_metadata(name, value[0])
|
||||
return content, metadata
|
||||
|
||||
|
||||
|
|
@ -129,7 +127,7 @@ class HtmlReader(Reader):
|
|||
key = i.split(':')[0][5:].strip()
|
||||
value = i.split(':')[-1][:-3].strip()
|
||||
name = key.lower()
|
||||
metadata[name] = _process_metadata(name, value)
|
||||
metadata[name] = self.process_metadata(name, value)
|
||||
|
||||
return content, metadata
|
||||
|
||||
|
|
@ -143,7 +141,7 @@ def read_file(filename, fmt=None, settings=None):
|
|||
fmt = filename.split('.')[-1]
|
||||
if fmt not in _EXTENSIONS.keys():
|
||||
raise TypeError('Pelican does not know how to parse %s' % filename)
|
||||
reader = _EXTENSIONS[fmt]()
|
||||
reader = _EXTENSIONS[fmt](settings)
|
||||
settings_key = '%s_EXTENSIONS' % fmt.upper()
|
||||
if settings and settings_key in settings:
|
||||
reader.extensions = settings[settings_key]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue