2016-11-02 20:47:13 +00:00
|
|
|
import mimetypes
|
2015-03-03 18:40:18 +00:00
|
|
|
import os.path
|
2023-10-19 22:52:39 +00:00
|
|
|
|
2015-03-03 18:40:18 +00:00
|
|
|
from django.http import HttpResponse
|
2018-11-20 16:58:34 +00:00
|
|
|
from django.template.response import TemplateResponse
|
|
|
|
|
|
|
|
from conservancy.local_context_processors import fundgoal_lookup
|
2015-03-03 18:40:18 +00:00
|
|
|
|
2016-12-06 02:14:45 +00:00
|
|
|
STATIC_ROOT = os.path.abspath(os.path.dirname(__file__))
|
2016-11-02 20:46:53 +00:00
|
|
|
FILESYSTEM_ENCODING = 'utf-8'
|
2016-11-02 20:45:34 +00:00
|
|
|
|
2015-03-03 18:40:18 +00:00
|
|
|
def handler(request, errorcode):
|
2016-12-06 02:15:01 +00:00
|
|
|
path = os.path.join('error', str(errorcode), 'index.html')
|
2016-11-02 20:45:34 +00:00
|
|
|
fullpath = os.path.join(STATIC_ROOT, path)
|
2015-03-03 18:40:18 +00:00
|
|
|
if not os.path.exists(fullpath):
|
2018-11-20 16:58:34 +00:00
|
|
|
return HttpResponse("Internal error: " + path, status=int(errorcode))
|
|
|
|
else:
|
|
|
|
return TemplateResponse(request, path, status=int(errorcode))
|
2015-03-03 18:40:18 +00:00
|
|
|
|
|
|
|
def handler401(request):
|
2016-12-06 02:15:01 +00:00
|
|
|
return handler(request, 401)
|
2015-03-03 18:40:18 +00:00
|
|
|
|
|
|
|
def handler403(request):
|
2016-12-06 02:15:01 +00:00
|
|
|
return handler(request, 403)
|
2015-03-03 18:40:18 +00:00
|
|
|
|
|
|
|
def handler404(request):
|
2016-12-06 02:15:01 +00:00
|
|
|
return handler(request, 404)
|
2015-03-03 18:40:18 +00:00
|
|
|
|
|
|
|
def handler500(request):
|
2016-12-06 02:15:01 +00:00
|
|
|
return handler(request, 500)
|
2015-03-03 18:40:18 +00:00
|
|
|
|
2015-03-09 03:46:37 +00:00
|
|
|
def index(request, *args, **kwargs):
|
2023-09-07 13:15:48 +00:00
|
|
|
path = request.path.lstrip('/')
|
|
|
|
if path.endswith('/'):
|
|
|
|
path += 'index.html'
|
2021-11-26 01:41:27 +00:00
|
|
|
fullpath = os.path.join(STATIC_ROOT, path)
|
2022-03-14 23:58:32 +00:00
|
|
|
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:
|
2015-03-03 18:40:18 +00:00
|
|
|
return handler404(request)
|
2016-11-02 20:47:13 +00:00
|
|
|
content_type, _ = mimetypes.guess_type(path)
|
|
|
|
if content_type != 'text/html':
|
2018-11-20 16:58:34 +00:00
|
|
|
return HttpResponse(open(fullpath, 'rb'), content_type)
|
2016-11-02 20:47:13 +00:00
|
|
|
else:
|
2018-11-20 16:58:34 +00:00
|
|
|
context = kwargs.copy()
|
|
|
|
try:
|
|
|
|
context['fundgoal'] = fundgoal_lookup(kwargs['fundraiser_sought'])
|
|
|
|
except KeyError:
|
|
|
|
pass
|
|
|
|
return TemplateResponse(request, path, context)
|
2015-03-09 06:28:42 +00:00
|
|
|
|
2015-03-03 18:40:18 +00:00
|
|
|
def debug(request):
|
|
|
|
path = request.get_full_path()
|
|
|
|
path = path.lstrip('/')
|
|
|
|
return HttpResponse("Hello, static world: " + path)
|