view licenser/main.py @ 0:b0665b243ccd

initial import of licenser
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 10 May 2010 09:18:26 -0700
parents
children cc5add25bf83
line wrap: on
line source

#!/usr/bin/env python
"""
adds licenses to python packages
"""

import os
import sys
from optparse import OptionParser
from pkg_resources import iter_entry_points

def license_list(debug=False):
    licenses = {}
    for entry_point in iter_entry_points():
        try:
            license = entry_point.load()
        except:
            if debug:
                import pdb; pdb.set_trace()
            else:
                print >> sys.stderr, "Couldn't load license '%s'" % entry_point.name
                continue
        licenses[entry_point.name] = license
    return licenses

def isempty(path):
    """
    determines if a python file is empty;  that is, contains only comments
    """
    for line in file(path, 'r').readlines():
        line = line.strip()
        if line and line[0] != '#':
            return False
    return True

def files(directory):
    files = set()
    for dirpath, _, filenames in os.walk(directory):
        for f in filenames:
            if f.endswith('.py'): # could use os.path.splitext()
                path = os.path.join(dirpath, f)
                if not isempty(path):
                    files.add(path)
    return files

def main(args=sys.argv[1:]):
    usage = '%prog [options] directory'
    parser = OptionParser(usage, description=__doc__)
    parser.add_option('-l', '--license',
                      help="license to use")
    parser.add_option('--list', action='store_true', default=False,
                      help="list available licenses")
    options, args = parser.parse_args(args)

    licenses = license_list()

    if options.list: # list the licenses
        for i in licenses:
            pass
        sys.exit(0)

    if not options.license:
        parser.error("Must specify --license")

    for directory in args:
        filelist = files(directory)

if __name__ == '__main__':
    main()