Pipeline: drop the build setter

Take this as an argumnet to __init__ in the same way that `base`
is.

This avoids us having to deal with the case of someone setting a
stage before the build, which does not work as the stage id will
be wrong.

Signed-off-by: Tom Gundersen <teg@jklm.no>
This commit is contained in:
Tom Gundersen 2019-08-02 01:10:24 +02:00
parent ea68bb0c26
commit 0a9223b6f2
2 changed files with 9 additions and 14 deletions

View file

@ -374,20 +374,15 @@ class Assembler:
class Pipeline:
def __init__(self, base=None):
def __init__(self, build=None, base=None):
self.base = base
self.build = None
self.build = build
self.stages = []
self.assembler = None
def get_id(self):
return self.stages[-1].id if self.stages else self.base
def set_build(self, pipeline):
if self.stages:
raise ValueError("Must set build before stages.")
self.build = pipeline
def add_stage(self, name, options=None):
build = self.build.get_id() if self.build else None
stage = Stage(name, build, self.get_id(), options or {})
@ -474,11 +469,12 @@ class Pipeline:
def load(description):
pipeline = Pipeline(description.get("base"))
b = description.get("build")
if b:
pipeline.set_build(load(b))
build_description = description.get("build")
if build_description:
build = load(build_description)
else:
build = None
pipeline = Pipeline(build, description.get("base"))
for s in description.get("stages", []):
pipeline.add_stage(s["name"], s.get("options", {}))

View file

@ -47,8 +47,7 @@ class TestDescriptions(unittest.TestCase):
build = osbuild.Pipeline()
build.add_stage("org.osbuild.test", { "one": 1 })
pipeline = osbuild.Pipeline()
pipeline.set_build(build)
pipeline = osbuild.Pipeline(build)
pipeline.add_stage("org.osbuild.test", { "one": 2 })
pipeline.set_assembler("org.osbuild.test")