diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-17 13:57:23 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-17 13:57:23 -0400 |
commit | 237d2159faac7dadb0232e35f7016588db568808 (patch) | |
tree | 19482c130efee570b7e985121dbf372b6965db50 /cbc/cli/server.py | |
parent | 16a6d3d6c9495d3a67d74835f1d25329418ba832 (diff) | |
download | cbc-237d2159faac7dadb0232e35f7016588db568808.tar.gz |
Restructuring and setuptools integration1.0
Diffstat (limited to 'cbc/cli/server.py')
-rw-r--r-- | cbc/cli/server.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/cbc/cli/server.py b/cbc/cli/server.py new file mode 100644 index 0000000..9661f4a --- /dev/null +++ b/cbc/cli/server.py @@ -0,0 +1,53 @@ +import argparse +import os +import http.server +import socketserver +import socket +from threading import Thread + +class Server(socketserver.ThreadingTCPServer): + allow_reuse_address = True + + +class FileServer(object): + def __init__(self, port, root=os.path.abspath(os.curdir), run=False): + if isinstance(port, str): + port = int(port) + + self.root = root + self.port = port + self.handler = http.server.SimpleHTTPRequestHandler + self.httpd = None + + if run: + self.run() + + def run(self, forever=False): + os.chdir(self.root) + socketserver.TCPServer.allow_reuse_address = True + self.httpd = Server(('localhost', self.port), self.handler, True) + print('{0} active on port {1} ({2})'.format(self.__class__.__name__, self.port, self.root)) + if not forever: + self.httpd.handle_request() + else: + self.httpd.serve_forever() + self.close() + + def close(self): + self.httpd.server_close() + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('-r', '--root', default=os.path.abspath(os.curdir), help='Path to files') + parser.add_argument('-p', '--port', type=int, default=8888, help='TCP port') + parser.add_argument('-s', '--single', action='store_false') + args = parser.parse_args() + + fileserver = FileServer(args.port, args.root) + fileserver.run(forever=args.single) + + +if __name__ == '__main__': + main() + |