Fixed #6875 -- Made OpenAPI Schema operationId casing consistent. (#6876)

This commit is contained in:
Peter J. Farrell 2019-09-03 09:05:43 -05:00 committed by Carlton Gibson
parent 1cc4be47b4
commit b3f032fb8f
2 changed files with 8 additions and 5 deletions

View File

@ -111,7 +111,7 @@ class AutoSchema(ViewInspector):
""" """
method_name = getattr(self.view, 'action', method.lower()) method_name = getattr(self.view, 'action', method.lower())
if is_list_view(path, method, self.view): if is_list_view(path, method, self.view):
action = 'List' action = 'list'
elif method_name not in self.method_mapping: elif method_name not in self.method_mapping:
action = method_name action = method_name
else: else:
@ -135,10 +135,13 @@ class AutoSchema(ViewInspector):
name = name[:-7] name = name[:-7]
elif name.endswith('View'): elif name.endswith('View'):
name = name[:-4] name = name[:-4]
if name.endswith(action): # ListView, UpdateAPIView, ThingDelete ...
# Due to camel-casing of classes and `action` being lowercase, apply title in order to find if action truly
# comes at the end of the name
if name.endswith(action.title()): # ListView, UpdateAPIView, ThingDelete ...
name = name[:-len(action)] name = name[:-len(action)]
if action == 'List' and not name.endswith('s'): # ListThings instead of ListThing if action == 'list' and not name.endswith('s'): # listThings instead of listThing
name += 's' name += 's'
return action + name return action + name

View File

@ -80,7 +80,7 @@ class TestOperationIntrospection(TestCase):
operation = inspector.get_operation(path, method) operation = inspector.get_operation(path, method)
assert operation == { assert operation == {
'operationId': 'ListExamples', 'operationId': 'listExamples',
'parameters': [], 'parameters': [],
'responses': { 'responses': {
'200': { '200': {
@ -402,7 +402,7 @@ class TestOperationIntrospection(TestCase):
inspector.view = view inspector.view = view
operationId = inspector._get_operation_id(path, method) operationId = inspector._get_operation_id(path, method)
assert operationId == 'ListExamples' assert operationId == 'listExamples'
def test_repeat_operation_ids(self): def test_repeat_operation_ids(self):
router = routers.SimpleRouter() router = routers.SimpleRouter()