Python swagger-client for shopware 6

Viewed 254

I have generated a Python client via the swagger-codegen-cli (v3) docker image in my GitLab ci pipline for a Shopware 6 shop.

The problem I encounter is that every endpoint returns empty data. The strange part is that when I debug the client, I can see the data via the inspector. Then in one step before the data is returned, it tries to deserialize the data and it returns a dictionary without any data inside.

return_data = response_data
if _preload_content:
    # deserialize response data
    if response_type:
        return_data = self.deserialize(response_data, response_type)

This is from the __call_api() function. When I inspect response_data, I can see it contains the data I need but deserialize() returns this: {'data': None, 'included': None, 'links': None, 'meta': None}

I know I could set the parameter _preload_content to false, but then I get the raw request response as a byte string and that kind of defeats the purpose of using a swagger client.

  • Is it a problem of the specs from my shop?
  • Is the codegen not working correctly?
  • Or is the python generator from swagger the problem?

EDIT:

I narrowed the problem down to the __init__() function of all the Response classes which all inherit from the Success class:

    def __init__(self, data=None, links=None, *args, **kwargs):  # noqa: E501
        """InlineResponse200156 - a model defined in Swagger"""  # noqa: E501
        self._data = None
        self._links = None
        self.discriminator = None
        if data is not None:
            self.data = data
        if links is not None:
            self.links = links
        Success.__init__(self, *args, **kwargs)

In the last step it calls the __init__() function of Success:

    def __init__(self, meta=None, links=None, data=None, included=None):  # noqa: E501
        """Success - a model defined in Swagger"""  # noqa: E501
        self._meta = None
        self._links = None
        self._data = None
        self._included = None
        self.discriminator = None
        if meta is not None:
            self.meta = meta
        if links is not None:
            self.links = links
        self.data = data
        if included is not None:
            self.included = included

Since data is not passed to the constructor of Success and there self.data gets overwritten with 'None'.

It seems the Python generator for swagger generates these constructors wrong. When I deleted the overwritten constructor in InlineResponse200156 it seemed to work, but since this issue is in all the generated classes that inherit success, I think the issue is in the generator itself.

0 Answers
Related