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   
9 -class BuildWrapper(object):
10 - def __init__(self, build):
11 """ 12 :arg build: copr.models.Build 13 """ 14 self.build = build
15
16 - def to_dict(self):
17 out = {} 18 for field in ["id", "pkg_version", "status", "state", 19 "canceled", "repos", "submitted_on", "started_on", 20 "ended_on", "results", "memory_reqs", "timeout"]: 21 out[field] = getattr(self.build, field, None) 22 23 out["src_pkg"] = self.build.pkgs 24 build_packages = self.build.built_packages 25 if build_packages: 26 out["built_packages"] = build_packages.split("\n") 27 else: 28 out["built_packages"] = [] 29 30 return out
31 32
33 -class MonitorWrapper(object):
34 - def __init__(self, copr, monitor_data):
35 """ 36 Params 37 ------ 38 copr : copr for which we want to get monitor data 39 monitor_data : list(tuple(package, build, build_chroot, mock_chroot)) 40 the list must be ordered by package (!) 41 """ 42 self.copr = copr 43 self.monitor_data = monitor_data
44
45 - def wrap_package(self, package, builds_data):
46 """Converts single package to the API format. 47 48 Params 49 ------ 50 package : Package instance 51 builds_data : dict(build_chroot.name : dict(build, build_chroot, mock_chroot)) 52 53 Returns 54 ------- 55 dict(pkg_name, pkg_version, results) 56 pkg_name : name of package 57 pkg_version : None 58 results : dict(build_id, status, pkg_version) 59 """ 60 results = {} 61 62 for chroot in self.copr.active_chroots: 63 if chroot.name in builds_data: 64 results[chroot.name] = { 65 "build_id": builds_data[chroot.name]['build'].id, 66 "status": builds_data[chroot.name]['build_chroot'].state, 67 "pkg_version": builds_data[chroot.name]['build'].pkg_version 68 } 69 else: 70 results[chroot.name] = None 71 72 return {"pkg_name": package.name, "pkg_version": None, "results": results}
73
74 - def render_packages(self):
75 """ 76 NOTE: individual records for the same package in must be "grouped" together in self.monitor_data 77 """ 78 packages = [] 79 builds_data = {} 80 current_package = None 81 82 for package, build, build_chroot, mock_chroot in self.monitor_data: 83 if package != current_package: 84 if current_package: 85 packages.append(self.wrap_package(current_package, builds_data)) 86 current_package = package 87 builds_data = {} 88 builds_data[build_chroot.name] = {"build": build, "build_chroot": build_chroot, "mock_chroot": mock_chroot} 89 packages.append(self.wrap_package(current_package, builds_data)) 90 91 return packages
92
93 - def to_dict(self):
94 return { 95 "chroots": map(lambda x: x.name, self.copr.active_chroots_sorted), 96 "builds": [BuildWrapper(build).to_dict() for build in self.copr.builds], 97 "packages": self.render_packages() 98 }
99