1 import flask
2 import re
3
4 from coprs import db
5 from coprs import forms
6 from coprs import helpers
7
8 from coprs.logic import builds_logic
9 from coprs.logic import coprs_logic
10
11 from coprs.views.misc import login_required, page_not_found
12 from coprs.views.coprs_ns import coprs_ns
13
14 from coprs.exceptions import (ActionInProgressException,
15 InsufficientRightsException)
30
31
32 @coprs_ns.route("/<username>/<coprname>/build/<int:build_id>/")
33 -def copr_build(username, coprname, build_id):
50
51
52 @coprs_ns.route("/<username>/<coprname>/builds/", defaults={"page": 1})
53 @coprs_ns.route("/<username>/<coprname>/builds/<int:page>/")
54 -def copr_builds(username, coprname, page=1):
71
72
73 @coprs_ns.route("/<username>/<coprname>/add_build/")
74 @login_required
75 -def copr_add_build(username, coprname, form=None):
88
89
90 @coprs_ns.route("/<username>/<coprname>/new_build/", methods=["POST"])
91 @login_required
92 -def copr_new_build(username, coprname):
93 copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first()
94 if not copr:
95 return page_not_found(
96 "Project {0}/{1} does not exist.".format(username, coprname))
97
98 form = forms.BuildFormFactory.create_form_cls(copr.active_chroots)()
99
100 if form.validate_on_submit():
101 pkgs = form.pkgs.data.replace("\n", " ").split(" ")
102
103
104 bad_urls = []
105 for pkg in pkgs:
106 if not re.match("^.*\.src\.rpm$", pkg):
107 bad_urls.append(pkg)
108 flask.flash("Bad url: {0} (skipped)".format(pkg))
109 for bad_url in bad_urls:
110 pkgs.remove(bad_url)
111
112 if not pkgs:
113 flask.flash("No builds submitted")
114 else:
115
116 chroots = []
117 for chroot in copr.active_chroots:
118 if chroot.name in form.selected_chroots:
119 chroots.append(chroot)
120
121
122 try:
123 for pkg in pkgs:
124 build = builds_logic.BuildsLogic.add(
125 user=flask.g.user,
126 pkgs=pkg,
127 copr=copr,
128 chroots=chroots)
129
130 if flask.g.user.proven:
131 build.memory_reqs = form.memory_reqs.data
132 build.timeout = form.timeout.data
133
134 except (ActionInProgressException, InsufficientRightsException) as e:
135 flask.flash(str(e))
136 db.session.rollback()
137 else:
138 flask.flash("Build was added")
139 db.session.commit()
140
141 return flask.redirect(flask.url_for("coprs_ns.copr_builds",
142 username=username,
143 coprname=copr.name))
144 else:
145 return copr_add_build(username=username, coprname=coprname, form=form)
146
147
148 @coprs_ns.route("/<username>/<coprname>/cancel_build/<int:build_id>/",
149 defaults={"page": 1},
150 methods=["POST"])
151 @coprs_ns.route("/<username>/<coprname>/cancel_build/<int:build_id>/<int:page>/",
152 methods=["POST"])
172
173
174 @coprs_ns.route("/<username>/<coprname>/repeat_build/<int:build_id>/",
175 defaults={"page": 1},
176 methods=["GET", "POST"])
177 @coprs_ns.route("/<username>/<coprname>/repeat_build/<int:build_id>/<int:page>/",
178 methods=["GET", "POST"])
181 build = builds_logic.BuildsLogic.get(build_id).first()
182 copr = coprs_logic.CoprsLogic.get(
183 flask.g.user, username=username, coprname=coprname).first()
184
185 if not build:
186 return page_not_found(
187 "Build with id {0} does not exist.".format(build_id))
188
189 if not copr:
190 return page_not_found(
191 "Copr {0}/{1} does not exist.".format(username, coprname))
192
193 try:
194 builds_logic.BuildsLogic.add(
195 user=flask.g.user,
196 pkgs=build.pkgs,
197 copr=copr,
198 repos=copr.repos,
199 memory_reqs=build.memory_reqs,
200 timeout=build.timeout)
201
202 except (ActionInProgressException, InsufficientRightsException) as e:
203 db.session.rollback()
204 flask.flash(str(e))
205 else:
206 db.session.commit()
207 flask.flash("Build was resubmitted")
208
209 return flask.redirect(flask.url_for("coprs_ns.copr_builds",
210 username=username,
211 coprname=coprname,
212 page=page))
213
214
215 @coprs_ns.route("/<username>/<coprname>/delete_build/<int:build_id>/",
216 defaults={"page": 1},
217 methods=["POST"])
218 @coprs_ns.route("/<username>/<coprname>/delete_build/<int:build_id>/<int:page>/",
219 methods=["POST"])
237