Package backend :: Module job
[hide private]
[frames] | no frames]

Source Code for Module backend.job

  1  import copy 
  2  import os 
3 4 5 -class BuildJob(object):
6
7 - def __init__(self, task_data, worker_opts):
8 """ 9 Creates build job object 10 :param dict task_dict: dictionary with the following fields 11 (based frontend.models.Build):: 12 13 - pkgs: list of space separated urls of packages to build 14 - repos: list of space separated additional repos 15 - timeout: maximum allowed time of build, build will fail if exceeded # unused 16 - project_owner: 17 - project_name: 18 - submitter: 19 20 :param dict worker_opts: worker options, fields:: 21 22 - destdir: worker root directory to store results 23 - results_baseurl: root url to stored results 24 - timeout: default worker timeout 25 26 """ 27 28 self.timeout = worker_opts.timeout 29 self.memory_reqs = None 30 self.enable_net = True 31 32 self.project_owner = None 33 self.project_name = None 34 self.submitter = None 35 36 self.ended_on = None 37 self.started_on = None 38 self.submitted_on = None 39 40 self.status = None 41 self.chroot = None 42 43 self.buildroot_pkgs = None 44 45 # TODO: validate update data 46 for key, val in task_data.items(): 47 key = str(key) 48 setattr(self, key, val) 49 50 self.pkg = task_data["pkgs"] 51 del self.pkgs # better to produce error, than use it blindly 52 53 self.repos = [r for r in task_data["repos"].split(" ") if r.strip()] 54 self.build_id = task_data["build_id"] 55 56 self.destdir = os.path.normpath(os.path.join( 57 worker_opts.destdir, 58 task_data["project_owner"], 59 task_data["project_name"] 60 )) 61 62 self.results = u"/".join([ 63 worker_opts.results_baseurl, 64 task_data["project_owner"], 65 task_data["project_name"] + "/" 66 ]) 67 68 self.pkg_main_version = "" 69 self.pkg_epoch = None 70 self.pkg_release = None 71 72 self.built_packages = ""
73 74 @property
75 - def pkg_name(self):
76 mb_name = self.pkg.split("/")[-1] 77 if mb_name: 78 mb_name = mb_name.replace(".src.rpm", "") 79 return mb_name 80 else: 81 return self.pkg
82
83 - def update(self, data_dict):
84 """ 85 86 :param dict data_dict: 87 """ 88 # TODO: validate update data 89 self.__dict__.update(data_dict)
90
91 - def to_dict(self):
92 """ 93 94 :return dict: dictified build job 95 """ 96 result = copy.deepcopy(self.__dict__) 97 result["id"] = self.build_id 98 result["pkg_version"] = self.pkg_version 99 100 return result
101 102 @property
103 - def pkg_version(self):
104 """ 105 Canonical version presentation release and epoch 106 "{epoch}:{version}-{release}" 107 """ 108 if self.pkg_main_version is None: 109 return None 110 if self.pkg_epoch: 111 full_version = "{}:{}".format(self.pkg_epoch, self.pkg_main_version) 112 else: 113 full_version = "{}".format(self.pkg_main_version) 114 115 if self.pkg_release: 116 full_version += "-{}".format(self.pkg_release) 117 return full_version
118
119 - def __str__(self):
120 return str(self.__unicode__())
121
122 - def __unicode__(self):
123 return u"BuildJob<id: {build_id}, owner: {project_owner}, " \ 124 u"project: {project_name}, source pkg : {pkg} >".format(**self.__dict__)
125