A regression on v4.0.0-beta2 or latest fails during code generation when a
v4.0.0-beta2
---
openapi: 3.0.2
info:
title: My API
version: 0.1.0
description: Some description
paths:
/files/:
post:
summary: Upload file.
operationId: upload_file
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file_content:
type: string
format: binary
responses:
'201':
$ref: '#/components/responses/FileDetails'
components:
schemas:
BaseMetadata:
type: object
required:
- id
- url
properties:
id:
description: File identifier.
type: string
format: uuid
example: d06861a5-a14c-449c-bc9a-8f547186286a
url:
description: File URL
type: string
format: url
example: gs://data-bucket/d06861a5-a14c-449c-bc9a-8f547186286a
responses:
FileDetails:
description: File details.
content:
application/json:
schema:
$ref: '#/components/schemas/BaseMetadata'
The following command fails:
$ docker run --rm -v $PWD/tmp:/local openapitools/openapi-generator-cli:v4.0.0-beta2 generate -i /local/bug.yaml -g python -o /tmp/
[main] INFO o.o.c.ignore.CodegenIgnoreProcessor - No .openapi-generator-ignore file found.
[main] INFO o.o.c.languages.PythonClientCodegen - Environment variable PYTHON_POST_PROCESS_FILE not defined so the Python code may not be properly formatted. To define it, try 'export PYTHON_POST_PROCESS_FILE="/usr/local/bin/yapf -i"' (Linux/Mac)
[main] INFO o.o.c.languages.PythonClientCodegen - NOTE: To enable file post-processing, 'enablePostProcessFile' must be set to `true` (--enable-post-process-file for CLI).
[main] WARN o.o.codegen.utils.URLPathUtils - 'host' (OAS 2.0) or 'servers' (OAS 3.0) not defined in the spec. Default to [http://localhost] for server URL [http://localhost/]
[main] WARN o.o.codegen.utils.URLPathUtils - 'host' (OAS 2.0) or 'servers' (OAS 3.0) not defined in the spec. Default to [http://localhost] for server URL [http://localhost/]
Exception in thread "main" java.lang.RuntimeException: Could not process model 'BaseMetadata'.Please make sure that your schema is correct!
at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:454)
at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:897)
at org.openapitools.codegen.cmd.Generate.run(Generate.java:354)
at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:61)
Caused by: java.lang.ClassCastException: java.util.UUID cannot be cast to java.lang.String
at org.openapitools.codegen.languages.PythonClientCodegen.toDefaultValue(PythonClientCodegen.java:657)
at org.openapitools.codegen.DefaultCodegen.fromProperty(DefaultCodegen.java:1878)
at org.openapitools.codegen.DefaultCodegen.addVars(DefaultCodegen.java:3449)
at org.openapitools.codegen.DefaultCodegen.addVars(DefaultCodegen.java:3397)
at org.openapitools.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:1748)
at org.openapitools.codegen.DefaultGenerator.processModels(DefaultGenerator.java:1138)
at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:449)
However, the previous version succeeds:
docker run --rm -v $PWD/tmp:/local openapitools/openapi-generator-cli:v4.0.0-beta generate -i /local/bug.yaml -g python -o /tmp/
... no errors ...
v4.0.0-beta2 tag or latest as shown on the example above.👍 Thanks for opening this issue!
🏷 I have applied any labels matching special text in your issue.
The team will review the labels and make any necessary changes.
After a git bisect, I pinned down this regression to https://github.com/OpenAPITools/openapi-generator/commit/539ec23298f27a7a4e179c08efc76c6d8b6b0ca1 by @spacether and its associated PR: https://github.com/OpenAPITools/openapi-generator/pull/1776
@dojeda thanks for reporting the issue and doing a "git bisect" to identify the associated PR, I'll take a look later today.
@dojeda I've filed https://github.com/OpenAPITools/openapi-generator/pull/2213 to fix the issue. Tested with your spec and no NPE was thrown.
➜ openapi-generator git:(fix_example) java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate -g python -i /tmp/example.yaml -o /tmp/example/
[main] WARN o.o.c.ignore.CodegenIgnoreProcessor - Output directory does not exist, or is inaccessible. No file (.openapi-generator-ignore) will be evaluated.
[main] INFO o.o.c.languages.PythonClientCodegen - Environment variable PYTHON_POST_PROCESS_FILE not defined so the Python code may not be properly formatted. To define it, try 'export PYTHON_POST_PROCESS_FILE="/usr/local/bin/yapf -i"' (Linux/Mac)
[main] INFO o.o.c.languages.PythonClientCodegen - NOTE: To enable file post-processing, 'enablePostProcessFile' must be set to `true` (--enable-post-process-file for CLI).
[main] WARN o.o.codegen.utils.URLPathUtils - 'host' (OAS 2.0) or 'servers' (OAS 3.0) not defined in the spec. Default to [http://localhost] for server URL [http://localhost/]
[main] WARN o.o.codegen.utils.URLPathUtils - 'host' (OAS 2.0) or 'servers' (OAS 3.0) not defined in the spec. Default to [http://localhost] for server URL [http://localhost/]
[main] INFO o.o.codegen.DefaultGenerator - Model inline_object (marked as unused due to form parameters) is generated due to skipFormModel=false (default)
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/models/base_metadata.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/test/test_base_metadata.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/docs/BaseMetadata.md
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/models/inline_object.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/test/test_inline_object.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/docs/InlineObject.md
[main] WARN o.o.codegen.utils.URLPathUtils - 'host' (OAS 2.0) or 'servers' (OAS 3.0) not defined in the spec. Default to [http://localhost] for server URL [http://localhost/]
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/api/default_api.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/test/test_default_api.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/docs/DefaultApi.md
[main] WARN o.o.codegen.utils.URLPathUtils - 'host' (OAS 2.0) or 'servers' (OAS 3.0) not defined in the spec. Default to [http://localhost] for server URL [http://localhost/]
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/README.md
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/tox.ini
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/test-requirements.txt
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/requirements.txt
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/git_push.sh
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/.gitignore
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/.travis.yml
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/setup.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/configuration.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/__init__.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/models/__init__.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/api/__init__.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/test/__init__.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/api_client.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/openapi_client/rest.py
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/.openapi-generator-ignore
[main] INFO o.o.codegen.AbstractGenerator - writing file /tmp/example/.openapi-generator/VERSION
Btw, there're some warnings that you may want to take a look.
Excellent! Thanks a lot for your help. I've tried https://github.com/OpenAPITools/openapi-generator/pull/1776 and it did work great.
Thanks for the warning on the warnings; I stripped down most of my specification to keep it as small as possible, but by doing so I removed some general info.
The fix has been merged into master. Please pull the latest to give it a try.
@wing328 We still have the issue in the last 4.0.0-SNAPSHOT (63eb9298cf70dcbad339acefe9adfd48907d8423)
That must explain the shippable error on build
java -jar ./modules/openapi-generator-cli/target/openapi-generator-cli.jar generate -i modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -g r -o /tmp/openap i-generator-test-fake-petstore/2.0/r
Exception in thread "main" java.lang.RuntimeException: Could not process model 'format_test'.Please make sure that your schema is correct! at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:454) at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:897) at org.openapitools.codegen.cmd.Generate.run(Generate.java:354) at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:61) Caused by: java.lang.ClassCastException: java.util.UUID cannot be cast to java.lang.String at org.openapitools.codegen.languages.RClientCodegen.toDefaultValue(RClientCodegen.java:598) at org.openapitools.codegen.DefaultCodegen.fromProperty(DefaultCodegen.java:1907) at org.openapitools.codegen.DefaultCodegen.addVars(DefaultCodegen.java:3503) at org.openapitools.codegen.DefaultCodegen.addVars(DefaultCodegen.java:3451) at org.openapitools.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:1777) at org.openapitools.codegen.DefaultGenerator.processModels(DefaultGenerator.java:1138) at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:449)
Checking...
@karismann I've filed https://github.com/OpenAPITools/openapi-generator/pull/2231 to fix it.
UPDATE: issue with the R generator has been fixed via #2231