from django.views.debug import get_safe_settings

def crumbs(request):
    """adds the path 'crumbs'
    crumbs have the format of:
    [ {'name': 'foo', 'path': 'foo'},
      {'name': 'bar', 'path': 'foo/bar'},
      {'name': 'bing', 'path': 'foo/bar/bing'} ]
    """
    crumb_names = request.path[1:].split('/')
    crumbs = [ {'name': name, 'path': "/".join(crumb_names[:ind+1])}
                    for ind, name in enumerate(crumb_names) if name ]
    return { 'crumbs': crumbs }

def request(request):
    """adds request"""
    return { 'request': request }

## special thanks to SmileyChris for sharing this code
class SafeSettings:
    def __init__(self):
        self._settings = None
    
    def __getattr__(self, name):
        # Lazy load of settings.
        if self._settings is None:
            self._settings = get_safe_settings()
        # get_safe_settings only returns upper case settings, so let's not worry
        # about case sensitivity.
        name = name.upper()
        try:
            return self._settings[name]
        except KeyError:
            # This method should return the (computed) attribute value or raise 
            # an AttributeError exception.
            raise AttributeError
        
def settings(request):
    return {'settings': SafeSettings()}
