1.1 --- a/server/server.py Sat Oct 08 01:05:50 2011 +0200
1.2 +++ b/server/server.py Sun Dec 11 02:27:29 2011 +0100
1.3 @@ -1,36 +1,49 @@
1.4 -#!/usr/bin/python
1.5 +#! /usr/bin/env python3
1.6 +"""
1.7 +Name: Machine Server
1.8 +Author: Eugen Sawin <sawine@me73.com>
1.9 +"""
1.10
1.11 from argparse import ArgumentParser
1.12 +from http.server import BaseHTTPRequestHandler, HTTPServer
1.13 +import socketserver
1.14 +from urllib.parse import urlparse
1.15 +import logging
1.16 +
1.17 +ENCODING = "utf-8"
1.18 +
1.19
1.20 def parse_args():
1.21 parser = ArgumentParser(description="")
1.22 - parser.add_argument("port", type=int, help="port")
1.23 - parser.add_argument("-a", help="host address")
1.24 + parser.add_argument("-p", type=int, default=8080, help="port")
1.25 + parser.add_argument("-a", default="localhost", help="host address")
1.26 + parser.add_argument("-l", default="log/server.log", help="log file")
1.27 return parser.parse_args()
1.28
1.29 +
1.30 def main():
1.31 args = parse_args()
1.32 - port = args.port
1.33 - server = Server("localhost", port, GetHandler)
1.34 + logging.basicConfig(filename=args.l, level=logging.DEBUG,
1.35 + format="[%(levelname)s @ %(asctime)s] %(message)s",
1.36 + datefmt="%d.%m.%Y %I:%M:%S")
1.37 + server = Server(args.a, args.p, GetHandler)
1.38 server.run()
1.39
1.40 -from BaseHTTPServer import BaseHTTPRequestHandler
1.41 -from BaseHTTPServer import HTTPServer
1.42 -import SocketServer
1.43 -import urlparse
1.44
1.45 class GetHandler(BaseHTTPRequestHandler):
1.46 +
1.47 def do_GET(self):
1.48 + logging.debug("Received query: %s" % self.path)
1.49 + request = Request(self.path)
1.50 + logging.info("Request: %s" % request)
1.51 if self.path == "/":
1.52 self.path = "/machine.html"
1.53 -
1.54 - parsed_path = urlparse.urlparse(self.path)
1.55 - message = '\n'.join(("client: %s:%i" % self.client_address,
1.56 + parsed_path = urlparse(self.path)
1.57 + message = "\n".join(("client: %s:%i" % self.client_address,
1.58 "path: %s" % parsed_path.path,
1.59 "query: %s" % parsed_path.query,
1.60 "params: %s" % parsed_path.params))
1.61 - self.send_response(200)
1.62 -
1.63 + self.send_response(200)
1.64 resource = True
1.65 if parsed_path.path.endswith(".html"):
1.66 self.send_header("Content-type", "text/html")
1.67 @@ -42,20 +55,50 @@
1.68 self.send_header("Content-type", "application/json")
1.69 resource = False
1.70 self.end_headers()
1.71 + if resource:
1.72 + self.wfile.write(bytes(open("../client" + parsed_path.path).read(), ENCODING))
1.73 + else:
1.74 + self.wfile.write(bytes("{'time': 73}", ENCODING))
1.75
1.76 - if resource:
1.77 - self.wfile.write(open("../client" + parsed_path.path).read())
1.78 - else:
1.79 - self.wfile.write("{\"time\": 73}")
1.80
1.81 class Server(HTTPServer):
1.82 +
1.83 def __init__(self, host, port, handler):
1.84 HTTPServer.__init__(self, (host, port), handler)
1.85 self.host = host
1.86 self.port = port
1.87 +
1.88 def run(self):
1.89 + logging.info("Server ready and listening at port %i." % self.port)
1.90 self.serve_forever()
1.91
1.92 +class Request:
1.93 +
1.94 + _request_types = {"help": []}
1.95 +
1.96 + def __init__(self, query):
1.97 + self.args = {}
1.98 + pos = query.find("?")
1.99 + if pos == -1:
1.100 + self.__class__ = WebRequest
1.101 + self.args["doc"] = query
1.102 + else:
1.103 + com = query[:pos]
1.104 + arg_str = query[pos:]
1.105 + for t, args in _request_types:
1.106 + pass
1.107 +
1.108 + def __str__(self):
1.109 + return "%s(%s)" % (str(self.__class__).partition(".")[-1].rstrip("'>"),
1.110 + ", ".join(["%s: %s" % (k, str(v))
1.111 + for k, v in self.args.items()]))
1.112 +
1.113 +class WebRequest(Request):
1.114 +
1.115 + def __call__(self):
1.116 + pass
1.117 +
1.118 +
1.119 if __name__ == "__main__":
1.120 main()
1.121