Django

Code

Changeset 1807

Show
Ignore:
Timestamp:
12/30/05 18:08:49 (3 years ago)
Author:
adrian
Message:

magic-removal: Django no longer requires a database. Moved database-handling stuff in django handlers to use dispatching

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/magic-removal/django/core/handlers/base.py

    r1638 r1807  
     1from django.core import signals 
     2from django.dispatch import dispatcher 
    13from django.utils import httpwrappers 
    24 
     
    4951        "Returns an HttpResponse object for the given HttpRequest" 
    5052        from django.core import exceptions, urlresolvers 
    51         from django.db import connection, DatabaseError 
    5253        from django.core.mail import mail_admins 
    5354        from django.conf.settings import DEBUG, INTERNAL_IPS, ROOT_URLCONF 
    54  
    55         # Reset query list per request. 
    56         connection.queries = [] 
    5755 
    5856        # Apply request middleware 
     
    9593                callback, param_dict = resolver.resolve404() 
    9694                return callback(request, **param_dict) 
    97         except DatabaseError: 
    98             connection.rollback() 
    99             if DEBUG: 
    100                 return self.get_technical_error_response(request) 
    101             else: 
    102                 subject = 'Database error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in INTERNAL_IPS and 'internal' or 'EXTERNAL'), getattr(request, 'path', '')) 
    103                 message = "%s\n\n%s" % (self._get_traceback(), request) 
    104                 mail_admins(subject, message, fail_silently=True) 
    105                 return self.get_friendly_error_response(request, resolver) 
    10695        except exceptions.PermissionDenied: 
    10796            return httpwrappers.HttpResponseForbidden('<h1>Permission denied</h1>') 
     
    11099                return self.get_technical_error_response(request) 
    111100            else: 
    112                 subject = 'Coding error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in INTERNAL_IPS and 'internal' or 'EXTERNAL'), getattr(request, 'path', '')) 
     101                receivers = dispatcher.send(signal=signals.got_request_exception) 
     102                # When DEBUG is False, send an error message to the admins. 
     103                subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in INTERNAL_IPS and 'internal' or 'EXTERNAL'), getattr(request, 'path', '')) 
    113104                try: 
    114105                    request_repr = repr(request) 
     
    122113        """ 
    123114        Returns an HttpResponse that displays a PUBLIC error message for a 
    124         fundamental database or coding error. 
     115        fundamental error. 
    125116        """ 
    126117        from django.core import urlresolvers 
     
    131122        """ 
    132123        Returns an HttpResponse that displays a TECHNICAL error message for a 
    133         fundamental database or coding error. 
     124        fundamental error. 
    134125        """ 
    135126        import sys 
  • django/branches/magic-removal/django/core/handlers/modpython.py

    r1649 r1807  
    11from django.core.handlers.base import BaseHandler 
     2from django.core import signals 
     3from django.dispatch import dispatcher 
    24from django.utils import datastructures, httpwrappers 
    35from pprint import pformat 
     
    129131        # that use settings now can work 
    130132        from django.conf import settings 
    131         from django.db import connection 
    132133 
    133134        # if we need to set up middleware, now that settings works we can do it now. 
     
    135136            self.load_middleware() 
    136137 
     138        dispatcher.send(signal=signals.request_started) 
    137139        try: 
    138140            request = ModPythonRequest(req) 
    139141            response = self.get_response(req.uri, request) 
    140142        finally: 
    141             connection.close(
     143            dispatcher.send(signal=signals.request_finished
    142144 
    143145        # Apply response middleware 
  • django/branches/magic-removal/django/core/handlers/wsgi.py

    r1649 r1807  
    11from django.core.handlers.base import BaseHandler 
     2from django.core import signals 
     3from django.dispatch import dispatcher 
    24from django.utils import datastructures, httpwrappers 
    35from pprint import pformat 
     
    144146    def __call__(self, environ, start_response): 
    145147        from django.conf import settings 
    146         from django.db import connection 
    147148 
    148149        # Set up middleware if needed. We couldn't do this earlier, because 
     
    151152            self.load_middleware() 
    152153 
     154        dispatcher.send(signal=signals.request_started) 
    153155        try: 
    154156            request = WSGIRequest(environ) 
    155157            response = self.get_response(request.path, request) 
    156158        finally: 
    157             connection.close(
     159            dispatcher.send(signal=signals.request_finished
    158160 
    159161        # Apply response middleware 
  • django/branches/magic-removal/django/db/__init__.py

    r1806 r1807  
    11from django.conf.settings import DATABASE_ENGINE 
     2from django.core import signals 
     3from django.dispatch import dispatcher 
    24 
    35__all__ = ('backend', 'connection', 'DatabaseError') 
     
    2426connection = backend.DatabaseWrapper() 
    2527DatabaseError = backend.DatabaseError 
     28 
     29# Register an event that closes the database connection 
     30# when a Django request is finished. 
     31dispatcher.connect(lambda: connection.close(), signal=signals.request_finished) 
     32 
     33# Register an event that resets connection.queries 
     34# when a Django request is started. 
     35def reset_queries(): 
     36    connection.queries = [] 
     37dispatcher.connect(reset_queries, signal=signals.request_started) 
     38 
     39# Register an event that rolls back the connection 
     40# when a Django request has an exception. 
     41dispatcher.connect(lambda: connection.rollback(), signal=signals.got_request_exception)