84
|
1 #!/usr/bin/env python
|
|
2
|
|
3 """
|
|
4 serve directory with decoupage, e.g.
|
|
5
|
|
6 ``decoupage --port 8080 /home/jhammel/tmp``
|
|
7
|
|
8 If the directory is not specified, the current working directory is used
|
|
9 """
|
|
10
|
|
11 import optparse
|
|
12 import os
|
|
13 import sys
|
|
14
|
|
15 from .web import Decoupage
|
|
16 from wsgiref import simple_server
|
|
17
|
|
18 here = os.path.dirname(os.path.realpath(__file__))
|
|
19
|
|
20 def DecoupageServer(object):
|
|
21 """serve locally with decoupage"""
|
|
22 def __init__(self):
|
|
23 raise NotImplementedError("Do I need this?")
|
|
24
|
|
25 def main(args=sys.argv[1:]):
|
|
26
|
|
27 # parse command line options
|
|
28 usage = '%prog [options]'
|
|
29 parser = optparse.OptionParser(usage=usage, description=__doc__)
|
|
30 parser.add_option('-p', '--port', dest='port',
|
|
31 type='int', default=1977,
|
|
32 help="port to serve on [DEFAULT: %default]")
|
|
33 parser.add_option('--no-reload', dest='auto_reload',
|
|
34 action='store_false', default=True,
|
|
35 help="do not dynamically refresh indices")
|
|
36 options, args = parser.parse_args(args)
|
|
37 if not args:
|
|
38 directory = os.getcwd()
|
|
39 elif len(args) == 1:
|
|
40 directory = args[0]
|
|
41 if len(args) > 1:
|
|
42 # TODO:
|
|
43 # allow multiple directories with mount points
|
|
44 # e.g. `decoupage [options] directory [directory2=/foo] [...]`
|
|
45 # This may be done by creating a temporary directory with appropriate
|
|
46 # symbolic links (on OSes that allow them)
|
|
47
|
|
48 parser.print_help()
|
|
49 parser.exit(1)
|
|
50
|
|
51 if not os.path.isdir(directory):
|
|
52 raise ("'%s' is not a directory" % directory)
|
|
53
|
|
54 # TODO:
|
|
55 # - allow CLI specification of formatters
|
|
56 # - template specification
|
|
57
|
|
58 # create WSGI app
|
|
59 app = Decoupage(directory=directory,
|
|
60 auto_reload=options.auto_reload)
|
|
61
|
|
62
|
|
63 # create server
|
|
64 # TODO: allow choice amongst server classes
|
|
65 address = '127.0.0.1'
|
|
66 server = simple_server.make_server(address, options.port, app)
|
|
67 print 'serving directory %s ( %s ) at \nhttp://%s:%d/' % (directory,
|
|
68 'file://' + directory, # XXX
|
|
69 address,
|
|
70 options.port)
|
|
71
|
|
72 try:
|
|
73 server.serve_forever()
|
|
74 except KeyboardInterrupt:
|
|
75 pass
|
|
76
|
|
77 if __name__ == '__main__':
|
|
78 main()
|