Mercurial > piecrust2
annotate piecrust/appconfig.py @ 663:3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 01 Mar 2016 22:27:28 -0800 |
parents | 25df894f9ab9 |
children | 81d9c3a3a0b5 |
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, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 merge_dicts, visit_dict) |
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): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 def __init__(self, variant_path, message=None): |
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" % |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
28 variant_path)) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 class PieCrustConfiguration(Configuration): |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
32 def __init__(self, paths=None, cache=None, values=None, validate=True, |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
33 theme_config=False): |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
34 super(PieCrustConfiguration, self).__init__() |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 self.paths = paths |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 self.cache = cache or NullCache() |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 self.fixups = [] |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
38 self.theme_config = theme_config |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
39 # 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
|
40 # our attributes. |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
41 if values: |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
42 self.setAll(values, validate=validate) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 def applyVariant(self, variant_path, raise_if_not_found=True): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 variant = self.get(variant_path) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 if variant is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
47 if raise_if_not_found: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 raise VariantNotFoundError(variant_path) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 return |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 if not isinstance(variant, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
51 raise VariantNotFoundError( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 variant_path, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 "Configuration variant '%s' is not an array. " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
54 "Check your configuration file." % variant_path) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 self.merge(variant) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 def _load(self): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 if self.paths is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
59 self._values = self._validateAll({}) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 return |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 path_times = [os.path.getmtime(p) for p in self.paths] |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 cache_key_hash = hashlib.md5( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 ("version=%s&cache=%d" % ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 APP_VERSION, CACHE_VERSION)).encode('utf8')) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
67 for p in self.paths: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 cache_key_hash.update(("&path=%s" % p).encode('utf8')) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 cache_key = cache_key_hash.hexdigest() |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
71 if self.cache.isValid('config.json', path_times): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
72 logger.debug("Loading configuration from cache...") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
73 config_text = self.cache.read('config.json') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
74 self._values = json.loads( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
75 config_text, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
76 object_pairs_hook=collections.OrderedDict) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
77 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 actual_cache_key = self._values.get('__cache_key') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 if actual_cache_key == cache_key: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
80 self._values['__cache_valid'] = True |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 return |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 logger.debug("Outdated cache key '%s' (expected '%s')." % ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 actual_cache_key, cache_key)) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
84 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 logger.debug("Loading configuration from: %s" % self.paths) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 values = {} |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
87 try: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
88 for i, p in enumerate(self.paths): |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
89 with open(p, 'r', encoding='utf-8') as fp: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
90 loaded_values = yaml.load( |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
91 fp.read(), |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
92 Loader=ConfigurationLoader) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
93 if loaded_values is None: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
94 loaded_values = {} |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
95 for fixup in self.fixups: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
96 fixup(i, loaded_values) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
97 merge_dicts(values, loaded_values) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
98 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
99 for fixup in self.fixups: |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
100 fixup(len(self.paths), values) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
101 |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
102 self._values = self._validateAll(values) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
103 except Exception as ex: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
104 raise Exception("Error loading configuration from: %s" % |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
105 ', '.join(self.paths)) from ex |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
106 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
107 logger.debug("Caching configuration...") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
108 self._values['__cache_key'] = cache_key |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
109 config_text = json.dumps(self._values) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
110 self.cache.write('config.json', config_text) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
111 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
112 self._values['__cache_valid'] = False |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
113 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
114 def _validateAll(self, values): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
115 if values is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
116 values = {} |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
117 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
118 # Add the loaded values to the default configuration. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
119 values = merge_dicts(copy.deepcopy(default_configuration), values) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
120 |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
121 # Set the theme site flag. |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
122 if self.theme_config: |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
123 values['site']['theme_site'] = True |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
124 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
125 # Figure out if we need to generate the configuration for the |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
126 # default content model. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
127 sitec = values.setdefault('site', {}) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
128 if ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
129 ('sources' not in sitec and |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
130 'routes' not in sitec and |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
131 'taxonomies' not in sitec) or |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
132 sitec.get('use_default_content')): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
133 logger.debug("Generating default content model...") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
134 values = self._generateDefaultContentModel(values) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
135 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
136 # Add a section for our cached information. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
137 cachec = collections.OrderedDict() |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
138 values['__cache'] = cachec |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
139 cache_writer = _ConfigCacheWriter(cachec) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
140 globs = globals() |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
141 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
142 def _visitor(path, val, parent_val, parent_key): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
143 callback_name = '_validate_' + path.replace('/', '_') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
144 callback = globs.get(callback_name) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
145 if callback: |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
146 try: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
147 val2 = callback(val, values, cache_writer) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
148 except Exception as ex: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
149 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
|
150 callback_name) from ex |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
151 if val2 is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
152 raise Exception("Validator '%s' isn't returning a " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
153 "coerced value." % callback_name) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
154 parent_val[parent_key] = val2 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
155 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
156 visit_dict(values, _visitor) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
157 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
158 return values |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
159 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
160 def _generateDefaultContentModel(self, values): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
161 dcmcopy = copy.deepcopy(default_content_model_base) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
162 values = merge_dicts(dcmcopy, values) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
163 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
164 blogsc = values['site'].get('blogs') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
165 if blogsc is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
166 blogsc = ['posts'] |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
167 values['site']['blogs'] = blogsc |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
168 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
169 is_only_blog = (len(blogsc) == 1) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
170 for blog_name in blogsc: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
171 blog_cfg = get_default_content_model_for_blog( |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
172 blog_name, is_only_blog, values, |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
173 theme_site=self.theme_config) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
174 values = merge_dicts(blog_cfg, values) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
175 |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
176 dcm = get_default_content_model(values) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
177 values = merge_dicts(dcm, values) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
178 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
179 return values |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
180 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
181 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
182 class _ConfigCacheWriter(object): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
183 def __init__(self, cache_dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
184 self._cache_dict = cache_dict |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
185 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
186 def write(self, name, val): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
187 logger.debug("Caching configuration item '%s' = %s" % (name, val)) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
188 self._cache_dict[name] = val |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
189 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
190 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
191 default_configuration = collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
192 'site': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
193 'title': "Untitled PieCrust website", |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
194 'root': '/', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
195 'default_format': DEFAULT_FORMAT, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
196 'default_template_engine': DEFAULT_TEMPLATE_ENGINE, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
197 'enable_gzip': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
198 'pretty_urls': False, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
199 'trailing_slash': False, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
200 'date_format': DEFAULT_DATE_FORMAT, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
201 'auto_formats': collections.OrderedDict([ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
202 ('html', ''), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
203 ('md', 'markdown'), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
204 ('textile', 'textile')]), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
205 'default_auto_format': 'md', |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
206 'default_pagination_source': None, |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
207 'pagination_suffix': '/%num%', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
208 'slugify_mode': 'encode', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
209 'themes_sources': [DEFAULT_THEME_SOURCE], |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
210 'cache_time': 28800, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
211 'enable_debug_info': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
212 'show_debug_info': False, |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
213 'use_default_content': True, |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
214 'theme_site': False |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
215 }), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
216 'baker': collections.OrderedDict({ |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
217 'no_bake_setting': 'draft', |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
218 'workers': None, |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
219 'batch_size': None |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
220 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
221 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
222 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
223 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
224 default_content_model_base = collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
225 'site': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
226 'posts_fs': DEFAULT_POSTS_FS, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
227 'date_format': DEFAULT_DATE_FORMAT, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
228 'default_page_layout': 'default', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
229 'default_post_layout': 'post', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
230 'post_url': '%year%/%month%/%day%/%slug%', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
231 'tag_url': 'tag/%tag%', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
232 'category_url': '%category%', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
233 'posts_per_page': 5 |
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 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
236 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
237 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
238 def get_default_content_model(values): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
239 default_layout = values['site']['default_page_layout'] |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
240 return collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
241 'site': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
242 'sources': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
243 'pages': { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
244 'type': 'default', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
245 'ignore_missing_dir': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
246 'data_endpoint': 'site.pages', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
247 'default_layout': default_layout, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
248 'item_name': 'page' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
249 } |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
250 }), |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
251 'routes': [ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
252 { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
253 'url': '/%path:slug%', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
254 'source': 'pages', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
255 'func': 'pcurl(slug)' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
256 } |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
257 ], |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
258 'taxonomies': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
259 'tags': { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
260 'multiple': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
261 'term': 'tag' |
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 'categories': { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
264 'term': 'category' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
265 } |
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 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
268 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
269 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
270 |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
271 def get_default_content_model_for_blog( |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
272 blog_name, is_only_blog, values, theme_site=False): |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
273 posts_fs = values['site']['posts_fs'] |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
274 blog_cfg = values.get(blog_name, {}) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
275 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
276 if is_only_blog: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
277 url_prefix = '' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
278 tax_page_prefix = '' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
279 fs_endpoint = 'posts' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
280 data_endpoint = 'blog' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
281 item_name = 'post' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
282 else: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
283 url_prefix = blog_name + '/' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
284 tax_page_prefix = blog_name + '/' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
285 fs_endpoint = 'posts/%s' % blog_name |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
286 data_endpoint = blog_name |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
287 item_name = '%s-post' % blog_name |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
288 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
289 items_per_page = blog_cfg.get( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
290 'posts_per_page', values['site']['posts_per_page']) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
291 date_format = blog_cfg.get( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
292 'date_format', values['site']['date_format']) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
293 default_layout = blog_cfg.get( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
294 'default_layout', values['site']['default_post_layout']) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
295 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
296 post_url = '/' + blog_cfg.get( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
297 'post_url', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
298 url_prefix + values['site']['post_url']).lstrip('/') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
299 tag_url = '/' + blog_cfg.get( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
300 'tag_url', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
301 url_prefix + values['site']['tag_url']).lstrip('/') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
302 category_url = '/' + blog_cfg.get( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
303 'category_url', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
304 url_prefix + values['site']['category_url']).lstrip('/') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
305 |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
306 tags_taxonomy = 'pages:%s_tag.%%ext%%' % tax_page_prefix |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
307 category_taxonomy = 'pages:%s_category.%%ext%%' % tax_page_prefix |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
308 if not theme_site: |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
309 tags_taxonomy += ';theme_pages:_tag.%ext%' |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
310 category_taxonomy += ';theme_pages:_category.%ext%' |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
311 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
312 return collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
313 'site': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
314 'sources': collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
315 blog_name: collections.OrderedDict({ |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
316 'type': 'posts/%s' % posts_fs, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
317 'fs_endpoint': fs_endpoint, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
318 'data_endpoint': data_endpoint, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
319 'item_name': item_name, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
320 'ignore_missing_dir': True, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
321 'data_type': 'blog', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
322 'items_per_page': items_per_page, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
323 'date_format': date_format, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
324 'default_layout': default_layout, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
325 'taxonomy_pages': collections.OrderedDict({ |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
326 'tags': tags_taxonomy, |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
327 'categories': category_taxonomy |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
328 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
329 }) |
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 'routes': [ |
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 'url': post_url, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
334 'source': blog_name, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
335 'func': 'pcposturl(year,month,day,slug)' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
336 }, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
337 { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
338 'url': tag_url, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
339 'source': blog_name, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
340 'taxonomy': 'tags', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
341 'func': 'pctagurl(tag)' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
342 }, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
343 { |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
344 'url': category_url, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
345 'source': blog_name, |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
346 'taxonomy': 'categories', |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
347 'func': 'pccaturl(category)' |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
348 } |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
349 ] |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
350 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
351 }) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
352 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
353 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
354 # Configuration value validators. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
355 # |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
356 # Make sure we have basic site stuff. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
357 def _validate_site(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
358 sources = v.get('sources') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
359 if not sources: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
360 raise ConfigurationError("No sources were defined.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
361 routes = v.get('routes') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
362 if not routes: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
363 raise ConfigurationError("No routes were defined.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
364 taxonomies = v.get('taxonomies') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
365 if taxonomies is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
366 v['taxonomies'] = {} |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
367 return v |
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 # 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
|
370 def _validate_site_root(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
371 if not v.startswith('/'): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
372 raise ConfigurationError("The `site/root` setting must start " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
373 "with a slash.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
374 root_url = urllib.parse.quote(v.rstrip('/') + '/') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
375 return root_url |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
376 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
377 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
378 # 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
|
379 def _validate_site_auto_formats(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
380 if not isinstance(v, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
381 raise ConfigurationError("The 'site/auto_formats' setting must be " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
382 "a dictionary.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
383 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
384 v.setdefault('html', values['site']['default_format']) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
385 auto_formats_re = r"\.(%s)$" % ( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
386 '|'.join( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
387 [re.escape(i) for i in list(v.keys())])) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
388 cache.write('auto_formats_re', auto_formats_re) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
389 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
390 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
391 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
392 # Check that the default auto-format is known. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
393 def _validate_site_default_auto_format(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
394 if v not in values['site']['auto_formats']: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
395 raise ConfigurationError( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
396 "Default auto-format '%s' is not declared." % v) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
397 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
398 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
399 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
400 # Cache pagination suffix regex and format. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
401 def _validate_site_pagination_suffix(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
402 if len(v) == 0 or v[0] != '/': |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
403 raise ConfigurationError("The 'site/pagination_suffix' setting " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
404 "must start with a slash.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
405 if '%num%' not in v: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
406 raise ConfigurationError("The 'site/pagination_suffix' setting " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
407 "must contain the '%num%' placeholder.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
408 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
409 pgn_suffix_fmt = v.replace('%num%', '%(num)d') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
410 cache.write('pagination_suffix_format', pgn_suffix_fmt) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
411 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
412 pgn_suffix_re = re.escape(v) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
413 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
|
414 '$') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
415 cache.write('pagination_suffix_re', pgn_suffix_re) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
416 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
417 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
418 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
419 # Make sure theme sources is a list. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
420 def _validate_site_theme_sources(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
421 if not isinstance(v, list): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
422 v = [v] |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
423 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
424 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
425 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
426 def _validate_site_sources(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
427 # Basic checks. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
428 if not v: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
429 raise ConfigurationError("There are no sources defined.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
430 if not isinstance(v, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
431 raise ConfigurationError("The 'site/sources' setting must be a " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
432 "dictionary.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
433 |
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
434 theme_site = values['site']['theme_site'] |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
435 if not theme_site: |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
436 # Add the theme page source if no sources were defined in the theme |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
437 # configuration itself. |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
438 has_any_theme_source = False |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
439 for sn, sc in v.items(): |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
440 if sc.get('realm') == REALM_THEME: |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
441 has_any_theme_source = True |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
442 break |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
443 if not has_any_theme_source: |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
444 v['theme_pages'] = { |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
445 'theme_source': True, |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
446 'fs_endpoint': 'pages', |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
447 'ignore_missing_dir': True, |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
448 'data_endpoint': 'site/pages', |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
449 'item_name': 'page', |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
450 'realm': REALM_THEME} |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
451 values['site']['routes'].append({ |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
452 'url': '/%path:slug%', |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
453 'source': 'theme_pages', |
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
585
diff
changeset
|
454 'func': 'pcurl(slug)'}) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
455 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
456 # 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
|
457 # 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
|
458 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
|
459 'assets', 'pagination', 'siblings', |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
460 'family']) |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
461 for sn, sc in v.items(): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
462 if not isinstance(sc, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
463 raise ConfigurationError("All sources in 'site/sources' must " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
464 "be dictionaries.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
465 sc.setdefault('type', 'default') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
466 sc.setdefault('fs_endpoint', sn) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
467 sc.setdefault('ignore_missing_dir', False) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
468 sc.setdefault('data_endpoint', sn) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
469 sc.setdefault('data_type', 'iterator') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
470 sc.setdefault('item_name', sn) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
471 sc.setdefault('items_per_page', 5) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
472 sc.setdefault('date_format', DEFAULT_DATE_FORMAT) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
473 sc.setdefault('realm', REALM_USER) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
474 |
585
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
475 # Validate endpoints. |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
476 endpoint = sc['data_endpoint'] |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
477 if endpoint in reserved_endpoints: |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
478 raise ConfigurationError( |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
479 "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
|
480 (sn, endpoint)) |
25df894f9ab9
internal: Some fixes to the new app configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
481 |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
482 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
483 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
484 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
485 def _validate_site_routes(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
486 if not v: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
487 raise ConfigurationError("There are no routes defined.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
488 if not isinstance(v, list): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
489 raise ConfigurationError("The 'site/routes' setting must be a " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
490 "list.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
491 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
492 # Check routes are referencing correct sources, have default |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
493 # values, etc. |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
494 for rc in v: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
495 if not isinstance(rc, dict): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
496 raise ConfigurationError("All routes in 'site/routes' must be " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
497 "dictionaries.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
498 rc_url = rc.get('url') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
499 if not rc_url: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
500 raise ConfigurationError("All routes in 'site/routes' must " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
501 "have an 'url'.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
502 if rc_url[0] != '/': |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
503 raise ConfigurationError("Route URLs must start with '/'.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
504 if rc.get('source') is None: |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
505 raise ConfigurationError("Routes must specify a source.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
506 if rc['source'] not in list(values['site']['sources'].keys()): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
507 raise ConfigurationError("Route is referencing unknown " |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
508 "source: %s" % rc['source']) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
509 rc.setdefault('taxonomy', None) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
510 rc.setdefault('page_suffix', '/%num%') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
511 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
512 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
513 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
514 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
515 def _validate_site_taxonomies(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
516 for tn, tc in v.items(): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
517 tc.setdefault('multiple', False) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
518 tc.setdefault('term', tn) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
519 tc.setdefault('page', '_%s.%%ext%%' % tc['term']) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
520 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
521 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
522 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
523 |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
524 def _validate_site_plugins(v, values, cache): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
525 if isinstance(v, str): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
526 v = v.split(',') |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
527 elif not isinstance(v, list): |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
528 raise ConfigurationError( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
529 "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
|
530 "comma-separated list.") |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
531 return v |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
532 |