Files @ dd2774211489
Branch filter:

Location: website/conservancy/views.py

bsturmfels
Move Python code out of the "conservancy/static" directory

Having Python code in "conservancy/static" is a bit suprising to people familiar
with Django. The name "static" is usually reserved for assets like CSS, JS and
images.

I'm moving `conservancy/static/views.py` to `conservancy/views.py` and removing
`conservancy/static/__init__.py`.
import mimetypes
import os.path

from django.http import HttpResponse
from django.template.response import TemplateResponse

from .local_context_processors import fundgoal_lookup

STATIC_ROOT = os.path.abspath(os.path.dirname(__file__))
FILESYSTEM_ENCODING = 'utf-8'

def handler(request, errorcode):
    path = os.path.join('error', str(errorcode), 'index.html')
    fullpath = os.path.join(STATIC_ROOT, path)
    if not os.path.exists(fullpath):
        return HttpResponse("Internal error: " + path, status=int(errorcode))
    else:
        return TemplateResponse(request, path, status=int(errorcode))

def handler401(request):
    return handler(request, 401)

def handler403(request):
    return handler(request, 403)

def handler404(request):
    return handler(request, 404)

def handler500(request):
    return handler(request, 500)

def index(request, *args, **kwargs):
    path = request.path.lstrip('/')
    if path.endswith('/'):
        path += 'index.html'
    fullpath = os.path.join(STATIC_ROOT, path)
    try:
        # Junk URLs in production (Python 3.5) are causing UnicodeEncodeErrors
        # here. Can't reproduce in development in Python 3.9 - only Python 2.7.
        if not os.path.exists(fullpath):
            return handler404(request)
    except UnicodeEncodeError:
        return handler404(request)
    content_type, _ = mimetypes.guess_type(path)
    if content_type != 'text/html':
        return HttpResponse(open(fullpath, 'rb'), content_type)
    else:
        context = kwargs.copy()
        try:
            context['fundgoal'] = fundgoal_lookup(kwargs['fundraiser_sought'])
        except KeyError:
            pass
        return TemplateResponse(request, path, context)

def debug(request):
    path = request.get_full_path()
    path = path.lstrip('/')
    return HttpResponse("Hello, static world: " + path)