Code

Ticket #5454: user_backend_r6284.patch

File user_backend_r6284.patch, 3.5 KB (added by George Vilches <gav@…>, 7 years ago)

Moved global variables to curried functions.

  • django/db/__init__.py

     
    11from django.conf import settings 
    22from django.core import signals 
    33from django.dispatch import dispatcher 
     4from django.utils.functional import curry 
    45 
    56__all__ = ('backend', 'connection', 'DatabaseError', 'IntegrityError') 
    67 
     
    89    settings.DATABASE_ENGINE = 'dummy' 
    910 
    1011try: 
    11     backend = __import__('django.db.backends.%s.base' % settings.DATABASE_ENGINE, {}, {}, ['']) 
     12    import_path = 'django.db.backends.' 
     13    backend = __import__('%s%s.base' % (import_path, settings.DATABASE_ENGINE), {}, {}, ['']) 
    1214except ImportError, e: 
    13     # The database backend wasn't found. Display a helpful error message 
    14     # listing all possible database backends. 
    15     from django.core.exceptions import ImproperlyConfigured 
    16     import os 
    17     backend_dir = os.path.join(__path__[0], 'backends') 
    18     available_backends = [f for f in os.listdir(backend_dir) if not f.startswith('_') and not f.startswith('.') and not f.endswith('.py') and not f.endswith('.pyc')] 
    19     available_backends.sort() 
    20     if settings.DATABASE_ENGINE not in available_backends: 
    21         raise ImproperlyConfigured, "%r isn't an available database backend. Available options are: %s" % \ 
    22             (settings.DATABASE_ENGINE, ", ".join(map(repr, available_backends))) 
    23     else: 
    24         raise # If there's some other error, this must be an error in Django itself. 
     15    try: 
     16        import_path = '' 
     17        backend = __import__('%s%s.base' % (import_path, settings.DATABASE_ENGINE), {}, {}, ['']) 
     18    except ImportError, e_user: 
     19        # The database backend wasn't found. Display a helpful error message 
     20        # listing all possible database backends. 
     21        from django.core.exceptions import ImproperlyConfigured 
     22        import os 
     23        backend_dir = os.path.join(__path__[0], 'backends') 
     24        available_backends = [f for f in os.listdir(backend_dir) if not f.startswith('_') and not f.startswith('.') and not f.endswith('.py') and not f.endswith('.pyc')] 
     25        available_backends.sort() 
     26        if settings.DATABASE_ENGINE not in available_backends: 
     27            raise ImproperlyConfigured, "%r isn't an available database backend. Available options are: %s" % \ 
     28                (settings.DATABASE_ENGINE, ", ".join(map(repr, available_backends))) 
     29        else: 
     30            raise # If there's some other error, this must be an error in Django itself. 
    2531 
    26 get_introspection_module = lambda: __import__('django.db.backends.%s.introspection' % settings.DATABASE_ENGINE, {}, {}, ['']) 
    27 get_creation_module = lambda: __import__('django.db.backends.%s.creation' % settings.DATABASE_ENGINE, {}, {}, ['']) 
    28 runshell = lambda: __import__('django.db.backends.%s.client' % settings.DATABASE_ENGINE, {}, {}, ['']).runshell() 
     32def get_module_curried(import_path='', module_name=''): 
     33    return __import__('%s%s.%s' % (import_path, settings.DATABASE_ENGINE, module_name), {}, {}, ['']) 
    2934 
     35get_introspection_module = curry(get_module_curried, import_path=import_path, module_name='introspection') 
     36get_creation_module = curry(get_module_curried, import_path=import_path, module_name='creation') 
     37runshell = curry(get_module_curried, import_path=import_path)(module_name='client').runshell 
     38 
    3039connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS) 
    3140DatabaseError = backend.DatabaseError 
    3241IntegrityError = backend.IntegrityError