0001
0002
0003
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
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
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
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()