1 import copy
2 import os
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
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
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
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
84 """
85
86 :param dict data_dict:
87 """
88
89 self.__dict__.update(data_dict)
90
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
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
121
123 return u"BuildJob<id: {build_id}, owner: {project_owner}, " \
124 u"project: {project_name}, source pkg : {pkg} >".format(**self.__dict__)
125