From 75821fb6448c65cc0f49ba5be3e99dd5a9f9ddf9 Mon Sep 17 00:00:00 2001 From: Alexis Metaireau Date: Thu, 19 Aug 2010 02:43:53 +0200 Subject: [PATCH] Add support of multiple static paths and feed generation. --- TODO | 1 - pelican/generator.py | 36 ++++++++-- samples/themes/notmyidea/base.html | 66 ------------------ samples/themes/notmyidea/css/main.css | 2 +- .../notmyidea/images/icons/delicious.png | Bin 0 -> 963 bytes .../themes/notmyidea/images/icons/lastfm.png | Bin 0 -> 980 bytes samples/themes/notmyidea/images/icons/rss.png | Bin 0 -> 896 bytes .../themes/notmyidea/images/icons/twitter.png | Bin 0 -> 835 bytes samples/themes/notmyidea/templates/base.html | 4 +- 9 files changed, 33 insertions(+), 76 deletions(-) delete mode 100644 samples/themes/notmyidea/base.html create mode 100644 samples/themes/notmyidea/images/icons/delicious.png create mode 100644 samples/themes/notmyidea/images/icons/lastfm.png create mode 100644 samples/themes/notmyidea/images/icons/rss.png create mode 100644 samples/themes/notmyidea/images/icons/twitter.png diff --git a/TODO b/TODO index 12d011b5..6dc060e7 100644 --- a/TODO +++ b/TODO @@ -1,2 +1 @@ -* Add RSS generation * package it ! diff --git a/pelican/generator.py b/pelican/generator.py index f54ddf4c..aa441287 100644 --- a/pelican/generator.py +++ b/pelican/generator.py @@ -9,6 +9,7 @@ from functools import partial from operator import attrgetter from jinja2 import Environment, FileSystemLoader +from feedgenerator import Atom1Feed import rstdirectives # import the directives to have pygments support @@ -20,7 +21,9 @@ _DEFAULT_THEME =\ _DEFAULT_CONFIG = {'PATH': None, 'THEME': _DEFAULT_THEME, 'OUTPUT_PATH': 'output/', - 'MARKUP': 'rst'} + 'MARKUP': 'rst', + 'STATIC_PATHS': ['css', 'images'], + 'FEED_FILENAME': 'atom.xml'} def generate_output(path=None, theme=None, output_path=None, markup=None, settings=None): @@ -84,12 +87,31 @@ def generate_output(path=None, theme=None, output_path=None, markup=None, generate('%s' % article.url, templates['article'], context, article=article) - # copy css path to output/css - try: - shutil.copytree(os.path.join(theme, 'css'), - os.path.join(output_path, 'css')) - except OSError: - pass + # generate atom feed + feed = Atom1Feed( + title=context['BLOGNAME'], + link=context['BLOGURL'], + feed_url='%s/%s' % (context['BLOGURL'], context['FEED_FILENAME']), + description=context['BLOGSUBTITLE']) + for article in articles: + feed.add_item( + title=article.title, + link='%s/%s' % (context['BLOGURL'], article.url), + description=article.content, + author_name=article.author, + pubdate=article.date) + + fp = open(os.path.join(output_path, context['FEED_FILENAME']), 'w') + feed.write(fp, 'utf-8') + fp.close() + + # copy static paths to output + for path in context['STATIC_PATHS']: + try: + shutil.copytree(os.path.join(theme, path), + os.path.join(output_path, path)) + except OSError: + pass def generate_file(path, name, template, context, **kwargs): diff --git a/samples/themes/notmyidea/base.html b/samples/themes/notmyidea/base.html deleted file mode 100644 index 5e08829a..00000000 --- a/samples/themes/notmyidea/base.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - {% block title %}{{ BLOGNAME }}{%endblock%} - - - - - - - - - - - - - - - {% block content %} - {% endblock %} -
- {% if BLOGROLL %} -
-

blogroll

-
    - {% for name, link in BLOGROLL %} -
  • {{ name }}
  • - {% endfor %} -
-
- {% endif %} - {% if SOCIAL %} - - {% endif %} -
- - - - - diff --git a/samples/themes/notmyidea/css/main.css b/samples/themes/notmyidea/css/main.css index 2b0d852b..459eafdf 100644 --- a/samples/themes/notmyidea/css/main.css +++ b/samples/themes/notmyidea/css/main.css @@ -281,7 +281,7 @@ img.left, figure.left {float: right; margin: 0 0 2em 2em;} .social a[href*='digg.com'] {background-image: url('../images/icons/digg.png');} .social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');} .social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');} - .social a[href*='/feed/'] {background-image: url('../images/icons/rss.png');} + .social a[href*='atom.xml'] {background-image: url('../images/icons/rss.png');} .social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');} /* diff --git a/samples/themes/notmyidea/images/icons/delicious.png b/samples/themes/notmyidea/images/icons/delicious.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ce246a4602f8f74e75ea8cfe9f5a00daceeb33 GIT binary patch literal 963 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 block title %}{{ BLOGNAME }}{%endblock%} + + @@ -45,7 +47,7 @@