1 import sys
2 import os
3 import threading
4 import SocketServer
5 import time
6 import SimpleHTTPServer
7
8
10 """
11 HTTP Files server with a new thread created for each new connection.
12 Execution of work of each thread is delayed by a given amount of time.
13 """
14
15 - def __init__(self, directory_to_serve, delay, host="localhost", port_no=0):
16 """
17 @param directory_to_serve: directory which will be served
18 @param delay: delay time of serving each page in seconds
19 @param host: server's host address
20 @param port_no: number of port to listen on. Port C{0} means that
21 the server will use an arbitrary unused port.
22 """
23 self.__dir_to_serve = directory_to_serve
24 self.__delay = delay
25 self.__host = host
26 self.__port_no = port_no
27 self.__server = None
28 self.__server_thread = None
29
31 """
32 Start the server in a new thread.
33
34 @return: server's (IP address, port number) pair
35 """
36 self.__server = _ThreadedTCPServer(
37 self.__delay, self.__dir_to_serve,
38 (self.__host, self.__port_no), _DelayedFilesServerHandler)
39
40 self.__server_thread = threading.Thread(
41 target=self.__server.serve_forever)
42 self.__server_thread.setDaemon(True)
43 self.__server_thread.start()
44 return self.__server.server_address
45
47 """
48 Stop the server and wait until it shuts down
49 """
50 self.__server.shutdown()
51 self.__server_thread.join()
52 self.__server = None
53 self.__server_thread = None
54
57
58 - def __exit__(self, type_, value, traceback):
60
63 time.sleep(self.server.delay)
64 old_wd = os.getcwd()
65 os.chdir(self.server.dir_to_serve)
66 SimpleHTTPServer.SimpleHTTPRequestHandler.handle(self)
67 os.chdir(old_wd)
68
69
70
72 sys.stdout.write("{} - - [{}] {}\n".format(
73 self.address_string(), self.log_date_time_string(),
74 format_%args))
75
77 - def __init__(self, delay, dir_to_serve, (host, port), my_TCP_handler):
78 SocketServer.TCPServer.__init__(self, (host, port), my_TCP_handler)
79 self.delay = delay
80 self.dir_to_serve = dir_to_serve
81