Mercurial > piecrust2
annotate piecrust/appconfig.py @ 723:606f6d57b5df
routing: Cleanup URL routing and improve page matching.
* Add new types of route parameters for integers (int4, int2, int).
* Remove hard-coded hacks around converting year/month/day values.
* Make the blog post routes use the new typed parameters.
* Fix problems with matching routes with integer parameters when they can
get confused with a sub-page number.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 29 May 2016 20:19:28 -0700 |
parents | ab5c6a8ae90a |
children | 8c3c2b949b82 |
rev | line source |
---|---|
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 import re |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 import os.path |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 import copy |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 import json |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 import urllib |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 import logging |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 import hashlib |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 import collections |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 import yaml |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 from piecrust import ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 APP_VERSION, CACHE_VERSION, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 DEFAULT_FORMAT, DEFAULT_TEMPLATE_ENGINE, DEFAULT_POSTS_FS, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 DEFAULT_DATE_FORMAT, DEFAULT_THEME_SOURCE) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 from piecrust.cache import NullCache |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 from piecrust.configuration import ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 Configuration, ConfigurationError, ConfigurationLoader, |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
17 try_get_dict_value, set_dict_value, merge_dicts, visit_dict) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 from piecrust.sources.base import REALM_USER, REALM_THEME |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 logger = logging.getLogger(__name__) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
22 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 class VariantNotFoundError(Exception): |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
25 def __init__(self, variant_name, message=None): |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 super(VariantNotFoundError, self).__init__( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 message or ("No such configuration variant: %s" % |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
28 variant_name)) |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
29 |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
30 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 class PieCrustConfiguration(Configuration): |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
32 def __init__(self, *, path=None, theme_path=None, values=None, |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
33 cache=None, validate=True, theme_config=False): |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
34 if theme_config and theme_path: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
35 raise Exception("Can't be a theme site config and still have a " |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
36 "theme applied.") |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
37 super(PieCrustConfiguration, self).__init__() |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
38 self._path = path |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
39 self._theme_path = theme_path |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
40 self._cache = cache or NullCache() |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
41 self._custom_paths = [] |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
42 self._post_fixups = [] |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
43 self.theme_config = theme_config |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
44 # Set the values after we set the rest, since our validation needs |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
45 # our attributes. |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
46 if values: |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
47 self.setAll(values, validate=validate) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
49 def addPath(self, p): |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
50 self._ensureNotLoaded() |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
51 self._custom_paths.append(p) |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
52 |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
53 def addVariant(self, variant_path, raise_if_not_found=True): |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
54 self._ensureNotLoaded() |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
55 if os.path.isfile(variant_path): |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
56 self.addPath(variant_path) |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
57 elif raise_if_not_found: |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
58 logger.error( |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
59 "Configuration variants should now be `.yml` files " |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
60 "located in the `configs/` directory of your website.") |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
61 raise VariantNotFoundError(variant_path) |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
62 |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
63 |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
64 def addVariantValue(self, path, value): |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
65 def _fixup(config): |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
66 set_dict_value(config, path, value) |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
67 |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
68 self._post_fixups.append(_fixup) |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
69 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
70 def setAll(self, values, validate=False): |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
71 # Override base class implementation |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
72 values = self._combineConfigs({}, values) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
73 if validate: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
74 values = self._validateAll(values) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
75 self._values = values |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
76 |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
77 def _ensureNotLoaded(self): |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
78 if self._values is not None: |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
79 raise Exception("The configurations has been loaded.") |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
80 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 def _load(self): |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
82 # Figure out where to load this configuration from. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
83 paths = [self._theme_path, self._path] + self._custom_paths |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
84 paths = list(filter(lambda i: i is not None, paths)) |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
85 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
86 # Build the cache-key. |
686
1a6c4c2683fd
internal: Fix incorrect check for cache times.
Ludovic Chabant <ludovic@chabant.com>
parents:
683
diff
changeset
|
87 path_times = [os.path.getmtime(p) for p in paths] |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
88 cache_key_hash = hashlib.md5( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 ("version=%s&cache=%d" % ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 APP_VERSION, CACHE_VERSION)).encode('utf8')) |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
91 for p in paths: |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 cache_key_hash.update(("&path=%s" % p).encode('utf8')) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
93 cache_key = cache_key_hash.hexdigest() |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
94 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
95 # Check the cache for a valid version. |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
96 if self._cache.isValid('config.json', path_times): |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 logger.debug("Loading configuration from cache...") |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
98 config_text = self._cache.read('config.json') |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
99 self._values = json.loads( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
100 config_text, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
101 object_pairs_hook=collections.OrderedDict) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
102 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
103 actual_cache_key = self._values.get('__cache_key') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
104 if actual_cache_key == cache_key: |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
105 # The cached version has the same key! Awesome! |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
106 self._values['__cache_valid'] = True |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
107 return |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
108 logger.debug("Outdated cache key '%s' (expected '%s')." % ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
109 actual_cache_key, cache_key)) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
110 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
111 # Nope, load from the paths. |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
112 try: |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
113 # Theme config. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
114 theme_values = {} |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
115 if self._theme_path: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
116 theme_values = self._loadFrom(self._theme_path) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
117 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
118 # Site config. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
119 site_values = {} |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
120 if self._path: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
121 site_values = self._loadFrom(self._path) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
122 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
123 # Combine! |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
124 logger.debug("Processing loaded configurations...") |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
125 values = self._combineConfigs(theme_values, site_values) |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
126 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
127 # Load additional paths. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
128 if self._custom_paths: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
129 logger.debug("Loading %d additional configuration paths." % |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
130 len(self._custom_paths)) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
131 for p in self._custom_paths: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
132 loaded = self._loadFrom(p) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
133 if loaded: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
134 merge_dicts(values, loaded) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
135 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
136 # Run final fixups |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
137 if self._post_fixups: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
138 logger.debug("Applying %d configuration fixups." % |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
139 len(self._post_fixups)) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
140 for f in self._post_fixups: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
141 f(values) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
142 |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
143 self._values = self._validateAll(values) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
144 except Exception as ex: |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
145 logger.exception(ex) |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
146 raise Exception( |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
147 "Error loading configuration from: %s" % |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
148 ', '.join(paths)) from ex |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
149 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
150 logger.debug("Caching configuration...") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
151 self._values['__cache_key'] = cache_key |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
152 config_text = json.dumps(self._values) |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
153 self._cache.write('config.json', config_text) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
154 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
155 self._values['__cache_valid'] = False |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
156 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
157 def _loadFrom(self, path): |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
158 logger.debug("Loading configuration from: %s" % path) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
159 with open(path, 'r', encoding='utf-8') as fp: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
160 values = yaml.load( |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
161 fp.read(), |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
162 Loader=ConfigurationLoader) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
163 if values is None: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
164 values = {} |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
165 return values |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
166 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
167 def _combineConfigs(self, theme_values, site_values): |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
168 # Start with the default configuration. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
169 values = copy.deepcopy(default_configuration) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
170 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
171 if not self.theme_config: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
172 # If the theme config wants the default model, add it. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
173 theme_sitec = theme_values.setdefault( |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
174 'site', collections.OrderedDict()) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
175 gen_default_theme_model = bool(theme_sitec.setdefault( |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
176 'use_default_theme_content', True)) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
177 if gen_default_theme_model: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
178 self._generateDefaultThemeModel(values) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
179 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
180 # Now override with the actual theme config values. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
181 values = merge_dicts(values, theme_values) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
182 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
183 # Make all sources belong to the "theme" realm at this point. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
184 srcc = values['site'].get('sources') |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
185 if srcc: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
186 for sn, sc in srcc.items(): |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
187 sc['realm'] = REALM_THEME |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
188 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
189 # If the site config wants the default model, add it. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
190 site_sitec = site_values.setdefault( |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
191 'site', collections.OrderedDict()) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
192 gen_default_site_model = bool(site_sitec.setdefault( |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
193 'use_default_content', True)) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
194 if gen_default_site_model: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
195 self._generateDefaultSiteModel(values, site_values) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
196 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
197 # And override with the actual site config values. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
198 values = merge_dicts(values, site_values) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
199 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
200 # Set the theme site flag. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
201 if self.theme_config: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
202 values['site']['theme_site'] = True |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
203 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
204 return values |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
205 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
206 def _validateAll(self, values): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
207 if values is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
208 values = {} |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
209 |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
210 # Add a section for our cached information, and start visiting |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
211 # the configuration tree, calling validation functions as we |
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
212 # find them. |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
213 cachec = collections.OrderedDict() |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
214 values['__cache'] = cachec |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
215 cache_writer = _ConfigCacheWriter(cachec) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
216 globs = globals() |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
217 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
218 def _visitor(path, val, parent_val, parent_key): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
219 callback_name = '_validate_' + path.replace('/', '_') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
220 callback = globs.get(callback_name) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
221 if callback: |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
222 try: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
223 val2 = callback(val, values, cache_writer) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
224 except Exception as ex: |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
225 logger.exception(ex) |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
226 raise Exception("Error raised in validator '%s'." % |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
227 callback_name) from ex |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
228 if val2 is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
229 raise Exception("Validator '%s' isn't returning a " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
230 "coerced value." % callback_name) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
231 parent_val[parent_key] = val2 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
232 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
233 visit_dict(values, _visitor) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
234 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
235 return values |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
236 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
237 def _generateDefaultThemeModel(self, values): |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
238 logger.debug("Generating default theme content model...") |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
239 cc = copy.deepcopy(default_theme_content_model_base) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
240 merge_dicts(values, cc) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
241 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
242 def _generateDefaultSiteModel(self, values, user_overrides): |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
243 logger.debug("Generating default content model...") |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
244 cc = copy.deepcopy(default_content_model_base) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
245 merge_dicts(values, cc) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
246 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
247 dcm = get_default_content_model(values, user_overrides) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
248 merge_dicts(values, dcm) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
249 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
250 blogsc = try_get_dict_value(user_overrides, 'site/blogs') |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
251 if blogsc is None: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
252 blogsc = ['posts'] |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
253 set_dict_value(user_overrides, 'site/blogs', blogsc) |
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
254 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
255 is_only_blog = (len(blogsc) == 1) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
256 for blog_name in blogsc: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
257 blog_cfg = get_default_content_model_for_blog( |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
258 blog_name, is_only_blog, values, user_overrides, |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
259 theme_site=self.theme_config) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
260 merge_dicts(values, blog_cfg) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
261 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
262 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
263 class _ConfigCacheWriter(object): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
264 def __init__(self, cache_dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
265 self._cache_dict = cache_dict |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
266 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
267 def write(self, name, val): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
268 logger.debug("Caching configuration item '%s' = %s" % (name, val)) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
269 self._cache_dict[name] = val |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
270 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
271 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
272 default_theme_content_model_base = collections.OrderedDict({ |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
273 'site': collections.OrderedDict({ |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
274 'sources': collections.OrderedDict({ |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
275 'theme_pages': { |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
276 'type': 'default', |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
277 'ignore_missing_dir': True, |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
278 'fs_endpoint': 'pages', |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
279 'data_endpoint': 'site.pages', |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
280 'default_layout': 'default', |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
281 'item_name': 'page', |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
282 'realm': REALM_THEME |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
283 } |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
284 }), |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
285 'routes': [ |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
286 { |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
287 'url': '/%path:slug%', |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
288 'source': 'theme_pages', |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
289 'func': 'pcurl(slug)' |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
290 } |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
291 ], |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
292 'theme_tag_page': 'theme_pages:_tag.%ext%', |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
293 'theme_category_page': 'theme_pages:_category.%ext%', |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
294 'theme_month_page': 'theme_pages:_month.%ext%', |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
295 'theme_year_page': 'theme_pages:_year.%ext%' |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
296 }) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
297 }) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
298 |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
299 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
300 default_configuration = collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
301 'site': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
302 'title': "Untitled PieCrust website", |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
303 'root': '/', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
304 'default_format': DEFAULT_FORMAT, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
305 'default_template_engine': DEFAULT_TEMPLATE_ENGINE, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
306 'enable_gzip': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
307 'pretty_urls': False, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
308 'trailing_slash': False, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
309 'date_format': DEFAULT_DATE_FORMAT, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
310 'auto_formats': collections.OrderedDict([ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
311 ('html', ''), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
312 ('md', 'markdown'), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
313 ('textile', 'textile')]), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
314 'default_auto_format': 'md', |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
315 'default_pagination_source': None, |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
316 'pagination_suffix': '/%num%', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
317 'slugify_mode': 'encode', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
318 'themes_sources': [DEFAULT_THEME_SOURCE], |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
319 'cache_time': 28800, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
320 'enable_debug_info': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
321 'show_debug_info': False, |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
322 'use_default_content': True, |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
323 'use_default_theme_content': True, |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
324 'theme_site': False |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
325 }), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
326 'baker': collections.OrderedDict({ |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
327 'no_bake_setting': 'draft', |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
328 'workers': None, |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
329 'batch_size': None |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
330 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
331 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
332 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
333 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
334 default_content_model_base = collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
335 'site': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
336 'posts_fs': DEFAULT_POSTS_FS, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
337 'default_page_layout': 'default', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
338 'default_post_layout': 'post', |
723
606f6d57b5df
routing: Cleanup URL routing and improve page matching.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
339 'post_url': '/%int4:year%/%int2:month%/%int2:day%/%slug%', |
606f6d57b5df
routing: Cleanup URL routing and improve page matching.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
340 'year_url': '/archives/%int4:year%', |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
341 'tag_url': '/tag/%path:tag%', |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
342 'category_url': '/%category%', |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
343 'posts_per_page': 5 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
344 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
345 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
346 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
347 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
348 def get_default_content_model(values, user_overrides): |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
349 default_layout = try_get_dict_value( |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
350 user_overrides, 'site/default_page_layout', |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
351 values['site']['default_page_layout']) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
352 return collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
353 'site': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
354 'sources': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
355 'pages': { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
356 'type': 'default', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
357 'ignore_missing_dir': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
358 'data_endpoint': 'site.pages', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
359 'default_layout': default_layout, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
360 'item_name': 'page' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
361 } |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
362 }), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
363 'routes': [ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
364 { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
365 'url': '/%path:slug%', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
366 'source': 'pages', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
367 'func': 'pcurl(slug)' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
368 } |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
369 ], |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
370 'taxonomies': collections.OrderedDict([ |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
371 ('tags', { |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
372 'multiple': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
373 'term': 'tag' |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
374 }), |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
375 ('categories', { |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
376 'term': 'category' |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
377 }) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
378 ]) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
379 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
380 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
381 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
382 |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
383 def get_default_content_model_for_blog( |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
384 blog_name, is_only_blog, values, user_overrides, theme_site=False): |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
385 # Get the global (default) values for various things we're interested in. |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
386 defs = {} |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
387 names = ['posts_fs', 'posts_per_page', 'date_format', |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
388 'default_post_layout', 'post_url', 'year_url'] |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
389 for n in names: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
390 defs[n] = try_get_dict_value( |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
391 user_overrides, 'site/%s' % n, |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
392 values['site'][n]) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
393 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
394 # More stuff we need. |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
395 if is_only_blog: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
396 url_prefix = '' |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
397 page_prefix = '' |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
398 fs_endpoint = 'posts' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
399 data_endpoint = 'blog' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
400 item_name = 'post' |
675
3df808b133f8
internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
401 |
3df808b133f8
internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
402 if theme_site: |
3df808b133f8
internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
403 # If this is a theme site, show posts from a `sample` directory |
3df808b133f8
internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
404 # so it's clearer that those won't show up when the theme is |
3df808b133f8
internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
405 # actually applied to a normal site. |
3df808b133f8
internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
406 fs_endpoint = 'sample/posts' |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
407 else: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
408 url_prefix = blog_name + '/' |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
409 page_prefix = blog_name + '/' |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
410 fs_endpoint = 'posts/%s' % blog_name |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
411 data_endpoint = blog_name |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
412 item_name = '%s-post' % blog_name |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
413 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
414 # Figure out the settings values for this blog, specifically. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
415 # The value could be set on the blog config itself, globally, or left at |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
416 # its default. We already handle the "globally vs. default" with the |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
417 # `defs` map that we computed above. |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
418 blog_cfg = user_overrides.get(blog_name, {}) |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
419 blog_values = {} |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
420 for n in names: |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
421 blog_values[n] = blog_cfg.get(n, defs[n]) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
422 |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
423 posts_fs = blog_values['posts_fs'] |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
424 posts_per_page = blog_values['posts_per_page'] |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
425 date_format = blog_values['date_format'] |
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
426 default_layout = blog_values['default_post_layout'] |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
427 post_url = '/' + url_prefix + blog_values['post_url'].lstrip('/') |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
428 year_url = '/' + url_prefix + blog_values['year_url'].lstrip('/') |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
429 |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
430 year_archive = 'pages:%s_year.%%ext%%' % page_prefix |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
431 if not theme_site: |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
432 theme_year_page = values['site'].get('theme_year_page') |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
433 if theme_year_page: |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
434 year_archive += ';' + theme_year_page |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
435 |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
436 cfg = collections.OrderedDict({ |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
437 'site': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
438 'sources': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
439 blog_name: collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
440 'type': 'posts/%s' % posts_fs, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
441 'fs_endpoint': fs_endpoint, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
442 'data_endpoint': data_endpoint, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
443 'item_name': item_name, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
444 'ignore_missing_dir': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
445 'data_type': 'blog', |
683
ec384174b8b2
internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
446 'items_per_page': posts_per_page, |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
447 'date_format': date_format, |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
448 'default_layout': default_layout |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
449 }) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
450 }), |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
451 'generators': collections.OrderedDict({ |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
452 ('%s_archives' % blog_name): collections.OrderedDict({ |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
453 'type': 'blog_archives', |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
454 'source': blog_name, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
455 'page': year_archive |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
456 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
457 }), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
458 'routes': [ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
459 { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
460 'url': post_url, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
461 'source': blog_name, |
723
606f6d57b5df
routing: Cleanup URL routing and improve page matching.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
462 'func': 'pcposturl(int:year,int:month,int:day,slug)' |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
463 }, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
464 { |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
465 'url': year_url, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
466 'generator': ('%s_archives' % blog_name), |
723
606f6d57b5df
routing: Cleanup URL routing and improve page matching.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
467 'func': 'pcyearurl(archive_year)' |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
468 } |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
469 ] |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
470 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
471 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
472 |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
473 # Add a generator and a route for each taxonomy. |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
474 taxonomies_cfg = values.get('site', {}).get('taxonomies', {}).copy() |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
475 taxonomies_cfg.update( |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
476 user_overrides.get('site', {}).get('taxonomies', {})) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
477 for tax_name, tax_cfg in taxonomies_cfg.items(): |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
478 term = tax_cfg.get('term', tax_name) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
479 |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
480 # Generator. |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
481 page_ref = 'pages:%s_%s.%%ext%%' % (page_prefix, term) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
482 if not theme_site: |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
483 theme_page_ref = values['site'].get('theme_%s_page' % term) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
484 if theme_page_ref: |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
485 page_ref += ';' + theme_page_ref |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
486 tax_gen_name = '%s_%s' % (blog_name, tax_name) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
487 tax_gen = collections.OrderedDict({ |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
488 'type': 'taxonomy', |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
489 'source': blog_name, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
490 'taxonomy': tax_name, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
491 'page': page_ref |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
492 }) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
493 cfg['site']['generators'][tax_gen_name] = tax_gen |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
494 |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
495 # Route. |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
496 tax_url_cfg_name = '%s_url' % term |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
497 tax_url = blog_cfg.get(tax_url_cfg_name, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
498 try_get_dict_value( |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
499 user_overrides, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
500 'site/%s' % tax_url_cfg_name, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
501 values['site'].get( |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
502 tax_url_cfg_name, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
503 '%s/%%%s%%' % (term, term)))) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
504 tax_url = '/' + url_prefix + tax_url.lstrip('/') |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
505 term_arg = term |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
506 if tax_cfg.get('multiple') is True: |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
507 term_arg = '+' + term |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
508 tax_func = 'pc%surl(%s)' % (term, term_arg) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
509 tax_route = collections.OrderedDict({ |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
510 'url': tax_url, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
511 'generator': tax_gen_name, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
512 'taxonomy': tax_name, |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
513 'func': tax_func |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
514 }) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
515 cfg['site']['routes'].append(tax_route) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
516 |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
517 return cfg |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
518 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
519 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
520 # Configuration value validators. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
521 # |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
522 # Make sure we have basic site stuff. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
523 def _validate_site(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
524 sources = v.get('sources') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
525 if not sources: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
526 raise ConfigurationError("No sources were defined.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
527 routes = v.get('routes') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
528 if not routes: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
529 raise ConfigurationError("No routes were defined.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
530 taxonomies = v.get('taxonomies') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
531 if taxonomies is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
532 v['taxonomies'] = {} |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
533 generators = v.get('generators') |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
534 if generators is None: |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
535 v['generators'] = {} |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
536 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
537 |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
538 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
539 # Make sure the site root starts and ends with a slash. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
540 def _validate_site_root(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
541 if not v.startswith('/'): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
542 raise ConfigurationError("The `site/root` setting must start " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
543 "with a slash.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
544 root_url = urllib.parse.quote(v.rstrip('/') + '/') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
545 return root_url |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
546 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
547 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
548 # Cache auto-format regexes, check that `.html` is in there. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
549 def _validate_site_auto_formats(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
550 if not isinstance(v, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
551 raise ConfigurationError("The 'site/auto_formats' setting must be " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
552 "a dictionary.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
553 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
554 v.setdefault('html', values['site']['default_format']) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
555 auto_formats_re = r"\.(%s)$" % ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
556 '|'.join( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
557 [re.escape(i) for i in list(v.keys())])) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
558 cache.write('auto_formats_re', auto_formats_re) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
559 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
560 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
561 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
562 # Check that the default auto-format is known. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
563 def _validate_site_default_auto_format(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
564 if v not in values['site']['auto_formats']: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
565 raise ConfigurationError( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
566 "Default auto-format '%s' is not declared." % v) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
567 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
568 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
569 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
570 # Cache pagination suffix regex and format. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
571 def _validate_site_pagination_suffix(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
572 if len(v) == 0 or v[0] != '/': |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
573 raise ConfigurationError("The 'site/pagination_suffix' setting " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
574 "must start with a slash.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
575 if '%num%' not in v: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
576 raise ConfigurationError("The 'site/pagination_suffix' setting " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
577 "must contain the '%num%' placeholder.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
578 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
579 pgn_suffix_fmt = v.replace('%num%', '%(num)d') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
580 cache.write('pagination_suffix_format', pgn_suffix_fmt) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
581 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
582 pgn_suffix_re = re.escape(v) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
583 pgn_suffix_re = (pgn_suffix_re.replace("\\%num\\%", "(?P<num>\\d+)") + |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
584 '$') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
585 cache.write('pagination_suffix_re', pgn_suffix_re) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
586 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
587 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
588 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
589 # Make sure theme sources is a list. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
590 def _validate_site_theme_sources(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
591 if not isinstance(v, list): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
592 v = [v] |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
593 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
594 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
595 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
596 def _validate_site_sources(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
597 # Basic checks. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
598 if not v: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
599 raise ConfigurationError("There are no sources defined.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
600 if not isinstance(v, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
601 raise ConfigurationError("The 'site/sources' setting must be a " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
602 "dictionary.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
603 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
604 # Sources have the `default` scanner by default, duh. Also, a bunch |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
605 # of other default values for other configuration stuff. |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
606 reserved_endpoints = set(['piecrust', 'site', 'page', 'route', |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
607 'assets', 'pagination', 'siblings', |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
608 'family']) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
609 for sn, sc in v.items(): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
610 if not isinstance(sc, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
611 raise ConfigurationError("All sources in 'site/sources' must " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
612 "be dictionaries.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
613 sc.setdefault('type', 'default') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
614 sc.setdefault('fs_endpoint', sn) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
615 sc.setdefault('ignore_missing_dir', False) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
616 sc.setdefault('data_endpoint', sn) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
617 sc.setdefault('data_type', 'iterator') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
618 sc.setdefault('item_name', sn) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
619 sc.setdefault('items_per_page', 5) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
620 sc.setdefault('date_format', DEFAULT_DATE_FORMAT) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
621 sc.setdefault('realm', REALM_USER) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
622 |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
623 # Validate endpoints. |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
624 endpoint = sc['data_endpoint'] |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
625 if endpoint in reserved_endpoints: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
626 raise ConfigurationError( |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
627 "Source '%s' is using a reserved endpoint name: %s" % |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
628 (sn, endpoint)) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
629 |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
630 # Validate generators. |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
631 for gn, gc in sc.get('generators', {}).items(): |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
632 if not isinstance(gc, dict): |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
633 raise ConfigurationError( |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
634 "Generators for source '%s' should be defined in a " |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
635 "dictionary." % sn) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
636 gc['source'] = sn |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
637 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
638 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
639 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
640 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
641 def _validate_site_routes(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
642 if not v: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
643 raise ConfigurationError("There are no routes defined.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
644 if not isinstance(v, list): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
645 raise ConfigurationError("The 'site/routes' setting must be a " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
646 "list.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
647 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
648 # Check routes are referencing correct sources, have default |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
649 # values, etc. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
650 for rc in v: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
651 if not isinstance(rc, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
652 raise ConfigurationError("All routes in 'site/routes' must be " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
653 "dictionaries.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
654 rc_url = rc.get('url') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
655 if not rc_url: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
656 raise ConfigurationError("All routes in 'site/routes' must " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
657 "have an 'url'.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
658 if rc_url[0] != '/': |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
659 raise ConfigurationError("Route URLs must start with '/'.") |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
660 |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
661 r_source = rc.get('source') |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
662 r_generator = rc.get('generator') |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
663 if r_source is None and r_generator is None: |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
664 raise ConfigurationError("Routes must specify a source or " |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
665 "generator.") |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
666 if (r_source and |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
667 r_source not in list(values['site']['sources'].keys())): |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
668 raise ConfigurationError("Route is referencing unknown " |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
669 "source: %s" % r_source) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
670 if (r_generator and |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
671 r_generator not in list(values['site']['generators'].keys())): |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
672 raise ConfigurationError("Route is referencing unknown " |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
673 "generator: %s" % r_generator) |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
674 |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
675 rc.setdefault('generator', None) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
676 rc.setdefault('page_suffix', '/%num%') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
677 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
678 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
679 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
680 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
681 def _validate_site_taxonomies(v, values, cache): |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
682 if not isinstance(v, dict): |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
683 raise ConfigurationError( |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
684 "The 'site/taxonomies' setting must be a mapping.") |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
685 for tn, tc in v.items(): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
686 tc.setdefault('multiple', False) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
687 tc.setdefault('term', tn) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
688 tc.setdefault('page', '_%s.%%ext%%' % tc['term']) |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
689 return v |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
690 |
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
691 |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
692 def _validate_site_generators(v, values, cache): |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
693 if not isinstance(v, dict): |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
694 raise ConfigurationError( |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
695 "The 'site/generators' setting must be a mapping.") |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
696 for gn, gc in v.items(): |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
697 if 'type' not in gc: |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
698 raise ConfigurationError( |
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
686
diff
changeset
|
699 "Generator '%s' doesn't specify a type." % gn) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
700 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
701 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
702 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
703 def _validate_site_plugins(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
704 if isinstance(v, str): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
705 v = v.split(',') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
706 elif not isinstance(v, list): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
707 raise ConfigurationError( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
708 "The 'site/plugins' setting must be an array, or a " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
709 "comma-separated list.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
710 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
711 |