Mercurial > piecrust2
comparison piecrust/sources/default.py @ 363:dd25bd3ce1f9
serve: Refactoring and fixes to be able to serve taxonomy pages.
* Page sources' `findPagePath` is renamed to `findPageFactory`, so that it
also returns source metadata.
* Page refs now store possible hits more properly, and use the previous point
to also store metadata. As a result, they can also return a proper factory.
* Implement `findPageFactory` correctly in all built-in sources.
* When the Chef server matches a taxonomy page, get the source metadata from
the page ref in order to make a more proper page.
* Make the `getRoute(s)` functions explicitely say if they want taxonomy routes
or not.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 26 Apr 2015 15:07:40 -0700 |
parents | f130365568ff |
children | 81d2fd526c82 |
comparison
equal
deleted
inserted
replaced
362:ff595828a364 | 363:dd25bd3ce1f9 |
---|---|
53 fac_path = fac_path.replace('\\', '/') | 53 fac_path = fac_path.replace('\\', '/') |
54 self._populateMetadata(fac_path, metadata) | 54 self._populateMetadata(fac_path, metadata) |
55 yield PageFactory(self, fac_path, metadata) | 55 yield PageFactory(self, fac_path, metadata) |
56 | 56 |
57 def resolveRef(self, ref_path): | 57 def resolveRef(self, ref_path): |
58 return os.path.normpath( | 58 path = os.path.normpath( |
59 os.path.join(self.fs_endpoint_path, ref_path.lstrip("\\/"))) | 59 os.path.join(self.fs_endpoint_path, ref_path.lstrip("\\/"))) |
60 slug = self._makeSlug(ref_path) | |
61 metadata = {'slug': slug} | |
62 self._populateMetadata(ref_path, metadata) | |
63 return path, metadata | |
60 | 64 |
61 def findPagePath(self, metadata, mode): | 65 def findPageFactory(self, metadata, mode): |
62 uri_path = metadata.get('slug', '') | 66 uri_path = metadata.get('slug', '') |
63 if not uri_path: | 67 if not uri_path: |
64 uri_path = '_index' | 68 uri_path = '_index' |
65 path = os.path.join(self.fs_endpoint_path, uri_path) | 69 path = os.path.join(self.fs_endpoint_path, uri_path) |
66 _, ext = os.path.splitext(path) | 70 _, ext = os.path.splitext(path) |
69 if ext == '': | 73 if ext == '': |
70 path = '%s.%s' % (path, self.default_auto_format) | 74 path = '%s.%s' % (path, self.default_auto_format) |
71 rel_path = os.path.relpath(path, self.fs_endpoint_path) | 75 rel_path = os.path.relpath(path, self.fs_endpoint_path) |
72 rel_path = rel_path.replace('\\', '/') | 76 rel_path = rel_path.replace('\\', '/') |
73 self._populateMetadata(rel_path, metadata, mode) | 77 self._populateMetadata(rel_path, metadata, mode) |
74 return rel_path, metadata | 78 return PageFactory(self, rel_path, metadata) |
75 | 79 |
76 if ext == '': | 80 if ext == '': |
77 paths_to_check = [ | 81 paths_to_check = [ |
78 '%s.%s' % (path, e) | 82 '%s.%s' % (path, e) |
79 for e in self.supported_extensions] | 83 for e in self.supported_extensions] |
82 for path in paths_to_check: | 86 for path in paths_to_check: |
83 if os.path.isfile(path): | 87 if os.path.isfile(path): |
84 rel_path = os.path.relpath(path, self.fs_endpoint_path) | 88 rel_path = os.path.relpath(path, self.fs_endpoint_path) |
85 rel_path = rel_path.replace('\\', '/') | 89 rel_path = rel_path.replace('\\', '/') |
86 self._populateMetadata(rel_path, metadata, mode) | 90 self._populateMetadata(rel_path, metadata, mode) |
87 return rel_path, metadata | 91 return PageFactory(self, rel_path, metadata) |
88 | 92 |
89 return None, None | 93 return None |
90 | 94 |
91 def listPath(self, rel_path): | 95 def listPath(self, rel_path): |
92 rel_path = rel_path.lstrip('\\/') | 96 rel_path = rel_path.lstrip('\\/') |
93 path = os.path.join(self.fs_endpoint_path, rel_path) | 97 path = os.path.join(self.fs_endpoint_path, rel_path) |
94 names = sorted(os.listdir(path)) | 98 names = sorted(os.listdir(path)) |