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