1 """
2 This module contains logic for Copr API.
3
4 xWrapper classes add helper methods
5 to [de]serialize model instances for API views.
6 """
7
8 from coprs.helpers import StatusEnum
9
12 """
13 :arg build: copr.models.Build
14 """
15 self.build = build
16
18 out = {}
19 for field in ["id", "pkg_version", "status", "state",
20 "canceled", "repos", "submitted_on", "started_on",
21 "ended_on", "results", "memory_reqs", "timeout"]:
22 out[field] = getattr(self.build, field, None)
23
24 out["src_pkg"] = self.build.pkgs
25 build_packages = self.build.built_packages
26 if build_packages:
27 out["built_packages"] = build_packages.split("\n")
28 else:
29 out["built_packages"] = []
30
31 return out
32
33
36 """
37 Params
38 ------
39 copr : copr for which we want to get monitor data
40 monitor_data : list(tuple(package, build, build_chroot, mock_chroot))
41 the list must be ordered by package (!)
42 """
43 self.copr = copr
44 self.monitor_data = monitor_data
45
47 """
48 NOTE: individual records for the same package must be "grouped" together in self.monitor_data
49 """
50 packages = []
51 results = {}
52 current_package_id = None
53
54 for row in self.monitor_data:
55 if row["package_id"] != current_package_id:
56 if current_package_id:
57 packages.append({ "pkg_name": row["package_name"], "pkg_version": None, "results": results })
58 current_package_id = row["package_id"]
59 results = {}
60
61 build_chroot_name = "{}-{}-{}".format(row["mock_chroot_os_release"], row["mock_chroot_os_version"], row["mock_chroot_arch"])
62 if build_chroot_name in [chroot.name for chroot in self.copr.active_chroots]:
63 results[build_chroot_name] = { "build_id": row["build_id"], "status": StatusEnum(row["build_chroot_status"]), "pkg_version": row["build_pkg_version"] }
64
65 packages.append({ "pkg_name": row["package_name"], "pkg_version": None, "results": results })
66 return packages
67
74