mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-18 13:06:30 -06:00
Add custom get_operation_id() method to avoid monkey-patching coreapi
This commit is contained in:
parent
963df7e398
commit
64d1f57276
@ -1,5 +1,3 @@
|
||||
from rest_framework.schemas import coreapi
|
||||
|
||||
from .fields import ChoiceField, ContentTypeField, SerializedPKRelatedField, TimeZoneField
|
||||
from .routers import OrderedDefaultRouter
|
||||
from .serializers import BulkOperationSerializer, ValidatedModelSerializer, WritableNestedSerializer
|
||||
@ -15,16 +13,3 @@ __all__ = (
|
||||
'ValidatedModelSerializer',
|
||||
'WritableNestedSerializer',
|
||||
)
|
||||
|
||||
|
||||
def is_custom_action(action):
|
||||
return action not in {
|
||||
# Default actions
|
||||
'retrieve', 'list', 'create', 'update', 'partial_update', 'destroy',
|
||||
# Bulk operations
|
||||
'bulk_update', 'bulk_partial_update', 'bulk_destroy',
|
||||
}
|
||||
|
||||
|
||||
# Monkey-patch DRF to treat bulk_destroy() as a non-custom action (see #3436)
|
||||
coreapi.is_custom_action = is_custom_action
|
||||
|
@ -12,6 +12,18 @@ from netbox.api import ChoiceField, SerializedPKRelatedField, WritableNestedSeri
|
||||
class NetBoxSwaggerAutoSchema(SwaggerAutoSchema):
|
||||
writable_serializers = {}
|
||||
|
||||
def get_operation_id(self, operation_keys=None):
|
||||
operation_keys = operation_keys or self.operation_keys
|
||||
operation_id = self.overrides.get('operation_id', '')
|
||||
if not operation_id:
|
||||
# Overwrite the action for bulk update/bulk delete views to ensure they get an operation ID that's
|
||||
# unique from their single-object counterparts (see #3436)
|
||||
if operation_keys[-1] in ('delete', 'partial_update', 'update') and not self.view.detail:
|
||||
operation_keys[-1] = f'bulk_{operation_keys[-1]}'
|
||||
operation_id = '_'.join(operation_keys)
|
||||
|
||||
return operation_id
|
||||
|
||||
def get_request_serializer(self):
|
||||
serializer = super().get_request_serializer()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user