From 7f607c51d2ddca0de7e746c7c52086e902be7d67 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Sun, 12 Feb 2017 17:07:48 +0000 Subject: [PATCH] Changed from old-style to new-style middleware. - Legacy-Id: 12824 --- ietf/middleware.py | 35 ++++++++++++++++------------------- ietf/settings.py | 16 +++++++++------- ietf/settings_sqlitetest.py | 2 +- ietf/utils/test_runner.py | 8 +++++--- 4 files changed, 31 insertions(+), 30 deletions(-) diff --git a/ietf/middleware.py b/ietf/middleware.py index 7e58d855b..8816fbb69 100644 --- a/ietf/middleware.py +++ b/ietf/middleware.py @@ -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 + \ No newline at end of file diff --git a/ietf/settings.py b/ietf/settings.py index a5963b673..91622f4cd 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -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 diff --git a/ietf/settings_sqlitetest.py b/ietf/settings_sqlitetest.py index 038aca229..6180cacaa 100644 --- a/ietf/settings_sqlitetest.py +++ b/ietf/settings_sqlitetest.py @@ -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 diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index aee9129ce..a395fe4d7 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -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