|
|
|
|
|
import py |
|
|
curdir = py.path.local() |
|
|
def nodot(p): |
return p.check(dotfile=0) |
|
class FileCounter(object): |
def __init__(self): |
self.file2numlines = {} |
self.numlines = 0 |
self.numfiles = 0 |
|
def addrecursive(self, directory, fil="*.py", rec=nodot): |
for x in directory.visit(fil, rec): |
self.addfile(x) |
|
def addfile(self, fn, emptylines=False): |
if emptylines: |
s = len(p.readlines()) |
else: |
s = 0 |
for i in fn.readlines(): |
if i.strip(): |
s += 1 |
self.file2numlines[fn] = s |
self.numfiles += 1 |
self.numlines += s |
|
def getnumlines(self, fil): |
numlines = 0 |
for path, value in self.file2numlines.items(): |
if fil(path): |
numlines += value |
return numlines |
|
def getnumfiles(self, fil): |
numfiles = 0 |
for path in self.file2numlines: |
if fil(path): |
numfiles += 1 |
return numfiles |
|
def get_loccount(locations=None): |
if locations is None: |
localtions = [py.path.local()] |
counter = FileCounter() |
for loc in locations: |
counter.addrecursive(loc, '*.py', rec=nodot) |
|
def istestfile(p): |
return p.check(fnmatch='test_*.py') |
isnottestfile = lambda x: not istestfile(x) |
|
numfiles = counter.getnumfiles(isnottestfile) |
numlines = counter.getnumlines(isnottestfile) |
numtestfiles = counter.getnumfiles(istestfile) |
numtestlines = counter.getnumlines(istestfile) |
|
return counter, numfiles, numlines, numtestfiles, numtestlines |
|
def countloc(paths=None): |
if not paths: |
paths = ['.'] |
locations = [py.path.local(x) for x in paths] |
(counter, numfiles, numlines, numtestfiles, |
numtestlines) = get_loccount(locations) |
|
items = counter.file2numlines.items() |
items.sort(lambda x,y: cmp(x[1], y[1])) |
for x, y in items: |
print "%3d %30s" % (y,x) |
|
print "%30s %3d" %("number of testfiles", numtestfiles) |
print "%30s %3d" %("number of non-empty testlines", numtestlines) |
print "%30s %3d" %("number of files", numfiles) |
print "%30s %3d" %("number of non-empty lines", numlines) |
|