diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index 1ca162090..399cf1338 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -18,7 +18,7 @@ from netbox.choices import ButtonColorChoices from utilities.permissions import get_permission_for_model from utilities.querydict import dict_to_querydict from utilities.templatetags.builtins.filters import render_markdown -from utilities.utils import content_type_identifier, content_type_name +from utilities.utils import object_type_identifier, object_type_name from utilities.views import get_viewname from .utils import register_widget @@ -35,15 +35,15 @@ __all__ = ( def get_object_type_choices(): return [ - (content_type_identifier(ct), content_type_name(ct)) - for ct in ObjectType.objects.public().order_by('app_label', 'model') + (object_type_identifier(ot), object_type_name(ot)) + for ot in ObjectType.objects.public().order_by('app_label', 'model') ] def get_bookmarks_object_type_choices(): return [ - (content_type_identifier(ct), content_type_name(ct)) - for ct in ObjectType.objects.with_feature('bookmarks').order_by('app_label', 'model') + (object_type_identifier(ot), object_type_name(ot)) + for ot in ObjectType.objects.with_feature('bookmarks').order_by('app_label', 'model') ] diff --git a/netbox/extras/models/search.py b/netbox/extras/models/search.py index 3c2cebe8e..23cb0615d 100644 --- a/netbox/extras/models/search.py +++ b/netbox/extras/models/search.py @@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _ from netbox.search.utils import get_indexer from netbox.registry import registry from utilities.fields import RestrictedGenericForeignKey -from utilities.utils import content_type_identifier +from utilities.utils import object_type_identifier from ..fields import CachedValueField __all__ = ( diff --git a/netbox/netbox/api/serializers/generic.py b/netbox/netbox/api/serializers/generic.py index fb4fab8b0..67ae56d3b 100644 --- a/netbox/netbox/api/serializers/generic.py +++ b/netbox/netbox/api/serializers/generic.py @@ -2,9 +2,10 @@ from django.contrib.contenttypes.models import ContentType from drf_spectacular.utils import extend_schema_field from rest_framework import serializers +from core.models import ObjectType from netbox.api.fields import ContentTypeField from utilities.api import get_serializer_for_model -from utilities.utils import content_type_identifier +from utilities.utils import object_type_identifier __all__ = ( 'GenericObjectSerializer', @@ -27,9 +28,9 @@ class GenericObjectSerializer(serializers.Serializer): return model.objects.get(pk=data['object_id']) def to_representation(self, instance): - ct = ContentType.objects.get_for_model(instance) + object_type = ObjectType.objects.get_for_model(instance) data = { - 'object_type': content_type_identifier(ct), + 'object_type': object_type_identifier(object_type), 'object_id': instance.pk, } if 'request' in self.context: diff --git a/netbox/netbox/search/backends.py b/netbox/netbox/search/backends.py index f9ccdcd39..ee497aa77 100644 --- a/netbox/netbox/search/backends.py +++ b/netbox/netbox/search/backends.py @@ -16,7 +16,7 @@ from extras.models import CachedValue, CustomField from netbox.registry import registry from utilities.querysets import RestrictedPrefetch from utilities.string import title -from utilities.utils import content_type_identifier +from utilities.utils import object_type_identifier from . import FieldTypes, LookupTypes, get_indexer DEFAULT_LOOKUP_TYPE = LookupTypes.PARTIAL @@ -157,7 +157,7 @@ class CachedValueSearchBackend(SearchBackend): # related objects necessary to render the prescribed display attributes (display_attrs). for object_type in object_types: model = object_type.model_class() - indexer = registry['search'].get(content_type_identifier(object_type)) + indexer = registry['search'].get(object_type_identifier(object_type)) if not (display_attrs := getattr(indexer, 'display_attrs', None)): continue diff --git a/netbox/netbox/search/utils.py b/netbox/netbox/search/utils.py index 824fbfb3d..333b1849f 100644 --- a/netbox/netbox/search/utils.py +++ b/netbox/netbox/search/utils.py @@ -1,14 +1,14 @@ from netbox.registry import registry -from utilities.utils import content_type_identifier +from utilities.utils import object_type_identifier __all__ = ( 'get_indexer', ) -def get_indexer(content_type): +def get_indexer(object_type): """ Return the registered search indexer for the given ContentType. """ - ct_identifier = content_type_identifier(content_type) - return registry['search'].get(ct_identifier) + identifier = object_type_identifier(object_type) + return registry['search'].get(identifier) diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index e2b4fa806..12637ba83 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -20,7 +20,7 @@ from django_tables2.utils import Accessor from extras.choices import CustomFieldTypeChoices from utilities.permissions import get_permission_for_model from utilities.templatetags.builtins.filters import render_markdown -from utilities.utils import content_type_identifier, content_type_name +from utilities.utils import object_type_identifier, object_type_name from utilities.views import get_viewname __all__ = ( @@ -339,12 +339,12 @@ class ContentTypeColumn(tables.Column): def render(self, value): if value is None: return None - return content_type_name(value, include_app=False) + return object_type_name(value, include_app=False) def value(self, value): if value is None: return None - return content_type_identifier(value) + return object_type_identifier(value) class ContentTypesColumn(tables.ManyToManyColumn): @@ -358,11 +358,11 @@ class ContentTypesColumn(tables.ManyToManyColumn): super().__init__(separator=separator, *args, **kwargs) def transform(self, obj): - return content_type_name(obj, include_app=False) + return object_type_name(obj, include_app=False) def value(self, value): return ','.join([ - content_type_identifier(ct) for ct in self.filter(value) + object_type_identifier(ot) for ot in self.filter(value) ]) diff --git a/netbox/utilities/forms/fields/content_types.py b/netbox/utilities/forms/fields/content_types.py index 0223ab05a..d38454761 100644 --- a/netbox/utilities/forms/fields/content_types.py +++ b/netbox/utilities/forms/fields/content_types.py @@ -1,6 +1,6 @@ from django import forms -from utilities.utils import content_type_name +from utilities.utils import object_type_name __all__ = ( 'ContentTypeChoiceField', @@ -17,7 +17,7 @@ class ContentTypeChoiceMixin: def label_from_instance(self, obj): try: - return content_type_name(obj) + return object_type_name(obj) except AttributeError: return super().label_from_instance(obj) diff --git a/netbox/utilities/forms/fields/csv.py b/netbox/utilities/forms/fields/csv.py index 97d772412..5e138b6c3 100644 --- a/netbox/utilities/forms/fields/csv.py +++ b/netbox/utilities/forms/fields/csv.py @@ -5,7 +5,7 @@ from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.db.models import Q from utilities.choices import unpack_grouped_choices -from utilities.utils import content_type_identifier +from utilities.utils import object_type_identifier __all__ = ( 'CSVChoiceField', @@ -86,7 +86,7 @@ class CSVContentTypeField(CSVModelChoiceField): STATIC_CHOICES = True def prepare_value(self, value): - return content_type_identifier(value) + return object_type_identifier(value) def to_python(self, value): if not value: @@ -115,4 +115,4 @@ class CSVMultipleContentTypeField(forms.ModelMultipleChoiceField): app_label, model = name.split('.') ct_filter |= Q(app_label=app_label, model=model) return list(ContentType.objects.filter(ct_filter).values_list('pk', flat=True)) - return content_type_identifier(value) + return object_type_identifier(value) diff --git a/netbox/utilities/testing/base.py b/netbox/utilities/testing/base.py index 324798d44..eedb7a4bc 100644 --- a/netbox/utilities/testing/base.py +++ b/netbox/utilities/testing/base.py @@ -13,7 +13,7 @@ from taggit.managers import TaggableManager from core.models import ObjectType from users.models import ObjectPermission from utilities.permissions import resolve_permission_type -from utilities.utils import content_type_identifier +from utilities.utils import object_type_identifier from .utils import extract_form_failures __all__ = ( @@ -114,7 +114,7 @@ class ModelTestCase(TestCase): if value and type(field) in (ManyToManyField, TaggableManager): if field.related_model in (ContentType, ObjectType) and api: - model_dict[key] = sorted([content_type_identifier(ct) for ct in value]) + model_dict[key] = sorted([object_type_identifier(ot) for ot in value]) else: model_dict[key] = sorted([obj.pk for obj in value]) @@ -122,8 +122,8 @@ class ModelTestCase(TestCase): # Replace ContentType numeric IDs with . if type(getattr(instance, key)) in (ContentType, ObjectType): - ct = ObjectType.objects.get(pk=value) - model_dict[key] = content_type_identifier(ct) + object_type = ObjectType.objects.get(pk=value) + model_dict[key] = object_type_identifier(object_type) # Convert IPNetwork instances to strings elif type(value) is IPNetwork: diff --git a/netbox/utilities/utils.py b/netbox/utilities/utils.py index 2e69bfa6a..df2e69308 100644 --- a/netbox/utilities/utils.py +++ b/netbox/utilities/utils.py @@ -16,27 +16,27 @@ def dynamic_import(name): return mod -def content_type_name(ct, include_app=True): +def object_type_name(object_type, include_app=True): """ - Return a human-friendly ContentType name (e.g. "DCIM > Site"). + Return a human-friendly ObjectType name (e.g. "DCIM > Site"). """ try: - meta = ct.model_class()._meta + meta = object_type.model_class()._meta app_label = title(meta.app_config.verbose_name) model_name = title(meta.verbose_name) if include_app: return f'{app_label} > {model_name}' return model_name except AttributeError: - # Model no longer exists - return f'{ct.app_label} > {ct.model}' + # Model does not exist + return f'{object_type.app_label} > {object_type.model}' -def content_type_identifier(ct): +def object_type_identifier(object_type): """ - Return a "raw" ContentType identifier string suitable for bulk import/export (e.g. "dcim.site"). + Return a "raw" ObjectType identifier string suitable for bulk import/export (e.g. "dcim.site"). """ - return f'{ct.app_label}.{ct.model}' + return f'{object_type.app_label}.{object_type.model}' def local_now():