diff piecrust/sources/autoconfig.py @ 267:f512905ae812

sources: Generate proper slugs in the `autoconfig` and `ordered` sources.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 25 Feb 2015 13:06:41 -0800
parents 3f740928043a
children a2d283d1033d
line wrap: on
line diff
--- a/piecrust/sources/autoconfig.py	Wed Feb 25 08:31:30 2015 -0800
+++ b/piecrust/sources/autoconfig.py	Wed Feb 25 13:06:41 2015 -0800
@@ -82,7 +82,19 @@
         return name
 
     def _makeSlug(self, rel_path):
-        raise NotImplementedError()
+        slug = rel_path.replace('\\', '/')
+        slug = self._cleanSlug(slug)
+        slug, ext = os.path.splitext(slug)
+        if ext.lstrip('.') not in self.supported_extensions:
+            slug += ext
+        if slug.startswith('./'):
+            slug = slug[2:]
+        if slug == '_index':
+            slug = ''
+        return slug
+
+    def _cleanSlug(self, slug):
+        return slug
 
     def _extractConfigFragment(self, rel_path):
         raise NotImplementedError()
@@ -105,12 +117,6 @@
         self.supported_extensions = list(
                 app.config.get('site/auto_formats').keys())
 
-    def _makeSlug(self, rel_path):
-        slug, ext = os.path.splitext(os.path.basename(rel_path))
-        if ext.lstrip('.') not in self.supported_extensions:
-            slug += ext
-        return slug
-
     def _extractConfigFragment(self, rel_path):
         if rel_path == '.':
             values = []
@@ -169,6 +175,9 @@
                     items.append((False, name, fac))
         return items
 
+    def _cleanSlug(self, slug):
+        return os.path.basename(slug)
+
 
 class OrderedPageSource(AutoConfigSourceBase):
     """ A page source that assigns an "order" to its pages based on a
@@ -277,12 +286,8 @@
                     items.append((False, clean_name, fac))
         return items
 
-    def _makeSlug(self, rel_path):
-        slug, ext = os.path.splitext(rel_path)
-        if ext.lstrip('.') not in self.supported_extensions:
-            slug += ext
-        slug = self.re_pattern.sub(r'\1', slug)
-        return slug
+    def _cleanSlug(self, slug):
+        return self.re_pattern.sub(r'\1', slug)
 
     def _extractConfigFragment(self, rel_path):
         values = []