# -*- coding: utf-8 -*- # Copyright John N. Laliberte # Copyright Ben de Groot # LICENSE - GPL2 import package_module, time, clioptions_module, gnome_module, os, cgi class Output: def __init__(self, packages, to_calculate): self.packages = packages if to_calculate: self.calculate_stats() def calculate_stats(self): # variables to hold for stats total_packs = len(self.packages) self.update_needed = float(0) self.compliant = float(0) self.not_found = float(0) self.newer = float(0) for package in self.packages: if package.status == package_module.Status.Compliant: self.compliant += 1 elif package.status == package_module.Status.NewerVersion: self.newer += 1 elif package.status == package_module.Status.NotFound: self.not_found += 1 elif package.status == package_module.Status.NeedUpdate: self.update_needed += 1 try: self.update_percent = float(self.update_needed / total_packs) * 100 except ZeroDivisionError: self.update_percent = 0 try: self.compliant_percent = float(self.compliant / total_packs) * 100 except ZeroDivisionError: self.compliant_percent = 0 try: self.notfound_percent = float(self.not_found / total_packs) * 100 except ZeroDivisionError: self.notfound_percent = 0 try: self.total_percent = float( (self.update_needed + self.not_found ) / total_packs ) * 100 except ZeroDivisionError: self.total_percent = 0 def generate_html(self): # now we have all the results in the results list. # just time to generate some kind of "useful" output. # for now, lets just make a html file. ( using html5 and css ) # name, portage_version, gnome_version, status <-- is whats in the PackageUpdate object current_time = str(time.asctime(time.localtime())) lines = [] # header lines.append('') lines.append("") lines.append('') lines.append(' ') lines.append(' Xorg Progress Table') lines.append(' ') lines.append('') lines.append("") lines.append("

Xorg Progress Table

") lines.append("

Contact " + cgi.escape(os.environ["ECHANGELOG_USER"]) + " if anything is not correct.

") lines.append("

Generated date: " + current_time + "

") # stats lines.append('
') lines.append("

Compliant Packages: " + str('%0.2f' % self.compliant_percent)+ "%" + " Number = " + str(self.compliant) + "

") lines.append("

Packages that need to be updated: " + str('%0.2f' % self.update_percent)+ "%" + " Number = " + str(self.update_needed) + "

") lines.append("

New Packages that need to be added: " + str('%0.2f' % self.notfound_percent)+ "%" + " Number = " + str(self.not_found) + "

") lines.append("
") lines.append('') lines.append('') lines.append('') lines.append('') # data for package in self.packages: if package.status == package_module.Status.NeedUpdate: lines.append('') # "red" elif package.status == package_module.Status.StableNeedUpdate: lines.append('') # "blue" elif package.status == package_module.Status.Compliant: lines.append('') # "green" elif package.status == package_module.Status.NotFound: lines.append('') # "grey" elif package.status == package_module.Status.NewerVersion: lines.append('') # "yellow" lines.append('") lines.append('") lines.append("") lines.append("") lines.append("") lines.append("") lines.append("
Package NameStableTestingOfficialLatest
' + str(package.name) + "' + str(package.stable_version) + "" + str(package.portage_version) + "" + str(package.gnome_version) + "" + str(package.latest_version) + "
") # footer lines.append("

Official Version: Latest stable Xorg released individual packages.

") lines.append("

Latest Version: Latest available Xorg released individual packages, including the snapshots.

") lines.append("") self.write_file(lines, clioptions_module.Options().get_arguments().output) print "Generated html output." def generate_keywords(self): lines = [] for package in self.packages: package_string = package.category + "/" + package.name + "-" + package.version # only append revision if its not -r0 if "r0" != package.revision: package_string += "-" + package.revision lines.append("=" + package_string) self.write_file(lines, "package.keywords") print "Generate package.keywords output." def write_file(self, lines, filename): file = open(filename, "w") file.writelines(x +'\n' for x in lines) file.flush() file.close() del file