summaryrefslogtreecommitdiff
path: root/ick2/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'ick2/build.py')
-rw-r--r--ick2/build.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/ick2/build.py b/ick2/build.py
new file mode 100644
index 0000000..cfb1f71
--- /dev/null
+++ b/ick2/build.py
@@ -0,0 +1,53 @@
+# Copyright (C) 2018 Lars Wirzenius
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+import ick2
+
+
+class Build:
+
+ acceptable = {
+ 'triggered': ['building'],
+ 'building': ['done', 'failed'],
+ }
+
+ def __init__(self, resource):
+ self.resource = resource
+ self.graph = ick2.BuildGraph(graph=self.resource.get('graph', {}))
+ self.graph.set_observer(self.update_graph_in_resource)
+
+ def get_status(self):
+ return self.resource['status']
+
+ def set_status(self, status):
+ current = self.get_status()
+ if status not in self.acceptable[current]:
+ raise WrongBuildStatusChange(current, status)
+ self.resource['status'] = status
+
+ def get_graph(self):
+ return self.graph
+
+ def update_graph_in_resource(self):
+ self.resource['graph'] = self.graph.get_actions()
+
+
+class WrongBuildStatusChange(Exception):
+
+ def __init__(self, current, new):
+ super().__init__(
+ 'Unacceptable build status change from {} to {}'.format(
+ current, new))