1
0
Fork 0
forked from github/pelican

Fixes issue in devserver introduced in v3.3

Fixes an intermittent devserver problem with directory urls
containing index.html (i.e. clean urls).  It tries to send the
index.html file twice, resulting in a scrambled web page complete
with HTTP headers in the output, and sometimes Broken Pipe errors.
This commit is contained in:
Rob Iwancz 2013-12-04 22:26:39 +11:00
commit 301268f67f

View file

@ -13,23 +13,26 @@ except ImportError:
import socketserver # NOQA import socketserver # NOQA
PORT = len(sys.argv) == 2 and int(sys.argv[1]) or 8000 PORT = len(sys.argv) == 2 and int(sys.argv[1]) or 8000
SUFFIXES = ['','.html','/index.html'] SUFFIXES = ['', '.html', '/index.html']
class ComplexHTTPRequestHandler(srvmod.SimpleHTTPRequestHandler): class ComplexHTTPRequestHandler(srvmod.SimpleHTTPRequestHandler):
def do_GET(self): def do_GET(self):
# we are trying to detect the file by having a fallback mechanism # we are trying to detect the file by having a fallback mechanism
r = None found = False
for suffix in SUFFIXES: for suffix in SUFFIXES:
if not hasattr(self,'original_path'): if not hasattr(self,'original_path'):
self.original_path = self.path self.original_path = self.path
self.path = self.original_path + suffix self.path = self.original_path + suffix
path = self.translate_path(self.path) path = self.translate_path(self.path)
if os.path.exists(path): if os.path.exists(path):
r = srvmod.SimpleHTTPRequestHandler.do_GET(self) srvmod.SimpleHTTPRequestHandler.do_GET(self)
if r is not None: logging.info("Found: %s" % self.path)
found = True
break break
logging.warning("Unable to find %s file." % self.path) logging.info("Tried to find file %s, but it doesn't exist. " % self.path)
return r if not found:
logging.warning("Unable to find file %s or variations." % self.path)
Handler = ComplexHTTPRequestHandler Handler = ComplexHTTPRequestHandler
@ -45,4 +48,4 @@ try:
httpd.serve_forever() httpd.serve_forever()
except KeyboardInterrupt as e: except KeyboardInterrupt as e:
logging.info("shutting down server") logging.info("shutting down server")
httpd.socket.close() httpd.socket.close()