Skip to content

Commit 0aa310c

Browse files
committedJul 5, 2015
Merge pull request #1863 from getnikola/unifying-compiler-extensions
Unifying compiler extensions
2 parents 9ec5d99 + c9e6d8c commit 0aa310c

File tree

5 files changed

+35
-21
lines changed

5 files changed

+35
-21
lines changed
 

Diff for: ‎nikola/nikola.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
LateTask,
6262
PageCompiler,
6363
CompilerExtension,
64-
RestExtension,
6564
MarkdownExtension,
65+
RestExtension,
6666
Task,
6767
TaskMultiplier,
6868
TemplateSystem,
@@ -671,8 +671,8 @@ def __init__(self, **config):
671671
"PageCompiler": PageCompiler,
672672
"TaskMultiplier": TaskMultiplier,
673673
"CompilerExtension": CompilerExtension,
674-
"RestExtension": RestExtension,
675674
"MarkdownExtension": MarkdownExtension,
675+
"RestExtension": RestExtension,
676676
"SignalHandler": SignalHandler,
677677
"ConfigPlugin": ConfigPlugin,
678678
"PostScanner": PostScanner,
@@ -731,6 +731,7 @@ def __init__(self, **config):
731731
self.config['COMPILERS'][k] = sorted(list(v))
732732

733733
# Activate all required compiler plugins
734+
self.compiler_extensions = self._activate_plugins_of_category("CompilerExtension")
734735
for plugin_info in self.plugin_manager.getPluginsOfCategory("PageCompiler"):
735736
if plugin_info.name in self.config["COMPILERS"].keys():
736737
self.plugin_manager.activatePluginByName(plugin_info.name)
@@ -831,6 +832,7 @@ def __init__(self, **config):
831832

832833
def _activate_plugins_of_category(self, category):
833834
"""Activate all the plugins of a given category and return them."""
835+
# this code duplicated in tests/base.py
834836
plugins = []
835837
for plugin_info in self.plugin_manager.getPluginsOfCategory(category):
836838
if plugin_info.name in self.config.get('DISABLED_PLUGINS'):

Diff for: ‎nikola/plugin_categories.py

+8
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,14 @@ def split_metadata(self, data):
283283
# ['metadata', '\n\n', 'post content']
284284
return split_result[0], split_result[-1]
285285

286+
def get_compiler_extensions(self):
287+
"""Activate all the compiler extension plugins for a given compiler and return them."""
288+
plugins = []
289+
for plugin_info in self.site.compiler_extensions:
290+
if plugin_info.plugin_object.compiler_name == self.name:
291+
plugins.append(plugin_info)
292+
return plugins
293+
286294

287295
class CompilerExtension(BasePlugin):
288296

Diff for: ‎nikola/plugins/compile/markdown/__init__.py

+2-7
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,14 @@ class CompileMarkdown(PageCompiler):
5353
site = None
5454

5555
def set_site(self, site):
56+
super(CompileMarkdown, self).set_site(site)
5657
self.config_dependencies = []
57-
for plugin_info in site.plugin_manager.getPluginsOfCategory("MarkdownExtension"):
58-
if plugin_info.name in site.config['DISABLED_PLUGINS']:
59-
site.plugin_manager.removePluginFromCategory(plugin_info, "MarkdownExtension")
60-
continue
58+
for plugin_info in self.get_compiler_extensions():
6159
self.config_dependencies.append(plugin_info.name)
62-
site.plugin_manager.activatePluginByName(plugin_info.name)
63-
plugin_info.plugin_object.set_site(site)
6460
self.extensions.append(plugin_info.plugin_object)
6561
plugin_info.plugin_object.short_help = plugin_info.description
6662

6763
self.config_dependencies.append(str(sorted(site.config.get("MARKDOWN_EXTENSIONS"))))
68-
return super(CompileMarkdown, self).set_site(site)
6964

7065
def compile_html(self, source, dest, is_two_file=True):
7166
if markdown is None:

Diff for: ‎nikola/plugins/compile/rest/__init__.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -127,23 +127,16 @@ def create_post(self, path, **kw):
127127
fd.write(content)
128128

129129
def set_site(self, site):
130+
super(CompileRest, self).set_site(site)
130131
self.config_dependencies = []
131-
for plugin_info in site.plugin_manager.getPluginsOfCategory("RestExtension"):
132-
if plugin_info.name in site.config['DISABLED_PLUGINS']:
133-
site.plugin_manager.removePluginFromCategory(plugin_info, "RestExtension")
134-
continue
135-
136-
site.plugin_manager.activatePluginByName(plugin_info.name)
132+
for plugin_info in self.get_compiler_extensions():
137133
self.config_dependencies.append(plugin_info.name)
138-
plugin_info.plugin_object.set_site(site)
139134
plugin_info.plugin_object.short_help = plugin_info.description
140135

141136
self.logger = get_logger('compile_rest', site.loghandlers)
142137
if not site.debug:
143138
self.logger.level = 4
144139

145-
return super(CompileRest, self).set_site(site)
146-
147140

148141
def get_observer(settings):
149142
"""Return an observer for the docutils Reporter."""

Diff for: ‎tests/base.py

+19-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@
3030
TemplateSystem,
3131
PageCompiler,
3232
TaskMultiplier,
33-
RestExtension,
34-
MarkdownExtension
33+
CompilerExtension,
34+
MarkdownExtension,
35+
RestExtension
3536
)
3637

3738

@@ -213,8 +214,9 @@ def __init__(self):
213214
"TemplateSystem": TemplateSystem,
214215
"PageCompiler": PageCompiler,
215216
"TaskMultiplier": TaskMultiplier,
216-
"RestExtension": RestExtension,
217+
"CompilerExtension": CompilerExtension,
217218
"MarkdownExtension": MarkdownExtension,
219+
"RestExtension": RestExtension
218220
})
219221
self.loghandlers = [nikola.utils.STDERR_HANDLER]
220222
self.plugin_manager.setPluginInfoExtension('plugin')
@@ -228,6 +230,7 @@ def __init__(self):
228230
]
229231
self.plugin_manager.setPluginPlaces(places)
230232
self.plugin_manager.collectPlugins()
233+
self.compiler_extensions = self._activate_plugins_of_category("CompilerExtension")
231234

232235
self.timeline = [
233236
FakePost(title='Fake post',
@@ -239,5 +242,18 @@ def __init__(self):
239242
self.template_system = self
240243
self.name = 'mako'
241244

245+
def _activate_plugins_of_category(self, category):
246+
"""Activate all the plugins of a given category and return them."""
247+
# this code duplicated in nikola/nikola.py
248+
plugins = []
249+
for plugin_info in self.plugin_manager.getPluginsOfCategory(category):
250+
if plugin_info.name in self.config.get('DISABLED_PLUGINS'):
251+
self.plugin_manager.removePluginFromCategory(plugin_info, category)
252+
else:
253+
self.plugin_manager.activatePluginByName(plugin_info.name)
254+
plugin_info.plugin_object.set_site(self)
255+
plugins.append(plugin_info)
256+
return plugins
257+
242258
def render_template(self, name, _, context):
243259
return('<img src="IMG.jpg">')

0 commit comments

Comments
 (0)
Please sign in to comment.