Last active
December 1, 2018 15:34
-
-
Save kurogelee/20f4fef3da7e7ad03404b4c302a43f91 to your computer and use it in GitHub Desktop.
Pythonで接続エラーなどのテスト用のダミーWebサーバを作る ref: https://qiita.com/kurogelee/items/e257edb927fc21e87f71
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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