""" Paste-style config coercion to Django-style config """ __id__ = "$Id$" import new from paste.deploy.converters import asbool, aslist def coerce(global_settings, local_settings): """ Coerce Paste-style config to Django-style settings """ s = {} for setting in dir(global_settings): if setting == setting.upper(): s[setting] = getattr(global_settings, setting) s.update(local_settings) s['DEBUG'] = asbool(s.get('DEBUG', 'false')) s['TEMPLATE_DEBUG'] = asbool(s.get('TEMPLATE_DEBUG', s['DEBUG'])) s['USE_I18N'] = asbool(s.get('USE_I18N')) s['ADMINS'] = convert_name_list(s.get('ADMINS')) s['MANAGERS'] = convert_name_list(s.get('MANAGERS')) s['SITE_ID'] = int(s['SITE_ID']) s['TEMPLATE_LOADERS'] = convert_lines(s.get('TEMPLATE_LOADERS')) s['TEMPLATE_CONTEXT_PROCESSORS'] = convert_lines(s.get('TEMPLATE_CONTEXT_PROCESSORS')) s['MIDDLEWARE_CLASSES'] = convert_lines(s.get('MIDDLEWARE_CLASSES')) s['TEMPLATE_DIRS'] = convert_lines(s.get('TEMPLATE_DIRS')) s['INSTALLED_APPS'] = convert_lines(s.get('INSTALLED_APPS')) # Already okay: # DATABASE_ENGINE, DATABASE_NAME, DATABASE_USER, # DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT # TIME_ZONE, LANGUAGE_CODE, MEDIA_ROOT, MEDIA_URL, # ADMIN_MEDIA_PREFIX, SECRET_KEY, ROOT_URLCONF # Should expand INSTALLED_APPS, SETTINGS_MODULE return s def convert_lines(value): """ Convert multiline value from Paste-config to list of string """ if isinstance(value, (list, tuple)): return value return [x for x in aslist(value, sep='\n') if x and not x.startswith('#')] def convert_name_list(value): """ Convert multiline value from Paste-config to Django-style list of tuples """ if isinstance(value, (list, tuple)): return value return [tuple([z.strip() for z in x.split(':', 1)]) for x in convert_lines(value)] def make_module(attrs_dict, name=None): """ Make new virual module """ mod = new.module(name or '__settings__', "Virtual module for Django settings") for name, value in attrs_dict.items(): setattr(mod, name, value) return mod