Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

[BUG] Error transforming enum values beginning with numbers #400

Closed
5 of 6 tasks
Marcelo00 opened this issue Mar 6, 2024 · 1 comment · Fixed by #401
Closed
5 of 6 tasks

[BUG] Error transforming enum values beginning with numbers #400

Marcelo00 opened this issue Mar 6, 2024 · 1 comment · Fixed by #401
Labels
bug Something isn't working

Comments

@Marcelo00
Copy link

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • Have you tested with the latest master to confirm the issue still exists?
  • Have you searched for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Sponsorship to speed up the bug fix or feature request
Description

Invalid generated function names base on enum values beginning with a number like 2D_Object. This enum will be transformed to:

# coding: utf-8

"""
    the test title
    The test REST API  # noqa: E501
    The version of the OpenAPI document: 1
    Generated by: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator
"""

from __future__ import annotations
from openapi_client.shared_imports.schema_imports import *  # pyright: ignore [reportWildcardImportFromLibrary]



class AnnotationTypeEnums:

    @schemas.classproperty
    def 2D_OBJECT(cls) -> typing.Literal["2D_Object"]:
        return AnnotationType.validate("2D_Object")

    @schemas.classproperty
    def 3D_OBJECT(cls) -> typing.Literal["3D_Object"]:
        return AnnotationType.validate("3D_Object")


@dataclasses.dataclass(frozen=True)
class AnnotationType(
    schemas.Schema
):
    """NOTE: This class is auto generated by OpenAPI JSON Schema Generator.
    Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator

    Do not edit the class manually.
    """
    types: typing.FrozenSet[typing.Type] = frozenset({
        str,
    })
    enum_value_to_name: typing.Mapping[typing.Union[int, float, str, schemas.Bool, None], str] = dataclasses.field(
        default_factory=lambda: {
            "2D_Object": "2D_OBJECT",
            "3D_Object": "3D_OBJECT",
        }
    )
    enums = AnnotationTypeEnums

    @typing.overload
    @classmethod
    def validate(
        cls,
        arg: typing.Literal["2D_Object"],
        configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
    ) -> typing.Literal["2D_Object"]: ...
    @typing.overload
    @classmethod
    def validate(
        cls,
        arg: typing.Literal["3D_Object"],
        configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
    ) -> typing.Literal["3D_Object"]: ...
    @typing.overload
    @classmethod
    def validate(
        cls,
        arg: str,
        configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
    ) -> typing.Literal["2D_Object","3D_Object",]: ...
    @classmethod
    def validate(
        cls,
        arg,
        configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
    ) -> typing.Literal[
        "2D_Object",
        "3D_Object",
    ]:
        validated_arg = super().validate_base(
            arg,
            configuration=configuration,
        )
        return typing.cast(typing.Literal[
                "2D_Object",
                "3D_Object",
            ],
            validated_arg
        )

The resulting function name is not a valid Python name.

I know that this issue mention the same problem which is apparently fixed but it still not working in my case.

openapi-json-schema-generator version

Current master branch

OpenAPI declaration file content or url
openapi: 3.0.0
components:
    examples: {}
    headers: {}
    parameters: {}
    requestBodies: {}
    responses: {}
    schemas:
        AnnotationType:
            enum:
                - 2D_Object
                - 3D_Object
            type: string
info:
    title: the test title
    version: '1'
    description: 'The test REST API'
    contact: {}
paths:
    '/example/get':
        get:
            operationId: GetExample
            responses:
                '200':
                    description: Ok
Generation Details

I I build the corresponding .jar file based on the current master branch via the command mvn clean install and used the following command to generate the python client:

java -jar target/openapi-json-schema-generator-cli.jar generate -i /home/marcel/Documents/arbeit_projekte/openapi_generator_tests/openapi_reduced.yaml -g python -o /home/marcel/Documents/arbeit_projekte/openapi_generator_tests/reduced_spec --skip-validate-spec --additional-properties=generateAliasAsModel=true
Java version: 11.0.22
Apache Maven: 3.9.6

Steps to reproduce
  1. Use the provided yaml file to generate the python client
  2. Check the schema file for the AnnotationType
Related issues/PRs

#70

Suggest a fix
@spacether spacether added the bug Something isn't working label Mar 6, 2024
@spacether spacether linked a pull request Mar 6, 2024 that will close this issue
3 tasks
@spacether
Copy link
Contributor

Thank you for reporting this bug. I merged in a fix and released it in version 4.1.1.
You can get the fixed version from this repo or from dockerhub .

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants