Bläddra i källkod

support pages for categories and tags, too

Dan Crosta 9 år sedan
förälder
incheckning
9de9c987b6
1 ändrade filer med 33 tillägg och 10 borttagningar
  1. 33 10
      autopages/autopages.py

+ 33 - 10
autopages/autopages.py

@@ -1,9 +1,12 @@
+import logging
 import os
 import os.path
 
 from pelican import signals
 
 
+logger = logging.getLogger("autopages")
+
 def yield_files(root):
     root = os.path.realpath(os.path.abspath(root))
     for dirpath, dirnames, filenames in os.walk(root):
@@ -19,21 +22,41 @@ def yield_files(root):
                 continue
             yield os.path.join(dirpath, filename)
 
-def test(article_generator):
+def make_page(readers, filename):
+    base_path, filename = os.path.split(filename)
+    page = readers.read_file(base_path, filename)
+    slug, _ = os.path.splitext(filename)
+    return slug, page
+
+def make_pages(readers, path):
+    pages = {}
+    for filename in yield_files(path):
+        try:
+            slug, page = make_page(readers, filename)
+        except Exception:
+            logger.exception("Could not make autopage for %r", filename)
+            continue
+        pages[slug] = page
+    return pages
+
+def create_autopages(article_generator):
     settings = article_generator.settings
     readers = article_generator.readers
-    path = settings.get("AUTHOR_PAGE_PATH", "authors")
 
-    author_pages = {}
-    for filename in yield_files(path):
-        base_path, filename = os.path.split(filename)
-        page = readers.read_file(base_path, filename)
-        slug, _ = os.path.splitext(filename)
-        author_pages[slug] = page
+    authors_path = settings.get("AUTHOR_PAGE_PATH", "authors")
+    categories_path = settings.get("CATEGORY_PAGE_PATH", "categories")
+    tags_path = settings.get("TAG_PAGE_PATH", "tags")
+
+    author_pages = make_pages(readers, authors_path)
+    category_pages = make_pages(readers, categories_path)
+    tag_pages = make_pages(readers, tags_path)
 
     for author, _ in article_generator.authors:
-        print "set author.page for %s to %r" % (author.slug, author_pages.get(author.slug, ""))
         author.page = author_pages.get(author.slug, "")
+    for category, _ in article_generator.categories:
+        category.page = category_pages.get(category.slug, "")
+    for tag in article_generator.tags:
+        tag.page = tag_pages.get(tag.slug, "")
 
 def register():
-    signals.article_generator_finalized.connect(test)
+    signals.article_generator_finalized.connect(create_autopages)