Browse Source

added isort for automatic sorting of imports

Rafał Pitoń 9 years ago
parent
commit
5ac973fbd7
260 changed files with 471 additions and 473 deletions
  1. 9 0
      .isort.cfg
  2. 2 2
      misago/acl/admin.py
  3. 2 3
      misago/acl/api.py
  4. 1 2
      misago/acl/forms.py
  5. 1 1
      misago/acl/migrations/0001_initial.py
  6. 1 1
      misago/acl/migrations/0002_acl_version_tracker.py
  7. 1 2
      misago/acl/models.py
  8. 1 0
      misago/acl/panels.py
  9. 1 0
      misago/acl/tests/test_acl_algebra.py
  10. 1 2
      misago/acl/tests/test_api.py
  11. 0 1
      misago/acl/tests/test_providers.py
  12. 1 2
      misago/acl/tests/test_roleadmin_views.py
  13. 2 1
      misago/acl/testutils.py
  14. 1 2
      misago/acl/views.py
  15. 2 1
      misago/admin/auth.py
  16. 1 0
      misago/admin/tests/test_admin_hierarchy.py
  17. 1 1
      misago/admin/urlpatterns.py
  18. 1 1
      misago/admin/urls.py
  19. 3 4
      misago/admin/views/auth.py
  20. 2 2
      misago/admin/views/errorpages.py
  21. 1 0
      misago/admin/views/generic/base.py
  22. 2 3
      misago/admin/views/generic/list.py
  23. 3 5
      misago/admin/views/index.py
  24. 14 2
      misago/categories/admin.py
  25. 3 3
      misago/categories/forms.py
  26. 2 1
      misago/categories/management/commands/synchronizecategories.py
  27. 4 3
      misago/categories/migrations/0001_initial.py
  28. 1 1
      misago/categories/migrations/0002_default_categories.py
  29. 1 1
      misago/categories/migrations/0003_categories_roles.py
  30. 1 1
      misago/categories/migrations/0004_category_last_thread.py
  31. 3 3
      misago/categories/models.py
  32. 1 3
      misago/categories/permissions.py
  33. 2 2
      misago/categories/serializers.py
  34. 5 4
      misago/categories/signals.py
  35. 2 1
      misago/categories/tests/test_categories_admin_views.py
  36. 1 2
      misago/categories/tests/test_category_model.py
  37. 0 1
      misago/categories/tests/test_permissions_admin_views.py
  38. 1 2
      misago/categories/tests/test_prunecategories.py
  39. 1 2
      misago/categories/tests/test_synchronizecategories.py
  40. 3 4
      misago/categories/tests/test_utils.py
  41. 3 4
      misago/categories/tests/test_views.py
  42. 1 0
      misago/categories/urls/api.py
  43. 2 3
      misago/categories/utils.py
  44. 1 2
      misago/categories/views/categoriesadmin.py
  45. 2 3
      misago/categories/views/permsadmin.py
  46. 1 0
      misago/conf/admin.py
  47. 2 1
      misago/conf/context_processors.py
  48. 2 0
      misago/conf/defaults.py
  49. 3 1
      misago/conf/forms.py
  50. 1 0
      misago/conf/gateway.py
  51. 1 1
      misago/conf/migrations/0001_initial.py
  52. 2 3
      misago/conf/migrationutils.py
  53. 1 2
      misago/conf/models.py
  54. 0 1
      misago/conf/tests/test_admin_views.py
  55. 1 2
      misago/conf/tests/test_context_processors.py
  56. 1 1
      misago/conf/tests/test_hydrators.py
  57. 1 2
      misago/conf/tests/test_migrationutils.py
  58. 1 0
      misago/conf/tests/test_models.py
  59. 3 4
      misago/conf/tests/test_settings.py
  60. 0 1
      misago/conf/views.py
  61. 2 1
      misago/core/apipaginator.py
  62. 1 2
      misago/core/apirouter.py
  63. 2 2
      misago/core/cache.py
  64. 1 0
      misago/core/cachebuster.py
  65. 1 1
      misago/core/errorpages.py
  66. 1 2
      misago/core/exceptionhandler.py
  67. 1 2
      misago/core/management/commands/misagodbrelations.py
  68. 1 1
      misago/core/migrations/0001_initial.py
  69. 1 1
      misago/core/migrations/0002_basic_settings.py
  70. 1 0
      misago/core/momentjs.py
  71. 1 2
      misago/core/pgutils.py
  72. 4 1
      misago/core/serializer.py
  73. 1 1
      misago/core/setup.py
  74. 1 0
      misago/core/shortcuts.py
  75. 2 1
      misago/core/templatetags/misago_pagetitle.py
  76. 1 1
      misago/core/templatetags/misago_stringutils.py
  77. 3 2
      misago/core/testproject/urls.py
  78. 0 1
      misago/core/testproject/views.py
  79. 1 0
      misago/core/tests/test_apipaginator.py
  80. 1 1
      misago/core/tests/test_apipatch.py
  81. 1 0
      misago/core/tests/test_context_processors.py
  82. 1 3
      misago/core/tests/test_errorpages.py
  83. 1 2
      misago/core/tests/test_exceptionhandler_middleware.py
  84. 1 2
      misago/core/tests/test_exceptionhandlers.py
  85. 1 0
      misago/core/tests/test_forms.py
  86. 1 0
      misago/core/tests/test_frontendcontext_middleware.py
  87. 1 1
      misago/core/tests/test_momentjs.py
  88. 1 0
      misago/core/tests/test_page.py
  89. 1 1
      misago/core/tests/test_serializer.py
  90. 1 0
      misago/core/tests/test_setup.py
  91. 1 1
      misago/core/tests/test_shortcuts.py
  92. 1 1
      misago/core/tests/test_threadstore.py
  93. 7 3
      misago/core/tests/test_utils.py
  94. 2 1
      misago/core/testutils.py
  95. 3 2
      misago/core/utils.py
  96. 1 0
      misago/core/validators.py
  97. 1 2
      misago/core/views.py
  98. 4 4
      misago/faker/management/commands/createfakebans.py
  99. 4 4
      misago/faker/management/commands/createfakecategories.py
  100. 2 2
      misago/faker/management/commands/createfakethreads.py
  101. 3 3
      misago/faker/management/commands/createfakeusers.py
  102. 1 0
      misago/legal/context_processors.py
  103. 1 1
      misago/legal/migrations/0001_initial.py
  104. 0 1
      misago/legal/tests.py
  105. 1 0
      misago/legal/urls.py
  106. 2 2
      misago/markup/parser.py
  107. 1 0
      misago/markup/pipeline.py
  108. 1 0
      misago/project_template/manage.py
  109. 3 3
      misago/project_template/project_name/settings.py
  110. 6 5
      misago/project_template/project_name/urls.py
  111. 4 1
      misago/project_template/project_name/wsgi.py
  112. 1 3
      misago/readtracker/categoriestracker.py
  113. 1 0
      misago/readtracker/dates.py
  114. 1 1
      misago/readtracker/migrations/0001_initial.py
  115. 1 1
      misago/readtracker/signals.py
  116. 1 2
      misago/readtracker/tests/test_readtracker.py
  117. 1 2
      misago/threads/api/threadendpoints/list.py
  118. 4 4
      misago/threads/api/threadendpoints/merge.py
  119. 1 3
      misago/threads/api/threadendpoints/patch.py
  120. 0 1
      misago/threads/api/threadposts.py
  121. 2 2
      misago/threads/api/threads.py
  122. 1 1
      misago/threads/counts.py
  123. 1 0
      misago/threads/events.py
  124. 0 1
      misago/threads/management/commands/synchronizethreads.py
  125. 4 4
      misago/threads/migrations/0001_initial.py
  126. 1 1
      misago/threads/migrations/0002_threads_settings.py
  127. 1 2
      misago/threads/models/post.py
  128. 2 1
      misago/threads/models/subscription.py
  129. 1 0
      misago/threads/models/threadparticipant.py
  130. 0 1
      misago/threads/participants.py
  131. 4 4
      misago/threads/permissions/threads.py
  132. 2 2
      misago/threads/serializers/moderation.py
  133. 2 2
      misago/threads/serializers/post.py
  134. 1 1
      misago/threads/serializers/thread.py
  135. 7 9
      misago/threads/signals.py
  136. 1 1
      misago/threads/subscriptions.py
  137. 2 4
      misago/threads/tests/-test_floodprotection_middleware.py
  138. 1 3
      misago/threads/tests/test_events.py
  139. 8 4
      misago/threads/tests/test_participants.py
  140. 1 2
      misago/threads/tests/test_post_model.py
  141. 2 3
      misago/threads/tests/test_posts_moderation.py
  142. 1 2
      misago/threads/tests/test_subscriptions.py
  143. 0 1
      misago/threads/tests/test_synchronizethreads.py
  144. 1 2
      misago/threads/tests/test_thread_model.py
  145. 0 1
      misago/threads/tests/test_thread_patch_api.py
  146. 1 3
      misago/threads/tests/test_threadparticipant_model.py
  147. 1 2
      misago/threads/tests/test_threads_api.py
  148. 1 2
      misago/threads/tests/test_threads_merge_api.py
  149. 2 3
      misago/threads/tests/test_threads_moderation.py
  150. 1 2
      misago/threads/tests/test_threadslists.py
  151. 1 2
      misago/threads/tests/test_threadview.py
  152. 1 0
      misago/threads/tests/test_typestree.py
  153. 1 2
      misago/threads/tests/test_utils.py
  154. 0 1
      misago/threads/tests/test_validators.py
  155. 1 2
      misago/threads/testutils.py
  156. 1 0
      misago/threads/threadtypes/privatethread.py
  157. 1 0
      misago/threads/threadtypes/thread.py
  158. 2 1
      misago/threads/validators.py
  159. 2 3
      misago/threads/viewmodels/category.py
  160. 1 2
      misago/threads/viewmodels/posts.py
  161. 0 1
      misago/threads/viewmodels/thread.py
  162. 2 2
      misago/threads/viewmodels/threads.py
  163. 1 1
      misago/threads/views/list.py
  164. 1 1
      misago/threads/views/thread.py
  165. 1 0
      misago/urls.py
  166. 1 2
      misago/users/activepostersranking.py
  167. 25 9
      misago/users/admin.py
  168. 2 3
      misago/users/api/auth.py
  169. 1 1
      misago/users/api/ranks.py
  170. 1 2
      misago/users/api/userendpoints/avatar.py
  171. 1 2
      misago/users/api/userendpoints/changeemail.py
  172. 1 2
      misago/users/api/userendpoints/changepassword.py
  173. 1 3
      misago/users/api/userendpoints/create.py
  174. 1 2
      misago/users/api/userendpoints/list.py
  175. 0 1
      misago/users/api/userendpoints/signature.py
  176. 2 3
      misago/users/api/userendpoints/username.py
  177. 1 2
      misago/users/api/usernamechanges.py
  178. 9 12
      misago/users/api/users.py
  179. 2 1
      misago/users/apps.py
  180. 2 3
      misago/users/avatars/dynamic.py
  181. 1 2
      misago/users/avatars/gravatar.py
  182. 1 2
      misago/users/avatars/store.py
  183. 0 1
      misago/users/avatars/uploaded.py
  184. 2 3
      misago/users/context_processors.py
  185. 2 0
      misago/users/credentialchange.py
  186. 1 2
      misago/users/decorators.py
  187. 12 7
      misago/users/forms/admin.py
  188. 3 5
      misago/users/forms/auth.py
  189. 2 2
      misago/users/forms/moderation.py
  190. 3 4
      misago/users/forms/options.py
  191. 1 0
      misago/users/forms/rename.py
  192. 0 1
      misago/users/management/commands/bansmaintenance.py
  193. 2 1
      misago/users/management/commands/buildactivepostersranking.py
  194. 2 3
      misago/users/management/commands/createsuperuser.py
  195. 2 1
      misago/users/management/commands/populateonlinetracker.py
  196. 1 1
      misago/users/management/commands/synchronizeusers.py
  197. 0 1
      misago/users/middleware.py
  198. 2 2
      misago/users/migrations/0001_initial.py
  199. 1 1
      misago/users/migrations/0002_users_settings.py
  200. 2 1
      misago/users/migrations/0003_bans_version_tracker.py
  201. 1 1
      misago/users/migrations/0004_default_ranks.py
  202. 5 7
      misago/users/models/user.py
  203. 1 0
      misago/users/namechanges.py
  204. 1 0
      misago/users/online/tracker.py
  205. 1 1
      misago/users/online/utils.py
  206. 2 1
      misago/users/permissions/delete.py
  207. 0 1
      misago/users/permissions/moderation.py
  208. 1 2
      misago/users/permissions/profiles.py
  209. 0 1
      misago/users/permissions/warnings.py
  210. 3 4
      misago/users/rest_permissions.py
  211. 3 3
      misago/users/serializers/ban.py
  212. 1 0
      misago/users/serializers/rank.py
  213. 2 2
      misago/users/serializers/user.py
  214. 4 3
      misago/users/signals.py
  215. 1 1
      misago/users/tests/test_activation_views.py
  216. 2 4
      misago/users/tests/test_activepostersranking.py
  217. 2 3
      misago/users/tests/test_auth_api.py
  218. 1 2
      misago/users/tests/test_avatars.py
  219. 2 1
      misago/users/tests/test_ban_model.py
  220. 0 1
      misago/users/tests/test_banadmin_views.py
  221. 10 4
      misago/users/tests/test_bans.py
  222. 1 0
      misago/users/tests/test_captcha_api.py
  223. 1 1
      misago/users/tests/test_decorators.py
  224. 2 1
      misago/users/tests/test_djangoadmin_auth.py
  225. 1 1
      misago/users/tests/test_djangoadmin_user.py
  226. 1 1
      misago/users/tests/test_forgottenpassword_views.py
  227. 0 1
      misago/users/tests/test_lists_views.py
  228. 1 0
      misago/users/tests/test_options_views.py
  229. 1 1
      misago/users/tests/test_populateonlinetracker.py
  230. 0 1
      misago/users/tests/test_profile_views.py
  231. 2 2
      misago/users/tests/test_rankadmin_views.py
  232. 1 0
      misago/users/tests/test_realip_middleware.py
  233. 1 1
      misago/users/tests/test_rest_permissions.py
  234. 3 2
      misago/users/tests/test_testutils.py
  235. 2 2
      misago/users/tests/test_user_avatar_api.py
  236. 1 0
      misago/users/tests/test_user_changeemail_api.py
  237. 1 0
      misago/users/tests/test_user_changepassword_api.py
  238. 0 1
      misago/users/tests/test_user_create_api.py
  239. 0 1
      misago/users/tests/test_user_signature_api.py
  240. 1 2
      misago/users/tests/test_user_username_api.py
  241. 0 1
      misago/users/tests/test_useradmin_views.py
  242. 0 1
      misago/users/tests/test_usernamechanges_api.py
  243. 3 4
      misago/users/tests/test_users_api.py
  244. 1 0
      misago/users/tests/test_utils.py
  245. 13 12
      misago/users/tests/test_validators.py
  246. 0 1
      misago/users/tests/test_warningadmin_views.py
  247. 1 2
      misago/users/tests/test_warnings.py
  248. 0 1
      misago/users/testutils.py
  249. 1 2
      misago/users/urls/api.py
  250. 4 4
      misago/users/validators.py
  251. 1 2
      misago/users/views/activation.py
  252. 1 2
      misago/users/views/admin/bans.py
  253. 1 2
      misago/users/views/admin/ranks.py
  254. 3 6
      misago/users/views/admin/users.py
  255. 1 2
      misago/users/views/admin/warnings.py
  256. 0 1
      misago/users/views/auth.py
  257. 0 1
      misago/users/views/avatarserver.py
  258. 0 1
      misago/users/views/forgottenpassword.py
  259. 3 3
      misago/users/views/lists.py
  260. 6 6
      misago/users/views/profile.py

+ 9 - 0
.isort.cfg

@@ -0,0 +1,9 @@
+[settings]
+line_length=120
+lines_after_imports=2
+known_django=django
+known_first_party=misago
+known_restframework=rest_framework
+sections=FUTURE,STDLIB,THIRDPARTY,DJANGO,RESTFRAMEWORK,FIRSTPARTY,LOCALFOLDER
+multi_line_output=3
+verbose=true

+ 2 - 2
misago/acl/admin.py

@@ -1,7 +1,7 @@
 from django.conf.urls import url
 from django.utils.translation import ugettext_lazy as _
-from misago.acl.views import (RolesList, NewRole, EditRole, RoleUsers,
-                              DeleteRole)
+
+from misago.acl.views import DeleteRole, EditRole, NewRole, RolesList, RoleUsers
 
 
 class MisagoAdminExtension(object):

+ 2 - 3
misago/acl/api.py

@@ -12,12 +12,11 @@ import copy
 
 from django.contrib.auth import get_user_model
 
-from misago.core import threadstore
-from misago.core.cache import cache
-
 from misago.acl import version
 from misago.acl.builder import build_acl
 from misago.acl.providers import providers
+from misago.core import threadstore
+from misago.core.cache import cache
 
 
 def get_user_acl(user):

+ 1 - 2
misago/acl/forms.py

@@ -1,9 +1,8 @@
 from django.utils.translation import ugettext_lazy as _
 
-from misago.core import forms
-
 from misago.acl.models import Role
 from misago.acl.providers import providers
+from misago.core import forms
 
 
 class RoleForm(forms.ModelForm):

+ 1 - 1
misago/acl/migrations/0001_initial.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 
 
 class Migration(migrations.Migration):

+ 1 - 1
misago/acl/migrations/0002_acl_version_tracker.py

@@ -2,7 +2,7 @@
 #pylint: skip-file
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 
 from misago.core.migrationutils import cachebuster_register_cache
 

+ 1 - 2
misago/acl/models.py

@@ -2,9 +2,8 @@
 from django.db import models
 from django.dispatch import receiver
 
-from misago.core import serializer
-
 from misago.acl import version as acl_version
+from misago.core import serializer
 from misago.core.signals import secret_key_changed
 
 

+ 1 - 0
misago/acl/panels.py

@@ -1,4 +1,5 @@
 from debug_toolbar.panels import Panel
+
 from django.utils.translation import ugettext_lazy as _
 
 

+ 1 - 0
misago/acl/tests/test_acl_algebra.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.acl import algebra
 
 

+ 1 - 2
misago/acl/tests/test_api.py

@@ -1,8 +1,7 @@
 from django.test import TestCase
 
-from misago.users.models import User, AnonymousUser
-
 from misago.acl.api import get_user_acl
+from misago.users.models import AnonymousUser, User
 
 
 class GetUserACLTests(TestCase):

+ 0 - 1
misago/acl/tests/test_providers.py

@@ -82,4 +82,3 @@ class PermissionProvidersTests(TestCase):
         providers.acl_serializer(TestType, test_serializer)
         serializers_list = providers.get_type_serializers(TestType())
         self.assertEqual(serializers_list[0], test_serializer)
-

+ 1 - 2
misago/acl/tests/test_roleadmin_views.py

@@ -1,9 +1,8 @@
 from django.core.urlresolvers import reverse
 
-from misago.admin.testutils import AdminTestCase
-
 from misago.acl.models import Role
 from misago.acl.testutils import fake_post_data
+from misago.admin.testutils import AdminTestCase
 
 
 def fake_data(data_dict):

+ 2 - 1
misago/acl/testutils.py

@@ -1,7 +1,8 @@
 # pylint: disable=protected-access
 from hashlib import md5
-from misago.core import threadstore
+
 from misago.acl.forms import get_permissions_forms
+from misago.core import threadstore
 
 
 def fake_post_data(target, data_dict):

+ 1 - 2
misago/acl/views.py

@@ -3,10 +3,9 @@ from django.core.urlresolvers import reverse
 from django.shortcuts import redirect
 from django.utils.translation import ugettext_lazy as _
 
-from misago.admin.views import generic
-
 from misago.acl.forms import RoleForm, get_permissions_forms
 from misago.acl.models import Role
+from misago.admin.views import generic
 
 
 class RoleAdmin(generic.AdminBaseMixin):

+ 2 - 1
misago/admin/auth.py

@@ -2,7 +2,8 @@ from hashlib import md5
 from time import time
 
 from django.conf import settings
-from django.contrib import auth as dj_auth, messages
+from django.contrib import auth as dj_auth
+from django.contrib import messages
 from django.utils.translation import ugettext as _
 
 

+ 1 - 0
misago/admin/tests/test_admin_hierarchy.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.admin.hierarchy import Node
 
 

+ 1 - 1
misago/admin/urlpatterns.py

@@ -1,4 +1,4 @@
-from django.conf.urls import url, include
+from django.conf.urls import include, url
 
 
 class URLPatterns(object):

+ 1 - 1
misago/admin/urls.py

@@ -1,4 +1,4 @@
-from django.conf.urls import patterns, include, url
+from django.conf.urls import include, patterns, url
 
 from misago import admin
 from misago.admin.views import auth, index

+ 3 - 4
misago/admin/views/auth.py

@@ -1,13 +1,12 @@
 from django.contrib import messages
-from django.shortcuts import render, redirect
+from django.shortcuts import redirect, render
 from django.utils.translation import ugettext as _
-from django.views.decorators.debug import sensitive_post_parameters
 from django.views.decorators.cache import never_cache
 from django.views.decorators.csrf import csrf_protect
-
-from misago.users.forms.auth import AdminAuthenticationForm
+from django.views.decorators.debug import sensitive_post_parameters
 
 from misago.admin import auth
+from misago.users.forms.auth import AdminAuthenticationForm
 
 
 @sensitive_post_parameters()

+ 2 - 2
misago/admin/views/errorpages.py

@@ -1,7 +1,7 @@
 from django.shortcuts import redirect
+
 from misago.admin.auth import is_admin_session, update_admin_session
-from misago.admin.views import (render, get_protected_namespace,
-                                protected_admin_view)
+from misago.admin.views import get_protected_namespace, protected_admin_view, render
 
 
 # Magic error page used by admin

+ 1 - 0
misago/admin/views/generic/base.py

@@ -1,4 +1,5 @@
 from django.views.generic import View
+
 from misago.admin.views import render
 
 

+ 2 - 3
misago/admin/views/generic/list.py

@@ -1,15 +1,14 @@
 from urllib import urlencode
 
 from django.contrib import messages
-from django.core.paginator import Paginator, EmptyPage
+from django.core.paginator import EmptyPage, Paginator
 from django.core.urlresolvers import reverse
 from django.db import transaction
 from django.shortcuts import redirect
 from django.utils.translation import ugettext_lazy as _
 
-from misago.core.exceptions import ExplicitFirstPage
-
 from misago.admin.views.generic.base import AdminView
+from misago.core.exceptions import ExplicitFirstPage
 
 
 class MassActionError(Exception):

+ 3 - 5
misago/admin/views/index.py

@@ -7,12 +7,10 @@ from django.http import Http404, JsonResponse
 from django.utils.translation import ugettext as _
 
 from misago import __version__
-
-from misago.core.cache import cache
-from misago.threads.models import Thread, Post
-from misago.users.models import User, ACTIVATION_REQUIRED_NONE
-
 from misago.admin.views import render
+from misago.core.cache import cache
+from misago.threads.models import Post, Thread
+from misago.users.models import ACTIVATION_REQUIRED_NONE, User
 
 
 VERSION_CHECK_CACHE_KEY = "misago_version_check"

+ 14 - 2
misago/categories/admin.py

@@ -2,9 +2,21 @@ from django.conf.urls import url
 from django.utils.translation import ugettext_lazy as _
 
 from misago.categories.views.categoriesadmin import (
-    CategoriesList, NewCategory, EditCategory, MoveDownCategory, MoveUpCategory, DeleteCategory)
+    CategoriesList,
+    DeleteCategory,
+    EditCategory,
+    MoveDownCategory,
+    MoveUpCategory,
+    NewCategory
+)
 from misago.categories.views.permsadmin import (
-    CategoryRolesList, NewCategoryRole, EditCategoryRole, DeleteCategoryRole, CategoryPermissions, RoleCategoriesACL)
+    CategoryPermissions,
+    CategoryRolesList,
+    DeleteCategoryRole,
+    EditCategoryRole,
+    NewCategoryRole,
+    RoleCategoriesACL
+)
 
 
 class MisagoAdminExtension(object):

+ 3 - 3
misago/categories/forms.py

@@ -1,14 +1,14 @@
+from mptt.forms import *  # noqa
+
 from django.db import models
 from django.utils.html import conditional_escape, mark_safe
 from django.utils.translation import ugettext_lazy as _
-from mptt.forms import *  # noqa
 
+from misago.categories.models import THREADS_ROOT_NAME, Category, CategoryRole
 from misago.core import forms
 from misago.core.validators import validate_sluggable
 from misago.threads.threadtypes import trees_map
 
-from misago.categories.models import THREADS_ROOT_NAME, Category, CategoryRole
-
 
 """
 Fields

+ 2 - 1
misago/categories/management/commands/synchronizecategories.py

@@ -1,6 +1,7 @@
 from django.core.management.base import BaseCommand
-from misago.core.management.progressbar import show_progress
+
 from misago.categories.models import Category
+from misago.core.management.progressbar import show_progress
 
 
 class Command(BaseCommand):

+ 4 - 3
misago/categories/migrations/0001_initial.py

@@ -1,11 +1,12 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.conf import settings
-from django.db import models, migrations
-import django.db.models.deletion
 import mptt.fields
 
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
 
 class Migration(migrations.Migration):
 

+ 1 - 1
misago/categories/migrations/0002_default_categories.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 from django.utils.translation import ugettext as _
 
 from misago.core.utils import slugify

+ 1 - 1
misago/categories/migrations/0003_categories_roles.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 from django.utils.translation import ugettext as _
 
 from misago.core import serializer

+ 1 - 1
misago/categories/migrations/0004_category_last_thread.py

@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
 import django.db.models.deletion
+from django.db import migrations, models
 
 
 class Migration(migrations.Migration):

+ 3 - 3
misago/categories/models.py

@@ -1,17 +1,17 @@
 from urlparse import urlparse
 
+from mptt.managers import TreeManager
+from mptt.models import MPTTModel, TreeForeignKey
+
 from django.core.urlresolvers import reverse
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
-from mptt.managers import TreeManager
-from mptt.models import MPTTModel, TreeForeignKey
 
 from misago.acl import version as acl_version
 from misago.acl.models import BaseRole
 from misago.conf import settings
 from misago.core.cache import cache
 from misago.core.utils import slugify
-
 from misago.threads.threadtypes import trees_map
 
 

+ 1 - 3
misago/categories/permissions.py

@@ -3,14 +3,12 @@ from django.core.exceptions import PermissionDenied
 from django.http import Http404
 from django.utils.translation import ugettext_lazy as _
 
-
 from misago.acl import algebra
 from misago.acl.decorators import return_boolean
+from misago.categories.models import Category, CategoryRole, RoleCategoryACL
 from misago.core import forms
 from misago.users.models import AnonymousUser
 
-from misago.categories.models import Category, RoleCategoryACL, CategoryRole
-
 
 """
 Admin Permissions Form

+ 2 - 2
misago/categories/serializers.py

@@ -1,9 +1,9 @@
 from django.core.urlresolvers import reverse
-from rest_framework import serializers
 
-from misago.core.utils import format_plaintext_for_html
+from rest_framework import serializers
 
 from misago.categories.models import Category
+from misago.core.utils import format_plaintext_for_html
 
 
 __all__ = [

+ 5 - 4
misago/categories/signals.py

@@ -1,6 +1,9 @@
-from django.dispatch import receiver, Signal
-from misago.core import serializer
+from django.dispatch import Signal, receiver
+
 from misago.categories.models import Category, CategoryRole
+from misago.core import serializer
+from misago.core.signals import secret_key_changed
+from misago.users.signals import username_changed
 
 
 delete_category_content = Signal()
@@ -10,7 +13,6 @@ move_category_content = Signal(providing_args=["new_category"])
 """
 Signal handlers
 """
-from misago.core.signals import secret_key_changed
 @receiver(secret_key_changed)
 def update_roles_pickles(sender, **kwargs):
     for role in CategoryRole.objects.iterator():
@@ -20,7 +22,6 @@ def update_roles_pickles(sender, **kwargs):
             role.save(update_fields=['pickled_permissions'])
 
 
-from misago.users.signals import username_changed
 @receiver(username_changed)
 def update_usernames(sender, **kwargs):
     Category.objects.filter(last_poster=sender).update(

+ 2 - 1
misago/categories/tests/test_categories_admin_views.py

@@ -1,4 +1,5 @@
 from django.core.urlresolvers import reverse
+
 from misago.admin.testutils import AdminTestCase
 from misago.categories.models import Category
 
@@ -323,4 +324,4 @@ class CategoryAdminDeleteViewTests(AdminTestCase):
                 'move_threads_to': '',
             })
         self.assertEqual(response.status_code, 302)
-        self.assertEqual(Category.objects.all_categories().count(), 6)
+        self.assertEqual(Category.objects.all_categories().count(), 6)

+ 1 - 2
misago/categories/tests/test_category_model.py

@@ -1,11 +1,10 @@
 from django.utils import timezone
 
+from misago.categories.models import THREADS_ROOT_NAME, Category
 from misago.core.testutils import MisagoTestCase
 from misago.threads import testutils
 from misago.threads.threadtypes import trees_map
 
-from misago.categories.models import THREADS_ROOT_NAME, Category
-
 
 class CategoryManagerTests(MisagoTestCase):
     def test_private_threads(self):

+ 0 - 1
misago/categories/tests/test_permissions_admin_views.py

@@ -3,7 +3,6 @@ from django.core.urlresolvers import reverse
 from misago.acl.models import Role
 from misago.acl.testutils import fake_post_data
 from misago.admin.testutils import AdminTestCase
-
 from misago.categories.models import Category, CategoryRole
 
 

+ 1 - 2
misago/categories/tests/test_prunecategories.py

@@ -4,10 +4,9 @@ from django.test import TestCase
 from django.utils import timezone
 from django.utils.six import StringIO
 
-from misago.threads import testutils
-
 from misago.categories.management.commands import prunecategories
 from misago.categories.models import Category
+from misago.threads import testutils
 
 
 class PruneCategoriesTests(TestCase):

+ 1 - 2
misago/categories/tests/test_synchronizecategories.py

@@ -1,10 +1,9 @@
 from django.test import TestCase
 from django.utils.six import StringIO
 
-from misago.threads import testutils
-
 from misago.categories.management.commands import synchronizecategories
 from misago.categories.models import Category
+from misago.threads import testutils
 
 
 class SynchronizeCategoriesTests(TestCase):

+ 3 - 4
misago/categories/tests/test_utils.py

@@ -1,10 +1,9 @@
 from misago.acl.testutils import override_acl
+from misago.categories.models import Category
+from misago.categories.utils import get_categories_tree, get_category_path
 from misago.core import threadstore
 from misago.users.testutils import AuthenticatedUserTestCase
 
-from misago.categories.utils import get_categories_tree, get_category_path
-from misago.categories.models import Category
-
 
 class CategoriesUtilsTests(AuthenticatedUserTestCase):
     def setUp(self):
@@ -98,4 +97,4 @@ class CategoriesUtilsTests(AuthenticatedUserTestCase):
         """get_categories_tree returns all children of root nodes"""
         for node in get_categories_tree(self.user):
             parent_nodes = len(get_category_path(node))
-            self.assertEqual(parent_nodes, node.level)
+            self.assertEqual(parent_nodes, node.level)

+ 3 - 4
misago/categories/tests/test_views.py

@@ -1,10 +1,9 @@
 from django.core.urlresolvers import reverse
 
 from misago.acl.testutils import override_acl
-from misago.users.testutils import AuthenticatedUserTestCase
-
-from misago.categories.utils import get_categories_tree
 from misago.categories.models import Category
+from misago.categories.utils import get_categories_tree
+from misago.users.testutils import AuthenticatedUserTestCase
 
 
 class CategoryViewsTests(AuthenticatedUserTestCase):
@@ -92,4 +91,4 @@ class CategoryAPIViewsTests(AuthenticatedUserTestCase):
         for node in get_categories_tree(self.user):
             self.assertNotIn(node.name, response.content)
             if node.level > 1:
-                self.assertNotIn(node.get_absolute_url(), response.content)
+                self.assertNotIn(node.get_absolute_url(), response.content)

+ 1 - 0
misago/categories/urls/api.py

@@ -1,4 +1,5 @@
 from django.conf.urls import url
+
 from misago.categories.views import api
 
 

+ 2 - 3
misago/categories/utils.py

@@ -1,9 +1,8 @@
 from misago.acl import add_acl
+from misago.categories.models import Category
 from misago.core import threadstore
 from misago.readtracker import categoriestracker
 
-from misago.categories.models import Category
-
 
 __all__ = [
     'get_categories_tree',
@@ -84,4 +83,4 @@ def get_category_path(category):
     while category and category.level > 0:
         category_path.append(category)
         category = category.parent
-    return [f for f in reversed(category_path)]
+    return [f for f in reversed(category_path)]

+ 1 - 2
misago/categories/views/categoriesadmin.py

@@ -4,10 +4,9 @@ from django.utils.translation import ugettext_lazy as _
 
 from misago.acl import version as acl_version
 from misago.admin.views import generic
-from misago.threads.threadtypes import trees_map
-
 from misago.categories.forms import CategoryFormFactory, DeleteFormFactory
 from misago.categories.models import THREADS_ROOT_NAME, Category, RoleCategoryACL
+from misago.threads.threadtypes import trees_map
 
 
 class CategoryAdmin(generic.AdminBaseMixin):

+ 2 - 3
misago/categories/views/permsadmin.py

@@ -2,15 +2,14 @@ from django.contrib import messages
 from django.shortcuts import redirect
 from django.utils.translation import ugettext_lazy as _
 
-from misago.admin.views import generic
 from misago.acl import version as acl_version
 from misago.acl.forms import get_permissions_forms
 from misago.acl.models import Role
 from misago.acl.views import RoleAdmin, RolesList
-
+from misago.admin.views import generic
 from misago.categories.forms import CategoryRoleForm, CategoryRolesACLFormFactory, RoleCategoryACLFormFactory
-from misago.categories.views.categoriesadmin import CategoryAdmin, CategoriesList
 from misago.categories.models import Category, CategoryRole, RoleCategoryACL
+from misago.categories.views.categoriesadmin import CategoriesList, CategoryAdmin
 
 
 class CategoryRoleAdmin(generic.AdminBaseMixin):

+ 1 - 0
misago/conf/admin.py

@@ -1,5 +1,6 @@
 from django.conf.urls import url
 from django.utils.translation import ugettext_lazy as _
+
 from misago.conf import views
 
 

+ 2 - 1
misago/conf/context_processors.py

@@ -1,7 +1,8 @@
 import json
 
 from django.core.urlresolvers import reverse
-from misago.conf.gateway import dj_settings, db_settings  # noqa
+
+from misago.conf.gateway import db_settings, dj_settings  # noqa
 
 
 def settings(request):

+ 2 - 0
misago/conf/defaults.py

@@ -28,6 +28,8 @@ INSTALLED_APPS = (
 
 # Build paths inside the project like this: os.path.join(MISAGO_BASE_DIR, ...)
 import os
+
+
 MISAGO_BASE_DIR = os.path.dirname(os.path.dirname(__file__))
 
 

+ 3 - 1
misago/conf/forms.py

@@ -1,4 +1,6 @@
-from django.utils.translation import ugettext as _, ungettext
+from django.utils.translation import ugettext as _
+from django.utils.translation import ungettext
+
 from misago.core import forms
 
 

+ 1 - 0
misago/conf/gateway.py

@@ -1,4 +1,5 @@
 from django.conf import settings as dj_settings
+
 from misago.conf.dbsettings import db_settings
 
 

+ 1 - 1
misago/conf/migrations/0001_initial.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 
 
 class Migration(migrations.Migration):

+ 2 - 3
misago/conf/migrationutils.py

@@ -1,8 +1,7 @@
-from misago.core import serializer
-from misago.core.cache import cache as default_cache
-
 from misago.conf.dbsettings import CACHE_KEY
 from misago.conf.hydrators import dehydrate_value
+from misago.core import serializer
+from misago.core.cache import cache as default_cache
 
 
 def get_group(SettingsGroup, group_key):

+ 1 - 2
misago/conf/models.py

@@ -1,11 +1,10 @@
 from django.db import models
 from django.dispatch import receiver
 
+from misago.conf import hydrators
 from misago.core import serializer
 from misago.core.signals import secret_key_changed
 
-from misago.conf import hydrators
-
 
 class SettingsGroupsManager(models.Manager):
     def ordered_alphabetically(self):

+ 0 - 1
misago/conf/tests/test_admin_views.py

@@ -1,7 +1,6 @@
 from django.core.urlresolvers import reverse
 
 from misago.admin.testutils import AdminTestCase
-
 from misago.conf.models import SettingsGroup
 
 

+ 1 - 2
misago/conf/tests/test_context_processors.py

@@ -1,9 +1,8 @@
 from django.test import TestCase
 
-from misago.core import threadstore
-
 from misago.conf.context_processors import settings
 from misago.conf.dbsettings import db_settings
+from misago.core import threadstore
 
 
 class MockRequest(object):

+ 1 - 1
misago/conf/tests/test_hydrators.py

@@ -1,6 +1,6 @@
 from django.test import TestCase
 
-from misago.conf.hydrators import hydrate_value, dehydrate_value
+from misago.conf.hydrators import dehydrate_value, hydrate_value
 from misago.conf.models import Setting
 
 

+ 1 - 2
misago/conf/tests/test_migrationutils.py

@@ -1,10 +1,9 @@
 from django.apps import apps
 from django.test import TestCase
 
-from misago.core import threadstore
-
 from misago.conf import migrationutils
 from misago.conf.models import SettingsGroup
+from misago.core import threadstore
 
 
 class DBConfMigrationUtilsTests(TestCase):

+ 1 - 0
misago/conf/tests/test_models.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.conf.models import Setting
 
 

+ 3 - 4
misago/conf/tests/test_settings.py

@@ -2,12 +2,11 @@ from django.apps import apps
 from django.conf import settings as dj_settings
 from django.test import TestCase
 
-from misago.core import threadstore
-from misago.core.cache import cache
-
-from misago.conf.gateway import settings as gateway
 from misago.conf.dbsettings import db_settings
+from misago.conf.gateway import settings as gateway
 from misago.conf.migrationutils import migrate_settings_group
+from misago.core import threadstore
+from misago.core.cache import cache
 
 
 class DBSettingsTests(TestCase):

+ 0 - 1
misago/conf/views.py

@@ -3,7 +3,6 @@ from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
 
 from misago.admin.views import render as mi_render
-
 from misago.conf import db_settings
 from misago.conf.forms import ChangeSettingsForm
 from misago.conf.models import SettingsGroup

+ 2 - 1
misago/core/apipaginator.py

@@ -1,4 +1,5 @@
-from django.core.paginator import InvalidPage, Paginator as DjangoPaginator
+from django.core.paginator import Paginator as DjangoPaginator
+from django.core.paginator import InvalidPage
 from django.utils import six
 
 from rest_framework.exceptions import NotFound

+ 1 - 2
misago/core/apirouter.py

@@ -1,5 +1,4 @@
-from rest_framework.routers import (
-    DefaultRouter, Route, DynamicDetailRoute, DynamicListRoute)
+from rest_framework.routers import DefaultRouter, DynamicDetailRoute, DynamicListRoute, Route
 
 
 class MisagoApiRouter(DefaultRouter):

+ 2 - 2
misago/core/cache.py

@@ -1,5 +1,5 @@
-from django.core.cache import (
-    caches, cache as default_cache, InvalidCacheBackendError)
+from django.core.cache import cache as default_cache
+from django.core.cache import InvalidCacheBackendError, caches
 
 
 try:

+ 1 - 0
misago/core/cachebuster.py

@@ -1,4 +1,5 @@
 from django.db.models import F
+
 from misago.core import threadstore
 
 

+ 1 - 1
misago/core/errorpages.py

@@ -2,8 +2,8 @@ from django.http import JsonResponse
 from django.shortcuts import render
 from django.utils.translation import ugettext as _
 
+from misago.admin.views.errorpages import admin_csrf_failure, admin_error_page
 from misago.core.utils import is_request_to_misago
-from misago.admin.views.errorpages import admin_error_page, admin_csrf_failure
 
 
 def _ajax_error(code=406, message=None):

+ 1 - 2
misago/core/exceptionhandler.py

@@ -6,8 +6,7 @@ from django.utils.translation import gettext as _
 from rest_framework.views import exception_handler as rest_exception_handler
 
 from misago.core import errorpages
-from misago.core.exceptions import (
-    AjaxError, Banned, ExplicitFirstPage, OutdatedSlug)
+from misago.core.exceptions import AjaxError, Banned, ExplicitFirstPage, OutdatedSlug
 
 
 HANDLED_EXCEPTIONS = (AjaxError, Banned, ExplicitFirstPage, Http404,

+ 1 - 2
misago/core/management/commands/misagodbrelations.py

@@ -1,7 +1,6 @@
 from django.apps import apps
 from django.core.management.base import BaseCommand
-from django.db.models.fields.related import (ForeignKey, OneToOneField,
-                                             ManyToManyField)
+from django.db.models.fields.related import ForeignKey, ManyToManyField, OneToOneField
 
 
 class Command(BaseCommand):

+ 1 - 1
misago/core/migrations/0001_initial.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 
 
 class Migration(migrations.Migration):

+ 1 - 1
misago/core/migrations/0002_basic_settings.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 from django.utils.translation import ugettext as _
 
 from misago.conf.migrationutils import migrate_settings_group

+ 1 - 0
misago/core/momentjs.py

@@ -1,4 +1,5 @@
 import os
+
 from path import Path
 
 

+ 1 - 2
misago/core/pgutils.py

@@ -1,6 +1,5 @@
-from django.db.migrations.operations import RunSQL
-
 from django.core.paginator import Paginator
+from django.db.migrations.operations import RunSQL
 
 
 class CreatePartialIndex(RunSQL):

+ 4 - 1
misago/core/serializer.py

@@ -1,11 +1,14 @@
 import base64
 from hashlib import sha256
+
+from django.conf import settings
+
+
 try:
     import cPickle as pickle
 except ImportError:
     import pickle
 
-from django.conf import settings
 
 
 def _checksum(base):

+ 1 - 1
misago/core/setup.py

@@ -1,5 +1,5 @@
-import re
 import os
+import re
 from optparse import OptionParser
 
 from django.core import management

+ 1 - 0
misago/core/shortcuts.py

@@ -1,4 +1,5 @@
 from collections import OrderedDict
+
 from django.http import Http404
 from django.shortcuts import *  # noqa
 

+ 2 - 1
misago/core/templatetags/misago_pagetitle.py

@@ -1,5 +1,6 @@
 from django import template
 from django.utils.translation import gettext as _
+
 from misago.conf import settings
 
 
@@ -14,4 +15,4 @@ def pagetitle(title, **kwargs):
     if 'parent' in kwargs:
         title += u" | %s" % kwargs['parent']
 
-    return title
+    return title

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

@@ -7,4 +7,4 @@ register = template.Library()
 @register.filter
 def isdescriptionshort(string):
     string_lowered = string.lower()
-    return string_lowered.count('<p') == 1 and not string_lowered.count('<br')
+    return string_lowered.count('<p') == 1 and not string_lowered.count('<br')

+ 3 - 2
misago/core/testproject/urls.py

@@ -1,14 +1,15 @@
 from django.conf.urls import include, url
-
 # Setup Django admin to work with Misago auth
 from django.contrib import admin
+
+from misago.core.testproject import views
 from misago.users.forms.auth import AdminAuthenticationForm
 
+
 admin.autodiscover()
 admin.site.login_form = AdminAuthenticationForm
 
 
-from misago.core.testproject import views
 
 urlpatterns = [
     url(r'^forum/', include('misago.urls', namespace='misago')),

+ 0 - 1
misago/core/testproject/views.py

@@ -8,7 +8,6 @@ from misago.core.exceptions import Banned
 from misago.core.shortcuts import paginate, validate_slug
 from misago.core.testproject.models import Model
 from misago.core.views import home_redirect
-
 from misago.users.models import Ban
 
 

+ 1 - 0
misago/core/tests/test_apipaginator.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.core.apipaginator import ApiPaginator
 
 

+ 1 - 1
misago/core/tests/test_apipatch.py

@@ -237,4 +237,4 @@ class ApiPatchTests(TestCase):
         self.assertEqual(
             response.data['detail'][3], "yo ain't doing that!")
         self.assertEqual(response.data['id'], 13)
-        self.assertEqual(response.data['value'], 18)
+        self.assertEqual(response.data['value'], 18)

+ 1 - 0
misago/core/tests/test_context_processors.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.core import context_processors
 
 

+ 1 - 3
misago/core/tests/test_errorpages.py

@@ -2,11 +2,9 @@ from django.core.urlresolvers import reverse
 from django.test import Client, TestCase
 from django.test.client import RequestFactory
 
+from misago.core.testproject.views import mock_custom_403_error_page, mock_custom_404_error_page
 from misago.users.models import AnonymousUser
 
-from misago.core.testproject.views import (mock_custom_403_error_page,
-                                           mock_custom_404_error_page)
-
 
 class CSRFErrorViewTests(TestCase):
     def test_csrf_failure(self):

+ 1 - 2
misago/core/tests/test_exceptionhandler_middleware.py

@@ -3,9 +3,8 @@ from django.http import Http404
 from django.test import TestCase
 from django.test.client import RequestFactory
 
-from misago.users.models import AnonymousUser
-
 from misago.core.middleware.exceptionhandler import ExceptionHandlerMiddleware
+from misago.users.models import AnonymousUser
 
 
 class ExceptionHandlerMiddlewareTests(TestCase):

+ 1 - 2
misago/core/tests/test_exceptionhandlers.py

@@ -3,10 +3,9 @@ from django.core.exceptions import PermissionDenied
 from django.http import Http404
 from django.test import TestCase
 
-from misago.users.models import Ban
-
 from misago.core import exceptionhandler
 from misago.core.exceptions import Banned
+from misago.users.models import Ban
 
 
 INVALID_EXCEPTIONS = (

+ 1 - 0
misago/core/tests/test_forms.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.core import forms
 
 

+ 1 - 0
misago/core/tests/test_frontendcontext_middleware.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.core.middleware.frontendcontext import FrontendContextMiddleware
 
 

+ 1 - 1
misago/core/tests/test_momentjs.py

@@ -1,7 +1,7 @@
 from django.conf import settings
 from django.test import TestCase
 
-from misago.core.momentjs import list_available_locales, get_locale_path
+from misago.core.momentjs import get_locale_path, list_available_locales
 
 
 class MomentJSTests(TestCase):

+ 1 - 0
misago/core/tests/test_page.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.core.page import Page
 
 

+ 1 - 1
misago/core/tests/test_serializer.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.core import serializer
 
 
@@ -21,4 +22,3 @@ class SerializerTests(TestCase):
             dry = serializer.dumps(wet)
             self.assertFalse(dry.endswith('='))
             self.assertEqual(wet, serializer.loads(dry))
-

+ 1 - 0
misago/core/tests/test_setup.py

@@ -1,6 +1,7 @@
 import os
 
 from django.test import TestCase
+
 from misago.core import setup
 
 

+ 1 - 1
misago/core/tests/test_shortcuts.py

@@ -85,4 +85,4 @@ class GetIntOr404(TestCase):
 
         for value in INVALID_VALUES:
             with self.assertRaises(Http404):
-                get_int_or_404(value)
+                get_int_or_404(value)

+ 1 - 1
misago/core/tests/test_threadstore.py

@@ -2,8 +2,8 @@ from django.core.urlresolvers import reverse
 from django.test import TestCase
 from django.test.client import RequestFactory
 
-from misago.core.middleware.threadstore import ThreadStoreMiddleware
 from misago.core import threadstore
+from misago.core.middleware.threadstore import ThreadStoreMiddleware
 
 
 class ThreadStoreTests(TestCase):

+ 7 - 3
misago/core/tests/test_utils.py

@@ -4,9 +4,13 @@ from django.test import TestCase
 from django.test.client import RequestFactory
 from django.utils import timezone
 
-from misago.core.utils import (clean_return_path, is_request_to_misago,
-                               slugify, is_referer_local,
-                               format_plaintext_for_html)
+from misago.core.utils import (
+    clean_return_path,
+    format_plaintext_for_html,
+    is_referer_local,
+    is_request_to_misago,
+    slugify
+)
 
 
 VALID_PATHS = (

+ 2 - 1
misago/core/testutils.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.core import threadstore
 from misago.core.cache import cache
 
@@ -17,4 +18,4 @@ class MisagoTestCase(TestCase):
 
     def tearDown(self):
         self.clear_state()
-        super(MisagoTestCase, self).tearDown()
+        super(MisagoTestCase, self).tearDown()

+ 3 - 2
misago/core/utils.py

@@ -2,11 +2,12 @@ from datetime import timedelta
 
 from unidecode import unidecode
 
-from django.http import Http404
 from django.core.urlresolvers import resolve, reverse
+from django.http import Http404
 from django.template.defaultfilters import slugify as django_slugify
 from django.utils import html, timezone
-from django.utils.translation import ugettext_lazy as _, ungettext_lazy
+from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ungettext_lazy
 
 
 def slugify(string):

+ 1 - 0
misago/core/validators.py

@@ -1,5 +1,6 @@
 from django.core.exceptions import ValidationError
 from django.utils.translation import ugettext_lazy as _
+
 from misago.core.utils import slugify
 
 

+ 1 - 2
misago/core/views.py

@@ -3,8 +3,8 @@ from django.shortcuts import redirect, render
 from django.utils import timezone
 from django.utils.translation import get_language
 from django.views import i18n
-from django.views.decorators.http import last_modified
 from django.views.decorators.cache import cache_page
+from django.views.decorators.http import last_modified
 
 from misago.core import momentjs
 
@@ -35,4 +35,3 @@ def momentjs_catalog(request):
         locale = "";
     return HttpResponse(
         locale, content_type='application/javascript; charset=utf-8')
-

+ 4 - 4
misago/faker/management/commands/createfakebans.py

@@ -1,14 +1,14 @@
-from datetime import timedelta
 import random
 import sys
+from datetime import timedelta
+
+from faker import Factory
 
 from django.core.management.base import BaseCommand
 from django.utils import timezone
 
-from faker import Factory
-
 from misago.core.management.progressbar import show_progress
-from misago.users.models import Ban, BAN_USERNAME, BAN_EMAIL, BAN_IP
+from misago.users.models import BAN_EMAIL, BAN_IP, BAN_USERNAME, Ban
 
 
 def fake_username_ban(fake):

+ 4 - 4
misago/faker/management/commands/createfakecategories.py

@@ -2,13 +2,13 @@ import random
 import sys
 import time
 
-from django.core.management.base import BaseCommand
 from faker import Factory
 
-from misago.acl import version as acl_version
-from misago.core.management.progressbar import show_progress
+from django.core.management.base import BaseCommand
 
+from misago.acl import version as acl_version
 from misago.categories.models import Category, RoleCategoryACL
+from misago.core.management.progressbar import show_progress
 
 
 class Command(BaseCommand):
@@ -85,4 +85,4 @@ class Command(BaseCommand):
 
         total_time = time.time() - start_time
         total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
-        self.stdout.write(message % (created_count, total_humanized))
+        self.stdout.write(message % (created_count, total_humanized))

+ 2 - 2
misago/faker/management/commands/createfakethreads.py

@@ -9,10 +9,10 @@ from django.db.transaction import atomic
 from django.template.defaultfilters import linebreaks_filter
 from django.utils import timezone
 
-from misago.core.management.progressbar import show_progress
 from misago.categories.models import Category
+from misago.core.management.progressbar import show_progress
 from misago.threads.checksums import update_post_checksum
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
 
 
 class Command(BaseCommand):

+ 3 - 3
misago/faker/management/commands/createfakeusers.py

@@ -2,16 +2,16 @@ import random
 import sys
 import time
 
+from faker import Factory
+
 from django.contrib.auth import get_user_model
 from django.core.exceptions import ValidationError
 from django.core.management.base import BaseCommand
 from django.db import IntegrityError
 
-from faker import Factory
-
 from misago.core.management.progressbar import show_progress
-from misago.users.models import Rank
 from misago.users.avatars import dynamic, gallery, get_avatar_hash
+from misago.users.models import Rank
 
 
 class Command(BaseCommand):

+ 1 - 0
misago/legal/context_processors.py

@@ -1,4 +1,5 @@
 from django.core.urlresolvers import reverse
+
 from misago.conf import settings
 
 

+ 1 - 1
misago/legal/migrations/0001_initial.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 from django.utils.translation import ugettext as _
 
 from misago.conf.migrationutils import migrate_settings_group

+ 0 - 1
misago/legal/tests.py

@@ -2,7 +2,6 @@ from django.core.urlresolvers import reverse
 from django.test import TestCase
 
 from misago.conf import settings
-
 from misago.legal.context_processors import legal_links
 
 

+ 1 - 0
misago/legal/urls.py

@@ -1,4 +1,5 @@
 from django.conf.urls import url
+
 from misago.legal.views import privacy_policy, terms_of_service
 
 

+ 2 - 2
misago/markup/parser.py

@@ -1,9 +1,9 @@
 import bleach
+import markdown
 from bs4 import BeautifulSoup
 from htmlmin.minify import html_minify
-import markdown
 
-from misago.markup.bbcode import inline, blocks
+from misago.markup.bbcode import blocks, inline
 from misago.markup.md.shortimgs import ShortImagesExtension
 from misago.markup.pipeline import pipeline
 

+ 1 - 0
misago/markup/pipeline.py

@@ -1,6 +1,7 @@
 from importlib import import_module
 
 from bs4 import BeautifulSoup
+
 from django.conf import settings
 
 

+ 1 - 0
misago/project_template/manage.py

@@ -2,6 +2,7 @@
 import os
 import sys
 
+
 if __name__ == "__main__":
     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
 

+ 3 - 3
misago/project_template/project_name/settings.py

@@ -8,12 +8,12 @@ For the full list of settings and their values, see
 https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/
 """
 
-# Import Misago defaults for overriding
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+import os
+
 from misago.conf.defaults import *
 
 
-# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
-import os
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
 

+ 6 - 5
misago/project_template/project_name/urls.py

@@ -1,16 +1,19 @@
 from django.conf import settings
 from django.conf.urls import include, url
-
+# Serve static and media files in development
+from django.conf.urls.static import static
 # Setup Django admin to work with Misago auth
 from django.contrib import admin
+
+# Register default views
+from misago.core.views import javascript_catalog, momentjs_catalog
 from misago.users.forms.auth import AdminAuthenticationForm
 
+
 admin.autodiscover()
 admin.site.login_form = AdminAuthenticationForm
 
 
-# Register default views
-from misago.core.views import javascript_catalog, momentjs_catalog
 
 urlpatterns = [
     url(r'^', include('misago.urls', namespace='misago')),
@@ -27,8 +30,6 @@ urlpatterns = [
 ]
 
 
-# Serve static and media files in development
-from django.conf.urls.static import static
 
 urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

+ 4 - 1
misago/project_template/project_name/wsgi.py

@@ -8,7 +8,10 @@ https://docs.djangoproject.com/en/{{ docs_version }}/howto/deployment/wsgi/
 """
 
 import os
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
 
 from django.core.wsgi import get_wsgi_application
+
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
+
 application = get_wsgi_application()

+ 1 - 3
misago/readtracker/categoriestracker.py

@@ -1,11 +1,10 @@
 from django.db.models import F
 from django.utils import timezone
 
-from misago.threads.permissions import exclude_invisible_threads
-
 from misago.readtracker import signals
 from misago.readtracker.dates import is_date_tracked
 from misago.readtracker.models import CategoryRead
+from misago.threads.permissions import exclude_invisible_threads
 
 
 __all__ = ['make_read_aware', 'sync_record']
@@ -114,4 +113,3 @@ def read_category(user, category):
         CategoryRead.objects.bulk_create(new_reads)
 
     signals.category_read.send(sender=user, category=category)
-

+ 1 - 0
misago/readtracker/dates.py

@@ -1,4 +1,5 @@
 from datetime import timedelta
+
 from django.conf import settings
 from django.utils import timezone
 

+ 1 - 1
misago/readtracker/migrations/0001_initial.py

@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
 from django.conf import settings
+from django.db import migrations, models
 
 
 class Migration(migrations.Migration):

+ 1 - 1
misago/readtracker/signals.py

@@ -1,4 +1,4 @@
-from django.dispatch import receiver, Signal
+from django.dispatch import Signal, receiver
 
 from misago.categories.signals import move_category_content
 from misago.threads.signals import move_thread, remove_thread_participant

+ 1 - 2
misago/readtracker/tests/test_readtracker.py

@@ -6,11 +6,10 @@ from django.utils import timezone
 
 from misago.acl import add_acl
 from misago.categories.models import Category
+from misago.readtracker import categoriestracker, threadstracker
 from misago.threads import testutils
 from misago.users.models import AnonymousUser
 
-from misago.readtracker import categoriestracker, threadstracker
-
 
 class ReadTrackerTests(TestCase):
     def setUp(self):

+ 1 - 2
misago/threads/api/threadendpoints/list.py

@@ -1,8 +1,7 @@
 from rest_framework.response import Response
 
 from misago.core.shortcuts import get_int_or_404
-
-from misago.threads.viewmodels.category import ThreadsRootCategory, ThreadsCategory
+from misago.threads.viewmodels.category import ThreadsCategory, ThreadsRootCategory
 from misago.threads.viewmodels.threads import ForumThreads
 
 

+ 4 - 4
misago/threads/api/threadendpoints/merge.py

@@ -1,17 +1,17 @@
 from django.core.exceptions import PermissionDenied
 from django.db import transaction
-from django.utils.translation import gettext as _, ungettext
+from django.utils.translation import gettext as _
+from django.utils.translation import ungettext
 
 from rest_framework.response import Response
 
 from misago.acl import add_acl
 from misago.categories.models import THREADS_ROOT_NAME, Category
-from misago.categories.permissions import can_see_category, can_browse_category
-
+from misago.categories.permissions import can_browse_category, can_see_category
 from misago.threads.events import record_event
 from misago.threads.models import Thread
 from misago.threads.permissions import can_see_thread
-from misago.threads.serializers import ThreadListSerializer, MergeThreadsSerializer
+from misago.threads.serializers import MergeThreadsSerializer, ThreadListSerializer
 from misago.threads.threadtypes import trees_map
 from misago.threads.utils import add_categories_to_threads
 

+ 1 - 3
misago/threads/api/threadendpoints/patch.py

@@ -3,12 +3,10 @@ from django.utils.translation import gettext as _
 
 from misago.acl import add_acl
 from misago.categories.models import Category
-from misago.categories.permissions import (
-    allow_see_category, allow_browse_category)
+from misago.categories.permissions import allow_browse_category, allow_see_category
 from misago.categories.serializers import CategorySerializer
 from misago.core.apipatch import ApiPatch
 from misago.core.shortcuts import get_int_or_404, get_object_or_404
-
 from misago.threads.moderation import threads as moderation
 from misago.threads.permissions import allow_start_thread
 from misago.threads.utils import add_categories_to_threads

+ 0 - 1
misago/threads/api/threadposts.py

@@ -2,7 +2,6 @@ from rest_framework import viewsets
 from rest_framework.response import Response
 
 from misago.core.shortcuts import get_int_or_404
-
 from misago.threads.viewmodels.posts import ThreadPosts
 from misago.threads.viewmodels.thread import ForumThread
 

+ 2 - 2
misago/threads/api/threads.py

@@ -1,16 +1,16 @@
 from django.core.exceptions import PermissionDenied
 from django.db import transaction
 from django.utils.translation import gettext as _
+
 from rest_framework import viewsets
 from rest_framework.decorators import detail_route, list_route
 from rest_framework.response import Response
 
 from misago.acl import add_acl
 from misago.categories.models import THREADS_ROOT_NAME, Category
-from misago.categories.permissions import allow_see_category, allow_browse_category
+from misago.categories.permissions import allow_browse_category, allow_see_category
 from misago.core.shortcuts import get_int_or_404, get_object_or_404
 from misago.readtracker.categoriestracker import read_category
-
 from misago.threads.api.threadendpoints.list import threads_list_endpoint
 from misago.threads.api.threadendpoints.merge import threads_merge_endpoint
 from misago.threads.api.threadendpoints.patch import thread_patch_endpoint

+ 1 - 1
misago/threads/counts.py

@@ -9,4 +9,4 @@ def sync_user_unread_private_threads_count(user):
     user.save(update_fields=[
         'unread_private_threads',
         'sync_unread_private_threads'
-    ])
+    ])

+ 1 - 0
misago/threads/events.py

@@ -1,4 +1,5 @@
 from django.utils import timezone
+
 from misago.threads.models import Post
 
 

+ 0 - 1
misago/threads/management/commands/synchronizethreads.py

@@ -4,7 +4,6 @@ from django.core.management.base import BaseCommand
 
 from misago.core.management.progressbar import show_progress
 from misago.core.pgutils import batch_update
-
 from misago.threads.models import Thread
 
 

+ 4 - 4
misago/threads/migrations/0001_initial.py

@@ -1,13 +1,13 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.conf import settings
-from django.contrib.postgres.fields import JSONField
-from django.db import models, migrations
 import django.db.models.deletion
 import django.utils.timezone
+from django.conf import settings
+from django.contrib.postgres.fields import JSONField
+from django.db import migrations, models
 
-from misago.core.pgutils import CreatePartialIndex, CreatePartialCompositeIndex
+from misago.core.pgutils import CreatePartialCompositeIndex, CreatePartialIndex
 
 
 class Migration(migrations.Migration):

+ 1 - 1
misago/threads/migrations/0002_threads_settings.py

@@ -2,7 +2,7 @@
 from __future__ import unicode_literals
 
 from django.conf import settings
-from django.db import models, migrations
+from django.db import migrations, models
 from django.utils.translation import ugettext as _
 
 from misago.conf.migrationutils import migrate_settings_group

+ 1 - 2
misago/threads/models/post.py

@@ -5,9 +5,8 @@ from django.dispatch import receiver
 from django.utils import timezone
 
 from misago.conf import settings
-
 from misago.threads import threadtypes
-from misago.threads.checksums import update_post_checksum, is_post_valid
+from misago.threads.checksums import is_post_valid, update_post_checksum
 
 
 class Post(models.Model):

+ 2 - 1
misago/threads/models/subscription.py

@@ -1,5 +1,6 @@
 from django.db import models
 from django.utils import timezone
+
 from misago.conf import settings
 
 
@@ -9,4 +10,4 @@ class Subscription(models.Model):
     category = models.ForeignKey('misago_categories.Category')
 
     last_read_on = models.DateTimeField(default=timezone.now)
-    send_email = models.BooleanField(default=False)
+    send_email = models.BooleanField(default=False)

+ 1 - 0
misago/threads/models/threadparticipant.py

@@ -1,4 +1,5 @@
 from django.db import models
+
 from misago.conf import settings
 
 

+ 0 - 1
misago/threads/participants.py

@@ -1,7 +1,6 @@
 from django.utils.translation import ugettext as _
 
 from misago.core.mail import mail_user
-
 from misago.threads.models import ThreadParticipant
 from misago.threads.signals import remove_thread_participant
 

+ 4 - 4
misago/threads/permissions/threads.py

@@ -2,16 +2,16 @@ from django.core.exceptions import PermissionDenied
 from django.db.models import Q
 from django.http import Http404
 from django.utils import timezone
-from django.utils.translation import ungettext, ugettext_lazy as _
+from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ungettext
 
 from misago.acl import add_acl, algebra
 from misago.acl.decorators import return_boolean
 from misago.acl.models import Role
-from misago.categories.models import Category, RoleCategoryACL, CategoryRole
+from misago.categories.models import Category, CategoryRole, RoleCategoryACL
 from misago.categories.permissions import get_categories_roles
 from misago.core import forms
-
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
 
 
 __all__ = [

+ 2 - 2
misago/threads/serializers/moderation.py

@@ -1,11 +1,11 @@
 from django.forms import ValidationError
 from django.utils.translation import ugettext as _
+
 from rest_framework import serializers
 
 from misago.acl import add_acl
 from misago.categories.models import THREADS_ROOT_NAME, Category
-from misago.categories.permissions import can_see_category, can_browse_category
-
+from misago.categories.permissions import can_browse_category, can_see_category
 from misago.threads.models import THREAD_WEIGHT_DEFAULT, THREAD_WEIGHT_GLOBAL
 from misago.threads.permissions import allow_start_thread
 from misago.threads.threadtypes import trees_map

+ 2 - 2
misago/threads/serializers/post.py

@@ -1,9 +1,9 @@
 from django.core.urlresolvers import reverse
-from rest_framework import serializers
 
-from misago.users.serializers import UserSerializer
+from rest_framework import serializers
 
 from misago.threads.models import Post
+from misago.users.serializers import UserSerializer
 
 
 __all__ = [

+ 1 - 1
misago/threads/serializers/thread.py

@@ -1,8 +1,8 @@
 from django.core.urlresolvers import reverse
+
 from rest_framework import serializers
 
 from misago.categories.serializers import BasicCategorySerializer
-
 from misago.threads.models import Thread
 
 

+ 7 - 9
misago/threads/signals.py

@@ -1,10 +1,13 @@
+from django.contrib.auth import get_user_model
 from django.db import transaction
-from django.dispatch import receiver, Signal
+from django.db.models.signals import pre_delete
+from django.dispatch import Signal, receiver
 
 from misago.categories.models import Category
-from misago.core.pgutils import batch_update, batch_delete
-
-from misago.threads.models import Thread, Post
+from misago.categories.signals import delete_category_content, move_category_content
+from misago.core.pgutils import batch_delete, batch_update
+from misago.threads.models import Post, Thread
+from misago.users.signals import delete_user_content, username_changed
 
 
 delete_post = Signal()
@@ -30,8 +33,6 @@ def move_thread_content(sender, **kwargs):
     sender.post_set.update(category=sender.category)
 
 
-from misago.categories.signals import (delete_category_content,
-                                       move_category_content)
 @receiver(delete_category_content)
 def delete_category_threads(sender, **kwargs):
     sender.thread_set.all().delete()
@@ -46,7 +47,6 @@ def move_category_threads(sender, **kwargs):
     Post.objects.filter(category=sender).update(category=new_category)
 
 
-from misago.users.signals import delete_user_content, username_changed
 @receiver(delete_user_content)
 def delete_user_threads(sender, **kwargs):
     recount_categories = set()
@@ -95,8 +95,6 @@ def update_usernames(sender, **kwargs):
     )
 
 
-from django.contrib.auth import get_user_model
-from django.db.models.signals import pre_delete
 @receiver(pre_delete, sender=get_user_model())
 def remove_unparticipated_private_threads(sender, **kwargs):
     threads_qs = kwargs['instance'].private_thread_set.all()

+ 1 - 1
misago/threads/subscriptions.py

@@ -39,4 +39,4 @@ def make_thread_subscription_aware(user, thread):
         try:
             thread.subscription = user.subscription_set.get(thread=thread)
         except Subscription.DoesNotExist:
-            thread.subscription = None
+            thread.subscription = None

+ 2 - 4
misago/threads/tests/-test_floodprotection_middleware.py

@@ -2,11 +2,9 @@ from datetime import timedelta
 
 from django.utils import timezone
 
-from misago.users.testutils import AuthenticatedUserTestCase
-
 from misago.threads.posting import PostingInterrupt
-from misago.threads.posting.floodprotection import (
-    MIN_POSTING_PAUSE, FloodProtectionMiddleware)
+from misago.threads.posting.floodprotection import MIN_POSTING_PAUSE, FloodProtectionMiddleware
+from misago.users.testutils import AuthenticatedUserTestCase
 
 
 class FloodProtectionMiddlewareTests(AuthenticatedUserTestCase):

+ 1 - 3
misago/threads/tests/test_events.py

@@ -7,9 +7,8 @@ from django.utils import timezone
 
 from misago.acl import add_acl
 from misago.categories.models import Category
-
 from misago.threads.events import record_event
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
 from misago.threads.testutils import reply_thread
 
 
@@ -58,4 +57,3 @@ class EventsAPITests(TestCase):
         self.assertEqual(event_post.event_context, context)
         self.assertEqual(event_post.poster_id, request.user.pk)
         self.assertEqual(event_post.poster_ip, request.user_ip)
-

+ 8 - 4
misago/threads/tests/test_participants.py

@@ -3,11 +3,15 @@ from django.test import TestCase
 from django.utils import timezone
 
 from misago.categories.models import Category
-
-from misago.threads.models import Thread, ThreadParticipant, Post
+from misago.threads.models import Post, Thread, ThreadParticipant
 from misago.threads.participants import (
-    thread_has_participants, make_thread_participants_aware, set_thread_owner,
-    set_user_unread_private_threads_sync, add_owner, remove_participant)
+    add_owner,
+    make_thread_participants_aware,
+    remove_participant,
+    set_thread_owner,
+    set_user_unread_private_threads_sync,
+    thread_has_participants
+)
 
 
 class ParticipantsTests(TestCase):

+ 1 - 2
misago/threads/tests/test_post_model.py

@@ -5,9 +5,8 @@ from django.test import TestCase
 from django.utils import timezone
 
 from misago.categories.models import Category
-
 from misago.threads.checksums import update_post_checksum
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
 
 
 class PostModelTests(TestCase):

+ 2 - 3
misago/threads/tests/test_posts_moderation.py

@@ -1,8 +1,7 @@
 from misago.categories.models import Category
-from misago.users.testutils import AuthenticatedUserTestCase
-
 from misago.threads import moderation, testutils
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
+from misago.users.testutils import AuthenticatedUserTestCase
 
 
 class PostsModerationTests(AuthenticatedUserTestCase):

+ 1 - 2
misago/threads/tests/test_subscriptions.py

@@ -6,9 +6,8 @@ from django.utils import timezone
 
 from misago.categories.models import Category
 from misago.threads import testutils
-from misago.users.models import AnonymousUser
-
 from misago.threads.subscriptions import make_subscription_aware
+from misago.users.models import AnonymousUser
 
 
 class SubscriptionsTests(TestCase):

+ 0 - 1
misago/threads/tests/test_synchronizethreads.py

@@ -2,7 +2,6 @@ from django.test import TestCase
 from django.utils.six import StringIO
 
 from misago.categories.models import Category
-
 from misago.threads import testutils
 from misago.threads.management.commands import synchronizethreads
 

+ 1 - 2
misago/threads/tests/test_thread_model.py

@@ -5,8 +5,7 @@ from django.test import TestCase
 from django.utils import timezone
 
 from misago.categories.models import Category
-
-from misago.threads.models import Thread, ThreadParticipant, Post
+from misago.threads.models import Post, Thread, ThreadParticipant
 
 
 class ThreadModelTests(TestCase):

+ 0 - 1
misago/threads/tests/test_thread_patch_api.py

@@ -2,7 +2,6 @@ import json
 
 from misago.acl.testutils import override_acl
 from misago.categories.models import Category
-
 from misago.threads.tests.test_threads_api import ThreadsApiTestCase
 
 

+ 1 - 3
misago/threads/tests/test_threadparticipant_model.py

@@ -3,8 +3,7 @@ from django.test import TestCase
 from django.utils import timezone
 
 from misago.categories.models import Category
-
-from misago.threads.models import Thread, ThreadParticipant, Post
+from misago.threads.models import Post, Thread, ThreadParticipant
 
 
 class ThreadParticipantTests(TestCase):
@@ -98,4 +97,3 @@ class ThreadParticipantTests(TestCase):
         participation = ThreadParticipant.objects.get(
             thread=self.thread, user=user)
         self.assertFalse(participation.is_owner)
-

+ 1 - 2
misago/threads/tests/test_threads_api.py

@@ -1,12 +1,11 @@
 import json
 
 from misago.acl.testutils import override_acl
-from misago.users.testutils import AuthenticatedUserTestCase
 from misago.categories.models import THREADS_ROOT_NAME, Category
-
 from misago.threads import testutils
 from misago.threads.models import Thread
 from misago.threads.threadtypes import trees_map
+from misago.users.testutils import AuthenticatedUserTestCase
 
 
 class ThreadsApiTestCase(AuthenticatedUserTestCase):

+ 1 - 2
misago/threads/tests/test_threads_merge_api.py

@@ -5,10 +5,9 @@ from django.core.urlresolvers import reverse
 from misago.acl import add_acl
 from misago.acl.testutils import override_acl
 from misago.categories.models import Category
-
 from misago.threads import testutils
 from misago.threads.api.threadendpoints.merge import MERGE_LIMIT
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
 from misago.threads.serializers import ThreadListSerializer
 from misago.threads.tests.test_threads_api import ThreadsApiTestCase
 

+ 2 - 3
misago/threads/tests/test_threads_moderation.py

@@ -1,8 +1,7 @@
 from misago.categories.models import Category
-from misago.users.testutils import AuthenticatedUserTestCase
-
 from misago.threads import moderation, testutils
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
+from misago.users.testutils import AuthenticatedUserTestCase
 
 
 class MockRequest(object):

+ 1 - 2
misago/threads/tests/test_threadslists.py

@@ -9,9 +9,8 @@ from misago.categories.models import Category
 from misago.core import threadstore
 from misago.core.cache import cache
 from misago.readtracker import categoriestracker, threadstracker
-from misago.users.testutils import AuthenticatedUserTestCase
-
 from misago.threads import testutils
+from misago.users.testutils import AuthenticatedUserTestCase
 
 
 LISTS_URLS = (

+ 1 - 2
misago/threads/tests/test_threadview.py

@@ -1,9 +1,8 @@
 from misago.acl.testutils import override_acl
-from misago.users.testutils import AuthenticatedUserTestCase
 from misago.categories.models import Category
-
 from misago.threads import testutils
 from misago.threads.models import Thread
+from misago.users.testutils import AuthenticatedUserTestCase
 
 
 class ThreadViewTestCase(AuthenticatedUserTestCase):

+ 1 - 0
misago/threads/tests/test_typestree.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.categories.models import Category
 from misago.threads.threadtypes import TreesMap
 

+ 1 - 2
misago/threads/tests/test_utils.py

@@ -1,6 +1,5 @@
-from misago.core.testutils import MisagoTestCase
 from misago.categories.models import Category
-
+from misago.core.testutils import MisagoTestCase
 from misago.threads import testutils
 from misago.threads.utils import add_categories_to_threads
 

+ 0 - 1
misago/threads/tests/test_validators.py

@@ -2,7 +2,6 @@ from django.core.exceptions import ValidationError
 from django.test import TestCase
 
 from misago.conf import settings
-
 from misago.threads.validators import validate_title
 
 

+ 1 - 2
misago/threads/testutils.py

@@ -3,8 +3,7 @@ from datetime import timedelta
 from django.utils import timezone
 
 from misago.core.utils import slugify
-
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
 
 
 def post_thread(category, title='Test thread', poster='Tester',

+ 1 - 0
misago/threads/threadtypes/privatethread.py

@@ -1,5 +1,6 @@
 from django.core.urlresolvers import reverse
 from django.utils.translation import ugettext_lazy as _
+
 from misago.threads.threadtypes import ThreadType
 
 

+ 1 - 0
misago/threads/threadtypes/thread.py

@@ -1,5 +1,6 @@
 from django.core.urlresolvers import reverse
 from django.utils.translation import ugettext_lazy as _
+
 from misago.threads.threadtypes import ThreadType
 
 

+ 2 - 1
misago/threads/validators.py

@@ -1,5 +1,6 @@
 from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _, ungettext
+from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ungettext
 
 from misago.conf import settings
 from misago.core.validators import validate_sluggable

+ 2 - 3
misago/threads/viewmodels/category.py

@@ -1,11 +1,10 @@
 from django.http import Http404
 
 from misago.acl import add_acl
-from misago.core.shortcuts import validate_slug
-
 from misago.categories.models import Category
-from misago.categories.permissions import allow_see_category, allow_browse_category
+from misago.categories.permissions import allow_browse_category, allow_see_category
 from misago.categories.serializers import BasicCategorySerializer
+from misago.core.shortcuts import validate_slug
 
 
 class ViewModel(object):

+ 1 - 2
misago/threads/viewmodels/posts.py

@@ -3,10 +3,9 @@ from django.conf import settings
 from misago.acl import add_acl
 from misago.core.shortcuts import paginate, pagination_dict
 from misago.readtracker.threadstracker import make_posts_read_aware
-from misago.users.online.utils import make_users_status_aware
-
 from misago.threads.permissions.threads import exclude_invisible_posts
 from misago.threads.serializers import ThreadPostSerializer
+from misago.users.online.utils import make_users_status_aware
 
 
 class ViewModel(object):

+ 0 - 1
misago/threads/viewmodels/thread.py

@@ -5,7 +5,6 @@ from misago.acl import add_acl
 from misago.categories.models import Category
 from misago.core.shortcuts import validate_slug
 from misago.readtracker.threadstracker import make_read_aware
-
 from misago.threads.models import Thread
 from misago.threads.permissions.threads import allow_see_thread
 from misago.threads.serializers import ThreadSerializer

+ 2 - 2
misago/threads/viewmodels/threads.py

@@ -5,12 +5,12 @@ from django.core.exceptions import PermissionDenied
 from django.db.models import F, Q
 from django.http import Http404
 from django.utils import timezone
-from django.utils.translation import ugettext as _, ugettext_lazy
+from django.utils.translation import ugettext as _
+from django.utils.translation import ugettext_lazy
 
 from misago.acl import add_acl
 from misago.core.shortcuts import paginate, pagination_dict
 from misago.readtracker import threadstracker
-
 from misago.threads.models import Thread
 from misago.threads.permissions import exclude_invisible_threads
 from misago.threads.serializers import ThreadListSerializer

+ 1 - 1
misago/threads/views/list.py

@@ -4,7 +4,7 @@ from django.http import Http404
 from django.shortcuts import render
 from django.views.generic import View
 
-from misago.threads.viewmodels.category import ThreadsRootCategory, ThreadsCategory, PrivateThreadsCategory
+from misago.threads.viewmodels.category import PrivateThreadsCategory, ThreadsCategory, ThreadsRootCategory
 from misago.threads.viewmodels.threads import ForumThreads, PrivateThreads
 
 

+ 1 - 1
misago/threads/views/thread.py

@@ -2,8 +2,8 @@ from django.core.urlresolvers import reverse
 from django.shortcuts import render
 from django.views.generic import View
 
-from misago.threads.viewmodels.thread import ForumThread
 from misago.threads.viewmodels.posts import ThreadPosts
+from misago.threads.viewmodels.thread import ForumThread
 
 
 class ThreadBase(View):

+ 1 - 0
misago/urls.py

@@ -1,5 +1,6 @@
 from django.conf import settings
 from django.conf.urls import include, url
+
 from misago.core.views import forum_index
 
 

+ 1 - 2
misago/users/activepostersranking.py

@@ -6,7 +6,6 @@ from django.db.models import Count
 from django.utils import timezone
 
 from misago.categories.models import Category
-
 from misago.users.models import ActivityRanking
 
 
@@ -43,4 +42,4 @@ def build_active_posters_ranking():
         ActivityRanking.objects.create(
             user=ranking,
             score=ranking.score
-        )
+        )

+ 25 - 9
misago/users/admin.py

@@ -2,18 +2,34 @@ from django.conf.urls import url
 from django.contrib import admin as djadmin
 from django.utils.translation import ugettext_lazy as _
 
-from misago.users.views.admin.bans import BansList, NewBan, EditBan, DeleteBan
+from misago.users.djangoadmin import User, UserAdminModel
+from misago.users.views.admin.bans import BansList, DeleteBan, EditBan, NewBan
 from misago.users.views.admin.ranks import (
-    RanksList, NewRank, EditRank, DeleteRank, MoveDownRank, MoveUpRank,
-    DefaultRank, RankUsers)
+    DefaultRank,
+    DeleteRank,
+    EditRank,
+    MoveDownRank,
+    MoveUpRank,
+    NewRank,
+    RanksList,
+    RankUsers
+)
 from misago.users.views.admin.users import (
-    UsersList, NewUser, EditUser, DeleteThreadsStep, DeletePostsStep,
-    DeleteAccountStep)
+    DeleteAccountStep,
+    DeletePostsStep,
+    DeleteThreadsStep,
+    EditUser,
+    NewUser,
+    UsersList
+)
 from misago.users.views.admin.warnings import (
-    WarningsList, NewWarning, EditWarning, MoveDownWarning, MoveUpWarning,
-    DeleteWarning)
-from misago.users.djangoadmin import User
-from misago.users.djangoadmin import UserAdminModel
+    DeleteWarning,
+    EditWarning,
+    MoveDownWarning,
+    MoveUpWarning,
+    NewWarning,
+    WarningsList
+)
 
 
 # register misago user model in django admin panel

+ 2 - 3
misago/users/api/auth.py

@@ -9,12 +9,11 @@ from rest_framework.response import Response
 
 from misago.conf import settings
 from misago.core.mail import mail_user
-
 from misago.users.bans import get_user_ban
 from misago.users.forms.auth import AuthenticationForm, ResendActivationForm, ResetPasswordForm
 from misago.users.rest_permissions import UnbannedAnonOnly, UnbannedOnly
-from misago.users.serializers import AuthenticatedUserSerializer, AnonymousUserSerializer
-from misago.users.tokens import make_activation_token, make_password_change_token, is_password_change_token_valid
+from misago.users.serializers import AnonymousUserSerializer, AuthenticatedUserSerializer
+from misago.users.tokens import is_password_change_token_valid, make_activation_token, make_password_change_token
 from misago.users.validators import validate_password
 
 

+ 1 - 1
misago/users/api/ranks.py

@@ -1,4 +1,4 @@
-from rest_framework import viewsets, mixins
+from rest_framework import mixins, viewsets
 
 from misago.users.models import Rank
 from misago.users.serializers import RankSerializer

+ 1 - 2
misago/users/api/userendpoints/avatar.py

@@ -8,7 +8,6 @@ from rest_framework.response import Response
 
 from misago.conf import settings
 from misago.core.utils import format_plaintext_for_html
-
 from misago.users import avatars
 from misago.users.forms.moderation import ModerateAvatarForm
 
@@ -214,4 +213,4 @@ def moderate_avatar_endpoint(request, profile):
             'is_avatar_locked': int(profile.is_avatar_locked),
             'avatar_lock_user_message': profile.avatar_lock_user_message,
             'avatar_lock_staff_message': profile.avatar_lock_staff_message,
-        })
+        })

+ 1 - 2
misago/users/api/userendpoints/changeemail.py

@@ -5,9 +5,8 @@ from rest_framework.response import Response
 
 from misago.conf import settings
 from misago.core.mail import mail_user
-
-from misago.users.forms.options import ChangeEmailForm
 from misago.users.credentialchange import store_new_credential
+from misago.users.forms.options import ChangeEmailForm
 
 
 def change_email_endpoint(request, pk=None):

+ 1 - 2
misago/users/api/userendpoints/changepassword.py

@@ -5,9 +5,8 @@ from rest_framework.response import Response
 
 from misago.conf import settings
 from misago.core.mail import mail_user
-
-from misago.users.forms.options import ChangePasswordForm
 from misago.users.credentialchange import store_new_credential
+from misago.users.forms.options import ChangePasswordForm
 
 
 def change_password_endpoint(request, pk=None):

+ 1 - 3
misago/users/api/userendpoints/create.py

@@ -9,12 +9,10 @@ from rest_framework.response import Response
 from misago.conf import settings
 from misago.core import forms
 from misago.core.mail import mail_user
-
 from misago.users import captcha
 from misago.users.bans import ban_ip
 from misago.users.forms.register import RegisterForm
-from misago.users.models import (ACTIVATION_REQUIRED_USER,
-                                 ACTIVATION_REQUIRED_ADMIN)
+from misago.users.models import ACTIVATION_REQUIRED_ADMIN, ACTIVATION_REQUIRED_USER
 from misago.users.serializers import AuthenticatedUserSerializer
 from misago.users.tokens import make_activation_token
 from misago.users.validators import validate_new_registration

+ 1 - 2
misago/users/api/userendpoints/list.py

@@ -11,11 +11,10 @@ from misago.conf import settings
 from misago.core.apipaginator import ApiPaginator
 from misago.core.cache import cache
 from misago.core.shortcuts import get_int_or_404, get_object_or_404
-
 from misago.users.activepostersranking import get_active_posters_ranking
 from misago.users.models import Rank
 from misago.users.online.utils import make_users_status_aware
-from misago.users.serializers import UserSerializer, ScoredUserSerializer
+from misago.users.serializers import ScoredUserSerializer, UserSerializer
 
 
 Paginator = ApiPaginator(settings.MISAGO_USERS_PER_PAGE, 4)

+ 0 - 1
misago/users/api/userendpoints/signature.py

@@ -6,7 +6,6 @@ from rest_framework.response import Response
 
 from misago.conf import settings
 from misago.core.utils import format_plaintext_for_html
-
 from misago.users.forms.options import EditSignatureForm
 from misago.users.signatures import is_user_signature_valid, set_user_signature
 

+ 2 - 3
misago/users/api/userendpoints/username.py

@@ -5,9 +5,8 @@ from rest_framework import status
 from rest_framework.response import Response
 
 from misago.conf import settings
-
-from misago.users.namechanges import UsernameChanges
 from misago.users.forms.rename import ChangeUsernameForm
+from misago.users.namechanges import UsernameChanges
 
 
 def username_endpoint(request):
@@ -85,4 +84,4 @@ def moderate_username_endpoint(request, profile):
         return Response({
             'length_min': settings.username_length_min,
             'length_max': settings.username_length_max,
-        })
+        })

+ 1 - 2
misago/users/api/usernamechanges.py

@@ -3,12 +3,11 @@ from django.core.exceptions import PermissionDenied
 from django.db.models import Q
 from django.utils.translation import ugettext as _
 
-from rest_framework import status, viewsets, mixins
+from rest_framework import mixins, status, viewsets
 from rest_framework.response import Response
 
 from misago.core.apipaginator import ApiPaginator
 from misago.core.shortcuts import get_int_or_404, get_object_or_404
-
 from misago.users.models import UsernameChange
 from misago.users.rest_permissions import BasePermission
 from misago.users.serializers.usernamechange import UsernameChangeSerializer

+ 9 - 12
misago/users/api/users.py

@@ -16,24 +16,21 @@ from misago.core.cache import cache
 from misago.core.shortcuts import get_int_or_404, get_object_or_404
 from misago.threads.moderation.posts import hide_post
 from misago.threads.moderation.threads import hide_thread
-
+from misago.users.api.userendpoints.avatar import avatar_endpoint, moderate_avatar_endpoint
+from misago.users.api.userendpoints.changeemail import change_email_endpoint
+from misago.users.api.userendpoints.changepassword import change_password_endpoint
+from misago.users.api.userendpoints.create import create_endpoint
+from misago.users.api.userendpoints.list import list_endpoint
+from misago.users.api.userendpoints.signature import signature_endpoint
+from misago.users.api.userendpoints.username import moderate_username_endpoint, username_endpoint
 from misago.users.bans import get_user_ban
 from misago.users.forms.options import ForumOptionsForm
 from misago.users.online.utils import get_user_status
 from misago.users.permissions.delete import allow_delete_user
-from misago.users.permissions.moderation import allow_rename_user, allow_moderate_avatar
+from misago.users.permissions.moderation import allow_moderate_avatar, allow_rename_user
 from misago.users.permissions.profiles import allow_browse_users_list, allow_follow_user, allow_see_ban_details
-
 from misago.users.rest_permissions import BasePermission, IsAuthenticatedOrReadOnly, UnbannedAnonOnly
-from misago.users.serializers import UserSerializer, UserProfileSerializer, BanDetailsSerializer
-
-from misago.users.api.userendpoints.list import list_endpoint
-from misago.users.api.userendpoints.avatar import avatar_endpoint, moderate_avatar_endpoint
-from misago.users.api.userendpoints.create import create_endpoint
-from misago.users.api.userendpoints.signature import signature_endpoint
-from misago.users.api.userendpoints.username import username_endpoint, moderate_username_endpoint
-from misago.users.api.userendpoints.changeemail import change_email_endpoint
-from misago.users.api.userendpoints.changepassword import change_password_endpoint
+from misago.users.serializers import BanDetailsSerializer, UserProfileSerializer, UserSerializer
 
 
 class UserViewSetPermission(BasePermission):

+ 2 - 1
misago/users/apps.py

@@ -1,6 +1,7 @@
 from django.apps import AppConfig
 from django.utils.translation import ugettext_lazy as _
-from misago.users.pages import usercp, users_list, user_profile
+
+from misago.users.pages import user_profile, usercp, users_list
 
 
 class MisagoUsersConfig(AppConfig):

+ 2 - 3
misago/users/avatars/dynamic.py

@@ -1,11 +1,10 @@
-from importlib import import_module
 import math
 import os
+from importlib import import_module
 
-from PIL import Image, ImageDraw, ImageColor, ImageFont, ImageFilter
+from PIL import Image, ImageColor, ImageDraw, ImageFilter, ImageFont
 
 from misago.conf import settings
-
 from misago.users.avatars import store
 
 

+ 1 - 2
misago/users/avatars/gravatar.py

@@ -1,10 +1,9 @@
 from StringIO import StringIO
 
-from PIL import Image
 import requests
+from PIL import Image
 
 from misago.conf import settings
-
 from misago.users.avatars import store
 
 

+ 1 - 2
misago/users/avatars/store.py

@@ -1,11 +1,10 @@
-from hashlib import md5
 import os
+from hashlib import md5
 
 from path import Path
 from PIL import Image
 
 from misago.conf import settings
-
 from misago.users.avatars.paths import AVATARS_STORE
 
 

+ 0 - 1
misago/users/avatars/uploaded.py

@@ -8,7 +8,6 @@ from django.core.exceptions import ValidationError
 from django.utils.translation import ugettext as _
 
 from misago.conf import settings
-
 from misago.users.avatars import store
 
 

+ 2 - 3
misago/users/context_processors.py

@@ -1,8 +1,7 @@
 from django.core.urlresolvers import reverse
 
-from misago.users.pages import usercp, users_list, user_profile
-from misago.users.serializers import (
-    AuthenticatedUserSerializer, AnonymousUserSerializer)
+from misago.users.pages import user_profile, usercp, users_list
+from misago.users.serializers import AnonymousUserSerializer, AuthenticatedUserSerializer
 
 
 def user_links(request):

+ 2 - 0
misago/users/credentialchange.py

@@ -4,7 +4,9 @@ Changed credentials service
 Stores new e-mail and password in cache
 """
 from hashlib import sha256
+
 from django.conf import settings
+
 from misago.core import serializer
 
 

+ 1 - 2
misago/users/decorators.py

@@ -3,9 +3,8 @@ from django.shortcuts import redirect
 from django.utils.translation import gettext as _
 
 from misago.core.exceptions import Banned
-
 from misago.users.bans import get_request_ip_ban
-from misago.users.models import Ban, BAN_IP
+from misago.users.models import BAN_IP, Ban
 
 
 def deny_authenticated(f):

+ 12 - 7
misago/users/forms/admin.py

@@ -1,16 +1,21 @@
 from django.contrib.auth import get_user_model
-from django.utils.translation import ugettext_lazy as _, ungettext
+from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ungettext
 
+from misago.acl.models import Role
 from misago.conf import settings
 from misago.core import forms, threadstore
 from misago.core.validators import validate_sluggable
-from misago.acl.models import Role
-
 from misago.users.models import (
-    AUTO_SUBSCRIBE_CHOICES, PRIVATE_THREAD_INVITES_LIMITS_CHOICES,
-    BANS_CHOICES, RESTRICTIONS_CHOICES, Ban, Rank, WarningLevel)
-from misago.users.validators import (
-    validate_username, validate_email, validate_password)
+    AUTO_SUBSCRIBE_CHOICES,
+    BANS_CHOICES,
+    PRIVATE_THREAD_INVITES_LIMITS_CHOICES,
+    RESTRICTIONS_CHOICES,
+    Ban,
+    Rank,
+    WarningLevel
+)
+from misago.users.validators import validate_email, validate_password, validate_username
 
 
 """

+ 3 - 5
misago/users/forms/auth.py

@@ -1,12 +1,10 @@
-from django.core.exceptions import ValidationError
 from django.contrib.auth import authenticate, get_user_model
-from django.contrib.auth.forms import (AuthenticationForm as
-                                       BaseAuthenticationForm)
-from django.utils.translation import ugettext_lazy as _
+from django.contrib.auth.forms import AuthenticationForm as BaseAuthenticationForm
+from django.core.exceptions import ValidationError
 from django.core.validators import validate_email
+from django.utils.translation import ugettext_lazy as _
 
 from misago.core import forms
-
 from misago.users.bans import get_user_ban
 from misago.users.validators import validate_password
 

+ 2 - 2
misago/users/forms/moderation.py

@@ -1,12 +1,12 @@
 from datetime import timedelta
 
 from django.contrib.auth import get_user_model
-from django.utils.translation import ugettext_lazy as _, ungettext
 from django.utils import timezone
+from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ungettext
 
 from misago.conf import settings
 from misago.core import forms
-
 from misago.users.bans import ban_user
 
 

+ 3 - 4
misago/users/forms/options.py

@@ -1,11 +1,10 @@
 from django.contrib.auth import get_user_model
-from django.utils.translation import ugettext_lazy as _, ungettext
+from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ungettext
 
 from misago.conf import settings
 from misago.core import forms
-
-from misago.users.models import (AUTO_SUBSCRIBE_CHOICES,
-                                 PRIVATE_THREAD_INVITES_LIMITS_CHOICES)
+from misago.users.models import AUTO_SUBSCRIBE_CHOICES, PRIVATE_THREAD_INVITES_LIMITS_CHOICES
 from misago.users.validators import validate_email, validate_password
 
 

+ 1 - 0
misago/users/forms/rename.py

@@ -1,4 +1,5 @@
 from django.utils.translation import ugettext_lazy as _
+
 from misago.core import forms
 from misago.users.validators import validate_username
 

+ 0 - 1
misago/users/management/commands/bansmaintenance.py

@@ -2,7 +2,6 @@ from django.core.management.base import BaseCommand
 from django.utils import timezone
 
 from misago.core import cachebuster
-
 from misago.users.models import Ban, BanCache
 
 

+ 2 - 1
misago/users/management/commands/buildactivepostersranking.py

@@ -1,4 +1,5 @@
 from django.core.management.base import BaseCommand
+
 from misago.core.management.progressbar import show_progress
 from misago.users.activepostersranking import build_active_posters_ranking
 
@@ -9,4 +10,4 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
         self.stdout.write('\n\nBuilding active posters ranking...')
         build_active_posters_ranking()
-        self.stdout.write('Done!')
+        self.stdout.write('Done!')

+ 2 - 3
misago/users/management/commands/createsuperuser.py

@@ -2,9 +2,9 @@
 Misago-native rehash of Django's createsuperuser command that
 works with double authentication fields on user model
 """
+import sys
 from getpass import getpass
 from optparse import make_option
-import sys
 
 from django.contrib.auth import get_user_model
 from django.core.exceptions import ValidationError
@@ -13,8 +13,7 @@ from django.db import DEFAULT_DB_ALIAS, IntegrityError
 from django.utils.encoding import force_str
 from django.utils.six.moves import input
 
-from misago.users.validators import (validate_email, validate_username,
-                                     validate_password)
+from misago.users.validators import validate_email, validate_password, validate_username
 
 
 class NotRunningInTTYException(Exception):

+ 2 - 1
misago/users/management/commands/populateonlinetracker.py

@@ -1,5 +1,6 @@
 from django.contrib.auth import get_user_model
 from django.core.management.base import BaseCommand
+
 from misago.users.models import Online
 
 
@@ -19,4 +20,4 @@ class Command(BaseCommand):
             )
             entries_created += 1
 
-        self.stdout.write('Tracker entries created: %s' % entries_created)
+        self.stdout.write('Tracker entries created: %s' % entries_created)

+ 1 - 1
misago/users/management/commands/synchronizeusers.py

@@ -37,4 +37,4 @@ class Command(BaseCommand):
             synchronized_count += 1
             show_progress(self, synchronized_count, users_to_sync, start_time)
 
-        self.stdout.write(message % synchronized_count)
+        self.stdout.write(message % synchronized_count)

+ 0 - 1
misago/users/middleware.py

@@ -5,7 +5,6 @@ from django.contrib.auth.models import AnonymousUser as DjAnonymousUser
 from django.core.urlresolvers import resolve
 
 from misago.conf import settings
-
 from misago.users.bans import get_request_ip_ban, get_user_ban
 from misago.users.models import AnonymousUser, Online
 from misago.users.online import tracker

+ 2 - 2
misago/users/migrations/0001_initial.py

@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
-import django.utils.timezone
 import django.db.models.deletion
+import django.utils.timezone
 from django.conf import settings
+from django.db import migrations, models
 
 from misago.core.pgutils import CreatePartialIndex
 

+ 1 - 1
misago/users/migrations/0002_users_settings.py

@@ -2,7 +2,7 @@
 from __future__ import unicode_literals
 
 from django.conf import settings
-from django.db import models, migrations
+from django.db import migrations, models
 from django.utils.translation import ugettext as _
 
 from misago.conf.migrationutils import migrate_settings_group

+ 2 - 1
misago/users/migrations/0003_bans_version_tracker.py

@@ -1,7 +1,8 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
+
 from misago.core.migrationutils import cachebuster_register_cache
 
 

+ 1 - 1
misago/users/migrations/0004_default_ranks.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-from django.db import models, migrations
+from django.db import migrations, models
 from django.utils.translation import ugettext as _
 
 from misago.core.utils import slugify

+ 5 - 7
misago/users/models/user.py

@@ -1,8 +1,8 @@
 from hashlib import md5
 
-from django.contrib.auth.models import (
-    AbstractBaseUser, PermissionsMixin, UserManager as BaseUserManager,
-    AnonymousUser as DjangoAnonymousUser)
+from django.contrib.auth.models import AnonymousUser as DjangoAnonymousUser
+from django.contrib.auth.models import UserManager as BaseUserManager
+from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
 from django.core.mail import send_mail
 from django.core.urlresolvers import reverse
 from django.db import IntegrityError, models, transaction
@@ -14,11 +14,9 @@ from misago.acl import get_user_acl
 from misago.acl.models import Role
 from misago.conf import settings
 from misago.core.utils import slugify
-
-from misago.users.models.rank import Rank
 from misago.users import avatars
-from misago.users.signatures import (is_user_signature_valid,
-                                     make_signature_checksum)
+from misago.users.models.rank import Rank
+from misago.users.signatures import is_user_signature_valid, make_signature_checksum
 from misago.users.utils import hash_email
 
 

+ 1 - 0
misago/users/namechanges.py

@@ -4,6 +4,7 @@ Service for tracking namechanges
 from datetime import timedelta
 
 from django.utils import timezone
+
 from misago.users.models import UsernameChange
 
 

+ 1 - 0
misago/users/online/tracker.py

@@ -1,4 +1,5 @@
 from django.utils import timezone
+
 from misago.users.models import Online
 
 

+ 1 - 1
misago/users/online/utils.py

@@ -3,7 +3,7 @@ from datetime import timedelta
 from django.utils import timezone
 
 from misago.users.bans import get_user_ban
-from misago.users.models import Online, BanCache
+from misago.users.models import BanCache, Online
 
 
 ACTIVITY_CUTOFF = timedelta(minutes=2)

+ 2 - 1
misago/users/permissions/delete.py

@@ -3,7 +3,8 @@ from datetime import timedelta
 from django.contrib.auth import get_user_model
 from django.core.exceptions import PermissionDenied
 from django.utils import timezone
-from django.utils.translation import ugettext_lazy as _, ungettext
+from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ungettext
 
 from misago.acl import algebra
 from misago.acl.decorators import return_boolean

+ 0 - 1
misago/users/permissions/moderation.py

@@ -10,7 +10,6 @@ from misago.acl import algebra
 from misago.acl.decorators import return_boolean
 from misago.acl.models import Role
 from misago.core import forms
-
 from misago.users.bans import get_user_ban
 
 

+ 1 - 2
misago/users/permissions/profiles.py

@@ -6,7 +6,6 @@ from misago.acl import algebra
 from misago.acl.decorators import return_boolean
 from misago.acl.models import Role
 from misago.core import forms
-
 from misago.users.permissions.decorators import authenticated_only
 
 
@@ -156,4 +155,4 @@ can_block_user = return_boolean(allow_block_user)
 def allow_see_ban_details(user, target):
     if not user.acl['can_see_ban_details']:
         raise PermissionDenied(_("You can't see users bans details."))
-can_see_ban_details = return_boolean(allow_see_ban_details)
+can_see_ban_details = return_boolean(allow_see_ban_details)

+ 0 - 1
misago/users/permissions/warnings.py

@@ -6,7 +6,6 @@ from misago.acl import algebra
 from misago.acl.decorators import return_boolean
 from misago.acl.models import Role
 from misago.core import forms
-
 from misago.users.models import UserWarning
 from misago.users.permissions.decorators import authenticated_only
 

+ 3 - 4
misago/users/rest_permissions.py

@@ -1,12 +1,11 @@
-from rest_framework.permissions import BasePermission, AllowAny, SAFE_METHODS
-
 from django.core.exceptions import PermissionDenied
 from django.utils.translation import ugettext as _
 
-from misago.core.exceptions import Banned
+from rest_framework.permissions import SAFE_METHODS, AllowAny, BasePermission
 
+from misago.core.exceptions import Banned
 from misago.users.bans import get_request_ip_ban
-from misago.users.models import Ban, BAN_IP
+from misago.users.models import BAN_IP, Ban
 
 
 __all__ = [

+ 3 - 3
misago/users/serializers/ban.py

@@ -1,9 +1,9 @@
 from django.utils.translation import ugettext as _
+
 from rest_framework import serializers
 
 from misago.core.utils import format_plaintext_for_html
-
-from misago.users.models import Ban, BAN_IP
+from misago.users.models import BAN_IP, Ban
 
 
 __all__ = [
@@ -52,4 +52,4 @@ class BanDetailsSerializer(serializers.ModelSerializer):
         return serialize_message(obj.user_message)
 
     def get_staff_message(self, obj):
-        return serialize_message(obj.staff_message)
+        return serialize_message(obj.staff_message)

+ 1 - 0
misago/users/serializers/rank.py

@@ -1,4 +1,5 @@
 from rest_framework import serializers
+
 from misago.core.utils import format_plaintext_for_html
 from misago.users.models import Rank
 

+ 2 - 2
misago/users/serializers/user.py

@@ -1,9 +1,9 @@
 from django.contrib.auth import get_user_model
 from django.core.urlresolvers import reverse
+
 from rest_framework import serializers
 
 from misago.acl import serialize_acl
-
 from misago.users.serializers import RankSerializer
 
 
@@ -244,4 +244,4 @@ class UserProfileSerializer(UserSerializer):
             'moderate_username': reverse(
                 'misago:api:user-moderate-username',kwargs={'pk': obj.pk}),
             'delete': reverse('misago:api:user-delete', kwargs={'pk': obj.pk}),
-        }
+        }

+ 4 - 3
misago/users/signals.py

@@ -1,5 +1,7 @@
 from django.contrib.auth import get_user_model
-from django.dispatch import receiver, Signal
+from django.dispatch import Signal, receiver
+
+from misago.core.signals import secret_key_changed
 
 
 delete_user_content = Signal()
@@ -18,7 +20,6 @@ def handle_name_change(sender, **kwargs):
                                     canceler_slug=sender.slug)
 
 
-from misago.core.signals import secret_key_changed
 @receiver(secret_key_changed)
 def update_signatures_checksums(sender, **kwargs):
     User = get_user_model()
@@ -27,4 +28,4 @@ def update_signatures_checksums(sender, **kwargs):
         if user.signature:
             new_checksum = make_signature_checksum(user.signature_parsed, user)
             user.signature_checksum = new_checksum
-            user.save(update_fields=['signature_checksum'])
+            user.save(update_fields=['signature_checksum'])

+ 1 - 1
misago/users/tests/test_activation_views.py

@@ -2,7 +2,7 @@ from django.contrib.auth import get_user_model
 from django.core.urlresolvers import reverse
 from django.test import TestCase
 
-from misago.users.models import Ban, BAN_USERNAME
+from misago.users.models import BAN_USERNAME, Ban
 from misago.users.tokens import make_activation_token
 
 

+ 2 - 4
misago/users/tests/test_activepostersranking.py

@@ -4,10 +4,8 @@ from misago.categories.models import Category
 from misago.core import threadstore
 from misago.core.cache import cache
 from misago.threads.testutils import post_thread
-
+from misago.users.activepostersranking import build_active_posters_ranking, get_active_posters_ranking
 from misago.users.testutils import AuthenticatedUserTestCase
-from misago.users.activepostersranking import (
-    get_active_posters_ranking, build_active_posters_ranking)
 
 
 class TestActivePostersRanking(AuthenticatedUserTestCase):
@@ -63,4 +61,4 @@ class TestActivePostersRanking(AuthenticatedUserTestCase):
         self.assertEqual(ranking['users_count'], 2)
 
         self.assertEqual(ranking['users'][0].score, 2)
-        self.assertEqual(ranking['users'][1].score, 1)
+        self.assertEqual(ranking['users'][1].score, 1)

+ 2 - 3
misago/users/tests/test_auth_api.py

@@ -4,9 +4,8 @@ from django.contrib.auth import get_user_model
 from django.core import mail
 from django.test import TestCase
 
-from misago.users.models import Ban, BAN_USERNAME
-from misago.users.tokens import (make_activation_token,
-                                 make_password_change_token)
+from misago.users.models import BAN_USERNAME, Ban
+from misago.users.tokens import make_activation_token, make_password_change_token
 
 
 class GatewayTests(TestCase):

+ 1 - 2
misago/users/tests/test_avatars.py

@@ -6,8 +6,7 @@ from django.core.exceptions import ValidationError
 from django.test import TestCase
 
 from misago.conf import settings
-
-from misago.users.avatars import store, dynamic, gallery, gravatar, uploaded
+from misago.users.avatars import dynamic, gallery, gravatar, store, uploaded
 
 
 class AvatarsStoreTests(TestCase):

+ 2 - 1
misago/users/tests/test_ban_model.py

@@ -1,6 +1,7 @@
 #-*- coding: utf-8 -*-
 from django.test import TestCase
-from misago.users.models import Ban, BAN_USERNAME, BAN_EMAIL, BAN_IP
+
+from misago.users.models import BAN_EMAIL, BAN_IP, BAN_USERNAME, Ban
 
 
 class BansManagerTests(TestCase):

+ 0 - 1
misago/users/tests/test_banadmin_views.py

@@ -3,7 +3,6 @@ from datetime import date, datetime, timedelta
 from django.core.urlresolvers import reverse
 
 from misago.admin.testutils import AdminTestCase
-
 from misago.users.models import Ban
 
 

+ 10 - 4
misago/users/tests/test_bans.py

@@ -4,10 +4,16 @@ from django.contrib.auth import get_user_model
 from django.test import TestCase
 from django.utils import timezone
 
-from misago.users.bans import (get_username_ban, get_email_ban, get_ip_ban,
-                               get_user_ban, get_request_ip_ban,
-                               ban_user, ban_ip)
-from misago.users.models import Ban, BAN_USERNAME, BAN_EMAIL, BAN_IP
+from misago.users.bans import (
+    ban_ip,
+    ban_user,
+    get_email_ban,
+    get_ip_ban,
+    get_request_ip_ban,
+    get_user_ban,
+    get_username_ban
+)
+from misago.users.models import BAN_EMAIL, BAN_IP, BAN_USERNAME, Ban
 
 
 class GetBanTests(TestCase):

+ 1 - 0
misago/users/tests/test_captcha_api.py

@@ -5,6 +5,7 @@ from django.test import TestCase
 
 from misago.conf import settings
 
+
 class AuthenticateAPITests(TestCase):
     def setUp(self):
         self.api_link = reverse('misago:api:captcha-question')

+ 1 - 1
misago/users/tests/test_decorators.py

@@ -1,6 +1,6 @@
 from django.core.urlresolvers import reverse
 
-from misago.users.models import Ban, BAN_IP
+from misago.users.models import BAN_IP, Ban
 from misago.users.testutils import UserTestCase
 
 

+ 2 - 1
misago/users/tests/test_djangoadmin_auth.py

@@ -1,4 +1,5 @@
 from django.core.urlresolvers import reverse
+
 from misago.admin.testutils import AdminTestCase
 
 
@@ -39,4 +40,4 @@ class DjangoAdminAuthTests(AdminTestCase):
         # user was signed out
         response = self.client.get(reverse('admin:index'))
         self.assertEqual(response.status_code, 200)
-        self.assertNotIn(self.user.username, response.content)
+        self.assertNotIn(self.user.username, response.content)

+ 1 - 1
misago/users/tests/test_djangoadmin_user.py

@@ -1,5 +1,5 @@
-from django.contrib.auth.models import Permission
 from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Permission
 from django.core.urlresolvers import reverse
 from django.utils import formats
 

+ 1 - 1
misago/users/tests/test_forgottenpassword_views.py

@@ -1,7 +1,7 @@
 from django.contrib.auth import get_user_model
 from django.core.urlresolvers import reverse
 
-from misago.users.models import Ban, BAN_USERNAME
+from misago.users.models import BAN_USERNAME, Ban
 from misago.users.testutils import UserTestCase
 from misago.users.tokens import make_password_change_token
 

+ 0 - 1
misago/users/tests/test_lists_views.py

@@ -2,7 +2,6 @@ from django.contrib.auth import get_user_model
 from django.core.urlresolvers import reverse
 
 from misago.acl.testutils import override_acl
-
 from misago.users.models import Rank
 from misago.users.testutils import AuthenticatedUserTestCase
 

+ 1 - 0
misago/users/tests/test_options_views.py

@@ -1,5 +1,6 @@
 from django.core import mail
 from django.core.urlresolvers import reverse
+
 from misago.users.testutils import AuthenticatedUserTestCase
 
 

+ 1 - 1
misago/users/tests/test_populateonlinetracker.py

@@ -21,4 +21,4 @@ class PopulateOnlineTrackerTests(TestCase):
         command_output = out.getvalue().splitlines()[0].strip()
 
         self.assertEqual(command_output, 'Tracker entries created: 1')
-        self.assertEqual(Online.objects.filter(user=test_user).count(), 1)
+        self.assertEqual(Online.objects.filter(user=test_user).count(), 1)

+ 0 - 1
misago/users/tests/test_profile_views.py

@@ -2,7 +2,6 @@ from django.contrib.auth import get_user_model
 from django.core.urlresolvers import reverse
 
 from misago.acl.testutils import override_acl
-
 from misago.users.models import Ban
 from misago.users.testutils import AuthenticatedUserTestCase
 

+ 2 - 2
misago/users/tests/test_rankadmin_views.py

@@ -1,7 +1,7 @@
 from django.core.urlresolvers import reverse
 
-from misago.admin.testutils import AdminTestCase
 from misago.acl.models import Role
+from misago.admin.testutils import AdminTestCase
 from misago.users.models import Rank
 
 
@@ -255,4 +255,4 @@ class RankAdminViewsTests(AdminTestCase):
                 'roles': [test_role_a.pk],
             })
         self.assertEqual(response.status_code, 200)
-        self.assertIn("This name collides with other rank.", response.content)
+        self.assertIn("This name collides with other rank.", response.content)

+ 1 - 0
misago/users/tests/test_realip_middleware.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.users.middleware import RealIPMiddleware
 
 

+ 1 - 1
misago/users/tests/test_rest_permissions.py

@@ -1,6 +1,6 @@
 from django.core.urlresolvers import reverse
 
-from misago.users.models import Ban, BAN_IP
+from misago.users.models import BAN_IP, Ban
 from misago.users.testutils import UserTestCase
 
 

+ 3 - 2
misago/users/tests/test_testutils.py

@@ -1,7 +1,8 @@
 import json
+
 from django.core.urlresolvers import reverse
-from misago.users.testutils import (
-    UserTestCase, AuthenticatedUserTestCase, SuperUserTestCase)
+
+from misago.users.testutils import AuthenticatedUserTestCase, SuperUserTestCase, UserTestCase
 
 
 class UserTestCaseTests(UserTestCase):

+ 2 - 2
misago/users/tests/test_user_avatar_api.py

@@ -1,4 +1,5 @@
 import json
+
 from path import Path
 
 from django.contrib.auth import get_user_model
@@ -6,7 +7,6 @@ from django.core.urlresolvers import reverse
 
 from misago.acl.testutils import override_acl
 from misago.conf import settings
-
 from misago.users.avatars import store
 from misago.users.testutils import AuthenticatedUserTestCase
 
@@ -328,4 +328,4 @@ class UserAvatarModerationTests(AuthenticatedUserTestCase):
 
         response = self.client.get(
             '/api/users/%s/moderate-avatar/' % self.user.pk)
-        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.status_code, 200)

+ 1 - 0
misago/users/tests/test_user_changeemail_api.py

@@ -1,5 +1,6 @@
 from django.contrib.auth import get_user_model
 from django.core import mail
+
 from misago.users.testutils import AuthenticatedUserTestCase
 
 

+ 1 - 0
misago/users/tests/test_user_changepassword_api.py

@@ -1,5 +1,6 @@
 from django.contrib.auth import get_user_model
 from django.core import mail
+
 from misago.users.testutils import AuthenticatedUserTestCase
 
 

+ 0 - 1
misago/users/tests/test_user_create_api.py

@@ -3,7 +3,6 @@ from django.core import mail
 from django.core.urlresolvers import reverse
 
 from misago.conf import settings
-
 from misago.users.models import Online
 from misago.users.testutils import UserTestCase
 

+ 0 - 1
misago/users/tests/test_user_signature_api.py

@@ -4,7 +4,6 @@ from django.contrib.auth import get_user_model
 
 from misago.acl.testutils import override_acl
 from misago.conf import settings
-
 from misago.users.testutils import AuthenticatedUserTestCase
 
 

+ 1 - 2
misago/users/tests/test_user_username_api.py

@@ -4,7 +4,6 @@ from django.contrib.auth import get_user_model
 
 from misago.acl.testutils import override_acl
 from misago.conf import settings
-
 from misago.users.testutils import AuthenticatedUserTestCase
 
 
@@ -214,4 +213,4 @@ class UserUsernameModerationTests(AuthenticatedUserTestCase):
 
         response = self.client.get(
             '/api/users/%s/moderate-username/' % self.user.pk)
-        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.status_code, 200)

+ 0 - 1
misago/users/tests/test_useradmin_views.py

@@ -8,7 +8,6 @@ from misago.acl.models import Role
 from misago.admin.testutils import AdminTestCase
 from misago.categories.models import Category
 from misago.threads.testutils import post_thread, reply_thread
-
 from misago.users.models import Ban, Rank
 
 

+ 0 - 1
misago/users/tests/test_usernamechanges_api.py

@@ -1,7 +1,6 @@
 from django.contrib.auth import get_user_model
 
 from misago.acl.testutils import override_acl
-
 from misago.users.testutils import AuthenticatedUserTestCase
 
 

+ 3 - 4
misago/users/tests/test_users_api.py

@@ -1,5 +1,5 @@
-from datetime import timedelta
 import json
+from datetime import timedelta
 
 from django.contrib.auth import get_user_model
 
@@ -8,11 +8,10 @@ from misago.categories.models import Category
 from misago.conf import settings
 from misago.core import threadstore
 from misago.core.cache import cache
-from misago.threads.models import Thread, Post
+from misago.threads.models import Post, Thread
 from misago.threads.testutils import post_thread
-
 from misago.users.activepostersranking import build_active_posters_ranking
-from misago.users.models import Ban, BAN_USERNAME, Rank
+from misago.users.models import BAN_USERNAME, Ban, Rank
 from misago.users.testutils import AuthenticatedUserTestCase
 
 

+ 1 - 0
misago/users/tests/test_utils.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+
 from misago.users.utils import hash_email
 
 

+ 13 - 12
misago/users/tests/test_validators.py

@@ -4,18 +4,19 @@ from django.core.exceptions import PermissionDenied, ValidationError
 from django.test import TestCase
 
 from misago.conf import settings
-
-from misago.users.models import Ban, BAN_USERNAME, BAN_EMAIL
-from misago.users.validators import (validate_email,
-                                     validate_email_available,
-                                     validate_email_banned,
-                                     validate_password,
-                                     validate_username,
-                                     validate_username_available,
-                                     validate_username_banned,
-                                     validate_username_content,
-                                     validate_username_length,
-                                     validate_gmail_email)
+from misago.users.models import BAN_EMAIL, BAN_USERNAME, Ban
+from misago.users.validators import (
+    validate_email,
+    validate_email_available,
+    validate_email_banned,
+    validate_gmail_email,
+    validate_password,
+    validate_username,
+    validate_username_available,
+    validate_username_banned,
+    validate_username_content,
+    validate_username_length
+)
 
 
 class ValidateEmailAvailableTests(TestCase):

+ 0 - 1
misago/users/tests/test_warningadmin_views.py

@@ -1,7 +1,6 @@
 from django.core.urlresolvers import reverse
 
 from misago.admin.testutils import AdminTestCase
-
 from misago.users.models import WarningLevel
 
 

+ 1 - 2
misago/users/tests/test_warnings.py

@@ -6,9 +6,8 @@ from django.utils import timezone
 
 from misago.core import threadstore
 from misago.core.cache import cache
-
 from misago.users import warnings
-from misago.users.models import WarningLevel, UserWarning
+from misago.users.models import UserWarning, WarningLevel
 
 
 class WarningsTests(TestCase):

+ 0 - 1
misago/users/testutils.py

@@ -2,7 +2,6 @@ from django.contrib.auth import get_user_model
 from django.core.urlresolvers import reverse
 
 from misago.core.testutils import MisagoTestCase
-
 from misago.users.models import AnonymousUser
 
 

+ 1 - 2
misago/users/urls/api.py

@@ -1,11 +1,10 @@
 from django.conf.urls import url
 
 from misago.core.apirouter import MisagoApiRouter
-
 from misago.users.api import auth, captcha
 from misago.users.api.ranks import RanksViewSet
-from misago.users.api.users import UserViewSet
 from misago.users.api.usernamechanges import UsernameChangesViewSet
+from misago.users.api.users import UserViewSet
 
 
 urlpatterns = [

+ 4 - 4
misago/users/validators.py

@@ -1,16 +1,16 @@
-from importlib import import_module
 import json
 import re
+from importlib import import_module
 
 import requests
 
+from django.contrib.auth import get_user_model
 from django.core.exceptions import PermissionDenied, ValidationError
 from django.core.validators import validate_email as validate_email_content
-from django.utils.translation import ungettext, ugettext_lazy as _
-from django.contrib.auth import get_user_model
+from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ungettext
 
 from misago.conf import settings
-
 from misago.users.bans import get_email_ban, get_username_ban
 
 

+ 1 - 2
misago/users/views/activation.py

@@ -4,9 +4,8 @@ from django.shortcuts import get_object_or_404, render
 from django.utils.translation import ugettext as _
 
 from misago.conf import settings
-from misago.core.mail import mail_user
 from misago.core.exceptions import Banned
-
+from misago.core.mail import mail_user
 from misago.users.bans import get_user_ban
 from misago.users.decorators import deny_authenticated, deny_banned_ips
 from misago.users.models import ACTIVATION_REQUIRED_NONE

+ 1 - 2
misago/users/views/admin/bans.py

@@ -2,9 +2,8 @@ from django.contrib import messages
 from django.utils.translation import ugettext_lazy as _
 
 from misago.admin.views import generic
-
+from misago.users.forms.admin import BanForm, SearchBansForm
 from misago.users.models import Ban
-from misago.users.forms.admin import SearchBansForm, BanForm
 
 
 class BanAdmin(generic.AdminBaseMixin):

+ 1 - 2
misago/users/views/admin/ranks.py

@@ -4,9 +4,8 @@ from django.shortcuts import redirect
 from django.utils.translation import ugettext_lazy as _
 
 from misago.admin.views import generic
-
-from misago.users.models import Rank
 from misago.users.forms.admin import RankForm
+from misago.users.models import Rank
 
 
 class RankAdmin(generic.AdminBaseMixin):

+ 3 - 6
misago/users/views/admin/users.py

@@ -12,13 +12,10 @@ from misago.conf import settings
 from misago.core.mail import mail_users
 from misago.core.pgutils import batch_update
 from misago.threads.models import Thread
-
 from misago.users.avatars.dynamic import set_avatar as set_dynamic_avatar
-from misago.users.forms.admin import (StaffFlagUserFormFactory, NewUserForm,
-                                      EditUserForm, SearchUsersForm,
-                                      BanUsersForm)
-from misago.users.models import ACTIVATION_REQUIRED_NONE, User, Ban
-from misago.users.models.ban import BAN_USERNAME, BAN_EMAIL, BAN_IP
+from misago.users.forms.admin import BanUsersForm, EditUserForm, NewUserForm, SearchUsersForm, StaffFlagUserFormFactory
+from misago.users.models import ACTIVATION_REQUIRED_NONE, Ban, User
+from misago.users.models.ban import BAN_EMAIL, BAN_IP, BAN_USERNAME
 from misago.users.signatures import set_user_signature
 
 

+ 1 - 2
misago/users/views/admin/warnings.py

@@ -2,9 +2,8 @@ from django.contrib import messages
 from django.utils.translation import ugettext_lazy as _
 
 from misago.admin.views import generic
-
-from misago.users.models import WarningLevel
 from misago.users.forms.admin import WarningLevelForm
+from misago.users.models import WarningLevel
 
 
 class WarningsAdmin(generic.AdminBaseMixin):

+ 0 - 1
misago/users/views/auth.py

@@ -3,7 +3,6 @@ from django.contrib import auth
 from django.shortcuts import redirect
 from django.utils.http import is_safe_url
 from django.utils.six.moves.urllib.parse import urlparse
-
 from django.views.decorators.cache import never_cache
 from django.views.decorators.csrf import csrf_protect
 from django.views.decorators.debug import sensitive_post_parameters

+ 0 - 1
misago/users/views/avatarserver.py

@@ -7,7 +7,6 @@ from django.contrib.auth import get_user_model
 from django.views.decorators.cache import cache_control, never_cache
 
 from misago.core.fileserver import make_file_response
-
 from misago.users.avatars import store
 
 

+ 0 - 1
misago/users/views/forgottenpassword.py

@@ -4,7 +4,6 @@ from django.shortcuts import get_object_or_404, render
 from django.utils.translation import ugettext as _
 
 from misago.core.exceptions import Banned
-
 from misago.users.bans import get_user_ban
 from misago.users.decorators import deny_banned_ips
 from misago.users.tokens import is_password_change_token_valid

+ 3 - 3
misago/users/views/lists.py

@@ -1,16 +1,16 @@
 from django.conf import settings
 from django.contrib.auth import get_user_model
 from django.core.urlresolvers import reverse
-from django.shortcuts import redirect, render as django_render
+from django.shortcuts import render as django_render
+from django.shortcuts import redirect
 
 from misago.core.shortcuts import get_object_or_404, paginate, pagination_dict
 from misago.core.utils import format_plaintext_for_html
-
 from misago.users.activepostersranking import get_active_posters_ranking
 from misago.users.models import Rank
 from misago.users.pages import users_list
 from misago.users.permissions.profiles import allow_browse_users_list
-from misago.users.serializers import UserSerializer, ScoredUserSerializer
+from misago.users.serializers import ScoredUserSerializer, UserSerializer
 
 
 def render(request, template, context):

+ 6 - 6
misago/users/views/profile.py

@@ -5,7 +5,8 @@ from django.core.exceptions import PermissionDenied
 from django.core.urlresolvers import reverse
 from django.db.transaction import atomic
 from django.http import Http404, JsonResponse
-from django.shortcuts import redirect, render as django_render
+from django.shortcuts import render as django_render
+from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
 
 from misago.acl import add_acl
@@ -13,15 +14,14 @@ from misago.core.decorators import require_POST
 from misago.core.shortcuts import get_object_or_404, paginate, pagination_dict, validate_slug
 from misago.core.utils import clean_return_path
 from misago.threads.permissions import allow_message_user
-
 from misago.users.bans import get_user_ban
 from misago.users.decorators import deny_guests
 from misago.users.online.utils import get_user_status
 from misago.users.pages import user_profile
-from misago.users.permissions.profiles import allow_follow_user, allow_block_user
-from misago.users.serializers import UserSerializer, UserProfileSerializer, BanDetailsSerializer
-from misago.users.serializers.usernamechange import  UsernameChangeSerializer
-from misago.users.warnings import get_warning_levels, get_user_warning_level, get_user_warning_obj
+from misago.users.permissions.profiles import allow_block_user, allow_follow_user
+from misago.users.serializers import BanDetailsSerializer, UserProfileSerializer, UserSerializer
+from misago.users.serializers.usernamechange import UsernameChangeSerializer
+from misago.users.warnings import get_user_warning_level, get_user_warning_obj, get_warning_levels
 
 
 def profile_view(f):