Parcourir la source

Fixed page titles in the browsable API

Jeremy Stretch il y a 7 ans
Parent
commit
c37cfeb74f
2 fichiers modifiés avec 21 ajouts et 1 suppressions
  1. 2 1
      netbox/netbox/settings.py
  2. 19 0
      netbox/utilities/api.py

+ 2 - 1
netbox/netbox/settings.py

@@ -221,6 +221,7 @@ SECRETS_MIN_PUBKEY_SIZE = 2048
 # Django REST framework (API)
 REST_FRAMEWORK_VERSION = VERSION[0:3]  # Use major.minor as API version
 REST_FRAMEWORK = {
+    'ALLOWED_VERSIONS': [REST_FRAMEWORK_VERSION],
     'DEFAULT_AUTHENTICATION_CLASSES': (
         'rest_framework.authentication.SessionAuthentication',
         'utilities.api.TokenAuthentication',
@@ -233,9 +234,9 @@ REST_FRAMEWORK = {
         'utilities.api.TokenPermissions',
     ),
     'DEFAULT_VERSION': REST_FRAMEWORK_VERSION,
-    'ALLOWED_VERSIONS': [REST_FRAMEWORK_VERSION],
     'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning',
     'PAGE_SIZE': PAGINATE_COUNT,
+    'VIEW_NAME_FUNCTION': 'utilities.api.get_view_name',
 }
 
 # Django debug toolbar

+ 19 - 0
netbox/utilities/api.py

@@ -9,6 +9,7 @@ from rest_framework.exceptions import APIException
 from rest_framework.pagination import LimitOffsetPagination
 from rest_framework.permissions import BasePermission, DjangoModelPermissions, SAFE_METHODS
 from rest_framework.serializers import Field, ModelSerializer, ValidationError
+from rest_framework.views import get_view_name as drf_get_view_name
 
 from users.models import Token
 
@@ -196,3 +197,21 @@ class OptionalLimitOffsetPagination(LimitOffsetPagination):
                 pass
 
         return self.default_limit
+
+
+#
+# Miscellaneous
+#
+
+def get_view_name(view_cls, suffix=None):
+    """
+    Derive the view name from its associated model, if it has one. Fall back to DRF's built-in `get_view_name`.
+    """
+    if hasattr(view_cls, 'queryset'):
+        name = view_cls.queryset.model._meta.verbose_name
+        name = ' '.join([w[0].upper() + w[1:] for w in name.split()])  # Capitalize each word
+        if suffix:
+            name = "{} {}".format(name, suffix)
+        return name
+
+    return drf_get_view_name(view_cls, suffix)