# HG changeset patch
# User Jeff Hammel <jhammel@mozilla.com>
# Date 1283924355 25200
# Node ID dd1c4916cbcd743e913015321071a060c98fdc34
# Parent  56ab6b90cd1ae3e64a35a00d7b2820f72bddba96
[mq]: fileserver

diff -r 56ab6b90cd1a -r dd1c4916cbcd simplewiki/dispatcher.py
--- a/simplewiki/dispatcher.py	Tue Sep 07 21:29:57 2010 -0700
+++ b/simplewiki/dispatcher.py	Tue Sep 07 22:39:15 2010 -0700
@@ -5,7 +5,7 @@
 
 import os
 
-from handlers import GenshiRenderer, Index, Post
+from handlers import GenshiRenderer, Index, Post, FileServer
 
 from genshi.template import TemplateLoader
 from paste.fileapp import FileApp
@@ -30,7 +30,7 @@
         assert self.directory and os.path.exists(self.directory), "Must specify an existing directory"
 
         # request handlers
-        self.handlers = [ Post, GenshiRenderer, Index ]
+        self.handlers = [ Post, GenshiRenderer, Index, FileServer ]
 
         # template loader
         self.template_dirs = self.template_dirs.split()
@@ -57,13 +57,6 @@
         else:
             handler = exc.HTTPNotFound
 
-        # add navigation links to handler [example]
-        if hasattr(handler, 'data'):
-            handler.data.setdefault('links', [])
-            for h in self.handlers:
-                handler.data['links'].append((handler.link(h.handler_path), 
-                                              h.__name__))
-
         # get response
         res = handler()
         return res(environ, start_response)
diff -r 56ab6b90cd1a -r dd1c4916cbcd simplewiki/handlers.py
--- a/simplewiki/handlers.py	Tue Sep 07 21:29:57 2010 -0700
+++ b/simplewiki/handlers.py	Tue Sep 07 22:39:15 2010 -0700
@@ -4,6 +4,7 @@
 """
 
 import os
+from paste.fileapp import FileApp 
 from urlparse import urlparse
 from webob import Response, exc
 
@@ -142,3 +143,16 @@
         
     def __call__(self):
         self.redirect(self.location)
+
+class FileServer(Handler):
+    methods = set(['GET']) # methods to listen to
+
+    def __init__(self, app, request):
+        Handler.__init__(self, app, request)
+        self.file = os.path.join(self.app.directory, *request.environ['path'])
+        if not os.path.exists(self.file):
+            raise HandlerMatchException
+
+    def __call__(self):
+        return FileApp(self.file)
+