Skip to content

Instantly share code, notes, and snippets.

@creativeaura
Created May 9, 2013 10:34
Show Gist options
  • Save creativeaura/5546779 to your computer and use it in GitHub Desktop.
Save creativeaura/5546779 to your computer and use it in GitHub Desktop.

Revisions

  1. creativeaura created this gist May 9, 2013.
    48 changes: 48 additions & 0 deletions server.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,48 @@
    import os
    import posixpath
    import urllib
    import BaseHTTPServer
    from SimpleHTTPServer import SimpleHTTPRequestHandler

    # modify this to add additional routes
    ROUTES = (
    # [url_prefix , directory_path]
    ['/media', '/var/www/media'],
    ['', '/var/www/site'] # empty string for the 'default' match
    )

    class RequestHandler(SimpleHTTPRequestHandler):

    def translate_path(self, path):
    """translate path given routes"""

    # set default root to cwd
    root = os.getcwd()

    # look up routes and set root directory accordingly
    for pattern, rootdir in ROUTES:
    if path.startswith(pattern):
    # found match!
    path = path[len(pattern):] # consume path up to pattern len
    root = rootdir
    break

    # normalize path and prepend root directory
    path = path.split('?',1)[0]
    path = path.split('#',1)[0]
    path = posixpath.normpath(urllib.unquote(path))
    words = path.split('/')
    words = filter(None, words)

    path = root
    for word in words:
    drive, word = os.path.splitdrive(word)
    head, word = os.path.split(word)
    if word in (os.curdir, os.pardir):
    continue
    path = os.path.join(path, word)

    return path

    if __name__ == '__main__':
    BaseHTTPServer.test(RequestHandler, BaseHTTPServer.HTTPServer)