# HG changeset patch # User Ludovic Chabant # Date 1424898401 28800 # Node ID f512905ae812c4676cbc18ebb6feb0a400a0b1cc # Parent 2f4412745db2bcb45cd6293b83c445857e7451aa sources: Generate proper slugs in the `autoconfig` and `ordered` sources. diff -r 2f4412745db2 -r f512905ae812 piecrust/sources/autoconfig.py --- 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 = [] diff -r 2f4412745db2 -r f512905ae812 tests/test_sources_autoconfig.py --- a/tests/test_sources_autoconfig.py Wed Feb 25 08:31:30 2015 -0800 +++ b/tests/test_sources_autoconfig.py Wed Feb 25 13:06:41 2015 -0800 @@ -7,6 +7,10 @@ 'fs, src_config, expected_paths, expected_metadata', [ (mock_fs(), {}, [], []), + (mock_fs().withPage('test/_index.md'), + {}, + ['_index.md'], + [{'slug': '', 'config': {'foo': []}}]), (mock_fs().withPage('test/something.md'), {}, ['something.md'], @@ -86,6 +90,10 @@ 'fs, expected_paths, expected_metadata', [ (mock_fs(), [], []), + (mock_fs().withPage('test/_index.md'), + ['_index.md'], + [{'slug': '', + 'config': {'foo': 0, 'foo_trail': [0]}}]), (mock_fs().withPage('test/something.md'), ['something.md'], [{'slug': 'something',