Trees | Indices | Help |
---|
|
1 import time 2 3 from coprs import db 4 from coprs import exceptions 5 from coprs import models 6 from coprs import signals 7 8 from coprs.logic import coprs_logic 9 from coprs.logic import users_logic12 @classmethod 16 17 @classmethod10119 copr = kwargs.get('copr', None) 20 username = kwargs.get('username', None) 21 coprname = kwargs.get('coprname', None) 22 23 query = models.Build.query.order_by(models.Build.submitted_on.desc()) 24 25 # if we get copr, query by its id 26 if copr: 27 query = query.filter(models.Build.copr == copr) 28 elif username and coprname: 29 query = query.join(models.Build.copr).\ 30 options(db.contains_eager(models.Build.copr)).\ 31 join(models.Copr.owner).\ 32 filter(models.Copr.name == coprname).\ 33 filter(models.User.openid_name == models.User.openidize_name(username)).\ 34 order_by(models.Build.submitted_on.desc()) 35 else: 36 raise exceptions.ArgumentMissingException('Must pass either copr or both coprname and username') 37 38 return query39 40 @classmethod42 # return builds that aren't both started and finished (if build start submission 43 # fails, we still want to mark the build as non-waiting, if it ended) 44 # this has very different goal then get_multiple, so implement it alone 45 query = models.Build.query.join(models.Build.copr).\ 46 join(models.User).\ 47 options(db.contains_eager(models.Build.copr)).\ 48 options(db.contains_eager('copr.owner')).\ 49 filter(models.Build.started_on == None).\ 50 filter(models.Build.ended_on == None).\ 51 filter(models.Build.canceled != True).\ 52 order_by(models.Build.submitted_on.asc()) 53 return query54 55 @classmethod 58 59 @classmethod61 coprs_logic.CoprsLogic.raise_if_unfinished_blocking_action(user, copr, 62 'Can\'t build while there is an operation in progress: {action}') 63 users_logic.UsersLogic.raise_if_cant_build_in_copr(user, copr, 64 'You don\'t have permissions to build in this copr.') 65 build = models.Build( 66 pkgs=pkgs, 67 copr=copr, 68 repos=copr.repos, 69 chroots=' '.join(map(lambda x: x.chroot_name, copr.active_mock_chroots)), 70 user=user, 71 submitted_on=int(time.time())) 72 cls.new(user, build, copr) 73 return build74 75 @classmethod77 if not build.submitted_on: 78 build.submitted_on = int(time.time()) 79 if not build.user: 80 build.user = user 81 82 coprs_logic.CoprsLogic.increment_build_count(user, copr) 83 db.session.add(build)84 85 @classmethod87 for attr in ['results', 'started_on', 'ended_on', 'status']: 88 value = upd_dict.get(attr, None) 89 if value != None: 90 setattr(build, attr, value) 91 if attr == 'ended_on': 92 signals.build_finished.send(cls, build=build) 93 94 db.session.add(build)95 96 @classmethod98 if build.user_id != user.id: 99 raise exceptions.InsufficientRightsException('You can only cancel your own builds.') 100 build.canceled = True
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Tue Sep 10 09:30:20 2013 | http://epydoc.sourceforge.net |