{% if record.stats.total %}
diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py
index 1a40b95a5..cba624a59 100644
--- a/netbox/ipam/tests/test_api.py
+++ b/netbox/ipam/tests/test_api.py
@@ -1,16 +1,14 @@
from __future__ import unicode_literals
+from django.contrib.auth.models import User
+from django.urls import reverse
from netaddr import IPNetwork
from rest_framework import status
from rest_framework.test import APITestCase
-from django.contrib.auth.models import User
-from django.urls import reverse
-
from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
-from ipam.models import (
- Aggregate, IPAddress, IP_PROTOCOL_TCP, IP_PROTOCOL_UDP, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF,
-)
+from ipam.constants import IP_PROTOCOL_TCP, IP_PROTOCOL_UDP
+from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
from users.models import Token
from utilities.tests import HttpStatusMixin
diff --git a/netbox/ipam/tests/test_models.py b/netbox/ipam/tests/test_models.py
index 0f75cc795..790b665cd 100644
--- a/netbox/ipam/tests/test_models.py
+++ b/netbox/ipam/tests/test_models.py
@@ -1,7 +1,6 @@
from __future__ import unicode_literals
import netaddr
-
from django.core.exceptions import ValidationError
from django.test import TestCase, override_settings
diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py
index 6f24a675f..a298dd3d7 100644
--- a/netbox/ipam/views.py
+++ b/netbox/ipam/views.py
@@ -1,14 +1,13 @@
from __future__ import unicode_literals
-from django_tables2 import RequestConfig
import netaddr
-
from django.conf import settings
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.db.models import Count, Q
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.views.generic import View
+from django_tables2 import RequestConfig
from dcim.models import Device, Interface
from utilities.paginator import EnhancedPaginator
@@ -17,11 +16,8 @@ from utilities.views import (
)
from virtualization.models import VirtualMachine
from . import filters, forms, tables
-from .constants import IPADDRESS_ROLE_ANYCAST
-from .models import (
- Aggregate, IPAddress, PREFIX_STATUS_ACTIVE, PREFIX_STATUS_DEPRECATED, PREFIX_STATUS_RESERVED, Prefix, RIR, Role,
- Service, VLAN, VLANGroup, VRF,
-)
+from .constants import IPADDRESS_ROLE_ANYCAST, PREFIX_STATUS_ACTIVE, PREFIX_STATUS_DEPRECATED, PREFIX_STATUS_RESERVED
+from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
def add_available_prefixes(parent, prefix_list):
diff --git a/netbox/netbox/forms.py b/netbox/netbox/forms.py
index 0521f2d2f..69db4fba5 100644
--- a/netbox/netbox/forms.py
+++ b/netbox/netbox/forms.py
@@ -4,7 +4,6 @@ from django import forms
from utilities.forms import BootstrapMixin
-
OBJ_TYPE_CHOICES = (
('', 'All Objects'),
('Circuits', (
diff --git a/netbox/netbox/urls.py b/netbox/netbox/urls.py
index 3c0f8de9f..6cd7a9e8d 100644
--- a/netbox/netbox/urls.py
+++ b/netbox/netbox/urls.py
@@ -1,16 +1,14 @@
from __future__ import unicode_literals
-from rest_framework_swagger.views import get_swagger_view
-
from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
from django.views.static import serve
+from rest_framework_swagger.views import get_swagger_view
from netbox.views import APIRootView, HomeView, SearchView
from users.views import LoginView, LogoutView
-
swagger_view = get_swagger_view(title='NetBox API')
_patterns = [
diff --git a/netbox/netbox/views.py b/netbox/netbox/views.py
index ce1171235..3be9e9df9 100644
--- a/netbox/netbox/views.py
+++ b/netbox/netbox/views.py
@@ -1,13 +1,12 @@
from __future__ import unicode_literals
-from collections import OrderedDict
-import sys
-from rest_framework.views import APIView
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
+from collections import OrderedDict
from django.shortcuts import render
from django.views.generic import View
+from rest_framework.response import Response
+from rest_framework.reverse import reverse
+from rest_framework.views import APIView
from circuits.filters import CircuitFilter, ProviderFilter
from circuits.models import Circuit, Provider
@@ -30,7 +29,6 @@ from virtualization.models import Cluster, VirtualMachine
from virtualization.tables import ClusterTable, VirtualMachineDetailTable
from .forms import SearchForm
-
SEARCH_MAX_RESULTS = 15
SEARCH_TYPES = OrderedDict((
# Circuits
diff --git a/netbox/netbox/wsgi.py b/netbox/netbox/wsgi.py
index 6d13ffe9d..ecfd81d9a 100644
--- a/netbox/netbox/wsgi.py
+++ b/netbox/netbox/wsgi.py
@@ -1,12 +1,3 @@
-"""
-WSGI config for do_ipam project.
-
-It exposes the WSGI callable as a module-level variable named ``application``.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
-"""
-
import os
from django.core.wsgi import get_wsgi_application
diff --git a/netbox/secrets/api/views.py b/netbox/secrets/api/views.py
index 07897aa19..e2ffa3b28 100644
--- a/netbox/secrets/api/views.py
+++ b/netbox/secrets/api/views.py
@@ -1,21 +1,20 @@
from __future__ import unicode_literals
+
import base64
from Crypto.PublicKey import RSA
+from django.http import HttpResponseBadRequest
from rest_framework.exceptions import ValidationError
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet, ViewSet
-from django.http import HttpResponseBadRequest
-
from secrets import filters
from secrets.exceptions import InvalidKey
from secrets.models import Secret, SecretRole, SessionKey, UserKey
from utilities.api import FieldChoicesViewSet, WritableSerializerMixin
from . import serializers
-
ERR_USERKEY_MISSING = "No UserKey found for the current user."
ERR_USERKEY_INACTIVE = "UserKey has not been activated for decryption."
ERR_PRIVKEY_MISSING = "Private key was not provided."
diff --git a/netbox/secrets/filters.py b/netbox/secrets/filters.py
index eb40e8770..6578eb4b8 100644
--- a/netbox/secrets/filters.py
+++ b/netbox/secrets/filters.py
@@ -1,12 +1,11 @@
from __future__ import unicode_literals
import django_filters
-
from django.db.models import Q
-from .models import Secret, SecretRole
from dcim.models import Device
from utilities.filters import NumericInFilter
+from .models import Secret, SecretRole
class SecretRoleFilter(django_filters.FilterSet):
diff --git a/netbox/secrets/forms.py b/netbox/secrets/forms.py
index 4e8d6667c..af0ad92cc 100644
--- a/netbox/secrets/forms.py
+++ b/netbox/secrets/forms.py
@@ -2,7 +2,6 @@ from __future__ import unicode_literals
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
-
from django import forms
from django.db.models import Count
diff --git a/netbox/secrets/models.py b/netbox/secrets/models.py
index 317fe0dd5..f673af2f0 100644
--- a/netbox/secrets/models.py
+++ b/netbox/secrets/models.py
@@ -1,10 +1,10 @@
from __future__ import unicode_literals
+
import os
from Crypto.Cipher import AES, PKCS1_OAEP
from Crypto.PublicKey import RSA
from Crypto.Util import strxor
-
from django.conf import settings
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.auth.models import Group, User
diff --git a/netbox/secrets/tables.py b/netbox/secrets/tables.py
index 30424b0bb..d68ac37fe 100644
--- a/netbox/secrets/tables.py
+++ b/netbox/secrets/tables.py
@@ -3,10 +3,8 @@ from __future__ import unicode_literals
import django_tables2 as tables
from utilities.tables import BaseTable, ToggleColumn
-
from .models import SecretRole, Secret
-
SECRETROLE_ACTIONS = """
{% if perms.secrets.change_secretrole %}
diff --git a/netbox/secrets/tests/test_api.py b/netbox/secrets/tests/test_api.py
index 4acda3eff..02b4d3e90 100644
--- a/netbox/secrets/tests/test_api.py
+++ b/netbox/secrets/tests/test_api.py
@@ -1,18 +1,17 @@
from __future__ import unicode_literals
-import base64
-from rest_framework import status
-from rest_framework.test import APITestCase
+import base64
from django.contrib.auth.models import User
from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
from secrets.models import Secret, SecretRole, SessionKey, UserKey
from users.models import Token
from utilities.tests import HttpStatusMixin
-
# Dummy RSA key pair for testing use only
PRIVATE_KEY = """-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA97wPWxpq5cClRu8Ssq609ZLfyx6E8ln/v/PdFZ7fxxmA4k+z
diff --git a/netbox/secrets/tests/test_models.py b/netbox/secrets/tests/test_models.py
index 4be37801d..887c048bf 100644
--- a/netbox/secrets/tests/test_models.py
+++ b/netbox/secrets/tests/test_models.py
@@ -1,14 +1,13 @@
from __future__ import unicode_literals
from Crypto.PublicKey import RSA
-
from django.conf import settings
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.test import TestCase
-from secrets.models import UserKey, Secret, encrypt_master_key, decrypt_master_key, generate_random_key
from secrets.hashers import SecretValidationHasher
+from secrets.models import UserKey, Secret, encrypt_master_key, decrypt_master_key, generate_random_key
class UserKeyTestCase(TestCase):
diff --git a/netbox/secrets/urls.py b/netbox/secrets/urls.py
index ecba5741f..cd6415719 100644
--- a/netbox/secrets/urls.py
+++ b/netbox/secrets/urls.py
@@ -4,7 +4,6 @@ from django.conf.urls import url
from . import views
-
app_name = 'secrets'
urlpatterns = [
diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py
index e7f6939a9..250559139 100644
--- a/netbox/secrets/views.py
+++ b/netbox/secrets/views.py
@@ -1,4 +1,5 @@
from __future__ import unicode_literals
+
import base64
from django.contrib import messages
diff --git a/netbox/tenancy/filters.py b/netbox/tenancy/filters.py
index 090a0f9ee..330ab7f56 100644
--- a/netbox/tenancy/filters.py
+++ b/netbox/tenancy/filters.py
@@ -1,7 +1,6 @@
from __future__ import unicode_literals
import django_filters
-
from django.db.models import Q
from extras.filters import CustomFieldFilterSet
diff --git a/netbox/tenancy/tables.py b/netbox/tenancy/tables.py
index 4ef774fb6..2b2989941 100644
--- a/netbox/tenancy/tables.py
+++ b/netbox/tenancy/tables.py
@@ -3,10 +3,8 @@ from __future__ import unicode_literals
import django_tables2 as tables
from utilities.tables import BaseTable, ToggleColumn
-
from .models import Tenant, TenantGroup
-
TENANTGROUP_ACTIONS = """
{% if perms.tenancy.change_tenantgroup %}
diff --git a/netbox/tenancy/tests/test_api.py b/netbox/tenancy/tests/test_api.py
index 5414a1b06..1ac05ea89 100644
--- a/netbox/tenancy/tests/test_api.py
+++ b/netbox/tenancy/tests/test_api.py
@@ -1,10 +1,9 @@
from __future__ import unicode_literals
-from rest_framework import status
-from rest_framework.test import APITestCase
-
from django.contrib.auth.models import User
from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
from tenancy.models import Tenant, TenantGroup
from users.models import Token
diff --git a/netbox/tenancy/urls.py b/netbox/tenancy/urls.py
index a0337a938..668b194f0 100644
--- a/netbox/tenancy/urls.py
+++ b/netbox/tenancy/urls.py
@@ -4,7 +4,6 @@ from django.conf.urls import url
from . import views
-
app_name = 'tenancy'
urlpatterns = [
diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py
index 32709dfb7..33df6a5ca 100644
--- a/netbox/tenancy/views.py
+++ b/netbox/tenancy/views.py
@@ -13,8 +13,8 @@ from utilities.views import (
BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
)
from virtualization.models import VirtualMachine
-from .models import Tenant, TenantGroup
from . import filters, forms, tables
+from .models import Tenant, TenantGroup
#
diff --git a/netbox/users/api/serializers.py b/netbox/users/api/serializers.py
index a516b2121..80f79516c 100644
--- a/netbox/users/api/serializers.py
+++ b/netbox/users/api/serializers.py
@@ -1,7 +1,6 @@
from __future__ import unicode_literals
from django.contrib.auth.models import User
-
from rest_framework import serializers
diff --git a/netbox/users/forms.py b/netbox/users/forms.py
index 811ca6cc5..d25e128e6 100644
--- a/netbox/users/forms.py
+++ b/netbox/users/forms.py
@@ -1,7 +1,7 @@
from __future__ import unicode_literals
-from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm
from django import forms
+from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm
from utilities.forms import BootstrapMixin
from .models import Token
diff --git a/netbox/users/models.py b/netbox/users/models.py
index a2d9d09ba..02f5bc0a0 100644
--- a/netbox/users/models.py
+++ b/netbox/users/models.py
@@ -1,12 +1,13 @@
from __future__ import unicode_literals
+
import binascii
import os
from django.contrib.auth.models import User
from django.core.validators import MinLengthValidator
from django.db import models
-from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone
+from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
diff --git a/netbox/users/urls.py b/netbox/users/urls.py
index 57a7e43cc..aad89e104 100644
--- a/netbox/users/urls.py
+++ b/netbox/users/urls.py
@@ -4,7 +4,6 @@ from django.conf.urls import url
from . import views
-
app_name = 'user'
urlpatterns = [
diff --git a/netbox/utilities/api.py b/netbox/utilities/api.py
index d9ae855ea..91e0fb8af 100644
--- a/netbox/utilities/api.py
+++ b/netbox/utilities/api.py
@@ -1,17 +1,16 @@
from __future__ import unicode_literals
+
from collections import OrderedDict
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.http import Http404
-
from rest_framework.exceptions import APIException
from rest_framework.permissions import BasePermission
from rest_framework.response import Response
from rest_framework.serializers import Field, ModelSerializer, ValidationError
from rest_framework.viewsets import ViewSet
-
WRITE_OPERATIONS = ['create', 'update', 'partial_update', 'delete']
diff --git a/netbox/utilities/fields.py b/netbox/utilities/fields.py
index 2b1a51048..d0a0c2180 100644
--- a/netbox/utilities/fields.py
+++ b/netbox/utilities/fields.py
@@ -5,7 +5,6 @@ from django.db import models
from .forms import ColorSelect
-
validate_color = RegexValidator('^[0-9a-f]{6}$', 'Enter a valid hexadecimal RGB color code.', 'invalid')
diff --git a/netbox/utilities/filters.py b/netbox/utilities/filters.py
index de671cd0a..647ecb723 100644
--- a/netbox/utilities/filters.py
+++ b/netbox/utilities/filters.py
@@ -1,8 +1,8 @@
from __future__ import unicode_literals
-import django_filters
import itertools
+import django_filters
from django import forms
from django.utils.encoding import force_text
diff --git a/netbox/utilities/forms.py b/netbox/utilities/forms.py
index f63c0c11d..6ba49d02c 100644
--- a/netbox/utilities/forms.py
+++ b/netbox/utilities/forms.py
@@ -1,17 +1,16 @@
from __future__ import unicode_literals
+
import csv
import itertools
import re
-from mptt.forms import TreeNodeMultipleChoiceField
-
from django import forms
from django.conf import settings
from django.urls import reverse_lazy
+from mptt.forms import TreeNodeMultipleChoiceField
from .validators import EnhancedURLValidator
-
COLOR_CHOICES = (
('aa1409', 'Dark red'),
('f44336', 'Red'),
diff --git a/netbox/utilities/middleware.py b/netbox/utilities/middleware.py
index 927855e0e..b9c95fc5e 100644
--- a/netbox/utilities/middleware.py
+++ b/netbox/utilities/middleware.py
@@ -1,4 +1,5 @@
from __future__ import unicode_literals
+
import sys
from django.conf import settings
@@ -7,7 +8,6 @@ from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
-
BASE_PATH = getattr(settings, 'BASE_PATH', False)
LOGIN_REQUIRED = getattr(settings, 'LOGIN_REQUIRED', False)
diff --git a/netbox/utilities/tables.py b/netbox/utilities/tables.py
index d4c68c54f..30a88f72e 100644
--- a/netbox/utilities/tables.py
+++ b/netbox/utilities/tables.py
@@ -1,7 +1,6 @@
from __future__ import unicode_literals
import django_tables2 as tables
-
from django.utils.safestring import mark_safe
diff --git a/netbox/utilities/templatetags/helpers.py b/netbox/utilities/templatetags/helpers.py
index 23fcfcca5..ea6cd1173 100644
--- a/netbox/utilities/templatetags/helpers.py
+++ b/netbox/utilities/templatetags/helpers.py
@@ -1,10 +1,8 @@
from __future__ import unicode_literals
-from markdown import markdown
-
from django import template
from django.utils.safestring import mark_safe
-
+from markdown import markdown
register = template.Library()
diff --git a/netbox/utilities/utils.py b/netbox/utilities/utils.py
index 3e9364419..72da778a5 100644
--- a/netbox/utilities/utils.py
+++ b/netbox/utilities/utils.py
@@ -1,4 +1,5 @@
from __future__ import unicode_literals
+
import six
diff --git a/netbox/utilities/validators.py b/netbox/utilities/validators.py
index b5b058111..8eb990486 100644
--- a/netbox/utilities/validators.py
+++ b/netbox/utilities/validators.py
@@ -1,4 +1,5 @@
from __future__ import unicode_literals
+
import re
from django.core.validators import _lazy_re_compile, URLValidator
diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py
index d7b82236c..d8ba3712a 100644
--- a/netbox/utilities/views.py
+++ b/netbox/utilities/views.py
@@ -1,9 +1,8 @@
from __future__ import unicode_literals
+
from collections import OrderedDict
from copy import deepcopy
-from django_tables2 import RequestConfig
-
from django.conf import settings
from django.contrib import messages
from django.contrib.contenttypes.models import ContentType
@@ -19,6 +18,7 @@ from django.utils.html import escape
from django.utils.http import is_safe_url
from django.utils.safestring import mark_safe
from django.views.generic import View
+from django_tables2 import RequestConfig
from extras.models import CustomField, CustomFieldValue, ExportTemplate, UserAction
from utilities.forms import BootstrapMixin, CSVDataField
diff --git a/netbox/virtualization/constants.py b/netbox/virtualization/constants.py
index f1d9e6c39..6324fb785 100644
--- a/netbox/virtualization/constants.py
+++ b/netbox/virtualization/constants.py
@@ -2,7 +2,6 @@ from __future__ import unicode_literals
from dcim.constants import STATUS_ACTIVE, STATUS_OFFLINE, STATUS_STAGED
-
# VirtualMachine statuses (replicated from Device statuses)
STATUS_CHOICES = [
[STATUS_ACTIVE, 'Active'],
diff --git a/netbox/virtualization/filters.py b/netbox/virtualization/filters.py
index c661bc973..1000f2ab4 100644
--- a/netbox/virtualization/filters.py
+++ b/netbox/virtualization/filters.py
@@ -1,11 +1,10 @@
from __future__ import unicode_literals
import django_filters
+from django.db.models import Q
from netaddr import EUI
from netaddr.core import AddrFormatError
-from django.db.models import Q
-
from dcim.models import DeviceRole, Interface, Platform, Site
from extras.filters import CustomFieldFilterSet
from tenancy.models import Tenant
diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py
index 9a7185f94..01d8b5765 100644
--- a/netbox/virtualization/forms.py
+++ b/netbox/virtualization/forms.py
@@ -1,10 +1,9 @@
from __future__ import unicode_literals
-from mptt.forms import TreeNodeChoiceField
-
from django import forms
from django.core.exceptions import ValidationError
from django.db.models import Count
+from mptt.forms import TreeNodeChoiceField
from dcim.constants import IFACE_FF_VIRTUAL
from dcim.formfields import MACAddressFormField
@@ -20,7 +19,6 @@ from utilities.forms import (
from .constants import STATUS_CHOICES
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
-
VIFACE_FF_CHOICES = (
(IFACE_FF_VIRTUAL, 'Virtual'),
)
diff --git a/netbox/virtualization/tables.py b/netbox/virtualization/tables.py
index a8f9068ac..0498edd46 100644
--- a/netbox/virtualization/tables.py
+++ b/netbox/virtualization/tables.py
@@ -7,7 +7,6 @@ from dcim.models import Interface
from utilities.tables import BaseTable, ToggleColumn
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
-
CLUSTERTYPE_ACTIONS = """
{% if perms.virtualization.change_clustertype %}
diff --git a/netbox/virtualization/tests/test_api.py b/netbox/virtualization/tests/test_api.py
index 9d3e01091..f83e0ea58 100644
--- a/netbox/virtualization/tests/test_api.py
+++ b/netbox/virtualization/tests/test_api.py
@@ -1,10 +1,9 @@
from __future__ import unicode_literals
-from rest_framework import status
-from rest_framework.test import APITestCase
-
from django.contrib.auth.models import User
from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
from users.models import Token
from utilities.tests import HttpStatusMixin
diff --git a/netbox/virtualization/urls.py b/netbox/virtualization/urls.py
index ca794cdd8..2ba0daff7 100644
--- a/netbox/virtualization/urls.py
+++ b/netbox/virtualization/urls.py
@@ -5,7 +5,6 @@ from django.conf.urls import url
from ipam.views import ServiceCreateView
from . import views
-
app_name = 'virtualization'
urlpatterns = [
diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py
index 00f59f8d4..4f2981748 100644
--- a/netbox/virtualization/views.py
+++ b/netbox/virtualization/views.py
@@ -14,10 +14,8 @@ from utilities.views import (
BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, ComponentDeleteView,
ComponentEditView, ObjectDeleteView, ObjectEditView, ObjectListView,
)
+from . import filters, forms, tables
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
-from . import filters
-from . import forms
-from . import tables
#