Skip to content
This repository was archived by the owner on May 9, 2025. It is now read-only.

Commit e267159

Browse files
committed
Merge branch 'master' into cleanup-template-management
* master: [samples] Regenerate python-experimental [core][general] Add metadata file tracking to aid in "Golden Tests" regeneration (OpenAPITools#6325) [python-experimental] Add support for pep 3134, attach cause of exception (OpenAPITools#6388) [Java-jersey2] Add new ApiClient constructor with auth objects (OpenAPITools#6393)
2 parents d5307f3 + b828860 commit e267159

File tree

329 files changed

+22170
-131
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

329 files changed

+22170
-131
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,13 @@
5757
import java.nio.file.Path;
5858
import java.time.ZonedDateTime;
5959
import java.util.*;
60+
import java.util.stream.Stream;
6061

6162
import static org.openapitools.codegen.utils.OnceLogger.once;
6263

6364
@SuppressWarnings("rawtypes")
6465
public class DefaultGenerator implements Generator {
66+
private static final String METADATA_DIR = ".openapi-generator";
6567
protected final Logger LOGGER = LoggerFactory.getLogger(DefaultGenerator.class);
6668
private final boolean dryRun;
6769
protected CodegenConfig config;
@@ -733,7 +735,7 @@ private void generateSupportingFiles(List<File> files, Map<String, Object> bundl
733735
}
734736
}
735737

736-
String versionMetadata = config.outputFolder() + File.separator + ".openapi-generator" + File.separator + "VERSION";
738+
String versionMetadata = config.outputFolder() + File.separator + METADATA_DIR + File.separator + "VERSION";
737739
if (generateMetadata) {
738740
File versionMetadataFile = new File(versionMetadata);
739741
try {
@@ -910,6 +912,31 @@ public List<File> generate() {
910912
sb.append(System.lineSeparator());
911913

912914
System.err.println(sb.toString());
915+
} else {
916+
if (generateMetadata) {
917+
StringBuilder sb = new StringBuilder();
918+
File outDir = new File(this.config.getOutputDir());
919+
Optional.of(files)
920+
.map(Collection::stream)
921+
.orElseGet(Stream::empty)
922+
.filter(Objects::nonNull)
923+
.map(File::toPath)
924+
.sorted(Path::compareTo)
925+
.forEach(f -> {
926+
String relativePath = java.nio.file.Paths.get(outDir.toURI()).relativize(f).toString();
927+
if (!relativePath.equals(METADATA_DIR + File.separator + "VERSION")) {
928+
sb.append(relativePath).append(System.lineSeparator());
929+
}
930+
});
931+
932+
String targetFile = config.outputFolder() + File.separator + METADATA_DIR + File.separator + "FILES";
933+
try {
934+
File filesFile = this.templateProcessor.writeToFile(targetFile, sb.toString().getBytes(StandardCharsets.UTF_8));
935+
files.add(filesFile);
936+
} catch (IOException e) {
937+
LOGGER.warn("Failed to write FILES metadata to track generated files.");
938+
}
939+
}
913940
}
914941

915942
// reset GlobalSettings, so that the running thread can be reused for another generator-run

modules/openapi-generator/src/main/resources/Java/libraries/jersey2/ApiClient.mustache

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,19 @@ public class ApiClient {
152152

153153
protected DateFormat dateFormat;
154154

155+
/**
156+
* Constructs a new ApiClient with default parameters.
157+
*/
155158
public ApiClient() {
159+
this(null);
160+
}
161+
162+
/**
163+
* Constructs a new ApiClient with the specified authentication parameters.
164+
*
165+
* @param authMap A hash map containing authentication parameters.
166+
*/
167+
public ApiClient(Map<String, Authentication> authMap) {
156168
json = new JSON();
157169
httpClient = buildHttpClient(debugging);
158170
@@ -163,23 +175,47 @@ public class ApiClient {
163175
164176
// Setup authentications (key: authentication name, value: authentication).
165177
authentications = new HashMap<String, Authentication>();
178+
Authentication auth = null;
166179
{{#authMethods}}
180+
if (authMap != null) {
181+
auth = authMap.get("{{name}}");
182+
}
167183
{{#isBasic}}
168184
{{#isBasicBasic}}
169-
authentications.put("{{name}}", new HttpBasicAuth());
185+
if (auth instanceof HttpBasicAuth) {
186+
authentications.put("{{name}}", auth);
187+
} else {
188+
authentications.put("{{name}}", new HttpBasicAuth());
189+
}
170190
{{/isBasicBasic}}
171191
{{#isBasicBearer}}
172-
authentications.put("{{name}}", new HttpBearerAuth("{{scheme}}"));
192+
if (auth instanceof HttpBearerAuth) {
193+
authentications.put("{{name}}", auth);
194+
} else {
195+
authentications.put("{{name}}", new HttpBearerAuth("{{scheme}}"));
196+
}
173197
{{/isBasicBearer}}
174198
{{#isHttpSignature}}
175-
authentications.put("{{name}}", new HttpSignatureAuth("{{name}}", null, null));
199+
if (auth instanceof HttpSignatureAuth) {
200+
authentications.put("{{name}}", auth);
201+
} else {
202+
authentications.put("{{name}}", null);
203+
}
176204
{{/isHttpSignature}}
177205
{{/isBasic}}
178206
{{#isApiKey}}
179-
authentications.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"));
207+
if (auth instanceof ApiKeyAuth) {
208+
authentications.put("{{name}}", auth);
209+
} else {
210+
authentications.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"));
211+
}
180212
{{/isApiKey}}
181213
{{#isOAuth}}
182-
authentications.put("{{name}}", new OAuth(basePath, "{{tokenUrl}}"));
214+
if (auth instanceof OAuth) {
215+
authentications.put("{{name}}", auth);
216+
} else {
217+
authentications.put("{{name}}", new OAuth(basePath, "{{tokenUrl}}"));
218+
}
183219
{{/isOAuth}}
184220
{{/authMethods}}
185221
// Prevent the authentications from being modified.

modules/openapi-generator/src/main/resources/python/python-experimental/model_utils.mustache

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -725,14 +725,14 @@ def deserialize_primitive(data, klass, path_to_item):
725725
# '7' -> 7.0 -> '7.0' != '7'
726726
raise ValueError('This is not a float')
727727
return converted_value
728-
except (OverflowError, ValueError):
728+
except (OverflowError, ValueError) as ex:
729729
# parse can raise OverflowError
730-
raise ApiValueError(
730+
six.raise_from(ApiValueError(
731731
"{0}Failed to parse {1} as {2}".format(
732732
additional_message, repr(data), get_py3_class_name(klass)
733733
),
734734
path_to_item=path_to_item
735-
)
735+
), ex)
736736

737737

738738
def get_discriminator_class(model_class,
@@ -1220,7 +1220,7 @@ def get_allof_instances(self, model_args, constant_args):
12201220
allof_instance = allof_class(**kwargs)
12211221
composed_instances.append(allof_instance)
12221222
except Exception as ex:
1223-
raise ApiValueError(
1223+
six.raise_from(ApiValueError(
12241224
"Invalid inputs given to generate an instance of '%s'. The "
12251225
"input data was invalid for the allOf schema '%s' in the composed "
12261226
"schema '%s'. Error=%s" % (
@@ -1229,7 +1229,7 @@ def get_allof_instances(self, model_args, constant_args):
12291229
self.__class__.__name__,
12301230
str(ex)
12311231
)
1232-
)
1232+
), ex)
12331233
return composed_instances
12341234

12351235

modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void testIgnoreFileProcessing() throws IOException {
6767

6868
List<File> files = generator.opts(clientOptInput).generate();
6969

70-
Assert.assertEquals(files.size(), 43);
70+
Assert.assertEquals(files.size(), 44);
7171

7272
// Check expected generated files
7373
// api sanity check
@@ -152,7 +152,7 @@ public void testFilesAreNeverOverwritten() throws IOException {
152152

153153
List<File> files = generator.opts(clientOptInput).generate();
154154

155-
Assert.assertEquals(files.size(), 20);
155+
Assert.assertEquals(files.size(), 21);
156156

157157
// Check API is written and Test is not
158158
TestUtils.ensureContainsFile(files, output, "src/main/java/org/openapitools/client/api/PetApi.java");

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,10 @@ public void testGeneratePing() throws Exception {
269269
DefaultGenerator generator = new DefaultGenerator();
270270
List<File> files = generator.opts(clientOptInput).generate();
271271

272-
Assert.assertEquals(files.size(), 37);
272+
Assert.assertEquals(files.size(), 38);
273273
TestUtils.ensureContainsFile(files, output, ".gitignore");
274274
TestUtils.ensureContainsFile(files, output, ".openapi-generator-ignore");
275+
TestUtils.ensureContainsFile(files, output, ".openapi-generator/FILES");
275276
TestUtils.ensureContainsFile(files, output, ".openapi-generator/VERSION");
276277
TestUtils.ensureContainsFile(files, output, ".travis.yml");
277278
TestUtils.ensureContainsFile(files, output, "build.gradle");
@@ -299,8 +300,6 @@ public void testGeneratePing() throws Exception {
299300
TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/auth/Authentication.java");
300301
TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/auth/HttpBasicAuth.java");
301302
TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/auth/HttpBearerAuth.java");
302-
//TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/auth/OAuth.java");
303-
//TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/auth/OAuthFlow.java");
304303
TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/Configuration.java");
305304
TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/GzipRequestInterceptor.java");
306305
TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/JSON.java");
@@ -339,9 +338,10 @@ public void testGeneratePingSomeObj() throws Exception {
339338
DefaultGenerator generator = new DefaultGenerator();
340339
List<File> files = generator.opts(clientOptInput).generate();
341340

342-
Assert.assertEquals(files.size(), 40);
341+
Assert.assertEquals(files.size(), 41);
343342
TestUtils.ensureContainsFile(files, output, ".gitignore");
344343
TestUtils.ensureContainsFile(files, output, ".openapi-generator-ignore");
344+
TestUtils.ensureContainsFile(files, output, ".openapi-generator/FILES");
345345
TestUtils.ensureContainsFile(files, output, ".openapi-generator/VERSION");
346346
TestUtils.ensureContainsFile(files, output, ".travis.yml");
347347
TestUtils.ensureContainsFile(files, output, "build.gradle");
@@ -410,7 +410,7 @@ public void testJdkHttpClient() throws Exception {
410410
DefaultGenerator generator = new DefaultGenerator();
411411
List<File> files = generator.opts(clientOptInput).generate();
412412

413-
Assert.assertEquals(files.size(), 26);
413+
Assert.assertEquals(files.size(), 27);
414414
validateJavaSourceFiles(files);
415415

416416
TestUtils.assertFileContains(Paths.get(output + "/src/main/java/xyz/abcdef/api/DefaultApi.java"),
@@ -446,7 +446,7 @@ public void testJdkHttpAsyncClient() throws Exception {
446446
DefaultGenerator generator = new DefaultGenerator();
447447
List<File> files = generator.opts(clientOptInput).generate();
448448

449-
Assert.assertEquals(files.size(), 29);
449+
Assert.assertEquals(files.size(), 30);
450450
validateJavaSourceFiles(files);
451451

452452
Path defaultApi = Paths.get(output + "/src/main/java/xyz/abcdef/api/PingApi.java");

modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,8 @@ public void codeGenerationTest() throws Exception {
358358
final ClientOptInput clientOptInput = configurator.toClientOptInput();
359359
DefaultGenerator generator = new DefaultGenerator();
360360

361+
generator.setGenerateMetadata(false);
362+
361363
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
362364
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
363365
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
@@ -399,6 +401,8 @@ public void codeGenerationJava8Test() throws Exception {
399401
final ClientOptInput clientOptInput = configurator.toClientOptInput();
400402
DefaultGenerator generator = new DefaultGenerator();
401403

404+
generator.setGenerateMetadata(false);
405+
402406
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
403407
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
404408
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
@@ -472,7 +476,7 @@ public void mainPackageTest() throws Exception {
472476
Generator gen = generator.opts(clientOptInput);
473477
List<File> files = gen.generate();
474478

475-
Assert.assertEquals(files.size(), 14);
479+
Assert.assertEquals(files.size(), 15);
476480

477481
TestUtils.ensureContainsFile(files, output, "src/main/scala/hello/world/model/SomeObj.scala");
478482
TestUtils.ensureContainsFile(files, output, "src/main/scala/hello/world/core/ApiSettings.scala");
@@ -509,7 +513,7 @@ public void overridePackagesTest() throws Exception {
509513
Generator gen = generator.opts(clientOptInput);
510514

511515
List<File> files = gen.generate();
512-
Assert.assertEquals(files.size(), 14);
516+
Assert.assertEquals(files.size(), 15);
513517

514518
TestUtils.ensureContainsFile(files, output, "src/main/scala/hello/world/model/package/SomeObj.scala");
515519
TestUtils.ensureContainsFile(files, output, "src/main/scala/hello/world/package/invoker/ApiSettings.scala");

modules/openapi-generator/src/test/java/org/openapitools/codegen/yaml/YamlGeneratorTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ public void testGeneratePing() throws Exception {
5050
final ClientOptInput clientOptInput = configurator.toClientOptInput();
5151
DefaultGenerator generator = new DefaultGenerator();
5252
List<File> files = generator.opts(clientOptInput).generate();
53-
Assert.assertEquals(files.size(), 4);
53+
Assert.assertEquals(files.size(), 5);
5454
TestUtils.ensureContainsFile(files, output, "openapi/openapi.yaml");
5555
TestUtils.ensureContainsFile(files, output, "README.md");
5656
TestUtils.ensureContainsFile(files, output, ".openapi-generator-ignore");
57+
TestUtils.ensureContainsFile(files, output, ".openapi-generator/FILES");
5758
TestUtils.ensureContainsFile(files, output, ".openapi-generator/VERSION");
5859

5960
output.deleteOnExit();
@@ -77,10 +78,11 @@ public void testGeneratePingOtherOutputFile() throws Exception {
7778
DefaultGenerator generator = new DefaultGenerator();
7879
List<File> files = generator.opts(clientOptInput).generate();
7980

80-
Assert.assertEquals(files.size(), 4);
81+
Assert.assertEquals(files.size(), 5);
8182
TestUtils.ensureContainsFile(files, output, "ping.yaml");
8283
TestUtils.ensureContainsFile(files, output, "README.md");
8384
TestUtils.ensureContainsFile(files, output, ".openapi-generator-ignore");
85+
TestUtils.ensureContainsFile(files, output, ".openapi-generator/FILES");
8486
TestUtils.ensureContainsFile(files, output, ".openapi-generator/VERSION");
8587

8688
output.deleteOnExit();
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
.Rbuildignore
2+
.gitignore
3+
.travis.yml
4+
DESCRIPTION
5+
NAMESPACE
6+
R/api_client.R
7+
R/api_response.R
8+
R/category.R
9+
R/model_api_response.R
10+
R/order.R
11+
R/pet.R
12+
R/pet_api.R
13+
R/store_api.R
14+
R/tag.R
15+
R/user.R
16+
R/user_api.R
17+
README.md
18+
docs/Category.md
19+
docs/ModelApiResponse.md
20+
docs/Order.md
21+
docs/Pet.md
22+
docs/PetApi.md
23+
docs/StoreApi.md
24+
docs/Tag.md
25+
docs/User.md
26+
docs/UserApi.md
27+
git_push.sh
28+
tests/testthat.R
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
README.md
2+
config/project-scratch-def.json
3+
force-app/main/default/classes/OAS.cls
4+
force-app/main/default/classes/OAS.cls-meta.xml
5+
force-app/main/default/classes/OASApiResponse.cls
6+
force-app/main/default/classes/OASApiResponse.cls-meta.xml
7+
force-app/main/default/classes/OASCategory.cls
8+
force-app/main/default/classes/OASCategory.cls-meta.xml
9+
force-app/main/default/classes/OASClient.cls
10+
force-app/main/default/classes/OASClient.cls-meta.xml
11+
force-app/main/default/classes/OASOrder.cls
12+
force-app/main/default/classes/OASOrder.cls-meta.xml
13+
force-app/main/default/classes/OASPet.cls
14+
force-app/main/default/classes/OASPet.cls-meta.xml
15+
force-app/main/default/classes/OASPetApi.cls
16+
force-app/main/default/classes/OASPetApi.cls-meta.xml
17+
force-app/main/default/classes/OASResponseMock.cls
18+
force-app/main/default/classes/OASResponseMock.cls-meta.xml
19+
force-app/main/default/classes/OASStoreApi.cls
20+
force-app/main/default/classes/OASStoreApi.cls-meta.xml
21+
force-app/main/default/classes/OASTag.cls
22+
force-app/main/default/classes/OASTag.cls-meta.xml
23+
force-app/main/default/classes/OASTest.cls
24+
force-app/main/default/classes/OASTest.cls-meta.xml
25+
force-app/main/default/classes/OASUser.cls
26+
force-app/main/default/classes/OASUser.cls-meta.xml
27+
force-app/main/default/classes/OASUserApi.cls
28+
force-app/main/default/classes/OASUserApi.cls-meta.xml
29+
force-app/main/default/namedCredentials/OpenAPI_Petstore.namedCredential-meta.xml
30+
sfdx-project.json
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
.gitignore
2+
ApiClient.cpp
3+
ApiClient.h
4+
ApiConfiguration.cpp
5+
ApiConfiguration.h
6+
ApiException.cpp
7+
ApiException.h
8+
CMakeLists.txt
9+
HttpContent.cpp
10+
HttpContent.h
11+
IHttpBody.h
12+
JsonBody.cpp
13+
JsonBody.h
14+
ModelBase.cpp
15+
ModelBase.h
16+
MultipartFormData.cpp
17+
MultipartFormData.h
18+
Object.cpp
19+
Object.h
20+
README.md
21+
api/PetApi.cpp
22+
api/PetApi.h
23+
api/StoreApi.cpp
24+
api/StoreApi.h
25+
api/UserApi.cpp
26+
api/UserApi.h
27+
git_push.sh
28+
model/ApiResponse.cpp
29+
model/ApiResponse.h
30+
model/Category.cpp
31+
model/Category.h
32+
model/Order.cpp
33+
model/Order.h
34+
model/Pet.cpp
35+
model/Pet.h
36+
model/Tag.cpp
37+
model/Tag.h
38+
model/User.cpp
39+
model/User.h

0 commit comments

Comments
 (0)