0001#!/usr/bin/python
0002
0003# This module provides the "kidc" command
0004
0005"""Usage: kidc [OPTIONS] [file...]
0006Compile kid templates into Python byte-code (.pyc) files.
0007
0008OPTIONS:
0009
0010  -f, --force
0011          Force compilation even if .pyc file already exists.
0012  -s, --source
0013          Generate .py source files along with .pyc files.
0014          This is sometimes useful for debugging.
0015  -d, --strip-dest-dir <destdir>
0016          Strips the supplied path from the beginning of source
0017          filenames stored for error messages in the generated
0018          .pyc files
0019
0020The file list may have files and/or directories. If a directory is specified,
0021all .kid files found in the directory and any sub-directories are compiled.
0022"""
0023
0024__revision__ = "$Rev: 139 $"
0025__date__ = "$Date: 2005-03-14 19:28:22 -0500 (Mon, 14 Mar 2005) $"
0026__author__ = "Ryan Tomayko (rtomayko@gmail.com)"
0027__copyright__ = "Copyright 2004-2005, Ryan Tomayko"
0028__license__ = "MIT <http://www.opensource.org/licenses/mit-license.php>"
0029
0030import sys
0031from os.path import isdir
0032from getopt import getopt, GetoptError as gerror
0033
0034import kid.compiler
0035
0036def main():
0037    # get options
0038    try:
0039        opts, args = getopt(sys.argv[1:], 'fshd=', ['force', 'source', 'help', 'strip-dest-dir='])
0040    except gerror, msg:
0041        sys.stderr.write(str(e) + '\n')
0042        sys.stdout.write(__doc__)
0043        sys.exit(2)
0044    force = 0
0045    source = 0
0046    strip_dest_dir = None
0047    for o, a in opts:
0048        if o in ('-f', '--force'):
0049            force = True
0050        elif o in ('-s', '--source'):
0051            source = True
0052        elif o in ('-h', '--help'):
0053            sys.stdout.write(__doc__)
0054            sys.exit(0)
0055        elif o in ('-d', '--strip-dest-dir'):
0056            strip_dest_dir = a
0057    files = args
0058
0059    if not files:
0060        sys.stderr.write('kidc: No kid template specified.\n')
0061        sys.stderr.write("      Try 'kidc --help' for usage information.\n")
0062        sys.exit(2)
0063
0064    # a quick function for printing results
0065    def print_result(rslt):
0066        (rslt, file) = rslt
0067        if rslt == True:
0068            msg = 'compile: %s\n' % file
0069        elif rslt == False:
0070            msg = 'fresh: %s\n' % file
0071        else:
0072            msg = 'error: %s (%s)\n' % (file, rslt)
0073        sys.stderr.write(msg)
0074
0075    # run through files and compile
0076    for f in files:
0077        if isdir(f):
0078            for rslt in kid.compiler.compile_dir(f, force=force, source=source, strip_dest_dir=strip_dest_dir):
0079                print_result(rslt)
0080        else:
0081            kid.compiler.compile_file(f, force=force, source=source, strip_dest_dir=strip_dest_dir)
0082            print_result((True, f))
0083
0084if __name__ == '__main__':
0085    main()