#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import django
from django.core.servers.basehttp import AdminMediaHandler, WSGIServerException, WSGIServer, WSGIRequestHandler
from django.core.handlers.wsgi import WSGIHandler

os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'

class Output:
	def __init__(self, stream):
		self.stream = stream
	def write(self, data): # Do nothing
		return None
			#self.stream.write(data)
			#self.stream.flush()
	def __getattr__(self, attr):
		return getattr(self.stream, attr)

#sys.stderr = Output(sys.stderr)
#sys.stdout = Output(sys.stdout)

def handle(* args):
	try:
		if len(args) == 1:
			try:
				addr, port = args[0].split(":")
			except:
				addr = "127.0.0.1"
				port = args[0]
		else:
			addr = args[0]
			port = args[1]
	except:
		addr = '127.0.0.1'
		port = '8000'

	#print addr, port

	admin_media_path = ''
	shutdown_message = ''
	quit_command = (sys.platform == 'win32') and 'CTRL-BREAK' or 'CONTROL-C'

	from django.conf import settings
	from django.utils import translation

	#print "Django version %s, using settings %r" % (django.get_version(), settings.SETTINGS_MODULE)
	#print "Development server is running at http://%s:%s/" % (addr, port)
	#print "Quit the server with %s." % quit_command

	translation.activate(settings.LANGUAGE_CODE)

	try:
		handler = AdminMediaHandler(WSGIHandler(), admin_media_path)
		run(addr, int(port), handler)

	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" % error_text) + '\n')
		# Need to use an OS exit because sys.exit doesn't work in a thread
		#os._exit(1)
	except KeyboardInterrupt:
		if shutdown_message:
			print shutdown_message
		sys.exit(0)

class ownRequestHandler(WSGIRequestHandler):
	def log_message(self, format, *args):
		return


def run(addr, port, wsgi_handler):
	server_address = (addr, port)
	httpd = WSGIServer(server_address, ownRequestHandler)
	httpd.set_app(wsgi_handler)
	httpd.serve_forever()

if __name__ == "__main__":
	handle(*sys.argv[1:])