Trees | Indices | Help |
---|
|
1 # coding: utf-8 2 3 import time 4 import flask 5 import sqlalchemy 6 import os 7 8 from .. import db 9 from .builds_logic import BuildsLogic 10 from coprs import models 11 from coprs import exceptions 12 from coprs.exceptions import ObjectNotFound 13 from coprs.helpers import StatusEnum 14 from coprs.logic.packages_logic import PackagesLogic 15 from coprs.logic.actions_logic import ActionsLogic 16 17 from coprs.logic.users_logic import UsersLogic 18 from coprs.models import User, Copr 19 from .coprs_logic import CoprsLogic, CoprChrootsLogic 20 from .. import helpers24 """ 25 Used for manipulation which affects multiply models 26 """ 27 28 @classmethod18330 """ 31 Delete copr and all its builds. 32 33 :param copr: 34 :raises ActionInProgressException: 35 :raises InsufficientRightsException: 36 """ 37 builds_query = BuildsLogic.get_multiple_by_copr(copr=copr) 38 39 if copr.persistent: 40 raise exceptions.InsufficientRightsException("This project is protected against deletion.") 41 42 for build in builds_query: 43 BuildsLogic.delete_build(flask.g.user, build, send_delete_action=False) 44 45 CoprsLogic.delete_unsafe(flask.g.user, copr)46 47 @classmethod49 forking = ProjectForking(user, dstgroup) 50 created = (not bool(forking.get(copr, dstname))) 51 fcopr = forking.fork_copr(copr, dstname) 52 53 if fcopr.full_name == copr.full_name: 54 raise exceptions.DuplicateException("Source project should not be same as destination") 55 56 builds_map = {} 57 for package in copr.packages: 58 fpackage = forking.fork_package(package, fcopr) 59 build = package.last_build(successful=True) 60 if not build: 61 continue 62 63 fbuild = forking.fork_build(build, fcopr, fpackage) 64 65 if build.result_dir: 66 builds_map['srpm-builds'] = (build.result_dir, fbuild.result_dir) 67 68 for chroot, fchroot in zip(build.build_chroots, fbuild.build_chroots): 69 if chroot.result_dir: 70 builds_map[chroot.name] = (chroot.result_dir, fchroot.result_dir) 71 72 db.session.commit() 73 ActionsLogic.send_fork_copr(copr, fcopr, builds_map) 74 return fcopr, created75 76 @staticmethod78 group = ComplexLogic.get_group_by_name_safe(group_name) 79 80 try: 81 return CoprsLogic.get_by_group_id( 82 group.id, copr_name, **kwargs).one() 83 except sqlalchemy.orm.exc.NoResultFound: 84 raise ObjectNotFound( 85 message="Project @{}/{} does not exist." 86 .format(group_name, copr_name))87 88 @staticmethod90 """ Get one project 91 92 This always return personal project. For group projects see get_group_copr_safe(). 93 """ 94 try: 95 return CoprsLogic.get(user_name, copr_name, **kwargs).filter(Copr.group_id.is_(None)).one() 96 except sqlalchemy.orm.exc.NoResultFound: 97 raise ObjectNotFound( 98 message="Project {}/{} does not exist." 99 .format(user_name, copr_name))100 101 @staticmethod103 if owner_name[0] == "@": 104 return ComplexLogic.get_group_copr_safe(owner_name[1:], copr_name, **kwargs) 105 return ComplexLogic.get_copr_safe(owner_name, copr_name, **kwargs)106 107 @staticmethod109 try: 110 return CoprsLogic.get_by_id(copr_id).one() 111 except sqlalchemy.orm.exc.NoResultFound: 112 raise ObjectNotFound( 113 message="Project with id {} does not exist." 114 .format(copr_id))115 116 @staticmethod118 try: 119 return BuildsLogic.get_by_id(build_id).one() 120 except sqlalchemy.orm.exc.NoResultFound: 121 raise ObjectNotFound( 122 message="Build {} does not exist.".format(build_id))123 124 @staticmethod126 try: 127 return PackagesLogic.get_by_id(package_id).one() 128 except sqlalchemy.orm.exc.NoResultFound: 129 raise ObjectNotFound( 130 message="Package {} does not exist.".format(package_id))131 132 @staticmethod134 try: 135 return PackagesLogic.get(copr.id, package_name).one() 136 except sqlalchemy.orm.exc.NoResultFound: 137 raise ObjectNotFound( 138 message="Package {} in the copr {} does not exist." 139 .format(package_name, copr))140 141 @staticmethod143 try: 144 group = UsersLogic.get_group_by_alias(group_name).one() 145 except sqlalchemy.orm.exc.NoResultFound: 146 raise ObjectNotFound( 147 message="Group {} does not exist.".format(group_name)) 148 return group149 150 @staticmethod152 try: 153 chroot = CoprChrootsLogic.get_by_name_safe(copr, chroot_name) 154 except (ValueError, KeyError, RuntimeError) as e: 155 raise ObjectNotFound(message=str(e)) 156 157 if not chroot: 158 raise ObjectNotFound( 159 message="Chroot name {} does not exist.".format(chroot_name)) 160 161 return chroot162 163 @staticmethod165 names = flask.g.user.user_groups 166 if names: 167 query = UsersLogic.get_groups_by_names_list(names) 168 return query.filter(User.name == user_name) 169 else: 170 return []171 172 @staticmethod174 importing = BuildsLogic.get_build_importing_queue(background=False).count() 175 pending = BuildsLogic.get_pending_build_tasks(background=False).count() 176 running = BuildsLogic.get_build_tasks(StatusEnum("running")).count() 177 178 return dict( 179 importing=importing, 180 pending=pending, 181 running=running, 182 )249188 self.user = user 189 self.group = group 190 191 if group and not user.can_build_in_group(group): 192 raise exceptions.InsufficientRightsException( 193 "Only members may create projects in the particular groups.")194196 return CoprsLogic.get_by_group_id(self.group.id, name).first() if self.group \ 197 else CoprsLogic.filter_without_group_projects(CoprsLogic.get(flask.g.user.name, name)).first()198200 fcopr = self.get(copr, name) 201 if not fcopr: 202 fcopr = self.create_object(models.Copr, copr, exclude=["id", "group_id", "created_on"]) 203 fcopr.forked_from_id = copr.id 204 fcopr.user = self.user 205 fcopr.user_id = self.user.id 206 fcopr.created_on = int(time.time()) 207 if name: 208 fcopr.name = name 209 if self.group: 210 fcopr.group = self.group 211 fcopr.group_id = self.group.id 212 213 for chroot in list(copr.copr_chroots): 214 CoprChrootsLogic.create_chroot(self.user, fcopr, chroot.mock_chroot, chroot.buildroot_pkgs, 215 chroot.repos, comps=chroot.comps, comps_name=chroot.comps_name, 216 with_opts=chroot.with_opts, without_opts=chroot.without_opts) 217 db.session.add(fcopr) 218 return fcopr219221 fpackage = PackagesLogic.get(fcopr.id, package.name).first() 222 if not fpackage: 223 fpackage = self.create_object(models.Package, package, exclude=["id", "copr_id"]) 224 fpackage.copr = fcopr 225 db.session.add(fpackage) 226 return fpackage227229 fbuild = self.create_object(models.Build, build, exclude=["id", "copr_id", "package_id", "result_dir"]) 230 fbuild.copr = fcopr 231 fbuild.package = fpackage 232 db.session.add(fbuild) 233 db.session.flush() 234 235 fbuild.result_dir = '{:08}'.format(fbuild.id) 236 fbuild.build_chroots = [self.create_object(models.BuildChroot, c, exclude=["id", "build_id", "result_dir"]) for c in build.build_chroots] 237 for chroot in fbuild.build_chroots: 238 chroot.result_dir = '{:08}-{}'.format(fbuild.id, fpackage.name) 239 chroot.status = StatusEnum("forked") 240 db.session.add(fbuild) 241 return fbuild242
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 | http://epydoc.sourceforge.net |