00001
00002
00003 import sys
00004 import os
00005 import time
00006 import shutil
00007 import BaseHTTPServer
00008 from optparse import OptionParser
00009 from mythvideo_test import HTTP_PORT
00010
00011 GET_DELAY=0
00012
00013 class MyRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
00014 def do_HEAD(self):
00015 self.__send_head(False)
00016
00017 def do_GET(self):
00018 f = self.__send_head(True)
00019 self.log_message("Sleeping for %d" % (GET_DELAY,))
00020 time.sleep(GET_DELAY)
00021 if f:
00022 shutil.copyfileobj(f, self.wfile)
00023 f.close()
00024
00025 def __send_head(self, open_file):
00026 filename = os.path.normpath(os.getcwd() + self.path)
00027 if self.__file_readable(filename):
00028 f = None
00029 if open_file:
00030 try:
00031 f = open(filename, 'rb')
00032 except IOError:
00033 self.send_error(404, "File not found")
00034 return None
00035
00036 stats = os.stat(filename)
00037 self.send_response(200)
00038 self.send_header("Content-type", 'image/png')
00039 self.send_header("Content-Length", str(stats[6]))
00040 self.send_header("Last-Modified", self.date_time_string(stats[8]))
00041 self.end_headers()
00042 return f
00043 else:
00044 self.send_error(404, "File not found")
00045 return None
00046
00047 def __file_readable(self, filepath):
00048 return os.path.isfile(filepath)
00049
00050 def main():
00051 parser = OptionParser()
00052 parser.add_option("-d", "--delay", type="int", dest="delay",
00053 help="Causes image GETs to wait DELAY seconds before returning "
00054 "the image.", metavar="DELAY")
00055 parser.add_option("-p", "--port", type="int", dest="port",
00056 help="Port to bind to.")
00057 (options, args) = parser.parse_args()
00058
00059 bind_port = HTTP_PORT
00060
00061 if options.port:
00062 bind_port = options.port
00063
00064 if options.delay:
00065 global GET_DELAY
00066 GET_DELAY = int(options.delay)
00067
00068 try:
00069 httpd = BaseHTTPServer.HTTPServer(('', bind_port), MyRequestHandler)
00070 print('Waiting for requests')
00071 httpd.serve_forever()
00072 except KeyboardInterrupt:
00073 print("Done.")
00074
00075 if __name__ == '__main__':
00076 main()