Skip to content
This repository was archived by the owner on Mar 18, 2019. It is now read-only.
This repository was archived by the owner on Mar 18, 2019. It is now read-only.

OpenAPI data types are all named "data" #28

@paultiplady

Description

@paultiplady

I'm trying to use swagger-codegen to generate a Python client from my django-rest-swagger schema (django-rest-swagger==2.0.7, djangorestframework==3.5.3).

I am getting a lot of models named Data*, and no client models related to my actual API models.

Here's an example OpenAPI path:

  "paths" : {
    "/accounts/{id}/" : {
      "put" : {
        "tags" : [ "accounts" ],
        "summary" : "The accounts for all Users.",
        "description" : "The accounts for all Users.",
        "operationId" : "accounts_update",
        "consumes" : [ "application/json" ],
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "",
          "required" : true,
          "type" : "string"
        }, {
          "in" : "body",
          "name" : "data",
          "required" : false,
          "schema" : {
            "type" : "object",
            "required" : [ "account_number"],
            "properties" : {
              "account_number" : {
                "type" : "string",
                "description" : ""
              },
              ...
            }
          }
        } ],
        "responses" : {
          "200" : {
            "description" : ""
          }
        }
      },
      ...

Note the "in": "body", "name": "data" in the generated swagger JSON.

The model generated by swagger-codegen has the correct fields, but incorrect name:

class Data1(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self, account_number=None, ...):
        """
        Data1 - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'account_number': 'str',
            ...
        }
        ...

Per the swagger-codegen client, it's expected that the "name" field here should actually describe the resource.

@marcgibbons over at django-rest-swagger pointed out in the original issue (marcgibbons/django-rest-swagger#595) that the name field is hardcoded to data here: https://github.com/core-api/python-openapi-codec/blob/master/openapi_codec/encode.py#L167. Seems like it should either be the Serializer name, or the Serializer.Meta.model. (Configurable would be better; should be simple to delegate to an overridable function which gets passed the Serializer and returns the resource name.).

Thoughts on whether this sounds like the right approach, and where best to put this logic if it's acceptable?

Metadata

Metadata

Assignees

No one assigned

    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

      pFad - Phonifier reborn

      Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy