OpenAPITools / OpenAPITools/openapi-generator
[BUG] [GOLANG] [Client] Multiple file upload compile error (missing for loop and imports)
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
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 (example)
Description
My following config is to describe an HTTP request POST for multiple file multipart upload.
I fixed the generated code to fix and it work!
Compilation error:
./api_default.go:1070:8: []*os.File used as value
./api_default.go:1070:11: undefined: os
./api_default.go:1083:54: undefined: os
./api_default.go:1159:26: undefined: os
Fix proposal below
openapi-generator version
openapi-generator-cli 5.4.0-SNAPSHOT
commit : 7129cde
built : 2022-01-13T16:33:11Z
source : https://github.com/openapitools/openapi-generator
docs : https://openapi-generator.tech/
OpenAPI declaration file content or url
openapi: 3.0.0
info:
title: test
description:test
version: 4.0.0
servers:
- url: 'https://api.alldebrid.com/v4'
description: 'Optional server description, e.g. Main (production) server'
paths:
/magnet/upload/file:
post:
summary: Upload torrent files.
description: >-
Upload torrent files.
This endpoint should be POSTed on.
It expects a multipart formdata file upload.
parameters:
- in: query
name: agent
schema:
type: string
default: open-alldebrid
required: true
description: Your software user-agent.
- in: query
name: apikey
schema:
type: string
required: true
description: User apikey.
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
"[]file":
type: array
items:
type: string
format: binary
responses:
'200':
description: >-
This endpoint retrieves a complete list of all available hosts for
this user
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: success
Generation Details
[main] INFO o.o.codegen.DefaultGenerator - Generating with dryRun=false
[main] INFO o.o.codegen.DefaultGenerator - OpenAPI Generator: go (client)
[main] INFO o.o.codegen.DefaultGenerator - Generator 'go' is considered stable.
[main] INFO o.o.c.languages.AbstractGoCodegen - Environment variable GO_POST_PROCESS_FILE not defined so Go code may not be properly formatted. To define it, try `export GO_POST_PROCESS_FILE="/usr/local/bin/gofmt -w"` (Linux/Mac)
[main] INFO o.o.c.languages.AbstractGoCodegen - NOTE: To enable file post-processing, 'enablePostProcessFile' must be set to `true` (--enable-post-process-file for CLI).
[main] INFO o.o.codegen.DefaultGenerator - Model inline_object not generated since it's marked as unused (due to form parameters) and `skipFormModel` (global property) set to true (default)
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse200.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_1.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2001.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_10.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20010.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_10_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20010Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_10_data_error.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20010DataError.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_10_data_magnets.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20010DataMagnets.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_10_error.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20010Error.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_11.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20011.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_11_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20011Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_11_data_error.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20011DataError.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_11_data_files.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse20011DataFiles.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_1_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2001Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_2.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2002.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_2_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2002Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_3.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2003.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_3_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2003Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_3_data_user.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2003DataUser.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_3_data_user_limited_hosters_quotas.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2003DataUserLimitedHostersQuotas.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_4.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2004.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_4_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2004Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_5.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2005.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_5_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2005Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_5_data_infos.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2005DataInfos.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_5_error.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2005Error.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_6.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2006.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_6_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2006Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_6_error.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2006Error.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_7.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2007.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_7_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2007Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_7_data_streams.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2007DataStreams.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_7_error.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2007Error.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_8.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2008.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_8_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2008Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_8_data_streams.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2008DataStreams.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_9.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2009.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_9_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2009Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_9_error.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse2009Error.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_data.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse200Data.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_data_hosts.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse200DataHosts.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_data_redirectors.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse200DataRedirectors.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/model_inline_response_200_data_streams.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/InlineResponse200DataStreams.md
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /hosts. Renamed to auto-generated operationId: hostsGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /hosts/domains. Renamed to auto-generated operationId: hostsDomainsGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /hosts/priority. Renamed to auto-generated operationId: hostsPriorityGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /user. Renamed to auto-generated operationId: userGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /user/hosts. Renamed to auto-generated operationId: userHostsGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /user/notification/clear. Renamed to auto-generated operationId: userNotificationClearGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /link/infos. Renamed to auto-generated operationId: linkInfosGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /link/redirector. Renamed to auto-generated operationId: linkRedirectorGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /link/unlock. Renamed to auto-generated operationId: linkUnlockGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /link/streaming. Renamed to auto-generated operationId: linkStreamingGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /link/delayed. Renamed to auto-generated operationId: linkDelayedGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: get /magnet/upload. Renamed to auto-generated operationId: magnetUploadGet
[main] WARN o.o.codegen.DefaultCodegen - Empty operationId found for path: post /magnet/upload/file. Renamed to auto-generated operationId: magnetUploadFilePost
[main] WARN o.o.codegen.DefaultCodegen - Could not compute datatypeWithEnum from *os.File, null
[main] INFO o.o.codegen.TemplateManager - writing file /local/api_default.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/docs/DefaultApi.md
[main] INFO o.o.codegen.TemplateManager - writing file /local/api/openapi.yaml
[main] INFO o.o.codegen.TemplateManager - writing file /local/README.md
[main] INFO o.o.codegen.TemplateManager - Ignored /local/git_push.sh (Ignored by rule in ignore file.)
[main] INFO o.o.codegen.TemplateManager - Ignored /local/.gitignore (Ignored by rule in ignore file.)
[main] INFO o.o.codegen.TemplateManager - writing file /local/configuration.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/client.go
[main] INFO o.o.codegen.TemplateManager - writing file /local/response.go
[main] INFO o.o.codegen.TemplateManager - Ignored /local/go.mod (Ignored by rule in ignore file.)
[main] INFO o.o.codegen.TemplateManager - Ignored /local/go.sum (Ignored by rule in ignore file.)
[main] INFO o.o.codegen.TemplateManager - writing file /local/.travis.yml
[main] INFO o.o.codegen.TemplateManager - writing file /local/utils.go
[main] INFO o.o.codegen.TemplateManager - Skipped /local/.openapi-generator-ignore (Skipped by supportingFiles options supplied by user.)
[main] INFO o.o.codegen.TemplateManager - writing file /local/.openapi-generator/VERSION
[main] INFO o.o.codegen.TemplateManager - writing file /local/.openapi-generator/FILES
################################################################################
# Thanks for using OpenAPI Generator. #
# Please consider donation to help us maintain this project 🙏 #
# https://opencollective.com/openapi_generator/donate #
################################################################################
Steps to reproduce
just generate with this config for Golang client api
Name the file alldebrid.yaml
docker run -u "$UID:$GID" --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate \
-i /local/alldebrid.yaml \
-g go \
-o /local/ \
--additional-properties=packageName=openalldebrid
Related issues/PRs
Maybe related also:
https://github.com/OpenAPITools/openapi-generator/issues/505
Suggest a fix
Actual generated code:
var fileLocalVarFile []*os.File
if r.file != nil {
fileLocalVarFile = *r.file
}
if fileLocalVarFile != nil {
fbs, _ := _ioutil.ReadAll(fileLocalVarFile)
fileLocalVarFileBytes = fbs
fileLocalVarFileName = fileLocalVarFile.Name()
fileLocalVarFile.Close()
}
formFiles = append(formFiles, formFile{fileBytes: fileLocalVarFileBytes, fileName: fileLocalVarFileName, formFileName: fileLocalVarFormFileName})
Fix on generated code
import "os"
...
var fileLocalVarFile []*os.File
if r.file != nil {
fileLocalVarFile = *r.file
}
if fileLocalVarFile != nil {
for _, file := range fileLocalVarFile {
fbs, _ := _ioutil.ReadAll(file)
fileLocalVarFileBytes = fbs
fileLocalVarFileName = file.Name()
file.Close()
formFiles = append(formFiles, formFile{fileBytes: fileLocalVarFileBytes, fileName: fileLocalVarFileName, formFileName: fileLocalVarFormFileName})
}
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue with the supplied OpenAPI 3 multipart/form-data specification using the Go client generator. Inspect the generated api_default.go around lines 1070, 1083, and 1159, where compilation reports the missing os references and multiple-file handling error. Done when the generated client compiles and supports the described multiple-file upload.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, openapi
- Domain
- api, tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100