Mercurial > piecrust2
annotate piecrust/plugins/base.py @ 111:208c652551a3
Quick fix for making the server correctly update referenced pages.
Disable the file-system cache for rendered segments when in server mode. We
can bring this optimization back when we're actually using the baking record
in the server too in order to know dependencies.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 16 Oct 2014 17:03:42 -0700 |
parents | 343d08ef5668 |
children | 5dbab01daaba |
rev | line source |
---|---|
0 | 1 import os |
2 | |
3 | |
4 class PieCrustPlugin(object): | |
5 def getFormatters(self): | |
6 return [] | |
7 | |
8 def getTemplateEngines(self): | |
9 return [] | |
10 | |
11 def getDataProviders(self): | |
12 return [] | |
13 | |
14 def getFileSystems(self): | |
15 return [] | |
16 | |
17 def getProcessors(self): | |
18 return [] | |
19 | |
20 def getImporters(self): | |
21 return [] | |
22 | |
23 def getCommands(self): | |
24 return [] | |
25 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
26 def getCommandExtensions(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
27 return [] |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
28 |
0 | 29 def getRepositories(self): |
30 return [] | |
31 | |
32 def getBakerAssistants(self): | |
33 return [] | |
34 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
35 def getSources(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
36 return [] |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
37 |
0 | 38 def initialize(self, app): |
39 pass | |
40 | |
41 | |
42 class PluginLoader(object): | |
43 def __init__(self, app): | |
44 self.app = app | |
45 self._plugins = None | |
46 self._pluginsMeta = None | |
47 self._componentCache = {} | |
48 | |
49 @property | |
50 def plugins(self): | |
51 self._ensureLoaded() | |
52 return self._plugins | |
53 | |
54 def getFormatters(self): | |
55 return self._getPluginComponents('getFormatters', True, | |
56 order_key=lambda f: f.priority) | |
57 | |
58 def getTemplateEngines(self): | |
59 return self._getPluginComponents('getTemplateEngines', True) | |
60 | |
61 def getDataProviders(self): | |
62 return self._getPluginComponents('getDataProviders') | |
63 | |
64 def getFileSystems(self): | |
65 return self._getPluginComponents('getFileSystems') | |
66 | |
67 def getProcessors(self): | |
68 return self._getPluginComponents('getProcessors', True, | |
69 order_key=lambda p: p.priority) | |
70 | |
71 def getImporters(self): | |
72 return self._getPluginComponents('getImporters') | |
73 | |
74 def getCommands(self): | |
75 return self._getPluginComponents('getCommands') | |
76 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
77 def getCommandExtensions(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
78 return self._getPluginComponents('getCommandExtensions') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
79 |
0 | 80 def getRepositories(self): |
81 return self._getPluginComponents('getRepositories', True) | |
82 | |
83 def getBakerAssistants(self): | |
84 return self._getPluginComponents('getBakerAssistants') | |
85 | |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
86 def getSources(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
87 return self._getPluginComponents('getSources') |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
88 |
0 | 89 def _ensureLoaded(self): |
90 if self._plugins is not None: | |
91 return | |
92 | |
1
aaa8fb7c8918
Re-arranged modules to reduce dependencies to builtin stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
93 from piecrust.plugins.builtin import BuiltInPlugin |
0 | 94 self._plugins = [BuiltInPlugin()] |
95 self._pluginsMeta = {self._plugins[0].name: False} | |
96 | |
97 for d in self.app.plugins_dirs: | |
98 _, dirs, __ = next(os.walk(d)) | |
99 for dd in dirs: | |
100 self._loadPlugin(os.path.join(d, dd)) | |
101 | |
102 for plugin in self._plugins: | |
103 plugin.initialize(self.app) | |
104 | |
105 def _loadPlugin(self, plugin_dir): | |
106 pass | |
107 | |
7
343d08ef5668
More PieCrust 3 fixes, and a couple of miscellaneous bug fixes.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
108 def _getPluginComponents(self, name, initialize=False, order_key=None): |
0 | 109 if name in self._componentCache: |
110 return self._componentCache[name] | |
111 | |
112 all_components = [] | |
113 for plugin in self.plugins: | |
114 plugin_components = getattr(plugin, name)() | |
115 all_components += plugin_components | |
116 if initialize: | |
117 for comp in plugin_components: | |
118 comp.initialize(self.app) | |
119 | |
7
343d08ef5668
More PieCrust 3 fixes, and a couple of miscellaneous bug fixes.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
120 if order_key is not None: |
343d08ef5668
More PieCrust 3 fixes, and a couple of miscellaneous bug fixes.
Ludovic Chabant <ludovic@chabant.com>
parents:
3
diff
changeset
|
121 all_components.sort(key=order_key) |
0 | 122 |
123 self._componentCache[name] = all_components | |
124 return all_components | |
125 |