Mercurial > piecrust2
annotate piecrust/app.py @ 357:3a496ffbb898 2.0.0a7
docs: Add documentation for importing content from other engines.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Mon, 20 Apr 2015 22:35:10 -0700 |
| parents | ad3e6496f5c3 |
| children | dd25bd3ce1f9 |
| 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 |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
534 def getRoutes(self, source_name, skip_taxonomies=False): |
|
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 |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
540 def getRoute(self, source_name, source_metadata): |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
541 for route in self.getRoutes(source_name, True): |
|
173
0a86a7a6b284
routes: Actually match metadata when finding routes, fix problems with paths.
Ludovic Chabant <ludovic@chabant.com>
parents:
152
diff
changeset
|
542 if route.matchesMetadata(source_metadata): |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
543 return route |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
544 return None |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
545 |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
546 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
|
547 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
|
548 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
|
549 return route |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
550 return None |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
551 |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
552 def getTaxonomy(self, tax_name): |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
553 for tax in self.taxonomies: |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
554 if tax.name == tax_name: |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
555 return tax |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
556 return None |
| 0 | 557 |
| 558 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
|
559 abs_dir = os.path.join(self.root_dir, default_rel_dir) |
| 0 | 560 if os.path.isdir(abs_dir): |
| 561 return abs_dir | |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
562 return None |
| 0 | 563 |
| 564 def _get_configurable_dirs(self, default_rel_dir, conf_name): | |
| 565 dirs = [] | |
| 566 | |
| 567 # Add custom directories from the configuration. | |
| 568 conf_dirs = self.config.get(conf_name) | |
| 569 if conf_dirs is not None: | |
| 5 | 570 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
|
571 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
|
572 else: |
|
56
2d617b889b00
Make template directories properly absolute.
Ludovic Chabant <ludovic@chabant.com>
parents:
39
diff
changeset
|
573 dirs += [os.path.join(self.root_dir, p) for p in conf_dirs] |
| 0 | 574 |
| 575 # 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
|
576 default_dir = os.path.join(self.root_dir, default_rel_dir) |
| 0 | 577 if os.path.isdir(default_dir): |
| 578 dirs.append(default_dir) | |
| 579 | |
| 580 return dirs | |
| 581 |
