diff --git a/netbox/circuits/constants.py b/netbox/circuits/constants.py index 03a981ea1..9e180e655 100644 --- a/netbox/circuits/constants.py +++ b/netbox/circuits/constants.py @@ -1,4 +1,3 @@ - # Circuit statuses CIRCUIT_STATUS_DEPROVISIONING = 0 CIRCUIT_STATUS_ACTIVE = 1 diff --git a/netbox/circuits/filters.py b/netbox/circuits/filters.py index 33005b830..088ec144a 100644 --- a/netbox/circuits/filters.py +++ b/netbox/circuits/filters.py @@ -5,8 +5,8 @@ from dcim.models import Region, Site from extras.filters import CustomFieldFilterSet from tenancy.filtersets import TenancyFilterSet from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter -from .constants import CIRCUIT_STATUS_CHOICES -from .models import Provider, Circuit, CircuitTermination, CircuitType +from .constants import * +from .models import Circuit, CircuitTermination, CircuitType, Provider class ProviderFilter(CustomFieldFilterSet): diff --git a/netbox/circuits/forms.py b/netbox/circuits/forms.py index a64dfc11e..b4f6ac06c 100644 --- a/netbox/circuits/forms.py +++ b/netbox/circuits/forms.py @@ -3,14 +3,13 @@ from taggit.forms import TagField from dcim.models import Region, Site from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm -from tenancy.forms import TenancyForm -from tenancy.forms import TenancyFilterForm +from tenancy.forms import TenancyFilterForm, TenancyForm from tenancy.models import Tenant from utilities.forms import ( APISelect, APISelectMultiple, add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField, FilterChoiceField, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple ) -from .constants import CIRCUIT_STATUS_CHOICES +from .constants import * from .models import Circuit, CircuitTermination, CircuitType, Provider diff --git a/netbox/circuits/models.py b/netbox/circuits/models.py index bf06959b0..8cf18617c 100644 --- a/netbox/circuits/models.py +++ b/netbox/circuits/models.py @@ -9,7 +9,7 @@ from dcim.models import CableTermination from extras.models import CustomFieldModel, ObjectChange, TaggedItem from utilities.models import ChangeLoggedModel from utilities.utils import serialize_object -from .constants import CIRCUIT_STATUS_ACTIVE, CIRCUIT_STATUS_CHOICES, TERM_SIDE_CHOICES +from .constants import * class Provider(ChangeLoggedModel, CustomFieldModel): diff --git a/netbox/circuits/tables.py b/netbox/circuits/tables.py index 2bb442179..d67abdd1a 100644 --- a/netbox/circuits/tables.py +++ b/netbox/circuits/tables.py @@ -1,5 +1,4 @@ import django_tables2 as tables -from django.utils.safestring import mark_safe from django_tables2.utils import Accessor from tenancy.tables import COL_TENANT @@ -11,7 +10,8 @@ CIRCUITTYPE_ACTIONS = """ {% if perms.circuit.change_circuittype %} - + {% endif %} """ diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 2e0ba2d40..6654f677f 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -17,8 +17,7 @@ from extras.forms import ( AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm, LocalConfigContextFilterForm ) from ipam.models import IPAddress, VLAN, VLANGroup -from tenancy.forms import TenancyForm -from tenancy.forms import TenancyFilterForm +from tenancy.forms import TenancyFilterForm, TenancyForm from tenancy.models import Tenant, TenantGroup from utilities.forms import ( APISelect, APISelectMultiple, add_blank_choice, ArrayFieldSelectMultiple, BootstrapMixin, BulkEditForm, @@ -57,6 +56,7 @@ def get_device_by_name_or_pk(name): class InterfaceCommonForm: + def clean(self): super().clean() diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index 2c554c158..8f5393af2 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -9,7 +9,7 @@ from django.contrib.postgres.fields import ArrayField, JSONField from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models -from django.db.models import Case, Count, Q, Sum, When, F, Subquery, OuterRef +from django.db.models import Count, Q, Sum from django.urls import reverse from mptt.models import MPTTModel, TreeForeignKey from taggit.managers import TaggableManager diff --git a/netbox/extras/api/customfields.py b/netbox/extras/api/customfields.py index 7bf1c0744..2cdb79f8b 100644 --- a/netbox/extras/api/customfields.py +++ b/netbox/extras/api/customfields.py @@ -5,7 +5,7 @@ from django.db import transaction from rest_framework import serializers from rest_framework.exceptions import ValidationError -from extras.constants import CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_INTEGER, CF_TYPE_SELECT +from extras.constants import * from extras.models import CustomField, CustomFieldChoice, CustomFieldValue from utilities.api import ValidatedModelSerializer diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 2545b34d5..d9439563b 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -1,4 +1,3 @@ - # Models which support custom fields CUSTOMFIELD_MODELS = [ 'circuits.circuit', diff --git a/netbox/extras/filters.py b/netbox/extras/filters.py index 66a7fe637..a45202052 100644 --- a/netbox/extras/filters.py +++ b/netbox/extras/filters.py @@ -4,7 +4,7 @@ from django.db.models import Q from dcim.models import DeviceRole, Platform, Region, Site from tenancy.models import Tenant, TenantGroup -from .constants import CF_FILTER_DISABLED, CF_FILTER_EXACT, CF_TYPE_BOOLEAN, CF_TYPE_SELECT +from .constants import * from .models import ConfigContext, CustomField, Graph, ExportTemplate, ObjectChange, Tag, TopologyMap diff --git a/netbox/extras/forms.py b/netbox/extras/forms.py index 61bf2d7f3..071345913 100644 --- a/netbox/extras/forms.py +++ b/netbox/extras/forms.py @@ -8,16 +8,12 @@ from taggit.forms import TagField from dcim.models import DeviceRole, Platform, Region, Site from tenancy.models import Tenant, TenantGroup -from utilities.constants import COLOR_CHOICES from utilities.forms import ( add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorSelect, CommentField, ContentTypeSelect, FilterChoiceField, LaxURLField, JSONField, SlugField, StaticSelect2, BOOLEAN_WITH_BLANK_CHOICES, ) -from .constants import ( - CF_FILTER_DISABLED, CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_INTEGER, CF_TYPE_SELECT, CF_TYPE_URL, - OBJECTCHANGE_ACTION_CHOICES, -) +from .constants import * from .models import ConfigContext, CustomField, CustomFieldValue, ImageAttachment, ObjectChange, Tag diff --git a/netbox/extras/middleware.py b/netbox/extras/middleware.py index 5083af8ec..b0203309b 100644 --- a/netbox/extras/middleware.py +++ b/netbox/extras/middleware.py @@ -9,9 +9,7 @@ from django.utils import timezone from django.utils.functional import curry from django_prometheus.models import model_deletes, model_inserts, model_updates -from .constants import ( - OBJECTCHANGE_ACTION_CREATE, OBJECTCHANGE_ACTION_DELETE, OBJECTCHANGE_ACTION_UPDATE, -) +from .constants import * from .models import ObjectChange from .signals import purge_changelog from .webhooks import enqueue_webhooks diff --git a/netbox/extras/models.py b/netbox/extras/models.py index 04caf3376..c49192a93 100644 --- a/netbox/extras/models.py +++ b/netbox/extras/models.py @@ -1,6 +1,7 @@ from collections import OrderedDict from datetime import date +import graphviz from django.contrib.auth.models import User from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType @@ -11,7 +12,6 @@ from django.db.models import F, Q from django.http import HttpResponse from django.template import Template, Context from django.urls import reverse -import graphviz from jinja2 import Environment from taggit.models import TagBase, GenericTaggedItemBase diff --git a/netbox/extras/reports.py b/netbox/extras/reports.py index fc41b45f9..9027d6a4a 100644 --- a/netbox/extras/reports.py +++ b/netbox/extras/reports.py @@ -6,7 +6,7 @@ from collections import OrderedDict from django.conf import settings from django.utils import timezone -from .constants import LOG_DEFAULT, LOG_FAILURE, LOG_INFO, LOG_LEVEL_CODES, LOG_SUCCESS, LOG_WARNING +from .constants import * from .models import ReportResult diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index 4f1133603..2ce365609 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -1,12 +1,12 @@ -from collections import OrderedDict import inspect import json import os import pkgutil import time import traceback -import yaml +from collections import OrderedDict +import yaml from django import forms from django.conf import settings from django.core.validators import RegexValidator @@ -21,7 +21,6 @@ from .constants import LOG_DEFAULT, LOG_FAILURE, LOG_INFO, LOG_SUCCESS, LOG_WARN from .forms import ScriptForm from .signals import purge_changelog - __all__ = [ 'BaseScript', 'BooleanVar', diff --git a/netbox/extras/webhooks.py b/netbox/extras/webhooks.py index 46090fb2e..ac82bbb31 100644 --- a/netbox/extras/webhooks.py +++ b/netbox/extras/webhooks.py @@ -3,10 +3,9 @@ import datetime from django.conf import settings from django.contrib.contenttypes.models import ContentType -from extras.constants import OBJECTCHANGE_ACTION_CREATE, OBJECTCHANGE_ACTION_DELETE, OBJECTCHANGE_ACTION_UPDATE from extras.models import Webhook from utilities.api import get_serializer_for_model -from .constants import WEBHOOK_MODELS +from .constants import * def enqueue_webhooks(instance, user, request_id, action): diff --git a/netbox/extras/webhooks_worker.py b/netbox/extras/webhooks_worker.py index 45d996f9b..8712092d4 100644 --- a/netbox/extras/webhooks_worker.py +++ b/netbox/extras/webhooks_worker.py @@ -6,7 +6,7 @@ import requests from django_rq import job from rest_framework.utils.encoders import JSONEncoder -from extras.constants import WEBHOOK_CT_JSON, WEBHOOK_CT_X_WWW_FORM_ENCODED, OBJECTCHANGE_ACTION_CHOICES +from .constants import * @job('default') diff --git a/netbox/ipam/constants.py b/netbox/ipam/constants.py index eeb17eddd..e2fd1ca01 100644 --- a/netbox/ipam/constants.py +++ b/netbox/ipam/constants.py @@ -1,4 +1,3 @@ - # IP address families AF_CHOICES = ( (4, 'IPv4'), diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index da9362dc9..c57006b27 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -9,7 +9,7 @@ from extras.filters import CustomFieldFilterSet from tenancy.filtersets import TenancyFilterSet from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter from virtualization.models import VirtualMachine -from .constants import IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES +from .constants import * from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 7a79caaa0..002d2a72a 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -5,8 +5,7 @@ from taggit.forms import TagField from dcim.models import Site, Rack, Device, Interface from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm -from tenancy.forms import TenancyForm -from tenancy.forms import TenancyFilterForm +from tenancy.forms import TenancyFilterForm, TenancyForm from tenancy.models import Tenant from utilities.forms import ( add_blank_choice, APISelect, APISelectMultiple, BootstrapMixin, BulkEditNullBooleanSelect, ChainedModelChoiceField, @@ -14,9 +13,7 @@ from utilities.forms import ( StaticSelect2, StaticSelect2Multiple, BOOLEAN_WITH_BLANK_CHOICES ) from virtualization.models import VirtualMachine -from .constants import ( - IP_PROTOCOL_CHOICES, IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES, -) +from .constants import * from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF IP_FAMILY_CHOICES = [ diff --git a/netbox/ipam/lookups.py b/netbox/ipam/lookups.py index e1de38a51..54825d9de 100644 --- a/netbox/ipam/lookups.py +++ b/netbox/ipam/lookups.py @@ -1,5 +1,4 @@ -from django.db.models import Lookup, Transform, IntegerField -from django.db.models import lookups +from django.db.models import IntegerField, Lookup, Transform, lookups class NetFieldDecoratorMixin(object): diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index c5b532774..4a4d6ad34 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -13,7 +13,7 @@ from utilities.views import ( ) from virtualization.models import VirtualMachine from . import filters, forms, tables -from .constants import IPADDRESS_ROLE_ANYCAST, PREFIX_STATUS_ACTIVE, PREFIX_STATUS_DEPRECATED, PREFIX_STATUS_RESERVED +from .constants import * from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF @@ -291,6 +291,7 @@ class RIRBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): class AggregateListView(PermissionRequiredMixin, ObjectListView): permission_required = 'ipam.view_aggregate' + # TODO: Replace raw SQL queryset = Aggregate.objects.prefetch_related('rir').extra(select={ 'child_count': 'SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', }) diff --git a/netbox/secrets/exceptions.py b/netbox/secrets/exceptions.py index 11433d41e..c163e5907 100644 --- a/netbox/secrets/exceptions.py +++ b/netbox/secrets/exceptions.py @@ -1,4 +1,3 @@ - class InvalidKey(Exception): """ Raised when a provided key is invalid. diff --git a/netbox/tenancy/filtersets.py b/netbox/tenancy/filtersets.py index 8980777b0..eb656a894 100644 --- a/netbox/tenancy/filtersets.py +++ b/netbox/tenancy/filtersets.py @@ -1,4 +1,5 @@ import django_filters + from .models import Tenant, TenantGroup diff --git a/netbox/users/admin.py b/netbox/users/admin.py index fdc02d62e..4549945bf 100644 --- a/netbox/users/admin.py +++ b/netbox/users/admin.py @@ -6,7 +6,6 @@ from django.contrib.auth.models import User from netbox.admin import admin_site from .models import Token - # Unregister the built-in UserAdmin so that we can use our custom admin view below admin_site.unregister(User) diff --git a/netbox/utilities/custom_inspectors.py b/netbox/utilities/custom_inspectors.py index 79d79d6d4..9662612f9 100644 --- a/netbox/utilities/custom_inspectors.py +++ b/netbox/utilities/custom_inspectors.py @@ -6,10 +6,9 @@ from rest_framework.relations import ManyRelatedField from taggit_serializer.serializers import TagListSerializerField from dcim.api.serializers import InterfaceSerializer as DeviceInterfaceSerializer -from virtualization.api.serializers import InterfaceSerializer as VirtualMachineInterfaceSerializer from extras.api.customfields import CustomFieldsSerializer from utilities.api import ChoiceField, SerializedPKRelatedField, WritableNestedSerializer - +from virtualization.api.serializers import InterfaceSerializer as VirtualMachineInterfaceSerializer # this might be ugly, but it limits drf_yasg-specific code to this file DeviceInterfaceSerializer.Meta.ref_name = 'DeviceInterface' diff --git a/netbox/utilities/forms.py b/netbox/utilities/forms.py index 876581dd4..e75ab4d1c 100644 --- a/netbox/utilities/forms.py +++ b/netbox/utilities/forms.py @@ -6,8 +6,6 @@ from io import StringIO from django import forms from django.conf import settings from django.contrib.postgres.forms.jsonb import JSONField as _JSONField, InvalidJSONInput -from django.db.models import Count -from django.urls import reverse_lazy from mptt.forms import TreeNodeMultipleChoiceField from .constants import * diff --git a/netbox/utilities/middleware.py b/netbox/utilities/middleware.py index 360fb29fc..a44273ab0 100644 --- a/netbox/utilities/middleware.py +++ b/netbox/utilities/middleware.py @@ -1,8 +1,9 @@ +from urllib import parse + from django.conf import settings from django.db import ProgrammingError from django.http import Http404, HttpResponseRedirect from django.urls import reverse -import urllib from .views import server_error @@ -26,7 +27,7 @@ class LoginRequiredMiddleware(object): return HttpResponseRedirect( '{}?next={}'.format( settings.LOGIN_URL, - urllib.parse.quote(request.get_full_path_info()) + parse.quote(request.get_full_path_info()) ) ) return self.get_response(request) diff --git a/netbox/utilities/utils.py b/netbox/utilities/utils.py index 4644c432e..6c29dd8cc 100644 --- a/netbox/utilities/utils.py +++ b/netbox/utilities/utils.py @@ -1,7 +1,6 @@ -from collections import OrderedDict - import datetime import json +from collections import OrderedDict from django.core.serializers import serialize from django.db.models import Count, OuterRef, Subquery diff --git a/netbox/virtualization/filters.py b/netbox/virtualization/filters.py index 44b489d43..8365d6f91 100644 --- a/netbox/virtualization/filters.py +++ b/netbox/virtualization/filters.py @@ -9,7 +9,7 @@ from tenancy.filtersets import TenancyFilterSet from utilities.filters import ( MultiValueMACAddressFilter, NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter, ) -from .constants import VM_STATUS_CHOICES +from .constants import * from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index d3fc4b83b..c8bf7c155 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -7,8 +7,7 @@ from dcim.forms import INTERFACE_MODE_HELP_TEXT from dcim.models import Device, DeviceRole, Interface, Platform, Rack, Region, Site from extras.forms import AddRemoveTagsForm, CustomFieldBulkEditForm, CustomFieldForm, CustomFieldFilterForm from ipam.models import IPAddress, VLANGroup, VLAN -from tenancy.forms import TenancyForm -from tenancy.forms import TenancyFilterForm +from tenancy.forms import TenancyFilterForm, TenancyForm from tenancy.models import Tenant from utilities.forms import ( add_blank_choice, APISelect, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, @@ -16,7 +15,7 @@ from utilities.forms import ( ConfirmationForm, CSVChoiceField, ExpandableNameField, FilterChoiceField, JSONField, SlugField, SmallTextarea, StaticSelect2, StaticSelect2Multiple ) -from .constants import VM_STATUS_CHOICES +from .constants import * from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine VIFACE_TYPE_CHOICES = ( diff --git a/netbox/virtualization/models.py b/netbox/virtualization/models.py index 2ef782dfd..57351b7f6 100644 --- a/netbox/virtualization/models.py +++ b/netbox/virtualization/models.py @@ -8,7 +8,7 @@ from taggit.managers import TaggableManager from dcim.models import Device from extras.models import ConfigContextModel, CustomFieldModel, TaggedItem from utilities.models import ChangeLoggedModel -from .constants import DEVICE_STATUS_ACTIVE, VM_STATUS_CHOICES, VM_STATUS_CLASSES +from .constants import * #