diff -r 44d912089ce1 -r ab694dc54515 server/server.py --- a/server/server.py Sat Oct 08 01:05:50 2011 +0200 +++ b/server/server.py Sun Dec 11 02:27:29 2011 +0100 @@ -1,36 +1,49 @@ -#!/usr/bin/python +#! /usr/bin/env python3 +""" +Name: Machine Server +Author: Eugen Sawin +""" from argparse import ArgumentParser +from http.server import BaseHTTPRequestHandler, HTTPServer +import socketserver +from urllib.parse import urlparse +import logging + +ENCODING = "utf-8" + def parse_args(): parser = ArgumentParser(description="") - parser.add_argument("port", type=int, help="port") - parser.add_argument("-a", help="host address") + parser.add_argument("-p", type=int, default=8080, help="port") + parser.add_argument("-a", default="localhost", help="host address") + parser.add_argument("-l", default="log/server.log", help="log file") return parser.parse_args() + def main(): args = parse_args() - port = args.port - server = Server("localhost", port, GetHandler) + logging.basicConfig(filename=args.l, level=logging.DEBUG, + format="[%(levelname)s @ %(asctime)s] %(message)s", + datefmt="%d.%m.%Y %I:%M:%S") + server = Server(args.a, args.p, GetHandler) server.run() -from BaseHTTPServer import BaseHTTPRequestHandler -from BaseHTTPServer import HTTPServer -import SocketServer -import urlparse class GetHandler(BaseHTTPRequestHandler): + def do_GET(self): + logging.debug("Received query: %s" % self.path) + request = Request(self.path) + logging.info("Request: %s" % request) if self.path == "/": self.path = "/machine.html" - - parsed_path = urlparse.urlparse(self.path) - message = '\n'.join(("client: %s:%i" % self.client_address, + parsed_path = urlparse(self.path) + message = "\n".join(("client: %s:%i" % self.client_address, "path: %s" % parsed_path.path, "query: %s" % parsed_path.query, "params: %s" % parsed_path.params)) - self.send_response(200) - + self.send_response(200) resource = True if parsed_path.path.endswith(".html"): self.send_header("Content-type", "text/html") @@ -42,20 +55,50 @@ self.send_header("Content-type", "application/json") resource = False self.end_headers() + if resource: + self.wfile.write(bytes(open("../client" + parsed_path.path).read(), ENCODING)) + else: + self.wfile.write(bytes("{'time': 73}", ENCODING)) - if resource: - self.wfile.write(open("../client" + parsed_path.path).read()) - else: - self.wfile.write("{\"time\": 73}") class Server(HTTPServer): + def __init__(self, host, port, handler): HTTPServer.__init__(self, (host, port), handler) self.host = host self.port = port + def run(self): + logging.info("Server ready and listening at port %i." % self.port) self.serve_forever() +class Request: + + _request_types = {"help": []} + + def __init__(self, query): + self.args = {} + pos = query.find("?") + if pos == -1: + self.__class__ = WebRequest + self.args["doc"] = query + else: + com = query[:pos] + arg_str = query[pos:] + for t, args in _request_types: + pass + + def __str__(self): + return "%s(%s)" % (str(self.__class__).partition(".")[-1].rstrip("'>"), + ", ".join(["%s: %s" % (k, str(v)) + for k, v in self.args.items()])) + +class WebRequest(Request): + + def __call__(self): + pass + + if __name__ == "__main__": main()