71
71
from .post import Post
72
72
from . import utils
73
73
from .plugin_categories import (
74
+ BaseTask ,
74
75
Command ,
76
+ EarlyTask ,
75
77
LateTask ,
76
78
PageCompiler ,
77
79
RestExtension ,
@@ -614,8 +616,7 @@ def __init__(self, **config):
614
616
615
617
self .plugin_manager = PluginManager (categories_filter = {
616
618
"Command" : Command ,
617
- "Task" : Task ,
618
- "LateTask" : LateTask ,
619
+ "BaseTask" : BaseTask ,
619
620
"TemplateSystem" : TemplateSystem ,
620
621
"PageCompiler" : PageCompiler ,
621
622
"TaskMultiplier" : TaskMultiplier ,
@@ -654,8 +655,14 @@ def __init__(self, **config):
654
655
plugin_info .plugin_object .short_help = plugin_info .description
655
656
self ._commands [plugin_info .name ] = plugin_info .plugin_object
656
657
657
- self ._activate_plugins_of_category ("Task" )
658
- self ._activate_plugins_of_category ("LateTask" )
658
+ task_plugins = self ._activate_plugins_of_category ("BaseTask" )
659
+ self .task_stages = defaultdict (list )
660
+ for plugin_info in task_plugins :
661
+ if type (plugin_info .plugin_object ) == EarlyTask : continue
662
+ if type (plugin_info .plugin_object ) == Task : continue
663
+ if type (plugin_info .plugin_object ) == LateTask : continue
664
+ stage = plugin_info .plugin_object .get_stage ()
665
+ self .task_stages [stage ].append (plugin_info .plugin_object )
659
666
self ._activate_plugins_of_category ("TaskMultiplier" )
660
667
661
668
compilers = defaultdict (set )
@@ -1239,7 +1246,10 @@ def clean_task_paths(self, task):
1239
1246
task ['targets' ] = [os .path .normpath (t ) for t in targets ]
1240
1247
return task
1241
1248
1242
- def gen_tasks (self , name , plugin_category , doc = '' ):
1249
+ def get_task_stages (self ):
1250
+ return sorted (list (self .task_stages .keys ()))
1251
+
1252
+ def gen_tasks (self , name , stage , doc = '' ):
1243
1253
1244
1254
def flatten (task ):
1245
1255
if isinstance (task , dict ):
@@ -1250,8 +1260,8 @@ def flatten(task):
1250
1260
yield ft
1251
1261
1252
1262
task_dep = []
1253
- for pluginInfo in self .plugin_manager . getPluginsOfCategory ( plugin_category ) :
1254
- for task in flatten (pluginInfo . plugin_object .gen_tasks ()):
1263
+ for plugin_object in self .task_stages [ stage ] :
1264
+ for task in flatten (plugin_object .gen_tasks ()):
1255
1265
assert 'basename' in task
1256
1266
task = self .clean_task_paths (task )
1257
1267
yield task
@@ -1262,8 +1272,8 @@ def flatten(task):
1262
1272
yield self .clean_task_paths (task )
1263
1273
if flag :
1264
1274
task_dep .append ('{0}_{1}' .format (name , multi .plugin_object .name ))
1265
- if pluginInfo . plugin_object .is_default :
1266
- task_dep .append (pluginInfo . plugin_object .name )
1275
+ if plugin_object .is_default :
1276
+ task_dep .append (plugin_object .name )
1267
1277
yield {
1268
1278
'basename' : name ,
1269
1279
'doc' : doc ,
0 commit comments