From 6ac700e43f94a7aacb0b9b93d8aee5dfa047242b Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 21 Mar 2024 14:51:50 -0400 Subject: [PATCH] Move object_type_identifier() & object_type_name() to utilities.object_types --- netbox/extras/dashboard/widgets.py | 2 +- netbox/extras/models/search.py | 2 -- netbox/netbox/api/serializers/generic.py | 2 +- netbox/netbox/search/backends.py | 2 +- netbox/netbox/search/utils.py | 2 +- netbox/netbox/tables/columns.py | 2 +- .../utilities/forms/fields/content_types.py | 2 +- netbox/utilities/forms/fields/csv.py | 2 +- netbox/utilities/object_types.py | 29 +++++++++++++++++++ netbox/utilities/testing/base.py | 2 +- netbox/utilities/utils.py | 25 ---------------- 11 files changed, 37 insertions(+), 35 deletions(-) create mode 100644 netbox/utilities/object_types.py diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index 399cf1338..23f082ce2 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -15,10 +15,10 @@ from django.utils.translation import gettext as _ from core.models import ObjectType from extras.choices import BookmarkOrderingChoices from netbox.choices import ButtonColorChoices +from utilities.object_types import object_type_identifier, object_type_name 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 object_type_identifier, object_type_name from utilities.views import get_viewname from .utils import register_widget diff --git a/netbox/extras/models/search.py b/netbox/extras/models/search.py index 23cb0615d..ae99f1735 100644 --- a/netbox/extras/models/search.py +++ b/netbox/extras/models/search.py @@ -4,9 +4,7 @@ from django.db import models 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 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 67ae56d3b..b1cf40406 100644 --- a/netbox/netbox/api/serializers/generic.py +++ b/netbox/netbox/api/serializers/generic.py @@ -5,7 +5,7 @@ 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 object_type_identifier +from utilities.object_types import object_type_identifier __all__ = ( 'GenericObjectSerializer', diff --git a/netbox/netbox/search/backends.py b/netbox/netbox/search/backends.py index ee497aa77..227a79205 100644 --- a/netbox/netbox/search/backends.py +++ b/netbox/netbox/search/backends.py @@ -14,9 +14,9 @@ from netaddr.core import AddrFormatError from core.models import ObjectType from extras.models import CachedValue, CustomField from netbox.registry import registry +from utilities.object_types import object_type_identifier from utilities.querysets import RestrictedPrefetch from utilities.string import title -from utilities.utils import object_type_identifier from . import FieldTypes, LookupTypes, get_indexer DEFAULT_LOOKUP_TYPE = LookupTypes.PARTIAL diff --git a/netbox/netbox/search/utils.py b/netbox/netbox/search/utils.py index 333b1849f..9ae5edee5 100644 --- a/netbox/netbox/search/utils.py +++ b/netbox/netbox/search/utils.py @@ -1,5 +1,5 @@ from netbox.registry import registry -from utilities.utils import object_type_identifier +from utilities.object_types import object_type_identifier __all__ = ( 'get_indexer', diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index 12637ba83..193bf8a17 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -18,9 +18,9 @@ from django_tables2.columns import library from django_tables2.utils import Accessor from extras.choices import CustomFieldTypeChoices +from utilities.object_types import object_type_identifier, object_type_name from utilities.permissions import get_permission_for_model from utilities.templatetags.builtins.filters import render_markdown -from utilities.utils import object_type_identifier, object_type_name from utilities.views import get_viewname __all__ = ( diff --git a/netbox/utilities/forms/fields/content_types.py b/netbox/utilities/forms/fields/content_types.py index d38454761..19da4c015 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 object_type_name +from utilities.object_types import object_type_name __all__ = ( 'ContentTypeChoiceField', diff --git a/netbox/utilities/forms/fields/csv.py b/netbox/utilities/forms/fields/csv.py index 5e138b6c3..6d7ba4d61 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 object_type_identifier +from utilities.object_types import object_type_identifier __all__ = ( 'CSVChoiceField', diff --git a/netbox/utilities/object_types.py b/netbox/utilities/object_types.py new file mode 100644 index 000000000..88cbbd3e8 --- /dev/null +++ b/netbox/utilities/object_types.py @@ -0,0 +1,29 @@ +from .string import title + +__all__ = ( + 'object_type_identifier', + 'object_type_name', +) + + +def object_type_identifier(object_type): + """ + Return a "raw" ObjectType identifier string suitable for bulk import/export (e.g. "dcim.site"). + """ + return f'{object_type.app_label}.{object_type.model}' + + +def object_type_name(object_type, include_app=True): + """ + Return a human-friendly ObjectType name (e.g. "DCIM > Site"). + """ + try: + 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 does not exist + return f'{object_type.app_label} > {object_type.model}' diff --git a/netbox/utilities/testing/base.py b/netbox/utilities/testing/base.py index eedb7a4bc..2fe1b587d 100644 --- a/netbox/utilities/testing/base.py +++ b/netbox/utilities/testing/base.py @@ -12,8 +12,8 @@ from taggit.managers import TaggableManager from core.models import ObjectType from users.models import ObjectPermission +from utilities.object_types import object_type_identifier from utilities.permissions import resolve_permission_type -from utilities.utils import object_type_identifier from .utils import extract_form_failures __all__ = ( diff --git a/netbox/utilities/utils.py b/netbox/utilities/utils.py index df2e69308..38e542bc0 100644 --- a/netbox/utilities/utils.py +++ b/netbox/utilities/utils.py @@ -2,8 +2,6 @@ from django.db.models import ManyToOneRel from django.utils import timezone from django.utils.timezone import localtime -from .string import title - def dynamic_import(name): """ @@ -16,29 +14,6 @@ def dynamic_import(name): return mod -def object_type_name(object_type, include_app=True): - """ - Return a human-friendly ObjectType name (e.g. "DCIM > Site"). - """ - try: - 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 does not exist - return f'{object_type.app_label} > {object_type.model}' - - -def object_type_identifier(object_type): - """ - Return a "raw" ObjectType identifier string suitable for bulk import/export (e.g. "dcim.site"). - """ - return f'{object_type.app_label}.{object_type.model}' - - def local_now(): """ Return the current date & time in the system timezone.