]> git.ipfire.org Git - pbs.git/blob - src/web/handlers_builders.py
bcaa29d25b6b1967e874d03e66cd7bf83c04e391
[pbs.git] / src / web / handlers_builders.py
1 #!/usr/bin/python
2
3 import tornado.web
4
5 from .. import builders
6
7 from .handlers_base import *
8
9 class BuilderListHandler(BaseHandler):
10 def get(self):
11 self.render("builders/list.html", builders=self.backend.builders)
12
13
14 class BuilderDetailHandler(BaseHandler):
15 def get(self, hostname):
16 builder = self.pakfire.builders.get_by_name(hostname)
17
18 # Get running and pending jobs.
19 jobs = self.pakfire.jobs.get_active(builder=builder)
20 jobs += self.pakfire.jobs.get_next(builder=builder)
21
22 # Get log.
23 log = builder.get_history(limit=5)
24
25 self.render("builders/detail.html", builder=builder, jobs=jobs, log=log)
26
27 @tornado.web.authenticated
28 def post(self, hostname):
29 if not self.current_user.has_perm("maintain_mirrors"):
30 raise tornado.web.HTTPError(403, "User is not allowed to do this.")
31
32 builder = self.pakfire.builders.get_by_name(hostname)
33
34 with self.db.transaction():
35 builder.description = self.get_argument("description", None)
36
37 self.redirect("/builder/%s" % builder.hostname)
38
39
40 class BuilderNewHandler(BaseHandler):
41 def get(self):
42 self.render("builders/new.html")
43
44 @tornado.web.authenticated
45 def post(self):
46 if not self.current_user.has_perm("maintain_builders"):
47 raise tornado.web.HTTPError(403)
48
49 name = self.get_argument("name")
50
51 # Create a new builder.
52 builder, passphrase = \
53 self.backend.builders.create(name, user=self.current_user)
54
55 self.render("builders/pass.html", action="new", builder=builder,
56 passphrase=passphrase)
57
58
59 class BuilderEditHandler(BaseHandler):
60 @tornado.web.authenticated
61 def get(self, hostname):
62 builder = self.pakfire.builders.get_by_name(hostname)
63 if not builder:
64 raise tornado.web.HTTPError(404, "Builder not found")
65
66 self.render("builders/edit.html", builder=builder)
67
68 @tornado.web.authenticated
69 def post(self, hostname):
70 builder = self.pakfire.builders.get_by_name(hostname)
71 if not builder:
72 raise tornado.web.HTTPError(404, "Builder not found: %s" % hostname)
73
74 # Check for sufficient right to edit things.
75 if not self.current_user.has_perm("maintain_builders"):
76 raise tornado.web.HTTPError(403)
77
78 builder.enabled = self.get_argument("enabled", False)
79 builder.build_release = self.get_argument("build_release", False)
80 builder.build_scratch = self.get_argument("build_scratch", False)
81 builder.build_test = self.get_argument("build_test", False)
82
83 # Save max_jobs.
84 max_jobs = self.get_argument("max_jobs", builder.max_jobs)
85 try:
86 max_jobs = int(max_jobs)
87 except TypeError:
88 max_jobs = 1
89
90 if not max_jobs in range(1, 100):
91 max_jobs = 1
92 builder.max_jobs = max_jobs
93
94 self.redirect("/builder/%s" % builder.hostname)
95
96
97 class BuilderRenewPassphraseHandler(BaseHandler):
98 @tornado.web.authenticated
99 def get(self, name):
100 builder = self.pakfire.builders.get_by_name(name)
101
102 passphrase = builder.regenerate_passphrase()
103
104 self.render("builders/pass.html", action="update", builder=builder,
105 passphrase=passphrase)
106
107
108 class BuilderDeleteHandler(BaseHandler):
109 @tornado.web.authenticated
110 def get(self, name):
111 builder = self.pakfire.builders.get_by_name(name)
112 if not builder:
113 raise tornado.web.HTTPError(404, "Builder not found: %s" % name)
114
115 # Check for sufficient right to delete this builder.
116 if not self.current_user.has_perm("maintain_builders"):
117 raise tornado.web.HTTPError(403)
118
119 confirmed = self.get_argument("confirmed", None)
120 if confirmed:
121 with self.db.transaction():
122 builder.deleted = True
123
124 self.redirect("/builders")
125 return
126
127 self.render("builders/delete.html", builder=builder)
128
129
130 class BuilderStatusChangeHandler(BaseHandler):
131 enabled = None
132
133 @tornado.web.authenticated
134 def get(self, hostname):
135 builder = self.pakfire.builders.get_by_name(hostname)
136 if not builder:
137 raise tornado.web.HTTPError(404, "Builder not found: %s" % hostname)
138
139 # Check for sufficient right to edit things.
140 if self.current_user.has_perm("maintain_builders"):
141 with self.db.transaction():
142 builder.enabled = self.enabled
143
144 self.redirect("/builder/%s" % builder.name)
145
146
147 class BuilderEnableHander(BuilderStatusChangeHandler):
148 enabled = True
149
150
151 class BuilderDisableHander(BuilderStatusChangeHandler):
152 enabled = False