def test_get_relative_path(self): path = "./test/test.html" parent = "./" relative_path = xutils.get_relative_path(path, parent) self.assertEqual("test/test.html", relative_path) path = "./test.html" parent = "./" relative_path = xutils.get_relative_path(path, parent) self.assertEqual("test.html", relative_path) path = "./test/test.html" parent = "./test" relative_path = xutils.get_relative_path(path, parent) self.assertEqual("test.html", relative_path)
def get_line_infos(self, path, recursive=False, type=None, skip_func = lambda fname: False): line_infos = [] filter_text = self.filter_text ext_list = None if type is not None: ext_list = CODE_EXT_DICT.get(type) if ext_list is None: ext_list = CODE_EXT_LIST for root, dirs, files in os.walk(path): # if root.startswith(blacklist): # # print(root,"is in blacklist") # continue for fname in files: fpath = os.path.join(root, fname) relative_path = xutils.get_relative_path(fpath, path) if skip_func(relative_path): continue _, ext = os.path.splitext(fname) if ext not in ext_list: continue try: text = xutils.readfile(fpath) if len(text) == 0: continue except: line_infos.append(LinesInfo(fpath)) continue if filter_text not in text: continue lines = text.count("\n") + 1 # 换行符数量+1,最后一行有效 blanklines = 0 for line in text.split("\n"): line = line.strip() if line == "": blanklines+=1 line_infos.append(LinesInfo(fpath, lines, blanklines = blanklines, root=path)) if not recursive: break total_lines = 0 total_blanks = 0 for info in line_infos: total_lines += info.lines total_blanks += info.blanklines total = LinesInfo("Total", total_lines, blanklines = total_blanks) total.fname = None if self.lines_sort: line_infos.sort(key = lambda info: -info.lines) else: line_infos.sort(key = lambda info: info.display_name) line_infos.insert(0, total) return line_infos
def __init__(self, fname, lines=0, comments=0, blanklines=0, root=None): super(LinesInfo, self).__init__() self.fname = fname self.lines = lines self.comments = comments self.blanklines = blanklines self.validlines = lines - blanklines self.display_name = fname if root: self.root = root self.display_name = xutils.get_relative_path(fname, root)
def get_webpath(fpath): rpath = xutils.get_relative_path(fpath, xconfig.DATA_DIR) return "/data/" + rpath
def get_display_name(fpath, parent): path = xutils.get_relative_path(fpath, parent) return xutils.unquote(path)