openapi-python-client icon indicating copy to clipboard operation
openapi-python-client copied to clipboard

The requestBody declared with $ref is not generating json_body

Open RockyMM opened this issue 3 years ago • 7 comments

Describe the bug If a requestBody is declared with a $ref, then no json_body property is generated. If the reference is inlined, then json_body is generated.

To Reproduce Steps to reproduce the behaviour:

  1. Example schema:

paths:
  "/objects":
    post:
      operationId: object_create
      requestBody:
        $ref: "#/components/requestBodies/Object"


  1. generated API is:
def sync_detailed(
    *,
    client: Client,
) -> Response[Object]:
    """
    Returns:
        Response[Object]
    """

    kwargs = _get_kwargs(
        client=client,
    )

    response = httpx.request(
        verify=client.verify_ssl,
        **kwargs,
    )

    return _build_response(response=response)

Expected behavior The expected API should be:

def sync_detailed(
    *,
    client: Client,
    json_body: Object,
) -> Response[Object]:
    """
    Args:
        json_body (Object):

    Returns:
        Response[Object]
    """

    kwargs = _get_kwargs(
        client=client,
        json_body=json_body,
    )

    response = httpx.request(
        verify=client.verify_ssl,
        **kwargs,
    )

    return _build_response(response=response)

OpenAPI Spec File test.yaml

RockyMM avatar Mar 31 '22 13:03 RockyMM

Hi I just submitted a PR above which works with your yaml. It'll be helpful if you have some time to review

Output

def sync_detailed(
    *,
    client: Client,
    json_body: Object,
) -> Response[Object]:
    """
    Args:
        json_body (Object):

    Returns:
        Response[Object]
    """

    kwargs = _get_kwargs(
        client=client,
        json_body=json_body,
    )

    response = httpx.request(
        verify=client.verify_ssl,
        **kwargs,
    )

    return _build_response(response=response)

async def asyncio_detailed(
    *,
    client: Client,
    json_body: Object,
) -> Response[Object]:
    """
    Args:
        json_body (Object):

    Returns:
        Response[Object]
    """

    kwargs = _get_kwargs(
        client=client,
        json_body=json_body,
    )

    async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
        response = await _client.request(**kwargs)

    return _build_response(response=response)

kigawas avatar Jun 13 '22 05:06 kigawas

hello, do you have an update on the ongoing PR? I'm facing the exact same issue :/

Leemur89 avatar Dec 12 '23 09:12 Leemur89

@Leemur89 This library seems not actively maintained. I recommend just using the official openapi generator

kigawas avatar Dec 13 '23 04:12 kigawas

@kigawas are you sure? It just got a new release last week Otherwise do you hav the link to the official openapi generator please? I've been using this one to generate custom python code and could not find a better one (however I found a workaround to dereference my swagger file)

Leemur89 avatar Dec 14 '23 10:12 Leemur89

@Leemur89 The biggest problem is that it only supports Open API v3.0 partially and has no plan to upgrade, while fastapi has already shifted to 3.1. If some day I may have to change to use another library, I'd rather change it now.

https://github.com/openapi-generators/openapi-python-client/issues/585

kigawas avatar Dec 15 '23 02:12 kigawas

@Leemur89 The biggest problem is that it only supports Open API v3.0 partially and has no plan to upgrade, while fastapi has already swifted to 3.1. If some day I may have to change to use another library, I'd rather change it now.

3.1 support is in progress in https://github.com/openapi-generators/openapi-python-client/pull/856 . I would categorize this project as "lightly maintained", I am still working on it but it's (mostly) only me and it's not my focus.

dbanty avatar Dec 15 '23 02:12 dbanty

@dbanty Glad to hear you are working on this!

kigawas avatar Dec 15 '23 08:12 kigawas