Mercurial > hg > decoupage
diff decoupage/cli.py @ 84:95820b36d7e3
cli client
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Sat, 28 Dec 2013 18:12:16 -0800 |
parents | |
children | 3262010f7f79 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/decoupage/cli.py Sat Dec 28 18:12:16 2013 -0800 @@ -0,0 +1,78 @@ +#!/usr/bin/env python + +""" +serve directory with decoupage, e.g. + +``decoupage --port 8080 /home/jhammel/tmp`` + +If the directory is not specified, the current working directory is used +""" + +import optparse +import os +import sys + +from .web import Decoupage +from wsgiref import simple_server + +here = os.path.dirname(os.path.realpath(__file__)) + +def DecoupageServer(object): + """serve locally with decoupage""" + def __init__(self): + raise NotImplementedError("Do I need this?") + +def main(args=sys.argv[1:]): + + # parse command line options + usage = '%prog [options]' + parser = optparse.OptionParser(usage=usage, description=__doc__) + parser.add_option('-p', '--port', dest='port', + type='int', default=1977, + help="port to serve on [DEFAULT: %default]") + parser.add_option('--no-reload', dest='auto_reload', + action='store_false', default=True, + help="do not dynamically refresh indices") + options, args = parser.parse_args(args) + if not args: + directory = os.getcwd() + elif len(args) == 1: + directory = args[0] + if len(args) > 1: + # TODO: + # allow multiple directories with mount points + # e.g. `decoupage [options] directory [directory2=/foo] [...]` + # This may be done by creating a temporary directory with appropriate + # symbolic links (on OSes that allow them) + + parser.print_help() + parser.exit(1) + + if not os.path.isdir(directory): + raise ("'%s' is not a directory" % directory) + + # TODO: + # - allow CLI specification of formatters + # - template specification + + # create WSGI app + app = Decoupage(directory=directory, + auto_reload=options.auto_reload) + + + # create server + # TODO: allow choice amongst server classes + address = '127.0.0.1' + server = simple_server.make_server(address, options.port, app) + print 'serving directory %s ( %s ) at \nhttp://%s:%d/' % (directory, + 'file://' + directory, # XXX + address, + options.port) + + try: + server.serve_forever() + except KeyboardInterrupt: + pass + +if __name__ == '__main__': + main()