Mercurial > piecrust2
annotate piecrust/app.py @ 1079:00a0a65d08e6
data: Fix debug rendering of the family data.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Thu, 15 Feb 2018 21:15:30 -0800 |
| parents | c4cf3cfe2726 |
| children | e5ac54482d32 |
| 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 logging | |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
4 import urllib.parse |
|
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 ( |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
7 RESOURCES_DIR, |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
8 CACHE_DIR, TEMPLATES_DIR, ASSETS_DIR, |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
9 THEME_DIR, PLUGINS_DIR, |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
10 CONFIG_PATH, THEME_CONFIG_PATH) |
|
584
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 |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
13 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
|
14 from piecrust.environment import StandardEnvironment |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
15 from piecrust.page import Page |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
16 from piecrust.plugins.base import PluginLoader |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
17 from piecrust.routing import Route |
|
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
18 from piecrust.sources.base import REALM_THEME |
|
999
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
19 from piecrust.uriutil import multi_replace |
| 0 | 20 |
| 21 | |
| 22 logger = logging.getLogger(__name__) | |
| 23 | |
| 24 | |
| 25 class PieCrust(object): | |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
26 def __init__(self, root_dir, cache=True, debug=False, theme_site=False, |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
27 env=None, cache_key=None): |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
28 self.root_dir = root_dir |
| 0 | 29 self.debug = debug |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
30 self.theme_site = theme_site |
| 0 | 31 self.plugin_loader = PluginLoader(self) |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
32 self.cache_key = cache_key or 'default' |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
33 |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
34 if cache: |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
35 self.cache = ExtensibleCache(self.cache_dir) |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
36 else: |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
37 self.cache = NullExtensibleCache() |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
38 |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
39 if env is None: |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
40 env = StandardEnvironment() |
| 0 | 41 self.env = env |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
42 env.initialize(self) |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
43 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
44 stats = env.stats |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
45 stats.registerTimer('SiteConfigLoad') |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
46 stats.registerTimer('PageLoad') |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
47 stats.registerTimer("BuildRenderData") |
|
904
cc2647360036
internal: Remove unnecessary timer, add timer for lazy data building.
Ludovic Chabant <ludovic@chabant.com>
parents:
885
diff
changeset
|
48 stats.registerTimer("BuildLazyPageData") |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
49 stats.registerTimer("PageRender") |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
50 stats.registerTimer("PageRenderSegments") |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
51 stats.registerTimer("PageRenderLayout") |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
52 stats.registerTimer("PageSerialize") |
|
876
d1095774bfcf
refactor: Fix some issues with record/cache entry collisions, add counters.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
53 stats.registerCounter('PageLoads') |
|
d1095774bfcf
refactor: Fix some issues with record/cache entry collisions, add counters.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
54 stats.registerCounter('PageRenderSegments') |
|
d1095774bfcf
refactor: Fix some issues with record/cache entry collisions, add counters.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
55 stats.registerCounter('PageRenderLayout') |
|
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
56 |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
57 @cached_property |
| 0 | 58 def config(self): |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
59 logger.debug("Creating site configuration...") |
|
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
60 start_time = time.perf_counter() |
|
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
371
diff
changeset
|
61 |
|
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
586
diff
changeset
|
62 if not self.theme_site: |
|
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
63 path = os.path.join(self.root_dir, CONFIG_PATH) |
|
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
586
diff
changeset
|
64 else: |
|
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
65 path = os.path.join(self.root_dir, THEME_CONFIG_PATH) |
|
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
66 |
|
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
67 theme_path = None |
|
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
68 if not self.theme_site and self.theme_dir: |
|
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
69 theme_path = os.path.join(self.theme_dir, THEME_CONFIG_PATH) |
| 0 | 70 |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
71 config_cache = self.cache.getCache('app') |
|
675
3df808b133f8
internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
72 config = PieCrustConfiguration( |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
73 path=path, theme_path=theme_path, |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
74 cache=config_cache, theme_config=self.theme_site) |
|
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
75 |
|
805
fd694f1297c7
config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents:
758
diff
changeset
|
76 local_path = os.path.join( |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
77 self.root_dir, 'configs', 'local.yml') |
|
805
fd694f1297c7
config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents:
758
diff
changeset
|
78 config.addVariant(local_path, raise_if_not_found=False) |
|
fd694f1297c7
config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents:
758
diff
changeset
|
79 |
|
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
80 if self.theme_site: |
|
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
81 variant_path = os.path.join( |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
82 self.root_dir, 'configs', 'theme_preview.yml') |
|
681
894d286b348f
internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents:
675
diff
changeset
|
83 config.addVariant(variant_path, raise_if_not_found=False) |
| 0 | 84 |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
85 self.env.stats.stepTimer('SiteConfigLoad', |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
86 time.perf_counter() - start_time) |
| 0 | 87 return config |
| 88 | |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
89 @cached_property |
|
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
90 def assets_dirs(self): |
|
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
91 assets_dirs = self._get_configurable_dirs( |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
92 ASSETS_DIR, 'site/assets_dirs') |
|
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
93 |
|
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
94 # Also add the theme directory, if any. |
|
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
95 if self.theme_dir: |
|
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
96 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
|
97 if os.path.isdir(default_theme_dir): |
|
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
98 assets_dirs.append(default_theme_dir) |
|
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
99 |
|
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
100 return assets_dirs |
|
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
101 |
|
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
102 @cached_property |
| 0 | 103 def templates_dirs(self): |
|
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
104 templates_dirs = self._get_configurable_dirs( |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
105 TEMPLATES_DIR, 'site/templates_dirs') |
| 0 | 106 |
|
36
485682a6de50
New site layout support.
Ludovic Chabant <ludovic@chabant.com>
parents:
31
diff
changeset
|
107 # Also, add the theme directory, if any. |
| 0 | 108 if self.theme_dir: |
| 109 default_theme_dir = os.path.join(self.theme_dir, TEMPLATES_DIR) | |
| 110 if os.path.isdir(default_theme_dir): | |
| 111 templates_dirs.append(default_theme_dir) | |
| 112 | |
| 113 return templates_dirs | |
| 114 | |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
115 @cached_property |
| 0 | 116 def theme_dir(self): |
|
709
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
117 # No theme if the curent site is already a theme. |
|
663
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
586
diff
changeset
|
118 if self.theme_site: |
|
3ceeca7bb71c
themes: Add support for a `--theme` argument to `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
586
diff
changeset
|
119 return None |
|
709
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
120 |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
121 # See if there's a theme we absolutely want. |
|
999
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
122 td = os.path.join(self.root_dir, THEME_DIR) |
|
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
123 if os.path.isdir(td): |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
124 return td |
|
709
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
125 |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
126 # Try to load a theme specified in the configuration. |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
127 from piecrust.themes.base import ThemeLoader |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
128 loader = ThemeLoader(self.root_dir) |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
129 theme_dir = loader.getThemeDir() |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
130 if theme_dir is not None: |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
131 return theme_dir |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
132 |
|
4285b2c9b872
themes: Add support for loading from a library of themes.
Ludovic Chabant <ludovic@chabant.com>
parents:
681
diff
changeset
|
133 # Nothing... use the default theme. |
|
271
12657039c436
internal: Re-use the cached resource directory.
Ludovic Chabant <ludovic@chabant.com>
parents:
260
diff
changeset
|
134 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
|
135 |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
136 @cached_property |
|
999
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
137 def plugins_dirs(self): |
|
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
138 return self._get_configurable_dirs(PLUGINS_DIR, 'site/plugins_dirs') |
|
848
7d83b9484b98
plugins: Add support for "ad-hoc" local plugins.
Ludovic Chabant <ludovic@chabant.com>
parents:
815
diff
changeset
|
139 |
|
7d83b9484b98
plugins: Add support for "ad-hoc" local plugins.
Ludovic Chabant <ludovic@chabant.com>
parents:
815
diff
changeset
|
140 @cached_property |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
141 def cache_dir(self): |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
142 return os.path.join(self.root_dir, CACHE_DIR, self.cache_key) |
|
371
c2ca72fb7f0b
caching: Use separate caches for config variants and other contexts.
Ludovic Chabant <ludovic@chabant.com>
parents:
369
diff
changeset
|
143 |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
144 @cached_property |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
145 def sources(self): |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
146 defs = {} |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
147 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
|
148 defs[cls.SOURCE_NAME] = cls |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
149 |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
150 sources = [] |
| 5 | 151 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
|
152 cls = defs.get(s['type']) |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
153 if cls is None: |
|
584
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
154 raise ConfigurationError("No such page source type: %s" % |
|
9ccc933ac2c7
internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
568
diff
changeset
|
155 s['type']) |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
156 src = cls(self, n, s) |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
157 sources.append(src) |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
158 |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
159 return sources |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
160 |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
161 @cached_property |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
162 def routes(self): |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
163 routes = [] |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
164 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
|
165 rte = Route(self, r) |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
166 routes.append(rte) |
|
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
167 routes = sorted(routes, key=lambda r: r.pass_num) |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
168 return routes |
| 0 | 169 |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
170 @cached_property |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
171 def publishers(self): |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
172 defs_by_name = {} |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
173 defs_by_scheme = {} |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
174 for cls in self.plugin_loader.getPublishers(): |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
175 defs_by_name[cls.PUBLISHER_NAME] = cls |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
176 if cls.PUBLISHER_SCHEME: |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
177 defs_by_scheme[cls.PUBLISHER_SCHEME] = cls |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
178 |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
179 tgts = [] |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
180 publish_config = self.config.get('publish') |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
181 if publish_config is None: |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
182 return tgts |
|
885
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
183 |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
184 for n, t in publish_config.items(): |
|
885
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
185 pub_class = None |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
186 if isinstance(t, dict): |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
187 pub_type = t.get('type') |
|
885
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
188 pub_class = defs_by_name[pub_type] |
|
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
189 pub_cfg = t |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
190 elif isinstance(t, str): |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
191 comps = urllib.parse.urlparse(t) |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
192 pub_type = comps.scheme |
|
885
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
193 pub_class = defs_by_scheme[pub_type] |
|
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
194 pub_cfg = None |
|
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
195 if pub_class is None: |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
196 raise ConfigurationError("No such publisher: %s" % pub_type) |
|
885
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
197 |
|
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
198 tgt = pub_class(self, n, pub_cfg) |
|
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
199 if pub_cfg is None: |
|
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
200 tgt.parseUrlTarget(comps) |
|
13e8b50a2113
publish: Fix publishers API and add a simple "copy" publisher.
Ludovic Chabant <ludovic@chabant.com>
parents:
876
diff
changeset
|
201 |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
202 tgts.append(tgt) |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
203 return tgts |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
204 |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
205 def getSource(self, source_name): |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
206 for source in self.sources: |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
207 if source.name == source_name: |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
208 return source |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
209 |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
210 from piecrust.sources.base import SourceNotFoundError |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
211 raise SourceNotFoundError(source_name) |
|
711
ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents:
709
diff
changeset
|
212 |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
213 def getSourceRoute(self, source_name): |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
214 for route in self.routes: |
|
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
215 if route.source_name == source_name: |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
216 return route |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
217 |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
218 from piecrust.routing import RouteNotFoundError |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
219 raise RouteNotFoundError(source_name) |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
220 |
|
758
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
221 def getPublisher(self, target_name): |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
222 for pub in self.publishers: |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
223 if pub.target == target_name: |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
224 return pub |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
225 return None |
|
6abb436fea5b
publish: Make publisher more powerful and better exposed on the command line.
Ludovic Chabant <ludovic@chabant.com>
parents:
711
diff
changeset
|
226 |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
227 def getPage(self, source, content_item): |
|
876
d1095774bfcf
refactor: Fix some issues with record/cache entry collisions, add counters.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
228 cache_key = '%s@%s' % (source.name, content_item.spec) |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
229 return self.env.page_repository.get( |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
230 cache_key, |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
231 lambda: Page(source, content_item)) |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
232 |
|
999
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
233 def resolvePath(self, path): |
|
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
234 path = multi_replace(path, {'%theme_dir%': self.theme_dir}) |
|
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
235 return os.path.join(self.root_dir, path) |
| 0 | 236 |
| 237 def _get_configurable_dirs(self, default_rel_dir, conf_name): | |
| 238 dirs = [] | |
| 239 | |
| 240 # Add custom directories from the configuration. | |
| 241 conf_dirs = self.config.get(conf_name) | |
| 242 if conf_dirs is not None: | |
| 5 | 243 if isinstance(conf_dirs, str): |
|
999
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
244 dirs.append(self.resolvePath(conf_dirs)) |
|
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
245 else: |
|
999
46025a1b5434
plugins: Support multiple customizable plugins directories.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
246 dirs += [self.resolvePath(p) for p in conf_dirs] |
| 0 | 247 |
| 248 # 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
|
249 default_dir = os.path.join(self.root_dir, default_rel_dir) |
| 0 | 250 if os.path.isdir(default_dir): |
| 251 dirs.append(default_dir) | |
| 252 | |
| 253 return dirs | |
| 254 | |
|
466
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
255 |
|
909
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
256 def apply_variants_and_values(app, config_variants=None, config_values=None): |
|
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
257 if config_variants is not None: |
|
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
258 for value in config_variants: |
|
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
259 logger.debug("Adding configuration variant '%s'." % value) |
|
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
260 variant_path = os.path.join( |
|
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
261 app.root_dir, 'configs', '%s.yml' % value) |
|
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
262 app.config.addVariant(variant_path) |
|
466
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
263 |
|
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
264 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
|
265 for name, value in config_values: |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
266 logger.debug("Adding configuration override '%s': %s" % |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
267 (name, value)) |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
268 app.config.addVariantValue(name, value) |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
269 |
|
466
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
419
diff
changeset
|
270 |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
271 class PieCrustFactory(object): |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
272 """ A class that builds a PieCrust app instance. |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
273 """ |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
274 def __init__( |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
275 self, root_dir, *, |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
276 cache=True, cache_key=None, |
|
909
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
277 config_variants=None, config_values=None, |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
278 debug=False, theme_site=False): |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
279 self.root_dir = root_dir |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
280 self.cache = cache |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
281 self.cache_key = cache_key |
|
909
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
282 self.config_variants = config_variants |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
283 self.config_values = config_values |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
284 self.debug = debug |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
285 self.theme_site = theme_site |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
286 |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
287 def create(self): |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
288 app = PieCrust( |
|
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
289 self.root_dir, |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
290 cache=self.cache, |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
291 cache_key=self.cache_key, |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
292 debug=self.debug, |
|
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
848
diff
changeset
|
293 theme_site=self.theme_site) |
|
909
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
294 apply_variants_and_values( |
|
eed19a80c00e
chef: Allow multiple config variants to be applied.
Ludovic Chabant <ludovic@chabant.com>
parents:
904
diff
changeset
|
295 app, self.config_variants, self.config_values) |
|
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
296 return app |
|
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
297 |
