1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Add logging output to API viewsets

This commit is contained in:
Jeremy Stretch
2020-03-02 16:51:16 -05:00
parent ca1186dca1
commit 7a10748355
2 changed files with 18 additions and 6 deletions

View File

@ -2,6 +2,7 @@
### Available Loggers ### Available Loggers
| Name | Function | | Name | Function |
|------------------|----------| |----------------------|----------|
| `netbox.views.*` | Views which handle business logic for the web UI | | `netbox.views.*` | Views which handle business logic for the web UI |
| `netbox.api.views.*` | Views which handle business logic for the web UI |

View File

@ -1,3 +1,4 @@
import logging
from collections import OrderedDict from collections import OrderedDict
import pytz import pytz
@ -294,25 +295,35 @@ class ModelViewSet(_ModelViewSet):
return super().get_serializer(*args, **kwargs) return super().get_serializer(*args, **kwargs)
def get_serializer_class(self): def get_serializer_class(self):
logger = logging.getLogger('netbox.api.views.ModelViewSet')
# If 'brief' has been passed as a query param, find and return the nested serializer for this model, if one # If 'brief' has been passed as a query param, find and return the nested serializer for this model, if one
# exists # exists
request = self.get_serializer_context()['request'] request = self.get_serializer_context()['request']
if request.query_params.get('brief', False): if request.query_params.get('brief'):
logger.debug("Request is for 'brief' format; initializing nested serializer")
try: try:
return get_serializer_for_model(self.queryset.model, prefix='Nested') serializer = get_serializer_for_model(self.queryset.model, prefix='Nested')
logger.debug(f"Using serializer {serializer}")
return serializer
except SerializerNotFound: except SerializerNotFound:
pass pass
# Fall back to the hard-coded serializer class # Fall back to the hard-coded serializer class
logger.debug(f"Using serializer {self.serializer_class}")
return self.serializer_class return self.serializer_class
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
logger = logging.getLogger('netbox.api.views.ModelViewSet')
try: try:
return super().dispatch(request, *args, **kwargs) return super().dispatch(request, *args, **kwargs)
except ProtectedError as e: except ProtectedError as e:
models = ['{} ({})'.format(o, o._meta) for o in e.protected_objects.all()] models = [
'{} ({})'.format(o, o._meta) for o in e.protected_objects.all()
]
msg = 'Unable to delete object. The following dependent objects were found: {}'.format(', '.join(models)) msg = 'Unable to delete object. The following dependent objects were found: {}'.format(', '.join(models))
logger.warning(msg)
return self.finalize_response( return self.finalize_response(
request, request,
Response({'detail': msg}, status=409), Response({'detail': msg}, status=409),