-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Closed
Description
Attempting to view the openapi (swagger) api docs for the cms fails. The Swagger web UI loads successfully, but displays a message "Failed to load API definition.". The CMS logs show the following traceback and error:
cms-1 | 2025-07-30 04:47:20,468 ERROR 54 [django.request] [user None] [ip None] log.py:246 - Internal Server Error: /api-docs/
cms-1 | Traceback (most recent call last):
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
cms-1 | response = get_response(request)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
cms-1 | response = wrapped_callback(request, *callback_args, **callback_kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/opt/pyenv/versions/3.11.8/lib/python3.11/contextlib.py", line 81, in inner
cms-1 | return func(*args, **kwds)
cms-1 | ^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/csrf.py", line 56, in wrapper_view
cms-1 | return view_func(*args, **kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 105, in view
cms-1 | return self.dispatch(request, *args, **kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 509, in dispatch
cms-1 | response = self.handle_exception(exc)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 469, in handle_exception
cms-1 | self.raise_uncaught_exception(exc)
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
cms-1 | raise exc
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 506, in dispatch
cms-1 | response = handler(request, *args, **kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/drf_yasg/views.py", line 112, in get
cms-1 | schema = generator.get_schema(request, self.public)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/drf_yasg/generators.py", line 276, in get_schema
cms-1 | paths, prefix = self.get_paths(endpoints, components, request, public)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/drf_yasg/generators.py", line 482, in get_paths
cms-1 | operation = self.get_operation(view, path, prefix, method, components, request)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/drf_yasg/generators.py", line 524, in get_operation
cms-1 | operation = view_inspector.get_operation(operation_keys)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/drf_yasg/inspectors/view.py", line 45, in get_operation
cms-1 | responses = self.get_responses()
cms-1 | ^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/drf_yasg/inspectors/view.py", line 182, in get_responses
cms-1 | responses=self.get_response_schemas(response_serializers)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/drf_yasg/inspectors/view.py", line 268, in get_response_schemas
cms-1 | serializer = force_serializer_instance(serializer)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/drf_yasg/utils.py", line 327, in force_serializer_instance
cms-1 | assert isinstance(serializer, serializers.BaseSerializer), \
cms-1 | AssertionError: Serializer class or instance required, not UnionType
cms-1 | [30/Jul/2025 04:47:20] "GET /api-docs/?format=openapi HTTP/1.1" 500 327998
The environment I was testing in was a local master devstack launched with Tutor (dev mode).
Metadata
Metadata
Assignees
Labels
No labels