Project

Profile

Help

Issue #3966

Repository Version OpenAPI response schema is wrong

Added by dkliban@redhat.com about 1 year ago. Updated 6 months ago.

Status:
MODIFIED
Priority:
Normal
Assignee:
-
Category:
-
Sprint/Milestone:
Start date:
Due date:
Severity:
2. Medium
Version:
Platform Release:
Blocks Release:
OS:
Backwards Incompatible:
No
Triaged:
No
Groomed:
No
Sprint Candidate:
No
Tags:
QA Contact:
Complexity:
Smash Test:
Verified:
No
Verification Required:
No
Sprint:

Description

The OpenAPI schema for the response of Repository Version contains 2 required fields: 'add_content_units' and 'remove_content_units'. The live docs are wrong and the generated bindings produce the following traceback:

repo_version = api.repositories_versions_read(repository.latest_version_href)

Traceback (most recent call last):
  File "devel/pulp3_python_client_example/test_bindings.py", line 46, in <module>
    repo_version = api.repositories_versions_read(repository.latest_version_href)
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/api/pulp_api.py", line 6760, in repositories_versions_read
    (data) = self.repositories_versions_read_with_http_info(repository_version_href, **kwargs)  # noqa: E501
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/api/pulp_api.py", line 6838, in repositories_versions_read_with_http_info
    collection_formats=collection_formats)
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/api_client.py", line 322, in call_api
    _preload_content, _request_timeout)
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/api_client.py", line 161, in __call_api
    return_data = self.deserialize(response_data, response_type)
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/api_client.py", line 233, in deserialize
    return self.__deserialize(data, response_type)
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/api_client.py", line 272, in __deserialize
    return self.__deserialize_model(data, klass)
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/api_client.py", line 615, in __deserialize_model
    instance = klass(**kwargs)
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/models/repository_version.py", line 93, in __init__
    self.add_content_units = add_content_units
  File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/my_pulp3_client/models/repository_version.py", line 291, in add_content_units
    raise ValueError("Invalid value for `add_content_units`, must not be `None`")  # noqa: E501
ValueError: Invalid value for `add_content_units`, must not be `None`

Associated revisions

Revision 402a2920 View on GitHub
Added by dkliban@redhat.com about 1 year ago

Problem: OpenAPI schema for RepositoryVersion 'retrieve' is wrong

Solution: Create separate serializers for 'create' operation

The problem was that we had a single serializer for both GET and POST. DRF was able to
distinguish which fields were to be used for accepting POST body params and which fields to
use when serializing for a GET response. DRF knows this because some fields are 'write_only'.
However, the drf_yasg library we use for generating OpenAPI schema does not take into account
the 'write_only' attribute of a field. As a result when it was using the serializer to
generate a schema for the GET response it was including the 'write_only' fields.

This patch introduces a new serializer that is only used for the 'create' operation of the
RepositoryVersion ViewSet. This serializer is only used to inspect the inbound data in the POST
body. It is not used for the response. The response is generated using the OperationPostponed
serializer.

closes: #3966
https://pulp.plan.io/issues/3966

Revision 402a2920 View on GitHub
Added by dkliban@redhat.com about 1 year ago

Problem: OpenAPI schema for RepositoryVersion 'retrieve' is wrong

Solution: Create separate serializers for 'create' operation

The problem was that we had a single serializer for both GET and POST. DRF was able to
distinguish which fields were to be used for accepting POST body params and which fields to
use when serializing for a GET response. DRF knows this because some fields are 'write_only'.
However, the drf_yasg library we use for generating OpenAPI schema does not take into account
the 'write_only' attribute of a field. As a result when it was using the serializer to
generate a schema for the GET response it was including the 'write_only' fields.

This patch introduces a new serializer that is only used for the 'create' operation of the
RepositoryVersion ViewSet. This serializer is only used to inspect the inbound data in the POST
body. It is not used for the response. The response is generated using the OperationPostponed
serializer.

closes: #3966
https://pulp.plan.io/issues/3966

Revision 402a2920 View on GitHub
Added by dkliban@redhat.com about 1 year ago

Problem: OpenAPI schema for RepositoryVersion 'retrieve' is wrong

Solution: Create separate serializers for 'create' operation

The problem was that we had a single serializer for both GET and POST. DRF was able to
distinguish which fields were to be used for accepting POST body params and which fields to
use when serializing for a GET response. DRF knows this because some fields are 'write_only'.
However, the drf_yasg library we use for generating OpenAPI schema does not take into account
the 'write_only' attribute of a field. As a result when it was using the serializer to
generate a schema for the GET response it was including the 'write_only' fields.

This patch introduces a new serializer that is only used for the 'create' operation of the
RepositoryVersion ViewSet. This serializer is only used to inspect the inbound data in the POST
body. It is not used for the response. The response is generated using the OperationPostponed
serializer.

closes: #3966
https://pulp.plan.io/issues/3966

History

#1 Updated by dkliban@redhat.com about 1 year ago

The problem is that we have 2 fields that have a 'write_only' property set to True. Unlike DRF, drf_yasg does not make a distinction between the fields.

There is an open feature request0 for a feature like this in drf_yasg. We may need to fix this in Pulp first and and then submit a patch upstream. I'll investigate.

[0] https://github.com/axnsan12/drf-yasg/issues/70

#2 Updated by dkliban@redhat.com about 1 year ago

  • Status changed from NEW to ASSIGNED

#3 Updated by dkliban@redhat.com about 1 year ago

  • Status changed from ASSIGNED to POST

#4 Updated by dkliban@redhat.com about 1 year ago

  • Status changed from POST to MODIFIED

#5 Updated by daviddavis 6 months ago

  • Sprint/Milestone set to 3.0

#6 Updated by bmbouter 6 months ago

  • Tags deleted (Pulp 3, Pulp 3 MVP)

Please register to edit this issue

Also available in: Atom PDF