HTTP Error 500: Internal Server Error
Request Method: | GET |
---|---|
Request URL: | https://smartcambridge.org/traffic/btjourney/plot/CAMBRIDGE_JTMS%7C9800W1NX9BF2/ |
Django Version: | 3.2.20 |
Exception Type: | HTTPError |
Exception Value: | HTTP Error 500: Internal Server Error |
Exception Location: | /usr/lib/python3.10/urllib/request.py, line 643, in http_error_default |
Python Executable: | /home/tfc_prod/tfc_web_venv/bin/python3 |
Python Version: | 3.10.12 |
Python Path: | ['/home/tfc_prod/tfc_web/tfc_web', '/home/tfc_prod/tfc_web_venv/bin', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/tfc_prod/tfc_web_venv/lib/python3.10/site-packages'] |
Server time: | Fri, 29 Mar 2024 11:24:57 +0000 |
/home/tfc_prod/tfc_web_venv/lib/python3.10/site-packages/django/core/handlers/exception.py
, line 47, in inner
response = await sync_to_async(response_for_exception, thread_sensitive=False)(request, exc)
return response
return inner
else:
@wraps(get_response)
def inner(request):
try:
response = get_response(request)…
except Exception as exc:
response = response_for_exception(request, exc)
return response
return inner
Variable | Value |
---|---|
exc | <HTTPError 500: 'Internal Server Error'> |
get_response | <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7f9d31f37490>> |
request | <WSGIRequest: GET '/traffic/btjourney/plot/CAMBRIDGE_JTMS%7C9800W1NX9BF2/'> |
/home/tfc_prod/tfc_web_venv/lib/python3.10/site-packages/django/core/handlers/base.py
, line 181, in _get_response
if response is None:
wrapped_callback = self.make_view_atomic(callback)
# If it is an asynchronous view, run it in a subthread.
if asyncio.iscoroutinefunction(wrapped_callback):
wrapped_callback = async_to_sync(wrapped_callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs)…
except Exception as e:
response = self.process_exception_by_middleware(e, request)
if response is None:
raise
# Complain if the view returned None (a common error).
Variable | Value |
---|---|
callback | <function btjourney_plot at 0x7f9d2be24040> |
callback_args | () |
callback_kwargs | {'link_id': 'CAMBRIDGE_JTMS|9800W1NX9BF2'} |
middleware_method | <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7f9d31b57970>> |
request | <WSGIRequest: GET '/traffic/btjourney/plot/CAMBRIDGE_JTMS%7C9800W1NX9BF2/'> |
response | None |
self | <django.core.handlers.wsgi.WSGIHandler object at 0x7f9d31f37490> |
wrapped_callback | <function btjourney_plot at 0x7f9d2be24040> |
/home/tfc_prod/tfc_web/tfc_web/traffic/views.py
, line 227, in btjourney_plot
try:
journey_json = get_btjourney_history(link_id, user_date)
link_config = get_btjourney_link_or_route(link_id)
except HTTPError as e:
if e.code == 404:
raise Http404("btjourney plot invalid link id {0}".format(link_id))
else:
raise e…
return render(request, 'traffic/btjourney_plot.html', {
'config_date': user_date,
'config_link_id': link_id,
'config_yyyy': yyyy,
'config_MM': MM,
Variable | Value |
---|---|
MM | '03' |
dd | '29' |
link_id | 'CAMBRIDGE_JTMS|9800W1NX9BF2' |
request | <WSGIRequest: GET '/traffic/btjourney/plot/CAMBRIDGE_JTMS%7C9800W1NX9BF2/'> |
today | '2024-03-29' |
user_date | '2024-03-29' |
yyyy | '2024' |
/home/tfc_prod/tfc_web/tfc_web/traffic/views.py
, line 221, in btjourney_plot
user_date = today
yyyy = user_date[0:4]
MM = user_date[5:7]
dd = user_date[8:10]
try:
journey_json = get_btjourney_history(link_id, user_date)…
link_config = get_btjourney_link_or_route(link_id)
except HTTPError as e:
if e.code == 404:
raise Http404("btjourney plot invalid link id {0}".format(link_id))
else:
raise e
Variable | Value |
---|---|
MM | '03' |
dd | '29' |
link_id | 'CAMBRIDGE_JTMS|9800W1NX9BF2' |
request | <WSGIRequest: GET '/traffic/btjourney/plot/CAMBRIDGE_JTMS%7C9800W1NX9BF2/'> |
today | '2024-03-29' |
user_date | '2024-03-29' |
yyyy | '2024' |
/home/tfc_prod/tfc_web/tfc_web/traffic/views.py
, line 188, in get_btjourney_history
def get_btjourney_link_or_route(link_id):
return do_api_call('/api/v1/traffic/btjourney/link_or_route/' + link_id)
def get_btjourney_history(link_id, date):
return do_api_call(…
'/api/v1/traffic/btjourney/history/' + link_id +
'?start_date=' + date)
def add_sortable_names(link_list):
'''
Variable | Value |
---|---|
date | '2024-03-29' |
link_id | 'CAMBRIDGE_JTMS|9800W1NX9BF2' |
/home/tfc_prod/tfc_web/tfc_web/api/util.py
, line 151, in do_api_call
logger.debug('Query: %s', query)
if not check_query(query):
raise ValueError('API issue', query)
reader = codecs.getreader("utf-8")
query = Request(settings.NEW_API_ENDPOINT + query)
query.add_header('Authorization', 'Token ' + settings.LOCAL_API_KEY)
return json.load(reader(urlopen(query)))…
def check_query(s):
return re.match(r'^[A-Za-z0-9_\-\?\&\/\=\|]+$', s)
Variable | Value |
---|---|
query | <urllib.request.Request object at 0x7f9d2af136a0> |
reader | <class 'encodings.utf_8.StreamReader'> |
/usr/lib/python3.10/urllib/request.py
, line 216, in urlopen
elif context:
https_handler = HTTPSHandler(context=context)
opener = build_opener(https_handler)
elif _opener is None:
_opener = opener = build_opener()
else:
opener = _opener
return opener.open(url, data, timeout)…
def install_opener(opener):
global _opener
_opener = opener
_url_tempfiles = []
Variable | Value |
---|---|
cadefault | False |
cafile | None |
capath | None |
context | None |
data | None |
opener | <urllib.request.OpenerDirector object at 0x7f9d2af25cf0> |
timeout | <object object at 0x7f9d53ea4880> |
url | <urllib.request.Request object at 0x7f9d2af136a0> |
/usr/lib/python3.10/urllib/request.py
, line 525, in open
sys.audit('urllib.Request', req.full_url, req.data, req.headers, req.get_method())
response = self._open(req, data)
# post-process response
meth_name = protocol+"_response"
for processor in self.process_response.get(protocol, []):
meth = getattr(processor, meth_name)
response = meth(req, response)…
return response
def _open(self, req, data=None):
result = self._call_chain(self.handle_open, 'default',
'default_open', req)
Variable | Value |
---|---|
data | None |
fullurl | <urllib.request.Request object at 0x7f9d2af136a0> |
meth | <bound method HTTPErrorProcessor.http_response of <urllib.request.HTTPErrorProcessor object at 0x7f9d2af274c0>> |
meth_name | 'http_response' |
processor | <urllib.request.HTTPErrorProcessor object at 0x7f9d2af274c0> |
protocol | 'http' |
req | <urllib.request.Request object at 0x7f9d2af136a0> |
response | <http.client.HTTPResponse object at 0x7f9d2af128f0> |
self | <urllib.request.OpenerDirector object at 0x7f9d2af25cf0> |
timeout | <object object at 0x7f9d53ea4880> |
/usr/lib/python3.10/urllib/request.py
, line 634, in http_response
def http_response(self, request, response):
code, msg, hdrs = response.code, response.msg, response.info()
# According to RFC 2616, "2xx" code indicates that the client's
# request was successfully received, understood, and accepted.
if not (200 <= code < 300):
response = self.parent.error(…
'http', request, response, code, msg, hdrs)
return response
https_response = http_response
Variable | Value |
---|---|
code | 301 |
hdrs | <http.client.HTTPMessage object at 0x7f9d2af127a0> |
msg | 'Moved Permanently' |
request | <urllib.request.Request object at 0x7f9d2af136a0> |
response | <http.client.HTTPResponse object at 0x7f9d2af128f0> |
self | <urllib.request.HTTPErrorProcessor object at 0x7f9d2af274c0> |
/usr/lib/python3.10/urllib/request.py
, line 557, in error
http_err = 1
orig_args = args
else:
dict = self.handle_error
meth_name = proto + '_error'
http_err = 0
args = (dict, proto, meth_name) + args
result = self._call_chain(*args)…
if result:
return result
if http_err:
args = (dict, 'default', 'http_error_default') + orig_args
return self._call_chain(*args)
Variable | Value |
---|---|
args | ({301: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 302: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 303: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 307: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 'default': [<urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410>]}, 301, 'http_error_301', <urllib.request.Request object at 0x7f9d2af136a0>, <http.client.HTTPResponse object at 0x7f9d2af128f0>, 301, 'Moved Permanently', <http.client.HTTPMessage object at 0x7f9d2af127a0>) |
dict | {301: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 302: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 303: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 307: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 'default': [<urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410>]} |
http_err | 1 |
meth_name | 'http_error_301' |
orig_args | (<urllib.request.Request object at 0x7f9d2af136a0>, <http.client.HTTPResponse object at 0x7f9d2af128f0>, 301, 'Moved Permanently', <http.client.HTTPMessage object at 0x7f9d2af127a0>) |
proto | 301 |
self | <urllib.request.OpenerDirector object at 0x7f9d2af25cf0> |
/usr/lib/python3.10/urllib/request.py
, line 496, in _call_chain
def _call_chain(self, chain, kind, meth_name, *args):
# Handlers raise an exception if no one else should try to handle
# the request, or return None if they can't but another handler
# could. Otherwise, they return the response.
handlers = chain.get(kind, ())
for handler in handlers:
func = getattr(handler, meth_name)
result = func(*args)…
if result is not None:
return result
def open(self, fullurl, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
# accept a URL or a Request object
if isinstance(fullurl, str):
Variable | Value |
---|---|
args | (<urllib.request.Request object at 0x7f9d2af136a0>, <http.client.HTTPResponse object at 0x7f9d2af128f0>, 301, 'Moved Permanently', <http.client.HTTPMessage object at 0x7f9d2af127a0>) |
chain | {301: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 302: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 303: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 307: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 'default': [<urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410>]} |
func | <bound method HTTPRedirectHandler.http_error_302 of <urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>> |
handler | <urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70> |
handlers | [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>] |
kind | 301 |
meth_name | 'http_error_301' |
self | <urllib.request.OpenerDirector object at 0x7f9d2af25cf0> |
/usr/lib/python3.10/urllib/request.py
, line 749, in http_error_302
visited[newurl] = visited.get(newurl, 0) + 1
# Don't close the fp until we are sure that we won't use it
# with HTTPError.
fp.read()
fp.close()
return self.parent.open(new, timeout=req.timeout)…
http_error_301 = http_error_303 = http_error_307 = http_error_302
inf_msg = "The HTTP server returned a redirect error that would " \
"lead to an infinite loop.\n" \
"The last 30x error message was:\n"
Variable | Value |
---|---|
code | 301 |
fp | <http.client.HTTPResponse object at 0x7f9d2af128f0> |
headers | <http.client.HTTPMessage object at 0x7f9d2af127a0> |
msg | 'Moved Permanently' |
new | <urllib.request.Request object at 0x7f9d2af113c0> |
newurl | 'http://localhost/api/v1/traffic/btjourney/history/CAMBRIDGE_JTMS%7C9800W1NX9BF2/?start_date=2024-03-29' |
req | <urllib.request.Request object at 0x7f9d2af136a0> |
self | <urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70> |
urlparts | ParseResult(scheme='', netloc='', path='/api/v1/traffic/btjourney/history/CAMBRIDGE_JTMS%7C9800W1NX9BF2/', params='', query='start_date=2024-03-29', fragment='') |
visited | {'http://localhost/api/v1/traffic/btjourney/history/CAMBRIDGE_JTMS%7C9800W1NX9BF2/?start_date=2024-03-29': 1} |
/usr/lib/python3.10/urllib/request.py
, line 525, in open
sys.audit('urllib.Request', req.full_url, req.data, req.headers, req.get_method())
response = self._open(req, data)
# post-process response
meth_name = protocol+"_response"
for processor in self.process_response.get(protocol, []):
meth = getattr(processor, meth_name)
response = meth(req, response)…
return response
def _open(self, req, data=None):
result = self._call_chain(self.handle_open, 'default',
'default_open', req)
Variable | Value |
---|---|
data | None |
fullurl | <urllib.request.Request object at 0x7f9d2af113c0> |
meth | <bound method HTTPErrorProcessor.http_response of <urllib.request.HTTPErrorProcessor object at 0x7f9d2af274c0>> |
meth_name | 'http_response' |
processor | <urllib.request.HTTPErrorProcessor object at 0x7f9d2af274c0> |
protocol | 'http' |
req | <urllib.request.Request object at 0x7f9d2af113c0> |
response | <http.client.HTTPResponse object at 0x7f9d2af13b50> |
self | <urllib.request.OpenerDirector object at 0x7f9d2af25cf0> |
timeout | <object object at 0x7f9d53ea4880> |
/usr/lib/python3.10/urllib/request.py
, line 634, in http_response
def http_response(self, request, response):
code, msg, hdrs = response.code, response.msg, response.info()
# According to RFC 2616, "2xx" code indicates that the client's
# request was successfully received, understood, and accepted.
if not (200 <= code < 300):
response = self.parent.error(…
'http', request, response, code, msg, hdrs)
return response
https_response = http_response
Variable | Value |
---|---|
code | 500 |
hdrs | <http.client.HTTPMessage object at 0x7f9d2af264d0> |
msg | 'Internal Server Error' |
request | <urllib.request.Request object at 0x7f9d2af113c0> |
response | <http.client.HTTPResponse object at 0x7f9d2af13b50> |
self | <urllib.request.HTTPErrorProcessor object at 0x7f9d2af274c0> |
/usr/lib/python3.10/urllib/request.py
, line 563, in error
args = (dict, proto, meth_name) + args
result = self._call_chain(*args)
if result:
return result
if http_err:
args = (dict, 'default', 'http_error_default') + orig_args
return self._call_chain(*args)…
# XXX probably also want an abstract factory that knows when it makes
# sense to skip a superclass in favor of a subclass and when it might
# make sense to include both
def build_opener(*handlers):
Variable | Value |
---|---|
args | ({301: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 302: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 303: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 307: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 'default': [<urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410>]}, 'default', 'http_error_default', <urllib.request.Request object at 0x7f9d2af113c0>, <http.client.HTTPResponse object at 0x7f9d2af13b50>, 500, 'Internal Server Error', <http.client.HTTPMessage object at 0x7f9d2af264d0>) |
dict | {301: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 302: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 303: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 307: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 'default': [<urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410>]} |
http_err | 1 |
meth_name | 'http_error_500' |
orig_args | (<urllib.request.Request object at 0x7f9d2af113c0>, <http.client.HTTPResponse object at 0x7f9d2af13b50>, 500, 'Internal Server Error', <http.client.HTTPMessage object at 0x7f9d2af264d0>) |
proto | 500 |
result | None |
self | <urllib.request.OpenerDirector object at 0x7f9d2af25cf0> |
/usr/lib/python3.10/urllib/request.py
, line 496, in _call_chain
def _call_chain(self, chain, kind, meth_name, *args):
# Handlers raise an exception if no one else should try to handle
# the request, or return None if they can't but another handler
# could. Otherwise, they return the response.
handlers = chain.get(kind, ())
for handler in handlers:
func = getattr(handler, meth_name)
result = func(*args)…
if result is not None:
return result
def open(self, fullurl, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
# accept a URL or a Request object
if isinstance(fullurl, str):
Variable | Value |
---|---|
args | (<urllib.request.Request object at 0x7f9d2af113c0>, <http.client.HTTPResponse object at 0x7f9d2af13b50>, 500, 'Internal Server Error', <http.client.HTTPMessage object at 0x7f9d2af264d0>) |
chain | {301: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 302: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 303: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 307: [<urllib.request.HTTPRedirectHandler object at 0x7f9d2af26a70>], 'default': [<urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410>]} |
func | <bound method HTTPDefaultErrorHandler.http_error_default of <urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410>> |
handler | <urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410> |
handlers | [<urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410>] |
kind | 'default' |
meth_name | 'http_error_default' |
self | <urllib.request.OpenerDirector object at 0x7f9d2af25cf0> |
/usr/lib/python3.10/urllib/request.py
, line 643, in http_error_default
return response
https_response = http_response
class HTTPDefaultErrorHandler(BaseHandler):
def http_error_default(self, req, fp, code, msg, hdrs):
raise HTTPError(req.full_url, code, msg, hdrs, fp)…
class HTTPRedirectHandler(BaseHandler):
# maximum number of redirections to any single URL
# this is needed because of the state that cookies introduce
max_repeats = 4
# maximum total number of redirections (regardless of URL) before
Variable | Value |
---|---|
code | 500 |
fp | <http.client.HTTPResponse object at 0x7f9d2af13b50> |
hdrs | <http.client.HTTPMessage object at 0x7f9d2af264d0> |
msg | 'Internal Server Error' |
req | <urllib.request.Request object at 0x7f9d2af113c0> |
self | <urllib.request.HTTPDefaultErrorHandler object at 0x7f9d2af26410> |
AnonymousUser
No GET data
No POST data
No FILES data
No cookie data
Variable | Value |
---|---|
HTTP_ACCEPT | '*/*' |
HTTP_CONNECTION | 'close' |
HTTP_HOST | 'smartcambridge.org' |
HTTP_USER_AGENT | 'claudebot' |
HTTP_X_FORWARDED_FOR | '174.129.140.206' |
HTTP_X_FORWARDED_HOST | 'smartcambridge.org' |
HTTP_X_FORWARDED_PROTO | 'https' |
HTTP_X_FORWARDED_SERVER | 'smartcambridge.org' |
HTTP_X_REAL_IP | '174.129.140.206' |
PATH_INFO | '/traffic/btjourney/plot/CAMBRIDGE_JTMS|9800W1NX9BF2/' |
QUERY_STRING | '' |
RAW_URI | '/traffic/btjourney/plot/CAMBRIDGE_JTMS|9800W1NX9BF2/' |
REMOTE_ADDR | '127.0.0.1' |
REMOTE_PORT | '59496' |
REQUEST_METHOD | 'GET' |
SCRIPT_NAME | '' |
SERVER_NAME | '127.0.0.1' |
SERVER_PORT | '8000' |
SERVER_PROTOCOL | 'HTTP/1.0' |
SERVER_SOFTWARE | 'gunicorn/21.2.0' |
gunicorn.socket | <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 59496)> |
wsgi.errors | <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f9d531292d0> |
wsgi.file_wrapper | <class 'gunicorn.http.wsgi.FileWrapper'> |
wsgi.input | <gunicorn.http.body.Body object at 0x7f9d3089c310> |
wsgi.input_terminated | True |
wsgi.multiprocess | True |
wsgi.multithread | True |
wsgi.run_once | False |
wsgi.url_scheme | 'https' |
wsgi.version | (1, 0) |
tfc_web.settings
Setting | Value |
---|---|
ABSOLUTE_URL_OVERRIDES | {} |
ACCOUNT_AUTHENTICATION_METHOD | 'email' |
ACCOUNT_EMAIL_REQUIRED | True |
ACCOUNT_EMAIL_VERIFICATION | 'mandatory' |
ACCOUNT_FORMS | {'signup': 'smartcambridge.forms.CustomSignupForm'} |
ACCOUNT_PRESERVE_USERNAME_CASING | False |
ADMINS | [('SmartCambridge Admins', 'admin@smartcambridge.org')] |
ALLOWED_HOSTS | ['smartcambridge.org', 'www.smartcambridge.org', '.cl.cam.ac.uk', 'localhost', '127.0.0.1', '[::1]'] |
API_ENDPOINT | '********************' |
APPEND_SLASH | True |
AUTHENTICATION_BACKENDS | ['django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend'] |
AUTH_PASSWORD_VALIDATORS | '********************' |
AUTH_USER_MODEL | 'auth.User' |
BASE_DIR | '/home/tfc_prod/tfc_web/tfc_web' |
CACHES | {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} |
CACHE_MIDDLEWARE_ALIAS | 'default' |
CACHE_MIDDLEWARE_KEY_PREFIX | '********************' |
CACHE_MIDDLEWARE_SECONDS | 600 |
CORS_ORIGIN_ALLOW_ALL | True |
CSN_PREFIX | 'dev' |
CSRF_COOKIE_AGE | 31449600 |
CSRF_COOKIE_DOMAIN | None |
CSRF_COOKIE_HTTPONLY | False |
CSRF_COOKIE_NAME | 'csrftoken' |
CSRF_COOKIE_PATH | '/' |
CSRF_COOKIE_SAMESITE | 'Lax' |
CSRF_COOKIE_SECURE | False |
CSRF_FAILURE_VIEW | 'django.views.csrf.csrf_failure' |
CSRF_HEADER_NAME | 'HTTP_X_CSRFTOKEN' |
CSRF_TRUSTED_ORIGINS | [] |
CSRF_USE_SESSIONS | False |
DATABASES | {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'HOST': '', 'NAME': 'tfcweb', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}} |
DATABASE_PASSWORD | '********************' |
DATABASE_ROUTERS | [] |
DATA_DIR | '/home/tfc_prod/tfc_web/tfc_web/data' |
DATA_PATH | '/media/tfc' |
DATA_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
DATA_UPLOAD_MAX_NUMBER_FIELDS | 1000 |
DATA_UPLOAD_MAX_NUMBER_FILES | 100 |
DATETIME_FORMAT | 'N j, Y, P' |
DATETIME_INPUT_FORMATS | ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] |
DATE_FORMAT | 'l j F Y' |
DATE_INPUT_FORMATS | ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] |
DEBUG | True |
DEBUG_PROPAGATE_EXCEPTIONS | False |
DECIMAL_SEPARATOR | '.' |
DEFAULT_AUTO_FIELD | 'django.db.models.BigAutoField' |
DEFAULT_CHARSET | 'utf-8' |
DEFAULT_EXCEPTION_REPORTER | 'django.views.debug.ExceptionReporter' |
DEFAULT_EXCEPTION_REPORTER_FILTER | 'django.views.debug.SafeExceptionReporterFilter' |
DEFAULT_FILE_STORAGE | 'django.core.files.storage.FileSystemStorage' |
DEFAULT_FROM_EMAIL | 'smart-cambridge@cl.cam.ac.uk' |
DEFAULT_HASHING_ALGORITHM | 'sha256' |
DEFAULT_INDEX_TABLESPACE | '' |
DEFAULT_TABLESPACE | '' |
DISALLOWED_USER_AGENTS | [] |
DOWNLOAD_FEEDS | [{'archive_by_default': True, 'archives': [{'destination_filename': 'aq-data-{date:%Y}', 'extractor': 'api.extractors.aq.aq_data_extractor', 'name': 'data-year', 'source_pattern': 'cam_aq/data_bin/{date:%Y}/*/*/*.json', 'step': {'years': 1}, 'title': 'Yearly data'}, {'destination_filename': 'aq-data-{date:%Y}-{date:%m}', 'extractor': 'api.extractors.aq.aq_data_extractor', 'name': 'data-month', 'source_pattern': 'cam_aq/data_bin/{date:%Y}/{date:%m}/*/*.json', 'step': {'months': 1}, 'title': 'Monthly data'}, {'destination_filename': 'aq-headers-{date:%Y}', 'extractor': 'api.extractors.aq.aq_header_extractor', 'name': 'headers-year', 'source_pattern': 'cam_aq/data_bin/{date:%Y}/*/*/*.json', 'step': {'years': 1}, 'title': 'Yearly header information'}, {'destination_filename': 'aq-headers-{date:%Y}-{date:%m}', 'extractor': 'api.extractors.aq.aq_header_extractor', 'name': 'headers-month', 'source_pattern': 'cam_aq/data_bin/{date:%Y}/{date:%m}/*/*.json', 'step': {'months': 1}, 'title': 'Monthly header information'}], 'desc': 'Air Quality data from a selection of sensor stations deployed ' 'around Cambridge between June 2016 and February 2017.', 'destination': 'download_api', 'display': True, 'first_year': 2016, 'metadata': [{'destination_filename': 'aq-metadata', 'extractor': 'api.extractors.aq.aq_metadata_extractor', 'name': 'metadata', 'source_pattern': 'sys/data_cam_aq_config/list.json', 'title': 'Sensor metadata'}], 'name': 'aq', 'title': 'Air Quality'}, {'archive_by_default': True, 'archives': [{'destination_filename': 'parking-{date:%Y}', 'extractor': 'api.extractors.parking.cam_park_rss_extractor', 'name': 'year', 'source_pattern': 'cam_park_rss/data_park/{date:%Y}/*/*/*.txt', 'step': {'years': 1}, 'title': 'Annual data'}, {'destination_filename': 'parking-{date:%Y}-{date:%m}', 'extractor': 'api.extractors.parking.cam_park_rss_extractor', 'name': 'month', 'source_pattern': 'cam_park_rss/data_park/{date:%Y}/{date:%m}/*/*.txt', 'step': {'months': 1}, 'title': 'Monthly data'}, {'destination_filename': 'parking-{date:%Y}-{date:%m}-{date:%d}', 'extractor': 'api.extractors.parking.cam_park_rss_extractor', 'name': 'day', 'source_pattern': 'cam_park_rss/data_park/{date:%Y}/{date:%m}/{date:%d}/*.txt', 'start': {'day': 1}, 'step': {'days': 1}, 'title': 'Daily data for this month'}], 'desc': 'Car Parking data showing the occupancy of Cambridge City Centre and ' 'Park and Ride car parks from 2017 onward.', 'destination': 'download_api', 'display': True, 'first_year': 2017, 'metadata': [{'destination_filename': 'parking-metadata', 'extractor': 'api.extractors.parking.cam_park_rss_metadata_extractor', 'name': 'metadata', 'source_pattern': 'sys/data_parking_config/list.json', 'title': 'Sensor Metadata'}], 'name': 'parking', 'title': 'Car Parking'}, {'archive_by_default': True, 'archives': [{'destination_filename': 'zone-{date:%Y}', 'extractor': 'api.extractors.zone.zone_extractor', 'name': 'year', 'source_pattern': 'cloudamber/sirivm/data_zone/{date:%Y}/*/*/*.txt', 'step': {'years': 1}, 'title': 'Annual data'}, {'destination_filename': 'zone-{date:%Y}-{date:%m}', 'extractor': 'api.extractors.zone.zone_extractor', 'name': 'month', 'source_pattern': 'cloudamber/sirivm/data_zone/{date:%Y}/{date:%m}/*/*.txt', 'step': {'months': 1}, 'title': 'Monthly data'}, {'destination_filename': 'zone-{date:%Y}-{date:%m}-{date:%d}', 'extractor': 'api.extractors.zone.zone_extractor', 'name': 'day', 'source_pattern': 'cloudamber/sirivm/data_zone/{date:%Y}/{date:%m}/{date:%d}/*.txt', 'start': {'day': 1}, 'step': {'days': 1}, 'title': 'Daily data for this month'}], 'desc': "Traffic Speed ('zone') data for roads within Cambridge based on bus " 'position data from October 2017 onward.', 'destination': 'download_api', 'display': True, 'first_year': 2017, 'metadata': [{'destination_filename': 'zone-metadata', 'extractor': 'api.extractors.zone.zone_metadata_extractor', 'name': 'metadata', 'source_pattern': 'sys/data_zone_config/list_all.json', 'title': 'Sensor Metadata'}], 'name': 'zone', 'title': 'Traffic Speed (Buses)'}, {'archive_by_default': False, 'archives': [{'destination_filename': 'bus-{date:%Y}-{date:%m}', 'extractor': 'api.extractors.bus.bus_extractor', 'name': 'month', 'source_pattern': 'sirivm_json/data_bin/{date:%Y}/{date:%m}/*/*.json', 'step': {'months': 1}, 'title': 'Monthly data'}], 'desc': 'Raw position reports from buses in the Cambridge area from October ' '2017 onward.', 'destination': 'download_private', 'display': False, 'first_year': 2017, 'name': 'bus', 'title': 'Bus position reports'}, {'archive_by_default': True, 'archives': [{'destination_filename': 'btjourney-{date:%Y}', 'extractor': 'api.extractors.btjourney.btjourney_journey_extractor', 'name': 'year', 'source_pattern': 'btjourney/journeytimes/data_link/{date:%Y}/*/*/*.txt', 'step': {'years': 1}, 'title': 'Annual data'}, {'destination_filename': 'btjourney-{date:%Y}-{date:%m}', 'extractor': 'api.extractors.btjourney.btjourney_journey_extractor', 'name': 'month', 'source_pattern': 'btjourney/journeytimes/data_link/{date:%Y}/{date:%m}/*/*.txt', 'step': {'months': 1}, 'title': 'Monthly data'}, {'destination_filename': 'btjourney-{date:%Y}-{date:%m}-{date:%d}', 'extractor': 'api.extractors.btjourney.btjourney_journey_extractor', 'name': 'day', 'source_pattern': 'btjourney/journeytimes/data_link/{date:%Y}/{date:%m}/{date:%d}/*.txt', 'start': {'day': 1}, 'step': {'days': 1}, 'title': 'Daily data for this month'}], 'desc': "Traffic Speed ('btjourney') data for roads within Cambridge derived " 'from Bluetooth sensor devices from 2020 onward.', 'destination': 'download_api', 'display': True, 'first_year': 2020, 'metadata': [{'destination_filename': 'btjourney-link-metadata', 'extractor': 'api.extractors.btjourney.btjourney_link_extractor', 'name': 'link_metadata', 'source_pattern': 'btjourney/locations/data_link/*.json', 'title': 'Link metadata'}, {'destination_filename': 'btjourney-route-metadata', 'extractor': 'api.extractors.btjourney.btjourney_route_extractor', 'name': 'route_metadata', 'source_pattern': 'btjourney/locations/data_route/*.json', 'title': 'Route metadata'}, {'destination_filename': 'btjourney-site-metadata', 'extractor': 'api.extractors.btjourney.btjourney_site_extractor', 'name': 'site_metadata', 'source_pattern': 'btjourney/locations/data_site/*.json', 'title': 'Site metadata'}], 'name': 'btjourney', 'title': 'Traffic Speed (Bluetooth sensors)'}] |
EMAIL_BACKEND | 'django.core.mail.backends.smtp.EmailBackend' |
EMAIL_HOST | 'ppsw.cam.ac.uk' |
EMAIL_HOST_PASSWORD | '********************' |
EMAIL_HOST_USER | '' |
EMAIL_PORT | 25 |
EMAIL_SSL_CERTFILE | None |
EMAIL_SSL_KEYFILE | '********************' |
EMAIL_SUBJECT_PREFIX | '[Django] ' |
EMAIL_TIMEOUT | None |
EMAIL_USE_LOCALTIME | False |
EMAIL_USE_SSL | False |
EMAIL_USE_TLS | False |
EVERYNET_API_ENDPOINT | '********************' |
FILE_UPLOAD_DIRECTORY_PERMISSIONS | None |
FILE_UPLOAD_HANDLERS | ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] |
FILE_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
FILE_UPLOAD_PERMISSIONS | 420 |
FILE_UPLOAD_TEMP_DIR | None |
FIRST_DAY_OF_WEEK | 0 |
FIXTURE_DIRS | [] |
FORCE_SCRIPT_NAME | None |
FORMAT_MODULE_PATH | None |
FORM_RENDERER | 'django.forms.renderers.DjangoTemplates' |
GOOGLE_API_KEY | '********************' |
IGNORABLE_404_URLS | [] |
INSTALLED_APPS | ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.gis', 'django.contrib.sites', 'allauth', 'allauth.account', 'allauth.socialaccount', 'rest_framework', 'corsheaders', 'tfc_gis', 'transport', 'parking', 'traffic', 'aq', 'csn', 'smartpanel', 'api', 'authmultitoken', 'smartcambridge', 'bikes'] |
INTERNAL_IPS | [] |
JS_API_KEY | '********************' |
LANGUAGES | [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] |
LANGUAGES_BIDI | ['he', 'ar', 'ar-dz', 'fa', 'ur'] |
LANGUAGE_CODE | 'en-gb' |
LANGUAGE_COOKIE_AGE | None |
LANGUAGE_COOKIE_DOMAIN | None |
LANGUAGE_COOKIE_HTTPONLY | False |
LANGUAGE_COOKIE_NAME | 'django_language' |
LANGUAGE_COOKIE_PATH | '/' |
LANGUAGE_COOKIE_SAMESITE | None |
LANGUAGE_COOKIE_SECURE | False |
LOCALE_PATHS | [] |
LOCAL_API_KEY | '********************' |
LOGGING | {'disable_existing_loggers': False, 'formatters': {'detail': {'datefmt': '', 'format': '[%(asctime)s] [%(name)s] [%(levelname)s] ' '- %(message)s'}}, 'handlers': {'console': {'class': 'logging.StreamHandler', 'formatter': 'detail', 'level': 'DEBUG'}, 'mail_admins': {'class': 'smartcambridge.admin_email.AdminEmailHandler', 'include_html': False, 'level': 'ERROR'}}, 'loggers': {}, 'root': {'handlers': ['console'], 'level': 'INFO'}, 'version': 1} |
LOGGING_CONFIG | 'logging.config.dictConfig' |
LOGIN_REDIRECT_URL | 'home' |
LOGIN_URL | '/accounts/login/' |
LOGOUT_REDIRECT_URL | None |
LW_ACCESS_TOKEN | '********************' |
LW_APP_EUI | '28e8280872db83d3' |
MANAGERS | [] |
MEDIA_ROOT | '/home/tfc_prod/tfc_web/tfc_web/media' |
MEDIA_URL | '/media/' |
MESSAGE_STORAGE | 'django.contrib.messages.storage.fallback.FallbackStorage' |
METOFFICE_KEY | '********************' |
MIDDLEWARE | ['corsheaders.middleware.CorsMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware'] |
MIGRATION_MODULES | {} |
MONTH_DAY_FORMAT | 'F j' |
NEW_API_ENDPOINT | '********************' |
NRE_API_KEY | '********************' |
NUMBER_GROUPING | 0 |
OFO_TOKEN | '********************' |
PASSWORD_HASHERS | '********************' |
PASSWORD_RESET_TIMEOUT | '********************' |
PASSWORD_RESET_TIMEOUT_DAYS | '********************' |
PREPEND_WWW | False |
PROJECT_APPS | ['tfc_gis', 'transport', 'parking', 'traffic', 'aq', 'csn', 'smartpanel', 'api', 'authmultitoken', 'smartcambridge', 'bikes'] |
REST_FRAMEWORK | {'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', 'DEFAULT_THROTTLE_RATES': {'token_burst': '********************', 'token_sustained': '********************'}} |
ROOT_URLCONF | 'tfc_web.urls' |
RTMONITOR_KEY | '********************' |
RTMONITOR_URI | 'https://smartcambridge.org/rtmonitor/sirivm/' |
SECRET_KEY | '********************' |
SECURE_BROWSER_XSS_FILTER | False |
SECURE_CONTENT_TYPE_NOSNIFF | True |
SECURE_HSTS_INCLUDE_SUBDOMAINS | False |
SECURE_HSTS_PRELOAD | False |
SECURE_HSTS_SECONDS | 0 |
SECURE_PROXY_SSL_HEADER | None |
SECURE_REDIRECT_EXEMPT | [] |
SECURE_REFERRER_POLICY | 'origin-when-cross-origin' |
SECURE_SSL_HOST | None |
SECURE_SSL_REDIRECT | False |
SERVER_EMAIL | 'root@smartcambridge.org' |
SESSION_CACHE_ALIAS | 'default' |
SESSION_COOKIE_AGE | 1209600 |
SESSION_COOKIE_DOMAIN | None |
SESSION_COOKIE_HTTPONLY | True |
SESSION_COOKIE_NAME | 'sessionid' |
SESSION_COOKIE_PATH | '/' |
SESSION_COOKIE_SAMESITE | 'Lax' |
SESSION_COOKIE_SECURE | False |
SESSION_ENGINE | 'django.contrib.sessions.backends.db' |
SESSION_EXPIRE_AT_BROWSER_CLOSE | False |
SESSION_FILE_PATH | None |
SESSION_SAVE_EVERY_REQUEST | False |
SESSION_SERIALIZER | 'django.contrib.sessions.serializers.JSONSerializer' |
SETTINGS_MODULE | 'tfc_web.settings' |
SHORT_DATETIME_FORMAT | 'm/d/Y P' |
SHORT_DATE_FORMAT | 'm/d/Y' |
SIGNING_BACKEND | 'django.core.signing.TimestampSigner' |
SILENCED_SYSTEM_CHECKS | [] |
SITE_ID | 2 |
SMARTPANEL_API_ENDPOINT | '********************' |
SMARTPANEL_API_TOKEN | '********************' |
SMARTPANEL_TRAFFIC_MAP_RELOAD_LIMIT_DEFAULT | 10 |
STATICFILES_DIRS | ['static'] |
STATICFILES_FINDERS | ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] |
STATICFILES_STORAGE | 'django.contrib.staticfiles.storage.StaticFilesStorage' |
STATIC_ROOT | '/home/tfc_prod/tfc_web/tfc_web/staticfiles' |
STATIC_URL | '/static_web/' |
SYSTEM_API_TOKENS | '********************' |
TEMPLATES | [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/home/tfc_prod/tfc_web/tfc_web/templates'], 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}] |
TEST_NON_SERIALIZED_APPS | [] |
TEST_RUNNER | 'django.test.runner.DiscoverRunner' |
TFC_PROD_EMAIL | 'cl-smartcambridge@lists.cam.ac.uk' |
TFC_PROD_PASSWORD | '********************' |
TFC_PROD_USERNAME | 'tfc_prod' |
TFC_SERVER_CSN_TOKEN | '********************' |
THOUSAND_SEPARATOR | ',' |
TIME_FORMAT | 'H:i' |
TIME_INPUT_FORMATS | ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] |
TIME_ZONE | 'Europe/London' |
TNDS_DIR | '/home/tfc_prod/tfc_web/tfc_web/data/TNDS' |
TNDS_NEW_DIR | '/home/tfc_prod/tfc_web/tfc_web/data/TNDS_NEW' |
TNDS_PASSWORD | '********************' |
TNDS_USERNAME | 'amc203@cam.ac.uk' |
TNDS_ZONES | ['EA', 'SE'] |
USE_I18N | False |
USE_L10N | False |
USE_THOUSAND_SEPARATOR | False |
USE_TZ | True |
USE_X_FORWARDED_HOST | True |
USE_X_FORWARDED_PORT | False |
WSGI_APPLICATION | 'tfc_web.wsgi.application' |
X_FRAME_OPTIONS | 'SAMEORIGIN' |
YEAR_MONTH_FORMAT | 'F Y' |
You’re seeing this error because you have DEBUG = True
in your
Django settings file. Change that to False
, and Django will
display a standard page generated by the handler for this status code.