Only allow v3 input specs into python-experimental (#11931)

* Only allow v3 input specs into python-experimantal

* docs regenerated
This commit is contained in:
Justin Black 2022-03-21 23:47:47 -07:00 committed by GitHub
parent 7a78e350cc
commit 36f0dd026c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 29 deletions

View File

@ -21,7 +21,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
| ------ | ----------- | ------ | ------- |
|generateSourceCodeOnly|Specifies that only a library source code is to be generated.| |false|
|hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true|
|library|library template (sub-template) to use: asyncio, tornado, urllib3| |urllib3|
|library|library template (sub-template) to use: urllib3| |urllib3|
|packageName|python package name (convention: snake_case).| |openapi_client|
|packageUrl|python package URL.| |null|
|packageVersion|python package version.| |1.0.0|

View File

@ -17,11 +17,10 @@
package org.openapitools.codegen.languages;
import com.github.curiousoddman.rgxgen.RgxGen;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.oas.models.tags.Tag;
import org.apache.commons.lang3.tuple.Triple;
import org.openapitools.codegen.api.TemplatePathLocator;
import org.openapitools.codegen.ignore.CodegenIgnoreProcessor;
import org.openapitools.codegen.templating.*;
@ -52,7 +51,6 @@ import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static org.openapitools.codegen.utils.OnceLogger.once;
import static org.openapitools.codegen.utils.StringUtils.underscore;
@ -179,9 +177,7 @@ public class PythonExperimentalClientCodegen extends AbstractPythonCodegen {
cliOptions.add(new CliOption(RECURSION_LIMIT, "Set the recursion limit. If not set, use the system default value."));
supportedLibraries.put("urllib3", "urllib3-based client");
supportedLibraries.put("asyncio", "Asyncio-based client (python 3.5+)");
supportedLibraries.put("tornado", "tornado-based client");
CliOption libraryOption = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use: asyncio, tornado, urllib3");
CliOption libraryOption = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use: urllib3");
libraryOption.setDefault(DEFAULT_LIBRARY);
cliOptions.add(libraryOption);
setLibrary(DEFAULT_LIBRARY);
@ -737,28 +733,30 @@ public class PythonExperimentalClientCodegen extends AbstractPythonCodegen {
public CodegenParameter fromParameter(Parameter parameter, Set<String> imports) {
CodegenParameter cp = super.fromParameter(parameter, imports);
switch(parameter.getStyle()) {
case MATRIX:
cp.style = "MATRIX";
break;
case LABEL:
cp.style = "LABEL";
break;
case FORM:
cp.style = "FORM";
break;
case SIMPLE:
cp.style = "SIMPLE";
break;
case SPACEDELIMITED:
cp.style = "SPACE_DELIMITED";
break;
case PIPEDELIMITED:
cp.style = "PIPE_DELIMITED";
break;
case DEEPOBJECT:
cp.style = "DEEP_OBJECT";
break;
if (parameter.getStyle() != null) {
switch(parameter.getStyle()) {
case MATRIX:
cp.style = "MATRIX";
break;
case LABEL:
cp.style = "LABEL";
break;
case FORM:
cp.style = "FORM";
break;
case SIMPLE:
cp.style = "SIMPLE";
break;
case SPACEDELIMITED:
cp.style = "SPACE_DELIMITED";
break;
case PIPEDELIMITED:
cp.style = "PIPE_DELIMITED";
break;
case DEEPOBJECT:
cp.style = "DEEP_OBJECT";
break;
}
}
// clone this so we can change some properties on it
CodegenProperty schemaProp = cp.getSchema().clone();
@ -2189,4 +2187,18 @@ public class PythonExperimentalClientCodegen extends AbstractPythonCodegen {
@Override
public String generatorLanguageVersion() { return ">=3.9"; };
@Override
public void preprocessOpenAPI(OpenAPI openAPI) {
String originalSpecVersion;
if (openAPI.getExtensions() != null && !openAPI.getExtensions().isEmpty()) {
originalSpecVersion = (String) openAPI.getExtensions().get("x-original-swagger-version");
} else {
originalSpecVersion = openAPI.getOpenapi();
}
Integer specMajorVersion = Integer.parseInt(originalSpecVersion.substring(0, 1));
if (specMajorVersion < 3) {
throw new RuntimeException("Your spec version of "+originalSpecVersion+" is too low. python-experimental only works with specs with version >= 3.X.X. Please use a tool like Swagger Editor or Swagger Converter to convert your spec to v3");
}
}
}