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