527 def server_bind(self): |
528 def server_bind(self): |
528 """Override server_bind to store the server name.""" |
529 """Override server_bind to store the server name.""" |
529 try: |
530 try: |
530 HTTPServer.server_bind(self) |
531 HTTPServer.server_bind(self) |
531 except Exception, e: |
532 except Exception, e: |
532 raise WSGIServerException, e |
533 raise WSGIServerException(e) |
533 self.setup_environ() |
534 self.setup_environ() |
534 |
535 |
535 def setup_environ(self): |
536 def setup_environ(self): |
536 # Set up base environment |
537 # Set up base environment |
537 env = self.base_environ = {} |
538 env = self.base_environ = {} |
555 from django.conf import settings |
556 from django.conf import settings |
556 self.admin_media_prefix = settings.ADMIN_MEDIA_PREFIX |
557 self.admin_media_prefix = settings.ADMIN_MEDIA_PREFIX |
557 # We set self.path to avoid crashes in log_message() on unsupported |
558 # We set self.path to avoid crashes in log_message() on unsupported |
558 # requests (like "OPTIONS"). |
559 # requests (like "OPTIONS"). |
559 self.path = '' |
560 self.path = '' |
|
561 self.style = color_style() |
560 BaseHTTPRequestHandler.__init__(self, *args, **kwargs) |
562 BaseHTTPRequestHandler.__init__(self, *args, **kwargs) |
561 |
563 |
562 def get_environ(self): |
564 def get_environ(self): |
563 env = self.server.base_environ.copy() |
565 env = self.server.base_environ.copy() |
564 env['SERVER_PROTOCOL'] = self.request_version |
566 env['SERVER_PROTOCOL'] = self.request_version |
606 |
608 |
607 def log_message(self, format, *args): |
609 def log_message(self, format, *args): |
608 # Don't bother logging requests for admin images or the favicon. |
610 # Don't bother logging requests for admin images or the favicon. |
609 if self.path.startswith(self.admin_media_prefix) or self.path == '/favicon.ico': |
611 if self.path.startswith(self.admin_media_prefix) or self.path == '/favicon.ico': |
610 return |
612 return |
611 sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format % args)) |
613 |
|
614 msg = "[%s] %s\n" % (self.log_date_time_string(), format % args) |
|
615 |
|
616 # Utilize terminal colors, if available |
|
617 if args[1][0] == '2': |
|
618 # Put 2XX first, since it should be the common case |
|
619 msg = self.style.HTTP_SUCCESS(msg) |
|
620 elif args[1][0] == '1': |
|
621 msg = self.style.HTTP_INFO(msg) |
|
622 elif args[1] == '304': |
|
623 msg = self.style.HTTP_NOT_MODIFIED(msg) |
|
624 elif args[1][0] == '3': |
|
625 msg = self.style.HTTP_REDIRECT(msg) |
|
626 elif args[1] == '404': |
|
627 msg = self.style.HTTP_NOT_FOUND(msg) |
|
628 elif args[1][0] == '4': |
|
629 msg = self.style.HTTP_BAD_REQUEST(msg) |
|
630 else: |
|
631 # Any 5XX, or any other response |
|
632 msg = self.style.HTTP_SERVER_ERROR(msg) |
|
633 |
|
634 sys.stderr.write(msg) |
612 |
635 |
613 class AdminMediaHandler(object): |
636 class AdminMediaHandler(object): |
614 """ |
637 """ |
615 WSGI middleware that intercepts calls to the admin media directory, as |
638 WSGI middleware that intercepts calls to the admin media directory, as |
616 defined by the ADMIN_MEDIA_PREFIX setting, and serves those images. |
639 defined by the ADMIN_MEDIA_PREFIX setting, and serves those images. |