Mercurial > piecrust2
annotate piecrust/app.py @ 586:59268b4d8c71
bake: Add new performance timers.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 10 Jan 2016 10:51:11 -0800 |
parents | 9ccc933ac2c7 |
children | 3ceeca7bb71c |
rev | line source |
---|---|
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
1 import time |
0 | 2 import os.path |
3 import hashlib | |
4 import logging | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
5 from werkzeug.utils import cached_property |
271
12657039c436
internal: Re-use the cached resource directory.
Ludovic Chabant <ludovic@chabant.com>
parents:
260
diff
changeset
|
6 from piecrust import ( |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
7 RESOURCES_DIR, |
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
8 CACHE_DIR, TEMPLATES_DIR, ASSETS_DIR, |
307
869a206facd5
internal: Remove mentions of plugins directories and sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
271
diff
changeset
|
9 THEME_DIR, |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
10 CONFIG_PATH, THEME_CONFIG_PATH) |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
11 from piecrust.appconfig import PieCrustConfiguration |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
12 from piecrust.cache import ExtensibleCache, NullExtensibleCache |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
13 from piecrust.plugins.base import PluginLoader |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
14 from piecrust.environment import StandardEnvironment |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
15 from piecrust.configuration import ConfigurationError |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
16 from piecrust.routing import Route |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
17 from piecrust.sources.base import REALM_THEME |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
18 from piecrust.taxonomies import Taxonomy |
0 | 19 |
20 | |
21 logger = logging.getLogger(__name__) | |
22 | |
23 | |
24 class PieCrust(object): | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
25 def __init__(self, root_dir, cache=True, debug=False, theme_site=False, |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
26 env=None): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
27 self.root_dir = root_dir |
0 | 28 self.debug = debug |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
29 self.theme_site = theme_site |
0 | 30 self.plugin_loader = PluginLoader(self) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
31 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
32 if cache: |
371
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
33 cache_dir = os.path.join(self.cache_dir, 'default') |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
34 self.cache = ExtensibleCache(cache_dir) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
35 else: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
36 self.cache = NullExtensibleCache() |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
37 |
0 | 38 self.env = env |
39 if self.env is None: | |
40 self.env = StandardEnvironment() | |
41 self.env.initialize(self) | |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
42 self.env.registerTimer('SiteConfigLoad') |
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
43 self.env.registerTimer('PageLoad') |
419
6801ad5aa1d4
internal: Optimize page segments rendering.
Ludovic Chabant <ludovic@chabant.com>
parents:
415
diff
changeset
|
44 self.env.registerTimer("PageDataBuild") |
586
59268b4d8c71
bake: Add new performance timers.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
45 self.env.registerTimer("BuildRenderData") |
59268b4d8c71
bake: Add new performance timers.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
46 self.env.registerTimer("PageRender") |
59268b4d8c71
bake: Add new performance timers.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
47 self.env.registerTimer("PageRenderSegments") |
59268b4d8c71
bake: Add new performance timers.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
48 self.env.registerTimer("PageRenderLayout") |
59268b4d8c71
bake: Add new performance timers.
Ludovic Chabant <ludovic@chabant.com>
parents:
584
diff
changeset
|
49 self.env.registerTimer("PageSerialize") |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
50 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
51 @cached_property |
0 | 52 def config(self): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
53 logger.debug("Creating site configuration...") |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
54 start_time = time.perf_counter() |
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
55 |
0 | 56 paths = [] |
57 if self.theme_dir: | |
58 paths.append(os.path.join(self.theme_dir, THEME_CONFIG_PATH)) | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
59 paths.append(os.path.join(self.root_dir, CONFIG_PATH)) |
0 | 60 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
61 config_cache = self.cache.getCache('app') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
62 config = PieCrustConfiguration(paths, config_cache) |
0 | 63 if self.theme_dir: |
486
aae241804096
themes: Don't fixup template directories, it's actually better as-is.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
64 # We'll need to flag all page sources as coming from |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
65 # the theme. |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
66 def _fixupThemeSources(index, config): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
67 if index != 0: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
68 return |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
69 sitec = config.get('site') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
70 if sitec is None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
71 sitec = {} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
72 config['site'] = sitec |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
73 srcc = sitec.get('sources') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
74 if srcc is not None: |
5 | 75 for sn, sc in srcc.items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
76 sc['realm'] = REALM_THEME |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
77 config.fixups.append(_fixupThemeSources) |
0 | 78 |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
79 self.env.stepTimer('SiteConfigLoad', time.perf_counter() - start_time) |
0 | 80 return config |
81 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
82 @cached_property |
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
83 def assets_dirs(self): |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
84 assets_dirs = self._get_configurable_dirs( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
85 ASSETS_DIR, 'site/assets_dirs') |
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
86 |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
87 # Also add the theme directory, if any. |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
88 if self.theme_dir: |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
89 default_theme_dir = os.path.join(self.theme_dir, ASSETS_DIR) |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
90 if os.path.isdir(default_theme_dir): |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
91 assets_dirs.append(default_theme_dir) |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
92 |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
93 return assets_dirs |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
94 |
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
95 @cached_property |
0 | 96 def templates_dirs(self): |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
97 templates_dirs = self._get_configurable_dirs( |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
98 TEMPLATES_DIR, 'site/templates_dirs') |
0 | 99 |
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
100 # Also, add the theme directory, if any. |
0 | 101 if self.theme_dir: |
102 default_theme_dir = os.path.join(self.theme_dir, TEMPLATES_DIR) | |
103 if os.path.isdir(default_theme_dir): | |
104 templates_dirs.append(default_theme_dir) | |
105 | |
106 return templates_dirs | |
107 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
108 @cached_property |
0 | 109 def theme_dir(self): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
110 td = self._get_dir(THEME_DIR) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
111 if td is not None: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
112 return td |
271
12657039c436
internal: Re-use the cached resource directory.
Ludovic Chabant <ludovic@chabant.com>
parents:
260
diff
changeset
|
113 return os.path.join(RESOURCES_DIR, 'theme') |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
114 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
115 @cached_property |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
116 def cache_dir(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
117 return os.path.join(self.root_dir, CACHE_DIR) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
118 |
371
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
119 @property # Not a cached property because its result can change. |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
120 def sub_cache_dir(self): |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
121 if self.cache.enabled: |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
122 return self.cache.base_dir |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
123 return None |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
124 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
125 @cached_property |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
126 def sources(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
127 defs = {} |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
128 for cls in self.plugin_loader.getSources(): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
129 defs[cls.SOURCE_NAME] = cls |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
130 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
131 sources = [] |
5 | 132 for n, s in self.config.get('site/sources').items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
133 cls = defs.get(s['type']) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
134 if cls is None: |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
135 raise ConfigurationError("No such page source type: %s" % |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
136 s['type']) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
137 src = cls(self, n, s) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
138 sources.append(src) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
139 return sources |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
140 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
141 @cached_property |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
142 def routes(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
143 routes = [] |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
144 for r in self.config.get('site/routes'): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
145 rte = Route(self, r) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
146 routes.append(rte) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
147 return routes |
0 | 148 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
149 @cached_property |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
150 def taxonomies(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
151 taxonomies = [] |
5 | 152 for tn, tc in self.config.get('site/taxonomies').items(): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
153 tax = Taxonomy(self, tn, tc) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
154 taxonomies.append(tax) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
155 return taxonomies |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
156 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
157 def getSource(self, source_name): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
158 for source in self.sources: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
159 if source.name == source_name: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
160 return source |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
161 return None |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
162 |
363
dd25bd3ce1f9
serve: Refactoring and fixes to be able to serve taxonomy pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
345
diff
changeset
|
163 def getRoutes(self, source_name, *, skip_taxonomies=False): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
164 for route in self.routes: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
165 if route.source_name == source_name: |
334
b034f6f15e22
bake: Several bug taxonomy-related fixes for incorrect incremental bakes.
Ludovic Chabant <ludovic@chabant.com>
parents:
329
diff
changeset
|
166 if not skip_taxonomies or route.taxonomy_name is None: |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
167 yield route |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
168 |
369
4b1019bb2533
serve: Giant refactor to change how we handle data when serving pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
364
diff
changeset
|
169 def getRoute(self, source_name, route_metadata, *, skip_taxonomies=False): |
363
dd25bd3ce1f9
serve: Refactoring and fixes to be able to serve taxonomy pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
345
diff
changeset
|
170 for route in self.getRoutes(source_name, |
dd25bd3ce1f9
serve: Refactoring and fixes to be able to serve taxonomy pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
345
diff
changeset
|
171 skip_taxonomies=skip_taxonomies): |
369
4b1019bb2533
serve: Giant refactor to change how we handle data when serving pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
364
diff
changeset
|
172 if (route_metadata is None or |
4b1019bb2533
serve: Giant refactor to change how we handle data when serving pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
364
diff
changeset
|
173 route.matchesMetadata(route_metadata)): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
174 return route |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
175 return None |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
176 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
177 def getTaxonomyRoute(self, tax_name, source_name): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
178 for route in self.routes: |
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
179 if (route.taxonomy_name == tax_name and |
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
180 route.source_name == source_name): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
181 return route |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
182 return None |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
183 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
184 def getTaxonomy(self, tax_name): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
185 for tax in self.taxonomies: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
186 if tax.name == tax_name: |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
187 return tax |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
188 return None |
0 | 189 |
371
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
190 def useSubCache(self, cache_name, cache_key): |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
191 cache_hash = hashlib.md5(cache_key.encode('utf8')).hexdigest() |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
192 cache_dir = os.path.join(self.cache_dir, |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
193 '%s_%s' % (cache_name, cache_hash)) |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
194 self._useSubCacheDir(cache_dir) |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
195 |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
196 def _useSubCacheDir(self, cache_dir): |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
197 assert cache_dir |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
198 logger.debug("Moving cache to: %s" % cache_dir) |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
199 self.cache = ExtensibleCache(cache_dir) |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
200 self.env._onSubCacheDirChanged(self) |
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
201 |
0 | 202 def _get_dir(self, default_rel_dir): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
203 abs_dir = os.path.join(self.root_dir, default_rel_dir) |
0 | 204 if os.path.isdir(abs_dir): |
205 return abs_dir | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
206 return None |
0 | 207 |
208 def _get_configurable_dirs(self, default_rel_dir, conf_name): | |
209 dirs = [] | |
210 | |
211 # Add custom directories from the configuration. | |
212 conf_dirs = self.config.get(conf_name) | |
213 if conf_dirs is not None: | |
5 | 214 if isinstance(conf_dirs, str): |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
215 dirs.append(os.path.join(self.root_dir, conf_dirs)) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
216 else: |
56
2d617b889b00
Make template directories properly absolute.
Ludovic Chabant <ludovic@chabant.com>
parents:
39
diff
changeset
|
217 dirs += [os.path.join(self.root_dir, p) for p in conf_dirs] |
0 | 218 |
219 # Add the default directory if it exists. | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
220 default_dir = os.path.join(self.root_dir, default_rel_dir) |
0 | 221 if os.path.isdir(default_dir): |
222 dirs.append(default_dir) | |
223 | |
224 return dirs | |
225 | |
466
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
226 |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
227 def apply_variant_and_values(app, config_variant=None, config_values=None): |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
228 if config_variant is not None: |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
229 logger.debug("Applying configuration variant '%s'." % config_variant) |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
230 app.config.applyVariant('variants/' + config_variant) |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
231 |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
232 if config_values is not None: |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
233 for name, value in config_values: |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
234 logger.debug("Setting configuration '%s' to: %s" % (name, value)) |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
235 app.config.set(name, value) |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
236 |