Browse Source

Closes #1691: Cleaned up and reorganized import statements

Jeremy Stretch 7 years ago
parent
commit
00986fd7bf
83 changed files with 158 additions and 218 deletions
  1. 2 3
      netbox/circuits/api/views.py
  2. 0 1
      netbox/circuits/filters.py
  3. 0 1
      netbox/circuits/forms.py
  4. 1 1
      netbox/circuits/models.py
  5. 1 3
      netbox/circuits/tables.py
  6. 6 5
      netbox/circuits/tests/test_api.py
  7. 0 1
      netbox/circuits/urls.py
  8. 2 1
      netbox/circuits/views.py
  9. 10 6
      netbox/dcim/api/serializers.py
  10. 9 7
      netbox/dcim/api/views.py
  11. 8 7
      netbox/dcim/filters.py
  12. 1 2
      netbox/dcim/formfields.py
  13. 10 8
      netbox/dcim/forms.py
  14. 2 2
      netbox/dcim/models.py
  15. 0 1
      netbox/dcim/tables.py
  16. 6 6
      netbox/dcim/tests/test_api.py
  17. 1 2
      netbox/dcim/urls.py
  18. 8 6
      netbox/dcim/views.py
  19. 5 6
      netbox/extras/api/customfields.py
  20. 2 4
      netbox/extras/api/serializers.py
  21. 3 4
      netbox/extras/api/views.py
  22. 2 2
      netbox/extras/filters.py
  23. 3 4
      netbox/extras/forms.py
  24. 0 1
      netbox/extras/management/commands/nbshell.py
  25. 2 2
      netbox/extras/management/commands/run_inventory.py
  26. 0 1
      netbox/extras/management/commands/runreport.py
  27. 2 1
      netbox/extras/models.py
  28. 2 1
      netbox/extras/reports.py
  29. 2 2
      netbox/extras/rpc.py
  30. 4 4
      netbox/extras/tests/test_api.py
  31. 5 7
      netbox/extras/tests/test_customfields.py
  32. 0 1
      netbox/extras/urls.py
  33. 1 1
      netbox/extras/views.py
  34. 4 3
      netbox/ipam/api/serializers.py
  35. 4 5
      netbox/ipam/api/views.py
  36. 1 2
      netbox/ipam/fields.py
  37. 3 6
      netbox/ipam/filters.py
  38. 1 2
      netbox/ipam/formfields.py
  39. 2 5
      netbox/ipam/forms.py
  40. 1 1
      netbox/ipam/models.py
  41. 0 1
      netbox/ipam/tables.py
  42. 4 6
      netbox/ipam/tests/test_api.py
  43. 0 1
      netbox/ipam/tests/test_models.py
  44. 3 7
      netbox/ipam/views.py
  45. 0 1
      netbox/netbox/forms.py
  46. 1 3
      netbox/netbox/urls.py
  47. 4 6
      netbox/netbox/views.py
  48. 0 9
      netbox/netbox/wsgi.py
  49. 2 3
      netbox/secrets/api/views.py
  50. 1 2
      netbox/secrets/filters.py
  51. 0 1
      netbox/secrets/forms.py
  52. 1 1
      netbox/secrets/models.py
  53. 0 2
      netbox/secrets/tables.py
  54. 3 4
      netbox/secrets/tests/test_api.py
  55. 1 2
      netbox/secrets/tests/test_models.py
  56. 0 1
      netbox/secrets/urls.py
  57. 1 0
      netbox/secrets/views.py
  58. 0 1
      netbox/tenancy/filters.py
  59. 0 2
      netbox/tenancy/tables.py
  60. 2 3
      netbox/tenancy/tests/test_api.py
  61. 0 1
      netbox/tenancy/urls.py
  62. 1 1
      netbox/tenancy/views.py
  63. 0 1
      netbox/users/api/serializers.py
  64. 1 1
      netbox/users/forms.py
  65. 2 1
      netbox/users/models.py
  66. 0 1
      netbox/users/urls.py
  67. 1 2
      netbox/utilities/api.py
  68. 0 1
      netbox/utilities/fields.py
  69. 1 1
      netbox/utilities/filters.py
  70. 2 3
      netbox/utilities/forms.py
  71. 1 1
      netbox/utilities/middleware.py
  72. 0 1
      netbox/utilities/tables.py
  73. 1 3
      netbox/utilities/templatetags/helpers.py
  74. 1 0
      netbox/utilities/utils.py
  75. 1 0
      netbox/utilities/validators.py
  76. 2 2
      netbox/utilities/views.py
  77. 0 1
      netbox/virtualization/constants.py
  78. 1 2
      netbox/virtualization/filters.py
  79. 1 3
      netbox/virtualization/forms.py
  80. 0 1
      netbox/virtualization/tables.py
  81. 2 3
      netbox/virtualization/tests/test_api.py
  82. 0 1
      netbox/virtualization/urls.py
  83. 1 3
      netbox/virtualization/views.py

+ 2 - 3
netbox/circuits/api/views.py

@@ -1,16 +1,15 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
+from django.shortcuts import get_object_or_404
 from rest_framework.decorators import detail_route
 from rest_framework.decorators import detail_route
 from rest_framework.response import Response
 from rest_framework.response import Response
 from rest_framework.viewsets import ModelViewSet
 from rest_framework.viewsets import ModelViewSet
 
 
-from django.shortcuts import get_object_or_404
-
 from circuits import filters
 from circuits import filters
 from circuits.models import Provider, CircuitTermination, CircuitType, Circuit
 from circuits.models import Provider, CircuitTermination, CircuitType, Circuit
-from extras.models import Graph, GRAPH_TYPE_PROVIDER
 from extras.api.serializers import RenderedGraphSerializer
 from extras.api.serializers import RenderedGraphSerializer
 from extras.api.views import CustomFieldModelViewSet
 from extras.api.views import CustomFieldModelViewSet
+from extras.models import Graph, GRAPH_TYPE_PROVIDER
 from utilities.api import FieldChoicesViewSet, WritableSerializerMixin
 from utilities.api import FieldChoicesViewSet, WritableSerializerMixin
 from . import serializers
 from . import serializers
 
 

+ 0 - 1
netbox/circuits/filters.py

@@ -1,7 +1,6 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_filters
 import django_filters
-
 from django.db.models import Q
 from django.db.models import Q
 
 
 from dcim.models import Site
 from dcim.models import Site

+ 0 - 1
netbox/circuits/forms.py

@@ -11,7 +11,6 @@ from utilities.forms import (
     APISelect, BootstrapMixin, ChainedFieldsMixin, ChainedModelChoiceField, CommentField, FilterChoiceField,
     APISelect, BootstrapMixin, ChainedFieldsMixin, ChainedModelChoiceField, CommentField, FilterChoiceField,
     SmallTextarea, SlugField,
     SmallTextarea, SlugField,
 )
 )
-
 from .models import Circuit, CircuitTermination, CircuitType, Provider
 from .models import Circuit, CircuitTermination, CircuitType, Provider
 
 
 
 

+ 1 - 1
netbox/circuits/models.py

@@ -8,8 +8,8 @@ from django.utils.encoding import python_2_unicode_compatible
 from dcim.fields import ASNField
 from dcim.fields import ASNField
 from extras.models import CustomFieldModel, CustomFieldValue
 from extras.models import CustomFieldModel, CustomFieldValue
 from tenancy.models import Tenant
 from tenancy.models import Tenant
-from utilities.utils import csv_format
 from utilities.models import CreatedUpdatedModel
 from utilities.models import CreatedUpdatedModel
+from utilities.utils import csv_format
 from .constants import *
 from .constants import *
 
 
 
 

+ 1 - 3
netbox/circuits/tables.py

@@ -1,14 +1,12 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_tables2 as tables
 import django_tables2 as tables
-from django_tables2.utils import Accessor
-
 from django.utils.safestring import mark_safe
 from django.utils.safestring import mark_safe
+from django_tables2.utils import Accessor
 
 
 from utilities.tables import BaseTable, ToggleColumn
 from utilities.tables import BaseTable, ToggleColumn
 from .models import Circuit, CircuitType, Provider
 from .models import Circuit, CircuitType, Provider
 
 
-
 CIRCUITTYPE_ACTIONS = """
 CIRCUITTYPE_ACTIONS = """
 {% if perms.circuit.change_circuittype %}
 {% if perms.circuit.change_circuittype %}
     <a href="{% url 'circuits:circuittype_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
     <a href="{% url 'circuits:circuittype_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>

+ 6 - 5
netbox/circuits/tests/test_api.py

@@ -1,14 +1,15 @@
 from __future__ import unicode_literals
 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.contrib.auth.models import User
 from django.urls import reverse
 from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
 
 
+from circuits.constants import TERM_SIDE_A, TERM_SIDE_Z
+from circuits.models import Circuit, CircuitTermination, CircuitType, Provider
 from dcim.models import Site
 from dcim.models import Site
-from extras.models import Graph, GRAPH_TYPE_PROVIDER
-from circuits.models import Circuit, CircuitTermination, CircuitType, Provider, TERM_SIDE_A, TERM_SIDE_Z
+from extras.constants import GRAPH_TYPE_PROVIDER
+from extras.models import Graph
 from users.models import Token
 from users.models import Token
 from utilities.tests import HttpStatusMixin
 from utilities.tests import HttpStatusMixin
 
 

+ 0 - 1
netbox/circuits/urls.py

@@ -4,7 +4,6 @@ from django.conf.urls import url
 
 
 from . import views
 from . import views
 
 
-
 app_name = 'circuits'
 app_name = 'circuits'
 urlpatterns = [
 urlpatterns = [
 
 

+ 2 - 1
netbox/circuits/views.py

@@ -15,7 +15,8 @@ from utilities.views import (
     BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
     BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
 )
 )
 from . import filters, forms, tables
 from . import filters, forms, tables
-from .models import Circuit, CircuitTermination, CircuitType, Provider, TERM_SIDE_A, TERM_SIDE_Z
+from .constants import TERM_SIDE_A, TERM_SIDE_Z
+from .models import Circuit, CircuitTermination, CircuitType, Provider
 
 
 
 
 #
 #

+ 10 - 6
netbox/dcim/api/serializers.py

@@ -1,19 +1,23 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 from collections import OrderedDict
 from collections import OrderedDict
 
 
 from rest_framework import serializers
 from rest_framework import serializers
 from rest_framework.validators import UniqueTogetherValidator
 from rest_framework.validators import UniqueTogetherValidator
 
 
-from ipam.models import IPAddress
 from circuits.models import Circuit, CircuitTermination
 from circuits.models import Circuit, CircuitTermination
+from dcim.constants import (
+    CONNECTION_STATUS_CHOICES, IFACE_FF_CHOICES, IFACE_ORDERING_CHOICES, RACK_FACE_CHOICES, RACK_TYPE_CHOICES,
+    RACK_WIDTH_CHOICES, STATUS_CHOICES, SUBDEVICE_ROLE_CHOICES,
+)
 from dcim.models import (
 from dcim.models import (
-    CONNECTION_STATUS_CHOICES, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device,
-    DeviceBay, DeviceBayTemplate, DeviceType, DeviceRole, IFACE_FF_CHOICES, IFACE_ORDERING_CHOICES, Interface,
-    InterfaceConnection, InterfaceTemplate, Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate,
-    PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, RACK_FACE_CHOICES, RACK_TYPE_CHOICES,
-    RACK_WIDTH_CHOICES, Region, Site, STATUS_CHOICES, SUBDEVICE_ROLE_CHOICES,
+    ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
+    DeviceBayTemplate, DeviceType, DeviceRole, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
+    InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
+    RackReservation, RackRole, Region, Site,
 )
 )
 from extras.api.customfields import CustomFieldModelSerializer
 from extras.api.customfields import CustomFieldModelSerializer
+from ipam.models import IPAddress
 from tenancy.api.serializers import NestedTenantSerializer
 from tenancy.api.serializers import NestedTenantSerializer
 from utilities.api import ChoiceFieldSerializer, ValidatedModelSerializer
 from utilities.api import ChoiceFieldSerializer, ValidatedModelSerializer
 from virtualization.models import Cluster
 from virtualization.models import Cluster

+ 9 - 7
netbox/dcim/api/views.py

@@ -1,28 +1,30 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 from collections import OrderedDict
 from collections import OrderedDict
 
 
+from django.conf import settings
+from django.http import HttpResponseBadRequest, HttpResponseForbidden
+from django.shortcuts import get_object_or_404
 from rest_framework.decorators import detail_route
 from rest_framework.decorators import detail_route
 from rest_framework.mixins import ListModelMixin
 from rest_framework.mixins import ListModelMixin
 from rest_framework.response import Response
 from rest_framework.response import Response
 from rest_framework.viewsets import GenericViewSet, ModelViewSet, ViewSet
 from rest_framework.viewsets import GenericViewSet, ModelViewSet, ViewSet
 
 
-from django.conf import settings
-from django.http import HttpResponseBadRequest, HttpResponseForbidden
-from django.shortcuts import get_object_or_404
-
+from dcim import filters
 from dcim.models import (
 from dcim.models import (
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
     DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
     InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
     InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
     RackReservation, RackRole, Region, Site,
     RackReservation, RackRole, Region, Site,
 )
 )
-from dcim import filters
 from extras.api.serializers import RenderedGraphSerializer
 from extras.api.serializers import RenderedGraphSerializer
 from extras.api.views import CustomFieldModelViewSet
 from extras.api.views import CustomFieldModelViewSet
 from extras.models import Graph, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
 from extras.models import Graph, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
-from utilities.api import IsAuthenticatedOrLoginNotRequired, FieldChoicesViewSet, ServiceUnavailable, WritableSerializerMixin
-from .exceptions import MissingFilterException
+from utilities.api import (
+    IsAuthenticatedOrLoginNotRequired, FieldChoicesViewSet, ServiceUnavailable, WritableSerializerMixin,
+)
 from . import serializers
 from . import serializers
+from .exceptions import MissingFilterException
 
 
 
 
 #
 #

+ 8 - 7
netbox/dcim/filters.py

@@ -1,22 +1,23 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_filters
 import django_filters
-from netaddr import EUI
-from netaddr.core import AddrFormatError
-
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.db.models import Q
 from django.db.models import Q
+from netaddr import EUI
+from netaddr.core import AddrFormatError
 
 
 from extras.filters import CustomFieldFilterSet
 from extras.filters import CustomFieldFilterSet
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from utilities.filters import NullableCharFieldFilter, NumericInFilter
 from utilities.filters import NullableCharFieldFilter, NumericInFilter
 from virtualization.models import Cluster
 from virtualization.models import Cluster
+from .constants import (
+    IFACE_FF_LAG, NONCONNECTABLE_IFACE_TYPES, STATUS_CHOICES, VIRTUAL_IFACE_TYPES, WIRELESS_IFACE_TYPES,
+)
 from .models import (
 from .models import (
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
-    DeviceBayTemplate, DeviceRole, DeviceType, STATUS_CHOICES, IFACE_FF_LAG, Interface, InterfaceConnection,
-    InterfaceTemplate, Manufacturer, InventoryItem, NONCONNECTABLE_IFACE_TYPES, Platform, PowerOutlet,
-    PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, Region, Site,
-    VIRTUAL_IFACE_TYPES, WIRELESS_IFACE_TYPES,
+    DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
+    InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
+    RackReservation, RackRole, Region, Site,
 )
 )
 
 
 
 

+ 1 - 2
netbox/dcim/formfields.py

@@ -1,9 +1,8 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from netaddr import EUI, AddrFormatError
-
 from django import forms
 from django import forms
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
+from netaddr import EUI, AddrFormatError
 
 
 
 
 #
 #

+ 10 - 8
netbox/dcim/forms.py

@@ -1,12 +1,12 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from mptt.forms import TreeNodeChoiceField
 import re
 import re
 
 
 from django import forms
 from django import forms
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.contrib.postgres.forms.array import SimpleArrayField
 from django.contrib.postgres.forms.array import SimpleArrayField
 from django.db.models import Count, Q
 from django.db.models import Count, Q
+from mptt.forms import TreeNodeChoiceField
 
 
 from extras.forms import CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
 from extras.forms import CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
 from ipam.models import IPAddress
 from ipam.models import IPAddress
@@ -19,17 +19,19 @@ from utilities.forms import (
     SlugField, FilterTreeNodeMultipleChoiceField,
     SlugField, FilterTreeNodeMultipleChoiceField,
 )
 )
 from virtualization.models import Cluster
 from virtualization.models import Cluster
+from .constants import (
+    CONNECTION_STATUS_CHOICES, CONNECTION_STATUS_CONNECTED, IFACE_FF_CHOICES, IFACE_FF_LAG, IFACE_ORDERING_CHOICES,
+    RACK_FACE_CHOICES, RACK_TYPE_CHOICES, RACK_WIDTH_CHOICES, RACK_WIDTH_19IN, RACK_WIDTH_23IN, STATUS_CHOICES,
+    SUBDEVICE_ROLE_CHILD, SUBDEVICE_ROLE_PARENT, SUBDEVICE_ROLE_CHOICES,
+)
 from .formfields import MACAddressFormField
 from .formfields import MACAddressFormField
 from .models import (
 from .models import (
-    DeviceBay, DeviceBayTemplate, CONNECTION_STATUS_CHOICES, CONNECTION_STATUS_CONNECTED, ConsolePort,
-    ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceRole, DeviceType, Interface,
-    IFACE_FF_CHOICES, IFACE_FF_LAG, IFACE_ORDERING_CHOICES, InterfaceConnection, InterfaceTemplate, Manufacturer,
-    InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, RACK_FACE_CHOICES,
-    RACK_TYPE_CHOICES, RACK_WIDTH_CHOICES, Rack, RackGroup, RackReservation, RackRole, RACK_WIDTH_19IN, RACK_WIDTH_23IN,
-    Region, Site, STATUS_CHOICES, SUBDEVICE_ROLE_CHILD, SUBDEVICE_ROLE_PARENT, SUBDEVICE_ROLE_CHOICES,
+    DeviceBay, DeviceBayTemplate, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate,
+    Device, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, InventoryItem,
+    Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation,
+    RackRole, Region, Site,
 )
 )
 
 
-
 DEVICE_BY_PK_RE = '{\d+\}'
 DEVICE_BY_PK_RE = '{\d+\}'
 
 
 
 

+ 2 - 2
netbox/dcim/models.py

@@ -1,9 +1,8 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 from collections import OrderedDict
 from collections import OrderedDict
 from itertools import count, groupby
 from itertools import count, groupby
 
 
-from mptt.models import MPTTModel, TreeForeignKey
-
 from django.conf import settings
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.contrib.contenttypes.fields import GenericRelation
 from django.contrib.contenttypes.fields import GenericRelation
@@ -14,6 +13,7 @@ from django.db import models
 from django.db.models import Count, Q, ObjectDoesNotExist
 from django.db.models import Count, Q, ObjectDoesNotExist
 from django.urls import reverse
 from django.urls import reverse
 from django.utils.encoding import python_2_unicode_compatible
 from django.utils.encoding import python_2_unicode_compatible
+from mptt.models import MPTTModel, TreeForeignKey
 
 
 from circuits.models import Circuit
 from circuits.models import Circuit
 from extras.models import CustomFieldModel, CustomFieldValue, ImageAttachment
 from extras.models import CustomFieldModel, CustomFieldValue, ImageAttachment

+ 0 - 1
netbox/dcim/tables.py

@@ -10,7 +10,6 @@ from .models import (
     PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, Region, Site,
     PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, Region, Site,
 )
 )
 
 
-
 REGION_LINK = """
 REGION_LINK = """
 {% if record.get_children %}
 {% if record.get_children %}
     <span style="padding-left: {{ record.get_ancestors|length }}0px "><i class="fa fa-caret-right"></i>
     <span style="padding-left: {{ record.get_ancestors|length }}0px "><i class="fa fa-caret-right"></i>

+ 6 - 6
netbox/dcim/tests/test_api.py

@@ -1,16 +1,16 @@
 from __future__ import unicode_literals
 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.contrib.auth.models import User
 from django.urls import reverse
 from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
 
 
+from dcim.constants import IFACE_FF_LAG, SUBDEVICE_ROLE_CHILD, SUBDEVICE_ROLE_PARENT
 from dcim.models import (
 from dcim.models import (
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
-    DeviceBayTemplate, DeviceRole, DeviceType, IFACE_FF_LAG, Interface, InterfaceConnection, InterfaceTemplate,
-    Manufacturer, InventoryItem, Platform, PowerPort, PowerPortTemplate, PowerOutlet, PowerOutletTemplate, Rack, RackGroup,
-    RackReservation, RackRole, Region, Site, SUBDEVICE_ROLE_CHILD, SUBDEVICE_ROLE_PARENT,
+    DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
+    InventoryItem, Platform, PowerPort, PowerPortTemplate, PowerOutlet, PowerOutletTemplate, Rack, RackGroup,
+    RackReservation, RackRole, Region, Site,
 )
 )
 from extras.models import Graph, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
 from extras.models import Graph, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
 from users.models import Token
 from users.models import Token

+ 1 - 2
netbox/dcim/urls.py

@@ -5,9 +5,8 @@ from django.conf.urls import url
 from extras.views import ImageAttachmentEditView
 from extras.views import ImageAttachmentEditView
 from ipam.views import ServiceCreateView
 from ipam.views import ServiceCreateView
 from secrets.views import secret_add
 from secrets.views import secret_add
-from .models import Device, Rack, Site
 from . import views
 from . import views
-
+from .models import Device, Rack, Site
 
 
 app_name = 'dcim'
 app_name = 'dcim'
 urlpatterns = [
 urlpatterns = [

+ 8 - 6
netbox/dcim/views.py

@@ -1,5 +1,5 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
-from natsort import natsorted
+
 from operator import attrgetter
 from operator import attrgetter
 
 
 from django.contrib import messages
 from django.contrib import messages
@@ -14,10 +14,11 @@ from django.utils.html import escape
 from django.utils.http import urlencode
 from django.utils.http import urlencode
 from django.utils.safestring import mark_safe
 from django.utils.safestring import mark_safe
 from django.views.generic import View
 from django.views.generic import View
+from natsort import natsorted
 
 
-from ipam.models import Prefix, Service, VLAN
 from circuits.models import Circuit
 from circuits.models import Circuit
 from extras.models import Graph, TopologyMap, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE, UserAction
 from extras.models import Graph, TopologyMap, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE, UserAction
+from ipam.models import Prefix, Service, VLAN
 from utilities.forms import ConfirmationForm
 from utilities.forms import ConfirmationForm
 from utilities.paginator import EnhancedPaginator
 from utilities.paginator import EnhancedPaginator
 from utilities.views import (
 from utilities.views import (
@@ -25,11 +26,12 @@ from utilities.views import (
     ComponentEditView, ObjectDeleteView, ObjectEditView, ObjectListView,
     ComponentEditView, ObjectDeleteView, ObjectEditView, ObjectListView,
 )
 )
 from . import filters, forms, tables
 from . import filters, forms, tables
+from .constants import CONNECTION_STATUS_CONNECTED
 from .models import (
 from .models import (
-    CONNECTION_STATUS_CONNECTED, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device,
-    DeviceBay, DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate,
-    Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
-    RackGroup, RackReservation, RackRole, Region, Site,
+    ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
+    DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
+    InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
+    RackReservation, RackRole, Region, Site,
 )
 )
 
 
 
 

+ 5 - 6
netbox/extras/api/customfields.py

@@ -1,15 +1,14 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
-from datetime import datetime
 
 
-from rest_framework import serializers
-from rest_framework.exceptions import ValidationError
+from datetime import datetime
 
 
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.db import transaction
 from django.db import transaction
+from rest_framework import serializers
+from rest_framework.exceptions import ValidationError
 
 
-from extras.models import (
-    CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_SELECT, CustomField, CustomFieldChoice, CustomFieldValue,
-)
+from extras.constants import CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_SELECT
+from extras.models import CustomField, CustomFieldChoice, CustomFieldValue
 from utilities.api import ValidatedModelSerializer
 from utilities.api import ValidatedModelSerializer
 
 
 
 

+ 2 - 4
netbox/extras/api/serializers.py

@@ -1,14 +1,12 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 from django.core.exceptions import ObjectDoesNotExist
 from django.core.exceptions import ObjectDoesNotExist
-
 from rest_framework import serializers
 from rest_framework import serializers
 
 
 from dcim.api.serializers import NestedDeviceSerializer, NestedRackSerializer, NestedSiteSerializer
 from dcim.api.serializers import NestedDeviceSerializer, NestedRackSerializer, NestedSiteSerializer
 from dcim.models import Device, Rack, Site
 from dcim.models import Device, Rack, Site
-from extras.models import (
-    ACTION_CHOICES, ExportTemplate, Graph, GRAPH_TYPE_CHOICES, ImageAttachment, ReportResult, TopologyMap, UserAction,
-)
+from extras.constants import ACTION_CHOICES, GRAPH_TYPE_CHOICES
+from extras.models import ExportTemplate, Graph, ImageAttachment, ReportResult, TopologyMap, UserAction
 from users.api.serializers import NestedUserSerializer
 from users.api.serializers import NestedUserSerializer
 from utilities.api import ChoiceFieldSerializer, ContentTypeFieldSerializer, ValidatedModelSerializer
 from utilities.api import ChoiceFieldSerializer, ContentTypeFieldSerializer, ValidatedModelSerializer
 
 

+ 3 - 4
netbox/extras/api/views.py

@@ -1,14 +1,13 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
+from django.contrib.contenttypes.models import ContentType
+from django.http import Http404, HttpResponse
+from django.shortcuts import get_object_or_404
 from rest_framework.decorators import detail_route
 from rest_framework.decorators import detail_route
 from rest_framework.exceptions import PermissionDenied
 from rest_framework.exceptions import PermissionDenied
 from rest_framework.response import Response
 from rest_framework.response import Response
 from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet, ViewSet
 from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet, ViewSet
 
 
-from django.contrib.contenttypes.models import ContentType
-from django.http import Http404, HttpResponse
-from django.shortcuts import get_object_or_404
-
 from extras import filters
 from extras import filters
 from extras.models import CustomField, ExportTemplate, Graph, ImageAttachment, ReportResult, TopologyMap, UserAction
 from extras.models import CustomField, ExportTemplate, Graph, ImageAttachment, ReportResult, TopologyMap, UserAction
 from extras.reports import get_report, get_reports
 from extras.reports import get_report, get_reports

+ 2 - 2
netbox/extras/filters.py

@@ -1,12 +1,12 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_filters
 import django_filters
-
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 
 
 from dcim.models import Site
 from dcim.models import Site
-from .models import CF_TYPE_SELECT, CustomField, Graph, ExportTemplate, TopologyMap, UserAction
+from .constants import CF_TYPE_SELECT
+from .models import CustomField, Graph, ExportTemplate, TopologyMap, UserAction
 
 
 
 
 class CustomFieldFilter(django_filters.Filter):
 class CustomFieldFilter(django_filters.Filter):

+ 3 - 4
netbox/extras/forms.py

@@ -1,14 +1,13 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 from collections import OrderedDict
 from collections import OrderedDict
 
 
 from django import forms
 from django import forms
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 
 
 from utilities.forms import BootstrapMixin, BulkEditForm, LaxURLField
 from utilities.forms import BootstrapMixin, BulkEditForm, LaxURLField
-from .models import (
-    CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_INTEGER, CF_TYPE_SELECT, CF_TYPE_URL, CustomField, CustomFieldValue,
-    ImageAttachment,
-)
+from .constants import CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_INTEGER, CF_TYPE_SELECT, CF_TYPE_URL
+from .models import CustomField, CustomFieldValue, ImageAttachment
 
 
 
 
 def get_custom_fields_for_model(content_type, filterable_only=False, bulk_edit=False):
 def get_custom_fields_for_model(content_type, filterable_only=False, bulk_edit=False):

+ 0 - 1
netbox/extras/management/commands/nbshell.py

@@ -10,7 +10,6 @@ from django.conf import settings
 from django.core.management.base import BaseCommand
 from django.core.management.base import BaseCommand
 from django.db.models import Model
 from django.db.models import Model
 
 
-
 APPS = ['circuits', 'dcim', 'extras', 'ipam', 'secrets', 'tenancy', 'users', 'virtualization']
 APPS = ['circuits', 'dcim', 'extras', 'ipam', 'secrets', 'tenancy', 'users', 'virtualization']
 
 
 BANNER_TEXT = """### NetBox interactive shell ({node})
 BANNER_TEXT = """### NetBox interactive shell ({node})

+ 2 - 2
netbox/extras/management/commands/run_inventory.py

@@ -1,12 +1,12 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 from getpass import getpass
 from getpass import getpass
-from ncclient.transport.errors import AuthenticationError
-from paramiko import AuthenticationException
 
 
 from django.conf import settings
 from django.conf import settings
 from django.core.management.base import BaseCommand, CommandError
 from django.core.management.base import BaseCommand, CommandError
 from django.db import transaction
 from django.db import transaction
+from ncclient.transport.errors import AuthenticationError
+from paramiko import AuthenticationException
 
 
 from dcim.models import Device, InventoryItem, Site, STATUS_ACTIVE
 from dcim.models import Device, InventoryItem, Site, STATUS_ACTIVE
 
 

+ 0 - 1
netbox/extras/management/commands/runreport.py

@@ -3,7 +3,6 @@ from __future__ import unicode_literals
 from django.core.management.base import BaseCommand
 from django.core.management.base import BaseCommand
 from django.utils import timezone
 from django.utils import timezone
 
 
-from extras.models import ReportResult
 from extras.reports import get_reports
 from extras.reports import get_reports
 
 
 
 

+ 2 - 1
netbox/extras/models.py

@@ -1,8 +1,9 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 from collections import OrderedDict
 from collections import OrderedDict
 from datetime import date
 from datetime import date
-import graphviz
 
 
+import graphviz
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType

+ 2 - 1
netbox/extras/reports.py

@@ -1,8 +1,9 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
-from collections import OrderedDict
+
 import importlib
 import importlib
 import inspect
 import inspect
 import pkgutil
 import pkgutil
+from collections import OrderedDict
 
 
 from django.conf import settings
 from django.conf import settings
 from django.utils import timezone
 from django.utils import timezone

+ 2 - 2
netbox/extras/rpc.py

@@ -1,11 +1,11 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import re
 import re
 import time
 import time
 
 
-from ncclient import manager
 import paramiko
 import paramiko
 import xmltodict
 import xmltodict
-
+from ncclient import manager
 
 
 CONNECT_TIMEOUT = 5  # seconds
 CONNECT_TIMEOUT = 5  # seconds
 
 

+ 4 - 4
netbox/extras/tests/test_api.py

@@ -1,14 +1,14 @@
 from __future__ import unicode_literals
 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.contrib.auth.models import User
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.urls import reverse
 from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
 
 
 from dcim.models import Device
 from dcim.models import Device
-from extras.models import Graph, GRAPH_TYPE_SITE, ExportTemplate
+from extras.constants import GRAPH_TYPE_SITE
+from extras.models import Graph, ExportTemplate
 from users.models import Token
 from users.models import Token
 from utilities.tests import HttpStatusMixin
 from utilities.tests import HttpStatusMixin
 
 

+ 5 - 7
netbox/extras/tests/test_customfields.py

@@ -1,19 +1,17 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
-from datetime import date
 
 
-from rest_framework import status
-from rest_framework.test import APITestCase
+from datetime import date
 
 
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.test import TestCase
 from django.test import TestCase
 from django.urls import reverse
 from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
 
 
 from dcim.models import Site
 from dcim.models import Site
-from extras.models import (
-    CustomField, CustomFieldValue, CustomFieldChoice, CF_TYPE_TEXT, CF_TYPE_INTEGER, CF_TYPE_BOOLEAN, CF_TYPE_DATE,
-    CF_TYPE_SELECT, CF_TYPE_URL,
-)
+from extras.constants import CF_TYPE_TEXT, CF_TYPE_INTEGER, CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_SELECT, CF_TYPE_URL
+from extras.models import CustomField, CustomFieldValue, CustomFieldChoice
 from users.models import Token
 from users.models import Token
 from utilities.tests import HttpStatusMixin
 from utilities.tests import HttpStatusMixin
 
 

+ 0 - 1
netbox/extras/urls.py

@@ -4,7 +4,6 @@ from django.conf.urls import url
 
 
 from extras import views
 from extras import views
 
 
-
 app_name = 'extras'
 app_name = 'extras'
 urlpatterns = [
 urlpatterns = [
 
 

+ 1 - 1
netbox/extras/views.py

@@ -1,7 +1,7 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.contrib import messages
 from django.contrib import messages
+from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.http import Http404
 from django.http import Http404
 from django.shortcuts import get_object_or_404, redirect, render
 from django.shortcuts import get_object_or_404, redirect, render
 from django.utils.safestring import mark_safe
 from django.utils.safestring import mark_safe

+ 4 - 3
netbox/ipam/api/serializers.py

@@ -1,4 +1,5 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 from collections import OrderedDict
 from collections import OrderedDict
 
 
 from rest_framework import serializers
 from rest_framework import serializers
@@ -6,10 +7,10 @@ from rest_framework.validators import UniqueTogetherValidator
 
 
 from dcim.api.serializers import NestedDeviceSerializer, InterfaceSerializer, NestedSiteSerializer
 from dcim.api.serializers import NestedDeviceSerializer, InterfaceSerializer, NestedSiteSerializer
 from extras.api.customfields import CustomFieldModelSerializer
 from extras.api.customfields import CustomFieldModelSerializer
-from ipam.models import (
-    Aggregate, IPAddress, IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, IP_PROTOCOL_CHOICES, Prefix,
-    PREFIX_STATUS_CHOICES, RIR, Role, Service, VLAN, VLAN_STATUS_CHOICES, VLANGroup, VRF,
+from ipam.constants import (
+    IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, IP_PROTOCOL_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES,
 )
 )
+from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
 from tenancy.api.serializers import NestedTenantSerializer
 from tenancy.api.serializers import NestedTenantSerializer
 from utilities.api import ChoiceFieldSerializer, ValidatedModelSerializer
 from utilities.api import ChoiceFieldSerializer, ValidatedModelSerializer
 from virtualization.api.serializers import NestedVirtualMachineSerializer
 from virtualization.api.serializers import NestedVirtualMachineSerializer

+ 4 - 5
netbox/ipam/api/views.py

@@ -1,17 +1,16 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
+from django.conf import settings
+from django.shortcuts import get_object_or_404
 from rest_framework import status
 from rest_framework import status
 from rest_framework.decorators import detail_route
 from rest_framework.decorators import detail_route
 from rest_framework.exceptions import PermissionDenied
 from rest_framework.exceptions import PermissionDenied
 from rest_framework.response import Response
 from rest_framework.response import Response
 from rest_framework.viewsets import ModelViewSet
 from rest_framework.viewsets import ModelViewSet
 
 
-from django.conf import settings
-from django.shortcuts import get_object_or_404
-
-from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
-from ipam import filters
 from extras.api.views import CustomFieldModelViewSet
 from extras.api.views import CustomFieldModelViewSet
+from ipam import filters
+from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
 from utilities.api import FieldChoicesViewSet, WritableSerializerMixin
 from utilities.api import FieldChoicesViewSet, WritableSerializerMixin
 from . import serializers
 from . import serializers
 
 

+ 1 - 2
netbox/ipam/fields.py

@@ -1,9 +1,8 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from netaddr import IPNetwork
-
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
 from django.db import models
 from django.db import models
+from netaddr import IPNetwork
 
 
 from .formfields import IPFormField
 from .formfields import IPFormField
 from .lookups import (
 from .lookups import (

+ 3 - 6
netbox/ipam/filters.py

@@ -1,20 +1,17 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_filters
 import django_filters
+from django.db.models import Q
 from netaddr import IPNetwork
 from netaddr import IPNetwork
 from netaddr.core import AddrFormatError
 from netaddr.core import AddrFormatError
 
 
-from django.db.models import Q
-
 from dcim.models import Site, Device, Interface
 from dcim.models import Site, Device, Interface
 from extras.filters import CustomFieldFilterSet
 from extras.filters import CustomFieldFilterSet
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from utilities.filters import NumericInFilter
 from utilities.filters import NumericInFilter
 from virtualization.models import VirtualMachine
 from virtualization.models import VirtualMachine
-from .models import (
-    Aggregate, IPAddress, IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, Prefix, PREFIX_STATUS_CHOICES, RIR, Role,
-    Service, VLAN, VLAN_STATUS_CHOICES, VLANGroup, VRF,
-)
+from .constants import IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES
+from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
 
 
 
 
 class VRFFilter(CustomFieldFilterSet, django_filters.FilterSet):
 class VRFFilter(CustomFieldFilterSet, django_filters.FilterSet):

+ 1 - 2
netbox/ipam/formfields.py

@@ -1,9 +1,8 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from netaddr import IPNetwork, AddrFormatError
-
 from django import forms
 from django import forms
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
+from netaddr import IPNetwork, AddrFormatError
 
 
 
 
 #
 #

+ 2 - 5
netbox/ipam/forms.py

@@ -14,11 +14,8 @@ from utilities.forms import (
     add_blank_choice,
     add_blank_choice,
 )
 )
 from virtualization.models import VirtualMachine
 from virtualization.models import VirtualMachine
-from .models import (
-    Aggregate, IPAddress, IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, Prefix, PREFIX_STATUS_CHOICES, RIR, Role,
-    Service, VLAN, VLANGroup, VLAN_STATUS_CHOICES, VRF,
-)
-
+from .constants import IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES
+from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
 
 
 IP_FAMILY_CHOICES = [
 IP_FAMILY_CHOICES = [
     ('', 'All'),
     ('', 'All'),

+ 1 - 1
netbox/ipam/models.py

@@ -1,6 +1,6 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
-import netaddr
 
 
+import netaddr
 from django.conf import settings
 from django.conf import settings
 from django.contrib.contenttypes.fields import GenericRelation
 from django.contrib.contenttypes.fields import GenericRelation
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError

+ 0 - 1
netbox/ipam/tables.py

@@ -6,7 +6,6 @@ from django_tables2.utils import Accessor
 from utilities.tables import BaseTable, ToggleColumn
 from utilities.tables import BaseTable, ToggleColumn
 from .models import Aggregate, IPAddress, Prefix, RIR, Role, VLAN, VLANGroup, VRF
 from .models import Aggregate, IPAddress, Prefix, RIR, Role, VLAN, VLANGroup, VRF
 
 
-
 RIR_UTILIZATION = """
 RIR_UTILIZATION = """
 <div class="progress">
 <div class="progress">
     {% if record.stats.total %}
     {% if record.stats.total %}

+ 4 - 6
netbox/ipam/tests/test_api.py

@@ -1,16 +1,14 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
+from django.contrib.auth.models import User
+from django.urls import reverse
 from netaddr import IPNetwork
 from netaddr import IPNetwork
 from rest_framework import status
 from rest_framework import status
 from rest_framework.test import APITestCase
 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 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 users.models import Token
 from utilities.tests import HttpStatusMixin
 from utilities.tests import HttpStatusMixin
 
 

+ 0 - 1
netbox/ipam/tests/test_models.py

@@ -1,7 +1,6 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import netaddr
 import netaddr
-
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
 from django.test import TestCase, override_settings
 from django.test import TestCase, override_settings
 
 

+ 3 - 7
netbox/ipam/views.py

@@ -1,14 +1,13 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from django_tables2 import RequestConfig
 import netaddr
 import netaddr
-
 from django.conf import settings
 from django.conf import settings
 from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.db.models import Count, Q
 from django.db.models import Count, Q
 from django.shortcuts import get_object_or_404, render
 from django.shortcuts import get_object_or_404, render
 from django.urls import reverse
 from django.urls import reverse
 from django.views.generic import View
 from django.views.generic import View
+from django_tables2 import RequestConfig
 
 
 from dcim.models import Device, Interface
 from dcim.models import Device, Interface
 from utilities.paginator import EnhancedPaginator
 from utilities.paginator import EnhancedPaginator
@@ -17,11 +16,8 @@ from utilities.views import (
 )
 )
 from virtualization.models import VirtualMachine
 from virtualization.models import VirtualMachine
 from . import filters, forms, tables
 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):
 def add_available_prefixes(parent, prefix_list):

+ 0 - 1
netbox/netbox/forms.py

@@ -4,7 +4,6 @@ from django import forms
 
 
 from utilities.forms import BootstrapMixin
 from utilities.forms import BootstrapMixin
 
 
-
 OBJ_TYPE_CHOICES = (
 OBJ_TYPE_CHOICES = (
     ('', 'All Objects'),
     ('', 'All Objects'),
     ('Circuits', (
     ('Circuits', (

+ 1 - 3
netbox/netbox/urls.py

@@ -1,16 +1,14 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from rest_framework_swagger.views import get_swagger_view
-
 from django.conf import settings
 from django.conf import settings
 from django.conf.urls import include, url
 from django.conf.urls import include, url
 from django.contrib import admin
 from django.contrib import admin
 from django.views.static import serve
 from django.views.static import serve
+from rest_framework_swagger.views import get_swagger_view
 
 
 from netbox.views import APIRootView, HomeView, SearchView
 from netbox.views import APIRootView, HomeView, SearchView
 from users.views import LoginView, LogoutView
 from users.views import LoginView, LogoutView
 
 
-
 swagger_view = get_swagger_view(title='NetBox API')
 swagger_view = get_swagger_view(title='NetBox API')
 
 
 _patterns = [
 _patterns = [

+ 4 - 6
netbox/netbox/views.py

@@ -1,13 +1,12 @@
 from __future__ import unicode_literals
 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.shortcuts import render
 from django.views.generic import View
 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.filters import CircuitFilter, ProviderFilter
 from circuits.models import Circuit, Provider
 from circuits.models import Circuit, Provider
@@ -30,7 +29,6 @@ from virtualization.models import Cluster, VirtualMachine
 from virtualization.tables import ClusterTable, VirtualMachineDetailTable
 from virtualization.tables import ClusterTable, VirtualMachineDetailTable
 from .forms import SearchForm
 from .forms import SearchForm
 
 
-
 SEARCH_MAX_RESULTS = 15
 SEARCH_MAX_RESULTS = 15
 SEARCH_TYPES = OrderedDict((
 SEARCH_TYPES = OrderedDict((
     # Circuits
     # Circuits

+ 0 - 9
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
 import os
 
 
 from django.core.wsgi import get_wsgi_application
 from django.core.wsgi import get_wsgi_application

+ 2 - 3
netbox/secrets/api/views.py

@@ -1,21 +1,20 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import base64
 import base64
 
 
 from Crypto.PublicKey import RSA
 from Crypto.PublicKey import RSA
+from django.http import HttpResponseBadRequest
 from rest_framework.exceptions import ValidationError
 from rest_framework.exceptions import ValidationError
 from rest_framework.permissions import IsAuthenticated
 from rest_framework.permissions import IsAuthenticated
 from rest_framework.response import Response
 from rest_framework.response import Response
 from rest_framework.viewsets import ModelViewSet, ViewSet
 from rest_framework.viewsets import ModelViewSet, ViewSet
 
 
-from django.http import HttpResponseBadRequest
-
 from secrets import filters
 from secrets import filters
 from secrets.exceptions import InvalidKey
 from secrets.exceptions import InvalidKey
 from secrets.models import Secret, SecretRole, SessionKey, UserKey
 from secrets.models import Secret, SecretRole, SessionKey, UserKey
 from utilities.api import FieldChoicesViewSet, WritableSerializerMixin
 from utilities.api import FieldChoicesViewSet, WritableSerializerMixin
 from . import serializers
 from . import serializers
 
 
-
 ERR_USERKEY_MISSING = "No UserKey found for the current user."
 ERR_USERKEY_MISSING = "No UserKey found for the current user."
 ERR_USERKEY_INACTIVE = "UserKey has not been activated for decryption."
 ERR_USERKEY_INACTIVE = "UserKey has not been activated for decryption."
 ERR_PRIVKEY_MISSING = "Private key was not provided."
 ERR_PRIVKEY_MISSING = "Private key was not provided."

+ 1 - 2
netbox/secrets/filters.py

@@ -1,12 +1,11 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_filters
 import django_filters
-
 from django.db.models import Q
 from django.db.models import Q
 
 
-from .models import Secret, SecretRole
 from dcim.models import Device
 from dcim.models import Device
 from utilities.filters import NumericInFilter
 from utilities.filters import NumericInFilter
+from .models import Secret, SecretRole
 
 
 
 
 class SecretRoleFilter(django_filters.FilterSet):
 class SecretRoleFilter(django_filters.FilterSet):

+ 0 - 1
netbox/secrets/forms.py

@@ -2,7 +2,6 @@ from __future__ import unicode_literals
 
 
 from Crypto.Cipher import PKCS1_OAEP
 from Crypto.Cipher import PKCS1_OAEP
 from Crypto.PublicKey import RSA
 from Crypto.PublicKey import RSA
-
 from django import forms
 from django import forms
 from django.db.models import Count
 from django.db.models import Count
 
 

+ 1 - 1
netbox/secrets/models.py

@@ -1,10 +1,10 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import os
 import os
 
 
 from Crypto.Cipher import AES, PKCS1_OAEP
 from Crypto.Cipher import AES, PKCS1_OAEP
 from Crypto.PublicKey import RSA
 from Crypto.PublicKey import RSA
 from Crypto.Util import strxor
 from Crypto.Util import strxor
-
 from django.conf import settings
 from django.conf import settings
 from django.contrib.auth.hashers import make_password, check_password
 from django.contrib.auth.hashers import make_password, check_password
 from django.contrib.auth.models import Group, User
 from django.contrib.auth.models import Group, User

+ 0 - 2
netbox/secrets/tables.py

@@ -3,10 +3,8 @@ from __future__ import unicode_literals
 import django_tables2 as tables
 import django_tables2 as tables
 
 
 from utilities.tables import BaseTable, ToggleColumn
 from utilities.tables import BaseTable, ToggleColumn
-
 from .models import SecretRole, Secret
 from .models import SecretRole, Secret
 
 
-
 SECRETROLE_ACTIONS = """
 SECRETROLE_ACTIONS = """
 {% if perms.secrets.change_secretrole %}
 {% if perms.secrets.change_secretrole %}
     <a href="{% url 'secrets:secretrole_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
     <a href="{% url 'secrets:secretrole_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>

+ 3 - 4
netbox/secrets/tests/test_api.py

@@ -1,18 +1,17 @@
 from __future__ import unicode_literals
 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.contrib.auth.models import User
 from django.urls import reverse
 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 dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
 from secrets.models import Secret, SecretRole, SessionKey, UserKey
 from secrets.models import Secret, SecretRole, SessionKey, UserKey
 from users.models import Token
 from users.models import Token
 from utilities.tests import HttpStatusMixin
 from utilities.tests import HttpStatusMixin
 
 
-
 # Dummy RSA key pair for testing use only
 # Dummy RSA key pair for testing use only
 PRIVATE_KEY = """-----BEGIN RSA PRIVATE KEY-----
 PRIVATE_KEY = """-----BEGIN RSA PRIVATE KEY-----
 MIIEowIBAAKCAQEA97wPWxpq5cClRu8Ssq609ZLfyx6E8ln/v/PdFZ7fxxmA4k+z
 MIIEowIBAAKCAQEA97wPWxpq5cClRu8Ssq609ZLfyx6E8ln/v/PdFZ7fxxmA4k+z

+ 1 - 2
netbox/secrets/tests/test_models.py

@@ -1,14 +1,13 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 from Crypto.PublicKey import RSA
 from Crypto.PublicKey import RSA
-
 from django.conf import settings
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
 from django.test import TestCase
 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.hashers import SecretValidationHasher
+from secrets.models import UserKey, Secret, encrypt_master_key, decrypt_master_key, generate_random_key
 
 
 
 
 class UserKeyTestCase(TestCase):
 class UserKeyTestCase(TestCase):

+ 0 - 1
netbox/secrets/urls.py

@@ -4,7 +4,6 @@ from django.conf.urls import url
 
 
 from . import views
 from . import views
 
 
-
 app_name = 'secrets'
 app_name = 'secrets'
 urlpatterns = [
 urlpatterns = [
 
 

+ 1 - 0
netbox/secrets/views.py

@@ -1,4 +1,5 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import base64
 import base64
 
 
 from django.contrib import messages
 from django.contrib import messages

+ 0 - 1
netbox/tenancy/filters.py

@@ -1,7 +1,6 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_filters
 import django_filters
-
 from django.db.models import Q
 from django.db.models import Q
 
 
 from extras.filters import CustomFieldFilterSet
 from extras.filters import CustomFieldFilterSet

+ 0 - 2
netbox/tenancy/tables.py

@@ -3,10 +3,8 @@ from __future__ import unicode_literals
 import django_tables2 as tables
 import django_tables2 as tables
 
 
 from utilities.tables import BaseTable, ToggleColumn
 from utilities.tables import BaseTable, ToggleColumn
-
 from .models import Tenant, TenantGroup
 from .models import Tenant, TenantGroup
 
 
-
 TENANTGROUP_ACTIONS = """
 TENANTGROUP_ACTIONS = """
 {% if perms.tenancy.change_tenantgroup %}
 {% if perms.tenancy.change_tenantgroup %}
     <a href="{% url 'tenancy:tenantgroup_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
     <a href="{% url 'tenancy:tenantgroup_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>

+ 2 - 3
netbox/tenancy/tests/test_api.py

@@ -1,10 +1,9 @@
 from __future__ import unicode_literals
 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.contrib.auth.models import User
 from django.urls import reverse
 from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
 
 
 from tenancy.models import Tenant, TenantGroup
 from tenancy.models import Tenant, TenantGroup
 from users.models import Token
 from users.models import Token

+ 0 - 1
netbox/tenancy/urls.py

@@ -4,7 +4,6 @@ from django.conf.urls import url
 
 
 from . import views
 from . import views
 
 
-
 app_name = 'tenancy'
 app_name = 'tenancy'
 urlpatterns = [
 urlpatterns = [
 
 

+ 1 - 1
netbox/tenancy/views.py

@@ -13,8 +13,8 @@ from utilities.views import (
     BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
     BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
 )
 )
 from virtualization.models import VirtualMachine
 from virtualization.models import VirtualMachine
-from .models import Tenant, TenantGroup
 from . import filters, forms, tables
 from . import filters, forms, tables
+from .models import Tenant, TenantGroup
 
 
 
 
 #
 #

+ 0 - 1
netbox/users/api/serializers.py

@@ -1,7 +1,6 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
-
 from rest_framework import serializers
 from rest_framework import serializers
 
 
 
 

+ 1 - 1
netbox/users/forms.py

@@ -1,7 +1,7 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm
 from django import forms
 from django import forms
+from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm
 
 
 from utilities.forms import BootstrapMixin
 from utilities.forms import BootstrapMixin
 from .models import Token
 from .models import Token

+ 2 - 1
netbox/users/models.py

@@ -1,12 +1,13 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import binascii
 import binascii
 import os
 import os
 
 
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.core.validators import MinLengthValidator
 from django.core.validators import MinLengthValidator
 from django.db import models
 from django.db import models
-from django.utils.encoding import python_2_unicode_compatible
 from django.utils import timezone
 from django.utils import timezone
+from django.utils.encoding import python_2_unicode_compatible
 
 
 
 
 @python_2_unicode_compatible
 @python_2_unicode_compatible

+ 0 - 1
netbox/users/urls.py

@@ -4,7 +4,6 @@ from django.conf.urls import url
 
 
 from . import views
 from . import views
 
 
-
 app_name = 'user'
 app_name = 'user'
 urlpatterns = [
 urlpatterns = [
 
 

+ 1 - 2
netbox/utilities/api.py

@@ -1,17 +1,16 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 from collections import OrderedDict
 from collections import OrderedDict
 
 
 from django.conf import settings
 from django.conf import settings
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.http import Http404
 from django.http import Http404
-
 from rest_framework.exceptions import APIException
 from rest_framework.exceptions import APIException
 from rest_framework.permissions import BasePermission
 from rest_framework.permissions import BasePermission
 from rest_framework.response import Response
 from rest_framework.response import Response
 from rest_framework.serializers import Field, ModelSerializer, ValidationError
 from rest_framework.serializers import Field, ModelSerializer, ValidationError
 from rest_framework.viewsets import ViewSet
 from rest_framework.viewsets import ViewSet
 
 
-
 WRITE_OPERATIONS = ['create', 'update', 'partial_update', 'delete']
 WRITE_OPERATIONS = ['create', 'update', 'partial_update', 'delete']
 
 
 
 

+ 0 - 1
netbox/utilities/fields.py

@@ -5,7 +5,6 @@ from django.db import models
 
 
 from .forms import ColorSelect
 from .forms import ColorSelect
 
 
-
 validate_color = RegexValidator('^[0-9a-f]{6}$', 'Enter a valid hexadecimal RGB color code.', 'invalid')
 validate_color = RegexValidator('^[0-9a-f]{6}$', 'Enter a valid hexadecimal RGB color code.', 'invalid')
 
 
 
 

+ 1 - 1
netbox/utilities/filters.py

@@ -1,8 +1,8 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-import django_filters
 import itertools
 import itertools
 
 
+import django_filters
 from django import forms
 from django import forms
 from django.utils.encoding import force_text
 from django.utils.encoding import force_text
 
 

+ 2 - 3
netbox/utilities/forms.py

@@ -1,17 +1,16 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import csv
 import csv
 import itertools
 import itertools
 import re
 import re
 
 
-from mptt.forms import TreeNodeMultipleChoiceField
-
 from django import forms
 from django import forms
 from django.conf import settings
 from django.conf import settings
 from django.urls import reverse_lazy
 from django.urls import reverse_lazy
+from mptt.forms import TreeNodeMultipleChoiceField
 
 
 from .validators import EnhancedURLValidator
 from .validators import EnhancedURLValidator
 
 
-
 COLOR_CHOICES = (
 COLOR_CHOICES = (
     ('aa1409', 'Dark red'),
     ('aa1409', 'Dark red'),
     ('f44336', 'Red'),
     ('f44336', 'Red'),

+ 1 - 1
netbox/utilities/middleware.py

@@ -1,4 +1,5 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import sys
 import sys
 
 
 from django.conf import settings
 from django.conf import settings
@@ -7,7 +8,6 @@ from django.http import HttpResponseRedirect
 from django.shortcuts import render
 from django.shortcuts import render
 from django.urls import reverse
 from django.urls import reverse
 
 
-
 BASE_PATH = getattr(settings, 'BASE_PATH', False)
 BASE_PATH = getattr(settings, 'BASE_PATH', False)
 LOGIN_REQUIRED = getattr(settings, 'LOGIN_REQUIRED', False)
 LOGIN_REQUIRED = getattr(settings, 'LOGIN_REQUIRED', False)
 
 

+ 0 - 1
netbox/utilities/tables.py

@@ -1,7 +1,6 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_tables2 as tables
 import django_tables2 as tables
-
 from django.utils.safestring import mark_safe
 from django.utils.safestring import mark_safe
 
 
 
 

+ 1 - 3
netbox/utilities/templatetags/helpers.py

@@ -1,10 +1,8 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from markdown import markdown
-
 from django import template
 from django import template
 from django.utils.safestring import mark_safe
 from django.utils.safestring import mark_safe
-
+from markdown import markdown
 
 
 register = template.Library()
 register = template.Library()
 
 

+ 1 - 0
netbox/utilities/utils.py

@@ -1,4 +1,5 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import six
 import six
 
 
 
 

+ 1 - 0
netbox/utilities/validators.py

@@ -1,4 +1,5 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 import re
 import re
 
 
 from django.core.validators import _lazy_re_compile, URLValidator
 from django.core.validators import _lazy_re_compile, URLValidator

+ 2 - 2
netbox/utilities/views.py

@@ -1,9 +1,8 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+
 from collections import OrderedDict
 from collections import OrderedDict
 from copy import deepcopy
 from copy import deepcopy
 
 
-from django_tables2 import RequestConfig
-
 from django.conf import settings
 from django.conf import settings
 from django.contrib import messages
 from django.contrib import messages
 from django.contrib.contenttypes.models import ContentType
 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.http import is_safe_url
 from django.utils.safestring import mark_safe
 from django.utils.safestring import mark_safe
 from django.views.generic import View
 from django.views.generic import View
+from django_tables2 import RequestConfig
 
 
 from extras.models import CustomField, CustomFieldValue, ExportTemplate, UserAction
 from extras.models import CustomField, CustomFieldValue, ExportTemplate, UserAction
 from utilities.forms import BootstrapMixin, CSVDataField
 from utilities.forms import BootstrapMixin, CSVDataField

+ 0 - 1
netbox/virtualization/constants.py

@@ -2,7 +2,6 @@ from __future__ import unicode_literals
 
 
 from dcim.constants import STATUS_ACTIVE, STATUS_OFFLINE, STATUS_STAGED
 from dcim.constants import STATUS_ACTIVE, STATUS_OFFLINE, STATUS_STAGED
 
 
-
 # VirtualMachine statuses (replicated from Device statuses)
 # VirtualMachine statuses (replicated from Device statuses)
 STATUS_CHOICES = [
 STATUS_CHOICES = [
     [STATUS_ACTIVE, 'Active'],
     [STATUS_ACTIVE, 'Active'],

+ 1 - 2
netbox/virtualization/filters.py

@@ -1,11 +1,10 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import django_filters
 import django_filters
+from django.db.models import Q
 from netaddr import EUI
 from netaddr import EUI
 from netaddr.core import AddrFormatError
 from netaddr.core import AddrFormatError
 
 
-from django.db.models import Q
-
 from dcim.models import DeviceRole, Interface, Platform, Site
 from dcim.models import DeviceRole, Interface, Platform, Site
 from extras.filters import CustomFieldFilterSet
 from extras.filters import CustomFieldFilterSet
 from tenancy.models import Tenant
 from tenancy.models import Tenant

+ 1 - 3
netbox/virtualization/forms.py

@@ -1,10 +1,9 @@
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
-from mptt.forms import TreeNodeChoiceField
-
 from django import forms
 from django import forms
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
 from django.db.models import Count
 from django.db.models import Count
+from mptt.forms import TreeNodeChoiceField
 
 
 from dcim.constants import IFACE_FF_VIRTUAL
 from dcim.constants import IFACE_FF_VIRTUAL
 from dcim.formfields import MACAddressFormField
 from dcim.formfields import MACAddressFormField
@@ -20,7 +19,6 @@ from utilities.forms import (
 from .constants import STATUS_CHOICES
 from .constants import STATUS_CHOICES
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 
 
-
 VIFACE_FF_CHOICES = (
 VIFACE_FF_CHOICES = (
     (IFACE_FF_VIRTUAL, 'Virtual'),
     (IFACE_FF_VIRTUAL, 'Virtual'),
 )
 )

+ 0 - 1
netbox/virtualization/tables.py

@@ -7,7 +7,6 @@ from dcim.models import Interface
 from utilities.tables import BaseTable, ToggleColumn
 from utilities.tables import BaseTable, ToggleColumn
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 
 
-
 CLUSTERTYPE_ACTIONS = """
 CLUSTERTYPE_ACTIONS = """
 {% if perms.virtualization.change_clustertype %}
 {% if perms.virtualization.change_clustertype %}
     <a href="{% url 'virtualization:clustertype_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
     <a href="{% url 'virtualization:clustertype_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>

+ 2 - 3
netbox/virtualization/tests/test_api.py

@@ -1,10 +1,9 @@
 from __future__ import unicode_literals
 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.contrib.auth.models import User
 from django.urls import reverse
 from django.urls import reverse
+from rest_framework import status
+from rest_framework.test import APITestCase
 
 
 from users.models import Token
 from users.models import Token
 from utilities.tests import HttpStatusMixin
 from utilities.tests import HttpStatusMixin

+ 0 - 1
netbox/virtualization/urls.py

@@ -5,7 +5,6 @@ from django.conf.urls import url
 from ipam.views import ServiceCreateView
 from ipam.views import ServiceCreateView
 from . import views
 from . import views
 
 
-
 app_name = 'virtualization'
 app_name = 'virtualization'
 urlpatterns = [
 urlpatterns = [
 
 

+ 1 - 3
netbox/virtualization/views.py

@@ -14,10 +14,8 @@ from utilities.views import (
     BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, ComponentDeleteView,
     BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, ComponentDeleteView,
     ComponentEditView, ObjectDeleteView, ObjectEditView, ObjectListView,
     ComponentEditView, ObjectDeleteView, ObjectEditView, ObjectListView,
 )
 )
+from . import filters, forms, tables
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
-from . import filters
-from . import forms
-from . import tables
 
 
 
 
 #
 #