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

Source Code for Module coprs.logic.api_logic

 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   
10 -class BuildWrapper(object):
11 - def __init__(self, build):
12 """ 13 :arg build: copr.models.Build 14 """ 15 self.build = build
16
17 - def to_dict(self):
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
34 -class MonitorWrapper(object):
35 - def __init__(self, copr, monitor_data):
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
46 - def render_packages(self):
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
68 - def to_dict(self):
69 return { 70 "chroots": map(lambda x: x.name, self.copr.active_chroots_sorted), 71 "builds": [BuildWrapper(build).to_dict() for build in self.copr.builds], 72 "packages": self.render_packages() 73 }
74