Files @ 46c50ec0b192
Branch filter:

Location: website/www/conservancy/static/views.py - annotation

Bradley M. Kuhn
Copyleft Compliance: Minor rewrite of strategy & firmware liberation

This rewrite should improve the stand-alone nature of these documents
and allow for better integration with other summary text and
announcements on the website.

Note that they have now drifted heavily from the original formulation
of the items as grant proposals.
import mimetypes
import os.path
from django.http import HttpResponse
from django.template.response import TemplateResponse

from conservancy.apps.fundgoal.models import FundraisingGoal
from conservancy.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(u'/')
    if path.endswith(u'/'):
        path += u'index.html'
    try:
        path_bytes = path.encode(FILESYSTEM_ENCODING)
    except UnicodeEncodeError:
        # If the path can't be expressed on the filesystem, it must not exist.
        return handler404(request)
    fullpath = os.path.join(STATIC_ROOT, path_bytes)
    if not os.path.exists(fullpath):
        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)