def handle_file(self, file_name): """ Handle a file :param file_name: The filename to process :return: None """ dir_name = os.path.dirname(file_name.path) basename = os.path.basename(file_name.path) path = CC_BASE + self.ROOT_PATH + "/" + os.path.abspath(dir_name) path = path.replace('//', '/') if not os.path.exists(path): os.makedirs(path) open_file = open(os.path.join(path, basename + HTML.FILE_EXT), "w") source_data = File.read_file(self.script_base + file_name.path) last_pos = dir_name.rfind("/") html_link = HTML.get_link(CC_BASE, "root", "") + \ HTML.get_link(path, dir_name[last_pos + 1:], basename) open_file.write(HTML.get_header(html_link, HTML.SRC_PREFIX)) processing_line = 1 previous_line_is_continued = False for line in source_data.splitlines(): line = line.decode("utf-8") line = line.replace("&", "&") line = line.replace(">", ">") line = line.replace("<", "<") line = line.replace('"', '"') line_covered = processing_line in file_name.lines and \ Code.line_is_code(line) or \ processing_line > 1 and \ previous_line_is_continued if line_covered: span_class = "covered" elif Code.line_is_code(line): span_class = "not_covered" else: span_class = "not_code" line_to_save = HTML.get_html( HTML.LINE_SOURCE) % (processing_line, span_class, line) open_file.write(line_to_save) previous_line_is_continued = True if line.endswith("\\") else False processing_line = processing_line + 1 open_file.write( HTML.get_html(HTML.SRC_SUFFIX) + HTML.get_footer( file_name.total_lines, file_name.covered_lines, False))
def handle_files(self): """ Process files :return: None """ if not self.files: return total_lines = 0 covered_lines = 0 dirs = {} for file_ in self.files: Statistics.calculate(file_) dir_name = os.path.dirname(file_.path) if dir_name not in dirs: dirs[dir_name] = Folder(dir_name) dirs[dir_name].add_file(file_) for dir_ in dirs.values(): total_lines = total_lines + dir_.total_lines covered_lines = covered_lines + dir_.covered_lines open_file = open( os.path.join(CC_BASE, HTML.INDEX_FILE + HTML.FILE_EXT), "w") root_link = HTML.get_link(CC_BASE, HTML.LINK_ROOT, "") open_file.write(HTML.get_header(root_link, HTML.TABLE_HEADER)) for dir_ in dirs.values(): path = os.path.join(self.ROOT_PATH, dir_.name[1:], HTML.INDEX_FILE + HTML.FILE_EXT).replace( '//', '/') last_pos = dir_.name.rfind("/") open_file.write( HTML.get_line(path, dir_.name[last_pos + 1:], dir_.total_lines, dir_.covered_lines)) open_file.write(HTML.get_footer(total_lines, covered_lines)) open_file.close() for dir_ in dirs.values(): path = (CC_BASE + "/" + self.ROOT_PATH + dir_.name)\ .replace('//', '/') if not os.path.exists(path): os.makedirs(path) open_file = open( os.path.join(path, HTML.INDEX_FILE + HTML.FILE_EXT), "w") open_file.write( HTML.get_header(root_link + dir_.basename, HTML.TABLE_HEADER)) for file_ in dir_.files: open_file.write( HTML.get_line(file_.basename + HTML.FILE_EXT, file_.basename, file_.total_lines, file_.covered_lines)) open_file.write( HTML.get_footer(dir_.total_lines, dir_.covered_lines)) open_file.close() for file_ in self.files: self.handle_file(file_)