]>
git.ipfire.org Git - people/jschlag/pbs.git/blob - web/handlers.py
5 from handlers_auth
import *
6 from handlers_base
import *
7 from handlers_builders
import *
8 from handlers_search
import *
9 from handlers_users
import *
11 class IndexHandler(BaseHandler
):
13 active_builds
= self
.pakfire
.builds
.get_active()
14 latest_builds
= self
.pakfire
.builds
.get_latest(limit
=10)
15 next_builds
= self
.pakfire
.builds
.get_next(limit
=10)
18 counter_pending
= self
.pakfire
.builds
.count(state
="pending")
20 average_build_time
= self
.pakfire
.builds
.average_build_time()
22 self
.render("index.html", latest_builds
=latest_builds
,
23 active_builds
=active_builds
, next_builds
=next_builds
,
24 counter_pending
=counter_pending
, average_build_time
=average_build_time
)
27 class PackageIDDetailHandler(BaseHandler
):
29 package
= self
.packages
.get_by_id(id)
31 return tornado
.web
.HTTPError(404, "Package not found: %s" % id)
33 self
.render("package-detail.html", package
=package
)
36 class PackageListHandler(BaseHandler
):
40 # Sort all packages in an array like "<first char>" --> [packages, ...]
41 # to print them in a table for each letter of the alphabet.
42 for pkg
in self
.pakfire
.packages
.get_all_names():
45 if not packages
.has_key(c
):
48 packages
[c
].append(pkg
)
50 self
.render("package-list.html", packages
=packages
)
53 class PackageNameHandler(BaseHandler
):
54 def get(self
, package
):
55 packages
= self
.pakfire
.packages
.get_by_name(package
)
58 raise tornado
.web
.HTTPError(404, "Package '%s' was not found")
60 # Take info from the most recent package.
63 self
.render("package-detail-list.html", pkg
=pkg
, packages
=packages
)
66 class PackageDetailHandler(BaseHandler
):
67 def get(self
, name
, epoch
, version
, release
):
68 pkg
= self
.pakfire
.packages
.get_by_tuple(name
, epoch
, version
, release
)
71 self
.render("package-detail.html", pkg
=pkg
)
73 @tornado.web
.authenticated
74 def post(self
, name
, epoch
, version
, release
):
75 pkg
= self
.pakfire
.packages
.get_by_tuple(name
, epoch
, version
, release
)
77 action
= self
.get_argument("action", None)
79 if action
== "comment":
80 vote
= self
.get_argument("vote", None)
81 if not self
.current_user
.is_tester() and \
82 not self
.current_user
.is_admin():
85 pkg
.comment(self
.current_user
.id, self
.get_argument("text"),
88 self
.render("package-detail.html", pkg
=pkg
)
91 class BuildDetailHandler(BaseHandler
):
93 build
= self
.pakfire
.builds
.get_by_uuid(uuid
)
96 raise tornado
.web
.HTTPError(404, "Build not found")
98 self
.render("build-detail.html", build
=build
)
101 class BuildPriorityHandler(BaseHandler
):
102 @tornado.web
.authenticated
104 build
= self
.pakfire
.builds
.get_by_uuid(uuid
)
107 raise tornado
.web
.HTTPError(404, "Build not found")
109 self
.render("build-priority.html", build
=build
)
111 @tornado.web
.authenticated
112 def post(self
, uuid
):
113 build
= self
.pakfire
.builds
.get_by_uuid(uuid
)
116 raise tornado
.web
.HTTPError(404, "Build not found")
118 # Get the priority from the request data and convert it to an integer.
119 # If that cannot be done, we default to zero.
120 prio
= self
.get_argument("priority")
126 # Check if the value is in a valid range.
127 if not prio
in (-2, -1, 0, 1, 2):
131 build
.priority
= prio
133 self
.redirect("/build/%s" % build
.uuid
)
136 class BuildScheduleHandler(BaseHandler
):
137 allowed_types
= ("test", "rebuild",)
139 @tornado.web
.authenticated
141 type = self
.get_argument("type")
142 assert type in self
.allowed_types
144 build
= self
.pakfire
.builds
.get_by_uuid(uuid
)
146 raise tornado
.web
.HTTPError(404, "Build not found")
148 self
.render("build-schedule-%s.html" % type, type=type, build
=build
)
150 @tornado.web
.authenticated
151 def post(self
, uuid
):
152 type = self
.get_argument("type")
153 assert type in self
.allowed_types
155 build
= self
.pakfire
.builds
.get_by_uuid(uuid
)
157 raise tornado
.web
.HTTPError(404, "Build not found")
159 # Get the start offset.
160 offset
= self
.get_argument("offset", 0)
168 build
.schedule_test(offset
)
169 elif type == "rebuild":
170 build
.schedule_rebuild(offset
)
172 self
.redirect("/build/%s" % build
.uuid
)
175 class BuildListHandler(BaseHandler
):
177 builder
= self
.get_argument("builder", None)
178 state
= self
.get_argument("state", None)
180 builds
= self
.pakfire
.builds
.get_latest(state
=state
, builder
=builder
,
183 self
.render("build-list.html", builds
=builds
)
186 class BuildFilterHandler(BaseHandler
):
188 builders
= self
.pakfire
.builders
.get_all()
190 self
.render("build-filter.html", builders
=builders
)
193 class DocsIndexHandler(BaseHandler
):
195 self
.render("docs-index.html")
198 class DocsBuildsHandler(BaseHandler
):
200 self
.render("docs-build.html")
203 class DocsUsersHandler(BaseHandler
):
205 self
.render("docs-users.html")
208 class SourceListHandler(BaseHandler
):
210 sources
= self
.pakfire
.sources
.get_all()
212 self
.render("source-list.html", sources
=sources
)
215 class SourceDetailHandler(BaseHandler
):
217 source
= self
.pakfire
.sources
.get_by_id(id)
219 self
.render("source-detail.html", source
=source
)
222 class FileDetailHandler(BaseHandler
):
224 pkg
, file = self
.pakfire
.packages
.get_with_file_by_uuid(uuid
)
227 raise tornado
.web
.HTTPError(404, "File not found")
229 self
.render("file-detail.html", pkg
=pkg
, file=file)
232 class DistributionListHandler(BaseHandler
):
234 distros
= self
.pakfire
.distros
.get_all()
236 self
.render("distro-list.html", distros
=distros
)
239 class DistributionDetailHandler(BaseHandler
):
241 distro
= self
.pakfire
.distros
.get_by_name(name
)
243 raise tornado
.web
.HTTPError(404, "Distro not found")
245 self
.render("distro-detail.html", distro
=distro
)
248 class DistributionEditHandler(BaseHandler
):
250 self
.arches
= self
.pakfire
.builders
.get_all_arches()
251 self
.sources
= self
.pakfire
.sources
.get_all()
253 @tornado.web
.authenticated
255 distro
= self
.pakfire
.distros
.get_by_name(name
)
257 raise tornado
.web
.HTTPError(404, "Distro not found")
259 self
.render("distro-edit.html", distro
=distro
, arches
=self
.arches
,
260 sources
=self
.sources
)
262 @tornado.web
.authenticated
263 def post(self
, name
):
264 distro
= self
.pakfire
.distros
.get_by_name(name
)
266 raise tornado
.web
.HTTPError(404, "Distro not found")
268 name
= self
.get_argument("name", distro
.name
)
269 vendor
= self
.get_argument("vendor", distro
.vendor
)
270 slogan
= self
.get_argument("slogan", distro
.slogan
)
271 arches
= self
.get_argument("arches", distro
.arches
)
272 sources
= self
.get_argument("sources", distro
.sources
)
274 distro
.set("name", name
)
275 distro
.set("vendor", vendor
)
276 distro
.set("slogan", slogan
)
277 distro
.set("arches", arches
)
278 distro
.set("sources", sources
)
280 self
.redirect("/distribution/%s" % distro
.sname
)
283 class LogHandler(BaseHandler
):
285 self
.render("log.html", log
=self
.pakfire
.log
)
288 class RepositoryDetailHandler(BaseHandler
):
289 def get(self
, distro
, repo
):
290 distro
= self
.pakfire
.distros
.get_by_name(distro
)
292 raise tornado
.web
.HTTPError(404)
294 repo
= distro
.get_repo(repo
)
296 raise tornado
.web
.HTTPError(404)
298 self
.render("repository-detail.html", distro
=distro
, repo
=repo
)
301 class RepoActionHandler(BaseHandler
):
302 @tornado.web
.authenticated
303 def post(self
, type):
304 assert type in ("run", "remove")
306 action_id
= self
.get_argument("id")
308 action
= self
.pakfire
.repos
.get_action_by_id(action_id
)
310 raise tornado
.web
.HTTPError(400)
313 action
.run(self
.current_user
)
315 elif type == "remove":
316 action
.delete(self
.current_user
)