Skip to content

Instantly share code, notes, and snippets.

@kurogelee
Last active December 1, 2018 15:34
Show Gist options
  • Save kurogelee/20f4fef3da7e7ad03404b4c302a43f91 to your computer and use it in GitHub Desktop.
Save kurogelee/20f4fef3da7e7ad03404b4c302a43f91 to your computer and use it in GitHub Desktop.
Pythonで接続エラーなどのテスト用のダミーWebサーバを作る ref: https://qiita.com/kurogelee/items/e257edb927fc21e87f71
from itertools import chain, repeat
from time import sleep
try:
# python3
from http.server import HTTPServer, SimpleHTTPRequestHandler
except:
# python2
from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer
def close():
return True, None
def wait(time_seconds, path=None):
def f():
sleep(time_seconds)
return False, path
return f
def page(path):
return wait(0, path)
path_map = {
"/test": chain([close, wait(3, "/dummy_server.py"), None, page("/dummy_server.py")]),
"/test2": (x for seq in repeat((close, page("/dummy_server.py"))) for x in seq),
"/dummy_server.py": chain([close, close, wait(1)], repeat(None))
}
class RequestHandler(SimpleHTTPRequestHandler, object):
def print_info(self):
self.log_message("%s %s\n%s", self.command, self.path, self.headers)
def do_GET(self):
self.print_info()
iterator = path_map.get(self.path)
if iterator:
f = next(iterator, None)
if f:
ret, path = f()
if ret:
return
if path:
self.path = path
super(RequestHandler, self).do_GET()
def do_POST(self):
self.do_GET()
httpd = HTTPServer(("", 8000), RequestHandler)
httpd.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment