From 9bea804f147869376f2d410d9e9e0d8f9faa7770 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Sun, 10 Jun 2018 10:55:16 +0200
Subject: [PATCH] See #297: sorted imports

---
 api/funkwhale_api/activity/views.py           |  3 +-
 api/funkwhale_api/common/auth.py              |  2 --
 api/funkwhale_api/common/authentication.py    |  1 -
 api/funkwhale_api/common/consumers.py         |  1 +
 api/funkwhale_api/common/fields.py            |  2 --
 api/funkwhale_api/common/permissions.py       |  1 -
 api/funkwhale_api/common/preferences.py       |  6 ++--
 .../django_permissions_to_user_permissions.py |  4 +--
 api/funkwhale_api/common/session.py           |  1 -
 api/funkwhale_api/common/utils.py             |  2 +-
 api/funkwhale_api/downloader/downloader.py    |  1 +
 api/funkwhale_api/favorites/activities.py     |  2 +-
 api/funkwhale_api/favorites/factories.py      |  1 -
 api/funkwhale_api/favorites/urls.py           |  4 +--
 api/funkwhale_api/favorites/views.py          | 10 +++---
 api/funkwhale_api/federation/actors.py        | 12 ++-----
 .../federation/authentication.py              | 10 ++----
 api/funkwhale_api/federation/factories.py     | 10 +++---
 api/funkwhale_api/federation/keys.py          |  7 ++---
 api/funkwhale_api/federation/library.py       |  8 ++---
 api/funkwhale_api/federation/models.py        |  2 +-
 api/funkwhale_api/federation/permissions.py   |  1 +
 api/funkwhale_api/federation/serializers.py   |  8 ++---
 api/funkwhale_api/federation/signing.py       |  4 +--
 api/funkwhale_api/federation/tasks.py         |  7 ++---
 api/funkwhale_api/federation/urls.py          |  2 +-
 api/funkwhale_api/federation/views.py         | 31 +++++++++----------
 api/funkwhale_api/federation/webfinger.py     |  3 +-
 api/funkwhale_api/history/activities.py       |  2 +-
 api/funkwhale_api/history/models.py           |  2 +-
 api/funkwhale_api/history/urls.py             |  4 +--
 api/funkwhale_api/history/views.py            |  6 ++--
 .../instance/dynamic_preferences_registry.py  |  1 -
 api/funkwhale_api/instance/nodeinfo.py        |  1 -
 api/funkwhale_api/instance/views.py           |  6 ++--
 api/funkwhale_api/manage/urls.py              |  4 +--
 api/funkwhale_api/manage/views.py             |  7 ++---
 api/funkwhale_api/music/factories.py          |  5 +--
 api/funkwhale_api/music/filters.py            |  2 +-
 api/funkwhale_api/music/lyrics.py             |  1 +
 .../management/commands/fix_track_files.py    |  3 +-
 api/funkwhale_api/music/metadata.py           |  2 +-
 api/funkwhale_api/music/models.py             | 21 ++++++-------
 api/funkwhale_api/music/permissions.py        |  3 +-
 api/funkwhale_api/music/serializers.py        |  3 +-
 api/funkwhale_api/music/tasks.py              | 10 +++---
 api/funkwhale_api/music/utils.py              |  4 +--
 api/funkwhale_api/music/views.py              | 24 ++++++--------
 api/funkwhale_api/musicbrainz/client.py       |  4 +--
 api/funkwhale_api/musicbrainz/views.py        |  5 ++-
 api/funkwhale_api/playlists/models.py         |  7 ++---
 api/funkwhale_api/playlists/serializers.py    |  1 +
 api/funkwhale_api/playlists/views.py          | 15 +++------
 .../acoustid/dynamic_preferences_registry.py  |  3 +-
 .../management/commands/import_files.py       |  3 +-
 .../providers/audiofile/tasks.py              |  7 +++--
 api/funkwhale_api/providers/youtube/client.py |  1 -
 .../youtube/dynamic_preferences_registry.py   |  3 +-
 api/funkwhale_api/providers/youtube/urls.py   |  2 +-
 api/funkwhale_api/providers/youtube/views.py  |  3 +-
 api/funkwhale_api/radios/filters.py           |  3 +-
 api/funkwhale_api/radios/models.py            |  6 ++--
 api/funkwhale_api/radios/radios.py            | 11 ++++---
 api/funkwhale_api/radios/serializers.py       |  3 +-
 api/funkwhale_api/radios/urls.py              |  4 +--
 api/funkwhale_api/radios/views.py             | 12 ++-----
 api/funkwhale_api/requests/api_urls.py        |  4 +--
 api/funkwhale_api/requests/filters.py         |  1 +
 api/funkwhale_api/requests/models.py          |  1 -
 api/funkwhale_api/requests/views.py           |  4 +--
 api/funkwhale_api/subsonic/authentication.py  |  3 +-
 .../subsonic/dynamic_preferences_registry.py  |  1 -
 api/funkwhale_api/subsonic/negotiation.py     |  4 +--
 api/funkwhale_api/subsonic/serializers.py     |  3 +-
 api/funkwhale_api/subsonic/views.py           | 10 ++----
 api/funkwhale_api/taskapp/celery.py           |  4 +--
 api/funkwhale_api/users/adapters.py           |  3 +-
 api/funkwhale_api/users/api_urls.py           |  1 +
 api/funkwhale_api/users/factories.py          |  4 +--
 api/funkwhale_api/users/models.py             |  7 ++---
 api/funkwhale_api/users/rest_auth_urls.py     |  6 ++--
 api/funkwhale_api/users/serializers.py        |  4 +--
 api/funkwhale_api/users/views.py              | 13 +++-----
 api/setup.cfg                                 |  3 ++
 api/tests/activity/test_views.py              |  3 +-
 api/tests/channels/test_auth.py               |  1 -
 api/tests/common/test_fields.py               |  1 -
 api/tests/common/test_permissions.py          |  4 +--
 api/tests/common/test_preferences.py          |  2 +-
 api/tests/common/test_scripts.py              |  2 +-
 api/tests/common/test_session.py              |  1 -
 api/tests/conftest.py                         | 11 +++----
 api/tests/favorites/test_activity.py          |  5 ++-
 api/tests/favorites/test_favorites.py         |  1 +
 api/tests/federation/test_activity.py         |  3 +-
 api/tests/federation/test_actors.py           |  7 +----
 api/tests/federation/test_authentication.py   |  3 +-
 api/tests/federation/test_library.py          |  3 +-
 api/tests/federation/test_models.py           |  2 --
 api/tests/federation/test_permissions.py      |  3 +-
 api/tests/federation/test_serializers.py      |  6 +---
 api/tests/federation/test_signing.py          |  3 +-
 api/tests/federation/test_tasks.py            |  3 +-
 api/tests/federation/test_views.py            | 11 ++-----
 api/tests/federation/test_webfinger.py        |  1 -
 api/tests/history/test_activity.py            |  5 ++-
 api/tests/instance/test_nodeinfo.py           |  1 -
 api/tests/instance/test_preferences.py        |  2 --
 api/tests/instance/test_views.py              |  1 -
 api/tests/manage/test_views.py                |  4 +--
 api/tests/music/conftest.py                   |  1 -
 api/tests/music/test_api.py                   |  5 ++-
 api/tests/music/test_lyrics.py                |  3 +-
 api/tests/music/test_metadata.py              |  3 +-
 api/tests/music/test_models.py                |  5 ++-
 api/tests/music/test_music.py                 |  4 ++-
 api/tests/music/test_tasks.py                 |  1 +
 api/tests/music/test_utils.py                 |  1 +
 api/tests/music/test_views.py                 |  5 ++-
 api/tests/musicbrainz/test_api.py             |  1 -
 api/tests/playlists/test_models.py            |  1 -
 api/tests/playlists/test_serializers.py       |  3 +-
 api/tests/playlists/test_views.py             |  4 +--
 api/tests/radios/test_api.py                  |  3 +-
 api/tests/radios/test_filters.py              |  1 -
 api/tests/radios/test_radios.py               |  9 ++----
 api/tests/subsonic/test_authentication.py     |  2 +-
 api/tests/subsonic/test_views.py              |  7 ++---
 api/tests/test_import_audio_file.py           |  2 +-
 api/tests/test_youtube.py                     |  2 ++
 api/tests/users/test_jwt.py                   |  2 --
 api/tests/users/test_views.py                 |  1 -
 132 files changed, 218 insertions(+), 363 deletions(-)

diff --git a/api/funkwhale_api/activity/views.py b/api/funkwhale_api/activity/views.py
index f2f747d4..701dd04b 100644
--- a/api/funkwhale_api/activity/views.py
+++ b/api/funkwhale_api/activity/views.py
@@ -4,8 +4,7 @@ from rest_framework.response import Response
 from funkwhale_api.common.permissions import ConditionalAuthentication
 from funkwhale_api.favorites.models import TrackFavorite
 
-from . import serializers
-from . import utils
+from . import serializers, utils
 
 
 class ActivityViewSet(viewsets.GenericViewSet):
diff --git a/api/funkwhale_api/common/auth.py b/api/funkwhale_api/common/auth.py
index 83738a3e..7717c836 100644
--- a/api/funkwhale_api/common/auth.py
+++ b/api/funkwhale_api/common/auth.py
@@ -1,8 +1,6 @@
 from urllib.parse import parse_qs
 
-
 from django.contrib.auth.models import AnonymousUser
-
 from rest_framework import exceptions
 from rest_framework_jwt.authentication import BaseJSONWebTokenAuthentication
 
diff --git a/api/funkwhale_api/common/authentication.py b/api/funkwhale_api/common/authentication.py
index 9ddc06a3..10bf3661 100644
--- a/api/funkwhale_api/common/authentication.py
+++ b/api/funkwhale_api/common/authentication.py
@@ -1,6 +1,5 @@
 from django.utils.encoding import smart_text
 from django.utils.translation import ugettext as _
-
 from rest_framework import exceptions
 from rest_framework_jwt import authentication
 from rest_framework_jwt.settings import api_settings
diff --git a/api/funkwhale_api/common/consumers.py b/api/funkwhale_api/common/consumers.py
index 32a8876d..47a666f0 100644
--- a/api/funkwhale_api/common/consumers.py
+++ b/api/funkwhale_api/common/consumers.py
@@ -1,4 +1,5 @@
 from channels.generic.websocket import JsonWebsocketConsumer
+
 from funkwhale_api.common import channels
 
 
diff --git a/api/funkwhale_api/common/fields.py b/api/funkwhale_api/common/fields.py
index de3ee37e..190576ef 100644
--- a/api/funkwhale_api/common/fields.py
+++ b/api/funkwhale_api/common/fields.py
@@ -1,10 +1,8 @@
 import django_filters
-
 from django.db import models
 
 from funkwhale_api.music import utils
 
-
 PRIVACY_LEVEL_CHOICES = [
     ("me", "Only me"),
     ("followers", "Me and my followers"),
diff --git a/api/funkwhale_api/common/permissions.py b/api/funkwhale_api/common/permissions.py
index 06716454..8f391a70 100644
--- a/api/funkwhale_api/common/permissions.py
+++ b/api/funkwhale_api/common/permissions.py
@@ -1,7 +1,6 @@
 import operator
 
 from django.http import Http404
-
 from rest_framework.permissions import BasePermission
 
 from funkwhale_api.common import preferences
diff --git a/api/funkwhale_api/common/preferences.py b/api/funkwhale_api/common/preferences.py
index 9b8f12e8..acda9a90 100644
--- a/api/funkwhale_api/common/preferences.py
+++ b/api/funkwhale_api/common/preferences.py
@@ -1,8 +1,6 @@
-from django.conf import settings
 from django import forms
-
-from dynamic_preferences import serializers
-from dynamic_preferences import types
+from django.conf import settings
+from dynamic_preferences import serializers, types
 from dynamic_preferences.registries import global_preferences_registry
 
 
diff --git a/api/funkwhale_api/common/scripts/django_permissions_to_user_permissions.py b/api/funkwhale_api/common/scripts/django_permissions_to_user_permissions.py
index 1c207238..48144f8e 100644
--- a/api/funkwhale_api/common/scripts/django_permissions_to_user_permissions.py
+++ b/api/funkwhale_api/common/scripts/django_permissions_to_user_permissions.py
@@ -2,10 +2,10 @@
 Convert django permissions to user permissions in the database,
 following the work done in #152.
 """
+from django.contrib.auth.models import Permission
 from django.db.models import Q
-from funkwhale_api.users import models
 
-from django.contrib.auth.models import Permission
+from funkwhale_api.users import models
 
 mapping = {
     "dynamic_preferences.change_globalpreferencemodel": "settings",
diff --git a/api/funkwhale_api/common/session.py b/api/funkwhale_api/common/session.py
index 871fc4c2..4d5d0bb6 100644
--- a/api/funkwhale_api/common/session.py
+++ b/api/funkwhale_api/common/session.py
@@ -1,5 +1,4 @@
 import requests
-
 from django.conf import settings
 
 import funkwhale_api
diff --git a/api/funkwhale_api/common/utils.py b/api/funkwhale_api/common/utils.py
index f2ea52a8..221d2336 100644
--- a/api/funkwhale_api/common/utils.py
+++ b/api/funkwhale_api/common/utils.py
@@ -1,6 +1,6 @@
-from urllib.parse import urlencode, parse_qs, urlsplit, urlunsplit
 import os
 import shutil
+from urllib.parse import parse_qs, urlencode, urlsplit, urlunsplit
 
 from django.db import transaction
 
diff --git a/api/funkwhale_api/downloader/downloader.py b/api/funkwhale_api/downloader/downloader.py
index 41ae7299..f2b7568c 100644
--- a/api/funkwhale_api/downloader/downloader.py
+++ b/api/funkwhale_api/downloader/downloader.py
@@ -1,4 +1,5 @@
 import os
+
 import youtube_dl
 from django.conf import settings
 
diff --git a/api/funkwhale_api/favorites/activities.py b/api/funkwhale_api/favorites/activities.py
index d9d54633..294194e0 100644
--- a/api/funkwhale_api/favorites/activities.py
+++ b/api/funkwhale_api/favorites/activities.py
@@ -1,5 +1,5 @@
-from funkwhale_api.common import channels
 from funkwhale_api.activity import record
+from funkwhale_api.common import channels
 
 from . import serializers
 
diff --git a/api/funkwhale_api/favorites/factories.py b/api/funkwhale_api/favorites/factories.py
index 797c135e..d96ef1c1 100644
--- a/api/funkwhale_api/favorites/factories.py
+++ b/api/funkwhale_api/favorites/factories.py
@@ -1,7 +1,6 @@
 import factory
 
 from funkwhale_api.factories import registry
-
 from funkwhale_api.music.factories import TrackFactory
 from funkwhale_api.users.factories import UserFactory
 
diff --git a/api/funkwhale_api/favorites/urls.py b/api/funkwhale_api/favorites/urls.py
index 69bc01f6..28d0c867 100644
--- a/api/funkwhale_api/favorites/urls.py
+++ b/api/funkwhale_api/favorites/urls.py
@@ -1,7 +1,7 @@
-from . import views
-
 from rest_framework import routers
 
+from . import views
+
 router = routers.SimpleRouter()
 router.register(r"tracks", views.TrackFavoriteViewSet, "tracks")
 
diff --git a/api/funkwhale_api/favorites/views.py b/api/funkwhale_api/favorites/views.py
index 6210ea2c..4d1c1e75 100644
--- a/api/funkwhale_api/favorites/views.py
+++ b/api/funkwhale_api/favorites/views.py
@@ -1,14 +1,12 @@
-from rest_framework import mixins, viewsets
-from rest_framework import status
-from rest_framework.response import Response
+from rest_framework import mixins, status, viewsets
 from rest_framework.decorators import list_route
+from rest_framework.response import Response
 
 from funkwhale_api.activity import record
-from funkwhale_api.music.models import Track
 from funkwhale_api.common.permissions import ConditionalAuthentication
+from funkwhale_api.music.models import Track
 
-from . import models
-from . import serializers
+from . import models, serializers
 
 
 class TrackFavoriteViewSet(
diff --git a/api/funkwhale_api/federation/actors.py b/api/funkwhale_api/federation/actors.py
index d42ea575..f0b6b098 100644
--- a/api/funkwhale_api/federation/actors.py
+++ b/api/funkwhale_api/federation/actors.py
@@ -6,22 +6,14 @@ from django.conf import settings
 from django.db import transaction
 from django.urls import reverse
 from django.utils import timezone
-
 from rest_framework.exceptions import PermissionDenied
 
-
-from funkwhale_api.common import preferences
-from funkwhale_api.common import session
+from funkwhale_api.common import preferences, session
 from funkwhale_api.common import utils as funkwhale_utils
 from funkwhale_api.music import models as music_models
 from funkwhale_api.music import tasks as music_tasks
 
-from . import activity
-from . import keys
-from . import models
-from . import serializers
-from . import signing
-from . import utils
+from . import activity, keys, models, serializers, signing, utils
 
 logger = logging.getLogger(__name__)
 
diff --git a/api/funkwhale_api/federation/authentication.py b/api/funkwhale_api/federation/authentication.py
index a12d5103..f32c78ff 100644
--- a/api/funkwhale_api/federation/authentication.py
+++ b/api/funkwhale_api/federation/authentication.py
@@ -1,14 +1,8 @@
 import cryptography
-
 from django.contrib.auth.models import AnonymousUser
+from rest_framework import authentication, exceptions
 
-from rest_framework import authentication
-from rest_framework import exceptions
-
-from . import actors
-from . import keys
-from . import signing
-from . import utils
+from . import actors, keys, signing, utils
 
 
 class SignatureAuthentication(authentication.BaseAuthentication):
diff --git a/api/funkwhale_api/federation/factories.py b/api/funkwhale_api/federation/factories.py
index 52a5e8b5..7370ebd7 100644
--- a/api/funkwhale_api/federation/factories.py
+++ b/api/funkwhale_api/federation/factories.py
@@ -1,16 +1,14 @@
+import uuid
+
 import factory
 import requests
 import requests_http_signature
-import uuid
-
-from django.utils import timezone
 from django.conf import settings
+from django.utils import timezone
 
 from funkwhale_api.factories import registry
 
-from . import keys
-from . import models
-
+from . import keys, models
 
 registry.register(keys.get_key_pair, name="federation.KeyPair")
 
diff --git a/api/funkwhale_api/federation/keys.py b/api/funkwhale_api/federation/keys.py
index bc9416fb..e7c30c50 100644
--- a/api/funkwhale_api/federation/keys.py
+++ b/api/funkwhale_api/federation/keys.py
@@ -1,10 +1,9 @@
-from cryptography.hazmat.primitives import serialization as crypto_serialization
-from cryptography.hazmat.primitives.asymmetric import rsa
-from cryptography.hazmat.backends import default_backend as crypto_default_backend
-
 import re
 import urllib.parse
 
+from cryptography.hazmat.backends import default_backend as crypto_default_backend
+from cryptography.hazmat.primitives import serialization as crypto_serialization
+from cryptography.hazmat.primitives.asymmetric import rsa
 
 KEY_ID_REGEX = re.compile(r"keyId=\"(?P<id>.*)\"")
 
diff --git a/api/funkwhale_api/federation/library.py b/api/funkwhale_api/federation/library.py
index 28bb9a76..e1587f2a 100644
--- a/api/funkwhale_api/federation/library.py
+++ b/api/funkwhale_api/federation/library.py
@@ -1,15 +1,11 @@
 import json
-import requests
 
+import requests
 from django.conf import settings
 
 from funkwhale_api.common import session
 
-from . import actors
-from . import models
-from . import serializers
-from . import signing
-from . import webfinger
+from . import actors, models, serializers, signing, webfinger
 
 
 def scan_from_account_name(account_name):
diff --git a/api/funkwhale_api/federation/models.py b/api/funkwhale_api/federation/models.py
index 398ab23c..979b0674 100644
--- a/api/funkwhale_api/federation/models.py
+++ b/api/funkwhale_api/federation/models.py
@@ -1,6 +1,6 @@
 import os
-import uuid
 import tempfile
+import uuid
 
 from django.conf import settings
 from django.contrib.postgres.fields import JSONField
diff --git a/api/funkwhale_api/federation/permissions.py b/api/funkwhale_api/federation/permissions.py
index c1a39a69..a08d57e5 100644
--- a/api/funkwhale_api/federation/permissions.py
+++ b/api/funkwhale_api/federation/permissions.py
@@ -2,6 +2,7 @@
 from rest_framework.permissions import BasePermission
 
 from funkwhale_api.common import preferences
+
 from . import actors
 
 
diff --git a/api/funkwhale_api/federation/serializers.py b/api/funkwhale_api/federation/serializers.py
index 91ad2eb9..a7063246 100644
--- a/api/funkwhale_api/federation/serializers.py
+++ b/api/funkwhale_api/federation/serializers.py
@@ -3,18 +3,14 @@ import urllib.parse
 
 from django.core.paginator import Paginator
 from django.db import transaction
-
 from rest_framework import serializers
 
-from funkwhale_api.common import utils as funkwhale_utils
 from funkwhale_api.common import serializers as common_serializers
+from funkwhale_api.common import utils as funkwhale_utils
 from funkwhale_api.music import models as music_models
 from funkwhale_api.music import tasks as music_tasks
-from . import activity
-from . import filters
-from . import models
-from . import utils
 
+from . import activity, filters, models, utils
 
 AP_CONTEXT = [
     "https://www.w3.org/ns/activitystreams",
diff --git a/api/funkwhale_api/federation/signing.py b/api/funkwhale_api/federation/signing.py
index bb02f042..15525b3e 100644
--- a/api/funkwhale_api/federation/signing.py
+++ b/api/funkwhale_api/federation/signing.py
@@ -1,9 +1,9 @@
 import logging
+
 import requests
 import requests_http_signature
 
-from . import exceptions
-from . import utils
+from . import exceptions, utils
 
 logger = logging.getLogger(__name__)
 
diff --git a/api/funkwhale_api/federation/tasks.py b/api/funkwhale_api/federation/tasks.py
index 596755e3..d1b5b7bd 100644
--- a/api/funkwhale_api/federation/tasks.py
+++ b/api/funkwhale_api/federation/tasks.py
@@ -6,18 +6,15 @@ import os
 from django.conf import settings
 from django.db.models import Q
 from django.utils import timezone
-
-from requests.exceptions import RequestException
 from dynamic_preferences.registries import global_preferences_registry
+from requests.exceptions import RequestException
 
 from funkwhale_api.common import session
 from funkwhale_api.taskapp import celery
 
 from . import actors
 from . import library as lb
-from . import models
-from . import signing
-
+from . import models, signing
 
 logger = logging.getLogger(__name__)
 
diff --git a/api/funkwhale_api/federation/urls.py b/api/funkwhale_api/federation/urls.py
index 3cd4cb73..2594f554 100644
--- a/api/funkwhale_api/federation/urls.py
+++ b/api/funkwhale_api/federation/urls.py
@@ -1,6 +1,6 @@
 from django.conf.urls import include, url
-
 from rest_framework import routers
+
 from . import views
 
 router = routers.SimpleRouter(trailing_slash=False)
diff --git a/api/funkwhale_api/federation/views.py b/api/funkwhale_api/federation/views.py
index 84cd27db..67b27468 100644
--- a/api/funkwhale_api/federation/views.py
+++ b/api/funkwhale_api/federation/views.py
@@ -3,27 +3,26 @@ from django.core import paginator
 from django.db import transaction
 from django.http import HttpResponse
 from django.urls import reverse
-
-from rest_framework import mixins
-from rest_framework import response
-from rest_framework import viewsets
-from rest_framework.decorators import list_route, detail_route
+from rest_framework import mixins, response, viewsets
+from rest_framework.decorators import detail_route, list_route
 
 from funkwhale_api.common import preferences
 from funkwhale_api.music import models as music_models
 from funkwhale_api.users.permissions import HasUserPermission
 
-from . import actors
-from . import authentication
-from . import filters
-from . import library
-from . import models
-from . import permissions
-from . import renderers
-from . import serializers
-from . import tasks
-from . import utils
-from . import webfinger
+from . import (
+    actors,
+    authentication,
+    filters,
+    library,
+    models,
+    permissions,
+    renderers,
+    serializers,
+    tasks,
+    utils,
+    webfinger
+)
 
 
 class FederationMixin(object):
diff --git a/api/funkwhale_api/federation/webfinger.py b/api/funkwhale_api/federation/webfinger.py
index fd06d8d5..b899fe20 100644
--- a/api/funkwhale_api/federation/webfinger.py
+++ b/api/funkwhale_api/federation/webfinger.py
@@ -3,8 +3,7 @@ from django.conf import settings
 
 from funkwhale_api.common import session
 
-from . import actors
-from . import serializers
+from . import actors, serializers
 
 VALID_RESOURCE_TYPES = ["acct"]
 
diff --git a/api/funkwhale_api/history/activities.py b/api/funkwhale_api/history/activities.py
index 3e8556ce..b63de1f2 100644
--- a/api/funkwhale_api/history/activities.py
+++ b/api/funkwhale_api/history/activities.py
@@ -1,5 +1,5 @@
-from funkwhale_api.common import channels
 from funkwhale_api.activity import record
+from funkwhale_api.common import channels
 
 from . import serializers
 
diff --git a/api/funkwhale_api/history/models.py b/api/funkwhale_api/history/models.py
index 5a72ee44..8da4e67c 100644
--- a/api/funkwhale_api/history/models.py
+++ b/api/funkwhale_api/history/models.py
@@ -1,5 +1,5 @@
-from django.utils import timezone
 from django.db import models
+from django.utils import timezone
 
 from funkwhale_api.music.models import Track
 
diff --git a/api/funkwhale_api/history/urls.py b/api/funkwhale_api/history/urls.py
index 2c620975..707e95cd 100644
--- a/api/funkwhale_api/history/urls.py
+++ b/api/funkwhale_api/history/urls.py
@@ -1,7 +1,7 @@
-from . import views
-
 from rest_framework import routers
 
+from . import views
+
 router = routers.SimpleRouter()
 router.register(r"listenings", views.ListeningViewSet, "listenings")
 
diff --git a/api/funkwhale_api/history/views.py b/api/funkwhale_api/history/views.py
index db45cec6..e104a2aa 100644
--- a/api/funkwhale_api/history/views.py
+++ b/api/funkwhale_api/history/views.py
@@ -1,10 +1,8 @@
-from rest_framework import mixins, viewsets
-from rest_framework import permissions
+from rest_framework import mixins, permissions, viewsets
 
 from funkwhale_api.activity import record
 
-from . import models
-from . import serializers
+from . import models, serializers
 
 
 class ListeningViewSet(
diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py
index 618bd8ea..0edb9448 100644
--- a/api/funkwhale_api/instance/dynamic_preferences_registry.py
+++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py
@@ -1,5 +1,4 @@
 from django.forms import widgets
-
 from dynamic_preferences import types
 from dynamic_preferences.registries import global_preferences_registry
 
diff --git a/api/funkwhale_api/instance/nodeinfo.py b/api/funkwhale_api/instance/nodeinfo.py
index 9077a34b..0b8f4b3c 100644
--- a/api/funkwhale_api/instance/nodeinfo.py
+++ b/api/funkwhale_api/instance/nodeinfo.py
@@ -5,7 +5,6 @@ from funkwhale_api.common import preferences
 
 from . import stats
 
-
 store = memoize.djangocache.Cache("default")
 memo = memoize.Memoizer(store, namespace="instance:stats")
 
diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py
index 35432d48..ea631103 100644
--- a/api/funkwhale_api/instance/views.py
+++ b/api/funkwhale_api/instance/views.py
@@ -1,16 +1,14 @@
-from rest_framework import views
-from rest_framework.response import Response
-
 from dynamic_preferences.api import serializers
 from dynamic_preferences.api import viewsets as preferences_viewsets
 from dynamic_preferences.registries import global_preferences_registry
+from rest_framework import views
+from rest_framework.response import Response
 
 from funkwhale_api.common import preferences
 from funkwhale_api.users.permissions import HasUserPermission
 
 from . import nodeinfo
 
-
 NODEINFO_2_CONTENT_TYPE = "application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.0#; charset=utf-8"  # noqa
 
 
diff --git a/api/funkwhale_api/manage/urls.py b/api/funkwhale_api/manage/urls.py
index 38ed7d1c..60853034 100644
--- a/api/funkwhale_api/manage/urls.py
+++ b/api/funkwhale_api/manage/urls.py
@@ -1,8 +1,8 @@
 from django.conf.urls import include, url
-from . import views
-
 from rest_framework import routers
 
+from . import views
+
 library_router = routers.SimpleRouter()
 library_router.register(r"track-files", views.ManageTrackFileViewSet, "track-files")
 
diff --git a/api/funkwhale_api/manage/views.py b/api/funkwhale_api/manage/views.py
index 77581acf..8511732c 100644
--- a/api/funkwhale_api/manage/views.py
+++ b/api/funkwhale_api/manage/views.py
@@ -1,13 +1,10 @@
-from rest_framework import mixins
-from rest_framework import response
-from rest_framework import viewsets
+from rest_framework import mixins, response, viewsets
 from rest_framework.decorators import list_route
 
 from funkwhale_api.music import models as music_models
 from funkwhale_api.users.permissions import HasUserPermission
 
-from . import filters
-from . import serializers
+from . import filters, serializers
 
 
 class ManageTrackFileViewSet(
diff --git a/api/funkwhale_api/music/factories.py b/api/funkwhale_api/music/factories.py
index 6e2e6a11..2dd4ba30 100644
--- a/api/funkwhale_api/music/factories.py
+++ b/api/funkwhale_api/music/factories.py
@@ -1,7 +1,8 @@
-import factory
 import os
 
-from funkwhale_api.factories import registry, ManyToManyFromList
+import factory
+
+from funkwhale_api.factories import ManyToManyFromList, registry
 from funkwhale_api.federation.factories import LibraryTrackFactory
 from funkwhale_api.users.factories import UserFactory
 
diff --git a/api/funkwhale_api/music/filters.py b/api/funkwhale_api/music/filters.py
index 6e1e4df0..1f73fc9b 100644
--- a/api/funkwhale_api/music/filters.py
+++ b/api/funkwhale_api/music/filters.py
@@ -1,8 +1,8 @@
 from django.db.models import Count
-
 from django_filters import rest_framework as filters
 
 from funkwhale_api.common import fields
+
 from . import models
 
 
diff --git a/api/funkwhale_api/music/lyrics.py b/api/funkwhale_api/music/lyrics.py
index 2cf1cff7..6d5f20e4 100644
--- a/api/funkwhale_api/music/lyrics.py
+++ b/api/funkwhale_api/music/lyrics.py
@@ -1,4 +1,5 @@
 import urllib.request
+
 from bs4 import BeautifulSoup
 
 
diff --git a/api/funkwhale_api/music/management/commands/fix_track_files.py b/api/funkwhale_api/music/management/commands/fix_track_files.py
index c494b05a..c462f683 100644
--- a/api/funkwhale_api/music/management/commands/fix_track_files.py
+++ b/api/funkwhale_api/music/management/commands/fix_track_files.py
@@ -1,8 +1,7 @@
 import cacheops
-
+from django.core.management.base import BaseCommand
 from django.db import transaction
 from django.db.models import Q
-from django.core.management.base import BaseCommand
 
 from funkwhale_api.music import models, utils
 
diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py
index 3a43521c..d2534f6b 100644
--- a/api/funkwhale_api/music/metadata.py
+++ b/api/funkwhale_api/music/metadata.py
@@ -1,6 +1,6 @@
-from django import forms
 import arrow
 import mutagen
+from django import forms
 
 NODEFAULT = object()
 
diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py
index 95056738..c4c3d0fc 100644
--- a/api/funkwhale_api/music/models.py
+++ b/api/funkwhale_api/music/models.py
@@ -1,29 +1,26 @@
-import os
-import arrow
 import datetime
-import tempfile
+import os
 import shutil
-import markdown
+import tempfile
 import uuid
 
+import arrow
+import markdown
 from django.conf import settings
-from django.db import models
-from django.core.files.base import ContentFile
 from django.core.files import File
+from django.core.files.base import ContentFile
+from django.db import models
 from django.db.models.signals import post_save
 from django.dispatch import receiver
 from django.urls import reverse
 from django.utils import timezone
-
 from taggit.managers import TaggableManager
 from versatileimagefield.fields import VersatileImageField
 
-from funkwhale_api import downloader
-from funkwhale_api import musicbrainz
+from funkwhale_api import downloader, musicbrainz
 from funkwhale_api.federation import utils as federation_utils
-from . import importers
-from . import metadata
-from . import utils
+
+from . import importers, metadata, utils
 
 
 class APIModelMixin(models.Model):
diff --git a/api/funkwhale_api/music/permissions.py b/api/funkwhale_api/music/permissions.py
index ab35337e..dc589b5d 100644
--- a/api/funkwhale_api/music/permissions.py
+++ b/api/funkwhale_api/music/permissions.py
@@ -2,8 +2,7 @@
 from rest_framework.permissions import BasePermission
 
 from funkwhale_api.common import preferences
-from funkwhale_api.federation import actors
-from funkwhale_api.federation import models
+from funkwhale_api.federation import actors, models
 
 
 class Listen(BasePermission):
diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py
index d39891ac..c34970d0 100644
--- a/api/funkwhale_api/music/serializers.py
+++ b/api/funkwhale_api/music/serializers.py
@@ -5,8 +5,7 @@ from taggit.models import Tag
 from funkwhale_api.activity import serializers as activity_serializers
 from funkwhale_api.users.serializers import UserBasicSerializer
 
-from . import models
-from . import tasks
+from . import models, tasks
 
 
 class ArtistAlbumSerializer(serializers.ModelSerializer):
diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py
index dd321e4d..788ef5da 100644
--- a/api/funkwhale_api/music/tasks.py
+++ b/api/funkwhale_api/music/tasks.py
@@ -1,21 +1,19 @@
 import logging
 import os
 
+from django.conf import settings
 from django.core.files.base import ContentFile
-
 from musicbrainzngs import ResponseError
 
 from funkwhale_api.common import preferences
-from funkwhale_api.federation import activity
-from funkwhale_api.federation import actors
+from funkwhale_api.federation import activity, actors
 from funkwhale_api.federation import serializers as federation_serializers
-from funkwhale_api.taskapp import celery
 from funkwhale_api.providers.acoustid import get_acoustid_client
 from funkwhale_api.providers.audiofile import tasks as audiofile_tasks
+from funkwhale_api.taskapp import celery
 
-from django.conf import settings
-from . import models
 from . import lyrics as lyrics_utils
+from . import models
 from . import utils as music_utils
 
 logger = logging.getLogger(__name__)
diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py
index 9b300ac2..3080c1c6 100644
--- a/api/funkwhale_api/music/utils.py
+++ b/api/funkwhale_api/music/utils.py
@@ -1,8 +1,8 @@
-import magic
 import mimetypes
-import mutagen
 import re
 
+import magic
+import mutagen
 from django.db.models import Q
 
 
diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py
index 1bb169f5..92512a0e 100644
--- a/api/funkwhale_api/music/views.py
+++ b/api/funkwhale_api/music/views.py
@@ -2,35 +2,31 @@ import json
 import logging
 import urllib
 
-from django.core.exceptions import ObjectDoesNotExist
 from django.conf import settings
+from django.core.exceptions import ObjectDoesNotExist
 from django.db import models, transaction
-from django.db.models.functions import Length
 from django.db.models import Count
+from django.db.models.functions import Length
 from django.utils import timezone
-
-from rest_framework import viewsets, views, mixins
+from musicbrainzngs import ResponseError
+from rest_framework import mixins
+from rest_framework import settings as rest_settings
+from rest_framework import views, viewsets
 from rest_framework.decorators import detail_route, list_route
 from rest_framework.response import Response
-from rest_framework import settings as rest_settings
-from musicbrainzngs import ResponseError
+from taggit.models import Tag
 
 from funkwhale_api.common import utils as funkwhale_utils
 from funkwhale_api.common.permissions import ConditionalAuthentication
-from funkwhale_api.users.permissions import HasUserPermission
-from taggit.models import Tag
 from funkwhale_api.federation.authentication import SignatureAuthentication
 from funkwhale_api.federation.models import LibraryTrack
 from funkwhale_api.musicbrainz import api
 from funkwhale_api.requests.models import ImportRequest
+from funkwhale_api.users.permissions import HasUserPermission
 
-from . import filters
-from . import importers
-from . import models
+from . import filters, importers, models
 from . import permissions as music_permissions
-from . import serializers
-from . import tasks
-from . import utils
+from . import serializers, tasks, utils
 
 logger = logging.getLogger(__name__)
 
diff --git a/api/funkwhale_api/musicbrainz/client.py b/api/funkwhale_api/musicbrainz/client.py
index b3749a93..deae0672 100644
--- a/api/funkwhale_api/musicbrainz/client.py
+++ b/api/funkwhale_api/musicbrainz/client.py
@@ -1,7 +1,7 @@
-import musicbrainzngs
 import memoize.djangocache
-
+import musicbrainzngs
 from django.conf import settings
+
 from funkwhale_api import __version__
 
 _api = musicbrainzngs
diff --git a/api/funkwhale_api/musicbrainz/views.py b/api/funkwhale_api/musicbrainz/views.py
index 07271def..b6f009dc 100644
--- a/api/funkwhale_api/musicbrainz/views.py
+++ b/api/funkwhale_api/musicbrainz/views.py
@@ -1,11 +1,10 @@
 from rest_framework import viewsets
-from rest_framework.views import APIView
-from rest_framework.response import Response
 from rest_framework.decorators import list_route
+from rest_framework.response import Response
+from rest_framework.views import APIView
 
 from funkwhale_api.common.permissions import ConditionalAuthentication
 
-
 from .client import api
 
 
diff --git a/api/funkwhale_api/playlists/models.py b/api/funkwhale_api/playlists/models.py
index 65ba7632..e9df4624 100644
--- a/api/funkwhale_api/playlists/models.py
+++ b/api/funkwhale_api/playlists/models.py
@@ -1,11 +1,8 @@
-from django.db import models
-from django.db import transaction
+from django.db import models, transaction
 from django.utils import timezone
-
 from rest_framework import exceptions
 
-from funkwhale_api.common import fields
-from funkwhale_api.common import preferences
+from funkwhale_api.common import fields, preferences
 
 
 class PlaylistQuerySet(models.QuerySet):
diff --git a/api/funkwhale_api/playlists/serializers.py b/api/funkwhale_api/playlists/serializers.py
index 94247611..17cc06b1 100644
--- a/api/funkwhale_api/playlists/serializers.py
+++ b/api/funkwhale_api/playlists/serializers.py
@@ -5,6 +5,7 @@ from funkwhale_api.common import preferences
 from funkwhale_api.music.models import Track
 from funkwhale_api.music.serializers import TrackSerializer
 from funkwhale_api.users.serializers import UserBasicSerializer
+
 from . import models
 
 
diff --git a/api/funkwhale_api/playlists/views.py b/api/funkwhale_api/playlists/views.py
index 2b4075ec..d5d19df7 100644
--- a/api/funkwhale_api/playlists/views.py
+++ b/api/funkwhale_api/playlists/views.py
@@ -1,18 +1,13 @@
-from django.db.models import Count
 from django.db import transaction
-
-from rest_framework import exceptions
-from rest_framework import mixins, viewsets
+from django.db.models import Count
+from rest_framework import exceptions, mixins, viewsets
 from rest_framework.decorators import detail_route
-from rest_framework.response import Response
 from rest_framework.permissions import IsAuthenticatedOrReadOnly
+from rest_framework.response import Response
 
-from funkwhale_api.common import permissions
-from funkwhale_api.common import fields
+from funkwhale_api.common import fields, permissions
 
-from . import filters
-from . import models
-from . import serializers
+from . import filters, models, serializers
 
 
 class PlaylistViewSet(
diff --git a/api/funkwhale_api/providers/acoustid/dynamic_preferences_registry.py b/api/funkwhale_api/providers/acoustid/dynamic_preferences_registry.py
index 2e5a35f0..2411de86 100644
--- a/api/funkwhale_api/providers/acoustid/dynamic_preferences_registry.py
+++ b/api/funkwhale_api/providers/acoustid/dynamic_preferences_registry.py
@@ -1,7 +1,6 @@
 from django import forms
-
-from dynamic_preferences.types import StringPreference, Section
 from dynamic_preferences.registries import global_preferences_registry
+from dynamic_preferences.types import Section, StringPreference
 
 acoustid = Section("providers_acoustid")
 
diff --git a/api/funkwhale_api/providers/audiofile/management/commands/import_files.py b/api/funkwhale_api/providers/audiofile/management/commands/import_files.py
index 45b42879..de2560d3 100644
--- a/api/funkwhale_api/providers/audiofile/management/commands/import_files.py
+++ b/api/funkwhale_api/providers/audiofile/management/commands/import_files.py
@@ -5,8 +5,7 @@ from django.conf import settings
 from django.core.files import File
 from django.core.management.base import BaseCommand, CommandError
 
-from funkwhale_api.music import models
-from funkwhale_api.music import tasks
+from funkwhale_api.music import models, tasks
 from funkwhale_api.users.models import User
 
 
diff --git a/api/funkwhale_api/providers/audiofile/tasks.py b/api/funkwhale_api/providers/audiofile/tasks.py
index a4426a00..624e068c 100644
--- a/api/funkwhale_api/providers/audiofile/tasks.py
+++ b/api/funkwhale_api/providers/audiofile/tasks.py
@@ -1,11 +1,12 @@
-import acoustid
 import os
+
+import acoustid
 from django.core.files import File
 from django.db import transaction
 
-from funkwhale_api.taskapp import celery
+from funkwhale_api.music import metadata, models
 from funkwhale_api.providers.acoustid import get_acoustid_client
-from funkwhale_api.music import models, metadata
+from funkwhale_api.taskapp import celery
 
 
 @transaction.atomic
diff --git a/api/funkwhale_api/providers/youtube/client.py b/api/funkwhale_api/providers/youtube/client.py
index 94df3516..2235fcdc 100644
--- a/api/funkwhale_api/providers/youtube/client.py
+++ b/api/funkwhale_api/providers/youtube/client.py
@@ -1,7 +1,6 @@
 import threading
 
 from apiclient.discovery import build
-
 from dynamic_preferences.registries import global_preferences_registry as registry
 
 YOUTUBE_API_SERVICE_NAME = "youtube"
diff --git a/api/funkwhale_api/providers/youtube/dynamic_preferences_registry.py b/api/funkwhale_api/providers/youtube/dynamic_preferences_registry.py
index 42b54b53..2d950eb6 100644
--- a/api/funkwhale_api/providers/youtube/dynamic_preferences_registry.py
+++ b/api/funkwhale_api/providers/youtube/dynamic_preferences_registry.py
@@ -1,7 +1,6 @@
 from django import forms
-
-from dynamic_preferences.types import StringPreference, Section
 from dynamic_preferences.registries import global_preferences_registry
+from dynamic_preferences.types import Section, StringPreference
 
 youtube = Section("providers_youtube")
 
diff --git a/api/funkwhale_api/providers/youtube/urls.py b/api/funkwhale_api/providers/youtube/urls.py
index 710eabca..d9687ac9 100644
--- a/api/funkwhale_api/providers/youtube/urls.py
+++ b/api/funkwhale_api/providers/youtube/urls.py
@@ -1,6 +1,6 @@
 from django.conf.urls import url
-from .views import APISearch, APISearchs
 
+from .views import APISearch, APISearchs
 
 urlpatterns = [
     url(r"^search/$", APISearch.as_view(), name="search"),
diff --git a/api/funkwhale_api/providers/youtube/views.py b/api/funkwhale_api/providers/youtube/views.py
index 012b1825..5e1982f4 100644
--- a/api/funkwhale_api/providers/youtube/views.py
+++ b/api/funkwhale_api/providers/youtube/views.py
@@ -1,5 +1,6 @@
-from rest_framework.views import APIView
 from rest_framework.response import Response
+from rest_framework.views import APIView
+
 from funkwhale_api.common.permissions import ConditionalAuthentication
 
 from .client import client
diff --git a/api/funkwhale_api/radios/filters.py b/api/funkwhale_api/radios/filters.py
index 72e18caf..158bf578 100644
--- a/api/funkwhale_api/radios/filters.py
+++ b/api/funkwhale_api/radios/filters.py
@@ -1,11 +1,10 @@
 import collections
 
+import persisting_theory
 from django.core.exceptions import ValidationError
 from django.db.models import Q
 from django.urls import reverse_lazy
 
-import persisting_theory
-
 from funkwhale_api.music import models
 
 
diff --git a/api/funkwhale_api/radios/models.py b/api/funkwhale_api/radios/models.py
index 69f13f9f..d0c3d171 100644
--- a/api/funkwhale_api/radios/models.py
+++ b/api/funkwhale_api/radios/models.py
@@ -1,9 +1,9 @@
-from django.db import models
-from django.utils import timezone
-from django.contrib.postgres.fields import JSONField
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.contrib.contenttypes.models import ContentType
+from django.contrib.postgres.fields import JSONField
 from django.core.serializers.json import DjangoJSONEncoder
+from django.db import models
+from django.utils import timezone
 
 from funkwhale_api.music.models import Track
 
diff --git a/api/funkwhale_api/radios/radios.py b/api/funkwhale_api/radios/radios.py
index 7e3c1ab5..c7c361de 100644
--- a/api/funkwhale_api/radios/radios.py
+++ b/api/funkwhale_api/radios/radios.py
@@ -1,13 +1,14 @@
 import random
-from rest_framework import serializers
-from django.db.models import Count
+
 from django.core.exceptions import ValidationError
+from django.db.models import Count
+from rest_framework import serializers
 from taggit.models import Tag
+
+from funkwhale_api.music.models import Artist, Track
 from funkwhale_api.users.models import User
-from funkwhale_api.music.models import Track, Artist
 
-from . import filters
-from . import models
+from . import filters, models
 from .registries import registry
 
 
diff --git a/api/funkwhale_api/radios/serializers.py b/api/funkwhale_api/radios/serializers.py
index be60bbc3..9bffbf5b 100644
--- a/api/funkwhale_api/radios/serializers.py
+++ b/api/funkwhale_api/radios/serializers.py
@@ -3,8 +3,7 @@ from rest_framework import serializers
 from funkwhale_api.music.serializers import TrackSerializer
 from funkwhale_api.users.serializers import UserBasicSerializer
 
-from . import filters
-from . import models
+from . import filters, models
 from .radios import registry
 
 
diff --git a/api/funkwhale_api/radios/urls.py b/api/funkwhale_api/radios/urls.py
index 66c6f37e..8b9fd52c 100644
--- a/api/funkwhale_api/radios/urls.py
+++ b/api/funkwhale_api/radios/urls.py
@@ -1,7 +1,7 @@
-from . import views
-
 from rest_framework import routers
 
+from . import views
+
 router = routers.SimpleRouter()
 router.register(r"sessions", views.RadioSessionViewSet, "sessions")
 router.register(r"radios", views.RadioViewSet, "radios")
diff --git a/api/funkwhale_api/radios/views.py b/api/funkwhale_api/radios/views.py
index 4fdd192e..77df238e 100644
--- a/api/funkwhale_api/radios/views.py
+++ b/api/funkwhale_api/radios/views.py
@@ -1,18 +1,12 @@
 from django.db.models import Q
 from django.http import Http404
-
-from rest_framework import mixins, viewsets
-from rest_framework import permissions
-from rest_framework import status
-from rest_framework.response import Response
+from rest_framework import mixins, permissions, status, viewsets
 from rest_framework.decorators import detail_route, list_route
+from rest_framework.response import Response
 
 from funkwhale_api.music.serializers import TrackSerializer
 
-from . import models
-from . import filters
-from . import filtersets
-from . import serializers
+from . import filters, filtersets, models, serializers
 
 
 class RadioViewSet(
diff --git a/api/funkwhale_api/requests/api_urls.py b/api/funkwhale_api/requests/api_urls.py
index 309eba7c..403a0953 100644
--- a/api/funkwhale_api/requests/api_urls.py
+++ b/api/funkwhale_api/requests/api_urls.py
@@ -1,7 +1,7 @@
-from . import views
-
 from rest_framework import routers
 
+from . import views
+
 router = routers.SimpleRouter()
 router.register(r"import-requests", views.ImportRequestViewSet, "import-requests")
 
diff --git a/api/funkwhale_api/requests/filters.py b/api/funkwhale_api/requests/filters.py
index ad8b000d..4a06dea1 100644
--- a/api/funkwhale_api/requests/filters.py
+++ b/api/funkwhale_api/requests/filters.py
@@ -1,6 +1,7 @@
 import django_filters
 
 from funkwhale_api.common import fields
+
 from . import models
 
 
diff --git a/api/funkwhale_api/requests/models.py b/api/funkwhale_api/requests/models.py
index 650d5024..a24086d7 100644
--- a/api/funkwhale_api/requests/models.py
+++ b/api/funkwhale_api/requests/models.py
@@ -1,5 +1,4 @@
 from django.db import models
-
 from django.utils import timezone
 
 NATURE_CHOICES = [("artist", "artist"), ("album", "album"), ("track", "track")]
diff --git a/api/funkwhale_api/requests/views.py b/api/funkwhale_api/requests/views.py
index e940c789..96d8c892 100644
--- a/api/funkwhale_api/requests/views.py
+++ b/api/funkwhale_api/requests/views.py
@@ -1,8 +1,6 @@
 from rest_framework import mixins, viewsets
 
-from . import filters
-from . import models
-from . import serializers
+from . import filters, models, serializers
 
 
 class ImportRequestViewSet(
diff --git a/api/funkwhale_api/subsonic/authentication.py b/api/funkwhale_api/subsonic/authentication.py
index 808e5e5e..a573a109 100644
--- a/api/funkwhale_api/subsonic/authentication.py
+++ b/api/funkwhale_api/subsonic/authentication.py
@@ -1,8 +1,7 @@
 import binascii
 import hashlib
 
-from rest_framework import authentication
-from rest_framework import exceptions
+from rest_framework import authentication, exceptions
 
 from funkwhale_api.users.models import User
 
diff --git a/api/funkwhale_api/subsonic/dynamic_preferences_registry.py b/api/funkwhale_api/subsonic/dynamic_preferences_registry.py
index 1353ce32..439d16de 100644
--- a/api/funkwhale_api/subsonic/dynamic_preferences_registry.py
+++ b/api/funkwhale_api/subsonic/dynamic_preferences_registry.py
@@ -1,7 +1,6 @@
 from dynamic_preferences import types
 from dynamic_preferences.registries import global_preferences_registry
 
-
 subsonic = types.Section("subsonic")
 
 
diff --git a/api/funkwhale_api/subsonic/negotiation.py b/api/funkwhale_api/subsonic/negotiation.py
index 4198756e..96b41589 100644
--- a/api/funkwhale_api/subsonic/negotiation.py
+++ b/api/funkwhale_api/subsonic/negotiation.py
@@ -1,9 +1,7 @@
-from rest_framework import exceptions
-from rest_framework import negotiation
+from rest_framework import exceptions, negotiation
 
 from . import renderers
 
-
 MAPPING = {
     "json": (renderers.SubsonicJSONRenderer(), "application/json"),
     "xml": (renderers.SubsonicXMLRenderer(), "text/xml"),
diff --git a/api/funkwhale_api/subsonic/serializers.py b/api/funkwhale_api/subsonic/serializers.py
index 7735b1a7..fc21a99f 100644
--- a/api/funkwhale_api/subsonic/serializers.py
+++ b/api/funkwhale_api/subsonic/serializers.py
@@ -1,7 +1,6 @@
 import collections
 
-from django.db.models import functions, Count
-
+from django.db.models import Count, functions
 from rest_framework import serializers
 
 from funkwhale_api.history import models as history_models
diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py
index e6fc2df7..09cd8663 100644
--- a/api/funkwhale_api/subsonic/views.py
+++ b/api/funkwhale_api/subsonic/views.py
@@ -2,12 +2,9 @@ import datetime
 
 from django.conf import settings
 from django.utils import timezone
-
 from rest_framework import exceptions
 from rest_framework import permissions as rest_permissions
-from rest_framework import renderers
-from rest_framework import response
-from rest_framework import viewsets
+from rest_framework import renderers, response, viewsets
 from rest_framework.decorators import list_route
 from rest_framework.serializers import ValidationError
 
@@ -19,10 +16,7 @@ from funkwhale_api.music import utils
 from funkwhale_api.music import views as music_views
 from funkwhale_api.playlists import models as playlists_models
 
-from . import authentication
-from . import filters
-from . import negotiation
-from . import serializers
+from . import authentication, filters, negotiation, serializers
 
 
 def find_object(queryset, model_field="pk", field="id", cast=int):
diff --git a/api/funkwhale_api/taskapp/celery.py b/api/funkwhale_api/taskapp/celery.py
index 80fb1a60..98e980f0 100644
--- a/api/funkwhale_api/taskapp/celery.py
+++ b/api/funkwhale_api/taskapp/celery.py
@@ -1,13 +1,13 @@
 
 from __future__ import absolute_import
-import os
+
 import functools
+import os
 
 from celery import Celery
 from django.apps import AppConfig
 from django.conf import settings
 
-
 if not settings.configured:
     # set the default Django settings module for the 'celery' program.
     os.environ.setdefault(
diff --git a/api/funkwhale_api/users/adapters.py b/api/funkwhale_api/users/adapters.py
index 69169757..6d8c365d 100644
--- a/api/funkwhale_api/users/adapters.py
+++ b/api/funkwhale_api/users/adapters.py
@@ -1,6 +1,5 @@
-from django.conf import settings
-
 from allauth.account.adapter import DefaultAccountAdapter
+from django.conf import settings
 from dynamic_preferences.registries import global_preferences_registry
 
 
diff --git a/api/funkwhale_api/users/api_urls.py b/api/funkwhale_api/users/api_urls.py
index dacb091f..267ee2d6 100644
--- a/api/funkwhale_api/users/api_urls.py
+++ b/api/funkwhale_api/users/api_urls.py
@@ -1,4 +1,5 @@
 from rest_framework import routers
+
 from . import views
 
 router = routers.SimpleRouter()
diff --git a/api/funkwhale_api/users/factories.py b/api/funkwhale_api/users/factories.py
index 949bfdfe..eed8c717 100644
--- a/api/funkwhale_api/users/factories.py
+++ b/api/funkwhale_api/users/factories.py
@@ -1,8 +1,8 @@
 import factory
-
-from funkwhale_api.factories import registry, ManyToManyFromList
 from django.contrib.auth.models import Permission
 
+from funkwhale_api.factories import ManyToManyFromList, registry
+
 
 @registry.register
 class GroupFactory(factory.django.DjangoModelFactory):
diff --git a/api/funkwhale_api/users/models.py b/api/funkwhale_api/users/models.py
index 30320e14..d198ff9a 100644
--- a/api/funkwhale_api/users/models.py
+++ b/api/funkwhale_api/users/models.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-from __future__ import unicode_literals, absolute_import
+from __future__ import absolute_import, unicode_literals
 
 import binascii
 import os
@@ -7,13 +7,12 @@ import uuid
 
 from django.conf import settings
 from django.contrib.auth.models import AbstractUser
-from django.urls import reverse
 from django.db import models
+from django.urls import reverse
 from django.utils.encoding import python_2_unicode_compatible
 from django.utils.translation import ugettext_lazy as _
 
-from funkwhale_api.common import fields
-from funkwhale_api.common import preferences
+from funkwhale_api.common import fields, preferences
 
 
 def get_token():
diff --git a/api/funkwhale_api/users/rest_auth_urls.py b/api/funkwhale_api/users/rest_auth_urls.py
index f5015ecb..732a3bbb 100644
--- a/api/funkwhale_api/users/rest_auth_urls.py
+++ b/api/funkwhale_api/users/rest_auth_urls.py
@@ -1,12 +1,10 @@
-from django.views.generic import TemplateView
 from django.conf.urls import url
-
-from rest_auth.registration import views as registration_views
+from django.views.generic import TemplateView
 from rest_auth import views as rest_auth_views
+from rest_auth.registration import views as registration_views
 
 from . import views
 
-
 urlpatterns = [
     url(r"^$", views.RegisterView.as_view(), name="rest_register"),
     url(
diff --git a/api/funkwhale_api/users/serializers.py b/api/funkwhale_api/users/serializers.py
index ab289bc5..b3bd431c 100644
--- a/api/funkwhale_api/users/serializers.py
+++ b/api/funkwhale_api/users/serializers.py
@@ -1,7 +1,7 @@
 from django.conf import settings
-
-from rest_framework import serializers
 from rest_auth.serializers import PasswordResetSerializer as PRS
+from rest_framework import serializers
+
 from funkwhale_api.activity import serializers as activity_serializers
 
 from . import models
diff --git a/api/funkwhale_api/users/views.py b/api/funkwhale_api/users/views.py
index dfb71dd0..69e69d26 100644
--- a/api/funkwhale_api/users/views.py
+++ b/api/funkwhale_api/users/views.py
@@ -1,15 +1,12 @@
-from rest_framework.response import Response
-from rest_framework import mixins
-from rest_framework import viewsets
-from rest_framework.decorators import detail_route, list_route
-
-from rest_auth.registration.views import RegisterView as BaseRegisterView
 from allauth.account.adapter import get_adapter
+from rest_auth.registration.views import RegisterView as BaseRegisterView
+from rest_framework import mixins, viewsets
+from rest_framework.decorators import detail_route, list_route
+from rest_framework.response import Response
 
 from funkwhale_api.common import preferences
 
-from . import models
-from . import serializers
+from . import models, serializers
 
 
 class RegisterView(BaseRegisterView):
diff --git a/api/setup.cfg b/api/setup.cfg
index b1267c90..53e08c41 100644
--- a/api/setup.cfg
+++ b/api/setup.cfg
@@ -2,6 +2,9 @@
 max-line-length = 120
 exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules
 
+[isort]
+skip_glob = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules
+
 [pep8]
 max-line-length = 120
 exclude=.tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules
diff --git a/api/tests/activity/test_views.py b/api/tests/activity/test_views.py
index 6f13c828..be0ee739 100644
--- a/api/tests/activity/test_views.py
+++ b/api/tests/activity/test_views.py
@@ -1,7 +1,6 @@
 from django.urls import reverse
 
-from funkwhale_api.activity import serializers
-from funkwhale_api.activity import utils
+from funkwhale_api.activity import serializers, utils
 
 
 def test_activity_view(factories, api_client, preferences, anonymous_user):
diff --git a/api/tests/channels/test_auth.py b/api/tests/channels/test_auth.py
index 19bdebe6..505bef1c 100644
--- a/api/tests/channels/test_auth.py
+++ b/api/tests/channels/test_auth.py
@@ -1,5 +1,4 @@
 import pytest
-
 from rest_framework_jwt.settings import api_settings
 
 from funkwhale_api.common.auth import TokenAuthMiddleware
diff --git a/api/tests/common/test_fields.py b/api/tests/common/test_fields.py
index bd836f84..d2692314 100644
--- a/api/tests/common/test_fields.py
+++ b/api/tests/common/test_fields.py
@@ -1,5 +1,4 @@
 import pytest
-
 from django.contrib.auth.models import AnonymousUser
 from django.db.models import Q
 
diff --git a/api/tests/common/test_permissions.py b/api/tests/common/test_permissions.py
index 952ec589..bf4d8bde 100644
--- a/api/tests/common/test_permissions.py
+++ b/api/tests/common/test_permissions.py
@@ -1,8 +1,6 @@
 import pytest
-
-from rest_framework.views import APIView
-
 from django.http import Http404
+from rest_framework.views import APIView
 
 from funkwhale_api.common import permissions
 
diff --git a/api/tests/common/test_preferences.py b/api/tests/common/test_preferences.py
index d9b53b29..7f941a45 100644
--- a/api/tests/common/test_preferences.py
+++ b/api/tests/common/test_preferences.py
@@ -1,6 +1,6 @@
 import pytest
-
 from dynamic_preferences.registries import global_preferences_registry
+
 from funkwhale_api.common import preferences as common_preferences
 
 
diff --git a/api/tests/common/test_scripts.py b/api/tests/common/test_scripts.py
index afedc3e3..40d9ea0a 100644
--- a/api/tests/common/test_scripts.py
+++ b/api/tests/common/test_scripts.py
@@ -1,7 +1,7 @@
 import pytest
 
-from funkwhale_api.common.management.commands import script
 from funkwhale_api.common import scripts
+from funkwhale_api.common.management.commands import script
 
 
 @pytest.fixture
diff --git a/api/tests/common/test_session.py b/api/tests/common/test_session.py
index eba26dae..53154345 100644
--- a/api/tests/common/test_session.py
+++ b/api/tests/common/test_session.py
@@ -1,5 +1,4 @@
 import funkwhale_api
-
 from funkwhale_api.common import session
 
 
diff --git a/api/tests/conftest.py b/api/tests/conftest.py
index 8027ef0b..40203ee3 100644
--- a/api/tests/conftest.py
+++ b/api/tests/conftest.py
@@ -1,19 +1,16 @@
 import datetime
-import factory
-import pytest
-import requests_mock
 import shutil
 import tempfile
 
+import factory
+import pytest
+import requests_mock
 from django.contrib.auth.models import AnonymousUser
 from django.core.cache import cache as django_cache
 from django.test import client
-
 from dynamic_preferences.registries import global_preferences_registry
-
 from rest_framework import fields as rest_fields
-from rest_framework.test import APIClient
-from rest_framework.test import APIRequestFactory
+from rest_framework.test import APIClient, APIRequestFactory
 
 from funkwhale_api.activity import record
 from funkwhale_api.users.permissions import HasUserPermission
diff --git a/api/tests/favorites/test_activity.py b/api/tests/favorites/test_activity.py
index a6eff999..ff38daa9 100644
--- a/api/tests/favorites/test_activity.py
+++ b/api/tests/favorites/test_activity.py
@@ -1,7 +1,6 @@
-from funkwhale_api.users.serializers import UserActivitySerializer
+from funkwhale_api.favorites import activities, serializers
 from funkwhale_api.music.serializers import TrackActivitySerializer
-from funkwhale_api.favorites import serializers
-from funkwhale_api.favorites import activities
+from funkwhale_api.users.serializers import UserActivitySerializer
 
 
 def test_get_favorite_activity_url(settings, factories):
diff --git a/api/tests/favorites/test_favorites.py b/api/tests/favorites/test_favorites.py
index 8bf7f25b..cd75b0d2 100644
--- a/api/tests/favorites/test_favorites.py
+++ b/api/tests/favorites/test_favorites.py
@@ -1,4 +1,5 @@
 import json
+
 import pytest
 from django.urls import reverse
 
diff --git a/api/tests/federation/test_activity.py b/api/tests/federation/test_activity.py
index 78ad389d..9c7bb70e 100644
--- a/api/tests/federation/test_activity.py
+++ b/api/tests/federation/test_activity.py
@@ -1,6 +1,5 @@
 
-from funkwhale_api.federation import activity
-from funkwhale_api.federation import serializers
+from funkwhale_api.federation import activity, serializers
 
 
 def test_deliver(factories, r_mock, mocker, settings):
diff --git a/api/tests/federation/test_actors.py b/api/tests/federation/test_actors.py
index 278b10af..8206797d 100644
--- a/api/tests/federation/test_actors.py
+++ b/api/tests/federation/test_actors.py
@@ -1,15 +1,10 @@
 import arrow
 import pytest
-
 from django.urls import reverse
 from django.utils import timezone
-
 from rest_framework import exceptions
 
-from funkwhale_api.federation import actors
-from funkwhale_api.federation import models
-from funkwhale_api.federation import serializers
-from funkwhale_api.federation import utils
+from funkwhale_api.federation import actors, models, serializers, utils
 from funkwhale_api.music import models as music_models
 from funkwhale_api.music import tasks as music_tasks
 
diff --git a/api/tests/federation/test_authentication.py b/api/tests/federation/test_authentication.py
index ea86b64a..95cec5d2 100644
--- a/api/tests/federation/test_authentication.py
+++ b/api/tests/federation/test_authentication.py
@@ -1,5 +1,4 @@
-from funkwhale_api.federation import authentication
-from funkwhale_api.federation import keys
+from funkwhale_api.federation import authentication, keys
 
 
 def test_authenticate(factories, mocker, api_request):
diff --git a/api/tests/federation/test_library.py b/api/tests/federation/test_library.py
index 8b2b1850..4e187e47 100644
--- a/api/tests/federation/test_library.py
+++ b/api/tests/federation/test_library.py
@@ -1,5 +1,4 @@
-from funkwhale_api.federation import library
-from funkwhale_api.federation import serializers
+from funkwhale_api.federation import library, serializers
 
 
 def test_library_scan_from_account_name(mocker, factories):
diff --git a/api/tests/federation/test_models.py b/api/tests/federation/test_models.py
index 08e629de..61d0aea9 100644
--- a/api/tests/federation/test_models.py
+++ b/api/tests/federation/test_models.py
@@ -1,9 +1,7 @@
 import pytest
-
 from django import db
 
 
-
 def test_cannot_duplicate_actor(factories):
     actor = factories["federation.Actor"]()
 
diff --git a/api/tests/federation/test_permissions.py b/api/tests/federation/test_permissions.py
index 15990ca9..75f76077 100644
--- a/api/tests/federation/test_permissions.py
+++ b/api/tests/federation/test_permissions.py
@@ -1,7 +1,6 @@
 from rest_framework.views import APIView
 
-from funkwhale_api.federation import actors
-from funkwhale_api.federation import permissions
+from funkwhale_api.federation import actors, permissions
 
 
 def test_library_follower(factories, api_request, anonymous_user, preferences):
diff --git a/api/tests/federation/test_serializers.py b/api/tests/federation/test_serializers.py
index 2d3bad35..c2d2a206 100644
--- a/api/tests/federation/test_serializers.py
+++ b/api/tests/federation/test_serializers.py
@@ -1,12 +1,8 @@
 import arrow
 import pytest
-
 from django.core.paginator import Paginator
 
-from funkwhale_api.federation import actors
-from funkwhale_api.federation import models
-from funkwhale_api.federation import serializers
-from funkwhale_api.federation import utils
+from funkwhale_api.federation import actors, models, serializers, utils
 
 
 def test_actor_serializer_from_ap(db):
diff --git a/api/tests/federation/test_signing.py b/api/tests/federation/test_signing.py
index 611f2d73..159f31cd 100644
--- a/api/tests/federation/test_signing.py
+++ b/api/tests/federation/test_signing.py
@@ -1,8 +1,7 @@
 import cryptography.exceptions
 import pytest
 
-from funkwhale_api.federation import signing
-from funkwhale_api.federation import keys
+from funkwhale_api.federation import keys, signing
 
 
 def test_can_sign_and_verify_request(nodb_factories):
diff --git a/api/tests/federation/test_tasks.py b/api/tests/federation/test_tasks.py
index 068578c5..772fe614 100644
--- a/api/tests/federation/test_tasks.py
+++ b/api/tests/federation/test_tasks.py
@@ -5,8 +5,7 @@ import pathlib
 from django.core.paginator import Paginator
 from django.utils import timezone
 
-from funkwhale_api.federation import serializers
-from funkwhale_api.federation import tasks
+from funkwhale_api.federation import serializers, tasks
 
 
 def test_scan_library_does_nothing_if_federation_disabled(mocker, factories):
diff --git a/api/tests/federation/test_views.py b/api/tests/federation/test_views.py
index e277fd0f..14ccc64d 100644
--- a/api/tests/federation/test_views.py
+++ b/api/tests/federation/test_views.py
@@ -1,16 +1,9 @@
+import pytest
 from django.core.paginator import Paginator
 from django.urls import reverse
 from django.utils import timezone
 
-import pytest
-
-from funkwhale_api.federation import actors
-from funkwhale_api.federation import activity
-from funkwhale_api.federation import models
-from funkwhale_api.federation import serializers
-from funkwhale_api.federation import utils
-from funkwhale_api.federation import views
-from funkwhale_api.federation import webfinger
+from funkwhale_api.federation import activity, actors, models, serializers, utils, views, webfinger
 
 
 @pytest.mark.parametrize(
diff --git a/api/tests/federation/test_webfinger.py b/api/tests/federation/test_webfinger.py
index de611271..0608df3e 100644
--- a/api/tests/federation/test_webfinger.py
+++ b/api/tests/federation/test_webfinger.py
@@ -1,5 +1,4 @@
 import pytest
-
 from django import forms
 
 from funkwhale_api.federation import webfinger
diff --git a/api/tests/history/test_activity.py b/api/tests/history/test_activity.py
index c3cca592..e077870f 100644
--- a/api/tests/history/test_activity.py
+++ b/api/tests/history/test_activity.py
@@ -1,7 +1,6 @@
-from funkwhale_api.users.serializers import UserActivitySerializer
+from funkwhale_api.history import activities, serializers
 from funkwhale_api.music.serializers import TrackActivitySerializer
-from funkwhale_api.history import serializers
-from funkwhale_api.history import activities
+from funkwhale_api.users.serializers import UserActivitySerializer
 
 
 def test_get_listening_activity_url(settings, factories):
diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py
index 7637ca31..181ddf27 100644
--- a/api/tests/instance/test_nodeinfo.py
+++ b/api/tests/instance/test_nodeinfo.py
@@ -1,6 +1,5 @@
 
 import funkwhale_api
-
 from funkwhale_api.instance import nodeinfo
 
 
diff --git a/api/tests/instance/test_preferences.py b/api/tests/instance/test_preferences.py
index cf73c7c8..b465be9d 100644
--- a/api/tests/instance/test_preferences.py
+++ b/api/tests/instance/test_preferences.py
@@ -1,9 +1,7 @@
 import pytest
-
 from django.urls import reverse
 
 
-
 def test_can_list_settings_via_api(preferences, api_client):
     url = reverse("api:v1:instance:settings")
     all_preferences = preferences.model.objects.all()
diff --git a/api/tests/instance/test_views.py b/api/tests/instance/test_views.py
index dc9de2a8..051251ce 100644
--- a/api/tests/instance/test_views.py
+++ b/api/tests/instance/test_views.py
@@ -1,5 +1,4 @@
 import pytest
-
 from django.urls import reverse
 
 from funkwhale_api.instance import views
diff --git a/api/tests/manage/test_views.py b/api/tests/manage/test_views.py
index aa8347f7..e2bfbf3a 100644
--- a/api/tests/manage/test_views.py
+++ b/api/tests/manage/test_views.py
@@ -1,9 +1,7 @@
 import pytest
-
 from django.urls import reverse
 
-from funkwhale_api.manage import serializers
-from funkwhale_api.manage import views
+from funkwhale_api.manage import serializers, views
 
 
 @pytest.mark.parametrize(
diff --git a/api/tests/music/conftest.py b/api/tests/music/conftest.py
index 8108b1a4..634fb337 100644
--- a/api/tests/music/conftest.py
+++ b/api/tests/music/conftest.py
@@ -1,6 +1,5 @@
 import pytest
 
-
 _artists = {"search": {}, "get": {}}
 
 _artists["search"]["adhesive_wombat"] = {
diff --git a/api/tests/music/test_api.py b/api/tests/music/test_api.py
index 11b3e927..ac791e3f 100644
--- a/api/tests/music/test_api.py
+++ b/api/tests/music/test_api.py
@@ -1,11 +1,10 @@
 import json
 import os
+
 import pytest
 from django.urls import reverse
 
-from funkwhale_api.music import models
-from funkwhale_api.music import tasks
-
+from funkwhale_api.music import models, tasks
 
 DATA_DIR = os.path.dirname(os.path.abspath(__file__))
 
diff --git a/api/tests/music/test_lyrics.py b/api/tests/music/test_lyrics.py
index 81bbbe48..ad0c6afb 100644
--- a/api/tests/music/test_lyrics.py
+++ b/api/tests/music/test_lyrics.py
@@ -1,8 +1,7 @@
 from django.urls import reverse
 
-from funkwhale_api.music import models
-from funkwhale_api.music import tasks
 from funkwhale_api.music import lyrics as lyrics_utils
+from funkwhale_api.music import models, tasks
 
 
 def test_works_import_lyrics_if_any(lyricswiki_content, mocker, factories):
diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py
index f1e03ad1..fbdf5b81 100644
--- a/api/tests/music/test_metadata.py
+++ b/api/tests/music/test_metadata.py
@@ -1,8 +1,9 @@
 import datetime
 import os
-import pytest
 import uuid
 
+import pytest
+
 from funkwhale_api.music import metadata
 
 DATA_DIR = os.path.dirname(os.path.abspath(__file__))
diff --git a/api/tests/music/test_models.py b/api/tests/music/test_models.py
index f81dd433..444b0c05 100644
--- a/api/tests/music/test_models.py
+++ b/api/tests/music/test_models.py
@@ -1,9 +1,8 @@
 import os
+
 import pytest
 
-from funkwhale_api.music import models
-from funkwhale_api.music import importers
-from funkwhale_api.music import tasks
+from funkwhale_api.music import importers, models, tasks
 
 DATA_DIR = os.path.dirname(os.path.abspath(__file__))
 
diff --git a/api/tests/music/test_music.py b/api/tests/music/test_music.py
index 391af26c..6700f2ab 100644
--- a/api/tests/music/test_music.py
+++ b/api/tests/music/test_music.py
@@ -1,6 +1,8 @@
+import datetime
+
 import pytest
+
 from funkwhale_api.music import models
-import datetime
 
 
 def test_can_create_artist_from_api(artists, mocker, db):
diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py
index 01e6d91a..455c65ed 100644
--- a/api/tests/music/test_tasks.py
+++ b/api/tests/music/test_tasks.py
@@ -1,4 +1,5 @@
 import os
+
 import pytest
 
 from funkwhale_api.music import tasks
diff --git a/api/tests/music/test_utils.py b/api/tests/music/test_utils.py
index 276a450d..4019e47b 100644
--- a/api/tests/music/test_utils.py
+++ b/api/tests/music/test_utils.py
@@ -1,4 +1,5 @@
 import os
+
 import pytest
 
 from funkwhale_api.music import utils
diff --git a/api/tests/music/test_views.py b/api/tests/music/test_views.py
index 840dd966..f2b270a8 100644
--- a/api/tests/music/test_views.py
+++ b/api/tests/music/test_views.py
@@ -1,12 +1,11 @@
 import io
-import pytest
 
+import pytest
 from django.urls import reverse
 from django.utils import timezone
 
-from funkwhale_api.music import serializers
-from funkwhale_api.music import views
 from funkwhale_api.federation import actors
+from funkwhale_api.music import serializers, views
 
 
 @pytest.mark.parametrize(
diff --git a/api/tests/musicbrainz/test_api.py b/api/tests/musicbrainz/test_api.py
index f1f9912c..0fdaf7ab 100644
--- a/api/tests/musicbrainz/test_api.py
+++ b/api/tests/musicbrainz/test_api.py
@@ -1,7 +1,6 @@
 from django.urls import reverse
 
 
-
 def test_can_search_recording_in_musicbrainz_api(
     recordings, db, mocker, logged_in_api_client
 ):
diff --git a/api/tests/playlists/test_models.py b/api/tests/playlists/test_models.py
index 3258e6d1..1ef03d35 100644
--- a/api/tests/playlists/test_models.py
+++ b/api/tests/playlists/test_models.py
@@ -1,5 +1,4 @@
 import pytest
-
 from rest_framework import exceptions
 
 
diff --git a/api/tests/playlists/test_serializers.py b/api/tests/playlists/test_serializers.py
index 3a8bb6a2..9bda66d4 100644
--- a/api/tests/playlists/test_serializers.py
+++ b/api/tests/playlists/test_serializers.py
@@ -1,5 +1,4 @@
-from funkwhale_api.playlists import models
-from funkwhale_api.playlists import serializers
+from funkwhale_api.playlists import models, serializers
 
 
 def test_cannot_max_500_tracks_per_playlist(factories, preferences):
diff --git a/api/tests/playlists/test_views.py b/api/tests/playlists/test_views.py
index a675993e..18f5bb67 100644
--- a/api/tests/playlists/test_views.py
+++ b/api/tests/playlists/test_views.py
@@ -1,9 +1,7 @@
 import pytest
-
 from django.urls import reverse
 
-from funkwhale_api.playlists import models
-from funkwhale_api.playlists import serializers
+from funkwhale_api.playlists import models, serializers
 
 
 def test_can_create_playlist_via_api(logged_in_api_client):
diff --git a/api/tests/radios/test_api.py b/api/tests/radios/test_api.py
index 5f191280..5f542c88 100644
--- a/api/tests/radios/test_api.py
+++ b/api/tests/radios/test_api.py
@@ -3,8 +3,7 @@ import json
 from django.urls import reverse
 
 from funkwhale_api.music.serializers import TrackSerializer
-from funkwhale_api.radios import filters
-from funkwhale_api.radios import serializers
+from funkwhale_api.radios import filters, serializers
 
 
 def test_can_list_config_options(logged_in_client):
diff --git a/api/tests/radios/test_filters.py b/api/tests/radios/test_filters.py
index 4b91f163..89bb726a 100644
--- a/api/tests/radios/test_filters.py
+++ b/api/tests/radios/test_filters.py
@@ -1,5 +1,4 @@
 import pytest
-
 from django.core.exceptions import ValidationError
 
 from funkwhale_api.music.models import Track
diff --git a/api/tests/radios/test_radios.py b/api/tests/radios/test_radios.py
index 95fe58b1..2a785cb9 100644
--- a/api/tests/radios/test_radios.py
+++ b/api/tests/radios/test_radios.py
@@ -1,15 +1,12 @@
 import json
 import random
-import pytest
 
-from django.urls import reverse
+import pytest
 from django.core.exceptions import ValidationError
+from django.urls import reverse
 
-
-from funkwhale_api.radios import radios
-from funkwhale_api.radios import models
-from funkwhale_api.radios import serializers
 from funkwhale_api.favorites.models import TrackFavorite
+from funkwhale_api.radios import models, radios, serializers
 
 
 def test_can_pick_track_from_choices():
diff --git a/api/tests/subsonic/test_authentication.py b/api/tests/subsonic/test_authentication.py
index 03a863ca..3606cff5 100644
--- a/api/tests/subsonic/test_authentication.py
+++ b/api/tests/subsonic/test_authentication.py
@@ -1,6 +1,6 @@
 import binascii
-import pytest
 
+import pytest
 from rest_framework import exceptions
 
 from funkwhale_api.subsonic import authentication
diff --git a/api/tests/subsonic/test_views.py b/api/tests/subsonic/test_views.py
index ecb43ded..f823a443 100644
--- a/api/tests/subsonic/test_views.py
+++ b/api/tests/subsonic/test_views.py
@@ -1,14 +1,13 @@
 import datetime
 import json
-import pytest
 
-from django.utils import timezone
+import pytest
 from django.urls import reverse
+from django.utils import timezone
 
 from funkwhale_api.music import models as music_models
 from funkwhale_api.music import views as music_views
-from funkwhale_api.subsonic import renderers
-from funkwhale_api.subsonic import serializers
+from funkwhale_api.subsonic import renderers, serializers
 
 
 def render_json(data):
diff --git a/api/tests/test_import_audio_file.py b/api/tests/test_import_audio_file.py
index 38b7d262..011fcb7a 100644
--- a/api/tests/test_import_audio_file.py
+++ b/api/tests/test_import_audio_file.py
@@ -1,7 +1,7 @@
-import pytest
 import datetime
 import os
 
+import pytest
 from django.core.management import call_command
 from django.core.management.base import CommandError
 
diff --git a/api/tests/test_youtube.py b/api/tests/test_youtube.py
index c906c1de..aa3b8a05 100644
--- a/api/tests/test_youtube.py
+++ b/api/tests/test_youtube.py
@@ -1,5 +1,7 @@
 from collections import OrderedDict
+
 from django.urls import reverse
+
 from funkwhale_api.providers.youtube.client import client
 
 from .data import youtube as api_data
diff --git a/api/tests/users/test_jwt.py b/api/tests/users/test_jwt.py
index e4038b1e..83de757c 100644
--- a/api/tests/users/test_jwt.py
+++ b/api/tests/users/test_jwt.py
@@ -1,10 +1,8 @@
 import pytest
-
 from jwt.exceptions import DecodeError
 from rest_framework_jwt.settings import api_settings
 
 
-
 def test_can_invalidate_token_when_changing_user_secret_key(factories):
     user = factories["users.User"]()
     u1 = user.secret_key
diff --git a/api/tests/users/test_views.py b/api/tests/users/test_views.py
index fa5793e9..10320f8e 100644
--- a/api/tests/users/test_views.py
+++ b/api/tests/users/test_views.py
@@ -1,5 +1,4 @@
 import pytest
-
 from django.urls import reverse
 
 from funkwhale_api.users.models import User
-- 
GitLab