Browse Source

#702: core cleanup

Rafał Pitoń 8 years ago
parent
commit
08cfc5e396

+ 8 - 2
misago/core/__init__.py

@@ -1,7 +1,10 @@
 from django.conf import settings
 from django.core.checks import register, Critical
 
-SUPPORTED_ENGINES = ('django.db.backends.postgresql', 'django.db.backends.postgresql_psycopg2', )
+SUPPORTED_ENGINES = [
+    'django.db.backends.postgresql',
+    'django.db.backends.postgresql_psycopg2',
+]
 
 
 @register()
@@ -12,7 +15,10 @@ def check_db_engine(app_configs, **kwargs):
         if settings.DATABASES['default']['ENGINE'] not in SUPPORTED_ENGINES:
             raise ValueError()
     except (AttributeError, KeyError, ValueError):
-        errors.append(Critical(msg='Misago requires PostgreSQL database.', id='misago.001'))
+        errors.append(Critical(
+            msg='Misago requires PostgreSQL database.',
+            id='misago.001',
+        ))
 
     return errors
 

+ 3 - 1
misago/core/apipatch.py

@@ -39,7 +39,9 @@ class ApiPatch(object):
 
     def dispatch(self, request, target):
         if not isinstance(request.data, list):
-            return Response({'detail': "PATCH request should be list of operations"}, status=400)
+            return Response({
+                'detail': "PATCH request should be list of operations",
+            }, status=400)
 
         detail = []
         is_errored = False

+ 5 - 3
misago/core/apirouter.py

@@ -9,8 +9,10 @@ class MisagoApiRouter(DefaultRouter):
         # List route.
         Route(
             url=r'^{prefix}{trailing_slash}$',
-            mapping={'get': 'list',
-                     'post': 'create'},
+            mapping={
+                'get': 'list',
+                'post': 'create',
+            },
             name='{basename}-list',
             initkwargs={'suffix': 'List'}
         ),
@@ -29,7 +31,7 @@ class MisagoApiRouter(DefaultRouter):
                 'get': 'retrieve',
                 'put': 'update',
                 'patch': 'partial_update',
-                'delete': 'destroy'
+                'delete': 'destroy',
             },
             name='{basename}-detail',
             initkwargs={'suffix': 'Instance'}

+ 6 - 2
misago/core/context_processors.py

@@ -38,11 +38,15 @@ def current_link(request):
 
 
 def momentjs_locale(request):
-    return {'MOMENTJS_LOCALE_URL': get_locale_url(get_language())}
+    return {
+        'MOMENTJS_LOCALE_URL': get_locale_url(get_language()),
+    }
 
 
 def frontend_context(request):
     if request.include_frontend_context:
-        return {'frontend_context': request.frontend_context}
+        return {
+            'frontend_context': request.frontend_context,
+        }
     else:
         return {}

+ 14 - 4
misago/core/errorpages.py

@@ -13,18 +13,28 @@ def _ajax_error(code=406, message=None):
 
 @admin_error_page
 def _error_page(request, code, message=None):
-    request.frontend_context.update({'CURRENT_LINK': 'misago:error-%s' % code})
+    request.frontend_context.update({
+        'CURRENT_LINK': 'misago:error-%s' % code,
+    })
 
-    return render(request, 'misago/errorpages/%s.html' % code, {'message': message}, status=code)
+    return render(
+        request, 'misago/errorpages/%s.html' % code, {
+            'message': message,
+        }, status=code
+    )
 
 
 def banned(request, ban):
     request.frontend_context.update({
         'MESSAGE': ban.get_serialized_message(),
-        'CURRENT_LINK': 'misago:error-banned'
+        'CURRENT_LINK': 'misago:error-banned',
     })
 
-    return render(request, 'misago/errorpages/banned.html', {'ban': ban}, status=403)
+    return render(
+        request, 'misago/errorpages/banned.html', {
+            'ban': ban,
+        }, status=403
+    )
 
 
 def permission_denied(request, message=None):

+ 12 - 7
misago/core/exceptionhandler.py

@@ -19,7 +19,10 @@ def is_misago_exception(exception):
 
 
 def handle_ajax_error(request, exception):
-    json = {'is_error': 1, 'message': six.text_type(exception.message)}
+    json = {
+        'is_error': 1,
+        'message': six.text_type(exception.message),
+    }
     return JsonResponse(json, status=exception.code)
 
 
@@ -63,12 +66,14 @@ def handle_permission_denied_exception(request, exception):
     return errorpages.permission_denied(request, error_message)
 
 
-EXCEPTION_HANDLERS = ((AjaxError, handle_ajax_error),
-                      (Banned, handle_banned_exception),
-                      (Http404, handle_http404_exception),
-                      (ExplicitFirstPage, handle_explicit_first_page_exception),
-                      (OutdatedSlug, handle_outdated_slug_exception),
-                      (PermissionDenied, handle_permission_denied_exception), )
+EXCEPTION_HANDLERS = [
+    (AjaxError, handle_ajax_error),
+    (Banned, handle_banned_exception),
+    (Http404, handle_http404_exception),
+    (ExplicitFirstPage, handle_explicit_first_page_exception),
+    (OutdatedSlug, handle_outdated_slug_exception),
+    (PermissionDenied, handle_permission_denied_exception),
+]
 
 
 def get_exception_handler(exception):

+ 4 - 2
misago/core/forms.py

@@ -45,8 +45,10 @@ def YesNoSwitch(**kwargs):
 
     return YesNoSwitchBase(
         coerce=int,
-        choices=((1, yes_label),
-                 (0, no_label)),
+        choices=[
+            (1, yes_label),
+            (0, no_label),
+        ],
         widget=RadioSelect(attrs={'class': 'yesno-switch'}),
         **kwargs
     )

+ 0 - 30
misago/core/management/commands/testemailsetup.py

@@ -1,30 +0,0 @@
-from django.conf import settings
-from django.core import mail
-from django.core.exceptions import ValidationError
-from django.core.management.base import BaseCommand
-from django.core.validators import validate_email
-
-
-class Command(BaseCommand):
-    help = 'Sends test e-mail to given address'
-
-    def add_arguments(self, parser):
-        parser.add_argument('email', type=str)
-
-    def handle(self, *args, **options):
-        try:
-            email = options['email']
-            validate_email(email)
-            self.send_message(email)
-        except ValidationError:
-            self.stderr.write("This isn't valid e-mail address")
-
-    def send_message(self, email):
-        mail.send_mail(
-            'Test Message',
-            ("This message was sent to test if your "
-             "site e-mail is configured correctly."),
-            settings.DEFAULT_FROM_EMAIL, [email],
-            fail_silently=False
-        )
-        self.stdout.write("Test message was sent to %s" % email)

+ 3 - 4
misago/core/page.py

@@ -23,10 +23,9 @@ class Page(object):
             iterations += 1
             if iterations > 512:
                 message = (
-                    "%s page hierarchy is invalid or too complex  to "
-                    "resolve. Sections left: %s" % self._unsorted_list
+                    "%s page hierarchy is invalid or too complex  to resolve. Sections left: %s"
                 )
-                raise ValueError(message)
+                raise ValueError(message % self._unsorted_list)
 
             for index, section in enumerate(self._unsorted_list):
                 if section['after']:
@@ -71,7 +70,7 @@ class Page(object):
             self, link, after=None, before=None, visible_if=None, get_metadata=None, **kwargs
     ):
         if self._finalized:
-            message = ("%s page was initialized already and no longer accepts new sections")
+            message = "%s page was initialized already and no longer accepts new sections"
             raise RuntimeError(message % self.name)
 
         if after and before:

+ 3 - 3
misago/core/setup.py

@@ -22,11 +22,11 @@ def validate_project_name(parser, project_name):
     except ImportError:
         pass
     else:
-        parser.error(
+        parser.error((
             "'%s' conflicts with the name of an existing "
             "Python module and cannot be used as a project "
-            "name. Please try another name." % project_name
-        )
+            "name. Please try another name."
+        ) % project_name)
 
     return project_name
 

+ 1 - 1
misago/core/templatetags/misago_forms.py

@@ -67,7 +67,7 @@ class FormRowNode(template.Node):
                 'form_show_errors': True,
                 'form_show_labels': True,
                 'label_class': label_class or '',
-                'field_class': field_class or ''
+                'field_class': field_class or '',
             }
         )
 

+ 11 - 3
misago/core/testproject/views.py

@@ -68,7 +68,11 @@ def test_paginated_response_data_serializer(request):
     data = [0, 1, 2, 3]
     page = paginate(data, 0, 10)
 
-    return paginated_response(page, data=['a', 'b', 'c', 'd'], serializer=MockSerializer)
+    return paginated_response(
+        page,
+        data=['a', 'b', 'c', 'd'],
+        serializer=MockSerializer,
+    )
 
 
 @api_view()
@@ -77,8 +81,12 @@ def test_paginated_response_data_extra(request):
     page = paginate(data, 0, 10)
 
     return paginated_response(
-        page, data=['a', 'b', 'c', 'd'], extra={'next': 'EXTRA',
-                                                'lorem': 'ipsum'}
+        page,
+        data=['a', 'b', 'c', 'd'],
+        extra={
+            'next': 'EXTRA',
+            'lorem': 'ipsum',
+        },
     )
 
 

+ 41 - 30
misago/core/tests/test_apipatch.py

@@ -63,19 +63,23 @@ class ApiPatchTests(TestCase):
         """validate_action method validates action dict"""
         patch = ApiPatch()
 
-        VALID_ACTIONS = ({
-            'op': 'add',
-            'path': 'test',
-            'value': 42
-        }, {
-            'op': 'remove',
-            'path': 'other-test',
-            'value': 'Lorem'
-        }, {
-            'op': 'replace',
-            'path': 'false-test',
-            'value': None
-        }, )
+        VALID_ACTIONS = [
+            {
+                'op': 'add',
+                'path': 'test',
+                'value': 42
+            },
+            {
+                'op': 'remove',
+                'path': 'other-test',
+                'value': 'Lorem'
+            },
+            {
+                'op': 'replace',
+                'path': 'false-test',
+                'value': None
+            },
+        ]
 
         for action in VALID_ACTIONS:
             patch.validate_action(action)
@@ -103,13 +107,20 @@ class ApiPatchTests(TestCase):
 
         # op lacking value
         try:
-            patch.validate_action({'op': 'add', 'path': 'yolo'})
+            patch.validate_action({
+                'op': 'add',
+                'path': 'yolo',
+            })
         except InvalidAction as e:
             self.assertEqual(e.args[0], u'"add" op has to specify value')
 
         # empty value is allowed
         try:
-            patch.validate_action({'op': 'add', 'path': 'yolo', 'value': ''})
+            patch.validate_action({
+                'op': 'add',
+                'path': 'yolo',
+                'value': '',
+            })
         except InvalidAction as e:
             self.assertEqual(e.args[0], u'"add" op has to specify value')
 
@@ -184,17 +195,17 @@ class ApiPatchTests(TestCase):
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 2
+                    'value': 2,
                 },
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 6
+                    'value': 6,
                 },
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 7
+                    'value': 7,
                 },
             ]), MockObject(13)
         )
@@ -214,20 +225,20 @@ class ApiPatchTests(TestCase):
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 2
+                    'value': 2,
                 },
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 6
+                    'value': 6,
                 },
                 {
-                    'op': 'replace'
+                    'op': 'replace',
                 },
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 7
+                    'value': 7,
                 },
             ]), MockObject(13)
         )
@@ -247,22 +258,22 @@ class ApiPatchTests(TestCase):
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 2
+                    'value': 2,
                 },
                 {
                     'op': 'replace',
                     'path': 'error',
-                    'value': '404'
+                    'value': '404',
                 },
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 6
+                    'value': 6,
                 },
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 7
+                    'value': 7,
                 },
             ]), MockObject(13)
         )
@@ -281,22 +292,22 @@ class ApiPatchTests(TestCase):
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 2
+                    'value': 2,
                 },
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 6
+                    'value': 6,
                 },
                 {
                     'op': 'replace',
                     'path': 'mutate',
-                    'value': 9
+                    'value': 9,
                 },
                 {
                     'op': 'replace',
                     'path': 'error',
-                    'value': 'perm'
+                    'value': 'perm',
                 },
             ]), MockObject(13)
         )

+ 5 - 4
misago/core/tests/test_context_processors.py

@@ -89,10 +89,11 @@ class FrontendContextTests(TestCase):
         mock_request.frontend_context = {'someValue': 'Something'}
 
         self.assertEqual(
-            context_processors.frontend_context(mock_request),
-            {'frontend_context': {
-                'someValue': 'Something'
-            }}
+            context_processors.frontend_context(mock_request), {
+                'frontend_context': {
+                    'someValue': 'Something',
+                },
+            }
         )
 
         mock_request.include_frontend_context = False

+ 7 - 4
misago/core/tests/test_exceptionhandlers.py

@@ -8,10 +8,13 @@ from misago.core.exceptions import Banned
 from misago.users.models import Ban
 
 
-INVALID_EXCEPTIONS = (
-    django_exceptions.ObjectDoesNotExist, django_exceptions.ViewDoesNotExist, TypeError,
-    ValueError, KeyError,
-)
+INVALID_EXCEPTIONS = [
+    django_exceptions.ObjectDoesNotExist,
+    django_exceptions.ViewDoesNotExist,
+    TypeError,
+    ValueError,
+    KeyError,
+]
 
 
 class IsMisagoExceptionTests(TestCase):

+ 8 - 3
misago/core/tests/test_momentjs.py

@@ -6,9 +6,14 @@ from misago.core.momentjs import clean_language_name, get_locale_url
 class MomentJSTests(TestCase):
     def test_clean_language_name(self):
         """clean_language_name returns valid name"""
-        TEST_CASES = (('AF', 'af'), ('ar-SA', 'ar-sa'), ('de', 'de'), ('de-NO', 'de'),
-                      ('pl-pl', 'pl'),
-                      ('zz', None), )
+        TEST_CASES = [
+            ('AF', 'af'),
+            ('ar-SA', 'ar-sa'),
+            ('de', 'de'),
+            ('de-NO', 'de'),
+            ('pl-pl', 'pl'),
+            ('zz', None),
+        ]
 
         for dirty, clean in TEST_CASES:
             self.assertEqual(clean_language_name(dirty), clean)

+ 12 - 3
misago/core/tests/test_page.py

@@ -9,12 +9,21 @@ class SiteTests(TestCase):
 
     def test_pages(self):
         """add_section adds section to page"""
-        self.page.add_section(link='misago:user-posts', name='Posts', after='misago:user-threads')
+        self.page.add_section(
+            link='misago:user-posts',
+            name='Posts',
+            after='misago:user-threads',
+        )
 
-        self.page.add_section(link='misago:user-threads', name='Threads')
+        self.page.add_section(
+            link='misago:user-threads',
+            name='Threads',
+        )
 
         self.page.add_section(
-            link='misago:user-follows', name='Follows', before='misago:user-posts'
+            link='misago:user-follows',
+            name='Follows',
+            before='misago:user-posts',
         )
 
         self.page.assert_is_finalized()

+ 3 - 3
misago/core/tests/test_templatetags.py

@@ -240,7 +240,7 @@ class PageTitleTests(TestCase):
         self.assertEqual(
             tpl.render(Context({
                 'item': 'Lorem Ipsum',
-                'parent': 'Some Thread'
+                'parent': 'Some Thread',
             })).strip(), 'Lorem Ipsum | Some Thread'
         )
 
@@ -255,7 +255,7 @@ class PageTitleTests(TestCase):
         tpl = Template(tpl_content)
         self.assertEqual(
             tpl.render(Context({
-                'item': 'Lorem Ipsum'
+                'item': 'Lorem Ipsum',
             })).strip(), 'Lorem Ipsum (page: 3)'
         )
 
@@ -271,6 +271,6 @@ class PageTitleTests(TestCase):
         self.assertEqual(
             tpl.render(Context({
                 'item': 'Lorem Ipsum',
-                'parent': 'Some Thread'
+                'parent': 'Some Thread',
             })).strip(), 'Lorem Ipsum (page: 3) | Some Thread'
         )

+ 70 - 45
misago/core/tests/test_utils.py

@@ -70,9 +70,15 @@ class SlugifyTests(TestCase):
 
     def test_valid_slugify_output(self):
         """Misago's slugify correctly slugifies string"""
-        test_cases = (('Bob', 'bob'), ('Eric The Fish', 'eric-the-fish'),
-                      ('John   Snow', 'john-snow'), ('J0n', 'j0n'), ('An###ne', 'anne'),
-                      ('S**t', 'st'), ('Łók', 'lok'), )
+        test_cases = [
+            ('Bob', 'bob'),
+            ('Eric The Fish', 'eric-the-fish'),
+            ('John   Snow', 'john-snow'),
+            ('J0n', 'j0n'),
+            ('An###ne', 'anne'),
+            ('S**t', 'st'),
+            ('Łók', 'lok'),
+        ]
 
         for original, slug in test_cases:
             self.assertEqual(slugify(original), slug)
@@ -81,36 +87,41 @@ class SlugifyTests(TestCase):
 class ParseIso8601StringTests(TestCase):
     def test_valid_input(self):
         """util parses iso 8601 strings"""
-        INPUTS = (
-            '2016-10-22T20:55:39.185085Z', '2016-10-22T20:55:39.185085-01:00',
-            '2016-10-22T20:55:39-01:00', '2016-10-22T20:55:39.185085+01:00',
-        )
+        INPUTS = [
+            '2016-10-22T20:55:39.185085Z',
+            '2016-10-22T20:55:39.185085-01:00',
+            '2016-10-22T20:55:39-01:00',
+            '2016-10-22T20:55:39.185085+01:00',
+        ]
 
         for test_input in INPUTS:
             self.assertTrue(parse_iso8601_string(test_input))
 
     def test_invalid_input(self):
         """util throws ValueError on invalid input"""
-        INPUTS = (
-            '', '2016-10-22', '2016-10-22T30:55:39.185085+11:00',
+        INPUTS = [
+            '',
+            '2016-10-22',
+            '2016-10-22T30:55:39.185085+11:00',
             '2016-10-22T20:55:39.18SSSSS5085Z',
-        )
+        ]
 
         for test_input in INPUTS:
             with self.assertRaises(ValueError):
                 self.assertTrue(parse_iso8601_string(test_input))
 
 
-PLAINTEXT_FORMAT_CASES = (
-    ('Lorem ipsum.',
-     '<p>Lorem ipsum.</p>'), ('Lorem <b>ipsum</b>.', '<p>Lorem &lt;b&gt;ipsum&lt;/b&gt;.</p>'),
+PLAINTEXT_FORMAT_CASES = [
+    ('Lorem ipsum.', '<p>Lorem ipsum.</p>'),
+    ('Lorem <b>ipsum</b>.', '<p>Lorem &lt;b&gt;ipsum&lt;/b&gt;.</p>'),
     ('Lorem "ipsum" dolor met.', '<p>Lorem &quot;ipsum&quot; dolor met.</p>'),
     ('Lorem ipsum.\nDolor met.', '<p>Lorem ipsum.<br />Dolor met.</p>'),
-    ('Lorem ipsum.\n\nDolor met.', '<p>Lorem ipsum.</p>\n\n<p>Dolor met.</p>'), (
+    ('Lorem ipsum.\n\nDolor met.', '<p>Lorem ipsum.</p>\n\n<p>Dolor met.</p>'),
+    (
         'http://misago-project.org/login/',
         '<p><a href="http://misago-project.org/login/">http://misago-project.org/login/</a></p>'
     ),
-)
+]
 
 
 class FormatPlaintextForHtmlTests(TestCase):
@@ -141,37 +152,41 @@ class CleanReturnPathTests(TestCase):
     def test_get_request(self):
         """clean_return_path works for GET requests"""
         bad_request = MockRequest(
-            'GET', {'HTTP_REFERER': 'http://cookies.com',
-                    'HTTP_HOST': 'misago-project.org'}
+            'GET', {
+                'HTTP_REFERER': 'http://cookies.com',
+                'HTTP_HOST': 'misago-project.org',
+            }
         )
         self.assertIsNone(clean_return_path(bad_request))
 
         bad_request = MockRequest(
-            'GET',
-            {'HTTP_REFERER': 'https://misago-project.org/',
-             'HTTP_HOST': 'misago-project.org/'}
+            'GET', {
+                'HTTP_REFERER': 'https://misago-project.org/',
+                'HTTP_HOST': 'misago-project.org/',
+            }
         )
         self.assertIsNone(clean_return_path(bad_request))
 
         bad_request = MockRequest(
             'GET', {
                 'HTTP_REFERER': 'https://misago-project.org/',
-                'HTTP_HOST': 'misago-project.org/assadsa/'
+                'HTTP_HOST': 'misago-project.org/assadsa/',
             }
         )
         self.assertIsNone(clean_return_path(bad_request))
 
         ok_request = MockRequest(
-            'GET',
-            {'HTTP_REFERER': 'http://misago-project.org/',
-             'HTTP_HOST': 'misago-project.org/'}
+            'GET', {
+                'HTTP_REFERER': 'http://misago-project.org/',
+                'HTTP_HOST': 'misago-project.org/',
+            }
         )
         self.assertEqual(clean_return_path(ok_request), '/')
 
         ok_request = MockRequest(
             'GET', {
                 'HTTP_REFERER': 'http://misago-project.org/login/',
-                'HTTP_HOST': 'misago-project.org/'
+                'HTTP_HOST': 'misago-project.org/',
             }
         )
         self.assertEqual(clean_return_path(ok_request), '/login/')
@@ -179,16 +194,22 @@ class CleanReturnPathTests(TestCase):
     def test_post_request(self):
         """clean_return_path works for POST requests"""
         bad_request = MockRequest(
-            'POST',
-            {'HTTP_REFERER': 'http://misago-project.org/',
-             'HTTP_HOST': 'misago-project.org/'}, {'return_path': '/sdasdsa/'}
+            'POST', {
+                'HTTP_REFERER': 'http://misago-project.org/',
+                'HTTP_HOST': 'misago-project.org/',
+            }, {
+                'return_path': '/sdasdsa/',
+            }
         )
         self.assertIsNone(clean_return_path(bad_request))
 
         ok_request = MockRequest(
-            'POST',
-            {'HTTP_REFERER': 'http://misago-project.org/',
-             'HTTP_HOST': 'misago-project.org/'}, {'return_path': '/login/'}
+            'POST', {
+                'HTTP_REFERER': 'http://misago-project.org/',
+                'HTTP_HOST': 'misago-project.org/',
+            }, {
+                'return_path': '/login/',
+            }
         )
         self.assertEqual(clean_return_path(ok_request), '/login/')
 
@@ -197,23 +218,25 @@ class IsRefererLocalTests(TestCase):
     def test_local_referers(self):
         """local referers return true"""
         ok_request = MockRequest(
-            'GET',
-            {'HTTP_REFERER': 'http://misago-project.org/',
-             'HTTP_HOST': 'misago-project.org/'}
+            'GET', {
+                'HTTP_REFERER': 'http://misago-project.org/',
+                'HTTP_HOST': 'misago-project.org/',
+            }
         )
         self.assertTrue(is_referer_local(ok_request))
 
         ok_request = MockRequest(
-            'GET',
-            {'HTTP_REFERER': 'http://misago-project.org/',
-             'HTTP_HOST': 'misago-project.org/'}
+            'GET', {
+                'HTTP_REFERER': 'http://misago-project.org/',
+                'HTTP_HOST': 'misago-project.org/',
+            }
         )
         self.assertTrue(is_referer_local(ok_request))
 
         ok_request = MockRequest(
             'GET', {
                 'HTTP_REFERER': 'http://misago-project.org/login/',
-                'HTTP_HOST': 'misago-project.org/'
+                'HTTP_HOST': 'misago-project.org/',
             }
         )
         self.assertTrue(is_referer_local(ok_request))
@@ -221,23 +244,25 @@ class IsRefererLocalTests(TestCase):
     def test_foreign_referers(self):
         """non-local referers return false"""
         bad_request = MockRequest(
-            'GET',
-            {'HTTP_REFERER': 'http://else-project.org/',
-             'HTTP_HOST': 'misago-project.org/'}
+            'GET', {
+                'HTTP_REFERER': 'http://else-project.org/',
+                'HTTP_HOST': 'misago-project.org/',
+            }
         )
         self.assertFalse(is_referer_local(bad_request))
 
         bad_request = MockRequest(
-            'GET',
-            {'HTTP_REFERER': 'https://misago-project.org/',
-             'HTTP_HOST': 'misago-project.org/'}
+            'GET', {
+                'HTTP_REFERER': 'https://misago-project.org/',
+                'HTTP_HOST': 'misago-project.org/',
+            }
         )
         self.assertFalse(is_referer_local(bad_request))
 
         bad_request = MockRequest(
             'GET', {
                 'HTTP_REFERER': 'http://misago-project.org/',
-                'HTTP_HOST': 'misago-project.org/assadsa/'
+                'HTTP_HOST': 'misago-project.org/assadsa/',
             }
         )
         self.assertFalse(is_referer_local(bad_request))