Mercurial > piecrust2
annotate piecrust/app.py @ 369:4b1019bb2533
serve: Giant refactor to change how we handle data when serving pages.
* We need a distinction between source metadata and route metadata. In most
cases they're the same, but in cases like taxonomy pages, route metadata
contains more things that can't be in source metadata if we want to re-use
cached pages.
* Create a new `QualifiedPage` type which is a page with a specific route
and route metadata. Pass this around in many places.
* Instead of passing an URL around, use the route in the `QualifiedPage` to
generate URLs. This is better since it removes the guess-work from trying
to generate URLs for sub-pages.
* Deep-copy app and page configurations before passing them around to things
that could modify them, like data builders and such.
* Exclude taxonomy pages from iterator data providers.
* Properly nest iterator data providers for when the theme and user page
sources are merged inside `site.pages`.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 03 May 2015 18:47:10 -0700 |
parents | 81480d0219ba |
children | c2ca72fb7f0b |
rev | line source |
---|---|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
1 import re |
0 | 2 import json |
3 import os.path | |
4 import codecs | |
5 import hashlib | |
6 import logging | |
67
563ce5dd02af
I don't care what the YAML spec says, ordered maps are the only sane way.
Ludovic Chabant <ludovic@chabant.com>
parents:
56
diff
changeset
|
7 import collections |
0 | 8 import yaml |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
9 from werkzeug.utils import cached_property |
271
12657039c436
internal: Re-use the cached resource directory.
Ludovic Chabant <ludovic@chabant.com>
parents:
260
diff
changeset
|
10 from piecrust import ( |
12657039c436
internal: Re-use the cached resource directory.
Ludovic Chabant <ludovic@chabant.com>
parents:
260
diff
changeset
|
11 APP_VERSION, RESOURCES_DIR, |
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
12 CACHE_DIR, TEMPLATES_DIR, ASSETS_DIR, |
307
869a206facd5
internal: Remove mentions of plugins directories and sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
271
diff
changeset
|
13 THEME_DIR, |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
14 CONFIG_PATH, THEME_CONFIG_PATH, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
15 DEFAULT_FORMAT, DEFAULT_TEMPLATE_ENGINE, DEFAULT_POSTS_FS, |
307
869a206facd5
internal: Remove mentions of plugins directories and sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
271
diff
changeset
|
16 DEFAULT_DATE_FORMAT, DEFAULT_THEME_SOURCE) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
17 from piecrust.cache import ExtensibleCache, NullCache, NullExtensibleCache |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
18 from piecrust.plugins.base import PluginLoader |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
19 from piecrust.environment import StandardEnvironment |
307
869a206facd5
internal: Remove mentions of plugins directories and sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
271
diff
changeset
|
20 from piecrust.configuration import ( |
869a206facd5
internal: Remove mentions of plugins directories and sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
271
diff
changeset
|
21 Configuration, ConfigurationError, ConfigurationLoader, |
869a206facd5
internal: Remove mentions of plugins directories and sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
271
diff
changeset
|
22 merge_dicts) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
23 from piecrust.routing import Route |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
24 from piecrust.sources.base import REALM_USER, REALM_THEME |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
25 from piecrust.taxonomies import Taxonomy |
0 | 26 |
27 | |
28 logger = logging.getLogger(__name__) | |
29 | |
30 | |
345
ad3e6496f5c3
config: Add `default_page_layout` and `default_post_layout` settings.
Ludovic Chabant <ludovic@chabant.com>
parents:
334
diff
changeset
|
31 CACHE_VERSION = 19 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
32 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
33 |
0 | 34 class VariantNotFoundError(Exception): |
35 def __init__(self, variant_path, message=None): | |
36 super(VariantNotFoundError, self).__init__( | |
37 message or ("No such configuration variant: %s" % variant_path)) | |
38 | |
39 | |
40 class PieCrustConfiguration(Configuration): | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
41 def __init__(self, paths=None, cache=None, values=None, validate=True): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
42 super(PieCrustConfiguration, self).__init__(values, validate) |
0 | 43 self.paths = paths |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
44 self.cache = cache or NullCache() |
0 | 45 self.fixups = [] |
46 | |
47 def applyVariant(self, variant_path, raise_if_not_found=True): | |
48 variant = self.get(variant_path) | |
49 if variant is None: | |
50 if raise_if_not_found: | |
51 raise VariantNotFoundError(variant_path) | |
52 return | |
53 if not isinstance(variant, dict): | |
54 raise VariantNotFoundError(variant_path, | |
55 "Configuration variant '%s' is not an array. " | |
56 "Check your configuration file." % variant_path) | |
57 self.merge(variant) | |
58 | |
59 def _load(self): | |
60 if self.paths is None: | |
61 self._values = self._validateAll({}) | |
62 return | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
63 |
5 | 64 path_times = [os.path.getmtime(p) for p in self.paths] |
6
f5ca5c5bed85
More Python 3 fixes, modularization, and new unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
5
diff
changeset
|
65 cache_key = hashlib.md5(("version=%s&cache=%d" % ( |
f5ca5c5bed85
More Python 3 fixes, modularization, and new unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
5
diff
changeset
|
66 APP_VERSION, CACHE_VERSION)).encode('utf8')).hexdigest() |
0 | 67 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
68 if self.cache.isValid('config.json', path_times): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
69 logger.debug("Loading configuration from cache...") |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
70 config_text = self.cache.read('config.json') |
67
563ce5dd02af
I don't care what the YAML spec says, ordered maps are the only sane way.
Ludovic Chabant <ludovic@chabant.com>
parents:
56
diff
changeset
|
71 self._values = json.loads(config_text, |
563ce5dd02af
I don't care what the YAML spec says, ordered maps are the only sane way.
Ludovic Chabant <ludovic@chabant.com>
parents:
56
diff
changeset
|
72 object_pairs_hook=collections.OrderedDict) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
73 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
74 actual_cache_key = self._values.get('__cache_key') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
75 if actual_cache_key == cache_key: |
39
2f717f961996
Better error reporting and cache validation.
Ludovic Chabant <ludovic@chabant.com>
parents:
36
diff
changeset
|
76 self._values['__cache_valid'] = True |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
77 return |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
78 logger.debug("Outdated cache key '%s' (expected '%s')." % ( |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
79 actual_cache_key, cache_key)) |
0 | 80 |
81 values = {} | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
82 logger.debug("Loading configuration from: %s" % self.paths) |
0 | 83 for i, p in enumerate(self.paths): |
84 with codecs.open(p, 'r', 'utf-8') as fp: | |
67
563ce5dd02af
I don't care what the YAML spec says, ordered maps are the only sane way.
Ludovic Chabant <ludovic@chabant.com>
parents:
56
diff
changeset
|
85 loaded_values = yaml.load(fp.read(), |
107
10fc9c8bf682
Better support for times in YAML interop.
Ludovic Chabant <ludovic@chabant.com>
parents:
93
diff
changeset
|
86 Loader=ConfigurationLoader) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
87 if loaded_values is None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
88 loaded_values = {} |
0 | 89 for fixup in self.fixups: |
90 fixup(i, loaded_values) | |
91 merge_dicts(values, loaded_values) | |
92 | |
93 for fixup in self.fixups: | |
94 fixup(len(self.paths), values) | |
95 | |
96 self._values = self._validateAll(values) | |
97 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
98 logger.debug("Caching configuration...") |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
99 self._values['__cache_key'] = cache_key |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
100 config_text = json.dumps(self._values) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
101 self.cache.write('config.json', config_text) |
39
2f717f961996
Better error reporting and cache validation.
Ludovic Chabant <ludovic@chabant.com>
parents:
36
diff
changeset
|
102 self._values['__cache_valid'] = False |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
103 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
104 def _validateAll(self, values): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
105 # Put all the defaults in the `site` section. |
93
28ea3e69d67e
Use the `OrderedDict` correctly when fresh-loading the app config.
Ludovic Chabant <ludovic@chabant.com>
parents:
87
diff
changeset
|
106 default_sitec = collections.OrderedDict({ |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
107 'title': "Untitled PieCrust website", |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
108 'root': '/', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
109 'default_format': DEFAULT_FORMAT, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
110 'default_template_engine': DEFAULT_TEMPLATE_ENGINE, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
111 'enable_gzip': True, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
112 'pretty_urls': False, |
256
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
113 'trailing_slash': False, |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
114 'date_format': DEFAULT_DATE_FORMAT, |
143
5b12c1d96523
Use ordered dictionaries to preserve priorities between auto-formats.
Ludovic Chabant <ludovic@chabant.com>
parents:
107
diff
changeset
|
115 'auto_formats': collections.OrderedDict([ |
5b12c1d96523
Use ordered dictionaries to preserve priorities between auto-formats.
Ludovic Chabant <ludovic@chabant.com>
parents:
107
diff
changeset
|
116 ('html', ''), |
5b12c1d96523
Use ordered dictionaries to preserve priorities between auto-formats.
Ludovic Chabant <ludovic@chabant.com>
parents:
107
diff
changeset
|
117 ('md', 'markdown'), |
5b12c1d96523
Use ordered dictionaries to preserve priorities between auto-formats.
Ludovic Chabant <ludovic@chabant.com>
parents:
107
diff
changeset
|
118 ('textile', 'textile')]), |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
119 'default_auto_format': 'md', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
120 'pagination_suffix': '/%num%', |
307
869a206facd5
internal: Remove mentions of plugins directories and sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
271
diff
changeset
|
121 'plugins': None, |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
122 'themes_sources': [DEFAULT_THEME_SOURCE], |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
123 'cache_time': 28800, |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
124 'enable_debug_info': True, |
223
7decf00eee47
serve: Don't expose the debug info right away when running with `--debug`.
Ludovic Chabant <ludovic@chabant.com>
parents:
173
diff
changeset
|
125 'show_debug_info': False, |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
126 'use_default_content': True |
93
28ea3e69d67e
Use the `OrderedDict` correctly when fresh-loading the app config.
Ludovic Chabant <ludovic@chabant.com>
parents:
87
diff
changeset
|
127 }) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
128 sitec = values.get('site') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
129 if sitec is None: |
93
28ea3e69d67e
Use the `OrderedDict` correctly when fresh-loading the app config.
Ludovic Chabant <ludovic@chabant.com>
parents:
87
diff
changeset
|
130 sitec = collections.OrderedDict() |
5 | 131 for key, val in default_sitec.items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
132 sitec.setdefault(key, val) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
133 values['site'] = sitec |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
134 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
135 # Add a section for our cached information. |
93
28ea3e69d67e
Use the `OrderedDict` correctly when fresh-loading the app config.
Ludovic Chabant <ludovic@chabant.com>
parents:
87
diff
changeset
|
136 cachec = collections.OrderedDict() |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
137 values['__cache'] = cachec |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
138 |
329
422052d2e978
internal: Try handling URLs in a consistent way.
Ludovic Chabant <ludovic@chabant.com>
parents:
320
diff
changeset
|
139 # Make sure the site root starts and ends with a slash. |
422052d2e978
internal: Try handling URLs in a consistent way.
Ludovic Chabant <ludovic@chabant.com>
parents:
320
diff
changeset
|
140 if not sitec['root'].startswith('/'): |
422052d2e978
internal: Try handling URLs in a consistent way.
Ludovic Chabant <ludovic@chabant.com>
parents:
320
diff
changeset
|
141 raise ConfigurationError("The `site/root` setting must start " |
422052d2e978
internal: Try handling URLs in a consistent way.
Ludovic Chabant <ludovic@chabant.com>
parents:
320
diff
changeset
|
142 "with a slash.") |
422052d2e978
internal: Try handling URLs in a consistent way.
Ludovic Chabant <ludovic@chabant.com>
parents:
320
diff
changeset
|
143 sitec['root'] = sitec['root'].rstrip('/') + '/' |
422052d2e978
internal: Try handling URLs in a consistent way.
Ludovic Chabant <ludovic@chabant.com>
parents:
320
diff
changeset
|
144 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
145 # Cache auto-format regexes. |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
146 if not isinstance(sitec['auto_formats'], dict): |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
147 raise ConfigurationError("The 'site/auto_formats' setting must be " |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
148 "a dictionary.") |
31
8c15fc45d712
Make sure `.html` is part of auto-formats.
Ludovic Chabant <ludovic@chabant.com>
parents:
26
diff
changeset
|
149 html_auto_format = sitec['auto_formats'] |
8c15fc45d712
Make sure `.html` is part of auto-formats.
Ludovic Chabant <ludovic@chabant.com>
parents:
26
diff
changeset
|
150 if not html_auto_format: |
8c15fc45d712
Make sure `.html` is part of auto-formats.
Ludovic Chabant <ludovic@chabant.com>
parents:
26
diff
changeset
|
151 sitec['auto_formats']['html'] = sitec['default_format'] |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
152 cachec['auto_formats_re'] = r"\.(%s)$" % ( |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
153 '|'.join( |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
154 [re.escape(i) for i in |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
155 list(sitec['auto_formats'].keys())])) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
156 if sitec['default_auto_format'] not in sitec['auto_formats']: |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
157 raise ConfigurationError("Default auto-format '%s' is not " |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
158 "declared." % |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
159 sitec['default_auto_format']) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
160 |
256
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
161 # Cache pagination suffix regex and format. |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
162 pgn_suffix = sitec['pagination_suffix'] |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
163 if len(pgn_suffix) == 0 or pgn_suffix[0] != '/': |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
164 raise ConfigurationError("The 'site/pagination_suffix' setting " |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
165 "must start with a slash.") |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
166 if '%num%' not in pgn_suffix: |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
167 raise ConfigurationError("The 'site/pagination_suffix' setting " |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
168 "must contain the '%num%' placeholder.") |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
169 |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
170 pgn_suffix_fmt = pgn_suffix.replace('%num%', '%(num)d') |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
171 cachec['pagination_suffix_format'] = pgn_suffix_fmt |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
172 |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
173 pgn_suffix_re = re.escape(pgn_suffix) |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
174 pgn_suffix_re = (pgn_suffix_re.replace("\\%num\\%", "(?P<num>\\d+)") + |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
175 '$') |
da5e6e00fb41
bake/serve: Make previewed and baked URLs consistent.
Ludovic Chabant <ludovic@chabant.com>
parents:
230
diff
changeset
|
176 cachec['pagination_suffix_re'] = pgn_suffix_re |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
177 |
307
869a206facd5
internal: Remove mentions of plugins directories and sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
271
diff
changeset
|
178 # Make sure theme sources is a list. |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
179 if not isinstance(sitec['themes_sources'], list): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
180 sitec['themes_sources'] = [sitec['themes_sources']] |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
181 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
182 # Figure out if we need to validate sources/routes, or auto-generate |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
183 # them from simple blog settings. |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
184 orig_sources = sitec.get('sources') |
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
185 orig_routes = sitec.get('routes') |
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
186 orig_taxonomies = sitec.get('taxonomies') |
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
187 use_default_content = sitec.get('use_default_content') |
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
188 if (orig_sources is None or orig_routes is None or |
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
189 orig_taxonomies is None or use_default_content): |
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
190 |
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
191 # Setup defaults for various settings. |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
192 posts_fs = sitec.setdefault('posts_fs', DEFAULT_POSTS_FS) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
193 blogsc = sitec.setdefault('blogs', ['posts']) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
194 |
345
ad3e6496f5c3
config: Add `default_page_layout` and `default_post_layout` settings.
Ludovic Chabant <ludovic@chabant.com>
parents:
334
diff
changeset
|
195 g_page_layout = sitec.get('default_page_layout', 'default') |
ad3e6496f5c3
config: Add `default_page_layout` and `default_post_layout` settings.
Ludovic Chabant <ludovic@chabant.com>
parents:
334
diff
changeset
|
196 g_post_layout = sitec.get('default_post_layout', 'post') |
26
3701daa97927
Use the same defaults as in PieCrust 1.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
197 g_post_url = sitec.get('post_url', '%year%/%month%/%day%/%slug%') |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
198 g_tag_url = sitec.get('tag_url', 'tag/%tag%') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
199 g_category_url = sitec.get('category_url', '%category%') |
260
07b4b8484c0a
sources: Use `posts_*` and `items_*` settings more appropriately.
Ludovic Chabant <ludovic@chabant.com>
parents:
257
diff
changeset
|
200 g_posts_per_page = sitec.get('posts_per_page', 5) |
07b4b8484c0a
sources: Use `posts_*` and `items_*` settings more appropriately.
Ludovic Chabant <ludovic@chabant.com>
parents:
257
diff
changeset
|
201 g_posts_filters = sitec.get('posts_filters') |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
202 g_date_format = sitec.get('date_format', DEFAULT_DATE_FORMAT) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
203 |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
204 # The normal pages and tags/categories. |
93
28ea3e69d67e
Use the `OrderedDict` correctly when fresh-loading the app config.
Ludovic Chabant <ludovic@chabant.com>
parents:
87
diff
changeset
|
205 sourcesc = collections.OrderedDict() |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
206 sourcesc['pages'] = { |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
207 'type': 'default', |
84
b3ce11b2cf36
Don't complain about missing `pages` or `posts` directories by default.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
208 'ignore_missing_dir': True, |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
209 'data_endpoint': 'site.pages', |
345
ad3e6496f5c3
config: Add `default_page_layout` and `default_post_layout` settings.
Ludovic Chabant <ludovic@chabant.com>
parents:
334
diff
changeset
|
210 'default_layout': g_page_layout, |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
211 'item_name': 'page'} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
212 sitec['sources'] = sourcesc |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
213 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
214 routesc = [] |
39
2f717f961996
Better error reporting and cache validation.
Ludovic Chabant <ludovic@chabant.com>
parents:
36
diff
changeset
|
215 routesc.append({ |
230
016d42c23ba9
internal: Make the simple page source use `slug` everywhere.
Ludovic Chabant <ludovic@chabant.com>
parents:
223
diff
changeset
|
216 'url': '/%path:slug%', |
39
2f717f961996
Better error reporting and cache validation.
Ludovic Chabant <ludovic@chabant.com>
parents:
36
diff
changeset
|
217 'source': 'pages', |
230
016d42c23ba9
internal: Make the simple page source use `slug` everywhere.
Ludovic Chabant <ludovic@chabant.com>
parents:
223
diff
changeset
|
218 'func': 'pcurl(slug)'}) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
219 sitec['routes'] = routesc |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
220 |
93
28ea3e69d67e
Use the `OrderedDict` correctly when fresh-loading the app config.
Ludovic Chabant <ludovic@chabant.com>
parents:
87
diff
changeset
|
221 taxonomiesc = collections.OrderedDict() |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
222 taxonomiesc['tags'] = { |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
223 'multiple': True, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
224 'term': 'tag'} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
225 taxonomiesc['categories'] = { |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
226 'term': 'category'} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
227 sitec['taxonomies'] = taxonomiesc |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
228 |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
229 # Setup sources/routes/taxonomies for each blog. |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
230 for blog_name in blogsc: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
231 blogc = values.get(blog_name, {}) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
232 url_prefix = blog_name + '/' |
320
edcc9dc17b37
config: Assign correct data endpoint for blogs to be v1-compatible.
Ludovic Chabant <ludovic@chabant.com>
parents:
311
diff
changeset
|
233 fs_endpoint = 'posts/%s' % blog_name |
edcc9dc17b37
config: Assign correct data endpoint for blogs to be v1-compatible.
Ludovic Chabant <ludovic@chabant.com>
parents:
311
diff
changeset
|
234 data_endpoint = blog_name |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
235 item_name = '%s-post' % blog_name |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
236 items_per_page = blogc.get('posts_per_page', g_posts_per_page) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
237 items_filters = blogc.get('posts_filters', g_posts_filters) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
238 date_format = blogc.get('date_format', g_date_format) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
239 if len(blogsc) == 1: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
240 url_prefix = '' |
320
edcc9dc17b37
config: Assign correct data endpoint for blogs to be v1-compatible.
Ludovic Chabant <ludovic@chabant.com>
parents:
311
diff
changeset
|
241 fs_endpoint = 'posts' |
edcc9dc17b37
config: Assign correct data endpoint for blogs to be v1-compatible.
Ludovic Chabant <ludovic@chabant.com>
parents:
311
diff
changeset
|
242 data_endpoint = 'blog' |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
243 item_name = 'post' |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
244 sourcesc[blog_name] = { |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
245 'type': 'posts/%s' % posts_fs, |
320
edcc9dc17b37
config: Assign correct data endpoint for blogs to be v1-compatible.
Ludovic Chabant <ludovic@chabant.com>
parents:
311
diff
changeset
|
246 'fs_endpoint': fs_endpoint, |
edcc9dc17b37
config: Assign correct data endpoint for blogs to be v1-compatible.
Ludovic Chabant <ludovic@chabant.com>
parents:
311
diff
changeset
|
247 'data_endpoint': data_endpoint, |
84
b3ce11b2cf36
Don't complain about missing `pages` or `posts` directories by default.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
248 'ignore_missing_dir': True, |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
249 'data_type': 'blog', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
250 'item_name': item_name, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
251 'items_per_page': items_per_page, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
252 'items_filters': items_filters, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
253 'date_format': date_format, |
345
ad3e6496f5c3
config: Add `default_page_layout` and `default_post_layout` settings.
Ludovic Chabant <ludovic@chabant.com>
parents:
334
diff
changeset
|
254 'default_layout': g_post_layout} |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
255 tax_page_prefix = '' |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
256 if len(blogsc) > 1: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
257 tax_page_prefix = blog_name + '/' |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
258 sourcesc[blog_name]['taxonomy_pages'] = { |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
259 'tags': ('pages:%s_tag.%%ext%%;' |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
260 'theme_pages:_tag.%%ext%%' % |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
261 tax_page_prefix), |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
262 'categories': ('pages:%s_category.%%ext%%;' |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
263 'theme_pages:_category.%%ext%%' % |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
264 tax_page_prefix)} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
265 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
266 post_url = blogc.get('post_url', url_prefix + g_post_url) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
267 post_url = '/' + post_url.lstrip('/') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
268 tag_url = blogc.get('tag_url', url_prefix + g_tag_url) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
269 tag_url = '/' + tag_url.lstrip('/') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
270 category_url = blogc.get('category_url', url_prefix + g_category_url) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
271 category_url = '/' + category_url.lstrip('/') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
272 routesc.append({'url': post_url, 'source': blog_name, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
273 'func': 'pcposturl(year,month,day,slug)'}) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
274 routesc.append({'url': tag_url, 'source': blog_name, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
275 'taxonomy': 'tags', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
276 'func': 'pctagurl(tag)'}) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
277 routesc.append({'url': category_url, 'source': blog_name, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
278 'taxonomy': 'categories', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
279 'func': 'pccaturl(category)'}) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
280 |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
281 # If the user defined some additional sources/routes/taxonomies, |
152
8d956bd94ad2
Better combine user sources/routes with the default ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
143
diff
changeset
|
282 # add them to the default ones. For routes, the order matters, |
8d956bd94ad2
Better combine user sources/routes with the default ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
143
diff
changeset
|
283 # though, so we make sure to add the user routes at the front |
8d956bd94ad2
Better combine user sources/routes with the default ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
143
diff
changeset
|
284 # of the list so they're evaluated first. |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
285 if orig_sources: |
93
28ea3e69d67e
Use the `OrderedDict` correctly when fresh-loading the app config.
Ludovic Chabant <ludovic@chabant.com>
parents:
87
diff
changeset
|
286 sourcesc.update(orig_sources) |
152
8d956bd94ad2
Better combine user sources/routes with the default ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
143
diff
changeset
|
287 sitec['sources'] = sourcesc |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
288 if orig_routes: |
152
8d956bd94ad2
Better combine user sources/routes with the default ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
143
diff
changeset
|
289 routesc = orig_routes + routesc |
8d956bd94ad2
Better combine user sources/routes with the default ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
143
diff
changeset
|
290 sitec['routes'] = routesc |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
291 if orig_taxonomies: |
93
28ea3e69d67e
Use the `OrderedDict` correctly when fresh-loading the app config.
Ludovic Chabant <ludovic@chabant.com>
parents:
87
diff
changeset
|
292 taxonomiesc.update(orig_taxonomies) |
152
8d956bd94ad2
Better combine user sources/routes with the default ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
143
diff
changeset
|
293 sitec['taxonomies'] = taxonomiesc |
83
f9f67086415c
Allow adding to the default content model instead of replacing it.
Ludovic Chabant <ludovic@chabant.com>
parents:
76
diff
changeset
|
294 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
295 # Validate sources/routes. |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
296 sourcesc = sitec.get('sources') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
297 routesc = sitec.get('routes') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
298 if not sourcesc: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
299 raise ConfigurationError("There are no sources defined.") |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
300 if not routesc: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
301 raise ConfigurationError("There are no routes defined.") |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
302 if not isinstance(sourcesc, dict): |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
303 raise ConfigurationError("The 'site/sources' setting must be a " |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
304 "dictionary.") |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
305 if not isinstance(routesc, list): |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
306 raise ConfigurationError("The 'site/routes' setting must be a " |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
307 "list.") |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
308 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
309 # Add the theme page source if no sources were defined in the theme |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
310 # configuration itself. |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
311 has_any_theme_source = False |
5 | 312 for sn, sc in sourcesc.items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
313 if sc.get('realm') == REALM_THEME: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
314 has_any_theme_source = True |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
315 break |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
316 if not has_any_theme_source: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
317 sitec['sources']['theme_pages'] = { |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
318 'theme_source': True, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
319 'fs_endpoint': 'pages', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
320 'data_endpoint': 'site/pages', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
321 'item_name': 'page', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
322 'realm': REALM_THEME} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
323 sitec['routes'].append({ |
230
016d42c23ba9
internal: Make the simple page source use `slug` everywhere.
Ludovic Chabant <ludovic@chabant.com>
parents:
223
diff
changeset
|
324 'url': '/%path:slug%', |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
325 'source': 'theme_pages', |
230
016d42c23ba9
internal: Make the simple page source use `slug` everywhere.
Ludovic Chabant <ludovic@chabant.com>
parents:
223
diff
changeset
|
326 'func': 'pcurl(slug)'}) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
327 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
328 # Sources have the `default` scanner by default, duh. Also, a bunch |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
329 # of other default values for other configuration stuff. |
5 | 330 for sn, sc in sourcesc.items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
331 if not isinstance(sc, dict): |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
332 raise ConfigurationError("All sources in 'site/sources' must " |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
333 "be dictionaries.") |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
334 sc.setdefault('type', 'default') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
335 sc.setdefault('fs_endpoint', sn) |
152
8d956bd94ad2
Better combine user sources/routes with the default ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
143
diff
changeset
|
336 sc.setdefault('ignore_missing_dir', False) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
337 sc.setdefault('data_endpoint', sn) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
338 sc.setdefault('data_type', 'iterator') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
339 sc.setdefault('item_name', sn) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
340 sc.setdefault('items_per_page', 5) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
341 sc.setdefault('date_format', DEFAULT_DATE_FORMAT) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
342 sc.setdefault('realm', REALM_USER) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
343 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
344 # Check routes are referencing correct routes, have default |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
345 # values, etc. |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
346 for rc in routesc: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
347 if not isinstance(rc, dict): |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
348 raise ConfigurationError("All routes in 'site/routes' must be " |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
349 "dictionaries.") |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
350 rc_url = rc.get('url') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
351 if not rc_url: |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
352 raise ConfigurationError("All routes in 'site/routes' must " |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
353 "have an 'url'.") |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
354 if rc_url[0] != '/': |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
355 raise ConfigurationError("Route URLs must start with '/'.") |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
356 if rc.get('source') is None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
357 raise ConfigurationError("Routes must specify a source.") |
5 | 358 if rc['source'] not in list(sourcesc.keys()): |
257
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
359 raise ConfigurationError("Route is referencing unknown " |
e6ae65212c32
cosmetic: PEP8 compliance.
Ludovic Chabant <ludovic@chabant.com>
parents:
256
diff
changeset
|
360 "source: %s" % rc['source']) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
361 rc.setdefault('taxonomy', None) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
362 rc.setdefault('page_suffix', '/%num%') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
363 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
364 # Validate taxonomies. |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
365 sitec.setdefault('taxonomies', {}) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
366 taxonomiesc = sitec.get('taxonomies') |
5 | 367 for tn, tc in taxonomiesc.items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
368 tc.setdefault('multiple', False) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
369 tc.setdefault('term', tn) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
370 tc.setdefault('page', '_%s.%%ext%%' % tc['term']) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
371 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
372 # Validate endpoints, and make sure the theme has a default source. |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
373 reserved_endpoints = set(['piecrust', 'site', 'page', 'route', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
374 'assets', 'pagination', 'siblings', |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
375 'family']) |
5 | 376 for name, src in sitec['sources'].items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
377 endpoint = src['data_endpoint'] |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
378 if endpoint in reserved_endpoints: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
379 raise ConfigurationError( |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
380 "Source '%s' is using a reserved endpoint name: %s" % |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
381 (name, endpoint)) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
382 |
311
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
383 # Make sure the `plugins` setting is a list. |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
384 user_plugins = sitec.get('plugins') |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
385 if user_plugins: |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
386 if isinstance(user_plugins, str): |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
387 sitec['plugins'] = user_plugins.split(',') |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
388 elif not isinstance(user_plugins, list): |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
389 raise ConfigurationError( |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
390 "The 'site/plugins' setting must be an array, or a " |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
391 "comma-separated list.") |
47ffac7ab25d
config: Make sure `site/plugins` is transformed into a list.
Ludovic Chabant <ludovic@chabant.com>
parents:
307
diff
changeset
|
392 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
393 # Done validating! |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
394 return values |
0 | 395 |
396 | |
397 class PieCrust(object): | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
398 def __init__(self, root_dir, cache=True, debug=False, theme_site=False, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
399 env=None): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
400 self.root_dir = root_dir |
0 | 401 self.debug = debug |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
402 self.theme_site = theme_site |
0 | 403 self.plugin_loader = PluginLoader(self) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
404 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
405 if cache: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
406 self.cache = ExtensibleCache(self.cache_dir) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
407 else: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
408 self.cache = NullExtensibleCache() |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
409 |
0 | 410 self.env = env |
411 if self.env is None: | |
412 self.env = StandardEnvironment() | |
413 self.env.initialize(self) | |
414 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
415 @cached_property |
0 | 416 def config(self): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
417 logger.debug("Creating site configuration...") |
0 | 418 paths = [] |
419 if self.theme_dir: | |
420 paths.append(os.path.join(self.theme_dir, THEME_CONFIG_PATH)) | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
421 paths.append(os.path.join(self.root_dir, CONFIG_PATH)) |
0 | 422 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
423 config_cache = self.cache.getCache('app') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
424 config = PieCrustConfiguration(paths, config_cache) |
0 | 425 if self.theme_dir: |
426 # We'll need to patch the templates directories to be relative | |
427 # to the site's root, and not the theme root. | |
428 def _fixupThemeTemplatesDir(index, config): | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
429 if index != 0: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
430 return |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
431 sitec = config.get('site') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
432 if sitec is None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
433 return |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
434 tplc = sitec.get('templates_dirs') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
435 if tplc is None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
436 return |
5 | 437 if isinstance(tplc, str): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
438 tplc = [tplc] |
5 | 439 sitec['templates_dirs'] = list(filter(tplc, |
440 lambda p: os.path.join(self.theme_dir, p))) | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
441 config.fixups.append(_fixupThemeTemplatesDir) |
0 | 442 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
443 # We'll also need to flag all page sources as coming from |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
444 # the theme. |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
445 def _fixupThemeSources(index, config): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
446 if index != 0: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
447 return |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
448 sitec = config.get('site') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
449 if sitec is None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
450 sitec = {} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
451 config['site'] = sitec |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
452 srcc = sitec.get('sources') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
453 if srcc is not None: |
5 | 454 for sn, sc in srcc.items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
455 sc['realm'] = REALM_THEME |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
456 config.fixups.append(_fixupThemeSources) |
0 | 457 |
458 return config | |
459 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
460 @cached_property |
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
461 def assets_dirs(self): |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
462 assets_dirs = self._get_configurable_dirs(ASSETS_DIR, |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
463 'site/assets_dirs') |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
464 |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
465 # Also add the theme directory, if any. |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
466 if self.theme_dir: |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
467 default_theme_dir = os.path.join(self.theme_dir, ASSETS_DIR) |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
468 if os.path.isdir(default_theme_dir): |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
469 assets_dirs.append(default_theme_dir) |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
470 |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
471 return assets_dirs |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
472 |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
473 @cached_property |
0 | 474 def templates_dirs(self): |
475 templates_dirs = self._get_configurable_dirs(TEMPLATES_DIR, | |
476 'site/templates_dirs') | |
477 | |
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
478 # Also, add the theme directory, if any. |
0 | 479 if self.theme_dir: |
480 default_theme_dir = os.path.join(self.theme_dir, TEMPLATES_DIR) | |
481 if os.path.isdir(default_theme_dir): | |
482 templates_dirs.append(default_theme_dir) | |
483 | |
484 return templates_dirs | |
485 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
486 @cached_property |
0 | 487 def theme_dir(self): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
488 td = self._get_dir(THEME_DIR) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
489 if td is not None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
490 return td |
271
12657039c436
internal: Re-use the cached resource directory.
Ludovic Chabant <ludovic@chabant.com>
parents:
260
diff
changeset
|
491 return os.path.join(RESOURCES_DIR, 'theme') |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
492 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
493 @cached_property |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
494 def cache_dir(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
495 return os.path.join(self.root_dir, CACHE_DIR) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
496 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
497 @cached_property |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
498 def sources(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
499 defs = {} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
500 for cls in self.plugin_loader.getSources(): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
501 defs[cls.SOURCE_NAME] = cls |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
502 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
503 sources = [] |
5 | 504 for n, s in self.config.get('site/sources').items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
505 cls = defs.get(s['type']) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
506 if cls is None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
507 raise ConfigurationError("No such page source type: %s" % s['type']) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
508 src = cls(self, n, s) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
509 sources.append(src) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
510 return sources |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
511 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
512 @cached_property |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
513 def routes(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
514 routes = [] |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
515 for r in self.config.get('site/routes'): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
516 rte = Route(self, r) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
517 routes.append(rte) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
518 return routes |
0 | 519 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
520 @cached_property |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
521 def taxonomies(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
522 taxonomies = [] |
5 | 523 for tn, tc in self.config.get('site/taxonomies').items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
524 tax = Taxonomy(self, tn, tc) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
525 taxonomies.append(tax) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
526 return taxonomies |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
527 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
528 def getSource(self, source_name): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
529 for source in self.sources: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
530 if source.name == source_name: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
531 return source |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
532 return None |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
533 |
363
dd25bd3ce1f9
serve: Refactoring and fixes to be able to serve taxonomy pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
345
diff
changeset
|
534 def getRoutes(self, source_name, *, skip_taxonomies=False): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
535 for route in self.routes: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
536 if route.source_name == source_name: |
334
b034f6f15e22
bake: Several bug taxonomy-related fixes for incorrect incremental bakes.
Ludovic Chabant <ludovic@chabant.com>
parents:
329
diff
changeset
|
537 if not skip_taxonomies or route.taxonomy_name is None: |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
538 yield route |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
539 |
369
4b1019bb2533
serve: Giant refactor to change how we handle data when serving pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
364
diff
changeset
|
540 def getRoute(self, source_name, route_metadata, *, skip_taxonomies=False): |
363
dd25bd3ce1f9
serve: Refactoring and fixes to be able to serve taxonomy pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
345
diff
changeset
|
541 for route in self.getRoutes(source_name, |
dd25bd3ce1f9
serve: Refactoring and fixes to be able to serve taxonomy pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
345
diff
changeset
|
542 skip_taxonomies=skip_taxonomies): |
369
4b1019bb2533
serve: Giant refactor to change how we handle data when serving pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
364
diff
changeset
|
543 if (route_metadata is None or |
4b1019bb2533
serve: Giant refactor to change how we handle data when serving pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
364
diff
changeset
|
544 route.matchesMetadata(route_metadata)): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
545 return route |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
546 return None |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
547 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
548 def getTaxonomyRoute(self, tax_name, source_name): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
549 for route in self.routes: |
334
b034f6f15e22
bake: Several bug taxonomy-related fixes for incorrect incremental bakes.
Ludovic Chabant <ludovic@chabant.com>
parents:
329
diff
changeset
|
550 if route.taxonomy_name == tax_name and route.source_name == source_name: |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
551 return route |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
552 return None |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
553 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
554 def getTaxonomy(self, tax_name): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
555 for tax in self.taxonomies: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
556 if tax.name == tax_name: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
557 return tax |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
558 return None |
0 | 559 |
560 def _get_dir(self, default_rel_dir): | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
561 abs_dir = os.path.join(self.root_dir, default_rel_dir) |
0 | 562 if os.path.isdir(abs_dir): |
563 return abs_dir | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
564 return None |
0 | 565 |
566 def _get_configurable_dirs(self, default_rel_dir, conf_name): | |
567 dirs = [] | |
568 | |
569 # Add custom directories from the configuration. | |
570 conf_dirs = self.config.get(conf_name) | |
571 if conf_dirs is not None: | |
5 | 572 if isinstance(conf_dirs, str): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
573 dirs.append(os.path.join(self.root_dir, conf_dirs)) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
574 else: |
56
2d617b889b00
Make template directories properly absolute.
Ludovic Chabant <ludovic@chabant.com>
parents:
39
diff
changeset
|
575 dirs += [os.path.join(self.root_dir, p) for p in conf_dirs] |
0 | 576 |
577 # Add the default directory if it exists. | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
578 default_dir = os.path.join(self.root_dir, default_rel_dir) |
0 | 579 if os.path.isdir(default_dir): |
580 dirs.append(default_dir) | |
581 | |
582 return dirs | |
583 |