mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 17:26:10 -06:00
9608 bulk delete should specify input
This commit is contained in:
parent
989a589ee7
commit
d51dd96758
@ -8,6 +8,7 @@ from drf_spectacular.extensions import (
|
|||||||
)
|
)
|
||||||
from drf_spectacular.openapi import AutoSchema
|
from drf_spectacular.openapi import AutoSchema
|
||||||
from drf_spectacular.plumbing import (
|
from drf_spectacular.plumbing import (
|
||||||
|
build_media_type_object,
|
||||||
ComponentRegistry,
|
ComponentRegistry,
|
||||||
ResolvedComponent,
|
ResolvedComponent,
|
||||||
build_basic_type,
|
build_basic_type,
|
||||||
@ -51,6 +52,7 @@ class NetBoxAutoSchema(AutoSchema):
|
|||||||
2. bulk operations should specify a list
|
2. bulk operations should specify a list
|
||||||
3. bulk operations don't have filter params
|
3. bulk operations don't have filter params
|
||||||
4. bulk operations don't have pagination
|
4. bulk operations don't have pagination
|
||||||
|
5. bulk delete should specify input
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -120,3 +122,42 @@ class NetBoxAutoSchema(AutoSchema):
|
|||||||
if self.is_bulk_action:
|
if self.is_bulk_action:
|
||||||
return None
|
return None
|
||||||
return super()._get_paginator()
|
return super()._get_paginator()
|
||||||
|
|
||||||
|
def _get_request_body(self, direction='request'):
|
||||||
|
# bulk delete should specify input
|
||||||
|
if (not self.is_bulk_action) or (self.method != 'DELETE'):
|
||||||
|
return super()._get_request_body(direction)
|
||||||
|
|
||||||
|
# rest from drf_spectacular.openapi.AutoSchema._get_request_body
|
||||||
|
# but remove teh unsafe method check
|
||||||
|
|
||||||
|
request_serializer = self.get_request_serializer()
|
||||||
|
|
||||||
|
if isinstance(request_serializer, dict):
|
||||||
|
content = []
|
||||||
|
request_body_required = True
|
||||||
|
for media_type, serializer in request_serializer.items():
|
||||||
|
schema, partial_request_body_required = self._get_request_for_media_type(serializer, direction)
|
||||||
|
examples = self._get_examples(serializer, direction, media_type)
|
||||||
|
if schema is None:
|
||||||
|
continue
|
||||||
|
content.append((media_type, schema, examples))
|
||||||
|
request_body_required &= partial_request_body_required
|
||||||
|
else:
|
||||||
|
schema, request_body_required = self._get_request_for_media_type(request_serializer, direction)
|
||||||
|
if schema is None:
|
||||||
|
return None
|
||||||
|
content = [
|
||||||
|
(media_type, schema, self._get_examples(request_serializer, direction, media_type))
|
||||||
|
for media_type in self.map_parsers()
|
||||||
|
]
|
||||||
|
|
||||||
|
request_body = {
|
||||||
|
'content': {
|
||||||
|
media_type: build_media_type_object(schema, examples)
|
||||||
|
for media_type, schema, examples in content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if request_body_required:
|
||||||
|
request_body['required'] = request_body_required
|
||||||
|
return request_body
|
||||||
|
Loading…
Reference in New Issue
Block a user