#! /usr/bin/env python

import os
import subprocess
from abjad.tools import iotools


def _count_source_lines():

    source_lines = 0
    source_modules = 0
    test_lines = 0
    test_modules = 0

    for root, dirs, files  in os.walk('.'):
      
        if '.svn' in dirs:
            dirs.remove('.svn')

        modules = [x for x in files if x.endswith('.py')]
        for module in modules:
            command = 'cat {} | wc -l'.format(os.path.join(root, module))
            process = subprocess.Popen(
                command,
                shell=True,
                stdout=subprocess.PIPE,
                )
            out, err = process.communicate()
            lines = int(out.partition('\n')[0])
            if module.startswith('test_'):
                test_lines += lines
                test_modules += 1
            else:
                source_lines += lines
                source_modules += 1

    return source_modules, source_lines, test_modules, test_lines

def _report(source_modules, source_lines, test_modules, test_lines):

    print 'source_modules: %s' % source_modules
    print 'test_modules:   %s' % test_modules

    print ''
    print 'source_lines:   %s' % source_lines
    print 'test_lines:     %s' % test_lines

    print ''
    print 'total lines:    %s' % (source_lines + test_lines)
    try:
        ratio = test_lines / float(source_lines)
    except ZeroDivisionError:
        ratio = 1
    print 'test-to-source ratio is %s : 1' % round(ratio, 1)  
    print ''

if __name__ == '__main__':
    iotools.clear_terminal()
    _report(*_count_source_lines())
