Package coprs :: Package views :: Package coprs_ns :: Module coprs_builds
[hide private]
[frames] | no frames]

Source Code for Module coprs.views.coprs_ns.coprs_builds

  1  import time 
  2   
  3  import flask 
  4   
  5  from coprs import db 
  6  from coprs import exceptions 
  7  from coprs import forms 
  8  from coprs import helpers 
  9  from coprs import models 
 10   
 11  from coprs.logic import builds_logic 
 12  from coprs.logic import coprs_logic 
 13   
 14  from coprs.views.misc import login_required, page_not_found 
 15  from coprs.views.coprs_ns import coprs_ns 
 16  from coprs.views.coprs_ns import coprs_general 
17 18 @coprs_ns.route('/detail/<username>/<coprname>/builds/', defaults={'page': 1}) 19 @coprs_ns.route('/detail/<username>/<coprname>/builds/<int:page>/') 20 -def copr_builds(username, coprname, page=1):
21 copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first() 22 23 if not copr: # hey, this Copr doesn't exist 24 return page_not_found('Copr with name {0} does not exist.'.format(coprname)) 25 26 builds_query = builds_logic.BuildsLogic.get_multiple(flask.g.user, copr=copr) 27 28 paginator = helpers.Paginator(builds_query, copr.build_count, page, per_page_override = 10) 29 return flask.render_template('coprs/detail/builds.html', copr=copr, builds=paginator.sliced_query, paginator=paginator)
30
31 32 @coprs_ns.route('/detail/<username>/<coprname>/add_build/') 33 @login_required 34 -def copr_add_build(username, coprname, form=None):
35 copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first() 36 37 if not copr: # hey, this Copr doesn't exist 38 return page_not_found('Copr with name {0} does not exist.'.format(coprname)) 39 40 if not form: 41 form = forms.BuildForm() 42 43 return flask.render_template('coprs/detail/add_build.html', copr=copr, form=form)
44
45 @coprs_ns.route('/detail/<username>/<coprname>/new_build/', methods = ["POST"]) 46 @login_required 47 -def copr_new_build(username, coprname):
48 form = forms.BuildForm() 49 copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first() 50 if not copr: # hey, this Copr doesn't exist 51 return page_not_found('Copr with name {0} does not exist.'.format(coprname)) 52 53 if form.validate_on_submit() and flask.g.user.can_build_in(copr): 54 try: 55 build = builds_logic.BuildsLogic.add(user=flask.g.user, 56 pkgs=form.pkgs.data.replace('\n', ' '), 57 copr=copr) # we're checking authorization above for now 58 if flask.g.user.proven: 59 build.memory_reqs = form.memory_reqs.data 60 build.timeout = form.timeout.data 61 except exceptions.ActionInProgressException as e: 62 flask.flash(e) 63 db.session.rollback() 64 else: 65 flask.flash("Build was added") 66 db.session.commit() 67 68 return flask.redirect(flask.url_for('coprs_ns.copr_builds', username=username, coprname=copr.name)) 69 else: 70 return copr_add_build(username=username, coprname=coprname, form=form)
71
72 @coprs_ns.route('/detail/<username>/<coprname>/cancel_build/<int:build_id>/', methods = ['POST']) 73 @login_required 74 -def copr_cancel_build(username, coprname, build_id):
75 # only the user who ran the build can cancel it 76 build = builds_logic.BuildsLogic.get(flask.g.user, build_id).first() 77 if not build: # hey, this Build doesn't exist 78 return page_not_found('Build with id {0} does not exist.'.format(build_id)) 79 try: 80 builds_logic.BuildsLogic.cancel_build(flask.g.user, build) 81 except exceptions.InsufficientRightsException as ex: 82 flask.flash(ex.message) 83 else: 84 db.session.commit() 85 flask.flash('Build was canceled') 86 87 return flask.redirect(flask.url_for('coprs_ns.copr_builds', username = username, coprname = coprname))
88
89 @coprs_ns.route('/detail/<username>/<coprname>/repeat_build/<int:build_id>/', methods = ['POST']) 90 @login_required 91 -def copr_repeat_build(username, coprname, build_id):
92 build = builds_logic.BuildsLogic.get(flask.g.user, build_id).first() 93 copr = coprs_logic.CoprsLogic.get(flask.g.user, username=username, coprname=coprname).first() 94 95 if not build: # hey, this Build doesn't exist 96 return page_not_found('Build with id {0} does not exist.'.format(build_id)) 97 98 if not copr: # hey, this Copr doesn't exist 99 return page_not_found('Copr {0}/{1} does not exist.'.format(username, coprname)) 100 101 # TODO: do intersection of chroots with currently active? 102 new_build = models.Build() 103 for a in ['pkgs', 'chroots', 'repos', 'memory_reqs', 'timeout']: 104 setattr(new_build, a, getattr(build, a)) 105 builds_logic.BuildsLogic.new(flask.g.user, new_build, copr) 106 107 db.session.commit() 108 flask.flash('Build was resubmitted') 109 110 return flask.redirect(flask.url_for('coprs_ns.copr_builds', username = username, coprname = coprname))
111