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'))