#!/usr/bin/env python
import django
import os, re, sys
from django.core.servers.basehttp import run, AdminMediaHandler, WSGIServerException

class DevMediaHandler(AdminMediaHandler):

    def __init__(self, application):
        from django.conf import settings
        import django
        self.application = application
        self.media_dir = settings.MEDIA_ROOT
        self.media_url = settings.DEV_MEDIA_PREFIX


def runserver(addr, port):
    "Starts a lightweight Web server for development."
    from django.core.handlers.wsgi import WSGIHandler
    from django.core.management import validate
    if not addr:
        addr = '127.0.0.1'
    if not port.isdigit():
        sys.stderr.write("Error: %r is not a valid port number.\n" % port)
        sys.exit(1)
    def inner_run():
        from django.conf.settings import SETTINGS_MODULE
        print "Validating models..."
        validate()
        print "\nStarting server on port %s with settings module %r." % (port, SETTINGS_MODULE)
        print "Go to http://%s:%s/ for Django." % (addr, port)
        print "Quit the server with CONTROL-C (Unix) or CTRL-BREAK (Windows)."
        try:
            run(addr, int(port), DevMediaHandler(AdminMediaHandler(WSGIHandler())))
        except WSGIServerException, e:
            # Use helpful error messages instead of ugly tracebacks.
            ERRORS = {
                13: "You don't have permission to access that port.",
                98: "That port is already in use.",
                99: "That IP address can't be assigned-to.",
            }
            try:
                error_text = ERRORS[e.args[0].args[0]]
            except (AttributeError, KeyError):
                error_text = str(e)
            sys.stderr.write("Error: %s\n" % error_text)
            sys.exit(1)
        except KeyboardInterrupt:
            sys.exit(0)
    from django.utils import autoreload
    autoreload.main(inner_run)


if __name__ == "__main__":
    runserver(None,"8000")
