Skip to content

Studio openapi api-docs crashes with 500 error #37084

@samuelallan72

Description

@samuelallan72

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

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions