Changed from old-style to new-style middleware.

- Legacy-Id: 12824
This commit is contained in:
Henrik Levkowetz 2017-02-12 17:07:48 +00:00
parent a1606e8f7d
commit 7f607c51d2
4 changed files with 31 additions and 30 deletions

View file

@ -9,24 +9,21 @@ import re
import smtplib
import unicodedata
# old-style middleware
class SQLLogMiddleware(object):
def process_response(self, request, response):
for q in connection.queries:
if re.match('(update|insert)', q['sql'], re.IGNORECASE):
log(q['sql'])
return response
# new-style middleware
def sql_log_middleware_factory(get_response):
def sql_log_middleware(request):
def sql_log_middleware(get_response):
def sql_log(request):
response = get_response(request)
for q in connection.queries:
if re.match('(update|insert)', q['sql'], re.IGNORECASE):
log(q['sql'])
return response
return sql_log
class SMTPExceptionMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
return self.get_response(request)
def process_exception(self, request, exception):
if isinstance(exception, smtplib.SMTPException):
(extype, value, tb) = log_smtp_exception(exception)
@ -34,19 +31,16 @@ class SMTPExceptionMiddleware(object):
{'exception': extype, 'args': value, 'traceback': "".join(tb)} )
return None
def smtp_exception_middleware_factory(get_response):
def smtp_exception_middleware(request):
def redirect_trailing_period_middleware(get_response):
def redirect_trailing_period(request):
response = get_response(request)
return response
class RedirectTrailingPeriod(object):
def process_response(self, request, response):
if response.status_code == 404 and request.path.endswith("."):
return HttpResponsePermanentRedirect(request.path.rstrip("."))
return response
return redirect_trailing_period
class UnicodeNfkcNormalization(object):
def process_request(self, request):
def unicode_nfkc_normalization_middleware(get_response):
def unicode_nfkc_normalization(request):
"""Do Unicode NFKC normalization to turn ligatures into individual characters.
This was prompted by somebody actually requesting an url for /wg/ipfix/charter
where the 'fi' was composed of an \ufb01 ligature...
@ -56,4 +50,7 @@ class UnicodeNfkcNormalization(object):
"""
request.META["PATH_INFO"] = unicodedata.normalize('NFKC', request.META["PATH_INFO"])
request.path_info = unicodedata.normalize('NFKC', request.path_info)
return None
response = get_response(request)
return response
return unicode_nfkc_normalization

View file

@ -51,6 +51,7 @@ ADMINS = (
)
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.SHA1PasswordHasher',
@ -79,7 +80,7 @@ DATABASES = {
'ENGINE': 'django.db.backends.mysql',
'USER': 'ietf',
#'PASSWORD': 'ietf',
#'OPTIONS': {},
'OPTIONS': {'sql_mode': 'STRICT_TRANS_TABLES', },
},
}
@ -261,7 +262,7 @@ if DEBUG:
TEMPLATES[0]['OPTIONS']['string_if_invalid'] = "** No value found for '%s' **"
MIDDLEWARE_CLASSES = (
MIDDLEWARE = (
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
@ -269,11 +270,11 @@ MIDDLEWARE_CLASSES = (
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.http.ConditionalGetMiddleware',
'ietf.middleware.SQLLogMiddleware',
'ietf.middleware.sql_log_middleware',
'ietf.middleware.SMTPExceptionMiddleware',
'ietf.middleware.RedirectTrailingPeriod',
'ietf.middleware.redirect_trailing_period_middleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'ietf.middleware.UnicodeNfkcNormalization',
'ietf.middleware.unicode_nfkc_normalization_middleware',
)
ROOT_URLCONF = 'ietf.urls'
@ -298,6 +299,7 @@ INSTALLED_APPS = (
'django.contrib.sites',
'django.contrib.staticfiles',
# External apps
'anora',
'bootstrap3',
'django_markup',
'django_password_strength',
@ -674,7 +676,7 @@ SELENIUM_TESTS_ONLY = False
# Set debug apps in settings_local.DEV_APPS
DEV_APPS = ()
DEV_MIDDLEWARE_CLASSES = ()
DEV_MIDDLEWARE = ()
# django-debug-toolbar and the debug listing of sql queries at the bottom of
# each page when in dev mode can overlap in functionality, and can slow down
@ -798,7 +800,7 @@ for app in INSTALLED_APPS:
# Add DEV_APPS to INSTALLED_APPS
INSTALLED_APPS += DEV_APPS
MIDDLEWARE_CLASSES += DEV_MIDDLEWARE_CLASSES
MIDDLEWARE += DEV_MIDDLEWARE
TEMPLATES[0]['OPTIONS']['context_processors'] += DEV_TEMPLATE_CONTEXT_PROCESSORS

View file

@ -50,6 +50,6 @@ MEDIA_URL = '/test/media/'
PHOTOS_DIR = MEDIA_ROOT + PHOTOS_DIRNAME # pyflakes:ignore
# Undo any developer-dependent middleware when running the tests
MIDDLEWARE_CLASSES = [ c for c in MIDDLEWARE_CLASSES if not c in DEV_MIDDLEWARE_CLASSES ] # pyflakes:ignore
MIDDLEWARE = [ c for c in MIDDLEWARE if not c in DEV_MIDDLEWARE ] # pyflakes:ignore
TEMPLATES[0]['OPTIONS']['context_processors'] = [ p for p in TEMPLATES[0]['OPTIONS']['context_processors'] if not p in DEV_TEMPLATE_CONTEXT_PROCESSORS ] # pyflakes:ignore

View file

@ -122,11 +122,13 @@ class TemplateCoverageLoader(BaseLoader):
raise TemplateDoesNotExist(template_name)
load_template_source.is_usable = True
class RecordUrlsMiddleware(object):
def process_request(self, request):
def record_urls_middleware(get_response):
def record_urls(request):
global url_coverage_collection, visited_urls
if url_coverage_collection == True:
visited_urls.add(request.path)
return get_response(request)
return record_urls
def get_url_patterns(module, apps=None):
def include(name):
@ -403,7 +405,7 @@ class IetfTestRunner(DiscoverRunner):
settings.TEMPLATES[0]['OPTIONS']['loaders'] = ('ietf.utils.test_runner.TemplateCoverageLoader',) + settings.TEMPLATES[0]['OPTIONS']['loaders']
settings.MIDDLEWARE_CLASSES = ('ietf.utils.test_runner.RecordUrlsMiddleware',) + tuple(settings.MIDDLEWARE_CLASSES)
settings.MIDDLEWARE = ('ietf.utils.test_runner.record_urls_middleware',) + tuple(settings.MIDDLEWARE)
url_coverage_collection = True
self.code_coverage_checker = settings.TEST_CODE_COVERAGE_CHECKER