Skip to content

Handle Default Responses in response generation #124

Description

@bladecoates

Describe the bug
In the specifications, default MAY be used as a default response object for all HTTP codes that are not covered individually by the specification.

response = response_from_data(status_code=int(code), data=response_data)

ValueError: invalid literal for int() with base 10: 'default'

To Reproduce
Sample code from a openapi spec.

      responses:
        "200":
          description: An array of items
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ItemsArrayObj"
        default:
          description: Unknown error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"

Expected behavior
Code should generate a custom ApiResponseError class if default is defined, with content of error being a model of the reference/schema items

OpenAPI Spec File
Sample code from a openapi spec.

      responses:
        "200":
          description: An array of items
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ItemsArrayObj"
        default:
          description: Unknown error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"

Desktop (please complete the following information):

  • OS: Linux Mint
  • Python Version: 3.8.3
  • openapi-python-client version: git main

Activity

  1. added and removed
    🐞bugSomething isn't working
    on Sep 26, 2020
  2. micimize commented on Sep 28, 2020

    @micimize

    fwiy I just monkeypatched parser/openapi.py temporarily with
    edit: actually the default was the valid response so for me it ended up being

    response_from_data(status_code=int(200 if code == 'default' else code)

    I think it is atypical

    @staticmethod
    def _add_responses(endpoint: "Endpoint", data: oai.Responses) -> "Endpoint":
        endpoint = deepcopy(endpoint)
        for code, response_data in data.items():
    +       if code == 'default':
    +           continue
            response = response_from_data(status_code=int(code), data=response_data)
            if isinstance(response, ParseError):
                endpoint.errors.append(
                    ParseError(
                        detail=(
                            f"Cannot parse response for status code {code}, "
                            f"response will be ommitted from generated client"
                        ),
                        data=response.data,
                    )
                )
                continue
            if isinstance(response, (RefResponse, ListRefResponse)):
                endpoint.relative_imports.add(import_string_from_reference(response.reference, prefix="...models"))
            endpoint.responses.append(response)
        return endpoint
  3. added a commit that references this issue on Jan 27, 2021
  4. added 2 commits that reference this issue on Feb 11, 2021
  5. locked and limited conversation to collaborators on Aug 13, 2023
  6. converted this issue into a discussion #832 on Aug 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions