amyasnikov / validity

NetBox plugin to validate network devices
MIT License
121 stars 7 forks source link

AssertionError at /api/schema/ #98

Closed dbmkin closed 2 months ago

dbmkin commented 2 months ago

Validity Version

v2.3.2

NetBox Version

v5.0.6

Python Version

3.10.12

Steps to Reproduce

AssertionError on opening /api/schema/?format=json

Traceback

Traceback (most recent call last):
  File "/home//netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home//netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home//netbox/venv/lib/python3.10/site-packages/django/utils/decorators.py", line 188, in _view_wrapper
    result = _process_exception(request, e)
  File "/home//netbox/venv/lib/python3.10/site-packages/django/utils/decorators.py", line 186, in _view_wrapper
    response = view_func(request, *args, **kwargs)
  File "/home//netbox/venv/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
    return view_func(request, *args, **kwargs)
  File "/home//netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 104, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home//netbox/venv/lib/python3.10/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/home//netbox/venv/lib/python3.10/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home//netbox/venv/lib/python3.10/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/home//netbox/venv/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/views.py", line 84, in get
    return self._get_schema_response(request)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/views.py", line 92, in _get_schema_response
    data=generator.get_schema(request=request, public=self.serve_public),
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/generators.py", line 285, in get_schema
    paths=self.parse(request, public),
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/generators.py", line 256, in parse
    operation = view.schema.get_operation(
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 112, in get_operation
    operation['responses'] = self._get_response_bodies()
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 1374, in _get_response_bodies
    return {'200': self._get_response_for_code(response_serializers, '200', direction=direction)}
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 1430, in _get_response_for_code
    component = self.resolve_serializer(serializer, direction)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 1614, in resolve_serializer
    component.schema = self._map_serializer(serializer, direction, bypass_extensions)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 930, in _map_serializer
    schema = self._map_basic_serializer(serializer, direction)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 1029, in _map_basic_serializer
    schema = self._map_serializer_field(field, direction)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 680, in _map_serializer_field
    schema = self._map_serializer_field(field.child_relation, direction)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 653, in _map_serializer_field
    schema = serializer_field_extension.map_serializer_field(self, direction)
  File "/home//netbox/netbox/core/api/schema.py", line 265, in map_serializer_field
    component = auto_schema.resolve_serializer(self.target.serializer, direction)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/openapi.py", line 1601, in resolve_serializer
    assert_basic_serializer(serializer)
  File "/home//netbox/venv/lib/python3.10/site-packages/drf_spectacular/plumbing.py", line 186, in assert_basic_serializer
    assert is_basic_serializer(serializer), (
AssertionError: internal assumption violated because we expected a basic serializer here and instead got a "functools.partial(<class 'rest_framework.serializers.CommandSerializer'>, nested=True)". This may be the result of another app doing some unexpected magic or an invalid internal call. Feel free to report this as a bug at https://github.com/tfranzel/drf-spectacular/issues
amyasnikov commented 2 months ago

Fixed, thanks @dbmkin