swagger-api / swagger-api/swagger-codegen
[PYTHON] Cannot build client with custom README.mustache template
Nobody has claimed this yet.
- Dominant language
- Mustache
- Stars
- 17.8k
- Forks
- 6k
- PR merge metrics
- No merged PRs in 30d
Description
Description
Python client is not being built when using default README.mustache as a custom template.
Swagger-codegen version
3.0.25
Swagger declaration file content or url
https://github.com/OAI/OpenAPI-Specification/blob/main/examples/v3.0/petstore.yaml
Command line used for generation
java -jar swagger-codegen-cli.jar generate -i petstore.yaml -l python --template-dir /tmp/custom_tpl -o /tmp/client
Steps to reproduce
When running without -t --template-dir switch it works as expected.
When I simply copy swagger-codegen/modules/swagger-codegen/src/main/resources/python/README.mustache file into a folder and provide it using -t it throws an exception
cp ~/Code/swagger-codegen/modules/swagger-codegen/src/main/resources/python/README.mustache /tmp/custom_tpl
java -jar swagger-codegen-cli.jar generate -i petstore.yaml -l python --template-dir /tmp/custom_tpl -o /tmp/client
Exception in thread "Thread-0" java.lang.RuntimeException: Could not generate supporting file 'SupportingFile:
templateFile: README.mustache
folder:
destinationFilename: README.md
'
at io.swagger.codegen.v3.DefaultGenerator.generateSupportingFiles(DefaultGenerator.java:663)
at io.swagger.codegen.v3.DefaultGenerator.generate(DefaultGenerator.java:786)
at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:378)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: com.github.jknack.handlebars.HandlebarsException: /tmp/custom_tpl/README.mustache:61:24: found: '-first', expected: 'id'
{{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}}{{#hasAuthMethods}}{{#authMethods}}{{#isBasic}}
^
at com.github.jknack.handlebars.internal.HbsErrorReporter.syntaxError(HbsErrorReporter.java:93)
at com.github.jknack.handlebars.internal.antlr.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41)
at com.github.jknack.handlebars.internal.antlr.Parser.notifyErrorListeners(Parser.java:544)
at com.github.jknack.handlebars.internal.HbsErrorStrategy.reportInputMismatch(HbsErrorStrategy.java:186)
at com.github.jknack.handlebars.internal.antlr.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:139)
at com.github.jknack.handlebars.internal.HbsParser.sexpr(HbsParser.java:922)
at com.github.jknack.handlebars.internal.HbsParser.block(HbsParser.java:659)
at com.github.jknack.handlebars.internal.HbsParser.statement(HbsParser.java:337)
at com.github.jknack.handlebars.internal.HbsParser.body(HbsParser.java:222)
at com.github.jknack.handlebars.internal.HbsParser.block(HbsParser.java:673)
at com.github.jknack.handlebars.internal.HbsParser.statement(HbsParser.java:337)
at com.github.jknack.handlebars.internal.HbsParser.body(HbsParser.java:222)
at com.github.jknack.handlebars.internal.HbsParser.block(HbsParser.java:673)
at com.github.jknack.handlebars.internal.HbsParser.statement(HbsParser.java:337)
at com.github.jknack.handlebars.internal.HbsParser.body(HbsParser.java:222)
at com.github.jknack.handlebars.internal.HbsParser.template(HbsParser.java:165)
at com.github.jknack.handlebars.internal.HbsParserFactory$1.parse(HbsParserFactory.java:86)
at com.github.jknack.handlebars.cache.NullTemplateCache.get(NullTemplateCache.java:54)
at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:513)
at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:438)
at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:419)
at io.swagger.codegen.v3.templates.HandlebarTemplateEngine.getHandlebars(HandlebarTemplateEngine.java:52)
at io.swagger.codegen.v3.templates.HandlebarTemplateEngine.getRendered(HandlebarTemplateEngine.java:25)
at io.swagger.codegen.v3.DefaultGenerator.generateSupportingFiles(DefaultGenerator.java:634)
It's worth noticing that the exception comes from handlebars generator, not mustache.
When I explicitly set the template engine to mustache, a different exception is being thrown:
java -jar swagger-codegen-cli.jar generate -i petstore.yaml -l python --template-engine 'mustache' --template-dir /tmp/custom_tpl -o /tmp/
Exception in thread "Thread-0" java.lang.RuntimeException: Could not generate model 'Error'
at io.swagger.codegen.v3.DefaultGenerator.generateModels(DefaultGenerator.java:451)
at io.swagger.codegen.v3.DefaultGenerator.generate(DefaultGenerator.java:779)
at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:378)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: com.samskivert.mustache.MustacheParseException: Section close tag with mismatched open tag 'each' != 'each discriminator.mapping' @ line 62
at com.samskivert.mustache.Mustache$Accumulator.requireSameName(Mustache.java:671)
at com.samskivert.mustache.Mustache$Accumulator$1.addCloseSectionSegment(Mustache.java:603)
at com.samskivert.mustache.Mustache$Accumulator.addTagSegment(Mustache.java:629)
at com.samskivert.mustache.Mustache$Parser.parseChar(Mustache.java:498)
at com.samskivert.mustache.Mustache$Parser.parse(Mustache.java:396)
at com.samskivert.mustache.Mustache.compile(Mustache.java:314)
at com.samskivert.mustache.Mustache$Compiler.compile(Mustache.java:87)
at com.samskivert.mustache.Mustache$Compiler.compile(Mustache.java:82)
at io.swagger.codegen.v3.templates.MustacheTemplateEngine.getRendered(MustacheTemplateEngine.java:43)
at io.swagger.codegen.v3.DefaultGenerator.processTemplateToFile(DefaultGenerator.java:795)
at io.swagger.codegen.v3.DefaultGenerator.generateModels(DefaultGenerator.java:438)
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 report with petstore.yaml, the Python generator, and the copied README.mustache template, then inspect DefaultGenerator and the HandlebarTemplateEngine and MustacheTemplateEngine paths shown in the stack traces. Done means a custom copy of the Python README.mustache generates the client successfully with the reported command and template engine behavior is consistent.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, python
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100