Files
Adam Chainz 3fd97361ab Convert readthedocs links for their .org -> .io migration for hosted projects
As per [their blog post of the 27th April](https://blog.readthedocs.com/securing-subdomains/) ‘Securing subdomains’:

> Starting today, Read the Docs will start hosting projects from subdomains on the domain readthedocs.io, instead of on readthedocs.org. This change addresses some security concerns around site cookies while hosting user generated data on the same domain as our dashboard.

Test Plan: Manually visited all the links I’ve modified.
2016-06-18 09:45:12 +01:00

102 lines
3.0 KiB
Python

__CONFIG_HELP__ = '''
<div class="traceback">
<b>To disable this interface, set </b>
<a target="window"
href="https://pecan.readthedocs.io/en/latest/deployment.html#disabling-debug-mode">
<pre>conf.app.debug = False</pre>
</a>
</div>
''' # noqa
try:
import re
from six import b
from backlash.debug import DebuggedApplication
class DebugMiddleware(DebuggedApplication):
body_re = re.compile(b('(<body[^>]*>)'), re.I)
def debug_application(self, environ, start_response):
for part in super(DebugMiddleware, self).debug_application(
environ, start_response
):
yield self.body_re.sub(b('\g<1>%s' % __CONFIG_HELP__), part)
except ImportError:
import logging
from traceback import print_exc
from pprint import pformat
from mako.template import Template
from six.moves import cStringIO as StringIO
from webob import Response
from webob.exc import HTTPException
LOG = logging.getLogger(__file__)
debug_template_raw = '''<html>
<head>
<title>Pecan - Application Error</title>
<body>
<header>
<h1>
An error occurred!
</h1>
</header>
<div id="error-content">
<p>
%(config_help)s
Pecan offers support for interactive debugging by installing the <a href="https://pypi.python.org/pypi/backlash" target="window">backlash</a> package:
<br />
<b><pre>pip install backlash</pre></b>
...and reloading this page.
</p>
<h2>Traceback</h2>
<div id="traceback">
<pre>${traceback}</pre>
</div>
<h2>WSGI Environment</h2>
<div id="environ">
<pre>${environment}</pre>
</div>
</div>
</body>
</html>
''' % {'config_help': __CONFIG_HELP__} # noqa
debug_template = Template(debug_template_raw)
class DebugMiddleware(object):
def __init__(self, app, *args, **kwargs):
self.app = app
def __call__(self, environ, start_response):
try:
return self.app(environ, start_response)
except Exception as exc:
# get a formatted exception
out = StringIO()
print_exc(file=out)
LOG.exception(exc)
# get formatted WSGI environment
formatted_environ = pformat(environ)
# render our template
result = debug_template.render(
traceback=out.getvalue(),
environment=formatted_environ
)
# construct and return our response
response = Response()
if isinstance(exc, HTTPException):
response.status_int = exc.status
else:
response.status_int = 500
response.unicode_body = result
return response(environ, start_response)