Make server extensible
1 files changed, 21 insertions(+), 13 deletions(-)

M dss.py
M dss.py +21 -13
@@ 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):