Package coprs :: Package logic :: Module actions_logic
[hide private]
[frames] | no frames]

Source Code for Module coprs.logic.actions_logic

  1  import json 
  2  import time 
  3  import base64 
  4  import os 
  5   
  6  from copr_common.enums import ActionTypeEnum, BackendResultEnum 
  7  from coprs import db 
  8  from coprs import models 
  9  from coprs import helpers 
 10  from coprs import exceptions 
 11  from flask import url_for 
12 13 14 -class ActionsLogic(object):
15 16 @classmethod
17 - def get(cls, action_id):
18 """ 19 Return single action identified by `action_id` 20 """ 21 22 query = models.Action.query.filter(models.Action.id == action_id) 23 return query
24 25 @classmethod
26 - def get_many(cls, action_type=None, result=None):
27 query = models.Action.query 28 if action_type is not None: 29 query = query.filter(models.Action.action_type == 30 int(action_type)) 31 if result is not None: 32 query = query.filter(models.Action.result == 33 int(result)) 34 35 return query
36 37 @classmethod
38 - def get_waiting(cls):
39 """ 40 Return actions that aren't finished 41 """ 42 43 query = (models.Action.query 44 .filter(models.Action.result == 45 BackendResultEnum("waiting")) 46 .filter(models.Action.action_type != 47 ActionTypeEnum("legal-flag")) 48 .order_by(models.Action.created_on.asc())) 49 50 return query
51 52 @classmethod
53 - def get_by_ids(cls, ids):
54 """ 55 Return actions matching passed `ids` 56 """ 57 58 return models.Action.query.filter(models.Action.id.in_(ids))
59 60 @classmethod
61 - def update_state_from_dict(cls, action, upd_dict):
62 """ 63 Update `action` object with `upd_dict` data 64 65 Updates result, message and ended_on parameters. 66 """ 67 68 for attr in ["result", "message", "ended_on"]: 69 value = upd_dict.get(attr, None) 70 if value: 71 setattr(action, attr, value) 72 73 db.session.add(action)
74 75 @classmethod
76 - def send_createrepo(cls, copr):
77 data_dict = { 78 "ownername": copr.owner_name, 79 "projectname": copr.name, 80 "project_dirnames": [copr_dir.name for copr_dir in copr.dirs], 81 "chroots": [chroot.name for chroot in copr.active_chroots], 82 } 83 action = models.Action( 84 action_type=ActionTypeEnum("createrepo"), 85 object_type="repository", 86 object_id=0, 87 data=json.dumps(data_dict), 88 created_on=int(time.time()), 89 ) 90 db.session.add(action)
91 92 @classmethod
93 - def send_delete_copr(cls, copr):
94 data_dict = { 95 "ownername": copr.owner_name, 96 "project_dirnames": [copr_dir.name for copr_dir in copr.dirs], 97 } 98 action = models.Action(action_type=ActionTypeEnum("delete"), 99 object_type="copr", 100 object_id=copr.id, 101 data=json.dumps(data_dict), 102 created_on=int(time.time())) 103 db.session.add(action)
104 105 @classmethod
106 - def send_delete_build(cls, build):
107 """ 108 Schedules build delete action 109 :type build: models.Build 110 """ 111 chroot_builddirs = {'srpm-builds': build.result_dir} 112 113 for build_chroot in build.build_chroots: 114 chroot_builddirs[build_chroot.name] = build_chroot.result_dir 115 116 data_dict = { 117 "ownername": build.copr.owner_name, 118 "projectname": build.copr_name, 119 "project_dirname": build.copr_dirname, 120 "chroot_builddirs": chroot_builddirs, 121 } 122 123 action = models.Action( 124 action_type=ActionTypeEnum("delete"), 125 object_type="build", 126 object_id=build.id, 127 data=json.dumps(data_dict), 128 created_on=int(time.time()) 129 ) 130 db.session.add(action)
131 132 @classmethod
133 - def send_cancel_build(cls, build):
134 """ Schedules build cancel action 135 :type build: models.Build 136 """ 137 for chroot in build.build_chroots: 138 if chroot.state != "running": 139 continue 140 141 data_dict = { 142 "task_id": chroot.task_id, 143 } 144 145 action = models.Action( 146 action_type=ActionTypeEnum("cancel_build"), 147 data=json.dumps(data_dict), 148 created_on=int(time.time()) 149 ) 150 db.session.add(action)
151 152 @classmethod
153 - def send_update_comps(cls, chroot):
154 """ Schedules update comps.xml action 155 156 :type copr_chroot: models.CoprChroot 157 """ 158 159 url_path = helpers.copr_url("coprs_ns.chroot_view_comps", chroot.copr, chrootname=chroot.name) 160 data_dict = { 161 "ownername": chroot.copr.owner_name, 162 "projectname": chroot.copr.name, 163 "chroot": chroot.name, 164 "comps_present": chroot.comps_zlib is not None, 165 "url_path": url_path, 166 } 167 168 action = models.Action( 169 action_type=ActionTypeEnum("update_comps"), 170 object_type="copr_chroot", 171 data=json.dumps(data_dict), 172 created_on=int(time.time()) 173 ) 174 db.session.add(action)
175 176 @classmethod
177 - def send_update_module_md(cls, chroot):
178 """ Schedules update module_md.yaml action 179 180 :type copr_chroot: models.CoprChroot 181 """ 182 url_path = helpers.copr_url("coprs_ns.chroot_view_module_md", chroot.copr, chrootname=chroot.name) 183 data_dict = { 184 "ownername": chroot.copr.owner_name, 185 "projectname": chroot.copr.name, 186 "chroot": chroot.name, 187 "module_md_present": chroot.module_md_zlib is not None, 188 "url_path": url_path, 189 } 190 191 action = models.Action( 192 action_type=ActionTypeEnum("update_module_md"), 193 object_type="copr_chroot", 194 data=json.dumps(data_dict), 195 created_on=int(time.time()) 196 ) 197 db.session.add(action)
198 199 @classmethod
200 - def send_create_gpg_key(cls, copr):
201 """ 202 :type copr: models.Copr 203 """ 204 205 data_dict = { 206 "ownername": copr.owner_name, 207 "projectname": copr.name, 208 } 209 210 action = models.Action( 211 action_type=ActionTypeEnum("gen_gpg_key"), 212 object_type="copr", 213 data=json.dumps(data_dict), 214 created_on=int(time.time()), 215 ) 216 db.session.add(action)
217 218 @classmethod
219 - def send_rawhide_to_release(cls, data):
220 action = models.Action( 221 action_type=ActionTypeEnum("rawhide_to_release"), 222 object_type="None", 223 data=json.dumps(data), 224 created_on=int(time.time()), 225 ) 226 db.session.add(action)
227 228 @classmethod
229 - def send_fork_copr(cls, src, dst, builds_map):
230 """ 231 :type src: models.Copr 232 :type dst: models.Copr 233 :type builds_map: dict where keys are forked builds IDs and values are IDs from the original builds. 234 """ 235 236 action = models.Action( 237 action_type=ActionTypeEnum("fork"), 238 object_type="copr", 239 old_value="{0}".format(src.full_name), 240 new_value="{0}".format(dst.full_name), 241 data=json.dumps({"user": dst.owner_name, "copr": dst.name, "builds_map": builds_map}), 242 created_on=int(time.time()), 243 ) 244 db.session.add(action)
245 246 @classmethod
247 - def send_build_module(cls, copr, module):
248 """ 249 :type copr: models.Copr 250 :type modulemd: str content of module yaml file 251 """ 252 253 data = { 254 "chroots": [c.name for c in copr.active_chroots], 255 "builds": [b.id for b in module.builds], 256 } 257 258 action = models.Action( 259 action_type=ActionTypeEnum("build_module"), 260 object_type="module", 261 object_id=module.id, 262 old_value="", 263 new_value="", 264 data=json.dumps(data), 265 created_on=int(time.time()), 266 ) 267 db.session.add(action)
268