@@ 37,6 37,25 @@ class GitError(Exception):
else:
Exception.__init__(self, error)
+# TODO: show fatal rst syntax errors, e.g. include file that doesn't exist
+class LiveSiteHandler(SimpleHTTPRequestHandler):
+ '''
+ Can extend server behavior by replacing this class with a subclass of itself that overrides the
+ do_* methods as usual.
+ '''
+
+ def do_GET(self):
+ # TODO: expire immediately
+ # TODO: race condition when reloading during a compile
+ # TODO: tests for this
+ self.server.site.compile()
+ prev_cwd = os.getcwd()
+ try:
+ os.chdir(self.server.site.target)
+ SimpleHTTPRequestHandler.do_GET(self)
+ finally:
+ os.chdir(prev_cwd)
+
class DeadSimpleSite(object):
def __init__(self, source):
@@ 150,20 169,9 @@ class DeadSimpleSite(object):
continue
shutil.copy2(source, target)
- def serve(site, port=8000):
- # TODO: show fatal rst syntax errors, e.g. include file that doesn't exist
- class LiveSiteHandler(SimpleHTTPRequestHandler):
-
- def do_GET(request):
- # TODO: expire immediately
- # TODO: race condition when reloading during a compile
- # TODO: tests for this
- site.compile()
- SimpleHTTPRequestHandler.do_GET(request)
-
+ def serve(self, port=8000):
server = SocketServer.TCPServer(('', port), LiveSiteHandler)
- site.compile()
- os.chdir(site.target)
+ server.site = self
server.serve_forever()
def publish(self, origin=None):