Mercurial > piecrust2
comparison 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 |
comparison
equal
deleted
inserted
replaced
266:2f4412745db2 | 267:f512905ae812 |
---|---|
80 filename = os.path.basename(rel_path) | 80 filename = os.path.basename(rel_path) |
81 name, _ = os.path.splitext(filename) | 81 name, _ = os.path.splitext(filename) |
82 return name | 82 return name |
83 | 83 |
84 def _makeSlug(self, rel_path): | 84 def _makeSlug(self, rel_path): |
85 raise NotImplementedError() | 85 slug = rel_path.replace('\\', '/') |
86 slug = self._cleanSlug(slug) | |
87 slug, ext = os.path.splitext(slug) | |
88 if ext.lstrip('.') not in self.supported_extensions: | |
89 slug += ext | |
90 if slug.startswith('./'): | |
91 slug = slug[2:] | |
92 if slug == '_index': | |
93 slug = '' | |
94 return slug | |
95 | |
96 def _cleanSlug(self, slug): | |
97 return slug | |
86 | 98 |
87 def _extractConfigFragment(self, rel_path): | 99 def _extractConfigFragment(self, rel_path): |
88 raise NotImplementedError() | 100 raise NotImplementedError() |
89 | 101 |
90 | 102 |
102 self.only_single_values = config.get('only_single_values', False) | 114 self.only_single_values = config.get('only_single_values', False) |
103 self.collapse_single_values = config.get('collapse_single_values', | 115 self.collapse_single_values = config.get('collapse_single_values', |
104 False) | 116 False) |
105 self.supported_extensions = list( | 117 self.supported_extensions = list( |
106 app.config.get('site/auto_formats').keys()) | 118 app.config.get('site/auto_formats').keys()) |
107 | |
108 def _makeSlug(self, rel_path): | |
109 slug, ext = os.path.splitext(os.path.basename(rel_path)) | |
110 if ext.lstrip('.') not in self.supported_extensions: | |
111 slug += ext | |
112 return slug | |
113 | 119 |
114 def _extractConfigFragment(self, rel_path): | 120 def _extractConfigFragment(self, rel_path): |
115 if rel_path == '.': | 121 if rel_path == '.': |
116 values = [] | 122 values = [] |
117 else: | 123 else: |
166 fac = PageFactory(self, cur_rel_path, metadata) | 172 fac = PageFactory(self, cur_rel_path, metadata) |
167 | 173 |
168 name, _ = os.path.splitext(name) | 174 name, _ = os.path.splitext(name) |
169 items.append((False, name, fac)) | 175 items.append((False, name, fac)) |
170 return items | 176 return items |
177 | |
178 def _cleanSlug(self, slug): | |
179 return os.path.basename(slug) | |
171 | 180 |
172 | 181 |
173 class OrderedPageSource(AutoConfigSourceBase): | 182 class OrderedPageSource(AutoConfigSourceBase): |
174 """ A page source that assigns an "order" to its pages based on a | 183 """ A page source that assigns an "order" to its pages based on a |
175 numerical prefix in their filename. Page iterators will automatically | 184 numerical prefix in their filename. Page iterators will automatically |
275 | 284 |
276 name, _ = os.path.splitext(name) | 285 name, _ = os.path.splitext(name) |
277 items.append((False, clean_name, fac)) | 286 items.append((False, clean_name, fac)) |
278 return items | 287 return items |
279 | 288 |
280 def _makeSlug(self, rel_path): | 289 def _cleanSlug(self, slug): |
281 slug, ext = os.path.splitext(rel_path) | 290 return self.re_pattern.sub(r'\1', slug) |
282 if ext.lstrip('.') not in self.supported_extensions: | |
283 slug += ext | |
284 slug = self.re_pattern.sub(r'\1', slug) | |
285 return slug | |
286 | 291 |
287 def _extractConfigFragment(self, rel_path): | 292 def _extractConfigFragment(self, rel_path): |
288 values = [] | 293 values = [] |
289 for m in self.re_pattern.finditer(rel_path): | 294 for m in self.re_pattern.finditer(rel_path): |
290 val = int(m.group('num')) | 295 val = int(m.group('num')) |