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