Make PipelineParser a regular class
Part of a series refactoring the configloader to make it more
maintainable.
Change-Id: I4167e22545d9d862ce58a658b9d2598aef270c74
diff --git a/zuul/configloader.py b/zuul/configloader.py
index 4f17074..0a20321 100644
--- a/zuul/configloader.py
+++ b/zuul/configloader.py
@@ -991,8 +991,6 @@
class PipelineParser(object):
- log = logging.getLogger("zuul.PipelineParser")
-
# A set of reporter configuration keys to action mapping
reporter_actions = {
'start': 'start_actions',
@@ -1002,8 +1000,14 @@
'disabled': 'disabled_actions',
}
- @staticmethod
- def getDriverSchema(dtype, connections):
+ def __init__(self, tenant, layout, connections, scheduler):
+ self.log = logging.getLogger("zuul.PipelineParser")
+ self.tenant = tenant
+ self.layout = layout
+ self.connections = connections
+ self.scheduler = scheduler
+
+ def getDriverSchema(self, dtype):
methods = {
'trigger': 'getTriggerSchema',
'reporter': 'getReporterSchema',
@@ -1013,15 +1017,15 @@
schema = {}
# Add the configured connections as available layout options
- for connection_name, connection in connections.connections.items():
+ for connection_name, connection in \
+ self.connections.connections.items():
method = getattr(connection.driver, methods[dtype], None)
if method:
schema[connection_name] = to_list(method())
return schema
- @staticmethod
- def getSchema(layout, connections):
+ def getSchema(self):
manager = vs.Any('independent',
'dependent')
@@ -1054,23 +1058,18 @@
'_source_context': model.SourceContext,
'_start_mark': ZuulMark,
}
- pipeline['require'] = PipelineParser.getDriverSchema('require',
- connections)
- pipeline['reject'] = PipelineParser.getDriverSchema('reject',
- connections)
- pipeline['trigger'] = vs.Required(
- PipelineParser.getDriverSchema('trigger', connections))
+ pipeline['require'] = self.getDriverSchema('require')
+ pipeline['reject'] = self.getDriverSchema('reject')
+ pipeline['trigger'] = vs.Required(self.getDriverSchema('trigger'))
for action in ['start', 'success', 'failure', 'merge-failure',
'disabled']:
- pipeline[action] = PipelineParser.getDriverSchema('reporter',
- connections)
+ pipeline[action] = self.getDriverSchema('reporter')
return vs.Schema(pipeline)
- @staticmethod
- def fromYaml(layout, connections, scheduler, conf):
+ def fromYaml(self, conf):
with configuration_exceptions('pipeline', conf):
- PipelineParser.getSchema(layout, connections)(conf)
- pipeline = model.Pipeline(conf['name'], layout)
+ self.getSchema()(conf)
+ pipeline = model.Pipeline(conf['name'], self.layout)
pipeline.description = conf.get('description')
precedence = model.PRECEDENCE_MAP[conf.get('precedence')]
@@ -1095,13 +1094,13 @@
pipeline.post_review = conf.get(
'post-review', False)
- for conf_key, action in PipelineParser.reporter_actions.items():
+ for conf_key, action in self.reporter_actions.items():
reporter_set = []
if conf.get(conf_key):
for reporter_name, params \
in conf.get(conf_key).items():
- reporter = connections.getReporter(reporter_name,
- params)
+ reporter = self.connections.getReporter(reporter_name,
+ params)
reporter.setAction(conf_key)
reporter_set.append(reporter)
setattr(pipeline, action, reporter_set)
@@ -1127,26 +1126,26 @@
manager_name = conf['manager']
if manager_name == 'dependent':
manager = zuul.manager.dependent.DependentPipelineManager(
- scheduler, pipeline)
+ self.scheduler, pipeline)
elif manager_name == 'independent':
manager = zuul.manager.independent.IndependentPipelineManager(
- scheduler, pipeline)
+ self.scheduler, pipeline)
pipeline.setManager(manager)
- layout.pipelines[conf['name']] = pipeline
+ self.layout.pipelines[conf['name']] = pipeline
for source_name, require_config in conf.get('require', {}).items():
- source = connections.getSource(source_name)
+ source = self.connections.getSource(source_name)
manager.ref_filters.extend(
source.getRequireFilters(require_config))
for source_name, reject_config in conf.get('reject', {}).items():
- source = connections.getSource(source_name)
+ source = self.connections.getSource(source_name)
manager.ref_filters.extend(
source.getRejectFilters(reject_config))
for trigger_name, trigger_config in conf.get('trigger').items():
- trigger = connections.getTrigger(trigger_name, trigger_config)
+ trigger = self.connections.getTrigger(trigger_name, trigger_config)
pipeline.triggers.append(trigger)
manager.event_filters.extend(
trigger.getEventFilters(conf['trigger'][trigger_name]))
@@ -1614,15 +1613,15 @@
for config_pragma in data.pragmas:
pragma_parser.fromYaml(config_pragma)
+ pipeline_parser = PipelineParser(tenant, layout, connections,
+ scheduler)
if not skip_pipelines:
for config_pipeline in data.pipelines:
classes = TenantParser._getLoadClasses(
tenant, config_pipeline)
if 'pipeline' not in classes:
continue
- layout.addPipeline(PipelineParser.fromYaml(
- layout, connections,
- scheduler, config_pipeline))
+ layout.addPipeline(pipeline_parser.fromYaml(config_pipeline))
nodeset_parser = NodeSetParser(tenant, layout)
for config_nodeset in data.nodesets: